tool-db 1.3.0 → 1.4.2

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