diff --git a/services/gunDB/contact-api/actions.js b/services/gunDB/contact-api/actions.js index b9a11a54..0235b296 100644 --- a/services/gunDB/contact-api/actions.js +++ b/services/gunDB/contact-api/actions.js @@ -384,6 +384,72 @@ const generateHandshakeAddress = async () => { }) } +/** + * + * @param {string} pub + * @throws {Error} + * @returns {Promise} + */ +const cleanup = async pub => { + const user = require('../Mediator').getUser() + + const outGoingID = await Utils.recipientToOutgoingID(pub) + + await new Promise((res, rej) => { + user + .get(Key.USER_TO_INCOMING) + .get(pub) + .put(null, ack => { + if (ack.err) { + rej(new Error(ack.err)) + } else { + res() + } + }) + }) + + await new Promise((res, rej) => { + user + .get(Key.RECIPIENT_TO_OUTGOING) + .get(pub) + .put(null, ack => { + if (ack.err) { + rej(new Error(ack.err)) + } else { + res() + } + }) + }) + + await new Promise((res, rej) => { + user + .get(Key.USER_TO_LAST_REQUEST_SENT) + .get(pub) + .put(null, ack => { + if (ack.err) { + rej(new Error(ack.err)) + } else { + res() + } + }) + }) + + if (outGoingID) { + await new Promise((res, rej) => { + user + .get(Key.OUTGOINGS) + .get(outGoingID) + .put(null, ack => { + if (ack.err) { + rej(new Error(ack.err)) + } else { + res() + } + }) + }) + } +} + /** * @param {string} recipientPublicKey * @param {GUNNode} gun @@ -397,6 +463,8 @@ const sendHandshakeRequest = async (recipientPublicKey, gun, user, SEA) => { throw new Error(ErrorCode.NOT_AUTH) } + await cleanup(recipientPublicKey) + if (typeof recipientPublicKey !== 'string') { throw new TypeError( `recipientPublicKey is not string, got: ${typeof recipientPublicKey}` @@ -1037,66 +1105,11 @@ const saveSeedBackup = async (mnemonicPhrase, user, SEA) => { * @returns {Promise} */ const disconnect = async pub => { - const user = require('../Mediator').getUser() if (!(await Utils.successfulHandshakeAlreadyExists(pub))) { throw new Error('No handshake exists for this pub') } - const outGoingID = /** @type {string} */ (await Utils.recipientToOutgoingID( - pub - )) - - await new Promise((res, rej) => { - user - .get(Key.USER_TO_INCOMING) - .get(pub) - .put(null, ack => { - if (ack.err) { - rej(new Error(ack.err)) - } else { - res() - } - }) - }) - - await new Promise((res, rej) => { - user - .get(Key.RECIPIENT_TO_OUTGOING) - .get(pub) - .put(null, ack => { - if (ack.err) { - rej(new Error(ack.err)) - } else { - res() - } - }) - }) - - await new Promise((res, rej) => { - user - .get(Key.USER_TO_LAST_REQUEST_SENT) - .get(pub) - .put(null, ack => { - if (ack.err) { - rej(new Error(ack.err)) - } else { - res() - } - }) - }) - - await new Promise((res, rej) => { - user - .get(Key.OUTGOINGS) - .get(outGoingID) - .put(null, ack => { - if (ack.err) { - rej(new Error(ack.err)) - } else { - res() - } - }) - }) + await cleanup(pub) await generateHandshakeAddress() }