feat(p2p): peers backup on exit

This commit is contained in:
Alexey Kasyanchuk
2018-03-03 23:15:05 +03:00
parent a60beeaee3
commit 6de95a1add
6 changed files with 123 additions and 77 deletions

150
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "rats-search", "name": "rats-search",
"version": "0.8.0", "version": "0.9.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -1680,7 +1680,7 @@
"optional": true, "optional": true,
"requires": { "requires": {
"delegates": "1.0.0", "delegates": "1.0.0",
"readable-stream": "2.3.4" "readable-stream": "2.3.5"
}, },
"dependencies": { "dependencies": {
"isarray": { "isarray": {
@ -1696,9 +1696,9 @@
"optional": true "optional": true
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"optional": true, "optional": true,
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
@ -2111,7 +2111,7 @@
"debug": "3.1.0", "debug": "3.1.0",
"inherits": "2.0.3", "inherits": "2.0.3",
"randombytes": "2.0.6", "randombytes": "2.0.6",
"readable-stream": "2.3.4", "readable-stream": "2.3.5",
"safe-buffer": "5.1.1", "safe-buffer": "5.1.1",
"speedometer": "1.0.0", "speedometer": "1.0.0",
"unordered-array-remove": "1.0.2", "unordered-array-remove": "1.0.2",
@ -2142,9 +2142,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -2230,9 +2230,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -2252,7 +2252,7 @@
"get-browser-rtc": "1.0.2", "get-browser-rtc": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
"randombytes": "2.0.6", "randombytes": "2.0.6",
"readable-stream": "2.3.4" "readable-stream": "2.3.5"
} }
}, },
"string_decoder": { "string_decoder": {
@ -2319,7 +2319,7 @@
"requires": { "requires": {
"defined": "1.0.0", "defined": "1.0.0",
"inherits": "2.0.3", "inherits": "2.0.3",
"readable-stream": "2.3.4" "readable-stream": "2.3.5"
}, },
"dependencies": { "dependencies": {
"isarray": { "isarray": {
@ -2333,9 +2333,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -2897,7 +2897,7 @@
"requires": { "requires": {
"block-stream2": "1.1.0", "block-stream2": "1.1.0",
"inherits": "2.0.3", "inherits": "2.0.3",
"readable-stream": "2.3.4" "readable-stream": "2.3.5"
}, },
"dependencies": { "dependencies": {
"isarray": { "isarray": {
@ -2911,9 +2911,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -3529,7 +3529,7 @@
"multistream": "2.1.0", "multistream": "2.1.0",
"once": "1.4.0", "once": "1.4.0",
"piece-length": "1.0.0", "piece-length": "1.0.0",
"readable-stream": "2.3.4", "readable-stream": "2.3.5",
"run-parallel": "1.1.7", "run-parallel": "1.1.7",
"simple-sha1": "2.1.0", "simple-sha1": "2.1.0",
"xtend": "4.0.1" "xtend": "4.0.1"
@ -3559,9 +3559,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -4896,7 +4896,7 @@
"integrity": "sha1-lI/KregiH3FfXsrdxUhi+qrMkyU=", "integrity": "sha1-lI/KregiH3FfXsrdxUhi+qrMkyU=",
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "2.0.3",
"readable-stream": "2.3.4", "readable-stream": "2.3.5",
"typedarray-to-buffer": "3.1.2", "typedarray-to-buffer": "3.1.2",
"xtend": "4.0.1" "xtend": "4.0.1"
}, },
@ -4912,9 +4912,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -5563,8 +5563,7 @@
"jsbn": { "jsbn": {
"version": "0.1.1", "version": "0.1.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"json-schema": { "json-schema": {
"version": "0.2.3", "version": "0.2.3",
@ -7485,7 +7484,7 @@
"integrity": "sha1-J6nBqsUb+266lq8tE6hNCyqOrGg=", "integrity": "sha1-J6nBqsUb+266lq8tE6hNCyqOrGg=",
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "2.0.3",
"readable-stream": "2.3.4", "readable-stream": "2.3.5",
"to-arraybuffer": "1.0.1" "to-arraybuffer": "1.0.1"
}, },
"dependencies": { "dependencies": {
@ -7500,9 +7499,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -7774,7 +7773,7 @@
"inherits": "2.0.3", "inherits": "2.0.3",
"mp4-box-encoding": "1.1.2", "mp4-box-encoding": "1.1.2",
"next-event": "1.0.0", "next-event": "1.0.0",
"readable-stream": "2.3.4" "readable-stream": "2.3.5"
}, },
"dependencies": { "dependencies": {
"isarray": { "isarray": {
@ -7788,9 +7787,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -7822,7 +7821,7 @@
"integrity": "sha1-YlwmfVxEQkrWKUeItbtNo9yzLx0=", "integrity": "sha1-YlwmfVxEQkrWKUeItbtNo9yzLx0=",
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "2.0.3",
"readable-stream": "2.3.4" "readable-stream": "2.3.5"
}, },
"dependencies": { "dependencies": {
"isarray": { "isarray": {
@ -7836,9 +7835,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -9462,7 +9461,7 @@
"integrity": "sha1-AbqVQnYFK3g5AOY9YRjY/POHXX8=", "integrity": "sha1-AbqVQnYFK3g5AOY9YRjY/POHXX8=",
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "2.0.3",
"readable-stream": "2.3.4" "readable-stream": "2.3.5"
}, },
"dependencies": { "dependencies": {
"isarray": { "isarray": {
@ -9476,9 +9475,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -9932,25 +9931,15 @@
"dev": true "dev": true
}, },
"render-media": { "render-media": {
"version": "2.11.0", "version": "2.12.0",
"resolved": "https://registry.npmjs.org/render-media/-/render-media-2.11.0.tgz", "resolved": "https://registry.npmjs.org/render-media/-/render-media-2.12.0.tgz",
"integrity": "sha512-TjQjOxZ0HfSxZCfSSMxMvQNvXgQhPScpH8kd+zt+BE65jXVXa65mMPfEMmvGzMpDuXHgqJzAtvdcnXcxMaTu+A==", "integrity": "sha512-fgHc//6ClJMywYVlU1yPMl5+QAmGrNvkuUpIn7p2JZJI1uB7DIxwpDts216ubFf2yyH0lihPOs9oY2egKksbfA==",
"requires": { "requires": {
"debug": "2.6.9", "debug": "3.1.0",
"is-ascii": "1.0.0", "is-ascii": "1.0.0",
"mediasource": "2.1.3", "mediasource": "2.1.3",
"stream-to-blob-url": "2.1.0", "stream-to-blob-url": "2.1.0",
"videostream": "2.4.2" "videostream": "2.4.2"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
}
} }
}, },
"repeat-element": { "repeat-element": {
@ -10149,6 +10138,11 @@
"ajv": "5.5.2" "ajv": "5.5.2"
} }
}, },
"scmp": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/scmp/-/scmp-0.0.3.tgz",
"integrity": "sha1-NkjfLXKUZB5/eGc//CloHZutkHM="
},
"semver": { "semver": {
"version": "5.5.0", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
@ -10240,6 +10234,14 @@
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
"integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="
}, },
"simple-encryptor": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/simple-encryptor/-/simple-encryptor-1.2.0.tgz",
"integrity": "sha512-RZv50jILXa5VE2Mw2vkQXeYqvPUgv+IJXnn4VGaiX5+01zjqAozgYsqgwq0TmsGINk7+MdNrcsY/W1GiHrQdnw==",
"requires": {
"scmp": "0.0.3"
}
},
"simple-get": { "simple-get": {
"version": "2.7.0", "version": "2.7.0",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.7.0.tgz", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.7.0.tgz",
@ -10259,7 +10261,7 @@
"get-browser-rtc": "1.0.2", "get-browser-rtc": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
"randombytes": "2.0.6", "randombytes": "2.0.6",
"readable-stream": "2.3.4" "readable-stream": "2.3.5"
}, },
"dependencies": { "dependencies": {
"isarray": { "isarray": {
@ -10273,9 +10275,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -10312,7 +10314,7 @@
"debug": "3.1.0", "debug": "3.1.0",
"inherits": "2.0.3", "inherits": "2.0.3",
"randombytes": "2.0.6", "randombytes": "2.0.6",
"readable-stream": "2.3.4", "readable-stream": "2.3.5",
"safe-buffer": "5.1.1", "safe-buffer": "5.1.1",
"ws": "4.1.0" "ws": "4.1.0"
}, },
@ -10328,9 +10330,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -12391,8 +12393,8 @@
"random-iterate": "1.0.1", "random-iterate": "1.0.1",
"randombytes": "2.0.6", "randombytes": "2.0.6",
"range-parser": "1.2.0", "range-parser": "1.2.0",
"readable-stream": "2.3.4", "readable-stream": "2.3.5",
"render-media": "2.11.0", "render-media": "2.12.0",
"run-parallel": "1.1.7", "run-parallel": "1.1.7",
"run-parallel-limit": "1.0.3", "run-parallel-limit": "1.0.3",
"safe-buffer": "5.1.1", "safe-buffer": "5.1.1",
@ -12425,9 +12427,9 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.4", "version": "2.3.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
"integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"inherits": "2.0.3", "inherits": "2.0.3",

View File

@ -97,6 +97,7 @@
"react-input-range": "^1.3.0", "react-input-range": "^1.3.0",
"react-markdown": "^3.1.5", "react-markdown": "^3.1.5",
"react-tap-event-plugin": "^3.0.2", "react-tap-event-plugin": "^3.0.2",
"simple-encryptor": "^1.2.0",
"stun": "^1.1.0", "stun": "^1.1.0",
"webtorrent": "github:DEgITx/webtorrent" "webtorrent": "github:DEgITx/webtorrent"
}, },

View File

@ -91,9 +91,16 @@ class App extends Component {
window.torrentSocket.on('peer', (numOfPeers) => { window.torrentSocket.on('peer', (numOfPeers) => {
window.peers = numOfPeers window.peers = numOfPeers
console.log(window.peers)
this.forceUpdate() this.forceUpdate()
}) })
window.torrentSocket.emit('peers', (numOfPeers) => {
if(numOfPeers > 0)
{
window.peers = numOfPeers
this.forceUpdate()
}
})
} }
componentWillUnmount() { componentWillUnmount() {
appReady = false; appReady = false;

View File

@ -337,7 +337,7 @@ app.on("ready", () => {
} }
callback.apply(null, arg) callback.apply(null, arg)
}) })
}) }, app.getPath("userData"))
}) })
}); });

