tool-db 1.2.3 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/.github/workflows/main.yml +1 -1
  2. package/README.md +53 -6
  3. package/custom-test-env.js +28 -0
  4. package/dist/index.d.ts +11 -1
  5. package/dist/index.js +23 -3
  6. package/dist/index.js.map +1 -1
  7. package/dist/messageHandlers/handleCrdt.d.ts +2 -0
  8. package/dist/messageHandlers/handleCrdt.js +15 -0
  9. package/dist/messageHandlers/handleCrdt.js.map +1 -0
  10. package/dist/messageHandlers/handleCrdtGet.d.ts +2 -0
  11. package/dist/messageHandlers/handleCrdtGet.js +30 -0
  12. package/dist/messageHandlers/handleCrdtGet.js.map +1 -0
  13. package/dist/messageHandlers/handleCrdtPut.d.ts +2 -0
  14. package/dist/messageHandlers/handleCrdtPut.js +85 -0
  15. package/dist/messageHandlers/handleCrdtPut.js.map +1 -0
  16. package/dist/messageHandlers/handleGet.d.ts +2 -0
  17. package/dist/messageHandlers/handleGet.js +37 -0
  18. package/dist/messageHandlers/handleGet.js.map +1 -0
  19. package/dist/messageHandlers/handleJoin.d.ts +2 -0
  20. package/dist/messageHandlers/handleJoin.js +36 -0
  21. package/dist/messageHandlers/handleJoin.js.map +1 -0
  22. package/dist/messageHandlers/handlePing.d.ts +2 -0
  23. package/dist/messageHandlers/handlePing.js +20 -0
  24. package/dist/messageHandlers/handlePing.js.map +1 -0
  25. package/dist/messageHandlers/handlePong.d.ts +2 -0
  26. package/dist/messageHandlers/handlePong.js +32 -0
  27. package/dist/messageHandlers/handlePong.js.map +1 -0
  28. package/dist/messageHandlers/handlePut.d.ts +2 -0
  29. package/dist/messageHandlers/handlePut.js +61 -0
  30. package/dist/messageHandlers/handlePut.js.map +1 -0
  31. package/dist/messageHandlers/handleQuery.d.ts +2 -0
  32. package/dist/messageHandlers/handleQuery.js +18 -0
  33. package/dist/messageHandlers/handleQuery.js.map +1 -0
  34. package/dist/messageHandlers/handleServers.d.ts +2 -0
  35. package/dist/messageHandlers/handleServers.js +23 -0
  36. package/dist/messageHandlers/handleServers.js.map +1 -0
  37. package/dist/messageHandlers/handleSubscribe.d.ts +2 -0
  38. package/dist/messageHandlers/handleSubscribe.js +62 -0
  39. package/dist/messageHandlers/handleSubscribe.js.map +1 -0
  40. package/dist/toolDbClientOnMessage.d.ts +2 -2
  41. package/dist/toolDbClientOnMessage.js +57 -264
  42. package/dist/toolDbClientOnMessage.js.map +1 -1
  43. package/dist/toolDbCrdtGet.d.ts +9 -0
  44. package/dist/toolDbCrdtGet.js +61 -0
  45. package/dist/toolDbCrdtGet.js.map +1 -0
  46. package/dist/toolDbCrdtPut.js +1 -1
  47. package/dist/toolDbCrdtPut.js.map +1 -1
  48. package/dist/toolDbGet.js +1 -1
  49. package/dist/toolDbGet.js.map +1 -1
  50. package/dist/{wss.d.ts → toolDbNetwork.d.ts} +5 -7
  51. package/dist/{wss.js → toolDbNetwork.js} +106 -73
  52. package/dist/toolDbNetwork.js.map +1 -0
  53. package/dist/toolDbPut.js +1 -1
  54. package/dist/toolDbPut.js.map +1 -1
  55. package/dist/toolDbQueryKeys.js +1 -1
  56. package/dist/toolDbQueryKeys.js.map +1 -1
  57. package/dist/toolDbSignIn.js +2 -2
  58. package/dist/toolDbSignIn.js.map +1 -1
  59. package/dist/toolDbSignUp.js +1 -1
  60. package/dist/toolDbSignUp.js.map +1 -1
  61. package/dist/toolDbSubscribe.js +1 -1
  62. package/dist/toolDbSubscribe.js.map +1 -1
  63. package/dist/toolDbVerificationWrapper.js +1 -1
  64. package/dist/toolDbVerificationWrapper.js.map +1 -1
  65. package/dist/toolDbWebrtc.d.ts +66 -0
  66. package/dist/toolDbWebrtc.js +453 -0
  67. package/dist/toolDbWebrtc.js.map +1 -0
  68. package/dist/tooldb.d.ts +38 -18
  69. package/dist/tooldb.js +127 -47
  70. package/dist/tooldb.js.map +1 -1
  71. package/dist/types/graph.d.ts +4 -0
  72. package/dist/types/message.d.ts +11 -2
  73. package/dist/types/message.js.map +1 -1
  74. package/dist/types/tooldb.d.ts +34 -1
  75. package/dist/types/tooldb.js +19 -0
  76. package/dist/types/tooldb.js.map +1 -1
  77. package/dist/utils/catchReturn.js +1 -1
  78. package/dist/utils/catchReturn.js.map +1 -1
  79. package/dist/utils/crypto/loadSignKeys.d.ts +2 -0
  80. package/dist/utils/crypto/loadSignKeys.js +78 -0
  81. package/dist/utils/crypto/loadSignKeys.js.map +1 -0
  82. package/dist/utils/crypto/saveSignKeys.d.ts +2 -0
  83. package/dist/utils/crypto/saveSignKeys.js +67 -0
  84. package/dist/utils/crypto/saveSignKeys.js.map +1 -0
  85. package/dist/utils/crypto/verifyData.d.ts +1 -1
  86. package/dist/utils/crypto/verifyData.js +3 -2
  87. package/dist/utils/crypto/verifyData.js.map +1 -1
  88. package/dist/utils/getPeerSignature.d.ts +1 -0
  89. package/dist/utils/getPeerSignature.js +9 -0
  90. package/dist/utils/getPeerSignature.js.map +1 -0
  91. package/dist/utils/indexedb.d.ts +2 -6
  92. package/dist/utils/indexedb.js +13 -3
  93. package/dist/utils/indexedb.js.map +1 -1
  94. package/dist/utils/leveldb.d.ts +2 -6
  95. package/dist/utils/leveldb.js +12 -2
  96. package/dist/utils/leveldb.js.map +1 -1
  97. package/dist/utils/randomAnimal.js.map +1 -1
  98. package/dist/utils/signData.d.ts +1 -1
  99. package/dist/utils/signData.js +3 -2
  100. package/dist/utils/signData.js.map +1 -1
  101. package/dist/utils/verifyMessage.js +4 -4
  102. package/dist/utils/verifyMessage.js.map +1 -1
  103. package/dist/utils/verifyPeer.d.ts +2 -0
  104. package/dist/utils/verifyPeer.js +13 -0
  105. package/dist/utils/verifyPeer.js.map +1 -0
  106. package/dist/webrtc/joinWebrtcTorrent.d.ts +3 -0
  107. package/dist/webrtc/joinWebrtcTorrent.js +312 -0
  108. package/dist/webrtc/joinWebrtcTorrent.js.map +1 -0
  109. package/jest.config.ts +2 -1
  110. package/package.json +6 -3
  111. package/pvutils-tests-replacement.js +777 -0
  112. package/test-alice/000236.ldb +0 -0
  113. package/test-alice/000344.ldb +0 -0
  114. package/test-alice/000520.ldb +0 -0
  115. package/test-alice/000522.ldb +0 -0
  116. package/test-alice/000525.ldb +0 -0
  117. package/test-alice/000528.ldb +0 -0
  118. package/test-alice/000529.log +0 -0
  119. package/test-alice/CURRENT +1 -0
  120. package/test-alice/LOCK +0 -0
  121. package/test-alice/LOG +5 -0
  122. package/test-alice/LOG.old +5 -0
  123. package/test-alice/MANIFEST-000527 +0 -0
  124. package/test-bob/000520.ldb +0 -0
  125. package/test-bob/000522.ldb +0 -0
  126. package/test-bob/000525.ldb +0 -0
  127. package/test-bob/000526.log +0 -0
  128. package/test-bob/CURRENT +1 -0
  129. package/test-bob/LOCK +0 -0
  130. package/test-bob/LOG +5 -0
  131. package/test-bob/LOG.old +5 -0
  132. package/test-bob/MANIFEST-000524 +0 -0
  133. package/test-node-a/000524.ldb +0 -0
  134. package/test-node-a/000526.ldb +0 -0
  135. package/test-node-a/000529.ldb +0 -0
  136. package/test-node-a/000532.ldb +0 -0
  137. package/test-node-a/000533.log +0 -0
  138. package/test-node-a/CURRENT +1 -0
  139. package/test-node-a/LOCK +0 -0
  140. package/test-node-a/LOG +5 -0
  141. package/test-node-a/LOG.old +5 -0
  142. package/test-node-a/MANIFEST-000531 +0 -0
  143. package/test-node-b/000524.ldb +0 -0
  144. package/test-node-b/000526.ldb +0 -0
  145. package/test-node-b/000529.ldb +0 -0
  146. package/test-node-b/000532.ldb +0 -0
  147. package/test-node-b/000533.log +0 -0
  148. package/test-node-b/CURRENT +1 -0
  149. package/test-node-b/LOCK +0 -0
  150. package/test-node-b/LOG +5 -0
  151. package/test-node-b/LOG.old +5 -0
  152. package/test-node-b/MANIFEST-000531 +0 -0
  153. package/toolDbLibP2p.ts +206 -0
  154. package/dist/deduplicator.d.ts +0 -19
  155. package/dist/deduplicator.js +0 -60
  156. package/dist/deduplicator.js.map +0 -1
  157. package/dist/utils/getIpFromUrl.d.ts +0 -1
  158. package/dist/utils/getIpFromUrl.js +0 -7
  159. package/dist/utils/getIpFromUrl.js.map +0 -1
  160. package/dist/wss.js.map +0 -1
  161. package/dist/zkp.d.ts +0 -1
  162. package/dist/zkp.js +0 -29
  163. package/dist/zkp.js.map +0 -1
