Merge branch 'master' into feature/ln-ux
This commit is contained in:
commit
19172f9537
5 changed files with 142 additions and 19 deletions
|
|
@ -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
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue