Merge branch 'master' into feature/ln-ux

This commit is contained in:
boufni95 2020-07-15 15:51:29 +02:00
commit 19172f9537
5 changed files with 142 additions and 19 deletions

View file

@ -1303,6 +1303,7 @@ const register = async (alias, pass) => {
await API.Actions.setDisplayName('anon' + pub.slice(0, 8), user) await API.Actions.setDisplayName('anon' + pub.slice(0, 8), user)
await API.Actions.generateHandshakeAddress() await API.Actions.generateHandshakeAddress()
await API.Actions.generateOrderAddress(user) await API.Actions.generateOrderAddress(user)
await API.Actions.initWall()
await API.Actions.setBio('A little bit about myself.', user) await API.Actions.setBio('A little bit about myself.', user)
return pub return pub
}) })

View file

@ -1269,7 +1269,15 @@ const createPost = async (tags, title, content) => {
v => typeof v !== 'number' v => typeof v !== 'number'
) )
return typeof maybeNumOfPages === 'number' ? maybeNumOfPages : 0 if (typeof maybeNumOfPages !== 'number') {
throw new TypeError(
`Could not fetch number of pages from wall, instead got: ${JSON.stringify(
maybeNumOfPages
)}`
)
}
return maybeNumOfPages
})() })()
let pageIdx = Math.max(0, numOfPages - 1).toString() let pageIdx = Math.max(0, numOfPages - 1).toString()
@ -1502,6 +1510,62 @@ const unfollow = publicKey =>
}) })
}) })
/**
* @throws {Error}
* @returns {Promise<void>}
*/
const initWall = async () => {
const user = require('../Mediator').getUser()
await new Promise((res, rej) => {
user
.get(Key.WALL)
.get(Key.NUM_OF_PAGES)
.put(0, ack => {
if (ack.err) {
rej(new Error(ack.err))
} else {
res()
}
})
})
await new Promise((res, rej) => {
user
.get(Key.WALL)
.get(Key.PAGES)
.get('0')
.get(Key.POSTS)
.put(
{
unused: null
},
ack => {
if (ack.err) {
rej(new Error(ack.err))
} else {
res()
}
}
)
})
await new Promise((res, rej) => {
user
.get(Key.WALL)
.get(Key.PAGES)
.get('0')
.get(Key.COUNT)
.put(0, ack => {
if (ack.err) {
rej(new Error(ack.err))
} else {
res()
}
})
})
}
module.exports = { module.exports = {
__createOutgoingFeed, __createOutgoingFeed,
acceptRequest, acceptRequest,
@ -1524,5 +1588,6 @@ module.exports = {
createPost, createPost,
deletePost, deletePost,
follow, follow,
unfollow unfollow,
initWall
} }

View file

@ -12,8 +12,8 @@ const Utils = require('../utils')
*/ */
const getAnUser = async publicKey => { const getAnUser = async publicKey => {
const oldProfile = await Utils.tryAndWait( const oldProfile = await Utils.tryAndWait(
g => { (g, u) => {
const user = g.get(`~${publicKey}`) const user = u._.sea.pub === publicKey ? u : g.user(publicKey)
return new Promise(res => user.get(Key.PROFILE).load(res)) return new Promise(res => user.get(Key.PROFILE).load(res))
}, },
@ -21,25 +21,29 @@ const getAnUser = async publicKey => {
) )
const bio = await Utils.tryAndWait( const bio = await Utils.tryAndWait(
g => (g, u) => {
g const user = u._.sea.pub === publicKey ? u : g.user(publicKey)
.get(`~${publicKey}`)
.get(Key.BIO) return user.get(Key.BIO).then()
.then(), },
v => typeof v !== 'string' v => typeof v !== 'string'
) )
const lastSeenApp = await Utils.tryAndWait( const lastSeenApp = await Utils.tryAndWait(
g => (g, u) => {
g const user = u._.sea.pub === publicKey ? u : g.user(publicKey)
.get(`~${publicKey}`)
.get(Key.LAST_SEEN_APP) return user.get(Key.LAST_SEEN_APP).then()
.then(), },
v => typeof v !== 'number' v => typeof v !== 'number'
) )
const lastSeenNode = await Utils.tryAndWait( const lastSeenNode = await Utils.tryAndWait(
(_, user) => user.get(Key.LAST_SEEN_NODE).then(), (g, u) => {
const user = u._.sea.pub === publicKey ? u : g.user(publicKey)
return user.get(Key.LAST_SEEN_NODE).then()
},
v => typeof v !== 'number' v => typeof v !== 'number'
) )

View file

@ -15,7 +15,14 @@ const Wall = require('./user')
const getWallTotalPages = async publicKey => { const getWallTotalPages = async publicKey => {
const totalPages = await Utils.tryAndWait( const totalPages = await Utils.tryAndWait(
(gun, u) => { (gun, u) => {
const user = publicKey ? gun.get(`~${publicKey}`) : u /**
* @type {import('../SimpleGUN').GUNNode}
*/
let user = u
if (publicKey && u._.sea.pub !== publicKey) {
user = gun.user(publicKey)
}
return user return user
.get(Key.WALL) .get(Key.WALL)
@ -44,18 +51,63 @@ const getWallPage = async (page, publicKey) => {
) )
} }
const empty = {
count: 0,
posts: {}
}
if (totalPages === 0) {
return empty
}
const actualPageIdx = page < 0 ? totalPages + page : page - 1 const actualPageIdx = page < 0 ? totalPages + page : page - 1
if (actualPageIdx > totalPages - 1) { if (actualPageIdx > totalPages - 1) {
throw new RangeError(`Requested a page out of bounds`) throw new RangeError(`Requested a page out of bounds`)
} }
/**
* @type {number}
*/
// @ts-ignore
const count = await Utils.tryAndWait(
(g, u) => {
/**
* @type {import('../SimpleGUN').GUNNode}
*/
let user = u
if (publicKey && u._.sea.pub !== publicKey) {
user = g.user(publicKey)
}
return user
.get(Key.WALL)
.get(Key.PAGES)
.get(actualPageIdx.toString())
.get(Key.COUNT)
.then()
},
v => typeof v !== 'number'
)
if (count === 0) {
return empty
}
/** /**
* @type {Common.SchemaTypes.WallPage} * @type {Common.SchemaTypes.WallPage}
*/ */
const thePage = await Utils.tryAndWait( const thePage = await Utils.tryAndWait(
(g, u) => { (g, u) => {
const user = publicKey ? g.get(`~${publicKey}`) : u /**
* @type {import('../SimpleGUN').GUNNode}
*/
let user = u
if (publicKey && u._.sea.pub !== publicKey) {
user = g.user(publicKey)
}
return new Promise(res => { return new Promise(res => {
user user

View file

@ -98,13 +98,14 @@ const tryAndWait = async (promGen, shouldRetry = () => false) => {
if (shouldRetry(resolvedValue)) { if (shouldRetry(resolvedValue)) {
logger.info( logger.info(
'force retrying' + 'force retrying' +
` args: ${promGen.toString()} -- ${shouldRetry.toString()}` ` args: ${promGen.toString()} -- ${shouldRetry.toString()} \n resolvedValue: ${resolvedValue}, type: ${typeof resolvedValue}`
) )
} else { } else {
return resolvedValue return resolvedValue
} }
} catch (e) { } catch (e) {
logger.error(e) logger.error(e)
logger.info(JSON.stringify(e))
if (e.message === 'NOT_AUTH') { if (e.message === 'NOT_AUTH') {
throw e throw e
} }
@ -128,7 +129,7 @@ const tryAndWait = async (promGen, shouldRetry = () => false) => {
if (shouldRetry(resolvedValue)) { if (shouldRetry(resolvedValue)) {
logger.info( logger.info(
'force retrying' + 'force retrying' +
` args: ${promGen.toString()} -- ${shouldRetry.toString()}` ` args: ${promGen.toString()} -- ${shouldRetry.toString()} \n resolvedValue: ${resolvedValue}, type: ${typeof resolvedValue}`
) )
} else { } else {
return resolvedValue return resolvedValue