@@ -0,0 +1,453 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (_) try {
44
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
65
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
66
+ if (ar || !(i in from)) {
67
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
68
+ ar[i] = from[i];
69
+ }
70
+ }
71
+ return to.concat(ar || Array.prototype.slice.call(from));
72
+ };
73
+ var __importDefault = (this && this.__importDefault) || function (mod) {
74
+ return (mod && mod.__esModule) ? mod : { "default": mod };
75
+ };
76
+ Object.defineProperty(exports, "__esModule", { value: true });
77
+ var lodash_1 = __importDefault(require("lodash"));
78
+ var simple_peer_1 = __importDefault(require("simple-peer"));
79
+ var _1 = require(".");
80
+ var tooldb_1 = require("./types/tooldb");
81
+ var offerPoolSize = 5;
82
+ var announceSecs = 30;
83
+ var maxAnnounceSecs = 120;
84
+ var defaultTrackerUrls = [
85
+ "wss://tracker.openwebtorrent.com",
86
+ "wss://tracker.btorrent.xyz",
87
+ "wss://tracker.webtorrent.io",
88
+ "wss://tracker.files.fm:7073/announce",
89
+ "wss://spacetradersapi-chatbox.herokuapp.com:443/announce",
90
+ ];
91
+ var toolDbWebrtc = /** @class */ (function (_super) {
92
+ __extends(toolDbWebrtc, _super);
93
+ function toolDbWebrtc(db) {
94
+ var _this = _super.call(this, db) || this;
95
+ _this.sockets = {};
96
+ _this.socketListeners = {};
97
+ _this.peerMap = {};
98
+ _this.connectedPeers = {};
99
+ _this.onDisconnect = function (id) {
100
+ if (_this.connectedPeers[id])
101
+ delete _this.connectedPeers[id];
102
+ if (_this.peerMap[id])
103
+ delete _this.peerMap[id];
104
+ };
105
+ /**
106
+ * Initialize webrtc peer
107
+ */
108
+ _this.initPeer = function (initiator, trickle, rtcConfig // RTCConfiguration
109
+ ) {
110
+ var peer = new simple_peer_1.default({
111
+ initiator: initiator,
112
+ trickle: trickle,
113
+ config: rtcConfig,
114
+ });
115
+ return peer;
116
+ };
117
+ _this.handledOffers = {};
118
+ _this.offerPool = {};
119
+ _this.trackerUrls = defaultTrackerUrls; // .slice(0, 2);
120
+ _this.infoHash = "";
121
+ /**
122
+ * Make connection offerst to send to the tracker
123
+ */
124
+ _this.makeOffers = function () {
125
+ var offers = {};
126
+ new Array(offerPoolSize).fill(0).forEach(function () {
127
+ var peer = _this.initPeer(true, false, {});
128
+ var oid = (0, _1.textRandom)(20);
129
+ offers[oid] = {
130
+ peer: peer,
131
+ offerP: new Promise(function (res) { return peer.once("signal", res); }),
132
+ };
133
+ });
134
+ return offers;
135
+ };
136
+ /**
137
+ * When we sucessfully connect to a webrtc peer
138
+ */
139
+ _this.onPeerConnect = function (peer, id) {
140
+ if (_this.peerMap[id]) {
141
+ return;
142
+ }
143
+ var onData = function (data) {
144
+ var str = new TextDecoder().decode(data);
145
+ try {
146
+ var msg = JSON.parse(str);
147
+ if (msg.type !== "servers" &&
148
+ msg.type !== "join" &&
149
+ msg.type !== "pong") {
150
+ _this.tooldb.clientOnMessage(msg, id);
151
+ }
152
+ if (msg.type === "pong") {
153
+ _this.tooldb.onConnect();
154
+ }
155
+ }
156
+ catch (e) {
157
+ //
158
+ }
159
+ };
160
+ _this.peerMap[id] = peer;
161
+ peer.on("data", onData);
162
+ peer.on("close", function () { return _this.onDisconnect(id); });
163
+ peer.on("error", function () { return _this.onDisconnect(id); });
164
+ peer.send(JSON.stringify({
165
+ type: "ping",
166
+ }));
167
+ };
168
+ /**
169
+ * Handle the webrtc peer connection
170
+ */
171
+ _this.onConnect = function (peer, id, offer_id) {
172
+ _this.onPeerConnect(peer, id);
173
+ _this.connectedPeers[id] = true;
174
+ if (offer_id) {
175
+ _this.connectedPeers[offer_id] = true;
176
+ }
177
+ };
178
+ /**
179
+ * Clean the announce offers pool
180
+ */
181
+ _this.cleanPool = function () {
182
+ Object.entries(_this.offerPool).forEach(function (_a) {
183
+ var id = _a[0], peer = _a[1].peer;
184
+ if (!_this.handledOffers[id] && !_this.connectedPeers[id]) {
185
+ peer.destroy();
186
+ delete _this.peerMap[id];
187
+ }
188
+ });
189
+ _this.handledOffers = {};
190
+ };
191
+ /**
192
+ * Makes a websocket connection to a tracker
193
+ */
194
+ _this.makeSocket = function (url, info_hash) {
195
+ return new Promise(function (resolve) {
196
+ var _a;
197
+ if (!_this.sockets[url]) {
198
+ _this.socketListeners[url] = __assign(__assign({}, _this.socketListeners[url]), (_a = {}, _a[info_hash] = _this.onSocketMessage, _a));
199
+ try {
200
+ var socket_1 = new WebSocket(url);
201
+ // eslint-disable-next-line func-names
202
+ var socks_1 = _this.sockets;
203
+ socket_1.onopen = function () {
204
+ socks_1[url] = this;
205
+ resolve(this);
206
+ };
207
+ socket_1.onmessage = function (e) {
208
+ return Object.values(_this.socketListeners[url]).forEach(function (f) {
209
+ return f(socket_1, e);
210
+ });
211
+ };
212
+ // eslint-disable-next-line func-names
213
+ socket_1.onerror = function () {
214
+ resolve(null);
215
+ };
216
+ }
217
+ catch (e) {
218
+ resolve(null);
219
+ }
220
+ }
221
+ else {
222
+ resolve(_this.sockets[url]);
223
+ }
224
+ });
225
+ };
226
+ /**
227
+ * Announce ourselves to a tracker (send "announce")
228
+ */
229
+ _this.announce = function (socket, infoHash) { return __awaiter(_this, void 0, void 0, function () {
230
+ var _a, _b, _c, _d;
231
+ var _f;
232
+ var _this = this;
233
+ return __generator(this, function (_g) {
234
+ switch (_g.label) {
235
+ case 0:
236
+ _b = (_a = socket).send;
237
+ _d = (_c = JSON).stringify;
238
+ _f = {
239
+ action: "announce",
240
+ info_hash: infoHash,
241
+ numwant: offerPoolSize,
242
+ peer_id: encodeURIComponent(this.tooldb.options.id).slice(-20)
243
+ };
244
+ return [4 /*yield*/, Promise.all(Object.entries(this.offerPool).map(function (_a) {
245
+ var id = _a[0], offerP = _a[1].offerP;
246
+ return __awaiter(_this, void 0, void 0, function () {
247
+ var offer;
248
+ return __generator(this, function (_b) {
249
+ switch (_b.label) {
250
+ case 0: return [4 /*yield*/, offerP];
251
+ case 1:
252
+ offer = _b.sent();
253
+ // console.warn(`Created offer id ${id}`);
254
+ return [2 /*return*/, {
255
+ offer_id: id,
256
+ offer: offer,
257
+ }];
258
+ }
259
+ });
260
+ });
261
+ }))];
262
+ case 1: return [2 /*return*/, _b.apply(_a, [_d.apply(_c, [(_f.offers = _g.sent(),
263
+ _f)])])];
264
+ }
265
+ });
266
+ }); };
267
+ /**
268
+ * Announce ourselves to all trackers
269
+ */
270
+ _this.announceAll = function () { return __awaiter(_this, void 0, void 0, function () {
271
+ var _this = this;
272
+ return __generator(this, function (_a) {
273
+ if (this.offerPool) {
274
+ this.cleanPool();
275
+ }
276
+ this.offerPool = this.makeOffers();
277
+ this.trackerUrls.forEach(function (url) { return __awaiter(_this, void 0, void 0, function () {
278
+ var socket;
279
+ return __generator(this, function (_a) {
280
+ switch (_a.label) {
281
+ case 0: return [4 /*yield*/, this.makeSocket(url, this.infoHash)];
282
+ case 1:
283
+ socket = _a.sent();
284
+ if (socket && socket.readyState === WebSocket.OPEN) {
285
+ this.announce(socket, this.infoHash);
286
+ }
287
+ return [2 /*return*/];
288
+ }
289
+ });
290
+ }); });
291
+ return [2 /*return*/];
292
+ });
293
+ }); };
294
+ /**
295
+ * Handle the tracker messages
296
+ */
297
+ _this.onSocketMessage = function (socket, e) { return __awaiter(_this, void 0, void 0, function () {
298
+ var val, failure, peer_1, offer, peer_2;
299
+ var _this = this;
300
+ return __generator(this, function (_a) {
301
+ try {
302
+ val = JSON.parse(e.data);
303
+ // console.log("onSocketMessage", socket.url, val);
304
+ }
305
+ catch (_e) {
306
+ // console.error(`${libName}: received malformed SDP JSON`);
307
+ return [2 /*return*/];
308
+ }
309
+ failure = val["failure reason"];
310
+ if (failure) {
311
+ console.warn(e.origin + ": torrent tracker failure (" + failure + ")");
312
+ return [2 /*return*/];
313
+ }
314
+ if (val.info_hash !== this.infoHash) {
315
+ // console.warn("Info hash mismatch");
316
+ return [2 /*return*/];
317
+ }
318
+ if (val.peer_id &&
319
+ val.peer_id === encodeURIComponent(this.tooldb.options.id).slice(-20)) {
320
+ // console.warn("Peer ids mismatch", val.peer_id, selfId);
321
+ return [2 /*return*/];
322
+ }
323
+ if (val.offer && val.offer_id) {
324
+ if (this.connectedPeers[val.peer_id]) {
325
+ return [2 /*return*/];
326
+ }
327
+ if (this.handledOffers[val.offer_id]) {
328
+ return [2 /*return*/];
329
+ }
330
+ this.handledOffers[val.offer_id] = true;
331
+ peer_1 = this.initPeer(false, false, {});
332
+ peer_1.once("signal", function (answer) {
333
+ return socket.send(JSON.stringify({
334
+ answer: answer,
335
+ action: "announce",
336
+ info_hash: _this.infoHash,
337
+ peer_id: encodeURIComponent(_this.tooldb.options.id).slice(-20),
338
+ to_peer_id: val.peer_id,
339
+ offer_id: val.offer_id,
340
+ }));
341
+ });
342
+ peer_1.on("connect", function () { return _this.onConnect(peer_1, val.peer_id); });
343
+ peer_1.on("close", function () { return _this.onDisconnect(val.peer_id); });
344
+ peer_1.signal(val.offer);
345
+ return [2 /*return*/];
346
+ }
347
+ if (val.answer) {
348
+ if (this.connectedPeers[val.peer_id]) {
349
+ return [2 /*return*/];
350
+ }
351
+ if (this.handledOffers[val.offer_id]) {
352
+ return [2 /*return*/];
353
+ }
354
+ offer = this.offerPool[val.offer_id];
355
+ if (offer) {
356
+ peer_2 = offer.peer;
357
+ if (peer_2.destroyed) {
358
+ return [2 /*return*/];
359
+ }
360
+ this.handledOffers[val.offer_id] = true;
361
+ peer_2.on("connect", function () {
362
+ _this.onConnect(peer_2, val.peer_id, val.offer_id);
363
+ });
364
+ peer_2.on("close", function () { return _this.onDisconnect(val.peer_id); });
365
+ peer_2.signal(val.answer);
366
+ }
367
+ }
368
+ return [2 /*return*/];
369
+ });
370
+ }); };
371
+ /**
372
+ * Leave the tracker
373
+ */
374
+ _this.onLeave = function () { return __awaiter(_this, void 0, void 0, function () {
375
+ var _this = this;
376
+ return __generator(this, function (_a) {
377
+ this.trackerUrls.forEach(function (url) { return delete _this.socketListeners[url][_this.infoHash]; });
378
+ clearInterval(this.announceInterval);
379
+ this.cleanPool();
380
+ return [2 /*return*/];
381
+ });
382
+ }); };
383
+ _this._tooldb = db;
384
+ _this.announceInterval = setInterval(_this.announceAll, announceSecs * 1000);
385
+ // Stop announcing after maxAnnounceSecs
386
+ var intervalStart = new Date().getTime();
387
+ var checkInterval = setInterval(function () {
388
+ if (!_this.tooldb.options.server &&
389
+ new Date().getTime() - intervalStart > maxAnnounceSecs * 1000) {
390
+ clearInterval(checkInterval);
391
+ clearInterval(_this.announceInterval);
392
+ }
393
+ }, 200);
394
+ _this.infoHash = (0, _1.sha1)("tooldb:" + _this.tooldb.options.topic).slice(20);
395
+ _this.announceAll();
396
+ return _this;
397
+ }
398
+ toolDbWebrtc.prototype.close = function (clientId) {
399
+ //
400
+ };
401
+ toolDbWebrtc.prototype.sendToAll = function (msg, crossServerOnly, isRelay) {
402
+ var _this = this;
403
+ if (crossServerOnly === void 0) { crossServerOnly = false; }
404
+ if (isRelay === void 0) { isRelay = false; }
405
+ var to = lodash_1.default.uniq(__spreadArray(__spreadArray([], msg.to, true), [
406
+ encodeURIComponent(this.tooldb.options.id).slice(-20),
407
+ ], false));
408
+ Object.keys(this.peerMap)
409
+ .filter(function (id) { return !to.includes(id); })
410
+ .forEach(function (id) {
411
+ var peer = _this.peerMap[id];
412
+ if (peer.connected) {
413
+ if (_this.tooldb.options.debug) {
414
+ console.log("Sent out to: ", id);
415
+ // console.log("OUT > ", { ...msg, to });
416
+ }
417
+ peer.send(JSON.stringify(__assign(__assign({}, msg), { to: to })));
418
+ }
419
+ else {
420
+ peer.destroy();
421
+ delete _this.peerMap[id];
422
+ }
423
+ });
424
+ };
425
+ toolDbWebrtc.prototype.sendToClientId = function (clientId, msg) {
426
+ var _this = this;
427
+ Object.keys(this.peerMap)
428
+ .filter(function (id) { return id === clientId; })
429
+ .forEach(function (id) {
430
+ var peer = _this.peerMap[id];
431
+ if (peer.connected) {
432
+ var to = lodash_1.default.uniq(__spreadArray(__spreadArray([], [msg.to || []], false), [
433
+ encodeURIComponent(_this.tooldb.options.id).slice(-20),
434
+ ], false));
435
+ peer.send(JSON.stringify(__assign(__assign({}, msg), { to: to })));
436
+ }
437
+ else {
438
+ peer.destroy();
439
+ delete _this.peerMap[id];
440
+ }
441
+ });
442
+ };
443
+ Object.defineProperty(toolDbWebrtc.prototype, "tooldb", {
444
+ get: function () {
445
+ return this._tooldb;
446
+ },
447
+ enumerable: false,
448
+ configurable: true
449
+ });
450
+ return toolDbWebrtc;
451
+ }(tooldb_1.ToolDbNetworkAdapter));
452
+ exports.default = toolDbWebrtc;
453
+ //# sourceMappingURL=toolDbWebrtc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolDbWebrtc.js","sourceRoot":"","sources":["../src/toolDbWebrtc.ts"],"names":[],"mappings":"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"}
package/dist/tooldb.d.ts CHANGED
@@ -1,20 +1,31 @@
1
- import WSS from "./wss";
2
- import { ToolDbOptions } from "./types/tooldb";
1
+ /// <reference types="node" />
2
+ import { FreezeObject } from "automerge";
3
+ import EventEmitter from "events";
4
+ import { CrdtMessage, PutMessage, ToolDbMessage, VerificationData } from ".";
3
5
  import toolDbGet from "./toolDbGet";
