diff --git a/packages/request-logic/src/request-logic.ts b/packages/request-logic/src/request-logic.ts index fd810ef5cf..a3736d3ff3 100644 --- a/packages/request-logic/src/request-logic.ts +++ b/packages/request-logic/src/request-logic.ts @@ -53,30 +53,7 @@ export default class RequestLogic implements RequestLogicTypes.IRequestLogic { // Validate the action, the apply will throw in case of error RequestLogicCore.applyActionToRequest(null, action, Date.now(), this.advancedLogic); - const resultPersistTx = await this.transactionManager.persistTransaction( - JSON.stringify(action), - requestId, - hashedTopics, - ); - - const result = Object.assign(new EventEmitter(), { - meta: { transactionManagerMeta: resultPersistTx.meta }, - result: { requestId }, - }); - - // When receive the confirmation from transaction manager propagate it - resultPersistTx - .on('confirmed', (resultPersistTxConfirmed: TransactionTypes.IReturnPersistTransaction) => { - result.emit('confirmed', { - meta: { transactionManagerMeta: resultPersistTxConfirmed.meta }, - result: { requestId }, - }); - }) - .on('error', (error) => { - result.emit('error', error); - }); - - return result; + return this.persistTransaction(requestId, action, { requestId }, hashedTopics); } /** @@ -110,31 +87,13 @@ export default class RequestLogic implements RequestLogicTypes.IRequestLogic { // Validate the action, the apply will throw in case of error RequestLogicCore.applyActionToRequest(null, action, Date.now(), this.advancedLogic); - const resultPersistTx = await this.transactionManager.persistTransaction( - JSON.stringify(action), + return this.persistTransaction( requestId, + action, + { requestId }, hashedTopics, encryptionParams, ); - - const result = Object.assign(new EventEmitter(), { - meta: { transactionManagerMeta: resultPersistTx.meta }, - result: { requestId }, - }); - - // When receive the confirmation from transaction manager propagate it - resultPersistTx - .on('confirmed', (resultPersistTxConfirmed: TransactionTypes.IReturnPersistTransaction) => { - result.emit('confirmed', { - meta: { transactionManagerMeta: resultPersistTxConfirmed.meta }, - result: { requestId }, - }); - }) - .on('error', (error) => { - result.emit('error', error); - }); - - return result; } /** @@ -192,27 +151,7 @@ export default class RequestLogic implements RequestLogicTypes.IRequestLogic { await this.validateAction(requestId, action); } - const resultPersistTx = await this.transactionManager.persistTransaction( - JSON.stringify(action), - requestId, - ); - - const result = Object.assign(new EventEmitter(), { - meta: { transactionManagerMeta: resultPersistTx.meta }, - }); - - // When receive the confirmation from transaction manager propagate it - resultPersistTx - .on('confirmed', (resultPersistTxConfirmed: TransactionTypes.IReturnPersistTransaction) => { - result.emit('confirmed', { - meta: { transactionManagerMeta: resultPersistTxConfirmed.meta }, - }); - }) - .on('error', (error) => { - result.emit('error', error); - }); - - return result; + return this.persistTransaction(requestId, action, undefined); } /** @@ -242,27 +181,7 @@ export default class RequestLogic implements RequestLogicTypes.IRequestLogic { await this.validateAction(requestId, action); } - const resultPersistTx = await this.transactionManager.persistTransaction( - JSON.stringify(action), - requestId, - ); - - const result = Object.assign(new EventEmitter(), { - meta: { transactionManagerMeta: resultPersistTx.meta }, - }); - - // When receive the confirmation from transaction manager propagate it - resultPersistTx - .on('confirmed', (resultPersistTxConfirmed: TransactionTypes.IReturnPersistTransaction) => { - result.emit('confirmed', { - meta: { transactionManagerMeta: resultPersistTxConfirmed.meta }, - }); - }) - .on('error', (error) => { - result.emit('error', error); - }); - - return result; + return this.persistTransaction(requestId, action, undefined); } /** @@ -292,27 +211,7 @@ export default class RequestLogic implements RequestLogicTypes.IRequestLogic { await this.validateAction(requestId, action); } - const resultPersistTx = await this.transactionManager.persistTransaction( - JSON.stringify(action), - requestId, - ); - - const result = Object.assign(new EventEmitter(), { - meta: { transactionManagerMeta: resultPersistTx.meta }, - }); - - // When receive the confirmation from transaction manager propagate it - resultPersistTx - .on('confirmed', (resultPersistTxConfirmed: TransactionTypes.IReturnPersistTransaction) => { - result.emit('confirmed', { - meta: { transactionManagerMeta: resultPersistTxConfirmed.meta }, - }); - }) - .on('error', (error) => { - result.emit('error', error); - }); - - return result; + return this.persistTransaction(requestId, action, undefined); } /** @@ -342,27 +241,7 @@ export default class RequestLogic implements RequestLogicTypes.IRequestLogic { await this.validateAction(requestId, action); } - const resultPersistTx = await this.transactionManager.persistTransaction( - JSON.stringify(action), - requestId, - ); - - const result = Object.assign(new EventEmitter(), { - meta: { transactionManagerMeta: resultPersistTx.meta }, - }); - - // When receive the confirmation from transaction manager propagate it - resultPersistTx - .on('confirmed', (resultPersistTxConfirmed: TransactionTypes.IReturnPersistTransaction) => { - result.emit('confirmed', { - meta: { transactionManagerMeta: resultPersistTxConfirmed.meta }, - }); - }) - .on('error', (error) => { - result.emit('error', error); - }); - - return result; + return this.persistTransaction(requestId, action, undefined); } /** @@ -394,29 +273,7 @@ export default class RequestLogic implements RequestLogicTypes.IRequestLogic { await this.validateAction(requestId, action); } - const resultPersistTx = await this.transactionManager.persistTransaction( - JSON.stringify(action), - requestId, - undefined, - encryptionParams, - ); - - const result = Object.assign(new EventEmitter(), { - meta: { transactionManagerMeta: resultPersistTx.meta }, - }); - - // When receive the confirmation from transaction manager propagate it - resultPersistTx - .on('confirmed', (resultPersistTxConfirmed: TransactionTypes.IReturnPersistTransaction) => { - result.emit('confirmed', { - meta: { transactionManagerMeta: resultPersistTxConfirmed.meta }, - }); - }) - .on('error', (error) => { - result.emit('error', error); - }); - - return result; + return this.persistTransaction(requestId, action, undefined, [], encryptionParams); } /** @@ -447,27 +304,7 @@ export default class RequestLogic implements RequestLogicTypes.IRequestLogic { await this.validateAction(requestId, action); } - const resultPersistTx = await this.transactionManager.persistTransaction( - JSON.stringify(action), - requestId, - ); - - const result = Object.assign(new EventEmitter(), { - meta: { transactionManagerMeta: resultPersistTx.meta }, - }); - - // When receive the confirmation from transaction manager propagate it - resultPersistTx - .on('confirmed', (resultPersistTxConfirmed: TransactionTypes.IReturnPersistTransaction) => { - result.emit('confirmed', { - meta: { transactionManagerMeta: resultPersistTxConfirmed.meta }, - }); - }) - .on('error', (error) => { - result.emit('error', error); - }); - - return result; + return this.persistTransaction(requestId, action, undefined); } /** @@ -940,4 +777,36 @@ export default class RequestLogic implements RequestLogicTypes.IRequestLogic { return { ignoredTransactions, keptTransactions }; } + + private async persistTransaction( + requestId: string, + action: RequestLogicTypes.IAction, + result: T, + topics: string[] = [], + encryptionParams: EncryptionTypes.IEncryptionParameters[] = [], + ) { + const resultPersistTx = await this.transactionManager.persistTransaction( + JSON.stringify(action), + requestId, + topics, + encryptionParams, + ); + + const eventEmitter = new EventEmitter(); + + // When receive the confirmation from transaction manager propagate it + resultPersistTx + .on('confirmed', (resultPersistTxConfirmed) => + eventEmitter.emit('confirmed', { + meta: { transactionManagerMeta: resultPersistTxConfirmed.meta }, + result, + }), + ) + .on('error', (error) => eventEmitter.emit('error', error)); + + return Object.assign(eventEmitter, { + meta: { transactionManagerMeta: resultPersistTx.meta }, + result, + }); + } } diff --git a/packages/request-logic/test/index.test.ts b/packages/request-logic/test/index.test.ts index 8f67b1b24d..b82c42278f 100644 --- a/packages/request-logic/test/index.test.ts +++ b/packages/request-logic/test/index.test.ts @@ -142,6 +142,7 @@ describe('index', () => { JSON.stringify(action), requestId, [], + [], ); }); @@ -166,6 +167,7 @@ describe('index', () => { MultiFormat.serialize(normalizeKeccak256Hash(TestData.payeeRaw.identity)), MultiFormat.serialize(normalizeKeccak256Hash(TestData.payerRaw.identity)), ], + [], ); }); @@ -212,6 +214,7 @@ describe('index', () => { JSON.stringify(action), requestId, [], + [], ); jest.useRealTimers(); }); @@ -478,6 +481,8 @@ describe('index', () => { expect(fakeTransactionManager.persistTransaction).toHaveBeenCalledWith( JSON.stringify(actionExpected), requestId, + [], + [], ); }); it('cannot acceptRequest without signature provider', async () => { @@ -574,6 +579,8 @@ describe('index', () => { expect(fakeTransactionManager.persistTransaction).toHaveBeenCalledWith( JSON.stringify(actionExpected), requestId, + [], + [], ); }); it('cannot cancelRequest without signature provider', async () => { @@ -675,6 +682,8 @@ describe('index', () => { expect(fakeTransactionManager.persistTransaction).toHaveBeenCalledWith( JSON.stringify(actionExpected), requestId, + [], + [], ); }); it('cannot increaseExpectedAmountRequest without signature provider', async () => { @@ -781,6 +790,8 @@ describe('index', () => { expect(fakeTransactionManager.persistTransaction).toHaveBeenCalledWith( JSON.stringify(actionExpected), requestId, + [], + [], ); }); it('cannot reduceExpectedAmountRequest without signature provider', async () => { @@ -882,7 +893,7 @@ describe('index', () => { expect(fakeTransactionManager.persistTransaction).toHaveBeenCalledWith( JSON.stringify(actionExpected), requestId, - undefined, + [], [TestData.otherIdRaw.encryptionParams], ); }); @@ -928,6 +939,8 @@ describe('index', () => { expect(fakeTransactionManager.persistTransaction).toHaveBeenCalledWith( JSON.stringify(actionExpected), requestId, + [], + [], ); }); it('cannot addExtensionsDataRequest without signature provider', async () => {