View File

@ -197,6 +197,13 @@ class p2p {
{ {
return this.peers.filter(peer => !!peer.emit) return this.peers.filter(peer => !!peer.emit)
} }
addresses(peers)
{
if(!peers || !Array.isArray(peers))
return
return peers.map(peer => ({address: peer.address, port: peer.port}))
}
} }
module.exports = p2p module.exports = p2p

View File

@ -1,6 +1,7 @@
const config = require('./config'); const config = require('./config');
const client = new (require('./bt/client')) const client = new (require('./bt/client'))
const spider = new (require('./bt/spider'))(client) const spider = new (require('./bt/spider'))(client)
const fs = require('fs');
const mysql = require('mysql'); const mysql = require('mysql');
const getPeersStatisticUDP = require('./bt/udp-tracker-request') const getPeersStatisticUDP = require('./bt/udp-tracker-request')
const crypto = require('crypto') const crypto = require('crypto')
@ -15,6 +16,7 @@ const natUpnp = require('nat-upnp');
//var phantomjs = require('phantomjs-prebuilt') //var phantomjs = require('phantomjs-prebuilt')
var ipaddr = require('ipaddr.js'); var ipaddr = require('ipaddr.js');
//const disk = require('diskusage'); //const disk = require('diskusage');
const encryptor = require('simple-encryptor')('rats-on-the-boat-enc-v0');
const os = require('os'); const os = require('os');
let rootPath = os.platform() === 'win32' ? 'c:' : '/'; let rootPath = os.platform() === 'win32' ? 'c:' : '/';
@ -33,7 +35,7 @@ let torrentClientHashMap = {}
//server.listen(config.httpPort); //server.listen(config.httpPort);
//console.log('Listening web server on', config.httpPort, 'port') //console.log('Listening web server on', config.httpPort, 'port')
module.exports = function (send, recive) module.exports = function (send, recive, dataDirectory)
{ {
let torrentsId = 1; let torrentsId = 1;
@ -255,6 +257,17 @@ setInterval(() => {
const p2p = new P2PServer(send) const p2p = new P2PServer(send)
p2p.listen() p2p.listen()
// load initial peers
if(dataDirectory && fs.existsSync(dataDirectory + '/peers.p2p'))
{
const peersEncrypted = fs.readFileSync(dataDirectory + '/peers.p2p', 'utf8')
const peers = encryptor.decrypt(peersEncrypted)
if(peers && peers.length > 0)
{
peers.forEach(peer => p2p.add(peer))
console.log('loaded', peers.length, 'peers')
}
}
//io.on('connection', function(socket) //io.on('connection', function(socket)
//{ //{
@ -589,6 +602,14 @@ p2p.listen()
}); });
}); });
recive('peers', (callback) =>
{
if(typeof callback != 'function')
return;
callback(p2p.size)
});
recive('config', (callback) => recive('config', (callback) =>
{ {
if(typeof callback != 'function') if(typeof callback != 'function')
@ -1186,6 +1207,14 @@ this.stop = (callback) => {
if(upnp) if(upnp)
upnp.ratsUnmap() upnp.ratsUnmap()
// safe future peers
if(dataDirectory)
{
const peersEncripted = encryptor.encrypt(p2p.addresses(p2p.peersList()))
fs.writeFileSync(dataDirectory + '/peers.p2p', peersEncripted, 'utf8');
console.log('peers saved')
}
torrentClient.destroy(() => { torrentClient.destroy(() => {
sphinx.end(() => spider.close(() => { sphinx.end(() => spider.close(() => {
mysqlSingle.destroy() mysqlSingle.destroy()