UNPKG

social-butterfly

Version:

Incorporate federated social network protocols easily. Used with Hello, world federated blog.

87 lines (69 loc) 2.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _feeds = require("./util/feeds"); var _follow_confirm = _interopRequireDefault(require("./follow_confirm")); var _activitystreams = require("./activitystreams"); var _url_factory = require("./util/url_factory"); var _discover_user = require("./discover_user"); var _express = _interopRequireDefault(require("express")); var _server = require("react-dom/server"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _default = options => { const followRouter = _express.default.Router(); followRouter.get('/', async (req, res) => { const { resource } = req.query; res.send(`<!doctype html>` + (0, _server.renderToString)( /*#__PURE__*/React.createElement(_follow_confirm.default, { req: req, resource: resource }))); }); followRouter.post('/', async (req, res) => { await follow(req, req.session.user, req.query.resource); res.redirect('/'); }); followRouter.use('/websub', options.webSubSubscriberServer.listener()); // `req` might be null if we're doing initial setup of the server. async function follow(req, currentUser, profileUrl) { let userRemote; try { userRemote = await (0, _discover_user.discoverUserRemoteInfoSaveAndSubscribe)(req, options, profileUrl, currentUser.model.username); const feedResponseText = await (0, _feeds.retrieveFeed)(userRemote.feed_url); await (0, _feeds.parseFeedAndInsertIntoDb)(options, userRemote, feedResponseText); } catch (ex) { console.error(ex); } req && (0, _activitystreams.follow)(req, currentUser.model, userRemote, true /* isFollow */ ); return userRemote; } async function unfollow(req, currentUser, userRemote, hub_url, profileUrl) { try { const userRemoteParams = { localUsername: currentUser.model.username, remoteProfileUrl: profileUrl }; const callbackUrl = (0, _url_factory.buildUrl)({ req, pathname: '/websub', searchParams: userRemoteParams }); await options.webSubSubscriberServer.unsubscribe(hub_url, options.constants.webSubHub, callbackUrl); } catch (ex) { console.error(ex); } (0, _activitystreams.follow)(req, currentUser.model, userRemote, false /* isFollow */ ); } return { followRouter, follow, unfollow }; }; exports.default = _default;