rec.hash instead of rec.id

This commit is contained in:
Andre Staltz 2023-04-09 11:05:09 +03:00
parent 79ebb033fe
commit 2696f44d1a
5 changed files with 22 additions and 24 deletions

View File

@ -33,7 +33,7 @@ function decrypt(rec, peer, config) {
const msgDecrypted = FeedV1.fromPlaintextBuffer(plaintextBuf, msgEncrypted) const msgDecrypted = FeedV1.fromPlaintextBuffer(plaintextBuf, msgEncrypted)
return { return {
id: rec.id, hash: rec.hash,
msg: msgDecrypted, msg: msgDecrypted,
received: rec.received, received: rec.received,
misc: { misc: {
@ -47,7 +47,7 @@ function decrypt(rec, peer, config) {
function reEncrypt(rec) { function reEncrypt(rec) {
return { return {
id: rec.id, hash: rec.hash,
msg: { ...rec.msg, content: rec.misc.originalContent }, msg: { ...rec.msg, content: rec.misc.originalContent },
received: rec.received, received: rec.received,
...(rec.misc.size ...(rec.misc.size

View File

@ -13,7 +13,7 @@ const { decrypt } = require('./encryption')
/** /**
* @typedef {Object} RecDeleted * @typedef {Object} RecDeleted
* @property {never} id * @property {never} hash
* @property {never} msg * @property {never} msg
* @property {never} received * @property {never} received
* @property {Object} misc * @property {Object} misc
@ -24,7 +24,7 @@ const { decrypt } = require('./encryption')
/** /**
* @typedef {Object} RecPresent * @typedef {Object} RecPresent
* @property {string} id * @property {string} hash
* @property {Msg} msg * @property {Msg} msg
* @property {number} received * @property {number} received
* @property {Object} misc * @property {Object} misc
@ -51,8 +51,7 @@ exports.init = function initDB(peer, config) {
const msgsPerFeed = { const msgsPerFeed = {
_mapAll: new Map(), // who => Set<MsgHash> _mapAll: new Map(), // who => Set<MsgHash>
_byHash: new Map(), // msgId => Msg // TODO: optimize space usage of this?? _byHash: new Map(), // msgId => Msg // TODO: optimize space usage of this??
update(msg, msgId) { update(msg, msgHash) {
const msgHash = FeedV1.getMsgHash(msgId ?? msg)
const feedId = FeedV1.getFeedId(msg) const feedId = FeedV1.getFeedId(msg)
const setAll = this._mapAll.get(feedId) ?? new Set() const setAll = this._mapAll.get(feedId) ?? new Set()
setAll.add(msgHash) setAll.add(msgHash)
@ -137,13 +136,12 @@ exports.init = function initDB(peer, config) {
) )
}) })
function logAppend(id, msg, cb) { function logAppend(hash, msg, cb) {
const rec = { const rec = {
id, hash,
msg, msg,
received: Date.now(), received: Date.now(),
} }
if (isOOO) rec.ooo = isOOO
log.append(rec, (err, newOffset) => { log.append(rec, (err, newOffset) => {
if (err) return cb(new Error('logAppend failed', { cause: err })) if (err) return cb(new Error('logAppend failed', { cause: err }))
const offset = newOffset // latestOffset const offset = newOffset // latestOffset
@ -188,10 +186,10 @@ exports.init = function initDB(peer, config) {
function validationCB(err) { function validationCB(err) {
// prettier-ignore // prettier-ignore
if (err) return cb(new Error('add() failed validation for feed format v1', {cause: err})) if (err) return cb(new Error('add() failed validation for feed format v1', {cause: err}))
const msgId = FeedV1.getMsgId(msg) const msgHash = FeedV1.getMsgHash(msg)
msgsPerFeed.update(msg, msgId) msgsPerFeed.update(msg, msgHash)
logAppend(msgId, msg, logAppendCB) logAppend(msgHash, msg, logAppendCB)
} }
function logAppendCB(err, rec) { function logAppendCB(err, rec) {
@ -257,11 +255,11 @@ exports.init = function initDB(peer, config) {
} catch (err) { } catch (err) {
return cb(new Error('create() failed', { cause: err })) return cb(new Error('create() failed', { cause: err }))
} }
const msgId = FeedV1.getMsgId(msg) const msgHash = FeedV1.getMsgHash(msg)
msgsPerFeed.update(msg, msgId) msgsPerFeed.update(msg, msgHash)
// Encode the native message and append it to the log: // Encode the native message and append it to the log:
logAppend(msgId, msg, (err, rec) => { logAppend(msgHash, msg, (err, rec) => {
// prettier-ignore // prettier-ignore
if (err) return cb(new Error('create() failed to append the log', { cause: err })) if (err) return cb(new Error('create() failed to append the log', { cause: err }))
onRecordAdded.set(rec) onRecordAdded.set(rec)
@ -298,8 +296,8 @@ exports.init = function initDB(peer, config) {
for (let i = 0; i < recs.length; i++) { for (let i = 0; i < recs.length; i++) {
const rec = recs[i] const rec = recs[i]
if (!rec) continue if (!rec) continue
if (isUri && rec.id === msgId) return rec if (isUri && msgId.endsWith(rec.hash)) return rec
else if (!isUri && rec.id.endsWith(msgId)) return rec else if (!isUri && rec.hash.endsWith(msgId)) return rec
} }
return null return null
} }

View File

@ -75,7 +75,7 @@ test('create() encrypted with box', async (t) => {
t.equal(typeof recEncrypted.msg.content, 'string') t.equal(typeof recEncrypted.msg.content, 'string')
t.true(recEncrypted.msg.content.endsWith('.box'), '.box') t.true(recEncrypted.msg.content.endsWith('.box'), '.box')
const msgDecrypted = peer.db.get(recEncrypted.id) const msgDecrypted = peer.db.get(recEncrypted.hash)
t.equals(msgDecrypted.content.text, 'I am chewing food') t.equals(msgDecrypted.content.text, 'I am chewing food')
}) })

View File

@ -20,13 +20,13 @@ test('del', async (t) => {
await peer.db.loaded() await peer.db.loaded()
const msgIDs = [] const msgHashes = []
for (let i = 0; i < 5; i++) { for (let i = 0; i < 5; i++) {
const rec = await p(peer.db.create)({ const rec = await p(peer.db.create)({
type: 'post', type: 'post',
content: { text: 'm' + i }, content: { text: 'm' + i },
}) })
msgIDs.push(rec.id) msgHashes.push(rec.hash)
} }
const before = [] const before = []
@ -36,7 +36,7 @@ test('del', async (t) => {
t.deepEqual(before, ['m0', 'm1', 'm2', 'm3', 'm4'], 'msgs before the delete') t.deepEqual(before, ['m0', 'm1', 'm2', 'm3', 'm4'], 'msgs before the delete')
await p(peer.db.del)(msgIDs[2]) await p(peer.db.del)(msgHashes[2])
const after = [] const after = []
for (const msg of peer.db.msgs()) { for (const msg of peer.db.msgs()) {

View File

@ -20,17 +20,17 @@ test('create some msgs, close, re-open', async (t) => {
await peer.db.loaded() await peer.db.loaded()
t.pass('opened db') t.pass('opened db')
const msgIDs = [] const msgHashes = []
for (let i = 0; i < 6; i++) { for (let i = 0; i < 6; i++) {
const rec = await p(peer.db.create)({ const rec = await p(peer.db.create)({
type: 'post', type: 'post',
content: { text: 'hello ' + i }, content: { text: 'hello ' + i },
}) })
msgIDs.push(rec.id) msgHashes.push(rec.hash)
} }
t.pass('created some msgs') t.pass('created some msgs')
await p(peer.db.del)(msgIDs[2]) await p(peer.db.del)(msgHashes[2])
t.pass('deleted the 3rd msg') t.pass('deleted the 3rd msg')
await p(peer.close)(true) await p(peer.close)(true)