From c7715a8f3b02ce5f75814d6070932ae877b19223 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Mon, 20 Jul 2020 15:12:56 -0400 Subject: [PATCH] contact actions and reads through HTTP --- src/routes.js | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) diff --git a/src/routes.js b/src/routes.js index 00bf57f5..bc4554a2 100644 --- a/src/routes.js +++ b/src/routes.js @@ -2054,6 +2054,175 @@ module.exports = async ( ap.get(`/api/gun/me`, apiGunMeGet) ap.put(`/api/gun/me`, apiGunMePut) + /** + * @typedef {object} ChatsRouteParams + * @prop {(string|undefined)=} publicKey + */ + + /** + * @type {RequestHandler} + */ + const apiGunChatsPost = async (req, res) => { + const { publicKey } = req.params + const { body } = req.body + + if (!publicKey) { + return res.status(400).json({ + errorMessage: `Must specify a publicKey route param for POSTing a message` + }) + } + + try { + const user = GunDB.getUser() + const SEA = GunDB.mySEA + + await GunActions.sendMessage(publicKey,body, user, SEA) + + return res.status(200).json({ + ok: true + }) + } catch (err) { + logger.error(err) + return res.status(500).json({ + errorMessage: err.message + }) + } + } + + ap.post(`/api/gun/chats/:publicKey?`, apiGunChatsPost) + + /** + * @typedef {object} RequestsRouteParams + * @prop {(string|undefined)=} requestID + */ + + /** + * @type {RequestHandler<{}>} + */ + const apiGunRequestsReceivedGet = (_, res) => { + try { + // spinup + Events.onSimplerReceivedRequests(() => {})() + const data = Events.getCurrentReceivedReqs() + + return res.status(200).json({ + data + }) + } catch (err) { + logger.error(err) + return res.status(500).json({ + errorMessage: err.message + }) + } + } + + /** + * @type {RequestHandler<{}>} + */ + const apiGunRequestsSentGet = (_, res) => { + try { + // spinup + Events.onSimplerSentRequests(() => {})() + const data = Events.getCurrentSentReqs() + + return res.status(200).json({ + data + }) + } catch (err) { + logger.error(err) + return res.status(500).json({ + errorMessage: err.message + }) + } + } + + /** + * @typedef {object} RequestsRoutePOSTBody + * @prop {string=} initialMsg + * @prop {string} publicKey + */ + + /** + * @type {RequestHandler<{}>} + */ + const apiGunRequestsPost = async (req, res) => { + const { initialMsg, publicKey } = /** @type {RequestsRoutePOSTBody} */(req.body) + + if (!publicKey) { + return res.status(400).json({ + errorMessage: `Must specify a publicKey route param for POSTing a message` + }) + } + + try { + const gun = require('../services/gunDB/Mediator').getGun() + const user = require('../services/gunDB/Mediator').getUser() + const SEA = require('../services/gunDB/Mediator').mySEA + + if (initialMsg) { + await GunActions.sendHRWithInitialMsg(initialMsg, publicKey, gun, user, SEA) + } else { + await GunActions.sendHandshakeRequest(publicKey, gun, user, SEA) + } + + return res.status(200).json({ + ok: true + }) + } catch (err) { + logger.error(err); + return res.status(500).json({ + errorMessage: err.message + }) + } + } + + /** + * @typedef {object} RequestsRoutePUTBody + * @prop {boolean=} accept + */ + + /** + * @type {RequestHandler} + */ + const apiGunRequestsPut = async (req, res) => { + const { requestID } = req.params + const { accept } = /** @type {RequestsRoutePUTBody} */(req.body) + + if (!requestID) { + return res.status(400).json({ + errorMessage: `Must specify a requestID route param for accepting a request` + }) + } + + if (!accept) { + return res.status(200).json({ + ok: true + }) + } + + try { + const gun = require('../services/gunDB/Mediator').getGun() + const user = require('../services/gunDB/Mediator').getUser() + const SEA = require('../services/gunDB/Mediator').mySEA + + await GunActions.acceptRequest(requestID, gun, user, SEA) + + return res.status(200).json({ + ok: true + }) + } catch (err) { + logger.error(err); + return res.status(500).json({ + errorMessage: err.message + }) + } + } + + ap.get(`/api/gun/requests/received`, apiGunRequestsReceivedGet) + ap.get(`/api/gun/requests/sent`, apiGunRequestsSentGet) + ap.post('/api/gun/requests/', apiGunRequestsPost) + ap.put(`/api/gun/requests/:requestID?`, apiGunRequestsPut) + /** * Return app so that it can be used by express. */