cojson-storage-indexeddb 0.8.34 → 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 CHANGED
@@ -1,5 +1,27 @@
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
+
13
+ ## 0.8.35
14
+
15
+ ### Patch Changes
16
+
17
+ - 8b87117: Implement Group Inheritance
18
+ - 46f2ab8: Optimize the communication with the sync manager
19
+ - Updated dependencies [3f15a23]
20
+ - Updated dependencies [46f2ab8]
21
+ - Updated dependencies [8b87117]
22
+ - Updated dependencies [a6b6ccf]
23
+ - cojson@0.8.35
24
+
3
25
  ## 0.8.34
4
26
 
5
27
  ### Patch Changes
@@ -0,0 +1,101 @@
1
+ import { SyncPromise } from "./syncPromises";
2
+ export class IDBClient {
3
+ constructor(db) {
4
+ this.currentTxID = 0;
5
+ this.db = db;
6
+ }
7
+ makeRequest(handler) {
8
+ return new SyncPromise((resolve, reject) => {
9
+ let txEntry = this.currentTx;
10
+ const requestEntry = ({ stores, }) => {
11
+ const request = handler(stores);
12
+ request.onerror = () => {
13
+ console.error("Error in request", request.error);
14
+ this.currentTx = undefined;
15
+ reject(request.error);
16
+ };
17
+ request.onsuccess = () => {
18
+ const value = request.result;
19
+ resolve(value);
20
+ const next = txEntry.pendingRequests.shift();
21
+ if (next) {
22
+ next({ stores });
23
+ }
24
+ else {
25
+ if (this.currentTx === txEntry) {
26
+ this.currentTx = undefined;
27
+ }
28
+ }
29
+ };
30
+ };
31
+ // Transaction batching
32
+ if (!txEntry || performance.now() - txEntry.startedAt > 20) {
33
+ const tx = this.db.transaction(["coValues", "sessions", "transactions", "signatureAfter"], "readwrite");
34
+ txEntry = {
35
+ id: this.currentTxID++,
36
+ tx,
37
+ stores: {
38
+ coValues: tx.objectStore("coValues"),
39
+ sessions: tx.objectStore("sessions"),
40
+ transactions: tx.objectStore("transactions"),
41
+ signatureAfter: tx.objectStore("signatureAfter"),
42
+ },
43
+ startedAt: performance.now(),
44
+ pendingRequests: [],
45
+ };
46
+ this.currentTx = txEntry;
47
+ requestEntry(txEntry);
48
+ }
49
+ else {
50
+ txEntry.pendingRequests.push(requestEntry);
51
+ }
52
+ });
53
+ }
54
+ async getCoValue(coValueId) {
55
+ return this.makeRequest(({ coValues }) => coValues.index("coValuesById").get(coValueId));
56
+ }
57
+ async getCoValueSessions(coValueRowId) {
58
+ return this.makeRequest(({ sessions }) => sessions.index("sessionsByCoValue").getAll(coValueRowId));
59
+ }
60
+ async getNewTransactionInSession(sessionRowId, firstNewTxIdx) {
61
+ return this.makeRequest(({ transactions }) => transactions.getAll(IDBKeyRange.bound([sessionRowId, firstNewTxIdx], [sessionRowId, Infinity])));
62
+ }
63
+ async getSignatures(sessionRowId, firstNewTxIdx) {
64
+ return this.makeRequest(({ signatureAfter }) => signatureAfter.getAll(IDBKeyRange.bound([sessionRowId, firstNewTxIdx], [sessionRowId, Infinity])));
65
+ }
66
+ async addCoValue(msg) {
67
+ if (!msg.header) {
68
+ throw new Error("Header is required, coId: " + msg.id);
69
+ }
70
+ return (await this.makeRequest(({ coValues }) => coValues.put({
71
+ id: msg.id,
72
+ header: msg.header,
73
+ })));
74
+ }
75
+ async addSessionUpdate({ sessionUpdate, sessionRow, }) {
76
+ return this.makeRequest(({ sessions }) => sessions.put(sessionRow?.rowID
77
+ ? {
78
+ rowID: sessionRow.rowID,
79
+ ...sessionUpdate,
80
+ }
81
+ : sessionUpdate));
82
+ }
83
+ addTransaction(sessionRowID, idx, newTransaction) {
84
+ return this.makeRequest(({ transactions }) => transactions.add({
85
+ ses: sessionRowID,
86
+ idx,
87
+ tx: newTransaction,
88
+ }));
89
+ }
90
+ async addSignatureAfter({ sessionRowID, idx, signature, }) {
91
+ return this.makeRequest(({ signatureAfter }) => signatureAfter.put({
92
+ ses: sessionRowID,
93
+ idx,
94
+ signature,
95
+ }));
96
+ }
97
+ async unitOfWork(operationsCallback) {
98
+ return Promise.all(operationsCallback());
99
+ }
100
+ }
101
+ //# sourceMappingURL=idbClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idbClient.js","sourceRoot":"","sources":["../src/idbClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { cojsonInternals, } from "cojson";
2
+ import { SyncManager } from "cojson-storage";
3
+ import { IDBClient } from "./idbClient.js";
4
+ export class IDBNode {
5
+ constructor(db, fromLocalNode, toLocalNode) {
6
+ this.dbClient = new IDBClient(db);
7
+ this.syncManager = new SyncManager(this.dbClient, toLocalNode);
8
+ const processMessages = async () => {
9
+ for await (const msg of fromLocalNode) {
10
+ try {
11
+ if (msg === "Disconnected" || msg === "PingTimeout") {
12
+ throw new Error("Unexpected Disconnected message");
13
+ }
14
+ await this.syncManager.handleSyncMessage(msg);
15
+ }
16
+ catch (e) {
17
+ console.error(new Error(`Error reading from localNode, handling msg\n\n${JSON.stringify(msg, (k, v) => k === "changes" || k === "encryptedChanges"
18
+ ? v.slice(0, 20) + "..."
19
+ : v)}`, { cause: e }));
20
+ }
21
+ }
22
+ };
23
+ processMessages().catch((e) => console.error("Error in processMessages in IndexedDB", e));
24
+ }
25
+ static async asPeer({ trace, localNodeName = "local", } = {
26
+ localNodeName: "local",
27
+ }) {
28
+ const [localNodeAsPeer, storageAsPeer] = cojsonInternals.connectedPeers(localNodeName, "indexedDB", {
29
+ peer1role: "client",
30
+ peer2role: "storage",
31
+ trace,
32
+ crashOnClose: true,
33
+ });
34
+ await IDBNode.open(localNodeAsPeer.incoming, localNodeAsPeer.outgoing);
35
+ return { ...storageAsPeer, priority: 100 };
36
+ }
37
+ static async open(fromLocalNode, toLocalNode) {
38
+ const dbPromise = new Promise((resolve, reject) => {
39
+ const request = indexedDB.open("jazz-storage", 4);
40
+ request.onerror = () => {
41
+ reject(request.error);
42
+ };
43
+ request.onsuccess = () => {
44
+ resolve(request.result);
45
+ };
46
+ request.onupgradeneeded = async (ev) => {
47
+ const db = request.result;
48
+ if (ev.oldVersion === 0) {
49
+ const coValues = db.createObjectStore("coValues", {
50
+ autoIncrement: true,
51
+ keyPath: "rowID",
52
+ });
53
+ coValues.createIndex("coValuesById", "id", {
54
+ unique: true,
55
+ });
56
+ const sessions = db.createObjectStore("sessions", {
57
+ autoIncrement: true,
58
+ keyPath: "rowID",
59
+ });
60
+ sessions.createIndex("sessionsByCoValue", "coValue");
61
+ sessions.createIndex("uniqueSessions", ["coValue", "sessionID"], {
62
+ unique: true,
63
+ });
64
+ db.createObjectStore("transactions", {
65
+ keyPath: ["ses", "idx"],
66
+ });
67
+ }
68
+ if (ev.oldVersion <= 1) {
69
+ db.createObjectStore("signatureAfter", {
70
+ keyPath: ["ses", "idx"],
71
+ });
72
+ }
73
+ };
74
+ });
75
+ return new IDBNode(await dbPromise, fromLocalNode, toLocalNode);
76
+ }
77
+ }
78
+ //# sourceMappingURL=idbNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idbNode.js","sourceRoot":"","sources":["../src/idbNode.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,411 +1,2 @@
1
- import { MAX_RECOMMENDED_TX_SIZE, cojsonInternals, } from "cojson";
2
- import { SyncPromise } from "./syncPromises.js";
3
- export class IDBStorage {
4
- constructor(db, fromLocalNode, toLocalNode) {
5
- this.currentTxID = 0;
6
- this.db = db;
7
- this.toLocalNode = toLocalNode;
8
- const processMessages = async () => {
9
- for await (const msg of fromLocalNode) {
10
- try {
11
- if (msg === "Disconnected" || msg === "PingTimeout") {
12
- throw new Error("Unexpected Disconnected message");
13
- }
14
- await this.handleSyncMessage(msg);
15
- }
16
- catch (e) {
17
- console.error(new Error(`Error reading from localNode, handling msg\n\n${JSON.stringify(msg, (k, v) => k === "changes" || k === "encryptedChanges"
18
- ? v.slice(0, 20) + "..."
19
- : v)}`, { cause: e }));
20
- }
21
- }
22
- };
23
- processMessages().catch((e) => console.error("Error in processMessages in IndexedDB", e));
24
- }
25
- static async asPeer({ trace, localNodeName = "local", } = {
26
- localNodeName: "local",
27
- }) {
28
- const [localNodeAsPeer, storageAsPeer] = cojsonInternals.connectedPeers(localNodeName, "indexedDB", {
29
- peer1role: "client",
30
- peer2role: "storage",
31
- trace,
32
- crashOnClose: true,
33
- });
34
- await IDBStorage.open(localNodeAsPeer.incoming, localNodeAsPeer.outgoing);
35
- return { ...storageAsPeer, priority: 100 };
36
- }
37
- static async open(fromLocalNode, toLocalNode) {
38
- const dbPromise = new Promise((resolve, reject) => {
39
- const request = indexedDB.open("jazz-storage", 4);
40
- request.onerror = () => {
41
- reject(request.error);
42
- };
43
- request.onsuccess = () => {
44
- resolve(request.result);
45
- };
46
- request.onupgradeneeded = async (ev) => {
47
- const db = request.result;
48
- if (ev.oldVersion === 0) {
49
- const coValues = db.createObjectStore("coValues", {
50
- autoIncrement: true,
51
- keyPath: "rowID",
52
- });
53
- coValues.createIndex("coValuesById", "id", {
54
- unique: true,
55
- });
56
- const sessions = db.createObjectStore("sessions", {
57
- autoIncrement: true,
58
- keyPath: "rowID",
59
- });
60
- sessions.createIndex("sessionsByCoValue", "coValue");
61
- sessions.createIndex("uniqueSessions", ["coValue", "sessionID"], {
62
- unique: true,
63
- });
64
- db.createObjectStore("transactions", {
65
- keyPath: ["ses", "idx"],
66
- });
67
- }
68
- if (ev.oldVersion <= 1) {
69
- db.createObjectStore("signatureAfter", {
70
- keyPath: ["ses", "idx"],
71
- });
72
- }
73
- };
74
- });
75
- return new IDBStorage(await dbPromise, fromLocalNode, toLocalNode);
76
- }
77
- async handleSyncMessage(msg) {
78
- switch (msg.action) {
79
- case "load":
80
- await this.handleLoad(msg);
81
- break;
82
- case "content":
83
- await this.handleContent(msg);
84
- break;
85
- case "known":
86
- await this.handleKnown(msg);
87
- break;
88
- case "done":
89
- await this.handleDone(msg);
90
- break;
91
- }
92
- }
93
- makeRequest(handler) {
94
- return new SyncPromise((resolve, reject) => {
95
- let txEntry = this.currentTx;
96
- const requestEntry = ({ stores, }) => {
97
- const request = handler(stores);
98
- request.onerror = () => {
99
- console.error("Error in request", request.error);
100
- this.currentTx = undefined;
101
- reject(request.error);
102
- // TODO: recover pending requests in new tx
103
- };
104
- request.onsuccess = () => {
105
- const value = request.result;
106
- resolve(value);
107
- const next = txEntry.pendingRequests.shift();
108
- if (next) {
109
- next({ stores });
110
- }
111
- else {
112
- if (this.currentTx === txEntry) {
113
- this.currentTx = undefined;
114
- }
115
- }
116
- };
117
- };
118
- if (!txEntry || performance.now() - txEntry.startedAt > 20) {
119
- const tx = this.db.transaction(["coValues", "sessions", "transactions", "signatureAfter"], "readwrite");
120
- txEntry = {
121
- id: this.currentTxID++,
122
- tx,
123
- stores: {
124
- coValues: tx.objectStore("coValues"),
125
- sessions: tx.objectStore("sessions"),
126
- transactions: tx.objectStore("transactions"),
127
- signatureAfter: tx.objectStore("signatureAfter"),
128
- },
129
- startedAt: performance.now(),
130
- pendingRequests: [],
131
- };
132
- // console.time("IndexedDB TX" + txEntry.id);
133
- // txEntry.tx.oncomplete = () => {
134
- // console.timeEnd("IndexedDB TX" + txEntry!.id);
135
- // };
136
- this.currentTx = txEntry;
137
- requestEntry(txEntry);
138
- }
139
- else {
140
- txEntry.pendingRequests.push(requestEntry);
141
- // console.log(
142
- // "Queued request in TX " + txEntry.id,
143
- // txEntry.pendingRequests.length
144
- // );
145
- }
146
- });
147
- }
148
- sendNewContentAfter(theirKnown, asDependencyOf) {
149
- return this.makeRequest(({ coValues }) => coValues.index("coValuesById").get(theirKnown.id))
150
- .then((coValueRow) => {
151
- return (coValueRow
152
- ? this.makeRequest(({ sessions }) => sessions.index("sessionsByCoValue").getAll(coValueRow.rowID))
153
- : SyncPromise.resolve([])).then((allOurSessions) => {
154
- const ourKnown = {
155
- id: theirKnown.id,
156
- header: !!coValueRow,
157
- sessions: {},
158
- };
159
- const newContentPieces = [
160
- {
161
- action: "content",
162
- id: theirKnown.id,
163
- header: theirKnown.header ? undefined : coValueRow?.header,
164
- new: {},
165
- priority: cojsonInternals.getPriorityFromHeader(coValueRow?.header),
166
- },
167
- ];
168
- return SyncPromise.all(allOurSessions.map((sessionRow) => {
169
- ourKnown.sessions[sessionRow.sessionID] = sessionRow.lastIdx;
170
- if (sessionRow.lastIdx >
171
- (theirKnown.sessions[sessionRow.sessionID] || 0)) {
172
- const firstNewTxIdx = theirKnown.sessions[sessionRow.sessionID] || 0;
173
- return this.makeRequest(({ signatureAfter }) => signatureAfter.getAll(IDBKeyRange.bound([sessionRow.rowID, firstNewTxIdx], [sessionRow.rowID, Infinity]))).then((signaturesAndIdxs) => {
174
- // console.log(
175
- // theirKnown.id,
176
- // "signaturesAndIdxs",
177
- // JSON.stringify(signaturesAndIdxs)
178
- // );
179
- return this.makeRequest(({ transactions }) => transactions.getAll(IDBKeyRange.bound([sessionRow.rowID, firstNewTxIdx], [sessionRow.rowID, Infinity]))).then((newTxsInSession) => {
180
- collectNewTxs(newTxsInSession, newContentPieces, sessionRow, signaturesAndIdxs, theirKnown, firstNewTxIdx);
181
- });
182
- });
183
- }
184
- else {
185
- return SyncPromise.resolve();
186
- }
187
- })).then(() => {
188
- const dependedOnCoValues = getDependedOnCoValues(coValueRow, newContentPieces, theirKnown);
189
- return SyncPromise.all(dependedOnCoValues.map((dependedOnCoValue) => this.sendNewContentAfter({
190
- id: dependedOnCoValue,
191
- header: false,
192
- sessions: {},
193
- }, asDependencyOf || theirKnown.id))).then(() => {
194
- // we're done with IndexedDB stuff here so can use native Promises again
195
- setTimeout(() => {
196
- this.toLocalNode
197
- .push({
198
- action: "known",
199
- ...ourKnown,
200
- asDependencyOf,
201
- })
202
- .catch((e) => console.error("Error sending known state", e));
203
- const nonEmptyNewContentPieces = newContentPieces.filter((piece) => piece.header || Object.keys(piece.new).length > 0);
204
- // console.log(theirKnown.id, nonEmptyNewContentPieces);
205
- for (const piece of nonEmptyNewContentPieces) {
206
- this.toLocalNode
207
- .push(piece)
208
- .catch((e) => console.error("Error sending new content piece", e));
209
- }
210
- });
211
- return Promise.resolve();
212
- });
213
- });
214
- });
215
- })
216
- .then(() => { });
217
- }
218
- handleLoad(msg) {
219
- return this.sendNewContentAfter(msg);
220
- }
221
- handleContent(msg) {
222
- return this.makeRequest(({ coValues }) => coValues.index("coValuesById").get(msg.id))
223
- .then((coValueRow) => {
224
- if (coValueRow?.rowID === undefined) {
225
- const header = msg.header;
226
- if (!header) {
227
- console.error("Expected to be sent header first");
228
- this.toLocalNode
229
- .push({
230
- action: "known",
231
- id: msg.id,
232
- header: false,
233
- sessions: {},
234
- isCorrection: true,
235
- })
236
- .catch((e) => console.error("Error sending known state", e));
237
- return SyncPromise.resolve();
238
- }
239
- return this.makeRequest(({ coValues }) => coValues.put({
240
- id: msg.id,
241
- header: header,
242
- }));
243
- }
244
- else {
245
- return SyncPromise.resolve(coValueRow.rowID);
246
- }
247
- })
248
- .then((storedCoValueRowID) => {
249
- void this.makeRequest(({ sessions }) => sessions.index("sessionsByCoValue").getAll(storedCoValueRowID)).then((allOurSessionsEntries) => {
250
- const allOurSessions = Object.fromEntries(allOurSessionsEntries.map((row) => [row.sessionID, row]));
251
- const ourKnown = {
252
- id: msg.id,
253
- header: true,
254
- sessions: {},
255
- };
256
- let invalidAssumptions = false;
257
- return Promise.all(Object.keys(msg.new).map((sessionID) => {
258
- const sessionRow = allOurSessions[sessionID];
259
- if (sessionRow) {
260
- ourKnown.sessions[sessionRow.sessionID] = sessionRow.lastIdx;
261
- }
262
- if ((sessionRow?.lastIdx || 0) < (msg.new[sessionID]?.after || 0)) {
263
- invalidAssumptions = true;
264
- }
265
- else {
266
- return this.putNewTxs(msg, sessionID, sessionRow, storedCoValueRowID);
267
- }
268
- })).then(() => {
269
- if (invalidAssumptions) {
270
- this.toLocalNode
271
- .push({
272
- action: "known",
273
- ...ourKnown,
274
- isCorrection: invalidAssumptions,
275
- })
276
- .catch((e) => console.error("Error sending known state", e));
277
- }
278
- });
279
- });
280
- });
281
- }
282
- putNewTxs(msg, sessionID, sessionRow, storedCoValueRowID) {
283
- const newTransactions = msg.new[sessionID]?.newTransactions || [];
284
- const actuallyNewOffset = (sessionRow?.lastIdx || 0) - (msg.new[sessionID]?.after || 0);
285
- const actuallyNewTransactions = newTransactions.slice(actuallyNewOffset);
286
- let newBytesSinceLastSignature = (sessionRow?.bytesSinceLastSignature || 0) +
287
- actuallyNewTransactions.reduce((sum, tx) => sum +
288
- (tx.privacy === "private"
289
- ? tx.encryptedChanges.length
290
- : tx.changes.length), 0);
291
- const newLastIdx = (sessionRow?.lastIdx || 0) + actuallyNewTransactions.length;
292
- let shouldWriteSignature = false;
293
- if (newBytesSinceLastSignature > MAX_RECOMMENDED_TX_SIZE) {
294
- shouldWriteSignature = true;
295
- newBytesSinceLastSignature = 0;
296
- }
297
- const nextIdx = sessionRow?.lastIdx || 0;
298
- const sessionUpdate = {
299
- coValue: storedCoValueRowID,
300
- sessionID: sessionID,
301
- lastIdx: newLastIdx,
302
- lastSignature: msg.new[sessionID].lastSignature,
303
- bytesSinceLastSignature: newBytesSinceLastSignature,
304
- };
305
- return this.makeRequest(({ sessions }) => sessions.put(sessionRow?.rowID
306
- ? {
307
- rowID: sessionRow.rowID,
308
- ...sessionUpdate,
309
- }
310
- : sessionUpdate)).then((sessionRowID) => {
311
- let maybePutRequest;
312
- if (shouldWriteSignature) {
313
- maybePutRequest = this.makeRequest(({ signatureAfter }) => signatureAfter.put({
314
- ses: sessionRowID,
315
- // TODO: newLastIdx is a misnomer, it's actually more like nextIdx or length
316
- idx: newLastIdx - 1,
317
- signature: msg.new[sessionID].lastSignature,
318
- }));
319
- }
320
- else {
321
- maybePutRequest = SyncPromise.resolve();
322
- }
323
- return maybePutRequest.then(() => Promise.all(actuallyNewTransactions.map((newTransaction, i) => {
324
- return this.makeRequest(({ transactions }) => transactions.add({
325
- ses: sessionRowID,
326
- idx: nextIdx + i,
327
- tx: newTransaction,
328
- }));
329
- })));
330
- });
331
- }
332
- handleKnown(msg) {
333
- return this.sendNewContentAfter(msg);
334
- }
335
- handleDone(_msg) { }
336
- }
337
- function collectNewTxs(newTxsInSession, newContentPieces, sessionRow, signaturesAndIdxs, theirKnown, firstNewTxIdx) {
338
- let idx = firstNewTxIdx;
339
- // console.log(
340
- // theirKnown.id,
341
- // "newTxInSession",
342
- // newTxInSession.length
343
- // );
344
- for (const tx of newTxsInSession) {
345
- let sessionEntry = newContentPieces[newContentPieces.length - 1].new[sessionRow.sessionID];
346
- if (!sessionEntry) {
347
- sessionEntry = {
348
- after: idx,
349
- lastSignature: "WILL_BE_REPLACED",
350
- newTransactions: [],
351
- };
352
- newContentPieces[newContentPieces.length - 1].new[sessionRow.sessionID] =
353
- sessionEntry;
354
- }
355
- sessionEntry.newTransactions.push(tx.tx);
356
- if (signaturesAndIdxs[0] && idx === signaturesAndIdxs[0].idx) {
357
- sessionEntry.lastSignature = signaturesAndIdxs[0].signature;
358
- signaturesAndIdxs.shift();
359
- newContentPieces.push({
360
- action: "content",
361
- id: theirKnown.id,
362
- new: {},
363
- priority: cojsonInternals.getPriorityFromHeader(undefined),
364
- });
365
- }
366
- else if (idx === firstNewTxIdx + newTxsInSession.length - 1) {
367
- sessionEntry.lastSignature = sessionRow.lastSignature;
368
- }
369
- idx += 1;
370
- }
371
- }
372
- function getDependedOnCoValues(coValueRow, newContentPieces, theirKnown) {
373
- return coValueRow?.header.ruleset.type === "group"
374
- ? newContentPieces
375
- .flatMap((piece) => Object.values(piece.new))
376
- .flatMap((sessionEntry) => sessionEntry.newTransactions.flatMap((tx) => {
377
- if (tx.privacy !== "trusting")
378
- return [];
379
- // TODO: avoid parse here?
380
- return cojsonInternals
381
- .parseJSON(tx.changes)
382
- .map((change) => change &&
383
- typeof change === "object" &&
384
- "op" in change &&
385
- change.op === "set" &&
386
- "key" in change &&
387
- change.key)
388
- .filter((key) => typeof key === "string" && key.startsWith("co_"));
389
- }))
390
- : coValueRow?.header.ruleset.type === "ownedByGroup"
391
- ? [
392
- coValueRow?.header.ruleset.group,
393
- ...new Set(newContentPieces.flatMap((piece) => Object.keys(piece.new)
394
- .map((sessionID) => cojsonInternals.accountOrAgentIDfromSessionID(sessionID))
395
- .filter((accountID) => cojsonInternals.isAccountID(accountID) &&
396
- accountID !== theirKnown.id))),
397
- ]
398
- : [];
399
- }
400
- // let lastTx = 0;
401
- // function promised<T>(request: IDBRequest<T>): Promise<T> {
402
- // return new Promise<T>((resolve, reject) => {
403
- // request.onsuccess = () => {
404
- // resolve(request.result);
405
- // };
406
- // request.onerror = () => {
407
- // reject(request.error);
408
- // };
409
- // });
410
- // }
1
+ export { IDBNode, IDBNode as IDBStorage } from "./idbNode.js";
411
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":"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"}
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"}