From 5518253d1ea691858de45f2968f7bc1d2d287e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Calder=C3=B3n?= Date: Mon, 2 Sep 2024 18:01:28 -0300 Subject: [PATCH 1/3] Fixes to follow order NIP proposal We were publishing all the movements on nostr but this could be used to deanonymize users, so now we are working only with those status on the specs https://github.com/nostr-protocol/nips/pull/1331 --- bot/commands.js | 7 +++++-- bot/modules/dispute/commands.js | 4 +--- bot/modules/orders/takeOrder.js | 6 ++++-- bot/scenes.js | 3 --- bot/start.ts | 3 ++- ln/resubscribe_invoices.js | 2 +- ln/subscribe_invoice.js | 2 -- 7 files changed, 13 insertions(+), 14 deletions(-) diff --git a/bot/commands.js b/bot/commands.js index 44fcd44a..e6008ee4 100644 --- a/bot/commands.js +++ b/bot/commands.js @@ -83,6 +83,7 @@ const waitPayment = async (ctx, bot, buyer, seller, order, buyerInvoice) => { await messages.takeSellWaitingSellerToPayMessage(ctx, bot, buyer, order); } await order.save(); + order.status = 'in-progress'; // We update the nostr event OrderEvents.orderUpdated(order); } catch (error) { @@ -334,6 +335,7 @@ const cancelAddInvoice = async (ctx, order, job) => { } else { await messages.successCancelOrderMessage(ctx, user, order, i18nCtx); } + logger.info('cancelAddInvoice => OrderEvents.orderUpdated(order);'); OrderEvents.orderUpdated(order); } } catch (error) { @@ -508,6 +510,7 @@ const cancelShowHoldInvoice = async (ctx, order, job) => { } else { await messages.successCancelOrderMessage(ctx, user, order, i18nCtx); } + logger.info('cancelShowHoldInvoice => OrderEvents.orderUpdated(order);'); OrderEvents.orderUpdated(order); } } catch (error) { @@ -648,6 +651,8 @@ const cancelOrder = async (ctx, orderId, user) => { ); await messages.refundCooperativeCancelMessage(ctx, seller, i18nCtxSeller); logger.info(`Order ${order._id} was cancelled cooperatively!`); + logger.info('cancelOrder => OrderEvents.orderUpdated(order);'); + OrderEvents.orderUpdated(order); } else { await messages.initCooperativeCancelMessage(ctx, order); await messages.counterPartyWantsCooperativeCancelMessage( @@ -658,7 +663,6 @@ const cancelOrder = async (ctx, orderId, user) => { ); } await order.save(); - OrderEvents.orderUpdated(order); } catch (error) { logger.error(error); } @@ -682,7 +686,6 @@ const fiatSent = async (ctx, orderId, user) => { order.status = 'FIAT_SENT'; const seller = await User.findOne({ _id: order.seller_id }); await order.save(); - OrderEvents.orderUpdated(order); // We sent messages to both parties // We need to create i18n context for each user const i18nCtxBuyer = await getUserI18nContext(user); diff --git a/bot/modules/dispute/commands.js b/bot/modules/dispute/commands.js index 1d323b2d..7f48be90 100644 --- a/bot/modules/dispute/commands.js +++ b/bot/modules/dispute/commands.js @@ -7,7 +7,6 @@ const { const messages = require('./messages'); const globalMessages = require('../../messages'); const { logger } = require('../../../logger'); -const OrderEvents = require('../../modules/events/orders'); const { removeAtSymbol } = require('../../../util'); const dispute = async ctx => { @@ -35,14 +34,13 @@ const dispute = async ctx => { if (user._id == order.buyer_id) initiator = 'buyer'; order[`${initiator}_dispute`] = true; - order.previous_dispute_status = order.status + order.previous_dispute_status = order.status; order.status = 'DISPUTE'; const sellerToken = Math.floor(Math.random() * 899 + 100); const buyerToken = Math.floor(Math.random() * 899 + 100); order.buyer_dispute_token = buyerToken; order.seller_dispute_token = sellerToken; await order.save(); - OrderEvents.orderUpdated(order); // If this is a non community order, we may ban the user globally if (order.community_id) { diff --git a/bot/modules/orders/takeOrder.js b/bot/modules/orders/takeOrder.js index e57d31e9..03a175f3 100644 --- a/bot/modules/orders/takeOrder.js +++ b/bot/modules/orders/takeOrder.js @@ -57,8 +57,9 @@ exports.takebuy = async (ctx, bot, orderId) => { // if the user don't do anything order.status = 'WAITING_PAYMENT'; order.seller_id = user._id; - order.taken_at = Date.now(); + order.taken_at = new Date(Date.now()); await order.save(); + order.status = 'in-progress'; OrderEvents.orderUpdated(order); // We delete the messages related to that order from the channel await deleteOrderFromChannel(order, bot.telegram); @@ -79,9 +80,10 @@ exports.takesell = async (ctx, bot, orderId) => { if (!(await validateTakeSellOrder(ctx, bot, user, order))) return; order.status = 'WAITING_BUYER_INVOICE'; order.buyer_id = user._id; - order.taken_at = Date.now(); + order.taken_at = new Date(Date.now()); await order.save(); + order.status = 'in-progress'; OrderEvents.orderUpdated(order); // We delete the messages related to that order from the channel await deleteOrderFromChannel(order, bot.telegram); diff --git a/bot/scenes.js b/bot/scenes.js index fb1f7637..76b190f4 100644 --- a/bot/scenes.js +++ b/bot/scenes.js @@ -8,7 +8,6 @@ const messages = require('./messages'); const { isPendingPayment } = require('../ln'); const { logger } = require('../logger'); const { resolvLightningAddress } = require('../lnurl/lnurl-pay'); -const OrderEvents = require('./modules/events/orders'); const addInvoiceWizard = new Scenes.WizardScene( 'ADD_INVOICE_WIZARD_SCENE_ID', @@ -23,10 +22,8 @@ const addInvoiceWizard = new Scenes.WizardScene( order.fiat_code, expirationTime ); - order.status = 'WAITING_BUYER_INVOICE'; await order.save(); - OrderEvents.orderUpdated(order); return ctx.wizard.next(); } catch (error) { diff --git a/bot/start.ts b/bot/start.ts index fe7a1013..38f9bafe 100644 --- a/bot/start.ts +++ b/bot/start.ts @@ -307,7 +307,6 @@ const initialize = (botToken: string, options: Partial { } logger.info(`Invoices resubscribed: ${invoicesReSubscribed}`); } catch (error) { - logger.error(`ResubcribeInvoice catch: ${error.toString()}`); + logger.error(`ResubscribeInvoice catch: ${error.toString()}`); return false; } }; diff --git a/ln/subscribe_invoice.js b/ln/subscribe_invoice.js index b39d9c55..96560b81 100644 --- a/ln/subscribe_invoice.js +++ b/ln/subscribe_invoice.js @@ -50,7 +50,6 @@ const subscribeInvoice = async (bot, id, resub) => { } order.invoice_held_at = Date.now(); order.save(); - OrderEvents.orderUpdated(order); } if (invoice.is_confirmed) { const order = await Order.findOne({ hash: id }); @@ -76,7 +75,6 @@ const payHoldInvoice = async (bot, order) => { try { order.status = 'PAID_HOLD_INVOICE'; await order.save(); - OrderEvents.orderUpdated(order); const buyerUser = await User.findOne({ _id: order.buyer_id }); const sellerUser = await User.findOne({ _id: order.seller_id }); // We need two i18n contexts to send messages to each user From 441a1b9bb2c4d6985ba879f504282cf7a5b6b85a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Calder=C3=B3n?= Date: Mon, 2 Sep 2024 18:07:41 -0300 Subject: [PATCH 2/3] Remove non used element from require --- ln/subscribe_invoice.js | 1 - 1 file changed, 1 deletion(-) diff --git a/ln/subscribe_invoice.js b/ln/subscribe_invoice.js index 96560b81..21302cec 100644 --- a/ln/subscribe_invoice.js +++ b/ln/subscribe_invoice.js @@ -6,7 +6,6 @@ const messages = require('../bot/messages'); const ordersActions = require('../bot/ordersActions'); const { getUserI18nContext, getEmojiRate, decimalRound } = require('../util'); const { logger } = require('../logger'); -const OrderEvents = require('../bot/modules/events/orders'); const subscribeInvoice = async (bot, id, resub) => { try { From 370b8d2efc97e0d4cf0a7f4f5f6f0f175f4ed582 Mon Sep 17 00:00:00 2001 From: Catrya <140891948+Catrya@users.noreply.github.com> Date: Fri, 18 Oct 2024 09:03:33 -0400 Subject: [PATCH 3/3] avoid duplicate events --- bot/commands.js | 13 +++---------- bot/start.ts | 2 -- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/bot/commands.js b/bot/commands.js index e6008ee4..8472efaf 100644 --- a/bot/commands.js +++ b/bot/commands.js @@ -82,10 +82,7 @@ const waitPayment = async (ctx, bot, buyer, seller, order, buyerInvoice) => { ); await messages.takeSellWaitingSellerToPayMessage(ctx, bot, buyer, order); } - await order.save(); - order.status = 'in-progress'; - // We update the nostr event - OrderEvents.orderUpdated(order); + await order.save(); } catch (error) { logger.error(`Error in waitPayment: ${error}`); } @@ -334,9 +331,7 @@ const cancelAddInvoice = async (ctx, order, job) => { } } else { await messages.successCancelOrderMessage(ctx, user, order, i18nCtx); - } - logger.info('cancelAddInvoice => OrderEvents.orderUpdated(order);'); - OrderEvents.orderUpdated(order); + } } } catch (error) { logger.error(error); @@ -509,9 +504,7 @@ const cancelShowHoldInvoice = async (ctx, order, job) => { } } else { await messages.successCancelOrderMessage(ctx, user, order, i18nCtx); - } - logger.info('cancelShowHoldInvoice => OrderEvents.orderUpdated(order);'); - OrderEvents.orderUpdated(order); + } } } catch (error) { logger.error(error); diff --git a/bot/start.ts b/bot/start.ts index 38f9bafe..3cebed8b 100644 --- a/bot/start.ts +++ b/bot/start.ts @@ -501,8 +501,6 @@ const initialize = (botToken: string, options: Partial