@peers-app/peers-device 0.8.7 → 0.8.8
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.
|
@@ -28,12 +28,72 @@ export declare class NetworkManager {
|
|
|
28
28
|
private readonly onConnectionRemovedSubscription;
|
|
29
29
|
private readonly unsubscribeFunctions;
|
|
30
30
|
private checkForWellConnectedPromise;
|
|
31
|
+
/** Tracks all devices we know about across all groups */
|
|
32
|
+
private readonly trackedDevices;
|
|
33
|
+
/** Tracks connection state per group */
|
|
34
|
+
private readonly groupConnectionStates;
|
|
35
|
+
/** Cache of deviceId -> userId mappings */
|
|
36
|
+
private readonly deviceUserIdCache;
|
|
31
37
|
constructor(connectionManager: ConnectionManager, protocolManagers?: IProtocolManager[]);
|
|
32
38
|
private sortProtocolManagers;
|
|
33
39
|
/**
|
|
34
40
|
* Register handlers for device messages
|
|
35
41
|
*/
|
|
36
42
|
private setupHandler;
|
|
43
|
+
/**
|
|
44
|
+
* Track a device we learn about (from connections, network info, device discovery, etc.)
|
|
45
|
+
*/
|
|
46
|
+
private trackDevice;
|
|
47
|
+
/**
|
|
48
|
+
* Update device status after connection attempt
|
|
49
|
+
*/
|
|
50
|
+
private updateDeviceStatus;
|
|
51
|
+
/**
|
|
52
|
+
* Check if a device should be retried (respects cooldown for failed attempts)
|
|
53
|
+
*/
|
|
54
|
+
private shouldRetryDevice;
|
|
55
|
+
/**
|
|
56
|
+
* Look up userId for a deviceId (cache + Devices table fallback)
|
|
57
|
+
*/
|
|
58
|
+
private getDeviceUserId;
|
|
59
|
+
/**
|
|
60
|
+
* Update which devices are preferred for a group (from network info)
|
|
61
|
+
*/
|
|
62
|
+
private updatePreferredDevicesFromNetworkInfo;
|
|
63
|
+
/**
|
|
64
|
+
* Update tracking state when a connection is added or removed
|
|
65
|
+
*/
|
|
66
|
+
private updateTrackingFromConnection;
|
|
67
|
+
/**
|
|
68
|
+
* Recompute connected users for a group after a connection change
|
|
69
|
+
*/
|
|
70
|
+
private recomputeConnectedUsers;
|
|
71
|
+
/**
|
|
72
|
+
* Get or create group connection state
|
|
73
|
+
*/
|
|
74
|
+
private getOrCreateGroupState;
|
|
75
|
+
/**
|
|
76
|
+
* Populate memberUserIds from GroupMembers table
|
|
77
|
+
*/
|
|
78
|
+
private updateGroupMembership;
|
|
79
|
+
/**
|
|
80
|
+
* Get target user count for a group (based on membership, capped at MAX_USERS_PER_GROUP)
|
|
81
|
+
*/
|
|
82
|
+
private getTargetUserCount;
|
|
83
|
+
/**
|
|
84
|
+
* Get own devices to connect to (all if ≤MAX_OWN_DEVICES, else top by preference/status)
|
|
85
|
+
*/
|
|
86
|
+
private getOwnDevicesToConnect;
|
|
87
|
+
/**
|
|
88
|
+
* Get the best devices to connect to for a GROUP (5-tier priority, user-diverse)
|
|
89
|
+
*
|
|
90
|
+
* Tier 1: Preferred devices of OTHER users (not yet connected to that user)
|
|
91
|
+
* Tier 2: Non-preferred devices of OTHER users (not yet connected to that user)
|
|
92
|
+
* Tier 3: Devices of OTHER users we're already connected to (preferred first)
|
|
93
|
+
* Tier 4: Preferred devices of MY OWN user
|
|
94
|
+
* Tier 5: Non-preferred devices of MY OWN user
|
|
95
|
+
*/
|
|
96
|
+
private getDevicesToConnect;
|
|
37
97
|
/**
|
|
38
98
|
* Check if we're well connected to all personal devices and establish connections if needed.
|
|
39
99
|
* This is called when connections are added or removed.
|
|
@@ -42,7 +102,10 @@ export declare class NetworkManager {
|
|
|
42
102
|
private checkForWellConnected;
|
|
43
103
|
/**
|
|
44
104
|
* Internal implementation of well-connected check.
|
|
45
|
-
*
|
|
105
|
+
*
|
|
106
|
+
* Phase 1: Connect to own devices (for personal data sync, capped at MAX_OWN_DEVICES)
|
|
107
|
+
* Phase 2: Gather network info from peers to learn about devices and preferences
|
|
108
|
+
* Phase 3: For each group, ensure user-diverse connections using 5-tier priority
|
|
46
109
|
*/
|
|
47
110
|
private _checkForWellConnected;
|
|
48
111
|
connectToDevice(deviceId: string, dataContextId?: string, protocol?: string): Promise<void>;
|
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NetworkManager = void 0;
|
|
4
4
|
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
5
6
|
const connection_manager_1 = require("./connection-manager");
|
|
7
|
+
/** Maximum own devices to connect to */
|
|
8
|
+
const MAX_OWN_DEVICES = 8;
|
|
9
|
+
/** Maximum other users to connect to per group */
|
|
10
|
+
const MAX_USERS_PER_GROUP = 5;
|
|
11
|
+
/** Cooldown period before retrying a failed connection (ms) */
|
|
12
|
+
const RETRY_COOLDOWN_MS = 60_000;
|
|
6
13
|
/**
|
|
7
14
|
* NetworkManager is responsible for deciding when and which devices to connect to,
|
|
8
15
|
* and which protocol to use for those connections.
|
|
@@ -31,16 +38,28 @@ class NetworkManager {
|
|
|
31
38
|
onConnectionRemovedSubscription;
|
|
32
39
|
unsubscribeFunctions = [];
|
|
33
40
|
checkForWellConnectedPromise = Promise.resolve();
|
|
41
|
+
/** Tracks all devices we know about across all groups */
|
|
42
|
+
trackedDevices = new Map();
|
|
43
|
+
/** Tracks connection state per group */
|
|
44
|
+
groupConnectionStates = new Map();
|
|
45
|
+
/** Cache of deviceId -> userId mappings */
|
|
46
|
+
deviceUserIdCache = new Map();
|
|
34
47
|
constructor(connectionManager, protocolManagers = []) {
|
|
35
48
|
this.connectionManager = connectionManager;
|
|
36
49
|
this.protocolManagers = protocolManagers;
|
|
37
50
|
// Register handler for protocol support queries
|
|
38
51
|
this.setupHandler();
|
|
39
|
-
// Subscribe to connection changes to trigger well-connected checks
|
|
52
|
+
// Subscribe to connection changes to trigger well-connected checks and update tracking
|
|
40
53
|
this.onConnectionAddedSubscription = this.connectionManager.onConnectionAdded.subscribe(connection => {
|
|
54
|
+
if (connection) {
|
|
55
|
+
this.updateTrackingFromConnection(connection, false);
|
|
56
|
+
}
|
|
41
57
|
this.checkForWellConnected(connection);
|
|
42
58
|
});
|
|
43
|
-
this.onConnectionRemovedSubscription = this.connectionManager.onConnectionRemoved.subscribe(
|
|
59
|
+
this.onConnectionRemovedSubscription = this.connectionManager.onConnectionRemoved.subscribe(connection => {
|
|
60
|
+
if (connection) {
|
|
61
|
+
this.updateTrackingFromConnection(connection, true);
|
|
62
|
+
}
|
|
44
63
|
this.checkForWellConnected();
|
|
45
64
|
});
|
|
46
65
|
this.connectionManager.onUserConnectExchangeFinished.subscribe(deviceId => {
|
|
@@ -52,12 +71,12 @@ class NetworkManager {
|
|
|
52
71
|
}
|
|
53
72
|
sortProtocolManagers() {
|
|
54
73
|
const protocolPriority = {
|
|
55
|
-
'wss': 1, // TLS websockets
|
|
56
|
-
'https': 1, // TLS websockets
|
|
74
|
+
'wss': 1, // TLS websockets - fast and reliable
|
|
75
|
+
'https': 1, // TLS websockets - fast and reliable
|
|
57
76
|
'ws': 10, // slower due to Peers high-level encryption
|
|
58
77
|
'http': 10, // slower due to Peers high-level encryption
|
|
59
|
-
'
|
|
60
|
-
'
|
|
78
|
+
'libp2p': 20, // basically tcp under the hood
|
|
79
|
+
'wrtc': 30, // wrtc has the best chance of connecting but is the slowest connection
|
|
61
80
|
};
|
|
62
81
|
const defaultPriority = 99; // protocols not listed will sort last
|
|
63
82
|
this.protocolManagers.sort((a, b) => (protocolPriority[a.protocolName] ?? defaultPriority) -
|
|
@@ -92,6 +111,264 @@ class NetworkManager {
|
|
|
92
111
|
});
|
|
93
112
|
this.unsubscribeFunctions.push(protocolSupportSub);
|
|
94
113
|
}
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// Device Tracking Methods
|
|
116
|
+
// ============================================================================
|
|
117
|
+
/**
|
|
118
|
+
* Track a device we learn about (from connections, network info, device discovery, etc.)
|
|
119
|
+
*/
|
|
120
|
+
trackDevice(deviceId, userId, groupIds) {
|
|
121
|
+
if (deviceId === (0, peers_sdk_1.thisDeviceId)())
|
|
122
|
+
return;
|
|
123
|
+
let tracked = this.trackedDevices.get(deviceId);
|
|
124
|
+
if (!tracked) {
|
|
125
|
+
tracked = {
|
|
126
|
+
deviceId,
|
|
127
|
+
userId,
|
|
128
|
+
status: 'notTried',
|
|
129
|
+
failureCount: 0,
|
|
130
|
+
groupIds: new Set(groupIds),
|
|
131
|
+
preferredForGroups: new Set(),
|
|
132
|
+
};
|
|
133
|
+
this.trackedDevices.set(deviceId, tracked);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Update userId if we didn't have it
|
|
137
|
+
if (!tracked.userId && userId) {
|
|
138
|
+
tracked.userId = userId;
|
|
139
|
+
}
|
|
140
|
+
// Add new group associations
|
|
141
|
+
for (const groupId of groupIds) {
|
|
142
|
+
tracked.groupIds.add(groupId);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Cache the userId mapping
|
|
146
|
+
if (userId) {
|
|
147
|
+
this.deviceUserIdCache.set(deviceId, userId);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Update device status after connection attempt
|
|
152
|
+
*/
|
|
153
|
+
updateDeviceStatus(deviceId, status) {
|
|
154
|
+
const tracked = this.trackedDevices.get(deviceId);
|
|
155
|
+
if (!tracked)
|
|
156
|
+
return;
|
|
157
|
+
tracked.status = status;
|
|
158
|
+
tracked.lastAttemptTime = Date.now();
|
|
159
|
+
if (status === 'triedButFailed') {
|
|
160
|
+
tracked.failureCount++;
|
|
161
|
+
}
|
|
162
|
+
else if (status === 'connected') {
|
|
163
|
+
tracked.failureCount = 0;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if a device should be retried (respects cooldown for failed attempts)
|
|
168
|
+
*/
|
|
169
|
+
shouldRetryDevice(deviceId) {
|
|
170
|
+
const tracked = this.trackedDevices.get(deviceId);
|
|
171
|
+
if (!tracked)
|
|
172
|
+
return true; // Unknown device, try it
|
|
173
|
+
if (tracked.status === 'connected')
|
|
174
|
+
return false; // Already connected
|
|
175
|
+
if (tracked.status === 'triedButFailed' && tracked.lastAttemptTime) {
|
|
176
|
+
const timeSinceAttempt = Date.now() - tracked.lastAttemptTime;
|
|
177
|
+
if (timeSinceAttempt < RETRY_COOLDOWN_MS) {
|
|
178
|
+
return false; // Still in cooldown
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Look up userId for a deviceId (cache + Devices table fallback)
|
|
185
|
+
*/
|
|
186
|
+
async getDeviceUserId(deviceId) {
|
|
187
|
+
// Check cache first
|
|
188
|
+
const cached = this.deviceUserIdCache.get(deviceId);
|
|
189
|
+
if (cached)
|
|
190
|
+
return cached;
|
|
191
|
+
// Fall back to Devices table lookup
|
|
192
|
+
try {
|
|
193
|
+
const userContext = this.connectionManager.userContext;
|
|
194
|
+
const device = await (0, peers_sdk_1.Devices)(userContext.userDataContext).get(deviceId);
|
|
195
|
+
if (device?.userId) {
|
|
196
|
+
this.deviceUserIdCache.set(deviceId, device.userId);
|
|
197
|
+
return device.userId;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
// Ignore errors
|
|
202
|
+
}
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Update which devices are preferred for a group (from network info)
|
|
207
|
+
*/
|
|
208
|
+
updatePreferredDevicesFromNetworkInfo(groupId, networkInfo) {
|
|
209
|
+
for (const deviceId of networkInfo.preferredDeviceIds) {
|
|
210
|
+
const tracked = this.trackedDevices.get(deviceId);
|
|
211
|
+
if (tracked) {
|
|
212
|
+
tracked.preferredForGroups.add(groupId);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Update tracking state when a connection is added or removed
|
|
218
|
+
*/
|
|
219
|
+
updateTrackingFromConnection(connection, removed) {
|
|
220
|
+
const deviceId = connection.remoteDeviceInfo.deviceId;
|
|
221
|
+
const userId = connection.remoteDeviceInfo.userId;
|
|
222
|
+
if (!deviceId)
|
|
223
|
+
return;
|
|
224
|
+
// Cache the userId
|
|
225
|
+
if (userId) {
|
|
226
|
+
this.deviceUserIdCache.set(deviceId, userId);
|
|
227
|
+
}
|
|
228
|
+
if (removed) {
|
|
229
|
+
this.updateDeviceStatus(deviceId, 'connectedThenDisconnected');
|
|
230
|
+
// Update all group states that had this device
|
|
231
|
+
for (const [groupId, groupState] of this.groupConnectionStates) {
|
|
232
|
+
if (groupState.connectedDeviceIds.has(deviceId)) {
|
|
233
|
+
groupState.connectedDeviceIds.delete(deviceId);
|
|
234
|
+
this.recomputeConnectedUsers(groupId);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// Track the device (groups will be determined later when we check well-connected)
|
|
240
|
+
this.trackDevice(deviceId, userId, []);
|
|
241
|
+
this.updateDeviceStatus(deviceId, 'connected');
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Recompute connected users for a group after a connection change
|
|
246
|
+
*/
|
|
247
|
+
recomputeConnectedUsers(groupId) {
|
|
248
|
+
const groupState = this.groupConnectionStates.get(groupId);
|
|
249
|
+
if (!groupState)
|
|
250
|
+
return;
|
|
251
|
+
groupState.connectedUserIds.clear();
|
|
252
|
+
for (const deviceId of groupState.connectedDeviceIds) {
|
|
253
|
+
const userId = this.deviceUserIdCache.get(deviceId);
|
|
254
|
+
if (userId) {
|
|
255
|
+
groupState.connectedUserIds.add(userId);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get or create group connection state
|
|
261
|
+
*/
|
|
262
|
+
getOrCreateGroupState(groupId) {
|
|
263
|
+
let state = this.groupConnectionStates.get(groupId);
|
|
264
|
+
if (!state) {
|
|
265
|
+
state = {
|
|
266
|
+
groupId,
|
|
267
|
+
connectedDeviceIds: new Set(),
|
|
268
|
+
connectedUserIds: new Set(),
|
|
269
|
+
memberUserIds: new Set(),
|
|
270
|
+
};
|
|
271
|
+
this.groupConnectionStates.set(groupId, state);
|
|
272
|
+
}
|
|
273
|
+
return state;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Populate memberUserIds from GroupMembers table
|
|
277
|
+
*/
|
|
278
|
+
async updateGroupMembership(groupId, groupDataContext) {
|
|
279
|
+
const groupState = this.getOrCreateGroupState(groupId);
|
|
280
|
+
try {
|
|
281
|
+
const groupMembers = await (0, peers_sdk_1.GroupMembers)(groupDataContext).list({ deleted: { $ne: true } });
|
|
282
|
+
groupState.memberUserIds.clear();
|
|
283
|
+
for (const member of groupMembers) {
|
|
284
|
+
groupState.memberUserIds.add(member.userId);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
catch (e) {
|
|
288
|
+
// Ignore errors - group membership will be incomplete
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Get target user count for a group (based on membership, capped at MAX_USERS_PER_GROUP)
|
|
293
|
+
*/
|
|
294
|
+
getTargetUserCount(groupId) {
|
|
295
|
+
const groupState = this.groupConnectionStates.get(groupId);
|
|
296
|
+
if (!groupState)
|
|
297
|
+
return MAX_USERS_PER_GROUP;
|
|
298
|
+
const myUserId = this.connectionManager.userContext.userId;
|
|
299
|
+
const otherUserCount = [...groupState.memberUserIds].filter(id => id !== myUserId).length;
|
|
300
|
+
// Target: all other users, capped at MAX_USERS_PER_GROUP
|
|
301
|
+
return Math.min(otherUserCount || MAX_USERS_PER_GROUP, MAX_USERS_PER_GROUP);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Get own devices to connect to (all if ≤MAX_OWN_DEVICES, else top by preference/status)
|
|
305
|
+
*/
|
|
306
|
+
getOwnDevicesToConnect() {
|
|
307
|
+
const myUserId = this.connectionManager.userContext.userId;
|
|
308
|
+
const ownDevices = Array.from(this.trackedDevices.values())
|
|
309
|
+
.filter(d => d.userId === myUserId && d.deviceId !== (0, peers_sdk_1.thisDeviceId)())
|
|
310
|
+
.filter(d => d.status !== 'connected')
|
|
311
|
+
.filter(d => this.shouldRetryDevice(d.deviceId));
|
|
312
|
+
if (ownDevices.length <= MAX_OWN_DEVICES) {
|
|
313
|
+
return ownDevices.map(d => d.deviceId);
|
|
314
|
+
}
|
|
315
|
+
// More than MAX_OWN_DEVICES: prioritize preferred, then by status
|
|
316
|
+
const isPreferred = (d) => d.preferredForGroups.size > 0;
|
|
317
|
+
const preferred = ownDevices.filter(isPreferred);
|
|
318
|
+
const nonPreferred = ownDevices.filter(d => !isPreferred(d));
|
|
319
|
+
const sortByStatus = (devices) => (0, lodash_1.sortBy)(devices, d => d.status === 'connectedThenDisconnected' ? 0 :
|
|
320
|
+
d.status === 'notTried' ? 1 : 2);
|
|
321
|
+
return [
|
|
322
|
+
...sortByStatus(preferred),
|
|
323
|
+
...sortByStatus(nonPreferred),
|
|
324
|
+
].slice(0, MAX_OWN_DEVICES).map(d => d.deviceId);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Get the best devices to connect to for a GROUP (5-tier priority, user-diverse)
|
|
328
|
+
*
|
|
329
|
+
* Tier 1: Preferred devices of OTHER users (not yet connected to that user)
|
|
330
|
+
* Tier 2: Non-preferred devices of OTHER users (not yet connected to that user)
|
|
331
|
+
* Tier 3: Devices of OTHER users we're already connected to (preferred first)
|
|
332
|
+
* Tier 4: Preferred devices of MY OWN user
|
|
333
|
+
* Tier 5: Non-preferred devices of MY OWN user
|
|
334
|
+
*/
|
|
335
|
+
getDevicesToConnect(groupId, targetCount) {
|
|
336
|
+
if (targetCount <= 0)
|
|
337
|
+
return [];
|
|
338
|
+
const groupState = this.groupConnectionStates.get(groupId);
|
|
339
|
+
const myUserId = this.connectionManager.userContext.userId;
|
|
340
|
+
// Get all known devices for this group that we can retry
|
|
341
|
+
const groupDevices = Array.from(this.trackedDevices.values())
|
|
342
|
+
.filter(d => d.groupIds.has(groupId) && d.deviceId !== (0, peers_sdk_1.thisDeviceId)())
|
|
343
|
+
.filter(d => d.status !== 'connected')
|
|
344
|
+
.filter(d => this.shouldRetryDevice(d.deviceId));
|
|
345
|
+
const connectedUserIds = groupState?.connectedUserIds ?? new Set();
|
|
346
|
+
// Helper: is this device preferred for this group?
|
|
347
|
+
const isPreferred = (d) => d.preferredForGroups.has(groupId);
|
|
348
|
+
// Helper: sort by connection status within a tier
|
|
349
|
+
const sortByStatus = (devices) => (0, lodash_1.sortBy)(devices, d => d.status === 'connectedThenDisconnected' ? 0 :
|
|
350
|
+
d.status === 'notTried' ? 1 : 2);
|
|
351
|
+
// Partition devices into groups
|
|
352
|
+
const otherUserUnconnected = groupDevices.filter(d => d.userId && d.userId !== myUserId && !connectedUserIds.has(d.userId));
|
|
353
|
+
const otherUserConnected = groupDevices.filter(d => d.userId && d.userId !== myUserId && connectedUserIds.has(d.userId));
|
|
354
|
+
const ownDevices = groupDevices.filter(d => d.userId === myUserId);
|
|
355
|
+
// Tier 1: Preferred devices of OTHER users (unconnected users)
|
|
356
|
+
const tier1 = sortByStatus(otherUserUnconnected.filter(isPreferred));
|
|
357
|
+
// Tier 2: Non-preferred devices of OTHER users (unconnected users)
|
|
358
|
+
const tier2 = sortByStatus(otherUserUnconnected.filter(d => !isPreferred(d)));
|
|
359
|
+
// Tier 3: Devices of OTHER users we're already connected to (preferred first)
|
|
360
|
+
const tier3 = [
|
|
361
|
+
...sortByStatus(otherUserConnected.filter(isPreferred)),
|
|
362
|
+
...sortByStatus(otherUserConnected.filter(d => !isPreferred(d))),
|
|
363
|
+
];
|
|
364
|
+
// Tier 4: Preferred devices of MY OWN user
|
|
365
|
+
const tier4 = sortByStatus(ownDevices.filter(isPreferred));
|
|
366
|
+
// Tier 5: Non-preferred devices of MY OWN user
|
|
367
|
+
const tier5 = sortByStatus(ownDevices.filter(d => !isPreferred(d)));
|
|
368
|
+
return [...tier1, ...tier2, ...tier3, ...tier4, ...tier5]
|
|
369
|
+
.slice(0, targetCount)
|
|
370
|
+
.map(d => d.deviceId);
|
|
371
|
+
}
|
|
95
372
|
/**
|
|
96
373
|
* Check if we're well connected to all personal devices and establish connections if needed.
|
|
97
374
|
* This is called when connections are added or removed.
|
|
@@ -110,57 +387,135 @@ class NetworkManager {
|
|
|
110
387
|
}
|
|
111
388
|
/**
|
|
112
389
|
* Internal implementation of well-connected check.
|
|
113
|
-
*
|
|
390
|
+
*
|
|
391
|
+
* Phase 1: Connect to own devices (for personal data sync, capped at MAX_OWN_DEVICES)
|
|
392
|
+
* Phase 2: Gather network info from peers to learn about devices and preferences
|
|
393
|
+
* Phase 3: For each group, ensure user-diverse connections using 5-tier priority
|
|
114
394
|
*/
|
|
115
395
|
async _checkForWellConnected(newConnection) {
|
|
116
396
|
if (newConnection) {
|
|
117
|
-
await (0, peers_sdk_1.sleep)(
|
|
397
|
+
await (0, peers_sdk_1.sleep)(3_000); // wait for connection to stabilize
|
|
118
398
|
}
|
|
119
399
|
console.log(`[NetworkManager] Checking for well-connected devices (pending calls: ${this.pendingCallCnt})`);
|
|
120
400
|
const userContext = this.connectionManager.userContext;
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
});
|
|
126
|
-
for
|
|
127
|
-
|
|
401
|
+
// ========================================================================
|
|
402
|
+
// PHASE 1: Connect to own devices (for personal data sync)
|
|
403
|
+
// ========================================================================
|
|
404
|
+
// First, track all own devices from the Devices table
|
|
405
|
+
const myDevicesList = await (0, peers_sdk_1.Devices)(userContext.userDataContext).list({ userId: userContext.userId });
|
|
406
|
+
for (const device of myDevicesList) {
|
|
407
|
+
if (device.deviceId !== (0, peers_sdk_1.thisDeviceId)()) {
|
|
408
|
+
this.trackDevice(device.deviceId, userContext.userId, [userContext.userId]);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
// Select which own devices to connect to (all if ≤MAX_OWN_DEVICES, else top by preference/status)
|
|
412
|
+
const ownDevicesToConnect = this.getOwnDevicesToConnect();
|
|
413
|
+
for (const deviceId of ownDevicesToConnect) {
|
|
414
|
+
await this.connectToDevice(deviceId, userContext.userId);
|
|
128
415
|
await (0, peers_sdk_1.sleep)(100);
|
|
129
416
|
}
|
|
130
417
|
await (0, peers_sdk_1.sleep)(1000);
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
418
|
+
// ========================================================================
|
|
419
|
+
// PHASE 2: Gather network info from connected peers
|
|
420
|
+
// ========================================================================
|
|
421
|
+
// Collect all data contexts (personal + groups)
|
|
422
|
+
const allDataContexts = [userContext.userDataContext, ...userContext.groupDataContexts.values()];
|
|
423
|
+
for (const groupDataContext of allDataContexts) {
|
|
424
|
+
const groupId = groupDataContext.dataContextId;
|
|
134
425
|
const syncGroup = this.connectionManager.getPeerGroupDevice(groupDataContext);
|
|
135
426
|
const connections = syncGroup.getConnections();
|
|
136
|
-
|
|
137
|
-
|
|
427
|
+
// Update group state with current connections
|
|
428
|
+
const groupState = this.getOrCreateGroupState(groupId);
|
|
429
|
+
groupState.connectedDeviceIds.clear();
|
|
430
|
+
groupState.connectedUserIds.clear();
|
|
431
|
+
for (const conn of connections) {
|
|
432
|
+
groupState.connectedDeviceIds.add(conn.deviceId);
|
|
433
|
+
const userId = await this.getDeviceUserId(conn.deviceId);
|
|
434
|
+
if (userId) {
|
|
435
|
+
groupState.connectedUserIds.add(userId);
|
|
436
|
+
}
|
|
138
437
|
}
|
|
438
|
+
// Query each connected peer for their network info to learn about other devices
|
|
439
|
+
for (const conn of connections) {
|
|
440
|
+
try {
|
|
441
|
+
const networkInfo = await syncGroup.getRemoteNetworkInfo(conn.deviceId);
|
|
442
|
+
// Track all devices this peer knows about
|
|
443
|
+
for (const remoteConn of networkInfo.connections) {
|
|
444
|
+
const userId = await this.getDeviceUserId(remoteConn.deviceId);
|
|
445
|
+
if (userId) {
|
|
446
|
+
this.trackDevice(remoteConn.deviceId, userId, [groupId]);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
// Update which devices are preferred for this group
|
|
450
|
+
this.updatePreferredDevicesFromNetworkInfo(groupId, networkInfo);
|
|
451
|
+
}
|
|
452
|
+
catch (e) {
|
|
453
|
+
// Ignore errors from individual peers
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
// ========================================================================
|
|
458
|
+
// PHASE 3: Ensure user-diverse connections for each group
|
|
459
|
+
// ========================================================================
|
|
460
|
+
// Handle personal data context - just ensure we have some connections
|
|
461
|
+
{
|
|
462
|
+
const personalContext = userContext.userDataContext;
|
|
463
|
+
const personalGroupId = personalContext.dataContextId;
|
|
464
|
+
const syncGroup = this.connectionManager.getPeerGroupDevice(personalContext);
|
|
465
|
+
const connections = syncGroup.getConnections();
|
|
139
466
|
if (connections.length === 0) {
|
|
140
|
-
// use
|
|
467
|
+
// Bootstrap: use sendDeviceMessage to try to find a device
|
|
141
468
|
const response = await this.connectionManager.sendDeviceMessage({
|
|
142
|
-
dataContextId:
|
|
469
|
+
dataContextId: personalGroupId,
|
|
143
470
|
payload: 0,
|
|
144
471
|
toDeviceId: '',
|
|
145
472
|
});
|
|
146
473
|
if (response?.statusCode === 200) {
|
|
147
474
|
const hops = response.hops;
|
|
148
475
|
const targetDeviceId = hops.pop();
|
|
149
|
-
|
|
476
|
+
if (targetDeviceId) {
|
|
477
|
+
await this.connectToDevice(targetDeviceId, personalGroupId);
|
|
478
|
+
}
|
|
150
479
|
}
|
|
151
480
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
481
|
+
}
|
|
482
|
+
await (0, peers_sdk_1.sleep)(500);
|
|
483
|
+
// Handle group data contexts with user-diverse connection strategy
|
|
484
|
+
for (const groupDataContext of userContext.groupDataContexts.values()) {
|
|
485
|
+
const groupId = groupDataContext.dataContextId;
|
|
486
|
+
const syncGroup = this.connectionManager.getPeerGroupDevice(groupDataContext);
|
|
487
|
+
const connections = syncGroup.getConnections();
|
|
488
|
+
// Update group membership from GroupMembers table
|
|
489
|
+
await this.updateGroupMembership(groupId, groupDataContext);
|
|
490
|
+
const groupState = this.getOrCreateGroupState(groupId);
|
|
491
|
+
if (connections.length === 0) {
|
|
492
|
+
// Bootstrap: use sendDeviceMessage to try to find a device for this group
|
|
493
|
+
const response = await this.connectionManager.sendDeviceMessage({
|
|
494
|
+
dataContextId: groupId,
|
|
495
|
+
payload: 0,
|
|
496
|
+
toDeviceId: '',
|
|
497
|
+
});
|
|
498
|
+
if (response?.statusCode === 200) {
|
|
499
|
+
const hops = response.hops;
|
|
500
|
+
const targetDeviceId = hops.pop();
|
|
501
|
+
if (targetDeviceId) {
|
|
502
|
+
await this.connectToDevice(targetDeviceId, groupId);
|
|
162
503
|
}
|
|
163
504
|
}
|
|
505
|
+
continue; // Move to next group, we'll connect more on next check
|
|
506
|
+
}
|
|
507
|
+
// Determine how many other users we need to be connected to
|
|
508
|
+
const targetUserCount = this.getTargetUserCount(groupId);
|
|
509
|
+
const connectedOtherUserCount = [...groupState.connectedUserIds]
|
|
510
|
+
.filter(id => id !== userContext.userId).length;
|
|
511
|
+
// If we're not connected to enough other users, try to connect to more
|
|
512
|
+
if (connectedOtherUserCount < targetUserCount) {
|
|
513
|
+
const neededConnections = targetUserCount - connectedOtherUserCount;
|
|
514
|
+
const devicesToTry = this.getDevicesToConnect(groupId, neededConnections);
|
|
515
|
+
for (const deviceId of devicesToTry) {
|
|
516
|
+
await this.connectToDevice(deviceId, groupId);
|
|
517
|
+
await (0, peers_sdk_1.sleep)(100);
|
|
518
|
+
}
|
|
164
519
|
}
|
|
165
520
|
}
|
|
166
521
|
}
|
|
@@ -196,6 +551,8 @@ class NetworkManager {
|
|
|
196
551
|
});
|
|
197
552
|
// TODO: take this out once we get cached multiaddrs in libp2p
|
|
198
553
|
if (supportedProtocolsResponse === connection_manager_1.TTL0) {
|
|
554
|
+
// Device not reachable, mark as failed
|
|
555
|
+
this.updateDeviceStatus(deviceId, 'triedButFailed');
|
|
199
556
|
return;
|
|
200
557
|
}
|
|
201
558
|
let supportedProtocols = [];
|
|
@@ -215,10 +572,12 @@ class NetworkManager {
|
|
|
215
572
|
if (protocol) {
|
|
216
573
|
if (!supportedProtocols.includes(protocol)) {
|
|
217
574
|
console.warn(`[NetworkManager] Device ${deviceId} does not support protocol ${protocol}`);
|
|
575
|
+
this.updateDeviceStatus(deviceId, 'triedButFailed');
|
|
218
576
|
return;
|
|
219
577
|
}
|
|
220
578
|
}
|
|
221
579
|
this.sortProtocolManagers();
|
|
580
|
+
let anyAttempted = false;
|
|
222
581
|
for (const protocolManager of this.protocolManagers) {
|
|
223
582
|
if (supportedProtocols.includes(protocolManager.protocolName)) {
|
|
224
583
|
if (protocolManager.isConnecting(deviceId)) {
|
|
@@ -227,8 +586,10 @@ class NetworkManager {
|
|
|
227
586
|
if (this.hasConnectionViaProtocol(existingConnection, protocolManager.protocolName)) {
|
|
228
587
|
continue;
|
|
229
588
|
}
|
|
589
|
+
anyAttempted = true;
|
|
230
590
|
try {
|
|
231
591
|
await protocolManager.connectToDevice(deviceId, dataContextId);
|
|
592
|
+
// Success! Status will be updated by updateTrackingFromConnection when connection is added
|
|
232
593
|
return;
|
|
233
594
|
}
|
|
234
595
|
catch (error) {
|
|
@@ -237,6 +598,10 @@ class NetworkManager {
|
|
|
237
598
|
await (0, peers_sdk_1.sleep)(1000);
|
|
238
599
|
}
|
|
239
600
|
}
|
|
601
|
+
// All protocols failed
|
|
602
|
+
if (anyAttempted) {
|
|
603
|
+
this.updateDeviceStatus(deviceId, 'triedButFailed');
|
|
604
|
+
}
|
|
240
605
|
console.warn(`[NetworkManager] Could not establish connection to ${deviceId}`);
|
|
241
606
|
}
|
|
242
607
|
isUsingEncryptedProtocol(connection) {
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peers-app/peers-device",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.8",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"repository": {
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
"lodash": "^4.17.21"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@peers-app/peers-sdk": "^0.8.
|
|
37
|
+
"@peers-app/peers-sdk": "^0.8.8"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@electron/rebuild": "^4.0.1",
|
|
41
|
-
"@peers-app/peers-sdk": "0.8.
|
|
41
|
+
"@peers-app/peers-sdk": "0.8.8",
|
|
42
42
|
"@types/diff-match-patch": "^1.0.36",
|
|
43
43
|
"@types/jest": "^30.0.0",
|
|
44
44
|
"@types/lodash": "^4.17.20",
|