@trap_stevo/filetide 0.0.62 → 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 +622 -17
- package/dist/cjs/FileMessagerClient.js +6 -3
- package/dist/cjs/FileTide.js +55 -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,15 @@ 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;
|
|
42
52
|
this.transporterOptions = transportOptions;
|
|
43
53
|
this.options = serverOptions;
|
|
44
54
|
return;
|
|
@@ -72,6 +82,7 @@ class FileMessager {
|
|
|
72
82
|
this.fileNet.on("transfer-complete", this.handleFileTransferComplete.bind(this));
|
|
73
83
|
this.fileNet.on("request-transfer-from-client", this.handleRequestTransferFromClient.bind(this));
|
|
74
84
|
this.fileNet.on("client-to-client-transfer", this.handleClientToClientTransfer.bind(this));
|
|
85
|
+
this.fileNet.on("check-client-banned", this.handleCheckClientBanned.bind(this));
|
|
75
86
|
this.fileNet.on("check-client-online", this.handleCheckClientOnline.bind(this));
|
|
76
87
|
this.fileNet.on("client-offline", this.handleClientOffline.bind(this));
|
|
77
88
|
this.fileNet.on("clients-online", this.handleClientsOnline.bind(this));
|
|
@@ -79,6 +90,140 @@ class FileMessager {
|
|
|
79
90
|
this.fileNet.on("client-tiding", this.handleClientTiding.bind(this));
|
|
80
91
|
return;
|
|
81
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
|
+
|
|
82
227
|
getClientFromID(clientID) {
|
|
83
228
|
const client = this.onlineClients.get(clientID);
|
|
84
229
|
if (!client) {
|
|
@@ -126,6 +271,40 @@ class FileMessager {
|
|
|
126
271
|
path: filePath,
|
|
127
272
|
fileSize
|
|
128
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
|
+
});
|
|
129
308
|
}
|
|
130
309
|
this.fileNet.emitToTide(client.tideID, "transfer-progress", {
|
|
131
310
|
senderName: senderData.userID,
|
|
@@ -154,6 +333,24 @@ class FileMessager {
|
|
|
154
333
|
});
|
|
155
334
|
}
|
|
156
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
|
+
|
|
157
354
|
handleRequestTransferFromClient(senderTide, transferData) {
|
|
158
355
|
const {
|
|
159
356
|
requesterID,
|
|
@@ -183,6 +380,33 @@ class FileMessager {
|
|
|
183
380
|
totalItemsSent,
|
|
184
381
|
runningOn
|
|
185
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
|
+
});
|
|
186
410
|
} catch (error) {
|
|
187
411
|
console.error(`[FileTide ~ Net Scanner] ~ `, error);
|
|
188
412
|
return;
|
|
@@ -234,6 +458,30 @@ class FileMessager {
|
|
|
234
458
|
recipientID,
|
|
235
459
|
depth
|
|
236
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
|
+
});
|
|
237
485
|
} catch (error) {
|
|
238
486
|
console.error(`[FileTide ~ Net Scanner] ~ `, error);
|
|
239
487
|
return;
|
|
@@ -281,6 +529,42 @@ class FileMessager {
|
|
|
281
529
|
fileName,
|
|
282
530
|
filePath
|
|
283
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
|
+
});
|
|
284
568
|
console.log(`[FileTide ~ File Messager] ~ File transfer completed: ${fileName} from ${senderID} to ${recipientId}`);
|
|
285
569
|
const tidingTransfers = this.currentTidingTransfers.get(senderID);
|
|
286
570
|
if (tidingTransfers) {
|
|
@@ -325,6 +609,42 @@ class FileMessager {
|
|
|
325
609
|
fileName,
|
|
326
610
|
filePath
|
|
327
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
|
+
});
|
|
328
648
|
console.log(`[FileTide ~ File Messager] ~ File transfer completed: ${fileName} from ${senderID} to ${recipientId}`);
|
|
329
649
|
const tidingTransfers = this.currentTidingTransfers.get(senderID);
|
|
330
650
|
if (tidingTransfers) {
|
|
@@ -356,12 +676,92 @@ class FileMessager {
|
|
|
356
676
|
this.fileNet.emitToTide(senderClient.tideID, "transfer-barrier-response", accepted);
|
|
357
677
|
this.currentTransferBarrierTransfers.delete(data.transferID);
|
|
358
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
|
+
});
|
|
359
719
|
this.fileNet.emitToTide(client.tideID, "accepted-transfer", {
|
|
360
720
|
accepted,
|
|
361
721
|
...data
|
|
362
722
|
});
|
|
363
723
|
return;
|
|
364
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
|
+
});
|
|
365
765
|
this.fileNet.emitToTide(client.tideID, "denied-transfer", {
|
|
366
766
|
accepted,
|
|
367
767
|
...data
|
|
@@ -430,7 +830,58 @@ class FileMessager {
|
|
|
430
830
|
}
|
|
431
831
|
handleAcknowledgeTransferTide(senderTide, data) {
|
|
432
832
|
try {
|
|
433
|
-
|
|
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
|
+
});
|
|
434
885
|
} catch (error) {
|
|
435
886
|
console.error(`[FileTide ~ Net Activity] ~ ${data.recipientName} acknowledged tide transfer from ${data.senderName}.\n\n${error}`);
|
|
436
887
|
}
|
|
@@ -455,11 +906,45 @@ class FileMessager {
|
|
|
455
906
|
...data,
|
|
456
907
|
currentSender: data.senderID
|
|
457
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
|
+
});
|
|
458
943
|
if (!this.currentTidingTransfers.get(data.senderID) || this.currentTidingTransfers.get(data.senderID).length <= 0) {
|
|
459
944
|
const tidingTransfers = new Map();
|
|
460
945
|
tidingTransfers.set(data.recipientID, {
|
|
461
946
|
recipientID: data.recipientID,
|
|
462
|
-
startedOn:
|
|
947
|
+
startedOn: now,
|
|
463
948
|
size: data.fileSize,
|
|
464
949
|
path: data.path
|
|
465
950
|
});
|
|
@@ -468,7 +953,7 @@ class FileMessager {
|
|
|
468
953
|
}
|
|
469
954
|
this.currentTidingTransfers.get(data.senderID).set(data.recipientID, {
|
|
470
955
|
recipientID: data.recipientID,
|
|
471
|
-
startedOn:
|
|
956
|
+
startedOn: now,
|
|
472
957
|
size: data.fileSize,
|
|
473
958
|
path: data.path
|
|
474
959
|
});
|
|
@@ -483,6 +968,40 @@ class FileMessager {
|
|
|
483
968
|
handleFileTransferComplete(senderTide, data) {
|
|
484
969
|
console.log(`File transfer completed: ${data.fileName}`);
|
|
485
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
|
+
}
|
|
486
1005
|
handleCheckClientOnline(senderTide, data) {
|
|
487
1006
|
console.log(`[FileTide ~ Net Activity] ~ Checking if client ~ ${data.clientID} online...`);
|
|
488
1007
|
try {
|
|
@@ -530,6 +1049,40 @@ class FileMessager {
|
|
|
530
1049
|
const currentClientID = clientID;
|
|
531
1050
|
clientID = nClientID;
|
|
532
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
|
+
});
|
|
533
1086
|
FileNetClientManager.updateOnlineClient(nClientID, {
|
|
534
1087
|
pClientID: currentClientID,
|
|
535
1088
|
clientID: nClientID,
|
|
@@ -541,6 +1094,38 @@ class FileMessager {
|
|
|
541
1094
|
});
|
|
542
1095
|
return;
|
|
543
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
|
+
});
|
|
544
1129
|
FileNetClientManager.addOnlineClient(clientID, pClientID, tideID, connectionID, {
|
|
545
1130
|
connectedOn: Date.now(),
|
|
546
1131
|
currentTideChannel: currentTideChannel || "file-room",
|
|
@@ -563,6 +1148,38 @@ class FileMessager {
|
|
|
563
1148
|
console.log(!clientDetails ? `[FileTide ~ Net Activity] ~ Client ~ ${clientData.clientID} already offline.` : `[FileTide ~ Net Activity] ~ Unauthorized offline signal from connection ID ~ ${clientData.connectionID}.`);
|
|
564
1149
|
return;
|
|
565
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
|
+
});
|
|
566
1183
|
FileNetClientManager.clearOnlineClient(clientData.clientID);
|
|
567
1184
|
const currentOnlineClients = Object.fromEntries(FileNetClientManager.getOnlineClients());
|
|
568
1185
|
this.fileNet.emit("current-online-clients", currentOnlineClients);
|
|
@@ -571,19 +1188,7 @@ class FileMessager {
|
|
|
571
1188
|
this.fileNet.emitToTide(senderClient.tideID, "save-current-transfer-states", {
|
|
572
1189
|
clientID: clientData.clientID
|
|
573
1190
|
});
|
|
574
|
-
|
|
575
|
-
if (tidingTransfers && tidingTransfers.size > 0) {
|
|
576
|
-
for (let recipientID of tidingTransfers.keys()) {
|
|
577
|
-
const recipientConnectionID = FileNetClientManager.getOnlineClient(clientData.recipientID).id;
|
|
578
|
-
const client = this.getClientFromID(recipientConnectionID);
|
|
579
|
-
if (client) {
|
|
580
|
-
this.fileNet.emitToTide(client.tideID, "save-current-transfer-states", {
|
|
581
|
-
clientID: recipientID
|
|
582
|
-
});
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
this.currentTidingTransfers.delete(clientData.clientID);
|
|
586
|
-
}
|
|
1191
|
+
this.saveClientTransferStates(clientData);
|
|
587
1192
|
} catch (error) {
|
|
588
1193
|
console.log(`[FileTide ~ Net Activity] ~ Did not process client ~ ${clientData} offline signal ~ ${error}`);
|
|
589
1194
|
}
|