From 1d2470865b89cede01ce550ada6ee1de814a72c4 Mon Sep 17 00:00:00 2001 From: Jacob Karlsson Date: Fri, 17 May 2024 17:38:54 +0200 Subject: [PATCH] Improve cb types --- lib/index.js | 62 +++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/lib/index.js b/lib/index.js index 219e7d4..b9439fc 100644 --- a/lib/index.js +++ b/lib/index.js @@ -72,7 +72,7 @@ const { decrypt } = require('./encryption') /** * @template T - * @typedef {T extends void ? + * @typedef {[T] extends [void] ? * (...args: [Error] | []) => void : * (...args: [Error] | [null, T]) => void * } CB @@ -421,7 +421,7 @@ function initDB(peer, config) { /** * @param {Pick} rec - * @param {(err: Error | null, tangle: DBTangle | null) => void} cb + * @param {CB} cb */ function getAccountTangle(rec, cb) { const accountID = getAccountID(rec) @@ -432,8 +432,7 @@ function initDB(peer, config) { } if (!accountTangle.has(accountID)) { return cb( - Error(`Account tangle "${accountID}" is locally unknown`), - null + Error(`Account tangle "${accountID}" is locally unknown`) ) } return cb(null, accountTangle) @@ -483,7 +482,7 @@ function initDB(peer, config) { } /** - * @param {CB} cb + * @param {CB | void} cb */ function loaded(cb) { if (cb === void 0) return promisify(loaded)() @@ -499,7 +498,7 @@ function initDB(peer, config) { * * @param {Pick} rec * @param {MsgID} tangleID - * @param {(err: Error | null, val: null) => void} cb + * @param {CB} cb */ function verifyRec(rec, tangleID, cb) { let err @@ -515,34 +514,34 @@ function initDB(peer, config) { if ( (err = MsgV4.validate(rec.msg, tangle, sigkeys, rec.id, tangleID)) ) { - return cb(Error('Invalid msg', { cause: err }), null) + return cb(Error('Invalid msg', { cause: err })) } - return cb(null, null) + return cb() } // Identify the account and its sigkeys: getAccountTangle(rec, (err, accountTangle) => { // prettier-ignore - if (err) return cb(Error('Unknown account tangle owning this msg', { cause: err }), null) + if (err) return cb(Error('Unknown account tangle owning this msg', { cause: err })) getSigkeysInAccount( accountTangle, rec.msg.metadata.accountTips, (err, sigkeys) => { - if (err) return cb(err, null) + if (err) return cb(err) // Don't accept ghosts to come back, unless they are trail msgs if (!!rec.msg.data && ghosts.read(tangleID).has(rec.id)) { - return cb(Error('Refusing a ghost msg to come back'), null) + return cb(Error('Refusing a ghost msg to come back')) } if ( (err = MsgV4.validate(rec.msg, tangle, sigkeys, rec.id, tangleID)) ) { - return cb(Error('Invalid msg', { cause: err }), null) + return cb(Error('Invalid msg', { cause: err })) } - /** @param {(err: Error | null, val: null) => void} cb */ + /** @param {CB} cb */ function verifyInner(cb) { // Unwrap encrypted inner msg and verify it too if (typeof rec.msg.data === 'string') { @@ -554,15 +553,15 @@ function initDB(peer, config) { verifyRec(innerRec, innerMsgID, (err) => { // prettier-ignore - if (err) return cb(Error('Failed to verify inner msg', { cause: err }), null) + if (err) return cb(Error('Failed to verify inner msg', { cause: err })) - return cb(null, null) + return cb() }) } else { - return cb(null, null) + return cb() } } else { - return cb(null, null) + return cb() } } @@ -571,7 +570,7 @@ function initDB(peer, config) { const validAccountTangle = /** @type {Tangle} */ (accountTangle) validateAccountMsg(rec.msg, validAccountTangle, (err) => { if (err) - return cb(Error('Invalid account msg', { cause: err }), null) + return cb(Error('Invalid account msg', { cause: err })) return verifyInner(cb) }) } else { @@ -677,7 +676,7 @@ function initDB(peer, config) { /** * @param {Msg} msg * @param {Tangle} accountTangle - * @param {(err: Error | null, val: null) => void} cb + * @param {CB} cb */ function validateAccountMsg(msg, accountTangle, cb) { if (!MsgV4.isRoot(msg)) { @@ -690,21 +689,21 @@ function initDB(peer, config) { public: msg.sigkey, } getAccountPowers(accountTangle, keypair, (err, powers) => { - if (err) return cb(err, null) + if (err) return cb(err) if (!powers.has('add')) { // prettier-ignore - return cb(Error(`invalid account msg: sigkey "${msg.sigkey}" does not have "add" power`), null) + return cb(Error(`invalid account msg: sigkey "${msg.sigkey}" does not have "add" power`)) } - return cb(null, null) + return cb() }) } else { - return cb(null, null) + return cb() } // TODO validate 'del' } else { - return cb(null, null) + return cb() } } @@ -800,7 +799,7 @@ function initDB(peer, config) { * keypair?: KeypairPublicSlice; * account: string; * }} opts - * @param {(err: Error | null, has: boolean | null) => void} cb + * @param {CB} cb */ function accountHas(opts, cb) { const keypair = opts?.keypair ?? config.global.keypair @@ -811,7 +810,7 @@ function initDB(peer, config) { pull.asyncMap((msgID, cb) => { get(msgID, (err, msg) => { // prettier-ignore - if (err) return cb(Error("db.account.has() failed to get() account tangle message", { cause: err }), null) + if (err) return cb(Error("db.account.has() failed to get() account tangle message", { cause: err })) if (!msg?.data) return cb(null, false) /** @type {AccountData} */ @@ -826,7 +825,7 @@ function initDB(peer, config) { }), pull.collect((err, results) => { // prettier-ignore - if (err) return cb(Error('db.account.has() failed to calculate', { cause: err }), null) + if (err) return cb(Error('db.account.has() failed to calculate', { cause: err })) return cb( null, @@ -897,7 +896,6 @@ function initDB(peer, config) { }) } - //* @param {(err: Error | null, val: Set | null) => void} cb /** * @param {Tangle} accountTangle * @param {KeypairPublicSlice} keypair @@ -1286,7 +1284,7 @@ function initDB(peer, config) { /** * @param {string} accountId * @param {string} domain - * @param {(err: Error | null, rec: RecPresent | null) => void} cb + * @param {CB} cb */ function findMoot(accountId, domain, cb) { const findAccount = MsgV4.stripAccount(accountId) @@ -1303,7 +1301,7 @@ function initDB(peer, config) { /** * @param {MsgID} msgID - * @param {(err: Error | null, rec: RecPresent | null) => void} cb + * @param {CB} cb */ function getRecord(msgID, cb) { // TODO: improve performance of this when getting many messages, the arg @@ -1322,7 +1320,7 @@ function initDB(peer, config) { /** * @param {MsgID} msgID - * @param {(err: Error | null, msg?: Msg) => void} cb + * @param {CB} cb */ function get(msgID, cb) { getRecord(msgID, (err, rec) => { @@ -1466,7 +1464,7 @@ function initDB(peer, config) { /** * @param {MsgID} tangleID - * @param {(err: Error | null, tangle: DBTangle | null) => void} cb + * @param {CB} cb */ function getTangle(tangleID, cb) { DBTangle.init(tangleID, records(), get).then((tangle) => {