From f86b73b40e6215d95fe52c1734a5b0aad6b3aa24 Mon Sep 17 00:00:00 2001 From: Christian Bundy Date: Mon, 4 May 2020 13:18:25 -0700 Subject: [PATCH 1/2] Upgrade Flotilla and SSB-CONN, remove auto-stage Problem: The auto-stage code was a horrible hack that may be causeing an OOM bug if too many peers are staged too quickly. Solution: Since SSB-CONN now supports a variable number of connection hops, we can remove the auto-stage hack and use the default scheduler instead of trying to staple on our own hacky scheduler fix. --- package-lock.json | 138 +++++++++++++++++++++++++++------------------- package.json | 6 +- src/ssb.js | 92 +++++++------------------------ 3 files changed, 106 insertions(+), 130 deletions(-) diff --git a/package-lock.json b/package-lock.json index 036fa7e..5ca0905 100644 --- a/package-lock.json +++ b/package-lock.json @@ -305,16 +305,18 @@ "integrity": "sha512-Lnle0J8t+Z+jFg78GFFnGo+Fphxaco9K9SppeBDsI27QBRBumxeGAMeOg5wt6XbAuj5pQWmAEWWEwPz4PYGMHw==" }, "@fraction/flotilla": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@fraction/flotilla/-/flotilla-4.0.1.tgz", - "integrity": "sha512-ZSRHLVT79Z1OrGLvMm4LyDVw7x0puIS1s8VxExmeHZUVjlwZUwWgzeLZs3x82XQn7xtUIkU+aIrNs5gAHyLM5Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fraction/flotilla/-/flotilla-5.1.0.tgz", + "integrity": "sha512-0y/obrwkU7OtJAgQ1LWdaTZJS8tDXJfgq2wvPezqf9J7BvmnN1rYlTBkzeBIVQ4S9o08o0hUhSJurDm30UUW1A==", "requires": { + "debug": "^4.1.1", "lodash.shuffle": "^4.2.0", "secret-stack": "^6.3.0", "ssb-about": "^2.0.1", "ssb-backlinks": "^1.0.0", "ssb-blobs": "^1.2.2", - "ssb-conn": "^0.16.0", + "ssb-config": "^3.4.4", + "ssb-conn": "^0.17.0", "ssb-db": "^19.4.0", "ssb-ebt": "^5.6.7", "ssb-friends": "^4.1.4", @@ -475,7 +477,7 @@ }, "@types/debug": { "version": "4.1.5", - "resolved": false, + "resolved": "", "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", "dev": true }, @@ -527,7 +529,7 @@ }, "@types/highlight.js": { "version": "9.12.3", - "resolved": false, + "resolved": "", "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", "dev": true }, @@ -569,7 +571,7 @@ }, "@types/koa-mount": { "version": "4.0.0", - "resolved": false, + "resolved": "", "integrity": "sha512-56iBULArwY3uKLl28eRFchZ2v0diEoJzJbDaHH/ehgruF/s2/KMHyWsKcIhvDJ3tGdKu9oZNQvxaMg++1IKFdA==", "dev": true, "requires": { @@ -587,7 +589,7 @@ }, "@types/koa-static": { "version": "4.0.1", - "resolved": false, + "resolved": "", "integrity": "sha512-SSpct5fEcAeRkBHa3RiwCIRfDHcD1cZRhwRF///ZfvRt8KhoqRrhK6wpDlYPk/vWHVFE9hPGqh68bhzsHkir4w==", "dev": true, "requires": { @@ -597,7 +599,7 @@ }, "@types/koa__router": { "version": "8.0.2", - "resolved": false, + "resolved": "", "integrity": "sha512-3ZWfVAEcErHrZA31fWUC2YyZyAgoG4eKtQPy2XwBzdSpQealxjL7GcEEtGY925qPPs1wurW59qDl0KuRB39rrw==", "dev": true, "requires": { @@ -611,14 +613,14 @@ "dev": true }, "@types/lodash": { - "version": "4.14.149", - "resolved": false, - "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==", + "version": "4.14.150", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.150.tgz", + "integrity": "sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w==", "dev": true }, "@types/markdown-it": { "version": "0.0.9", - "resolved": false, + "resolved": "", "integrity": "sha512-IFSepyZXbF4dgSvsk8EsgaQ/8Msv1I5eTL0BZ0X3iGO9jw6tCVtPG8HchIPm3wrkmGdqZOD42kE0zplVi1gYDA==", "dev": true, "requires": { @@ -645,7 +647,7 @@ }, "@types/mkdirp": { "version": "1.0.0", - "resolved": false, + "resolved": "", "integrity": "sha512-ONFY9//bCEr3DWKON3iDv/Q8LXnhaYYaNDeFSN0AtO5o4sLf9F0pstJKKKjQhXE0kJEeHs8eR6SAsROhhc2Csw==", "dev": true, "requires": { @@ -659,7 +661,7 @@ }, "@types/nodemon": { "version": "1.19.0", - "resolved": false, + "resolved": "", "integrity": "sha512-nf0PKjNv3wo0pyhlPkHjfpU2oUYMdOIsCXceiFG6kvhYxbTwn2ne9mz2iWvJ/4QtCrJUEPJLNXuyGleyTacdaw==", "dev": true, "requires": { @@ -686,7 +688,7 @@ }, "@types/pull-stream": { "version": "3.6.0", - "resolved": false, + "resolved": "", "integrity": "sha512-d7cobAytjsYaTluqFTJopLbdZRs1HBkU+N07/zCtsXANZ5s9riDazRkvxkAUfmRzCvXqYAsGgnJHgX2lInIOQg==", "dev": true }, @@ -736,9 +738,9 @@ } }, "@types/supertest": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.8.tgz", - "integrity": "sha512-wcax7/ip4XSSJRLbNzEIUVy2xjcBIZZAuSd2vtltQfRK7kxhx5WMHbLHkYdxN3wuQCrwpYrg86/9byDjPXoGMA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.9.tgz", + "integrity": "sha512-0BTpWWWAO1+uXaP/oA0KW1eOZv4hc0knhrWowV06Gwwz3kqQxNO98fUFM2e15T+PdPRmOouNFrYvaBgdojPJ3g==", "dev": true, "requires": { "@types/superagent": "*" @@ -772,7 +774,7 @@ }, "@types/yargs": { "version": "15.0.4", - "resolved": false, + "resolved": "", "integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==", "dev": true, "requires": { @@ -1581,7 +1583,7 @@ }, "changelog-version": { "version": "1.0.1", - "resolved": false, + "resolved": "", "integrity": "sha512-WSY6Zq483wM31n+IhBb2f6uLgSQHCrui3VVmX4wmaxcszueYU15qDBhKzG+ZaKhv7ptfswPfv8epampii7s5Zw==", "dev": true }, @@ -1648,6 +1650,7 @@ "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", + "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -1912,7 +1915,7 @@ }, "common-good": { "version": "2.0.3", - "resolved": false, + "resolved": "", "integrity": "sha512-GFFvmcOOpzts0x+DTR9vIcXr3Pcl1oKM/mYO4P0GQRkwqtO2B+30P4oH/32lmdCwlBdnaET2ZNYnb69Dklfdwg==", "dev": true, "requires": { @@ -2944,9 +2947,9 @@ }, "dependencies": { "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", "requires": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -3865,6 +3868,13 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -5757,9 +5767,9 @@ } }, "levelup": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.3.2.tgz", - "integrity": "sha512-cRTjU4ktWo59wf13PHEiOayHC3n0dOh4i5+FHr4tv4MX9+l7mqETicNq3Aj07HKlLdk0z5muVoDL2RD+ovgiyA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", "requires": { "deferred-leveldown": "~5.3.0", "level-errors": "~2.0.0", @@ -6902,9 +6912,13 @@ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" }, "object-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } }, "object-keys": { "version": "1.1.1", @@ -8979,9 +8993,9 @@ } }, "ssb-conn": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/ssb-conn/-/ssb-conn-0.16.2.tgz", - "integrity": "sha512-KinjdF3tOMmlcjKK4bnTso0x6GYfL+9tE2gSacRDldaLui73nDLxSwjnSoE188wDXUEumJU0LvOff4AHm2XyLQ==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/ssb-conn/-/ssb-conn-0.17.0.tgz", + "integrity": "sha512-GrEPQ3KSYDkc0k41Y14iRKXURUWYyBtO+D5PXZ2JfWhNUZByeuCkKkkSIFP1zU5u0eFleYQW7ST+LGCKET448w==", "requires": { "debug": "~4.1.1", "has-network2": "0.0.1", @@ -9707,9 +9721,9 @@ } }, "string.prototype.trimend": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz", - "integrity": "sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" @@ -9736,9 +9750,9 @@ } }, "string.prototype.trimstart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz", - "integrity": "sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" @@ -9962,7 +9976,7 @@ }, "stylelint-config-recommended": { "version": "3.0.0", - "resolved": false, + "resolved": "", "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==", "dev": true }, @@ -10132,7 +10146,8 @@ }, "dependencies": { "@babel/helpers": { - "version": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", "requires": { "@babel/template": "^7.8.3", @@ -10141,14 +10156,16 @@ } }, "@babel/runtime": { - "version": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", "requires": { "regenerator-runtime": "^0.13.4" } }, "arrify": { - "version": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, "astral-regex": { @@ -10157,19 +10174,23 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "callsites": { - "version": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" }, "color-name": { - "version": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "esprima": { - "version": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "globals": { - "version": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "is-fullwidth-code-point": { @@ -10187,7 +10208,8 @@ } }, "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "regenerator-runtime": { @@ -10196,18 +10218,21 @@ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "resolve": { - "version": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", "requires": { "path-parse": "^1.0.6" } }, "resolve-from": { - "version": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, "slice-ansi": { - "version": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "requires": { "ansi-styles": "^4.0.0", @@ -10250,7 +10275,8 @@ } }, "type-fest": { - "version": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" }, "which": { @@ -11412,9 +11438,9 @@ } }, "yargs-parser": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.1.tgz", - "integrity": "sha512-KRHEsOM16IX7XuLnMOqImcPNbLVXMNHYAoFc3BKR8Ortl5gzDbtXvvEoGx9imk5E+X1VeNKNlcHr8B8vi+7ipA==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/package.json b/package.json index 1526b16..8027c7a 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@fraction/base16-css": "^1.1.0", - "@fraction/flotilla": "^4.0.1", + "@fraction/flotilla": "^5.1.0", "@koa/router": "^8.0.0", "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -59,13 +59,13 @@ "@types/koa-mount": "^4.0.0", "@types/koa-static": "^4.0.1", "@types/koa__router": "^8.0.2", - "@types/lodash": "^4.14.149", + "@types/lodash": "^4.14.150", "@types/markdown-it": "^0.0.9", "@types/mkdirp": "^1.0.0", "@types/nodemon": "^1.19.0", "@types/pull-stream": "^3.6.0", "@types/sharp": "^0.24.0", - "@types/supertest": "^2.0.8", + "@types/supertest": "^2.0.9", "@types/yargs": "^15.0.4", "changelog-version": "^1.0.1", "common-good": "^2.0.3", diff --git a/src/ssb.js b/src/ssb.js index 63a1ce7..8df055b 100644 --- a/src/ssb.js +++ b/src/ssb.js @@ -18,11 +18,6 @@ const socketPath = path.join(ssbConfig.path, "socket"); const publicInteger = ssbConfig.keys.public.replace(".ed25519", ""); const remote = `unix:${socketPath}~noauth:${publicInteger}`; -// This is unnecessary when https://github.com/ssbc/ssb-config/pull/72 is merged -ssbConfig.connections.incoming.unix = [ - { scope: "device", transform: "noauth" }, -]; - /** * @param formatter {string} input * @param args {any[]} input @@ -110,18 +105,13 @@ const ensureConnection = (customConfig) => { debug("Connection attempts to existing Scuttlebutt services failed"); log("Starting Scuttlebutt service"); - // Start with the default SSB-Config object. - const server = flotilla(ssbConfig); // Adjust with `customConfig`, which declares further preferences. - serverHandle = server(customConfig); + serverHandle = flotilla(customConfig); // Give the server a moment to start. This is a race condition. :/ setTimeout(() => { attemptConnection() - .then((ssb) => { - autoStagePeers({ ssb, config: customConfig }); - resolve(ssb); - }) + .then(resolve) .catch((e) => { throw new Error(e); }); @@ -136,60 +126,6 @@ const ensureConnection = (customConfig) => { return pendingConnection; }; -const autoStagePeers = ({ ssb, config }) => { - // TODO: This does not start when Oasis is started in --offline mode, which - // is great, but if you start Oasis in --offline mode and select 'Start - // networking' then this doesn't come into play. - // - // The right place to fix this is in the scheduler, and this entire function - // should be replaced by: https://github.com/staltz/ssb-conn/pull/17 - if (config.conn.autostart !== true) { - return; - } - - const inProgress = {}; - const maxHops = lodash.get( - ssbConfig, - "friends.hops", - lodash.get(ssbConfig, "friends.hops", 0) - ); - - const add = (address) => { - inProgress[address] = true; - return () => { - inProgress[address] = false; - }; - }; - - ssb.friends.hops().then((hops) => { - pull( - ssb.conn.stagedPeers(), - pull.drain((x) => { - x.filter(([address, data]) => { - const notInProgress = inProgress[address] !== true; - - const key = data.key; - const haveHops = typeof hops[key] === "number"; - const hopValue = haveHops ? hops[key] : Infinity; - // Negative hops means blocked - const isNotBlocked = hopValue >= 0; - const withinHops = isNotBlocked && hopValue <= maxHops; - - return notInProgress && withinHops; - }).forEach(([address, data]) => { - const done = add(address); - debug( - `Connecting to staged peer at ${ - hops[data.key] - }/${maxHops} hops: ${address}` - ); - ssb.conn.connect(address, data).then(done).catch(done); - }); - }) - ); - }); -}; - module.exports = ({ offline }) => { if (offline) { log("Offline mode activated - not connecting to scuttlebutt peers or pubs"); @@ -198,11 +134,25 @@ module.exports = ({ offline }) => { ); } - const customConfig = { - conn: { - autostart: !offline, - }, - }; + // Make a copy of `ssbConfig` to avoid mutating. + const customConfig = JSON.parse(JSON.stringify(ssbConfig)); + + // This is unnecessary when https://github.com/ssbc/ssb-config/pull/72 is merged + customConfig.connections.incoming.unix = [ + { scope: "device", transform: "noauth" }, + ]; + + // Only change the config if `--offline` is true. + if (offline === true) { + customConfig.conn.autostart = false; + } + + // Use `conn.hops`, or default to `friends.hops`, or default to `0`. + lodash.set( + customConfig, + "conn.hops", + lodash.get(ssbConfig, "conn.hops", lodash.get(ssbConfig.friends.hops, 0)) + ); /** * This is "cooler", a tiny interface for opening or reusing an instance of From 8e30c93de81fcfb40ac03736bc98ef06633d1dbe Mon Sep 17 00:00:00 2001 From: Christian Bundy Date: Mon, 4 May 2020 13:44:00 -0700 Subject: [PATCH 2/2] Fix 'cannot set autostart of undefined' Problem: `customConfig.conn` isn't defined. Solution: Use `lodash.set()`. --- src/ssb.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ssb.js b/src/ssb.js index 8df055b..3886a3c 100644 --- a/src/ssb.js +++ b/src/ssb.js @@ -11,7 +11,6 @@ const flotilla = require("@fraction/flotilla"); const ssbTangle = require("ssb-tangle"); const debug = require("debug")("oasis"); const path = require("path"); -const pull = require("pull-stream"); const lodash = require("lodash"); const socketPath = path.join(ssbConfig.path, "socket"); @@ -144,7 +143,7 @@ module.exports = ({ offline }) => { // Only change the config if `--offline` is true. if (offline === true) { - customConfig.conn.autostart = false; + lodash.set(customConfig, "conn.autostart", false); } // Use `conn.hops`, or default to `friends.hops`, or default to `0`.