cojson-storage-indexeddb 0.8.35 → 0.8.36
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/CHANGELOG.md +10 -0
- package/dist/idbClient.js +9 -6
- package/dist/idbClient.js.map +1 -1
- package/dist/idbNode.js +2 -2
- package/dist/idbNode.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/src/idbClient.ts +30 -43
- package/src/idbNode.ts +4 -4
- package/src/index.ts +1 -1
- package/dist/syncManager.js +0 -198
- package/dist/syncManager.js.map +0 -1
- package/dist/syncUtils.js +0 -95
- package/dist/syncUtils.js.map +0 -1
- package/dist/tests/fixtureMessages.js +0 -83
- package/dist/tests/fixtureMessages.js.map +0 -1
- package/dist/tests/getDependedOnCoValues.test.js +0 -149
- package/dist/tests/getDependedOnCoValues.test.js.map +0 -1
- package/dist/tests/syncManager.test.js +0 -251
- package/dist/tests/syncManager.test.js.map +0 -1
- package/src/syncManager.ts +0 -336
- package/src/syncUtils.ts +0 -146
- package/src/tests/fixtureMessages.ts +0 -95
- package/src/tests/getDependedOnCoValues.test.ts +0 -179
- package/src/tests/syncManager.test.ts +0 -337
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# cojson-storage-indexeddb
|
|
2
2
|
|
|
3
|
+
## 0.8.36
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1afbd2c: Refactor the SQLite and IndexedDB storage packages to extract common synchronization functionality into newly created cojson-storage package.
|
|
8
|
+
- Updated dependencies [441fe27]
|
|
9
|
+
- Updated dependencies [1afbd2c]
|
|
10
|
+
- cojson@0.8.36
|
|
11
|
+
- cojson-storage@0.8.36
|
|
12
|
+
|
|
3
13
|
## 0.8.35
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
package/dist/idbClient.js
CHANGED
|
@@ -57,11 +57,11 @@ export class IDBClient {
|
|
|
57
57
|
async getCoValueSessions(coValueRowId) {
|
|
58
58
|
return this.makeRequest(({ sessions }) => sessions.index("sessionsByCoValue").getAll(coValueRowId));
|
|
59
59
|
}
|
|
60
|
-
async getNewTransactionInSession(
|
|
61
|
-
return this.makeRequest(({ transactions }) => transactions.getAll(IDBKeyRange.bound([
|
|
60
|
+
async getNewTransactionInSession(sessionRowId, firstNewTxIdx) {
|
|
61
|
+
return this.makeRequest(({ transactions }) => transactions.getAll(IDBKeyRange.bound([sessionRowId, firstNewTxIdx], [sessionRowId, Infinity])));
|
|
62
62
|
}
|
|
63
|
-
async getSignatures(
|
|
64
|
-
return this.makeRequest(({ signatureAfter }) => signatureAfter.getAll(IDBKeyRange.bound([
|
|
63
|
+
async getSignatures(sessionRowId, firstNewTxIdx) {
|
|
64
|
+
return this.makeRequest(({ signatureAfter }) => signatureAfter.getAll(IDBKeyRange.bound([sessionRowId, firstNewTxIdx], [sessionRowId, Infinity])));
|
|
65
65
|
}
|
|
66
66
|
async addCoValue(msg) {
|
|
67
67
|
if (!msg.header) {
|
|
@@ -72,7 +72,7 @@ export class IDBClient {
|
|
|
72
72
|
header: msg.header,
|
|
73
73
|
})));
|
|
74
74
|
}
|
|
75
|
-
async addSessionUpdate(sessionRow,
|
|
75
|
+
async addSessionUpdate({ sessionUpdate, sessionRow, }) {
|
|
76
76
|
return this.makeRequest(({ sessions }) => sessions.put(sessionRow?.rowID
|
|
77
77
|
? {
|
|
78
78
|
rowID: sessionRow.rowID,
|
|
@@ -87,12 +87,15 @@ export class IDBClient {
|
|
|
87
87
|
tx: newTransaction,
|
|
88
88
|
}));
|
|
89
89
|
}
|
|
90
|
-
addSignatureAfter({ sessionRowID, idx, signature, }) {
|
|
90
|
+
async addSignatureAfter({ sessionRowID, idx, signature, }) {
|
|
91
91
|
return this.makeRequest(({ signatureAfter }) => signatureAfter.put({
|
|
92
92
|
ses: sessionRowID,
|
|
93
93
|
idx,
|
|
94
94
|
signature,
|
|
95
95
|
}));
|
|
96
96
|
}
|
|
97
|
+
async unitOfWork(operationsCallback) {
|
|
98
|
+
return Promise.all(operationsCallback());
|
|
99
|
+
}
|
|
97
100
|
}
|
|
98
101
|
//# sourceMappingURL=idbClient.js.map
|
package/dist/idbClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idbClient.js","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"idbClient.js","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"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"}
|
package/dist/idbNode.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cojsonInternals, } from "cojson";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { SyncManager } from "cojson-storage";
|
|
3
|
+
import { IDBClient } from "./idbClient.js";
|
|
4
4
|
export class IDBNode {
|
|
5
5
|
constructor(db, fromLocalNode, toLocalNode) {
|
|
6
6
|
this.dbClient = new IDBClient(db);
|
package/dist/idbNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idbNode.js","sourceRoot":"","sources":["../src/idbNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,GAChB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"idbNode.js","sourceRoot":"","sources":["../src/idbNode.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { IDBNode, IDBNode as IDBStorage } from "./idbNode";
|
|
1
|
+
export { IDBNode, IDBNode as IDBStorage } from "./idbNode.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cojson-storage-indexeddb",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.36",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "src/index.ts",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"cojson": "0.8.
|
|
9
|
+
"cojson": "0.8.36",
|
|
10
|
+
"cojson-storage": "0.8.36"
|
|
10
11
|
},
|
|
11
12
|
"devDependencies": {
|
|
12
13
|
"@vitest/browser": "^0.34.1",
|
package/src/idbClient.ts
CHANGED
|
@@ -1,39 +1,19 @@
|
|
|
1
|
-
import { CojsonInternalTypes
|
|
1
|
+
import { CojsonInternalTypes } from "cojson";
|
|
2
2
|
import { SyncPromise } from "./syncPromises";
|
|
3
3
|
import RawCoID = CojsonInternalTypes.RawCoID;
|
|
4
4
|
import Transaction = CojsonInternalTypes.Transaction;
|
|
5
5
|
import Signature = CojsonInternalTypes.Signature;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
tx: CojsonInternalTypes.Transaction;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export type SignatureAfterRow = {
|
|
21
|
-
ses: number;
|
|
22
|
-
idx: number;
|
|
23
|
-
signature: CojsonInternalTypes.Signature;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export type SessionRow = {
|
|
27
|
-
coValue: number;
|
|
28
|
-
sessionID: SessionID;
|
|
29
|
-
lastIdx: number;
|
|
30
|
-
lastSignature: CojsonInternalTypes.Signature;
|
|
31
|
-
bytesSinceLastSignature?: number;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export type StoredSessionRow = SessionRow & { rowID: number };
|
|
35
|
-
|
|
36
|
-
export class IDBClient {
|
|
6
|
+
import {
|
|
7
|
+
CoValueRow,
|
|
8
|
+
DBClientInterface,
|
|
9
|
+
SessionRow,
|
|
10
|
+
SignatureAfterRow,
|
|
11
|
+
StoredCoValueRow,
|
|
12
|
+
StoredSessionRow,
|
|
13
|
+
TransactionRow,
|
|
14
|
+
} from "cojson-storage";
|
|
15
|
+
|
|
16
|
+
export class IDBClient implements DBClientInterface {
|
|
37
17
|
private db;
|
|
38
18
|
|
|
39
19
|
currentTx:
|
|
@@ -148,29 +128,29 @@ export class IDBClient {
|
|
|
148
128
|
}
|
|
149
129
|
|
|
150
130
|
async getNewTransactionInSession(
|
|
151
|
-
|
|
131
|
+
sessionRowId: number,
|
|
152
132
|
firstNewTxIdx: number,
|
|
153
133
|
): Promise<TransactionRow[]> {
|
|
154
134
|
return this.makeRequest<TransactionRow[]>(({ transactions }) =>
|
|
155
135
|
transactions.getAll(
|
|
156
136
|
IDBKeyRange.bound(
|
|
157
|
-
[
|
|
158
|
-
[
|
|
137
|
+
[sessionRowId, firstNewTxIdx],
|
|
138
|
+
[sessionRowId, Infinity],
|
|
159
139
|
),
|
|
160
140
|
),
|
|
161
141
|
);
|
|
162
142
|
}
|
|
163
143
|
|
|
164
144
|
async getSignatures(
|
|
165
|
-
|
|
145
|
+
sessionRowId: number,
|
|
166
146
|
firstNewTxIdx: number,
|
|
167
147
|
): Promise<SignatureAfterRow[]> {
|
|
168
148
|
return this.makeRequest<SignatureAfterRow[]>(
|
|
169
149
|
({ signatureAfter }: { signatureAfter: IDBObjectStore }) =>
|
|
170
150
|
signatureAfter.getAll(
|
|
171
151
|
IDBKeyRange.bound(
|
|
172
|
-
[
|
|
173
|
-
[
|
|
152
|
+
[sessionRowId, firstNewTxIdx],
|
|
153
|
+
[sessionRowId, Infinity],
|
|
174
154
|
),
|
|
175
155
|
),
|
|
176
156
|
);
|
|
@@ -191,10 +171,13 @@ export class IDBClient {
|
|
|
191
171
|
)) as number;
|
|
192
172
|
}
|
|
193
173
|
|
|
194
|
-
async addSessionUpdate(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
174
|
+
async addSessionUpdate({
|
|
175
|
+
sessionUpdate,
|
|
176
|
+
sessionRow,
|
|
177
|
+
}: {
|
|
178
|
+
sessionUpdate: SessionRow;
|
|
179
|
+
sessionRow?: StoredSessionRow;
|
|
180
|
+
}): Promise<number> {
|
|
198
181
|
return this.makeRequest<number>(({ sessions }) =>
|
|
199
182
|
sessions.put(
|
|
200
183
|
sessionRow?.rowID
|
|
@@ -221,7 +204,7 @@ export class IDBClient {
|
|
|
221
204
|
);
|
|
222
205
|
}
|
|
223
206
|
|
|
224
|
-
addSignatureAfter({
|
|
207
|
+
async addSignatureAfter({
|
|
225
208
|
sessionRowID,
|
|
226
209
|
idx,
|
|
227
210
|
signature,
|
|
@@ -234,4 +217,8 @@ export class IDBClient {
|
|
|
234
217
|
} satisfies SignatureAfterRow),
|
|
235
218
|
);
|
|
236
219
|
}
|
|
220
|
+
|
|
221
|
+
async unitOfWork(operationsCallback: () => unknown[]) {
|
|
222
|
+
return Promise.all(operationsCallback());
|
|
223
|
+
}
|
|
237
224
|
}
|
package/src/idbNode.ts
CHANGED
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
Peer,
|
|
5
5
|
cojsonInternals,
|
|
6
6
|
} from "cojson";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { SyncManager } from "cojson-storage";
|
|
8
|
+
import { IDBClient } from "./idbClient.js";
|
|
9
9
|
|
|
10
10
|
export class IDBNode {
|
|
11
|
-
private dbClient: IDBClient;
|
|
12
|
-
private syncManager: SyncManager;
|
|
11
|
+
private readonly dbClient: IDBClient;
|
|
12
|
+
private readonly syncManager: SyncManager;
|
|
13
13
|
|
|
14
14
|
constructor(
|
|
15
15
|
db: IDBDatabase,
|
package/src/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { IDBNode, IDBNode as IDBStorage } from "./idbNode";
|
|
1
|
+
export { IDBNode, IDBNode as IDBStorage } from "./idbNode.js";
|
package/dist/syncManager.js
DELETED
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import { MAX_RECOMMENDED_TX_SIZE, cojsonInternals, emptyKnownState, } from "cojson";
|
|
2
|
-
import { SyncPromise } from "./syncPromises.js";
|
|
3
|
-
import { collectNewTxs, getDependedOnCoValues } from "./syncUtils";
|
|
4
|
-
export class SyncManager {
|
|
5
|
-
constructor(idbClient, toLocalNode) {
|
|
6
|
-
this.toLocalNode = toLocalNode;
|
|
7
|
-
this.idbClient = idbClient;
|
|
8
|
-
}
|
|
9
|
-
async handleSyncMessage(msg) {
|
|
10
|
-
switch (msg.action) {
|
|
11
|
-
case "load":
|
|
12
|
-
await this.handleLoad(msg);
|
|
13
|
-
break;
|
|
14
|
-
case "content":
|
|
15
|
-
await this.handleContent(msg);
|
|
16
|
-
break;
|
|
17
|
-
case "known":
|
|
18
|
-
await this.handleKnown(msg);
|
|
19
|
-
break;
|
|
20
|
-
case "done":
|
|
21
|
-
await this.handleDone(msg);
|
|
22
|
-
break;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
async handleSessionUpdate({ sessionRow, peerKnownState, newContentMessages, }) {
|
|
26
|
-
if (sessionRow.lastIdx <= (peerKnownState.sessions[sessionRow.sessionID] || 0))
|
|
27
|
-
return;
|
|
28
|
-
const firstNewTxIdx = peerKnownState.sessions[sessionRow.sessionID] || 0;
|
|
29
|
-
const signaturesAndIdxs = await this.idbClient.getSignatures(sessionRow, firstNewTxIdx);
|
|
30
|
-
const newTxsInSession = await this.idbClient.getNewTransactionInSession(sessionRow, firstNewTxIdx);
|
|
31
|
-
collectNewTxs(newTxsInSession, newContentMessages, sessionRow, signaturesAndIdxs, peerKnownState, firstNewTxIdx);
|
|
32
|
-
}
|
|
33
|
-
async sendNewContent(coValueKnownState) {
|
|
34
|
-
const outputMessages = await this.collectCoValueData(coValueKnownState);
|
|
35
|
-
// reverse it to send the top level id the last in the order
|
|
36
|
-
const collectedMessages = Object.values(outputMessages).reverse();
|
|
37
|
-
collectedMessages.forEach(({ knownMessage, contentMessages }) => {
|
|
38
|
-
this.sendStateMessage(knownMessage);
|
|
39
|
-
contentMessages?.length &&
|
|
40
|
-
contentMessages.forEach((msg) => this.sendStateMessage(msg));
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
async collectCoValueData(peerKnownState, messageMap = {}, asDependencyOf) {
|
|
44
|
-
if (messageMap[peerKnownState.id]) {
|
|
45
|
-
return messageMap;
|
|
46
|
-
}
|
|
47
|
-
const coValueRow = await this.idbClient.getCoValue(peerKnownState.id);
|
|
48
|
-
if (!coValueRow) {
|
|
49
|
-
const emptyKnownMessage = {
|
|
50
|
-
action: "known",
|
|
51
|
-
...emptyKnownState(peerKnownState.id),
|
|
52
|
-
};
|
|
53
|
-
asDependencyOf && (emptyKnownMessage.asDependencyOf = asDependencyOf);
|
|
54
|
-
messageMap[peerKnownState.id] = { knownMessage: emptyKnownMessage };
|
|
55
|
-
return messageMap;
|
|
56
|
-
}
|
|
57
|
-
const allCoValueSessions = await this.idbClient.getCoValueSessions(coValueRow.rowID);
|
|
58
|
-
const newCoValueKnownState = {
|
|
59
|
-
id: coValueRow.id,
|
|
60
|
-
header: true,
|
|
61
|
-
sessions: {},
|
|
62
|
-
};
|
|
63
|
-
const newContentMessages = [
|
|
64
|
-
{
|
|
65
|
-
action: "content",
|
|
66
|
-
id: coValueRow.id,
|
|
67
|
-
header: coValueRow.header,
|
|
68
|
-
new: {},
|
|
69
|
-
priority: cojsonInternals.getPriorityFromHeader(coValueRow.header),
|
|
70
|
-
},
|
|
71
|
-
];
|
|
72
|
-
await Promise.all(allCoValueSessions.map((sessionRow) => {
|
|
73
|
-
newCoValueKnownState.sessions[sessionRow.sessionID] =
|
|
74
|
-
sessionRow.lastIdx;
|
|
75
|
-
// Collect new sessions data into newContentMessages
|
|
76
|
-
return this.handleSessionUpdate({
|
|
77
|
-
sessionRow,
|
|
78
|
-
peerKnownState,
|
|
79
|
-
newContentMessages,
|
|
80
|
-
});
|
|
81
|
-
}));
|
|
82
|
-
const dependedOnCoValuesList = getDependedOnCoValues({
|
|
83
|
-
coValueRow,
|
|
84
|
-
newContentMessages,
|
|
85
|
-
});
|
|
86
|
-
const knownMessage = {
|
|
87
|
-
action: "known",
|
|
88
|
-
...newCoValueKnownState,
|
|
89
|
-
};
|
|
90
|
-
asDependencyOf && (knownMessage.asDependencyOf = asDependencyOf);
|
|
91
|
-
messageMap[newCoValueKnownState.id] = {
|
|
92
|
-
knownMessage: knownMessage,
|
|
93
|
-
contentMessages: newContentMessages,
|
|
94
|
-
};
|
|
95
|
-
await Promise.all(dependedOnCoValuesList.map((dependedOnCoValue) => this.collectCoValueData({
|
|
96
|
-
id: dependedOnCoValue,
|
|
97
|
-
header: false,
|
|
98
|
-
sessions: {},
|
|
99
|
-
}, messageMap, asDependencyOf || coValueRow.id)));
|
|
100
|
-
return messageMap;
|
|
101
|
-
}
|
|
102
|
-
handleLoad(msg) {
|
|
103
|
-
return this.sendNewContent(msg);
|
|
104
|
-
}
|
|
105
|
-
async handleContent(msg) {
|
|
106
|
-
const coValueRow = await this.idbClient.getCoValue(msg.id);
|
|
107
|
-
// We have no info about coValue header
|
|
108
|
-
const invalidAssumptionOnHeaderPresence = !msg.header && !coValueRow;
|
|
109
|
-
if (invalidAssumptionOnHeaderPresence) {
|
|
110
|
-
return this.sendStateMessage({
|
|
111
|
-
action: "known",
|
|
112
|
-
id: msg.id,
|
|
113
|
-
header: false,
|
|
114
|
-
sessions: {},
|
|
115
|
-
isCorrection: true,
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
const storedCoValueRowID = coValueRow
|
|
119
|
-
? coValueRow.rowID
|
|
120
|
-
: await this.idbClient.addCoValue(msg);
|
|
121
|
-
const allOurSessionsEntries = await this.idbClient.getCoValueSessions(storedCoValueRowID);
|
|
122
|
-
const allOurSessions = Object.fromEntries(allOurSessionsEntries.map((row) => [row.sessionID, row]));
|
|
123
|
-
const ourKnown = {
|
|
124
|
-
id: msg.id,
|
|
125
|
-
header: true,
|
|
126
|
-
sessions: {},
|
|
127
|
-
};
|
|
128
|
-
let invalidAssumptions = false;
|
|
129
|
-
await Promise.all(Object.keys(msg.new).map((sessionID) => {
|
|
130
|
-
const sessionRow = allOurSessions[sessionID];
|
|
131
|
-
if (sessionRow) {
|
|
132
|
-
ourKnown.sessions[sessionRow.sessionID] = sessionRow.lastIdx;
|
|
133
|
-
}
|
|
134
|
-
if ((sessionRow?.lastIdx || 0) < (msg.new[sessionID]?.after || 0)) {
|
|
135
|
-
invalidAssumptions = true;
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
return this.putNewTxs(msg, sessionID, sessionRow, storedCoValueRowID);
|
|
139
|
-
}
|
|
140
|
-
}));
|
|
141
|
-
if (invalidAssumptions) {
|
|
142
|
-
this.sendStateMessage({
|
|
143
|
-
action: "known",
|
|
144
|
-
...ourKnown,
|
|
145
|
-
isCorrection: invalidAssumptions,
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
async putNewTxs(msg, sessionID, sessionRow, storedCoValueRowID) {
|
|
150
|
-
const newTransactions = msg.new[sessionID]?.newTransactions || [];
|
|
151
|
-
const actuallyNewOffset = (sessionRow?.lastIdx || 0) - (msg.new[sessionID]?.after || 0);
|
|
152
|
-
const actuallyNewTransactions = newTransactions.slice(actuallyNewOffset);
|
|
153
|
-
let newBytesSinceLastSignature = (sessionRow?.bytesSinceLastSignature || 0) +
|
|
154
|
-
actuallyNewTransactions.reduce((sum, tx) => sum +
|
|
155
|
-
(tx.privacy === "private"
|
|
156
|
-
? tx.encryptedChanges.length
|
|
157
|
-
: tx.changes.length), 0);
|
|
158
|
-
const newLastIdx = (sessionRow?.lastIdx || 0) + actuallyNewTransactions.length;
|
|
159
|
-
let shouldWriteSignature = false;
|
|
160
|
-
if (newBytesSinceLastSignature > MAX_RECOMMENDED_TX_SIZE) {
|
|
161
|
-
shouldWriteSignature = true;
|
|
162
|
-
newBytesSinceLastSignature = 0;
|
|
163
|
-
}
|
|
164
|
-
const nextIdx = sessionRow?.lastIdx || 0;
|
|
165
|
-
const sessionUpdate = {
|
|
166
|
-
coValue: storedCoValueRowID,
|
|
167
|
-
sessionID: sessionID,
|
|
168
|
-
lastIdx: newLastIdx,
|
|
169
|
-
lastSignature: msg.new[sessionID].lastSignature,
|
|
170
|
-
bytesSinceLastSignature: newBytesSinceLastSignature,
|
|
171
|
-
};
|
|
172
|
-
const sessionRowID = await this.idbClient.addSessionUpdate(sessionRow, sessionUpdate);
|
|
173
|
-
let maybePutRequest;
|
|
174
|
-
if (shouldWriteSignature) {
|
|
175
|
-
maybePutRequest = this.idbClient.addSignatureAfter({
|
|
176
|
-
sessionRowID,
|
|
177
|
-
idx: newLastIdx - 1,
|
|
178
|
-
signature: msg.new[sessionID].lastSignature,
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
maybePutRequest = SyncPromise.resolve();
|
|
183
|
-
}
|
|
184
|
-
return maybePutRequest.then(() => Promise.all(actuallyNewTransactions.map((newTransaction, i) => {
|
|
185
|
-
return this.idbClient.addTransaction(sessionRowID, nextIdx + i, newTransaction);
|
|
186
|
-
})));
|
|
187
|
-
}
|
|
188
|
-
handleKnown(_msg) {
|
|
189
|
-
// We don't intend to use IndexedDB itself as a synchronisation mechanism, so we can ignore the known messages
|
|
190
|
-
}
|
|
191
|
-
async sendStateMessage(msg) {
|
|
192
|
-
return this.toLocalNode
|
|
193
|
-
.push(msg)
|
|
194
|
-
.catch((e) => console.error(`Error sending ${msg.action} state, id ${msg.id}`, e));
|
|
195
|
-
}
|
|
196
|
-
handleDone(_msg) { }
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=syncManager.js.map
|
package/dist/syncManager.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"syncManager.js","sourceRoot":"","sources":["../src/syncManager.ts"],"names":[],"mappings":"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"}
|
package/dist/syncUtils.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { cojsonInternals, } from "cojson";
|
|
2
|
-
export function collectNewTxs(newTxsInSession, newContentMessages, sessionRow, signaturesAndIdxs, theirKnown, firstNewTxIdx) {
|
|
3
|
-
let idx = firstNewTxIdx;
|
|
4
|
-
for (const tx of newTxsInSession) {
|
|
5
|
-
let sessionEntry = newContentMessages[newContentMessages.length - 1].new[sessionRow.sessionID];
|
|
6
|
-
if (!sessionEntry) {
|
|
7
|
-
sessionEntry = {
|
|
8
|
-
after: idx,
|
|
9
|
-
lastSignature: "WILL_BE_REPLACED",
|
|
10
|
-
newTransactions: [],
|
|
11
|
-
};
|
|
12
|
-
newContentMessages[newContentMessages.length - 1].new[sessionRow.sessionID] = sessionEntry;
|
|
13
|
-
}
|
|
14
|
-
sessionEntry.newTransactions.push(tx.tx);
|
|
15
|
-
if (signaturesAndIdxs[0] && idx === signaturesAndIdxs[0].idx) {
|
|
16
|
-
sessionEntry.lastSignature = signaturesAndIdxs[0].signature;
|
|
17
|
-
signaturesAndIdxs.shift();
|
|
18
|
-
newContentMessages.push({
|
|
19
|
-
action: "content",
|
|
20
|
-
id: theirKnown.id,
|
|
21
|
-
new: {},
|
|
22
|
-
priority: cojsonInternals.getPriorityFromHeader(undefined),
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
else if (idx === firstNewTxIdx + newTxsInSession.length - 1) {
|
|
26
|
-
sessionEntry.lastSignature = sessionRow.lastSignature;
|
|
27
|
-
}
|
|
28
|
-
idx += 1;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
export function getDependedOnCoValues({ coValueRow, newContentMessages, }) {
|
|
32
|
-
return coValueRow.header.ruleset.type === "group"
|
|
33
|
-
? getGroupDependedOnCoValues(newContentMessages)
|
|
34
|
-
: coValueRow.header.ruleset.type === "ownedByGroup"
|
|
35
|
-
? getOwnedByGroupDependedOnCoValues(coValueRow, newContentMessages)
|
|
36
|
-
: [];
|
|
37
|
-
}
|
|
38
|
-
function getGroupDependedOnCoValues(newContentMessages) {
|
|
39
|
-
const keys = [];
|
|
40
|
-
/**
|
|
41
|
-
* Collect all the signing keys inside the transactions to list all the
|
|
42
|
-
* dependencies required to correctly access the CoValue.
|
|
43
|
-
*/
|
|
44
|
-
for (const piece of newContentMessages) {
|
|
45
|
-
for (const sessionEntry of Object.values(piece.new)) {
|
|
46
|
-
for (const tx of sessionEntry.newTransactions) {
|
|
47
|
-
if (tx.privacy !== "trusting")
|
|
48
|
-
continue;
|
|
49
|
-
const changes = safeParseChanges(tx.changes);
|
|
50
|
-
for (const change of changes) {
|
|
51
|
-
if (change &&
|
|
52
|
-
typeof change === "object" &&
|
|
53
|
-
"op" in change &&
|
|
54
|
-
change.op === "set" &&
|
|
55
|
-
"key" in change &&
|
|
56
|
-
change.key) {
|
|
57
|
-
const key = cojsonInternals.getGroupDependentKey(change.key);
|
|
58
|
-
if (key) {
|
|
59
|
-
keys.push(key);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return keys;
|
|
67
|
-
}
|
|
68
|
-
function getOwnedByGroupDependedOnCoValues(coValueRow, newContentMessages) {
|
|
69
|
-
if (coValueRow.header.ruleset.type !== "ownedByGroup")
|
|
70
|
-
return [];
|
|
71
|
-
const keys = [coValueRow.header.ruleset.group];
|
|
72
|
-
/**
|
|
73
|
-
* Collect all the signing keys inside the transactions to list all the
|
|
74
|
-
* dependencies required to correctly access the CoValue.
|
|
75
|
-
*/
|
|
76
|
-
for (const piece of newContentMessages) {
|
|
77
|
-
for (const sessionID of Object.keys(piece.new)) {
|
|
78
|
-
const accountId = cojsonInternals.accountOrAgentIDfromSessionID(sessionID);
|
|
79
|
-
if (cojsonInternals.isAccountID(accountId) &&
|
|
80
|
-
accountId !== coValueRow.id) {
|
|
81
|
-
keys.push(accountId);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return keys;
|
|
86
|
-
}
|
|
87
|
-
function safeParseChanges(changes) {
|
|
88
|
-
try {
|
|
89
|
-
return cojsonInternals.parseJSON(changes);
|
|
90
|
-
}
|
|
91
|
-
catch (e) {
|
|
92
|
-
return [];
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=syncUtils.js.map
|
package/dist/syncUtils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"syncUtils.js","sourceRoot":"","sources":["../src/syncUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,eAAe,GAChB,MAAM,QAAQ,CAAC;AAQhB,MAAM,UAAU,aAAa,CAC3B,eAAiC,EACjC,kBAA2D,EAC3D,UAA4B,EAC5B,iBAAsC,EACtC,UAAiD,EACjD,aAAqB;IAErB,IAAI,GAAG,GAAG,aAAa,CAAC;IAExB,KAAK,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,YAAY,GACd,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,CACpD,UAAU,CAAC,SAAS,CACrB,CAAC;QACJ,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,GAAG;gBACb,KAAK,EAAE,GAAG;gBACV,aAAa,EAAE,kBAAmD;gBAClE,eAAe,EAAE,EAAE;aACpB,CAAC;YACF,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,CACpD,UAAU,CAAC,SAAS,CACrB,GAAG,YAAY,CAAC;QACnB,CAAC;QAED,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YAC7D,YAAY,CAAC,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5D,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC1B,kBAAkB,CAAC,IAAI,CAAC;gBACtB,MAAM,EAAE,SAAS;gBACjB,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,eAAe,CAAC,qBAAqB,CAAC,SAAS,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,YAAY,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;QACxD,CAAC;QACD,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACpC,UAAU,EACV,kBAAkB,GAInB;IACC,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;QAC/C,CAAC,CAAC,0BAA0B,CAAC,kBAAkB,CAAC;QAChD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc;YACjD,CAAC,CAAC,iCAAiC,CAAC,UAAU,EAAE,kBAAkB,CAAC;YACnE,CAAC,CAAC,EAAE,CAAC;AACX,CAAC;AAED,SAAS,0BAA0B,CACjC,kBAA2D;IAE3D,MAAM,IAAI,GAAkC,EAAE,CAAC;IAE/C;;;OAGG;IACH,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,KAAK,MAAM,EAAE,IAAI,YAAY,CAAC,eAAe,EAAE,CAAC;gBAC9C,IAAI,EAAE,CAAC,OAAO,KAAK,UAAU;oBAAE,SAAS;gBAExC,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,IACE,MAAM;wBACN,OAAO,MAAM,KAAK,QAAQ;wBAC1B,IAAI,IAAI,MAAM;wBACd,MAAM,CAAC,EAAE,KAAK,KAAK;wBACnB,KAAK,IAAI,MAAM;wBACf,MAAM,CAAC,GAAG,EACV,CAAC;wBACD,MAAM,GAAG,GAAG,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAE7D,IAAI,GAAG,EAAE,CAAC;4BACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACjB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iCAAiC,CACxC,UAA4B,EAC5B,kBAA2D;IAE3D,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,EAAE,CAAC;IAEjE,MAAM,IAAI,GAAkC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9E;;;OAGG;IACH,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,EAAE,CAAC;YAC9D,MAAM,SAAS,GACb,eAAe,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC;YAE3D,IACE,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC;gBACtC,SAAS,KAAK,UAAU,CAAC,EAAE,EAC3B,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAiC;IACzD,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|