diff --git a/web/lib/express.js b/web/lib/express.js index e5d69af..fa2b6c7 100644 --- a/web/lib/express.js +++ b/web/lib/express.js @@ -522,7 +522,7 @@ router.get("/pubs", async (_req, res) => { res.render("desktop/pubs", { peers }); }); -router.get("/pub_invite", async (_req, res) => { +router.get("/pub_invite", { public: true }, async (_req, res) => { const invite = await ssb.client().invite.create({ uses: 1 }); res.json({ invite }); diff --git a/web/lib/ssb-client.js b/web/lib/ssb-client.js index fc4599c..b08d4c9 100644 --- a/web/lib/ssb-client.js +++ b/web/lib/ssb-client.js @@ -5,12 +5,14 @@ const queries = require("./queries"); const debug = require("debug")("express"); const metrics = require("./metrics"); const { ssbFolder } = require("./utils"); +const fetch = require("node-fetch").default; let ssbClient; - -let ssbSecret = ssbKeys.loadOrCreateSync(`${ssbFolder()}/secret`); let syncing = false; +const mode = process.env.MODE || "standalone"; +const ssbSecret = ssbKeys.loadOrCreateSync(`${ssbFolder()}/secret`); + const connectClient = (ssbSecret) => { Client(ssbSecret, ssbConfig, async (err, server) => { if (err) throw err; @@ -32,9 +34,25 @@ const connectClient = (ssbSecret) => { metrics.ssbProgressTotal.set(total); }); console.log("SSB Client ready"); + + if (mode == "standalone") addFirstPub(); }); }; +const addFirstPub = async () => { + const peers = await ssbClient.gossip.peers(); + if (peers.length == 0) { + console.log("No pubs found, adding pub.feedless.social as a first pub"); + try { + const response = await fetch("https://feedless.social/pub_invite"); + const { invite } = await response.json(); + await ssbClient.invite.accept(invite); + } catch (e) { + console.error("Could add feedless pub", e); + } + } +}; + module.exports.client = () => ssbClient; module.exports.isSyncing = () => syncing; module.exports.reconnectWith = connectClient; diff --git a/web/package-lock.json b/web/package-lock.json index f25eea2..75040f8 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -2653,6 +2653,11 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, "node-gyp-build": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", diff --git a/web/package.json b/web/package.json index da3cf5c..ad573d6 100644 --- a/web/package.json +++ b/web/package.json @@ -28,6 +28,7 @@ "ismobilejs": "^1.1.1", "left-pad": "^1.3.0", "mime-types": "^2.1.26", + "node-fetch": "^2.6.0", "prom-client": "^12.0.0", "pull-cat": "^1.1.11", "pull-identify-filetype": "^1.1.0",