4
6
  import toolDbPut from "./toolDbPut";
5
- import toolDbGetPubKey from "./toolDbGetPubKey";
6
7
  import toolDbSignIn from "./toolDbSignIn";
7
- import toolDbAnonSignIn from "./toolDbAnonSignIn";
8
8
  import toolDbSignUp from "./toolDbSignUp";
9
- import toolDbVerificationWrapper from "./toolDbVerificationWrapper";
9
+ import toolDbCrdtGet from "./toolDbCrdtGet";
10
+ import toolDbCrdtPut from "./toolDbCrdtPut";
11
+ import toolDbGetPubKey from "./toolDbGetPubKey";
12
+ import toolDbAnonSignIn from "./toolDbAnonSignIn";
10
13
  import toolDbClientOnMessage from "./toolDbClientOnMessage";
11
- import { CrdtMessage, PutMessage, ToolDbMessage, VerificationData } from ".";
14
+ import toolDbVerificationWrapper from "./toolDbVerificationWrapper";
12
15
  import toolDbSubscribe from "./toolDbSubscribe";
13
- import toolDbCrdtPut from "./toolDbCrdtPut";
14
- import { FreezeObject } from "automerge";
16
+ import toolDbQueryKeys from "./toolDbQueryKeys";
15
17
  import loadCrdtDocument from "./loadCrdtDocument";
