From ca9ecb6c801590b1d85f7ece9b2d730fa5be28f5 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 26 Jun 2020 21:10:32 -0400 Subject: [PATCH 01/19] more precise count --- services/gunDB/contact-api/getters/wall.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/gunDB/contact-api/getters/wall.js b/services/gunDB/contact-api/getters/wall.js index 25a0b004..54912536 100644 --- a/services/gunDB/contact-api/getters/wall.js +++ b/services/gunDB/contact-api/getters/wall.js @@ -71,6 +71,8 @@ const getWallPage = async page => { if (post === null) { // @ts-ignore delete clean.posts[key] + // @ts-ignore + clean.count-- } else { post.id = key } From b1594e1707e6f9c333711dc180db12839c2186a1 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 26 Jun 2020 21:12:23 -0400 Subject: [PATCH 02/19] correct place for count correction --- services/gunDB/contact-api/getters/wall.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/gunDB/contact-api/getters/wall.js b/services/gunDB/contact-api/getters/wall.js index 54912536..f55e7b1e 100644 --- a/services/gunDB/contact-api/getters/wall.js +++ b/services/gunDB/contact-api/getters/wall.js @@ -71,8 +71,6 @@ const getWallPage = async page => { if (post === null) { // @ts-ignore delete clean.posts[key] - // @ts-ignore - clean.count-- } else { post.id = key } @@ -96,6 +94,7 @@ const getWallPage = async page => { // delete unsuccessful writes if (post === null) { delete clean.posts[key] + clean.count-- } else { post.id = key } From 140b0a43b0e5d79e2032d3366cc05f4a19a1ba2b Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 26 Jun 2020 21:15:53 -0400 Subject: [PATCH 03/19] support public key lookup for wall --- services/gunDB/contact-api/getters/wall.js | 26 ++++++++++++++-------- src/routes.js | 7 +++--- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/services/gunDB/contact-api/getters/wall.js b/services/gunDB/contact-api/getters/wall.js index f55e7b1e..cff14b84 100644 --- a/services/gunDB/contact-api/getters/wall.js +++ b/services/gunDB/contact-api/getters/wall.js @@ -6,15 +6,19 @@ const Utils = require('../utils') const Key = require('../key') /** + * @param {string=} publicKey * @returns {Promise} */ -const getWallTotalPages = async () => { +const getWallTotalPages = async publicKey => { const totalPages = await Utils.tryAndWait( - (_, user) => - user + (gun, u) => { + const user = publicKey ? gun.get(`~${publicKey}`) : u + + return user .get(Key.WALL) .get(Key.NUM_OF_PAGES) - .then(), + .then() + }, v => typeof v !== 'number' ) @@ -23,12 +27,13 @@ const getWallTotalPages = async () => { /** * @param {number} page + * @param {string=} publicKey * @throws {TypeError} * @throws {RangeError} * @returns {Promise} */ -const getWallPage = async page => { - const totalPages = await getWallTotalPages() +const getWallPage = async (page, publicKey) => { + const totalPages = await getWallTotalPages(publicKey) if (page === 0 || totalPages === 0) { return { @@ -47,15 +52,18 @@ const getWallPage = async page => { * @type {Common.SchemaTypes.WallPage} */ const thePage = await Utils.tryAndWait( - (_, user) => - new Promise(res => { + (g, u) => { + const user = publicKey ? g.get(`~${publicKey}`) : u + + return new Promise(res => { user .get(Key.WALL) .get(Key.PAGES) .get(actualPageIdx.toString()) // @ts-ignore .load(res) - }), + }) + }, maybePage => { if (typeof maybePage !== 'object' || maybePage === null) { return true diff --git a/src/routes.js b/src/routes.js index 5c4e99de..fcaeb879 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1842,9 +1842,10 @@ module.exports = async ( }) //////////////////////////////////////////////////////////////////////////////// - app.get(`/api/gun/wall`, async (req, res) => { + app.get(`/api/gun/wall/:publicKey`, async (req, res) => { try { const { page } = req.query; + const {publicKey} = req.params const pageNum = Number(page) @@ -1855,8 +1856,8 @@ module.exports = async ( }) } - const totalPages = await GunGetters.getWallTotalPages() - const fetchedPage = await GunGetters.getWallPage(pageNum) + const totalPages = await GunGetters.getWallTotalPages(publicKey) + const fetchedPage = await GunGetters.getWallPage(pageNum, publicKey) return res.status(200).json({ ...fetchedPage, From c569526c52a82f0f601ec0e654904c6b8ba17217 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 02:43:45 +0100 Subject: [PATCH 04/19] route param optional --- src/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index fcaeb879..199f4346 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1842,7 +1842,7 @@ module.exports = async ( }) //////////////////////////////////////////////////////////////////////////////// - app.get(`/api/gun/wall/:publicKey`, async (req, res) => { + app.get(`/api/gun/wall/:publicKey?`, async (req, res) => { try { const { page } = req.query; const {publicKey} = req.params From 75aeb7af42f8e696eea9caf2a5fe7051b290f5a6 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 16:27:43 -0400 Subject: [PATCH 05/19] add ramda --- package.json | 2 ++ yarn.lock | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/package.json b/package.json index 10e7a609..68b03834 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "lodash": "^4.17.15", "method-override": "^2.3.7", "promise": "^8.0.1", + "ramda": "^0.27.0", "request": "^2.87.0", "request-promise": "^4.2.2", "response-time": "^2.3.2", @@ -61,6 +62,7 @@ "@types/jest": "^24.0.18", "@types/jsonwebtoken": "^8.3.7", "@types/lodash": "^4.14.141", + "@types/ramda": "types/npm-ramda#dist", "@types/socket.io": "^2.1.4", "@types/uuid": "^3.4.5", "babel-eslint": "^10.0.3", diff --git a/yarn.lock b/yarn.lock index 64648074..f9da858b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -633,6 +633,10 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/ramda@types/npm-ramda#dist": + version "0.25.0" + resolved "https://codeload.github.com/types/npm-ramda/tar.gz/9529aa3c8ff70ff84afcbc0be83443c00f30ea90" + "@types/range-parser@*": version "1.2.3" resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" @@ -5388,6 +5392,11 @@ ramda@^0.26.1: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== +ramda@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.0.tgz#915dc29865c0800bf3f69b8fd6c279898b59de43" + integrity sha512-pVzZdDpWwWqEVVLshWUHjNwuVP7SfcmPraYuqocJp1yo2U1R7P+5QAfDhdItkuoGqIBnBYrtPp7rEPqDn9HlZA== + random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" From 3c72432dceeeeec18dcc014803eeefdb2aa70142 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 18:25:32 -0400 Subject: [PATCH 06/19] simple feed functionality --- services/gunDB/contact-api/getters/feed.js | 64 +++++++++++++++++++++ services/gunDB/contact-api/getters/index.js | 3 + src/routes.js | 42 ++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 services/gunDB/contact-api/getters/feed.js diff --git a/services/gunDB/contact-api/getters/feed.js b/services/gunDB/contact-api/getters/feed.js new file mode 100644 index 00000000..0d7a9a72 --- /dev/null +++ b/services/gunDB/contact-api/getters/feed.js @@ -0,0 +1,64 @@ +/** + * @format + */ +const Common = require('shock-common') +const isFinite = require('lodash/isFinite') +const shuffle = require('lodash/shuffle') +const R = require('ramda') + +const Follows = require('./follows') +const Wall = require('./wall') + +/** + * @param {number} page + * @throws {TypeError} + * @throws {RangeError} + * @returns {Promise} + */ +const getFeedPage = async page => { + if (!isFinite(page)) { + throw new TypeError(`Please provide an actual number for [page]`) + } + + if (page <= 0) { + throw new RangeError(`Please provide only positive numbers for [page]`) + } + + const subbedPublicKeys = Object.values(await Follows.currentFollows()).map( + f => f.user + ) + + if (subbedPublicKeys.length === 0) { + return [] + } + + // say there are 20 public keys total + // page 1: page 1 from first 10 public keys + // page 2: page 1 from second 10 public keys + // page 3: page 2 from first 10 public keys + // page 4: page 2 from first 10 public keys + // etc + + const pagedPublicKeys = R.splitEvery(10, shuffle(subbedPublicKeys)) + + if (pagedPublicKeys.length === 1) { + const [publicKeys] = pagedPublicKeys + + const fetchedPages = await Promise.all( + publicKeys.map(pk => Wall.getWallPage(page, pk)) + ) + + const allPosts = fetchedPages.map(fp => Object.values(fp.posts)) + const posts = R.flatten(allPosts) + // @ts-ignore + const sorted = R.sortBy((a, b) => b.date - a.date, posts) + + return sorted + } + + return [] +} + +module.exports = { + getFeedPage +} diff --git a/services/gunDB/contact-api/getters/index.js b/services/gunDB/contact-api/getters/index.js index 2bb192fb..a21048c9 100644 --- a/services/gunDB/contact-api/getters/index.js +++ b/services/gunDB/contact-api/getters/index.js @@ -7,6 +7,7 @@ const Key = require('../key') const Utils = require('../utils') const Wall = require('./wall') +const Feed = require('./feed') /** * @param {string} pub @@ -94,3 +95,5 @@ module.exports.Follows = require('./follows') module.exports.getWallPage = Wall.getWallPage module.exports.getWallTotalPages = Wall.getWallTotalPages + +module.exports.getFeedPage = Feed.getFeedPage diff --git a/src/routes.js b/src/routes.js index 199f4346..0b82f7e5 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1971,6 +1971,48 @@ module.exports = async ( ap.put(`/api/gun/follows/:publicKey`,apiGunFollowsPut) ap.delete(`/api/gun/follows/:publicKey`, apiGunFollowsDelete) + /** + * @type {RequestHandler<{}>} + */ + const apiGunFeedGet = async (req, res) => { + try { + const { page } = req.query; + + if (!isFinite(page)) { + return res.json(401).json({ + field: page, + errorMessage: 'page must be a number' + }) + } + + if (!isFinite(page)) { + return res.json(400).json({ + field: page, + errorMessage: 'page must be a number' + }) + } + + if (page < 1) { + return res.json(400).json({ + field: page, + errorMessage: 'page must be a positive number' + }) + } + + + + return res.status(200).json({ + posts: await GunGetters.getFeedPage(page) + }) + } catch (err) { + return res.status(500).json({ + errorMessage: err.message || 'Unknown error inside /api/gun/follows/' + }) + } + } + + ap.get(`/api/gun/feed`, apiGunFeedGet) + /** * Return app so that it can be used by express. */ From c106fd74105f608576b60b299c856f917e67df14 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 18:28:01 -0400 Subject: [PATCH 07/19] re-enable follows --- src/routes.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/routes.js b/src/routes.js index 0b82f7e5..c34fc92f 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1907,12 +1907,11 @@ module.exports = async ( /** * @type {RequestHandler} */ - const apiGunFollowsGet = (_, res) => { + const apiGunFollowsGet = async (_, res) => { try { - // const { publicKey } = req.params; - // const currFollows = await GunGetters.currentFollows() + const currFollows = await GunGetters.Follows.currentFollows() - return res.status(200).json({}) + return res.status(200).json(currFollows) } catch (err) { return res.status(500).json({ errorMessage: err.message || 'Unknown ERR at GET /api/follows' @@ -1924,14 +1923,14 @@ module.exports = async ( /** * @type {RequestHandler} */ - const apiGunFollowsPut = (req, res) => { + const apiGunFollowsPut = async (req, res) => { try { const { publicKey } = req.params; if (!publicKey) { throw new Error(`Missing publicKey route param.`) } - // await GunActions.follow(req.params.publicKey, false) + await GunActions.follow(req.params.publicKey, false) // 201 would be extraneous here. Implement it inside app.put return res.status(200).json({ @@ -1947,14 +1946,14 @@ module.exports = async ( /** * @type {RequestHandler} */ - const apiGunFollowsDelete = (req, res) => { + const apiGunFollowsDelete = async (req, res) => { try { const { publicKey } = req.params; if (!publicKey) { throw new Error(`Missing publicKey route param.`) } - // await GunActions.unfollow(req.params.publicKey) + await GunActions.unfollow(req.params.publicKey) return res.status(200).json({ ok: true From 782c2b916034c7194f499db03df0d145c578cfff Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 21:28:26 -0400 Subject: [PATCH 08/19] parse page --- src/routes.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index c34fc92f..f41b908e 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1975,7 +1975,8 @@ module.exports = async ( */ const apiGunFeedGet = async (req, res) => { try { - const { page } = req.query; + const { pageStr } = req.query; + const page = Number(pageStr) if (!isFinite(page)) { return res.json(401).json({ From 45df3ddb1e0572c8989ab2c3aa7f10f6ade88b83 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 21:28:47 -0400 Subject: [PATCH 09/19] actual feed getter --- services/gunDB/contact-api/getters/feed.js | 39 +++++++++++++++------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/services/gunDB/contact-api/getters/feed.js b/services/gunDB/contact-api/getters/feed.js index 0d7a9a72..7f2593b1 100644 --- a/services/gunDB/contact-api/getters/feed.js +++ b/services/gunDB/contact-api/getters/feed.js @@ -9,6 +9,20 @@ const R = require('ramda') const Follows = require('./follows') const Wall = require('./wall') +/** + * + * @param {number} numberOfPublicKeyGroups + * @param {number} pageRequested + */ +const calculateFeedPage = (numberOfPublicKeyGroups, pageRequested) => { + // thanks to sebassdc + + return [ + ((pageRequested - 1) % numberOfPublicKeyGroups) + 1, + Math.ceil(pageRequested / numberOfPublicKeyGroups) + ] +} + /** * @param {number} page * @throws {TypeError} @@ -38,25 +52,26 @@ const getFeedPage = async page => { // page 3: page 2 from first 10 public keys // page 4: page 2 from first 10 public keys // etc + // thanks to sebassdc (github) const pagedPublicKeys = R.splitEvery(10, shuffle(subbedPublicKeys)) - if (pagedPublicKeys.length === 1) { - const [publicKeys] = pagedPublicKeys + const [publicKeyGroupIdx, pageToRequest] = calculateFeedPage( + pagedPublicKeys.length, + page + ) - const fetchedPages = await Promise.all( - publicKeys.map(pk => Wall.getWallPage(page, pk)) - ) + const publicKeys = pagedPublicKeys[publicKeyGroupIdx] - const allPosts = fetchedPages.map(fp => Object.values(fp.posts)) - const posts = R.flatten(allPosts) - // @ts-ignore - const sorted = R.sortBy((a, b) => b.date - a.date, posts) + const fetchedPages = await Promise.all( + publicKeys.map(pk => Wall.getWallPage(pageToRequest, pk)) + ) - return sorted - } + const fetchedPostsGroups = fetchedPages.map(wp => Object.values(wp.posts)) + const fetchedPosts = R.flatten(fetchedPostsGroups) + const sortered = R.sort((a, b) => b.date - a.date, fetchedPosts) - return [] + return sortered } module.exports = { From ae4e9c9b21c68191896986ead911830ec21e4313 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 21:31:01 -0400 Subject: [PATCH 10/19] typos --- src/routes.js | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/routes.js b/src/routes.js index f41b908e..d3336a11 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1979,28 +1979,19 @@ module.exports = async ( const page = Number(pageStr) if (!isFinite(page)) { - return res.json(401).json({ - field: page, - errorMessage: 'page must be a number' - }) - } - - if (!isFinite(page)) { - return res.json(400).json({ + return res.status(400).json({ field: page, errorMessage: 'page must be a number' }) } if (page < 1) { - return res.json(400).json({ + return res.status(400).json({ field: page, errorMessage: 'page must be a positive number' }) } - - return res.status(200).json({ posts: await GunGetters.getFeedPage(page) }) From 6da96122363ae0b0bb987dcc1ed864d51a5820ab Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 21:33:20 -0400 Subject: [PATCH 11/19] page gets autoparsed --- src/routes.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes.js b/src/routes.js index d3336a11..33e95424 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1975,8 +1975,7 @@ module.exports = async ( */ const apiGunFeedGet = async (req, res) => { try { - const { pageStr } = req.query; - const page = Number(pageStr) + const { page } = req.query; if (!isFinite(page)) { return res.status(400).json({ From f5eefd0afc4611fd2bfb575612280983c1757e4c Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 21:33:36 -0400 Subject: [PATCH 12/19] correct function --- src/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index 33e95424..3a86e1af 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1977,7 +1977,7 @@ module.exports = async ( try { const { page } = req.query; - if (!isFinite(page)) { + if (!isARealUsableNumber(page)) { return res.status(400).json({ field: page, errorMessage: 'page must be a number' From 1d59e59cf1eaee892dc4333b667073238755db5b Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 21:45:37 -0400 Subject: [PATCH 13/19] typo --- src/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index 3a86e1af..3431eab5 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1979,7 +1979,7 @@ module.exports = async ( if (!isARealUsableNumber(page)) { return res.status(400).json({ - field: page, + field: 'page', errorMessage: 'page must be a number' }) } From c9cbe2bf28c06793fab84bad92d67fa004208a13 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 21:47:52 -0400 Subject: [PATCH 14/19] has to be parsed --- src/routes.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index 3431eab5..ca80aa29 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1975,7 +1975,8 @@ module.exports = async ( */ const apiGunFeedGet = async (req, res) => { try { - const { page } = req.query; + const { pageStr } = req.query; + const page = Number(pageStr) if (!isARealUsableNumber(page)) { return res.status(400).json({ From b2e9eb616e44e364971ee685c3300db78e6e250b Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 23:00:26 -0400 Subject: [PATCH 15/19] typo --- src/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index ca80aa29..35914618 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1975,7 +1975,7 @@ module.exports = async ( */ const apiGunFeedGet = async (req, res) => { try { - const { pageStr } = req.query; + const { page: pageStr } = req.query; const page = Number(pageStr) if (!isARealUsableNumber(page)) { From 688a4c3cdb496a61913942e2784e185a0c8b3452 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 23:25:24 -0400 Subject: [PATCH 16/19] return type --- services/gunDB/contact-api/getters/feed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/gunDB/contact-api/getters/feed.js b/services/gunDB/contact-api/getters/feed.js index 7f2593b1..c067e5cd 100644 --- a/services/gunDB/contact-api/getters/feed.js +++ b/services/gunDB/contact-api/getters/feed.js @@ -10,9 +10,9 @@ const Follows = require('./follows') const Wall = require('./wall') /** - * * @param {number} numberOfPublicKeyGroups * @param {number} pageRequested + * @returns {[ number , number ]} */ const calculateFeedPage = (numberOfPublicKeyGroups, pageRequested) => { // thanks to sebassdc From 66997a8ba09350b316e8dce4b8a4b5d4171e19a6 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 23:25:47 -0400 Subject: [PATCH 17/19] return index --- services/gunDB/contact-api/getters/feed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/gunDB/contact-api/getters/feed.js b/services/gunDB/contact-api/getters/feed.js index c067e5cd..e0cce941 100644 --- a/services/gunDB/contact-api/getters/feed.js +++ b/services/gunDB/contact-api/getters/feed.js @@ -18,7 +18,7 @@ const calculateFeedPage = (numberOfPublicKeyGroups, pageRequested) => { // thanks to sebassdc return [ - ((pageRequested - 1) % numberOfPublicKeyGroups) + 1, + (pageRequested - 1) % numberOfPublicKeyGroups, Math.ceil(pageRequested / numberOfPublicKeyGroups) ] } From 96613fc35aefa1cc56d865c27367229344505287 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 27 Jun 2020 23:35:53 -0400 Subject: [PATCH 18/19] combat clock skew --- services/gunDB/Mediator/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/gunDB/Mediator/index.js b/services/gunDB/Mediator/index.js index 0d164beb..46435035 100644 --- a/services/gunDB/Mediator/index.js +++ b/services/gunDB/Mediator/index.js @@ -271,6 +271,9 @@ const authenticate = async (alias, pass, __user) => { if (typeof ack.err === 'string') { throw new Error(ack.err) } else if (typeof ack.sea === 'object') { + // clock skew + await new Promise(res => setTimeout(res, 2000)) + await new Promise((res, rej) => { _user.get(Key.FOLLOWS).put( { @@ -299,6 +302,9 @@ const authenticate = async (alias, pass, __user) => { ) } + // clock skew + await new Promise(res => setTimeout(res, 2000)) + await new Promise((res, rej) => { _user.get(Key.FOLLOWS).put( { From 5cce69fb75991b9cea882806e632d5e34648c729 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sun, 28 Jun 2020 06:15:17 -0400 Subject: [PATCH 19/19] get third party user for posts --- services/gunDB/contact-api/getters/wall.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/services/gunDB/contact-api/getters/wall.js b/services/gunDB/contact-api/getters/wall.js index 77b82dfe..f639780e 100644 --- a/services/gunDB/contact-api/getters/wall.js +++ b/services/gunDB/contact-api/getters/wall.js @@ -107,8 +107,11 @@ const getWallPage = async (page, publicKey) => { delete clean.posts[key] clean.count-- } else { - // eslint-disable-next-line no-await-in-loop - post.author = await Wall.getMyUser() + post.author = publicKey + ? // eslint-disable-next-line no-await-in-loop + await Wall.getAnUser(publicKey) + : // eslint-disable-next-line no-await-in-loop + await Wall.getMyUser() post.id = key } }