From fba877e814697686d8fa7e24627735884e2cb12b Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Thu, 20 Feb 2020 18:24:10 -0400 Subject: [PATCH 1/5] better avatar event --- services/gunDB/contact-api/events/index.js | 50 ++++++++++++++++------ 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/services/gunDB/contact-api/events/index.js b/services/gunDB/contact-api/events/index.js index 6421d2ec..5a328005 100644 --- a/services/gunDB/contact-api/events/index.js +++ b/services/gunDB/contact-api/events/index.js @@ -77,29 +77,52 @@ const __onUserToIncoming = (cb, user, SEA) => { }) } +/** @type {Set<(av: string|null) => void>} */ +const avatarListeners = new Set() + +/** @type {string|null} */ +let currentAvatar = null + +const getAvatar = () => currentAvatar + +/** @param {string|null} av */ +const setAvatar = av => { + currentAvatar = av + avatarListeners.forEach(l => l(currentAvatar)) +} + +let avatarSubbed = false + /** * @param {(avatar: string|null) => void} cb * @param {UserGUNNode} user Pass only for testing purposes. * @throws {Error} If user hasn't been auth. - * @returns {void} + * @returns {() => void} */ const onAvatar = (cb, user) => { if (!user.is) { throw new Error(ErrorCode.NOT_AUTH) } - const callb = debounce(cb, DEBOUNCE_WAIT_TIME) - // Initial value if avvatar is undefined in gun - callb(null) + avatarListeners.add(cb) - user - .get(Key.PROFILE) - .get(Key.AVATAR) - .on(avatar => { - if (typeof avatar === 'string' || avatar === null) { - callb(avatar) - } - }) + cb(currentAvatar) + + if (!avatarSubbed) { + avatarSubbed = true + user + .get(Key.PROFILE) + .get(Key.AVATAR) + .on(avatar => { + if (typeof avatar === 'string' || avatar === null) { + setAvatar(avatar) + } + }) + } + + return () => { + avatarListeners.delete(cb) + } } /** @@ -531,5 +554,6 @@ module.exports = { getCurrentSentReqs: require('./onSentReqs').getCurrentSentReqs, onBio, onSeedBackup, - onChats + onChats, + getAvatar } From 4f81b8f6b880a0ab5d16088393a158c9a548d2f8 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Thu, 20 Feb 2020 18:51:23 -0400 Subject: [PATCH 2/5] better displayName Event --- services/gunDB/contact-api/events/index.js | 49 ++++++++++++++++------ 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/services/gunDB/contact-api/events/index.js b/services/gunDB/contact-api/events/index.js index 5a328005..2404d463 100644 --- a/services/gunDB/contact-api/events/index.js +++ b/services/gunDB/contact-api/events/index.js @@ -185,30 +185,52 @@ const onCurrentHandshakeAddress = (cb, user) => { }) } +/** @type {Set<(dn: string|null) => void>} */ +const dnListeners = new Set() + +/** @type {string|null} */ +let currentDn = null + +const getDisplayName = () => currentDn + +/** @param {string|null} dn */ +const setDn = dn => { + currentDn = dn + dnListeners.forEach(l => l(currentDn)) +} + +let dnSubbed = false + /** * @param {(displayName: string|null) => void} cb * @param {UserGUNNode} user Pass only for testing purposes. * @throws {Error} If user hasn't been auth. - * @returns {void} + * @returns {() => void} */ const onDisplayName = (cb, user) => { if (!user.is) { throw new Error(ErrorCode.NOT_AUTH) } - const callb = debounce(cb, DEBOUNCE_WAIT_TIME) + cb(currentDn) - // Initial value if display name is undefined in gun - callb(null) + dnListeners.add(cb) - user - .get(Key.PROFILE) - .get(Key.DISPLAY_NAME) - .on(displayName => { - if (typeof displayName === 'string' || displayName === null) { - callb(displayName) - } - }) + if (!dnSubbed) { + dnSubbed = true + user + .get(Key.PROFILE) + .get(Key.DISPLAY_NAME) + .on(displayName => { + if (typeof displayName === 'string' || displayName === null) { + setDn(displayName) + } + }) + } + + return () => { + dnListeners.delete(cb) + } } /** @@ -555,5 +577,6 @@ module.exports = { onBio, onSeedBackup, onChats, - getAvatar + getAvatar, + getDisplayName } From fd2c132f3eda661dcdae1e6c0ba064f2f7990be4 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Thu, 20 Feb 2020 19:03:15 -0400 Subject: [PATCH 3/5] better handshake address event --- services/gunDB/contact-api/events/index.js | 51 ++++++++++++++++------ 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/services/gunDB/contact-api/events/index.js b/services/gunDB/contact-api/events/index.js index 2404d463..21566c55 100644 --- a/services/gunDB/contact-api/events/index.js +++ b/services/gunDB/contact-api/events/index.js @@ -156,33 +156,55 @@ const onBlacklist = (cb, user) => { }) } +/** @type {Set<(addr: string|null) => void>} */ +const addressListeners = new Set() + +/** @type {string|null} */ +let currentAddress = null + +const getHandshakeAddress = () => currentAddress + +/** @param {string|null} addr */ +const setAddress = addr => { + currentAddress = addr + addressListeners.forEach(l => l(currentAddress)) +} + +let addrSubbed = false + /** * @param {(currentHandshakeAddress: string|null) => void} cb * @param {UserGUNNode} user - * @returns {void} + * @returns {() => void} */ const onCurrentHandshakeAddress = (cb, user) => { if (!user.is) { throw new Error(ErrorCode.NOT_AUTH) } - const callb = debounce(cb, DEBOUNCE_WAIT_TIME) + addressListeners.add(cb) - // If undefined, callback below wont be called. Let's supply null as the - // initial value. - callb(null) + cb(currentAddress) - user.get(Key.CURRENT_HANDSHAKE_ADDRESS).on(addr => { - if (typeof addr !== 'string') { - console.error('expected handshake address to be an string') + if (!addrSubbed) { + addrSubbed = true - callb(null) + user.get(Key.CURRENT_HANDSHAKE_ADDRESS).on(addr => { + if (typeof addr !== 'string') { + console.error('expected handshake address to be an string') - return - } + setAddress(null) - callb(addr) - }) + return + } + + setAddress(addr) + }) + } + + return () => { + addressListeners.delete(cb) + } } /** @type {Set<(dn: string|null) => void>} */ @@ -578,5 +600,6 @@ module.exports = { onSeedBackup, onChats, getAvatar, - getDisplayName + getDisplayName, + getHandshakeAddress } From 7eeb754315673c7cf7c2fc521d144882c02d4138 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Thu, 20 Feb 2020 19:04:25 -0400 Subject: [PATCH 4/5] call next() for non lnd routes --- src/routes.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/routes.js b/src/routes.js index 1b9e4c1e..bbda7b47 100644 --- a/src/routes.js +++ b/src/routes.js @@ -284,6 +284,7 @@ module.exports = async ( errorMessage: "Please create a wallet before using the API" }); } + next() } catch (err) { logger.error(err); res From afd41ad8784fd0c94e0af50e349479b50cca545f Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 21 Feb 2020 10:55:38 -0400 Subject: [PATCH 5/5] Revert "call next() for non lnd routes" This reverts commit 7eeb754315673c7cf7c2fc521d144882c02d4138. --- src/routes.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/routes.js b/src/routes.js index bbda7b47..1b9e4c1e 100644 --- a/src/routes.js +++ b/src/routes.js @@ -284,7 +284,6 @@ module.exports = async ( errorMessage: "Please create a wallet before using the API" }); } - next() } catch (err) { logger.error(err); res