16
18
  import toolDbKeysSignIn from "./toolDbKeysSignIn";
17
- import toolDbQueryKeys from "./toolDbQueryKeys";
19
+ import handleGet from "./messageHandlers/handleGet";
20
+ import handlePut from "./messageHandlers/handlePut";
21
+ import handlePing from "./messageHandlers/handlePing";
22
+ import handlePong from "./messageHandlers/handlePong";
23
+ import handleCrdt from "./messageHandlers/handleCrdt";
24
+ import handleQuery from "./messageHandlers/handleQuery";
25
+ import handleCrdtGet from "./messageHandlers/handleCrdtGet";
26
+ import handleCrdtPut from "./messageHandlers/handleCrdtPut";
27
+ import handleSubscribe from "./messageHandlers/handleSubscribe";
28
+ import { Peer, ToolDbOptions } from "./types/tooldb";
18
29
  export interface Listener {
19
30
  key: string;
20
31
  timeout: number | null;
@@ -24,13 +35,16 @@ interface Verificator<T> {
24
35
  key: string;
25
36
  fn: (msg: VerificationData<T>) => Promise<boolean>;
26
37
  }
27
- export default class ToolDb {
28
- private _websockets;
38
+ export default class ToolDb extends EventEmitter {
39
+ private _network;
29
40
  private _store;
41
+ private _peers;
30
42
  private _documents;
31
43
  clientOnMessage: typeof toolDbClientOnMessage;
32
44
  private _subscriptions;
33
45
  get subscriptions(): string[];
46
+ private _processedIds;
47
+ get processedIds(): Record<string, string[]>;
34
48
  subscribeData: typeof toolDbSubscribe;
35
49
  onDisconnect: () => void;
36
50
  onConnect: () => void;
@@ -38,6 +52,7 @@ export default class ToolDb {
38
52
  getData: typeof toolDbGet;
39
53
  putData: typeof toolDbPut;
40
54
  putCrdt: typeof toolDbCrdtPut;
55
+ getCrdt: typeof toolDbCrdtGet;
41
56
  queryKeys: typeof toolDbQueryKeys;
42
57
  getPubKey: typeof toolDbGetPubKey;
43
58
  signIn: typeof toolDbSignIn;
@@ -45,6 +60,15 @@ export default class ToolDb {
45
60
  keysSignIn: typeof toolDbKeysSignIn;
46
61
  signUp: typeof toolDbSignUp;
47
62
  verify: typeof toolDbVerificationWrapper;
63
+ handlePing: typeof handlePing;
64
+ handlePong: typeof handlePong;
65
+ handleCrdt: typeof handleCrdt;
66
+ handleCrdtGet: typeof handleCrdtGet;
67
+ handleCrdtPut: typeof handleCrdtPut;
68
+ handleGet: typeof handleGet;
69
+ handlePut: typeof handlePut;
70
+ handleQuery: typeof handleQuery;
71
+ handleSubscribe: typeof handleSubscribe;
48
72
  /**
49
73
  * id listeners listen for a specific message ID just once
50
74
  */
@@ -75,13 +99,9 @@ export default class ToolDb {
75
99
  } | undefined;
76
100
  private _options;
77
101
  get options(): ToolDbOptions;
78
- get websockets(): WSS;
79
- get store(): {
80
- start: () => void;
81
- put: (key: string, data: any, cb: (err: any, data?: any) => void) => void;
82
- get: (key: string, cb: (err: any, data?: any) => void) => void;
83
- query: (key: string) => Promise<string[]>;
84
- };
102
+ get network(): import("./types/tooldb").ToolDbNetworkAdapter;
103
+ get peers(): Peer[];
104
+ get store(): import("./types/tooldb").ToolDbStore;
85
105
  get documents(): Record<string, FreezeObject<any>>;
86
106
  constructor(options?: Partial<ToolDbOptions>);
87
107
  }