@trap_stevo/filetide 0.0.61 → 0.0.63
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/cjs/FileMessager.js +628 -17
- package/dist/cjs/FileMessagerClient.js +6 -3
- package/dist/cjs/FileTide.js +56 -1
- package/dist/cjs/HUDManagers/TidalyticsInstanceManager.js +69 -0
- package/dist/cjs/HUDManagers/TidalyticsManager.js +9 -0
- package/dist/cjs/HUDManagers/TideSentinelManager.js +143 -0
- package/filetide_core/.tidalytics/000005.ldb +0 -0
- package/filetide_core/.tidalytics/000008.ldb +0 -0
- package/filetide_core/.tidalytics/000011.ldb +0 -0
- package/filetide_core/.tidalytics/000014.ldb +0 -0
- package/filetide_core/.tidalytics/000017.ldb +0 -0
- package/filetide_core/.tidalytics/000020.ldb +0 -0
- package/filetide_core/.tidalytics/000023.ldb +0 -0
- package/filetide_core/.tidalytics/000026.ldb +0 -0
- package/filetide_core/.tidalytics/000029.ldb +0 -0
- package/filetide_core/.tidalytics/000032.ldb +0 -0
- package/filetide_core/.tidalytics/000035.ldb +0 -0
- package/filetide_core/.tidalytics/000038.ldb +0 -0
- package/filetide_core/.tidalytics/000041.ldb +0 -0
- package/filetide_core/.tidalytics/000044.ldb +0 -0
- package/filetide_core/.tidalytics/000047.ldb +0 -0
- package/filetide_core/.tidalytics/000050.ldb +0 -0
- package/filetide_core/.tidalytics/000053.ldb +0 -0
- package/filetide_core/.tidalytics/000056.ldb +0 -0
- package/filetide_core/.tidalytics/000059.ldb +0 -0
- package/filetide_core/.tidalytics/000062.ldb +0 -0
- package/filetide_core/.tidalytics/000065.ldb +0 -0
- package/filetide_core/.tidalytics/000068.ldb +0 -0
- package/filetide_core/.tidalytics/000071.ldb +0 -0
- package/filetide_core/.tidalytics/000074.ldb +0 -0
- package/filetide_core/.tidalytics/000077.ldb +0 -0
- package/filetide_core/.tidalytics/000080.ldb +0 -0
- package/filetide_core/.tidalytics/000083.ldb +0 -0
- package/filetide_core/.tidalytics/000086.ldb +0 -0
- package/filetide_core/.tidalytics/000089.ldb +0 -0
- package/filetide_core/.tidalytics/000090.log +0 -0
- package/filetide_core/.tidalytics/CURRENT +1 -0
- package/filetide_core/.tidalytics/LOCK +0 -0
- package/filetide_core/.tidalytics/LOG +0 -0
- package/filetide_core/.tidalytics/LOG.old +6 -0
- package/filetide_core/.tidalytics/MANIFEST-000088 +0 -0
- package/filetide_core/tide_sentinel/banned-tiders/000092.log +0 -0
- package/filetide_core/tide_sentinel/banned-tiders/CURRENT +1 -0
- package/filetide_core/tide_sentinel/banned-tiders/LOCK +0 -0
- package/filetide_core/tide_sentinel/banned-tiders/LOG +3 -0
- package/filetide_core/tide_sentinel/banned-tiders/LOG.old +3 -0
- package/filetide_core/tide_sentinel/banned-tiders/MANIFEST-000091 +0 -0
- package/iotide_client/tide_session_id.json +1 -0
- package/iotide_client/tide_session_ids.json +5 -0
- package/package.json +5 -3
- package/transfer_states/FileNetServer_FileNetClient_-Documents-TestFileTideDropZone-TidalCore.txt.json +7 -0
package/dist/cjs/FileMessager.js
CHANGED
|
@@ -19,7 +19,11 @@ const {
|
|
|
19
19
|
const {
|
|
20
20
|
FileTransferManager
|
|
21
21
|
} = require("./HUDManagers/FileTransferManager");
|
|
22
|
+
const TideSentinelManager = require("./HUDManagers/TideSentinelManager");
|
|
22
23
|
const HUDTargetQueue = require("./HUDManagers/HUDTargetQueueManager");
|
|
24
|
+
const {
|
|
25
|
+
tidalytics
|
|
26
|
+
} = require("./HUDManagers/TidalyticsManager");
|
|
23
27
|
var _FileMessager_brand = /*#__PURE__*/new WeakSet();
|
|
24
28
|
class FileMessager {
|
|
25
29
|
constructor(options = {
|
|
@@ -28,7 +32,7 @@ class FileMessager {
|
|
|
28
32
|
}, transportOptions = {
|
|
29
33
|
parallelChunks: 3,
|
|
30
34
|
maxRetries: 3
|
|
31
|
-
}, debugMode = false) {
|
|
35
|
+
}, onTideAction = null, debugMode = false, tideSentinelOptions = {}) {
|
|
32
36
|
_classPrivateMethodInitSpec(this, _FileMessager_brand);
|
|
33
37
|
const serverOptions = FileMessagerConfigManager.getServerOptions(options);
|
|
34
38
|
this.transporter = new FileTransferManager(transportOptions);
|
|
@@ -36,9 +40,17 @@ class FileMessager {
|
|
|
36
40
|
this.currentTransferBarrierTransfers = new Map();
|
|
37
41
|
this.clientTransferBarriers = new Map();
|
|
38
42
|
this.currentTidingTransfers = new Map();
|
|
43
|
+
this.tideSentinel = new TideSentinelManager(tideSentinelOptions);
|
|
44
|
+
this.tideSentinel.registerEntryAddedHook((key, entryData) => {
|
|
45
|
+
console.log(key, entryData);
|
|
46
|
+
});
|
|
39
47
|
this.fileNet = new IoTide(serverOptions.port, serverOptions, true, this.onConnect.bind(this), this.onDisconnect.bind(this));
|
|
40
48
|
this.onlineClients = new OmniMap();
|
|
49
|
+
this.onTideAction = onTideAction ?? (() => {});
|
|
41
50
|
this.debugMode = debugMode;
|
|
51
|
+
this.tideSentinelOptions = tideSentinelOptions;
|
|
52
|
+
this.transporterOptions = transportOptions;
|
|
53
|
+
this.options = serverOptions;
|
|
42
54
|
return;
|
|
43
55
|
}
|
|
44
56
|
onConnect(socket) {
|
|
@@ -51,6 +63,10 @@ class FileMessager {
|
|
|
51
63
|
this.onlineClients.delete(socket.id);
|
|
52
64
|
return;
|
|
53
65
|
}
|
|
66
|
+
close() {
|
|
67
|
+
this.fileNet.close();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
54
70
|
start() {
|
|
55
71
|
this.fileNet.on("get-client-transfer-barrier-response", this.handleClientTransferBarrierResponse.bind(this));
|
|
56
72
|
this.fileNet.on("get-client-transfer-state", this.handleGetClientTransferState.bind(this));
|
|
@@ -66,6 +82,7 @@ class FileMessager {
|
|
|
66
82
|
this.fileNet.on("transfer-complete", this.handleFileTransferComplete.bind(this));
|
|
67
83
|
this.fileNet.on("request-transfer-from-client", this.handleRequestTransferFromClient.bind(this));
|
|
68
84
|
this.fileNet.on("client-to-client-transfer", this.handleClientToClientTransfer.bind(this));
|
|
85
|
+
this.fileNet.on("check-client-banned", this.handleCheckClientBanned.bind(this));
|
|
69
86
|
this.fileNet.on("check-client-online", this.handleCheckClientOnline.bind(this));
|
|
70
87
|
this.fileNet.on("client-offline", this.handleClientOffline.bind(this));
|
|
71
88
|
this.fileNet.on("clients-online", this.handleClientsOnline.bind(this));
|
|
@@ -73,6 +90,140 @@ class FileMessager {
|
|
|
73
90
|
this.fileNet.on("client-tiding", this.handleClientTiding.bind(this));
|
|
74
91
|
return;
|
|
75
92
|
}
|
|
93
|
+
|
|
94
|
+
// --- File Messager Tidalytics Management ---
|
|
95
|
+
|
|
96
|
+
async getTidalyticsSince(interval = "1d", source = "storage", filter = {}) {
|
|
97
|
+
return await tidalytics.getMetricsSince(interval, source, filter);
|
|
98
|
+
}
|
|
99
|
+
async getStoredTidalytics(filter = {}) {
|
|
100
|
+
return await tidalytics.getStoredMetrics(filter);
|
|
101
|
+
}
|
|
102
|
+
async getTidalyticsInDomain(domain, options = {}) {
|
|
103
|
+
return await tidalytics.getMetricsInDomain(domain, options);
|
|
104
|
+
}
|
|
105
|
+
getTidalytics(filter = {}) {
|
|
106
|
+
return tidalytics.getMetrics(filter);
|
|
107
|
+
}
|
|
108
|
+
getTidalyticByID(id) {
|
|
109
|
+
return tidalytics.getMetricByID(id);
|
|
110
|
+
}
|
|
111
|
+
searchTidalyticByTagValue(key, match) {
|
|
112
|
+
return tidalytics.searchByTagValue(key, match);
|
|
113
|
+
}
|
|
114
|
+
getTidalyticAggregate(name) {
|
|
115
|
+
return tidalytics.getAggregate(name);
|
|
116
|
+
}
|
|
117
|
+
getTidalyticAggregateByType(type) {
|
|
118
|
+
return tidalytics.getAggregateByType(type);
|
|
119
|
+
}
|
|
120
|
+
groupTidalyticByTag(tagKey) {
|
|
121
|
+
return tidalytics.groupByTag(tagKey);
|
|
122
|
+
}
|
|
123
|
+
getTidalyticTimeSeries(name, options = {}) {
|
|
124
|
+
return tidalytics.getTimeSeries(name, options);
|
|
125
|
+
}
|
|
126
|
+
predictTidalytic(name, config = {}) {
|
|
127
|
+
return tidalytics.predictMetric(name, config);
|
|
128
|
+
}
|
|
129
|
+
async clearTidalytics(domain, options = {}) {
|
|
130
|
+
return await tidalytics.clearMetricsInDomain(domain, options);
|
|
131
|
+
}
|
|
132
|
+
clearAllTidalytics() {
|
|
133
|
+
return tidalytics.clearAllMetrics();
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// --- File Messager Tide Sentinel Management ---
|
|
137
|
+
|
|
138
|
+
banClient(clientID, options = {}) {
|
|
139
|
+
const result = this.tideSentinel.banClient(clientID, options);
|
|
140
|
+
tidalytics.track("tider:banned", {
|
|
141
|
+
value: 1,
|
|
142
|
+
tags: {
|
|
143
|
+
"tider:banned": "tider:banned",
|
|
144
|
+
"tider": "tider",
|
|
145
|
+
clientID
|
|
146
|
+
},
|
|
147
|
+
metadata: {
|
|
148
|
+
clientID,
|
|
149
|
+
options
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
this.onTideAction({
|
|
153
|
+
tideActionID: "ban-client-activated",
|
|
154
|
+
tideActionDate: Date.now(),
|
|
155
|
+
tideActionDetails: {
|
|
156
|
+
clientID,
|
|
157
|
+
options
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
unbanClient(clientID) {
|
|
163
|
+
const result = this.tideSentinel.unbanClient(clientID);
|
|
164
|
+
tidalytics.track("tider:unbanned", {
|
|
165
|
+
value: 1,
|
|
166
|
+
tags: {
|
|
167
|
+
"tider:unbanned": "tider:unbanned",
|
|
168
|
+
"tider": "tider",
|
|
169
|
+
clientID
|
|
170
|
+
},
|
|
171
|
+
metadata: {
|
|
172
|
+
clientID
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
this.onTideAction({
|
|
176
|
+
tideActionID: "unban-client-activated",
|
|
177
|
+
tideActionDate: Date.now(),
|
|
178
|
+
tideActionDetails: {
|
|
179
|
+
clientID
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
clientBanned(clientID) {
|
|
185
|
+
const result = this.tideSentinel.clientBanned(clientID);
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
getBanEntry(clientID) {
|
|
189
|
+
const result = this.tideSentinel.getBanEntry(clientID);
|
|
190
|
+
return result;
|
|
191
|
+
}
|
|
192
|
+
filterBannedClients(filter = {}) {
|
|
193
|
+
const result = this.tideSentinel.filterBannedClients(filter);
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
registerTideSentinelExpireHook(list, callback) {
|
|
197
|
+
const result = this.tideSentinel.registerExpireHook(list, callback);
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
addToTideList(list, key, data) {
|
|
201
|
+
const result = this.tideSentinel.addToList(list, key, data);
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
removeFromTideList(list, key) {
|
|
205
|
+
const result = this.tideSentinel.removeFromList(list, key);
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
inTideList(list, key) {
|
|
209
|
+
const result = this.tideSentinel.inList(list, key);
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
getEntry(list, key) {
|
|
213
|
+
const result = this.tideSentinel.getEntry(list, key);
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
filterTideList(list, filter = {}) {
|
|
217
|
+
const result = this.tideSentinel.filterList(list, filter);
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
findSimilarKeys(keyword, options = {}) {
|
|
221
|
+
const result = this.tideSentinel.findSimilarKeys(keyword, options);
|
|
222
|
+
return result;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// --- File Messager Client Management ---
|
|
226
|
+
|
|
76
227
|
getClientFromID(clientID) {
|
|
77
228
|
const client = this.onlineClients.get(clientID);
|
|
78
229
|
if (!client) {
|
|
@@ -120,6 +271,40 @@ class FileMessager {
|
|
|
120
271
|
path: filePath,
|
|
121
272
|
fileSize
|
|
122
273
|
});
|
|
274
|
+
tidalytics.track("tide:incoming-file", {
|
|
275
|
+
value: 1,
|
|
276
|
+
tags: {
|
|
277
|
+
"tide:incoming-file": "tide:incoming-file",
|
|
278
|
+
"tide": "tide",
|
|
279
|
+
recipientID: clientData.userID,
|
|
280
|
+
senderID: senderData.userID,
|
|
281
|
+
path: filePath,
|
|
282
|
+
fileSize,
|
|
283
|
+
fileName
|
|
284
|
+
},
|
|
285
|
+
metadata: {
|
|
286
|
+
recipientID: clientData.userID,
|
|
287
|
+
senderID: senderData.userID,
|
|
288
|
+
path: filePath,
|
|
289
|
+
fileSize,
|
|
290
|
+
fileName,
|
|
291
|
+
totalChunks,
|
|
292
|
+
chunkSize
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
this.onTideAction({
|
|
296
|
+
tideActionID: "tide-incoming-file",
|
|
297
|
+
tideActionDate: Date.now(),
|
|
298
|
+
tideActionDetails: {
|
|
299
|
+
recipientID: clientData.userID,
|
|
300
|
+
senderID: senderData.userID,
|
|
301
|
+
path: filePath,
|
|
302
|
+
fileSize,
|
|
303
|
+
fileName,
|
|
304
|
+
totalChunks,
|
|
305
|
+
chunkSize
|
|
306
|
+
}
|
|
307
|
+
});
|
|
123
308
|
}
|
|
124
309
|
this.fileNet.emitToTide(client.tideID, "transfer-progress", {
|
|
125
310
|
senderName: senderData.userID,
|
|
@@ -148,6 +333,24 @@ class FileMessager {
|
|
|
148
333
|
});
|
|
149
334
|
}
|
|
150
335
|
}
|
|
336
|
+
saveClientTransferStates(data) {
|
|
337
|
+
const tidingTransfers = this.currentTidingTransfers.get(data.clientID);
|
|
338
|
+
if (tidingTransfers && tidingTransfers.size > 0) {
|
|
339
|
+
for (let recipientID of tidingTransfers.keys()) {
|
|
340
|
+
const recipientConnectionID = FileNetClientManager.getOnlineClient(data.recipientID ?? recipientID).id;
|
|
341
|
+
const client = this.getClientFromID(recipientConnectionID);
|
|
342
|
+
if (client) {
|
|
343
|
+
this.fileNet.emitToTide(client.tideID, "save-current-transfer-states", {
|
|
344
|
+
clientID: recipientID
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
this.currentTidingTransfers.delete(data.clientID);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// --- File Messager Event Management ---
|
|
353
|
+
|
|
151
354
|
handleRequestTransferFromClient(senderTide, transferData) {
|
|
152
355
|
const {
|
|
153
356
|
requesterID,
|
|
@@ -177,6 +380,33 @@ class FileMessager {
|
|
|
177
380
|
totalItemsSent,
|
|
178
381
|
runningOn
|
|
179
382
|
});
|
|
383
|
+
tidalytics.track("file-list:received", {
|
|
384
|
+
value: 1,
|
|
385
|
+
tags: {
|
|
386
|
+
"file-list:received": "file-list:received",
|
|
387
|
+
"file-list": "file-list",
|
|
388
|
+
recipientID,
|
|
389
|
+
senderID,
|
|
390
|
+
totalItems: totalItemsSent,
|
|
391
|
+
runningOn
|
|
392
|
+
},
|
|
393
|
+
metadata: {
|
|
394
|
+
recipientID,
|
|
395
|
+
senderID,
|
|
396
|
+
totalItems: totalItemsSent,
|
|
397
|
+
runningOn
|
|
398
|
+
}
|
|
399
|
+
});
|
|
400
|
+
this.onTideAction({
|
|
401
|
+
tideActionID: "file-list-received",
|
|
402
|
+
tideActionDate: Date.now(),
|
|
403
|
+
tideActionDetails: {
|
|
404
|
+
recipientID,
|
|
405
|
+
senderID,
|
|
406
|
+
totalItems: totalItemsSent,
|
|
407
|
+
runningOn
|
|
408
|
+
}
|
|
409
|
+
});
|
|
180
410
|
} catch (error) {
|
|
181
411
|
console.error(`[FileTide ~ Net Scanner] ~ `, error);
|
|
182
412
|
return;
|
|
@@ -228,6 +458,30 @@ class FileMessager {
|
|
|
228
458
|
recipientID,
|
|
229
459
|
depth
|
|
230
460
|
});
|
|
461
|
+
tidalytics.track("file-list:request", {
|
|
462
|
+
value: 1,
|
|
463
|
+
tags: {
|
|
464
|
+
"file-list:request": "file-list:request",
|
|
465
|
+
"file-list": "file-list",
|
|
466
|
+
recipientID,
|
|
467
|
+
requesterID,
|
|
468
|
+
depth
|
|
469
|
+
},
|
|
470
|
+
metadata: {
|
|
471
|
+
recipientID,
|
|
472
|
+
requesterID,
|
|
473
|
+
depth
|
|
474
|
+
}
|
|
475
|
+
});
|
|
476
|
+
this.onTideAction({
|
|
477
|
+
tideActionID: "file-list-request",
|
|
478
|
+
tideActionDate: Date.now(),
|
|
479
|
+
tideActionDetails: {
|
|
480
|
+
recipientID,
|
|
481
|
+
requesterID,
|
|
482
|
+
depth
|
|
483
|
+
}
|
|
484
|
+
});
|
|
231
485
|
} catch (error) {
|
|
232
486
|
console.error(`[FileTide ~ Net Scanner] ~ `, error);
|
|
233
487
|
return;
|
|
@@ -275,6 +529,42 @@ class FileMessager {
|
|
|
275
529
|
fileName,
|
|
276
530
|
filePath
|
|
277
531
|
});
|
|
532
|
+
tidalytics.track("tide:completed-transfer", {
|
|
533
|
+
value: 1,
|
|
534
|
+
tags: {
|
|
535
|
+
"tide:completed-transfer": "tide:completed-transfer",
|
|
536
|
+
"tide": "tide",
|
|
537
|
+
recipientID: recipientId,
|
|
538
|
+
senderID,
|
|
539
|
+
path: filePath,
|
|
540
|
+
fileSize,
|
|
541
|
+
fileName
|
|
542
|
+
},
|
|
543
|
+
metadata: {
|
|
544
|
+
recipientID: recipientId,
|
|
545
|
+
senderID,
|
|
546
|
+
path: filePath,
|
|
547
|
+
fileSize,
|
|
548
|
+
fileName,
|
|
549
|
+
completedChunks,
|
|
550
|
+
totalChunks,
|
|
551
|
+
chunkSize
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
this.onTideAction({
|
|
555
|
+
tideActionID: "tide-completed-transfer",
|
|
556
|
+
tideActionDate: Date.now(),
|
|
557
|
+
tideActionDetails: {
|
|
558
|
+
recipientID: recipientId,
|
|
559
|
+
senderID,
|
|
560
|
+
path: filePath,
|
|
561
|
+
fileSize,
|
|
562
|
+
fileName,
|
|
563
|
+
completedChunks,
|
|
564
|
+
totalChunks,
|
|
565
|
+
chunkSize
|
|
566
|
+
}
|
|
567
|
+
});
|
|
278
568
|
console.log(`[FileTide ~ File Messager] ~ File transfer completed: ${fileName} from ${senderID} to ${recipientId}`);
|
|
279
569
|
const tidingTransfers = this.currentTidingTransfers.get(senderID);
|
|
280
570
|
if (tidingTransfers) {
|
|
@@ -319,6 +609,42 @@ class FileMessager {
|
|
|
319
609
|
fileName,
|
|
320
610
|
filePath
|
|
321
611
|
});
|
|
612
|
+
tidalytics.track("tide:completed-transfer", {
|
|
613
|
+
value: 1,
|
|
614
|
+
tags: {
|
|
615
|
+
"tide:completed-transfer": "tide:completed-transfer",
|
|
616
|
+
"tide": "tide",
|
|
617
|
+
recipientID: recipientId,
|
|
618
|
+
senderID,
|
|
619
|
+
path: filePath,
|
|
620
|
+
fileSize,
|
|
621
|
+
fileName
|
|
622
|
+
},
|
|
623
|
+
metadata: {
|
|
624
|
+
recipientID: recipientId,
|
|
625
|
+
senderID,
|
|
626
|
+
path: filePath,
|
|
627
|
+
fileSize,
|
|
628
|
+
fileName,
|
|
629
|
+
completedChunks,
|
|
630
|
+
totalChunks,
|
|
631
|
+
chunkSize
|
|
632
|
+
}
|
|
633
|
+
});
|
|
634
|
+
this.onTideAction({
|
|
635
|
+
tideActionID: "tide-completed-transfer",
|
|
636
|
+
tideActionDate: Date.now(),
|
|
637
|
+
tideActionDetails: {
|
|
638
|
+
recipientID: recipientId,
|
|
639
|
+
senderID,
|
|
640
|
+
path: filePath,
|
|
641
|
+
fileSize,
|
|
642
|
+
fileName,
|
|
643
|
+
completedChunks,
|
|
644
|
+
totalChunks,
|
|
645
|
+
chunkSize
|
|
646
|
+
}
|
|
647
|
+
});
|
|
322
648
|
console.log(`[FileTide ~ File Messager] ~ File transfer completed: ${fileName} from ${senderID} to ${recipientId}`);
|
|
323
649
|
const tidingTransfers = this.currentTidingTransfers.get(senderID);
|
|
324
650
|
if (tidingTransfers) {
|
|
@@ -350,12 +676,92 @@ class FileMessager {
|
|
|
350
676
|
this.fileNet.emitToTide(senderClient.tideID, "transfer-barrier-response", accepted);
|
|
351
677
|
this.currentTransferBarrierTransfers.delete(data.transferID);
|
|
352
678
|
if (accepted) {
|
|
679
|
+
tidalytics.track("tide-barrier:accepted", {
|
|
680
|
+
value: 1,
|
|
681
|
+
tags: {
|
|
682
|
+
"tide-barrier:accepted": "tide-barrier:accepted",
|
|
683
|
+
"tide-barrier": "tide-barrier",
|
|
684
|
+
recipientID: data.recipientID,
|
|
685
|
+
transferID: data.transferID,
|
|
686
|
+
senderID: data.clientID,
|
|
687
|
+
tideTransferType: data.transferType,
|
|
688
|
+
tideDestinationPath: data.path,
|
|
689
|
+
tideOriginPath: data.originPath,
|
|
690
|
+
tideItemSize: data.itemSize
|
|
691
|
+
},
|
|
692
|
+
metadata: {
|
|
693
|
+
recipientID: data.recipientID,
|
|
694
|
+
transferID: data.transferID,
|
|
695
|
+
senderID: data.clientID,
|
|
696
|
+
tideItemCount: data.itemCount,
|
|
697
|
+
tideItemSize: data.itemSize,
|
|
698
|
+
tideTransferContentType: data.transferContentType,
|
|
699
|
+
tideTransferType: data.transferType,
|
|
700
|
+
tideDestinationPath: data.path,
|
|
701
|
+
tideOriginPath: data.originPath
|
|
702
|
+
}
|
|
703
|
+
});
|
|
704
|
+
this.onTideAction({
|
|
705
|
+
tideActionID: "tide-barrier-accepted",
|
|
706
|
+
tideActionDate: Date.now(),
|
|
707
|
+
tideActionDetails: {
|
|
708
|
+
recipientID: data.recipientID,
|
|
709
|
+
transferID: data.transferID,
|
|
710
|
+
senderID: data.clientID,
|
|
711
|
+
tideItemCount: data.itemCount,
|
|
712
|
+
tideItemSize: data.itemSize,
|
|
713
|
+
tideTransferContentType: data.transferContentType,
|
|
714
|
+
tideTransferType: data.transferType,
|
|
715
|
+
tideDestinationPath: data.path,
|
|
716
|
+
tideOriginPath: data.originPath
|
|
717
|
+
}
|
|
718
|
+
});
|
|
353
719
|
this.fileNet.emitToTide(client.tideID, "accepted-transfer", {
|
|
354
720
|
accepted,
|
|
355
721
|
...data
|
|
356
722
|
});
|
|
357
723
|
return;
|
|
358
724
|
}
|
|
725
|
+
tidalytics.track("tide-barrier:denied", {
|
|
726
|
+
value: 1,
|
|
727
|
+
tags: {
|
|
728
|
+
"tide-barrier:denied": "tide-barrier:denied",
|
|
729
|
+
"tide-barrier": "tide-barrier",
|
|
730
|
+
recipientID: data.recipientID,
|
|
731
|
+
transferID: data.transferID,
|
|
732
|
+
senderID: data.clientID,
|
|
733
|
+
tideTransferType: data.transferType,
|
|
734
|
+
tideDestinationPath: data.path,
|
|
735
|
+
tideOriginPath: data.originPath,
|
|
736
|
+
tideItemSize: data.itemSize
|
|
737
|
+
},
|
|
738
|
+
metadata: {
|
|
739
|
+
recipientID: data.recipientID,
|
|
740
|
+
transferID: data.transferID,
|
|
741
|
+
senderID: data.clientID,
|
|
742
|
+
tideItemCount: data.itemCount,
|
|
743
|
+
tideItemSize: data.itemSize,
|
|
744
|
+
tideTransferContentType: data.transferContentType,
|
|
745
|
+
tideTransferType: data.transferType,
|
|
746
|
+
tideDestinationPath: data.path,
|
|
747
|
+
tideOriginPath: data.originPath
|
|
748
|
+
}
|
|
749
|
+
});
|
|
750
|
+
this.onTideAction({
|
|
751
|
+
tideActionID: "tide-barrier-denied",
|
|
752
|
+
tideActionDate: Date.now(),
|
|
753
|
+
tideActionDetails: {
|
|
754
|
+
recipientID: data.recipientID,
|
|
755
|
+
transferID: data.transferID,
|
|
756
|
+
senderID: data.clientID,
|
|
757
|
+
tideItemCount: data.itemCount,
|
|
758
|
+
tideItemSize: data.itemSize,
|
|
759
|
+
tideTransferContentType: data.transferContentType,
|
|
760
|
+
tideTransferType: data.transferType,
|
|
761
|
+
tideDestinationPath: data.path,
|
|
762
|
+
tideOriginPath: data.originPath
|
|
763
|
+
}
|
|
764
|
+
});
|
|
359
765
|
this.fileNet.emitToTide(client.tideID, "denied-transfer", {
|
|
360
766
|
accepted,
|
|
361
767
|
...data
|
|
@@ -424,7 +830,58 @@ class FileMessager {
|
|
|
424
830
|
}
|
|
425
831
|
handleAcknowledgeTransferTide(senderTide, data) {
|
|
426
832
|
try {
|
|
427
|
-
|
|
833
|
+
const transferETA = data.transferStats.timeLeft <= 0 ? "Now" : FileNetUtilityManager.convertSeconds(data.transferStats.timeLeft !== null && data.transferStats.timeLeft !== undefined ? data.transferStats.timeLeft.toFixed(2) : Infinity);
|
|
834
|
+
const transferProgress = data.transferStats.progress !== null && data.transferStats.progress !== undefined ? data.transferStats.progress.toFixed(2) : "N/A";
|
|
835
|
+
const currentTransferredSize = FileNetUtilityManager.getFormattedSize(data.transferStats.current, true);
|
|
836
|
+
const transferSize = FileNetUtilityManager.getFormattedSize(data.transferStats.totalSize, true);
|
|
837
|
+
const transferSpeed = FileNetUtilityManager.getFormattedSize(data.transferStats.speed, true);
|
|
838
|
+
const transferStartTime = data.transferStats.startTime;
|
|
839
|
+
const fileName = data.fileName;
|
|
840
|
+
console.log(`[FileTide ~ Net Activity] ~ ${data.recipientName} acknowledged tide transfer from ${data.senderName}.\n\n\t~ [${fileName}-${transferStartTime}] ~\n\n\t\tFile Name ~ ${fileName}\n\t\tDestination ~ ${data.path}\n\n\t\t\tProgress ~ ${transferProgress}%\n\t\t\tETA ~ ${transferETA}\n\t\t\tSpeed ~ ${transferSpeed}/s\n\t\t\tSize ~ ${transferSize}\n\t\t\tTransferred ~ ${currentTransferredSize}\n`);
|
|
841
|
+
tidalytics.track("tide:transfer-state", {
|
|
842
|
+
value: 1,
|
|
843
|
+
tags: {
|
|
844
|
+
"tide:transfer-state": "tide:transfer-state",
|
|
845
|
+
"tide": "tide",
|
|
846
|
+
transferStateID: data.transferStateID,
|
|
847
|
+
recipientID: data.recipientName,
|
|
848
|
+
senderID: data.senderName,
|
|
849
|
+
path: data.path,
|
|
850
|
+
startTime: transferStartTime,
|
|
851
|
+
transferSize,
|
|
852
|
+
fileName
|
|
853
|
+
},
|
|
854
|
+
metadata: {
|
|
855
|
+
transferStateID: data.transferStateID,
|
|
856
|
+
recipientID: data.recipientName,
|
|
857
|
+
senderID: data.senderName,
|
|
858
|
+
path: data.path,
|
|
859
|
+
startTime: transferStartTime,
|
|
860
|
+
currentTransferredSize,
|
|
861
|
+
speed: transferSpeed,
|
|
862
|
+
transferProgress,
|
|
863
|
+
transferSize,
|
|
864
|
+
transferETA,
|
|
865
|
+
fileName
|
|
866
|
+
}
|
|
867
|
+
});
|
|
868
|
+
this.onTideAction({
|
|
869
|
+
tideActionID: "tide-transfer-state",
|
|
870
|
+
tideActionDate: Date.now(),
|
|
871
|
+
tideActionDetails: {
|
|
872
|
+
transferStateID: data.transferStateID,
|
|
873
|
+
recipientID: data.recipientName,
|
|
874
|
+
senderID: data.senderName,
|
|
875
|
+
path: data.path,
|
|
876
|
+
startTime: transferStartTime,
|
|
877
|
+
currentTransferredSize,
|
|
878
|
+
speed: transferSpeed,
|
|
879
|
+
transferProgress,
|
|
880
|
+
transferSize,
|
|
881
|
+
transferETA,
|
|
882
|
+
fileName
|
|
883
|
+
}
|
|
884
|
+
});
|
|
428
885
|
} catch (error) {
|
|
429
886
|
console.error(`[FileTide ~ Net Activity] ~ ${data.recipientName} acknowledged tide transfer from ${data.senderName}.\n\n${error}`);
|
|
430
887
|
}
|
|
@@ -449,11 +906,45 @@ class FileMessager {
|
|
|
449
906
|
...data,
|
|
450
907
|
currentSender: data.senderID
|
|
451
908
|
});
|
|
909
|
+
const now = new Date();
|
|
910
|
+
tidalytics.track("tide:incoming-transfer", {
|
|
911
|
+
value: 1,
|
|
912
|
+
tags: {
|
|
913
|
+
"tide:incoming-transfer": "tide:incoming-transfer",
|
|
914
|
+
"tide": "tide",
|
|
915
|
+
recipientID: data.recipientID,
|
|
916
|
+
senderID: data.senderID,
|
|
917
|
+
fileSize: data.fileSize,
|
|
918
|
+
fileName: data.fileName,
|
|
919
|
+
path: data.path,
|
|
920
|
+
startedOn: now
|
|
921
|
+
},
|
|
922
|
+
metadata: {
|
|
923
|
+
recipientID: data.recipientID,
|
|
924
|
+
senderID: data.senderID,
|
|
925
|
+
fileSize: data.fileSize,
|
|
926
|
+
fileName: data.fileName,
|
|
927
|
+
path: data.path,
|
|
928
|
+
startedOn: now
|
|
929
|
+
}
|
|
930
|
+
});
|
|
931
|
+
this.onTideAction({
|
|
932
|
+
tideActionID: "tide-incoming-transfer",
|
|
933
|
+
tideActionDate: Date.now(),
|
|
934
|
+
tideActionDetails: {
|
|
935
|
+
recipientID: data.recipientID,
|
|
936
|
+
senderID: data.senderID,
|
|
937
|
+
fileSize: data.fileSize,
|
|
938
|
+
fileName: data.fileName,
|
|
939
|
+
path: data.path,
|
|
940
|
+
startedOn: now
|
|
941
|
+
}
|
|
942
|
+
});
|
|
452
943
|
if (!this.currentTidingTransfers.get(data.senderID) || this.currentTidingTransfers.get(data.senderID).length <= 0) {
|
|
453
944
|
const tidingTransfers = new Map();
|
|
454
945
|
tidingTransfers.set(data.recipientID, {
|
|
455
946
|
recipientID: data.recipientID,
|
|
456
|
-
startedOn:
|
|
947
|
+
startedOn: now,
|
|
457
948
|
size: data.fileSize,
|
|
458
949
|
path: data.path
|
|
459
950
|
});
|
|
@@ -462,7 +953,7 @@ class FileMessager {
|
|
|
462
953
|
}
|
|
463
954
|
this.currentTidingTransfers.get(data.senderID).set(data.recipientID, {
|
|
464
955
|
recipientID: data.recipientID,
|
|
465
|
-
startedOn:
|
|
956
|
+
startedOn: now,
|
|
466
957
|
size: data.fileSize,
|
|
467
958
|
path: data.path
|
|
468
959
|
});
|
|
@@ -477,6 +968,40 @@ class FileMessager {
|
|
|
477
968
|
handleFileTransferComplete(senderTide, data) {
|
|
478
969
|
console.log(`File transfer completed: ${data.fileName}`);
|
|
479
970
|
}
|
|
971
|
+
async handleCheckClientBanned(senderTide, data) {
|
|
972
|
+
console.log(`[FileTide ~ Net Activity] ~ Checking if client ~ ${data.clientID} banned...`);
|
|
973
|
+
try {
|
|
974
|
+
const clientBanned = await this.clientBanned(data.tideID);
|
|
975
|
+
if (!clientBanned) {
|
|
976
|
+
console.log(`[FileTide ~ Net Activity] ~ Client ~ ${data.clientID} access authorized!`);
|
|
977
|
+
this.fileNet.emit("retrieved-client-banned", {
|
|
978
|
+
banned: false,
|
|
979
|
+
clientID: data.clientID,
|
|
980
|
+
tideID: data.tideID,
|
|
981
|
+
bannedDetails: null
|
|
982
|
+
});
|
|
983
|
+
return;
|
|
984
|
+
}
|
|
985
|
+
console.log(`[FileTide ~ Net Activity] ~ Client ~ ${data.clientID} banned.`);
|
|
986
|
+
const bannedClientDetails = await this.getBanEntry(data.tideID);
|
|
987
|
+
FileNetClientManager.clearOnlineClient(data.clientID);
|
|
988
|
+
this.saveClientTransferStates(data);
|
|
989
|
+
this.fileNet.emit("retrieved-client-banned", {
|
|
990
|
+
banned: true,
|
|
991
|
+
clientID: data.clientID,
|
|
992
|
+
tideID: data.tideID,
|
|
993
|
+
bannedDetails: bannedClientDetails
|
|
994
|
+
});
|
|
995
|
+
} catch (error) {
|
|
996
|
+
this.fileNet.emit("retrieved-client-banned", {
|
|
997
|
+
banned: false,
|
|
998
|
+
clientID: data.clientID,
|
|
999
|
+
tideID: data.tideID,
|
|
1000
|
+
bannedDetails: null
|
|
1001
|
+
});
|
|
1002
|
+
return;
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
480
1005
|
handleCheckClientOnline(senderTide, data) {
|
|
481
1006
|
console.log(`[FileTide ~ Net Activity] ~ Checking if client ~ ${data.clientID} online...`);
|
|
482
1007
|
try {
|
|
@@ -524,6 +1049,40 @@ class FileMessager {
|
|
|
524
1049
|
const currentClientID = clientID;
|
|
525
1050
|
clientID = nClientID;
|
|
526
1051
|
this.fileNet.emitToTide(tideID, "current-client-id-already-online", clientID);
|
|
1052
|
+
tidalytics.track("tider:already-online", {
|
|
1053
|
+
value: 1,
|
|
1054
|
+
tags: {
|
|
1055
|
+
"tider:already-online": "tider:already-online",
|
|
1056
|
+
"tider": "tider",
|
|
1057
|
+
originUser: originClientID,
|
|
1058
|
+
pUser: currentClientID,
|
|
1059
|
+
user: nClientID,
|
|
1060
|
+
tideID: senderTide.tideID,
|
|
1061
|
+
connectedOn: Date.now()
|
|
1062
|
+
},
|
|
1063
|
+
metadata: {
|
|
1064
|
+
currentTideChannel: currentTideChannel || "file-room",
|
|
1065
|
+
originUser: originClientID,
|
|
1066
|
+
user: nClientID,
|
|
1067
|
+
connectionID,
|
|
1068
|
+
pClientID: currentClientID,
|
|
1069
|
+
tideID: senderTide.tideID,
|
|
1070
|
+
connectedOn: Date.now()
|
|
1071
|
+
}
|
|
1072
|
+
});
|
|
1073
|
+
this.onTideAction({
|
|
1074
|
+
tideActionID: "tider-already-online",
|
|
1075
|
+
tideActionDate: Date.now(),
|
|
1076
|
+
tideActionDetails: {
|
|
1077
|
+
currentTideChannel: currentTideChannel || "file-room",
|
|
1078
|
+
originUser: originClientID,
|
|
1079
|
+
user: nClientID,
|
|
1080
|
+
connectionID,
|
|
1081
|
+
pClientID: currentClientID,
|
|
1082
|
+
tideID: senderTide.tideID,
|
|
1083
|
+
connectedOn: Date.now()
|
|
1084
|
+
}
|
|
1085
|
+
});
|
|
527
1086
|
FileNetClientManager.updateOnlineClient(nClientID, {
|
|
528
1087
|
pClientID: currentClientID,
|
|
529
1088
|
clientID: nClientID,
|
|
@@ -535,6 +1094,38 @@ class FileMessager {
|
|
|
535
1094
|
});
|
|
536
1095
|
return;
|
|
537
1096
|
}
|
|
1097
|
+
tidalytics.track("tider:online", {
|
|
1098
|
+
value: 1,
|
|
1099
|
+
tags: {
|
|
1100
|
+
"tider:online": "tider:online",
|
|
1101
|
+
"tider": "tider",
|
|
1102
|
+
originUser: originClientID,
|
|
1103
|
+
user: clientID,
|
|
1104
|
+
tideID
|
|
1105
|
+
},
|
|
1106
|
+
metadata: {
|
|
1107
|
+
currentTideChannel: currentTideChannel || "file-room",
|
|
1108
|
+
connectedOn: Date.now(),
|
|
1109
|
+
originUser: originClientID,
|
|
1110
|
+
user: clientID,
|
|
1111
|
+
connectionID,
|
|
1112
|
+
pClientID,
|
|
1113
|
+
tideID
|
|
1114
|
+
}
|
|
1115
|
+
});
|
|
1116
|
+
this.onTideAction({
|
|
1117
|
+
tideActionID: "tider-online",
|
|
1118
|
+
tideActionDate: Date.now(),
|
|
1119
|
+
tideActionDetails: {
|
|
1120
|
+
currentTideChannel: currentTideChannel || "file-room",
|
|
1121
|
+
connectedOn: Date.now(),
|
|
1122
|
+
originUser: originClientID,
|
|
1123
|
+
user: clientID,
|
|
1124
|
+
connectionID,
|
|
1125
|
+
pClientID,
|
|
1126
|
+
tideID
|
|
1127
|
+
}
|
|
1128
|
+
});
|
|
538
1129
|
FileNetClientManager.addOnlineClient(clientID, pClientID, tideID, connectionID, {
|
|
539
1130
|
connectedOn: Date.now(),
|
|
540
1131
|
currentTideChannel: currentTideChannel || "file-room",
|
|
@@ -557,6 +1148,38 @@ class FileMessager {
|
|
|
557
1148
|
console.log(!clientDetails ? `[FileTide ~ Net Activity] ~ Client ~ ${clientData.clientID} already offline.` : `[FileTide ~ Net Activity] ~ Unauthorized offline signal from connection ID ~ ${clientData.connectionID}.`);
|
|
558
1149
|
return;
|
|
559
1150
|
}
|
|
1151
|
+
tidalytics.track("tider:offline", {
|
|
1152
|
+
value: 1,
|
|
1153
|
+
tags: {
|
|
1154
|
+
"tider:offline": "tider:offline",
|
|
1155
|
+
"tider": "tider",
|
|
1156
|
+
originUser: clientDetails.originClientID,
|
|
1157
|
+
user: clientDetails.clientID,
|
|
1158
|
+
tideID: clientDetails.tideID
|
|
1159
|
+
},
|
|
1160
|
+
metadata: {
|
|
1161
|
+
currentTideChannel: clientDetails.currentTideChannel || "file-room",
|
|
1162
|
+
originUser: clientDetails.originClientID,
|
|
1163
|
+
user: clientDetails.clientID,
|
|
1164
|
+
connectionID: clientDetails.connectionID,
|
|
1165
|
+
pClientID: clientDetails.pClientID,
|
|
1166
|
+
tideID: clientDetails.tideID,
|
|
1167
|
+
connectedOn: clientDetails.connectedOn
|
|
1168
|
+
}
|
|
1169
|
+
});
|
|
1170
|
+
this.onTideAction({
|
|
1171
|
+
tideActionID: "tider-offline",
|
|
1172
|
+
tideActionDate: Date.now(),
|
|
1173
|
+
tideActionDetails: {
|
|
1174
|
+
currentTideChannel: clientDetails.currentTideChannel || "file-room",
|
|
1175
|
+
originUser: clientDetails.originClientID,
|
|
1176
|
+
user: clientDetails.clientID,
|
|
1177
|
+
connectionID: clientDetails.connectionID,
|
|
1178
|
+
pClientID: clientDetails.pClientID,
|
|
1179
|
+
tideID: clientDetails.tideID,
|
|
1180
|
+
connectedOn: clientDetails.connectedOn
|
|
1181
|
+
}
|
|
1182
|
+
});
|
|
560
1183
|
FileNetClientManager.clearOnlineClient(clientData.clientID);
|
|
561
1184
|
const currentOnlineClients = Object.fromEntries(FileNetClientManager.getOnlineClients());
|
|
562
1185
|
this.fileNet.emit("current-online-clients", currentOnlineClients);
|
|
@@ -565,19 +1188,7 @@ class FileMessager {
|
|
|
565
1188
|
this.fileNet.emitToTide(senderClient.tideID, "save-current-transfer-states", {
|
|
566
1189
|
clientID: clientData.clientID
|
|
567
1190
|
});
|
|
568
|
-
|
|
569
|
-
if (tidingTransfers && tidingTransfers.size > 0) {
|
|
570
|
-
for (let recipientID of tidingTransfers.keys()) {
|
|
571
|
-
const recipientConnectionID = FileNetClientManager.getOnlineClient(clientData.recipientID).id;
|
|
572
|
-
const client = this.getClientFromID(recipientConnectionID);
|
|
573
|
-
if (client) {
|
|
574
|
-
this.fileNet.emitToTide(client.tideID, "save-current-transfer-states", {
|
|
575
|
-
clientID: recipientID
|
|
576
|
-
});
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
this.currentTidingTransfers.delete(clientData.clientID);
|
|
580
|
-
}
|
|
1191
|
+
this.saveClientTransferStates(clientData);
|
|
581
1192
|
} catch (error) {
|
|
582
1193
|
console.log(`[FileTide ~ Net Activity] ~ Did not process client ~ ${clientData} offline signal ~ ${error}`);
|
|
583
1194
|
}
|