From 8aad93e5720aa2b7b5cd5a552df4225a356a0bb0 Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez Date: Tue, 11 Nov 2025 14:48:09 -0400 Subject: [PATCH] feat(nostr): Added npub to Offer model --- src/adapters/localdb/models/offer.js | 2 +- src/entities/offer.js | 8 +++++- test/unit/entities/offer.entity.unit.js | 35 ++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/adapters/localdb/models/offer.js b/src/adapters/localdb/models/offer.js index 933087c..cbf8e96 100644 --- a/src/adapters/localdb/models/offer.js +++ b/src/adapters/localdb/models/offer.js @@ -18,7 +18,7 @@ const Offer = new mongoose.Schema({ p2wdbHash: { type: String }, offerStatus: { type: String }, makerAddr: { type: String }, - makerNpub: { type: String }, + makerNpub: { type: String, default: null }, // Authentication data signature: { type: String }, diff --git a/src/entities/offer.js b/src/entities/offer.js index 55d7428..6aeb98b 100644 --- a/src/entities/offer.js +++ b/src/entities/offer.js @@ -31,6 +31,7 @@ class OfferEntity { utxoVout, offerStatus, makerAddr, + makerNpub, ticker, tokenType, nostrEventId, @@ -89,6 +90,10 @@ class OfferEntity { if (!operatorPercentage || typeof operatorPercentage !== 'number') { throw new Error("Property 'operatorPercentage' must be a number.") } + // Validate npub type if it exist + if (makerNpub && typeof makerNpub !== 'string') { + throw new Error("Property 'makerNpub' must be a string.") + } // Convert the timestamp to a number. let timestamp = new Date(offerData.timestamp) @@ -113,7 +118,8 @@ class OfferEntity { makerAddr, ticker, tokenType, - nostrEventId + nostrEventId, + makerNpub } // console.log('offer entity validatedOfferData: ', validatedOfferData) diff --git a/test/unit/entities/offer.entity.unit.js b/test/unit/entities/offer.entity.unit.js index 2d3c913..60c24e1 100644 --- a/test/unit/entities/offer.entity.unit.js +++ b/test/unit/entities/offer.entity.unit.js @@ -491,6 +491,36 @@ describe('#Offer-Entity', () => { assert.include(err.message, "Property 'operatorPercentage' must be a number.") } }) + it('should throw an error if makerNpub is not a string', () => { + try { + const offerData = { + data: { + messageType: 1, + messageClass: 1, + tokenId: 'fakeId', + buyOrSell: 'buy', + rateInBaseUnit: 1000, + minUnitsToExchange: 350, + numTokens: 1, + utxoTxid: 'fakeTxid', + utxoVout: 0, + offerStatus: 'posted', + makerAddr: 'bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00', + tokenType: 1, + nostrEventId: 'test', + operatorAddress: 'bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00', + operatorPercentage: 10, + makerNpub: 1234 + } + } + uut.validate(offerData) + + assert.fail('Unexpected code path') + } catch (err) { + // console.log(err) + assert.include(err.message, "Property 'makerNpub' must be a string.") + } + }) it('should validate a new offer', () => { const offerObj = { @@ -513,7 +543,8 @@ describe('#Offer-Entity', () => { tokenType: 1, nostrEventId: 'test', operatorAddress: 'bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00', - operatorPercentage: 10 + operatorPercentage: 10, + makerNpub: 'npub1dtkf954h5k2yuv04xp44g5hnmk5k0ppv8mekxafm2gc0vveaxh6s0297qg' }, timestamp: '2021-09-20T17:54:26.395Z', localTimeStamp: '9/20/2021, 10:54:26 AM', @@ -539,6 +570,8 @@ describe('#Offer-Entity', () => { assert.property(result, 'txid') assert.property(result, 'p2wdbHash') assert.property(result, 'tokenType') + assert.property(result, 'makerAddr') + assert.property(result, 'makerNpub') }) }) })