From 867e3bf39924512eb38853f563e5dc58b6907187 Mon Sep 17 00:00:00 2001 From: Leo Sollier Date: Mon, 15 Jul 2024 12:34:58 +0200 Subject: [PATCH 1/2] fix: declare sent and received action on meta pn --- .../src/extensions/payment-network/meta.ts | 9 ++- .../extensions/payment-network/meta.test.ts | 28 ++++++++ .../payment-network/meta-pn-data-generator.ts | 71 +++++++++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-) diff --git a/packages/advanced-logic/src/extensions/payment-network/meta.ts b/packages/advanced-logic/src/extensions/payment-network/meta.ts index 77e3a4af5..24603fe5b 100644 --- a/packages/advanced-logic/src/extensions/payment-network/meta.ts +++ b/packages/advanced-logic/src/extensions/payment-network/meta.ts @@ -113,8 +113,10 @@ export default class MetaPaymentNetwork< }); }); + const genericCreationAction = super.applyCreation(extensionAction, timestamp); + return { - ...super.applyCreation(extensionAction, timestamp), + ...genericCreationAction, events: [ { name: 'create', @@ -124,7 +126,10 @@ export default class MetaPaymentNetwork< timestamp, }, ], - values, + values: { + ...genericCreationAction.values, + ...values, + }, }; } diff --git a/packages/advanced-logic/test/extensions/payment-network/meta.test.ts b/packages/advanced-logic/test/extensions/payment-network/meta.test.ts index 1988d2d08..d925a37fe 100644 --- a/packages/advanced-logic/test/extensions/payment-network/meta.test.ts +++ b/packages/advanced-logic/test/extensions/payment-network/meta.test.ts @@ -374,4 +374,32 @@ describe('extensions/payment-network/meta', () => { }); }); }); + + describe('declarative tests', () => { + describe('applyActionToExtension/declareSentPayment', () => { + it('can applyActionToExtensions of declareSentPayment', () => { + expect( + metaPn.applyActionToExtension( + MetaCreate.requestFullStateCreated.extensions, + MetaCreate.actionDeclareSentPayment, + MetaCreate.requestFullStateCreated, + TestData.payerRaw.identity, + TestData.arbitraryTimestamp, + ), + ).toEqual(MetaCreate.extensionStateWithDeclaredSent); + }); + + it('cannot applyActionToExtensions of declareSentPayment without a previous state', () => { + expect(() => { + metaPn.applyActionToExtension( + MetaCreate.requestStateNoExtensions.extensions, + MetaCreate.actionDeclareSentPayment, + MetaCreate.requestStateNoExtensions, + TestData.payerRaw.identity, + TestData.arbitraryTimestamp, + ); + }).toThrowError(`The extension should be created before receiving any other action`); + }); + }); + }); }); diff --git a/packages/advanced-logic/test/utils/payment-network/meta-pn-data-generator.ts b/packages/advanced-logic/test/utils/payment-network/meta-pn-data-generator.ts index 9c157a1bc..92d39fb51 100644 --- a/packages/advanced-logic/test/utils/payment-network/meta-pn-data-generator.ts +++ b/packages/advanced-logic/test/utils/payment-network/meta-pn-data-generator.ts @@ -15,6 +15,9 @@ export const feeAmount = '2000000000000000000'; export const invalidAddress = '0x not and address'; export const tokenAddress = '0x6b175474e89094c44da98b954eedeac495271d0f'; export const network = 'mainnet'; +export const amount = '12345'; +export const note = '123456789'; +export const txHash = '0x123456789'; export const saltMain = 'ea3bc7caf64110ca'; export const salt1 = 'ea3bc7caf64110cb'; export const salt2 = 'ea3bc7caf64110cc'; @@ -71,6 +74,17 @@ export const actionApplyActionToPn = { }, }; +export const actionDeclareSentPayment = { + action: ExtensionTypes.PnAnyDeclarative.ACTION.DECLARE_SENT_PAYMENT, + id: ExtensionTypes.PAYMENT_NETWORK_ID.META, + parameters: { + amount, + note, + txHash, + network, + }, +}; + // --------------------------------------------------------------------- // extensions states export const extensionFullStateMultipleAnyToErc20 = { @@ -98,6 +112,10 @@ export const extensionFullStateMultipleAnyToErc20 = { AnyToErc20Create.extensionFullState(salt2)[ ExtensionTypes.PAYMENT_NETWORK_ID.ANY_TO_ERC20_PROXY ], + receivedPaymentAmount: '0', + receivedRefundAmount: '0', + sentPaymentAmount: '0', + sentRefundAmount: '0', }, version: '0.1.0', }, @@ -142,6 +160,10 @@ export const extensionStateCreatedMissingAddress = { [salt2]: AnyToErc20Create.extensionFullState(salt2, null)[ ExtensionTypes.PAYMENT_NETWORK_ID.ANY_TO_ERC20_PROXY ], + receivedPaymentAmount: '0', + receivedRefundAmount: '0', + sentPaymentAmount: '0', + sentRefundAmount: '0', }, version: '0.1.0', }, @@ -206,6 +228,55 @@ export const extensionStateWithApplyAddPaymentAddressAfterCreation = { paymentAddress, }, }, + receivedPaymentAmount: '0', + receivedRefundAmount: '0', + sentPaymentAmount: '0', + sentRefundAmount: '0', + }, + version: '0.1.0', + }, +}; + +export const extensionStateWithDeclaredSent: RequestLogicTypes.IExtensionStates = { + [ExtensionTypes.PAYMENT_NETWORK_ID.META as string]: { + events: [ + { + name: 'create', + parameters: { + [ExtensionTypes.PAYMENT_NETWORK_ID.ANY_TO_ERC20_PROXY]: [ + baseParams(salt1), + baseParams(salt2), + ], + }, + timestamp: arbitraryTimestamp, + }, + { + name: ExtensionTypes.PnAnyDeclarative.ACTION.DECLARE_SENT_PAYMENT, + parameters: { + amount, + note, + txHash, + network, + }, + timestamp: arbitraryTimestamp, + from: TestData.payerRaw.identity, + }, + ], + id: ExtensionTypes.PAYMENT_NETWORK_ID.META, + type: ExtensionTypes.TYPE.PAYMENT_NETWORK, + values: { + [salt1]: + AnyToErc20Create.extensionFullState(salt1)[ + ExtensionTypes.PAYMENT_NETWORK_ID.ANY_TO_ERC20_PROXY + ], + [salt2]: + AnyToErc20Create.extensionFullState(salt2)[ + ExtensionTypes.PAYMENT_NETWORK_ID.ANY_TO_ERC20_PROXY + ], + receivedPaymentAmount: '0', + receivedRefundAmount: '0', + sentRefundAmount: '0', + sentPaymentAmount: amount, }, version: '0.1.0', }, From 7ab573564594811f945a998f70960be6f972cb35 Mon Sep 17 00:00:00 2001 From: Leo Sollier Date: Mon, 15 Jul 2024 13:04:35 +0200 Subject: [PATCH 2/2] fix: update payment detection logic --- packages/payment-detection/src/meta-payment-detector.ts | 6 +++++- .../payment-detection/test/meta-payment-network.test.ts | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/payment-detection/src/meta-payment-detector.ts b/packages/payment-detection/src/meta-payment-detector.ts index 1226d26fe..bd8dd4892 100644 --- a/packages/payment-detection/src/meta-payment-detector.ts +++ b/packages/payment-detection/src/meta-payment-detector.ts @@ -138,7 +138,11 @@ export class MetaDetector extends DeclarativePaymentDetectorBase< for (const value of Object.values( paymentExtension.values as Record>, )) { - if (supportedPns.includes(value.id as keyof ExtensionTypes.PnMeta.ICreationParameters)) { + if ( + !!value && + value.type === ExtensionTypes.TYPE.PAYMENT_NETWORK && + supportedPns.includes(value.id as keyof ExtensionTypes.PnMeta.ICreationParameters) + ) { const detectorClass = detectorMap[value.id as keyof typeof detectorMap]; const extensionKey = advancedLogicMap[value.id as keyof typeof advancedLogicMap]; const extension = diff --git a/packages/payment-detection/test/meta-payment-network.test.ts b/packages/payment-detection/test/meta-payment-network.test.ts index 6e6f8cb0f..57ab05237 100644 --- a/packages/payment-detection/test/meta-payment-network.test.ts +++ b/packages/payment-detection/test/meta-payment-network.test.ts @@ -106,6 +106,14 @@ const requestMock: RequestLogicTypes.IRequest = { }, }, salt: 'main-salt', + payeeDelegate: undefined, + payerDelegate: undefined, + paymentInfo: undefined, + refundInfo: undefined, + receivedPaymentAmount: '0', + receivedRefundAmount: '0', + sentPaymentAmount: '0', + sentRefundAmount: '0', }, version: '0', },