@peers-app/peers-device 0.8.2 → 0.8.4

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.
Files changed (29) hide show
  1. package/dist/chunk-download-manager.js +3 -3
  2. package/dist/chunk-download-manager.js.map +1 -1
  3. package/dist/connection-manager/connection-manager.d.ts +5 -19
  4. package/dist/connection-manager/connection-manager.js +25 -466
  5. package/dist/connection-manager/connection-manager.js.map +1 -1
  6. package/dist/connection-manager/connection-manager.test.js +195 -0
  7. package/dist/connection-manager/connection-manager.test.js.map +1 -1
  8. package/dist/connection-manager/device-messages.d.ts +51 -0
  9. package/dist/connection-manager/device-messages.js +516 -0
  10. package/dist/connection-manager/device-messages.js.map +1 -0
  11. package/dist/connection-manager/hops-map.d.ts +38 -0
  12. package/dist/connection-manager/hops-map.js +149 -0
  13. package/dist/connection-manager/hops-map.js.map +1 -0
  14. package/dist/connection-manager/hops-map.test.d.ts +1 -0
  15. package/dist/connection-manager/hops-map.test.js +225 -0
  16. package/dist/connection-manager/hops-map.test.js.map +1 -0
  17. package/dist/connection-manager/network-manager.js +1 -1
  18. package/dist/connection-manager/network-manager.js.map +1 -1
  19. package/dist/local.data-source.d.ts +12 -0
  20. package/dist/local.data-source.js +37 -3
  21. package/dist/local.data-source.js.map +1 -1
  22. package/dist/sync-group.js +5 -9
  23. package/dist/sync-group.js.map +1 -1
  24. package/dist/tracked-data-source.d.ts +5 -0
  25. package/dist/tracked-data-source.js +141 -33
  26. package/dist/tracked-data-source.js.map +1 -1
  27. package/dist/tracked-data-source.test.js +159 -0
  28. package/dist/tracked-data-source.test.js.map +1 -1
  29. package/package.json +3 -3
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HopsMap = void 0;
4
+ /**
5
+ * HopsMap tracks observed device connections based on message hop paths.
6
+ * This enables smarter message routing by learning the network topology
7
+ * from messages that pass through this device.
8
+ */
9
+ class HopsMap {
10
+ static DEFAULT_MAX_AGE_MS = 30 * 60 * 1000; // 30 minutes
11
+ // Map: deviceId -> Map<connectedDeviceId, lastSeenTimestamp>
12
+ networkMap = new Map();
13
+ /**
14
+ * Record observed connections from message hops.
15
+ * For hops [A, B, C, D], records bidirectional connections: A-B, B-C, C-D
16
+ * @param hops Array of deviceIds representing the path a message has taken
17
+ */
18
+ addHopsObservation(hops) {
19
+ if (!hops || hops.length < 2) {
20
+ return;
21
+ }
22
+ const now = Date.now();
23
+ // Record each consecutive pair as a bidirectional connection
24
+ for (let i = 0; i < hops.length - 1; i++) {
25
+ const deviceA = hops[i];
26
+ const deviceB = hops[i + 1];
27
+ // Record A -> B
28
+ if (!this.networkMap.has(deviceA)) {
29
+ this.networkMap.set(deviceA, new Map());
30
+ }
31
+ this.networkMap.get(deviceA).set(deviceB, now);
32
+ // Record B -> A (bidirectional)
33
+ if (!this.networkMap.has(deviceB)) {
34
+ this.networkMap.set(deviceB, new Map());
35
+ }
36
+ this.networkMap.get(deviceB).set(deviceA, now);
37
+ }
38
+ }
39
+ /**
40
+ * Find which of the provided connected devices are best for reaching the target.
41
+ * Uses BFS to find shortest paths through the observed network topology.
42
+ *
43
+ * @param targetDeviceId The device we want to reach
44
+ * @param myConnectedDeviceIds Devices we have direct connections to (candidates to forward through)
45
+ * @param excludeDeviceIds DeviceIds to exclude from path-finding (e.g., already in message hops)
46
+ * @returns Array of deviceIds from myConnectedDeviceIds, sorted by best path (shortest, most recent)
47
+ */
48
+ getDevicesLikelyToReach(targetDeviceId, myConnectedDeviceIds, excludeDeviceIds) {
49
+ if (!myConnectedDeviceIds.length) {
50
+ return [];
51
+ }
52
+ const excludeSet = new Set(excludeDeviceIds);
53
+ const myConnectionsSet = new Set(myConnectedDeviceIds.filter(id => !excludeSet.has(id)));
54
+ if (myConnectionsSet.size === 0) {
55
+ return [];
56
+ }
57
+ // BFS from target to find paths to our connected devices
58
+ // We search backward from target so we find which of our connections leads to it
59
+ const pathInfo = new Map();
60
+ const visited = new Set(excludeDeviceIds);
61
+ const queue = [];
62
+ // Initialize with target
63
+ visited.add(targetDeviceId);
64
+ const targetConnections = this.networkMap.get(targetDeviceId);
65
+ if (targetConnections) {
66
+ for (const [neighborId, timestamp] of targetConnections) {
67
+ if (!visited.has(neighborId)) {
68
+ visited.add(neighborId);
69
+ queue.push({ deviceId: neighborId, distance: 1, oldestTimestamp: timestamp });
70
+ pathInfo.set(neighborId, { distance: 1, oldestTimestamp: timestamp });
71
+ }
72
+ }
73
+ }
74
+ // BFS with max depth to avoid exploring too far
75
+ const MAX_DEPTH = 5;
76
+ while (queue.length > 0) {
77
+ const current = queue.shift();
78
+ if (current.distance >= MAX_DEPTH) {
79
+ continue;
80
+ }
81
+ const neighbors = this.networkMap.get(current.deviceId);
82
+ if (!neighbors)
83
+ continue;
84
+ for (const [neighborId, timestamp] of neighbors) {
85
+ if (visited.has(neighborId))
86
+ continue;
87
+ visited.add(neighborId);
88
+ const oldestTimestamp = Math.min(current.oldestTimestamp, timestamp);
89
+ queue.push({
90
+ deviceId: neighborId,
91
+ distance: current.distance + 1,
92
+ oldestTimestamp
93
+ });
94
+ pathInfo.set(neighborId, {
95
+ distance: current.distance + 1,
96
+ oldestTimestamp
97
+ });
98
+ }
99
+ }
100
+ // Filter to only our connected devices that have a path to target
101
+ const candidates = [];
102
+ for (const connectedId of myConnectionsSet) {
103
+ const info = pathInfo.get(connectedId);
104
+ if (info) {
105
+ candidates.push({ deviceId: connectedId, ...info });
106
+ }
107
+ }
108
+ // Sort by: 1) shortest distance, 2) most recent path (highest oldestTimestamp)
109
+ candidates.sort((a, b) => {
110
+ if (a.distance !== b.distance) {
111
+ return a.distance - b.distance; // Shorter paths first
112
+ }
113
+ return b.oldestTimestamp - a.oldestTimestamp; // More recent paths first
114
+ });
115
+ return candidates.map(c => c.deviceId);
116
+ }
117
+ /**
118
+ * Remove entries older than the specified threshold.
119
+ * @param maxAgeMs Maximum age in milliseconds (default: 30 minutes)
120
+ */
121
+ cleanupStaleEntries(maxAgeMs = HopsMap.DEFAULT_MAX_AGE_MS) {
122
+ const cutoffTime = Date.now() - maxAgeMs;
123
+ for (const [deviceId, connections] of this.networkMap) {
124
+ for (const [connectedDeviceId, lastSeen] of connections) {
125
+ if (lastSeen <= cutoffTime) {
126
+ connections.delete(connectedDeviceId);
127
+ }
128
+ }
129
+ // Remove the device entry entirely if it has no more connections
130
+ if (connections.size === 0) {
131
+ this.networkMap.delete(deviceId);
132
+ }
133
+ }
134
+ }
135
+ /**
136
+ * Get the current size of the network map (for testing/debugging)
137
+ */
138
+ get size() {
139
+ return this.networkMap.size;
140
+ }
141
+ /**
142
+ * Clear all entries (for testing)
143
+ */
144
+ clear() {
145
+ this.networkMap.clear();
146
+ }
147
+ }
148
+ exports.HopsMap = HopsMap;
149
+ //# sourceMappingURL=hops-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hops-map.js","sourceRoot":"","sources":["../../src/connection-manager/hops-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const hops_map_1 = require("./hops-map");
4
+ describe("HopsMap", () => {
5
+ let hopsMap;
6
+ beforeEach(() => {
7
+ hopsMap = new hops_map_1.HopsMap();
8
+ });
9
+ describe("addHopsObservation", () => {
10
+ it("should ignore empty or single-element hops arrays", () => {
11
+ hopsMap.addHopsObservation([]);
12
+ expect(hopsMap.size).toBe(0);
13
+ hopsMap.addHopsObservation(["device-A"]);
14
+ expect(hopsMap.size).toBe(0);
15
+ });
16
+ it("should record bidirectional connections from hop pairs", () => {
17
+ hopsMap.addHopsObservation(["device-A", "device-B"]);
18
+ expect(hopsMap.size).toBe(2); // Both devices recorded
19
+ });
20
+ it("should record all consecutive pairs from longer hop arrays", () => {
21
+ hopsMap.addHopsObservation(["A", "B", "C", "D"]);
22
+ // All 4 devices should be in the map with their connections
23
+ expect(hopsMap.size).toBe(4);
24
+ });
25
+ it("should update timestamps when observing the same connection again", async () => {
26
+ hopsMap.addHopsObservation(["A", "B"]);
27
+ await new Promise(resolve => setTimeout(resolve, 10));
28
+ hopsMap.addHopsObservation(["A", "B"]);
29
+ // Should still only have 2 device entries
30
+ expect(hopsMap.size).toBe(2);
31
+ });
32
+ });
33
+ describe("getDevicesLikelyToReach", () => {
34
+ it("should return empty array when no connections provided", () => {
35
+ hopsMap.addHopsObservation(["A", "target"]);
36
+ const result = hopsMap.getDevicesLikelyToReach("target", [], []);
37
+ expect(result).toEqual([]);
38
+ });
39
+ it("should return empty array for unknown target", () => {
40
+ const result = hopsMap.getDevicesLikelyToReach("unknown", ["A", "B"], []);
41
+ expect(result).toEqual([]);
42
+ });
43
+ it("should find direct connection to target (1-hop path)", () => {
44
+ // A is directly connected to target
45
+ hopsMap.addHopsObservation(["A", "target"]);
46
+ // I'm connected to A and B
47
+ const result = hopsMap.getDevicesLikelyToReach("target", ["A", "B"], []);
48
+ // A has a path to target, B doesn't
49
+ expect(result).toEqual(["A"]);
50
+ });
51
+ it("should find indirect path through network (2-hop path)", () => {
52
+ // Network: myConnection -> intermediate -> target
53
+ hopsMap.addHopsObservation(["intermediate", "target"]);
54
+ hopsMap.addHopsObservation(["myConnection", "intermediate"]);
55
+ // I'm connected to myConnection
56
+ const result = hopsMap.getDevicesLikelyToReach("target", ["myConnection"], []);
57
+ // myConnection can reach target through intermediate
58
+ expect(result).toEqual(["myConnection"]);
59
+ });
60
+ it("should prioritize shorter paths", () => {
61
+ // A has direct path to target (distance 1)
62
+ hopsMap.addHopsObservation(["A", "target"]);
63
+ // B has indirect path: B -> X -> target (distance 2)
64
+ hopsMap.addHopsObservation(["B", "X"]);
65
+ hopsMap.addHopsObservation(["X", "target"]);
66
+ // I'm connected to both A and B
67
+ const result = hopsMap.getDevicesLikelyToReach("target", ["A", "B"], []);
68
+ // A should come first (shorter path)
69
+ expect(result[0]).toBe("A");
70
+ expect(result).toContain("B");
71
+ });
72
+ it("should prioritize more recent paths when distances are equal", async () => {
73
+ // Both A and B have direct paths to target
74
+ hopsMap.addHopsObservation(["A", "target"]);
75
+ await new Promise(resolve => setTimeout(resolve, 10));
76
+ hopsMap.addHopsObservation(["B", "target"]);
77
+ // I'm connected to both A and B
78
+ const result = hopsMap.getDevicesLikelyToReach("target", ["A", "B"], []);
79
+ // Both have distance 1, B is more recent so should be first
80
+ expect(result[0]).toBe("B");
81
+ expect(result[1]).toBe("A");
82
+ });
83
+ it("should exclude devices in excludeDeviceIds from path-finding", () => {
84
+ // Path: A -> X -> target, but X is in hops (excluded)
85
+ hopsMap.addHopsObservation(["A", "X"]);
86
+ hopsMap.addHopsObservation(["X", "target"]);
87
+ // I'm connected to A, but X is excluded (already in message hops)
88
+ const result = hopsMap.getDevicesLikelyToReach("target", ["A"], ["X"]);
89
+ // A can't reach target because X is excluded from path
90
+ expect(result).toEqual([]);
91
+ });
92
+ it("should exclude myConnectedDeviceIds that are in excludeDeviceIds", () => {
93
+ hopsMap.addHopsObservation(["A", "target"]);
94
+ hopsMap.addHopsObservation(["B", "target"]);
95
+ // I'm connected to A and B, but A is excluded
96
+ const result = hopsMap.getDevicesLikelyToReach("target", ["A", "B"], ["A"]);
97
+ // Only B should be returned
98
+ expect(result).toEqual(["B"]);
99
+ });
100
+ it("should only return devices from myConnectedDeviceIds", () => {
101
+ // X has direct path to target, but I'm not connected to X
102
+ hopsMap.addHopsObservation(["X", "target"]);
103
+ // A has path through X
104
+ hopsMap.addHopsObservation(["A", "X"]);
105
+ // I'm only connected to A
106
+ const result = hopsMap.getDevicesLikelyToReach("target", ["A"], []);
107
+ // Should return A (my connection), not X
108
+ expect(result).toEqual(["A"]);
109
+ });
110
+ it("should handle complex network with multiple paths", () => {
111
+ // Complex network:
112
+ // A -- X -- target
113
+ // | |
114
+ // B -- Y ---+
115
+ // |
116
+ // C -- B (C can reach target via B->Y->target)
117
+ //
118
+ // D (isolated, no path to target)
119
+ hopsMap.addHopsObservation(["A", "X", "target"]);
120
+ hopsMap.addHopsObservation(["A", "B", "Y", "target"]);
121
+ hopsMap.addHopsObservation(["B", "C"]);
122
+ // I'm connected to A, B, C, D
123
+ const result = hopsMap.getDevicesLikelyToReach("target", ["A", "B", "C", "D"], []);
124
+ // A has shortest path (distance 2: A->X->target)
125
+ // B has distance 2: B->Y->target
126
+ // C has distance 3: C->B->Y->target
127
+ // D has no path to target
128
+ expect(result).toContain("A");
129
+ expect(result).toContain("B");
130
+ expect(result).toContain("C");
131
+ expect(result).not.toContain("D");
132
+ // A and B should come before C (shorter paths)
133
+ expect(result.indexOf("A")).toBeLessThan(result.indexOf("C"));
134
+ expect(result.indexOf("B")).toBeLessThan(result.indexOf("C"));
135
+ });
136
+ it("should respect max depth limit", () => {
137
+ // Create a very long chain: A -> B -> C -> D -> E -> F -> target
138
+ hopsMap.addHopsObservation(["A", "B"]);
139
+ hopsMap.addHopsObservation(["B", "C"]);
140
+ hopsMap.addHopsObservation(["C", "D"]);
141
+ hopsMap.addHopsObservation(["D", "E"]);
142
+ hopsMap.addHopsObservation(["E", "F"]);
143
+ hopsMap.addHopsObservation(["F", "target"]);
144
+ // I'm connected to A (6 hops from target, beyond MAX_DEPTH of 5)
145
+ const result = hopsMap.getDevicesLikelyToReach("target", ["A"], []);
146
+ // A should not be found because path is too long
147
+ expect(result).toEqual([]);
148
+ });
149
+ });
150
+ describe("cleanupStaleEntries", () => {
151
+ it("should remove entries older than the threshold", () => {
152
+ hopsMap.addHopsObservation(["A", "B"]);
153
+ hopsMap.cleanupStaleEntries(0);
154
+ expect(hopsMap.size).toBe(0);
155
+ });
156
+ it("should keep entries newer than the threshold", () => {
157
+ hopsMap.addHopsObservation(["A", "B"]);
158
+ hopsMap.cleanupStaleEntries(60 * 60 * 1000); // 1 hour
159
+ expect(hopsMap.size).toBe(2);
160
+ });
161
+ it("should remove device entries entirely when all connections expire", () => {
162
+ hopsMap.addHopsObservation(["A", "B"]);
163
+ hopsMap.addHopsObservation(["A", "C"]);
164
+ expect(hopsMap.size).toBe(3);
165
+ hopsMap.cleanupStaleEntries(0);
166
+ expect(hopsMap.size).toBe(0);
167
+ });
168
+ it("should use default 30 minute threshold when not specified", () => {
169
+ hopsMap.addHopsObservation(["A", "B"]);
170
+ hopsMap.cleanupStaleEntries();
171
+ // Entry should still exist since it was just added
172
+ expect(hopsMap.size).toBe(2);
173
+ });
174
+ });
175
+ describe("clear", () => {
176
+ it("should remove all entries", () => {
177
+ hopsMap.addHopsObservation(["A", "B", "C", "D"]);
178
+ expect(hopsMap.size).toBeGreaterThan(0);
179
+ hopsMap.clear();
180
+ expect(hopsMap.size).toBe(0);
181
+ });
182
+ });
183
+ describe("integration scenarios", () => {
184
+ it("should route through the best path in a realistic network", () => {
185
+ // Realistic scenario: I'm device "me" with connections to Server1 and Server2
186
+ // Target device is behind Server1's network
187
+ //
188
+ // me -- Server1 -- Gateway1 -- target
189
+ // |
190
+ // Server2 -- Gateway2 (no path to target)
191
+ hopsMap.addHopsObservation(["Server1", "Gateway1", "target"]);
192
+ hopsMap.addHopsObservation(["Server2", "Gateway2"]);
193
+ const result = hopsMap.getDevicesLikelyToReach("target", ["Server1", "Server2"], []);
194
+ // Only Server1 has a path to target
195
+ expect(result).toEqual(["Server1"]);
196
+ });
197
+ it("should handle forwarding scenario with message hops excluded", () => {
198
+ // I received a message that went: origin -> intermediate -> me
199
+ // Now I need to forward to target
200
+ // I have connections to: intermediate, Server1, Server2
201
+ hopsMap.addHopsObservation(["origin", "intermediate"]); // from received message
202
+ hopsMap.addHopsObservation(["Server1", "target"]); // learned from other message
203
+ const messageHops = ["origin", "intermediate", "me"];
204
+ const myConnections = ["intermediate", "Server1", "Server2"];
205
+ // Exclude devices already in hops
206
+ const result = hopsMap.getDevicesLikelyToReach("target", myConnections, messageHops);
207
+ // intermediate is excluded (in hops), Server1 has path, Server2 has no path
208
+ expect(result).toEqual(["Server1"]);
209
+ });
210
+ it("should pick optimal forwarder when multiple paths exist", async () => {
211
+ // Multiple paths to target, different distances:
212
+ // FastDevice -- target (direct, recent)
213
+ // SlowDevice -- X -- target (2 hops, older)
214
+ hopsMap.addHopsObservation(["SlowDevice", "X"]);
215
+ hopsMap.addHopsObservation(["X", "target"]);
216
+ await new Promise(resolve => setTimeout(resolve, 10));
217
+ hopsMap.addHopsObservation(["FastDevice", "target"]);
218
+ const result = hopsMap.getDevicesLikelyToReach("target", ["FastDevice", "SlowDevice"], []);
219
+ // FastDevice should be first (shorter path)
220
+ expect(result[0]).toBe("FastDevice");
221
+ expect(result[1]).toBe("SlowDevice");
222
+ });
223
+ });
224
+ });
225
+ //# sourceMappingURL=hops-map.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hops-map.test.js","sourceRoot":"","sources":["../../src/connection-manager/hops-map.test.ts"],"names":[],"mappings":"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"}
@@ -114,7 +114,7 @@ class NetworkManager {
114
114
  */
115
115
  async _checkForWellConnected(newConnection) {
116
116
  if (newConnection) {
117
- await (0, peers_sdk_1.sleep)(4_000); // wait for connection to stabilize
117
+ await (0, peers_sdk_1.sleep)(10_000); // wait for connection to stabilize
118
118
  }
119
119
  console.log(`[NetworkManager] Checking for well-connected devices (pending calls: ${this.pendingCallCnt})`);
120
120
  const userContext = this.connectionManager.userContext;
@@ -1 +1 @@
1
- {"version":3,"file":"network-manager.js","sourceRoot":"","sources":["../../src/connection-manager/network-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"network-manager.js","sourceRoot":"","sources":["../../src/connection-manager/network-manager.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,17 @@ export declare class DBLocal<T extends {
13
13
  get(sql: string, params?: any): Promise<T | undefined>;
14
14
  all(sql: string, params?: any): Promise<T[]>;
15
15
  exec(sql: string, params?: any): Promise<void>;
16
+ execSync(sql: string, params?: any): void;
17
+ getSync(sql: string, params?: any): T | undefined;
18
+ allSync(sql: string, params?: any): T[];
19
+ /**
20
+ * Execute multiple operations in a single SQLite transaction.
21
+ * All operations within the callback are committed atomically.
22
+ * If any operation throws, the entire transaction is rolled back.
23
+ *
24
+ * Note: The database must be opened before calling this method.
25
+ * Use execSync/getSync/allSync within the transaction callback.
26
+ */
27
+ runInTransaction<R>(fn: () => R): R;
16
28
  close(): Promise<void>;
17
29
  }
@@ -100,16 +100,50 @@ class DBLocal {
100
100
  async exec(sql, params = []) {
101
101
  try {
102
102
  await this.openDb();
103
- await this.db.prepare(sql).run(params);
103
+ this.db.prepare(sql).run(params);
104
104
  }
105
105
  catch (err) {
106
106
  // console.error(`error running db.exec`, sql, params, err);
107
107
  throw err;
108
108
  }
109
109
  }
110
+ // Synchronous methods for use within transactions
111
+ execSync(sql, params = []) {
112
+ if (!this.db) {
113
+ throw new Error('Database not open. Call openDb() first or use async exec().');
114
+ }
115
+ this.db.prepare(sql).run(params);
116
+ }
117
+ getSync(sql, params = []) {
118
+ if (!this.dbReadOnly) {
119
+ throw new Error('Database not open. Call openDb() first or use async get().');
120
+ }
121
+ return this.dbReadOnly.prepare(sql).get(params);
122
+ }
123
+ allSync(sql, params = []) {
124
+ if (!this.dbReadOnly) {
125
+ throw new Error('Database not open. Call openDb() first or use async all().');
126
+ }
127
+ return this.dbReadOnly.prepare(sql).all(params);
128
+ }
129
+ /**
130
+ * Execute multiple operations in a single SQLite transaction.
131
+ * All operations within the callback are committed atomically.
132
+ * If any operation throws, the entire transaction is rolled back.
133
+ *
134
+ * Note: The database must be opened before calling this method.
135
+ * Use execSync/getSync/allSync within the transaction callback.
136
+ */
137
+ runInTransaction(fn) {
138
+ if (!this.db) {
139
+ throw new Error('Database not open. Call openDb() first.');
140
+ }
141
+ const transaction = this.db.transaction(fn);
142
+ return transaction();
143
+ }
110
144
  async close() {
111
- await this.db?.close();
112
- await this.dbReadOnly?.close();
145
+ this.db?.close();
146
+ this.dbReadOnly?.close();
113
147
  this.db = null;
114
148
  this.dbReadOnly = null;
115
149
  this.openDbPromise = null;
@@ -1 +1 @@
1
- {"version":3,"file":"local.data-source.js","sourceRoot":"","sources":["../src/local.data-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local.data-source.js","sourceRoot":"","sources":["../src/local.data-source.ts"],"names":[],"mappings":"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"}
@@ -279,7 +279,7 @@ class SyncGroup {
279
279
  // const t2 = Date.now();
280
280
  // console.log(`queried with array of all id changes in ${t2 - t1}ms (cnt: ${results2.length})`);
281
281
  const startTime = Date.now();
282
- const batchSize = (0, lodash_1.clamp)(opts?.pageSize ?? SyncGroup.CHANGES_PAGE_SIZE, 2, 1000);
282
+ const batchSize = (0, lodash_1.clamp)(opts?.pageSize ?? SyncGroup.CHANGES_PAGE_SIZE, 2, 50_000);
283
283
  const changeCursor = (0, peers_sdk_1.dataSourceCursor)({
284
284
  primaryKeyName: 'changeId',
285
285
  list: remoteDevice.listChanges.bind(remoteDevice),
@@ -288,14 +288,10 @@ class SyncGroup {
288
288
  supersededAt: { $exists: false }, // No reason to sync changes that have been superseded if we don't have to
289
289
  $and: [
290
290
  { appliedAt: { $gte: syncInfo.timestampAppliedLast } },
291
- // We don't want to go past the current applied changes because we might skip changes that are actively being synced from other device so the remote device
291
+ // We don't want to go past the current applied changes because we might skip changes that are actively being synced from other device to the remote device
292
292
  { appliedAt: { $lte: networkInfoStart.timestampLastApplied } },
293
293
  ]
294
- },
295
- // { appliedAt: { $gte: syncInfo.timestampAppliedLast }, supersededAt: { $exists: false } },
296
- { sortBy: ['createdAt'], pageSize: batchSize * 2 }
297
- // { sortBy: ['createdAt', 'changeId'], pageSize: batchSize }
298
- );
294
+ }, { sortBy: ['createdAt'], pageSize: batchSize });
299
295
  const changeBatch = [];
300
296
  let maxTimestampApplied = syncInfo.timestampAppliedLast;
301
297
  let totalChangesSynced = 0;
@@ -309,9 +305,9 @@ class SyncGroup {
309
305
  const applyTime = Date.now() - sTime;
310
306
  // Give an equal amount of time for other work as applying changes
311
307
  // TODO try to do syncing in a worker thread
312
- if (applyTime > 100) {
308
+ if (applyTime > 200) {
313
309
  console.warn(`Syncing changes batch is taking a long time (${applyTime}ms), sleeping a bit to let other work happen`);
314
- await (0, peers_sdk_1.sleep)(100);
310
+ await (0, peers_sdk_1.sleep)(200);
315
311
  }
316
312
  }
317
313
  };