@peers-app/peers-device 0.8.1 → 0.8.3
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/dist/connection-manager/connection-manager.d.ts +5 -19
- package/dist/connection-manager/connection-manager.js +25 -466
- package/dist/connection-manager/connection-manager.js.map +1 -1
- package/dist/connection-manager/connection-manager.test.js +195 -0
- package/dist/connection-manager/connection-manager.test.js.map +1 -1
- package/dist/connection-manager/device-messages.d.ts +51 -0
- package/dist/connection-manager/device-messages.js +516 -0
- package/dist/connection-manager/device-messages.js.map +1 -0
- package/dist/connection-manager/hops-map.d.ts +38 -0
- package/dist/connection-manager/hops-map.js +149 -0
- package/dist/connection-manager/hops-map.js.map +1 -0
- package/dist/connection-manager/hops-map.test.d.ts +1 -0
- package/dist/connection-manager/hops-map.test.js +225 -0
- package/dist/connection-manager/hops-map.test.js.map +1 -0
- package/dist/connection-manager/network-manager.js +3 -3
- package/dist/connection-manager/network-manager.js.map +1 -1
- package/dist/local.data-source.d.ts +12 -0
- package/dist/local.data-source.js +37 -3
- package/dist/local.data-source.js.map +1 -1
- package/dist/sync-group.js +5 -9
- package/dist/sync-group.js.map +1 -1
- package/dist/tracked-data-source.d.ts +5 -0
- package/dist/tracked-data-source.js +141 -33
- package/dist/tracked-data-source.js.map +1 -1
- package/dist/tracked-data-source.test.js +160 -1
- package/dist/tracked-data-source.test.js.map +1 -1
- 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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"}
|
|
@@ -56,10 +56,10 @@ class NetworkManager {
|
|
|
56
56
|
'https': 1, // TLS websockets
|
|
57
57
|
'ws': 10, // slower due to Peers high-level encryption
|
|
58
58
|
'http': 10, // slower due to Peers high-level encryption
|
|
59
|
-
'
|
|
60
|
-
'
|
|
59
|
+
'wrtc': 20, // wrtc has the best chance of connecting but is the slowest connection
|
|
60
|
+
'libp2p': 30, // basically tcp under the hood
|
|
61
61
|
};
|
|
62
|
-
const defaultPriority = 99; // protocols not listed will sort
|
|
62
|
+
const defaultPriority = 99; // protocols not listed will sort last
|
|
63
63
|
this.protocolManagers.sort((a, b) => (protocolPriority[a.protocolName] ?? defaultPriority) -
|
|
64
64
|
(protocolPriority[b.protocolName] ?? defaultPriority));
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-manager.js","sourceRoot":"","sources":["../../src/connection-manager/network-manager.ts"],"names":[],"mappings":";;;AAAA,oDAAgH;AAChH,6DAA+D;AAU/D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAa,cAAc;IAON;IACD;IAPD,6BAA6B,CAAe;IAC5C,+BAA+B,CAAe;IAC9C,oBAAoB,GAAmB,EAAE,CAAC;IACnD,4BAA4B,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAExE,YACmB,iBAAoC,EACrC,mBAAuC,EAAE;QADxC,sBAAiB,GAAjB,iBAAiB,CAAmB;QACrC,qBAAgB,GAAhB,gBAAgB,CAAyB;QAEzD,gDAAgD;QAChD,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,mEAAmE;QACnE,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;YACnG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,EAAE;YAC/F,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACxE,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,2DAA2D;IAC7D,CAAC;IAEO,oBAAoB;QAC1B,MAAM,gBAAgB,GAA2B;YAC/C,KAAK,EAAE,CAAC,EAAM,iBAAiB;YAC/B,OAAO,EAAE,CAAC,EAAI,iBAAiB;YAC/B,IAAI,EAAE,EAAE,EAAM,4CAA4C;YAC1D,MAAM,EAAE,EAAE,EAAI,4CAA4C;YAC1D,
|
|
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
|
-
|
|
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
|
-
|
|
112
|
-
|
|
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":";;;;;;AACA,2BAA+B;AAC/B,gDAAwB;AAIxB,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,OAAO,GAAG,YAAY,UAAU,SAAS,CAAC;AAEhD,MAAa,OAAO;IAMC;IACA;IALX,EAAE,GAAoB,IAAI,CAAC;IAC3B,UAAU,GAAoB,IAAI,CAAC;IAE3C,YACmB,KAAc,EACd,YAAoC;QADpC,UAAK,GAAL,KAAK,CAAS;QACd,iBAAY,GAAZ,YAAY,CAAwB;QAErD,yDAAyD;QACzD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;YACvE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;gBAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAY,UAAU;QACpB,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAK,SAAS,IAAI,aAAa,IAAI,GAAG,CAAC;QACjE,IAAA,cAAS,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAEO,aAAa,GAAyB,IAAI,CAAC;IAC3C,KAAK,CAAC,MAAM;QAClB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC/B,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC9C,IAAI,SAAS,EAAE,CAAC;oBACd,EAAE,CAAC,MAAM,CAAC,QAAQ,SAAS,GAAG,CAAC,CAAC;gBAClC,CAAC;gBACD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAChC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC1B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC;oBAC7D,IAAI,SAAS,EAAE,CAAC;wBACd,UAAU,CAAC,MAAM,CAAC,QAAQ,SAAS,GAAG,CAAC,CAAC;oBAC1C,CAAC;oBACD,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;oBACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC/B,IAAI,EAAE,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;4BAC/B,MAAM;wBACR,CAAC;wBACD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBACxD,CAAC;oBACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC/B,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,CAAC;gBACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,SAAc,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,UAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAM,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oDAAoD;YACpD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,SAAc,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,UAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAQ,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oDAAoD;YACpD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,SAAc,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,
|
|
1
|
+
{"version":3,"file":"local.data-source.js","sourceRoot":"","sources":["../src/local.data-source.ts"],"names":[],"mappings":";;;;;;AACA,2BAA+B;AAC/B,gDAAwB;AAIxB,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,OAAO,GAAG,YAAY,UAAU,SAAS,CAAC;AAEhD,MAAa,OAAO;IAMC;IACA;IALX,EAAE,GAAoB,IAAI,CAAC;IAC3B,UAAU,GAAoB,IAAI,CAAC;IAE3C,YACmB,KAAc,EACd,YAAoC;QADpC,UAAK,GAAL,KAAK,CAAS;QACd,iBAAY,GAAZ,YAAY,CAAwB;QAErD,yDAAyD;QACzD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;YACvE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;gBAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAY,UAAU;QACpB,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAK,SAAS,IAAI,aAAa,IAAI,GAAG,CAAC;QACjE,IAAA,cAAS,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAEO,aAAa,GAAyB,IAAI,CAAC;IAC3C,KAAK,CAAC,MAAM;QAClB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC/B,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;gBAC9C,IAAI,SAAS,EAAE,CAAC;oBACd,EAAE,CAAC,MAAM,CAAC,QAAQ,SAAS,GAAG,CAAC,CAAC;gBAClC,CAAC;gBACD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAChC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC1B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC;oBAC7D,IAAI,SAAS,EAAE,CAAC;wBACd,UAAU,CAAC,MAAM,CAAC,QAAQ,SAAS,GAAG,CAAC,CAAC;oBAC1C,CAAC;oBACD,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;oBACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC/B,IAAI,EAAE,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;4BAC/B,MAAM;wBACR,CAAC;wBACD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBACxD,CAAC;oBACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC/B,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,CAAC;gBACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,SAAc,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,UAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAM,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oDAAoD;YACpD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,SAAc,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,UAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAQ,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oDAAoD;YACpD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,SAAc,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kEAAkE;YAClE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,kDAAkD;IAC3C,QAAQ,CAAC,GAAW,EAAE,SAAc,EAAE;QAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,SAAc,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAM,CAAC;IACvD,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,SAAc,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAQ,CAAC;IACzD,CAAC;IAED;;;;;;;OAOG;IACI,gBAAgB,CAAI,EAAW;QACpC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;CACF;AAlJD,0BAkJC"}
|
package/dist/sync-group.js
CHANGED
|
@@ -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,
|
|
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
|
|
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 }
|
|
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 >
|
|
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)(
|
|
310
|
+
await (0, peers_sdk_1.sleep)(200);
|
|
315
311
|
}
|
|
316
312
|
}
|
|
317
313
|
};
|