From 3d055400b9963f6ce7d4e66387f3e3980f8acf5c Mon Sep 17 00:00:00 2001 From: yomarion Date: Wed, 22 Mar 2023 14:01:12 +0100 Subject: [PATCH 1/5] wip --- .../currency/src/chains/ChainsAbstract.ts | 26 +++++++++++++++++-- .../src/btc/address-based.ts | 4 +-- packages/request-client.js/test/index.test.ts | 2 +- packages/types/src/extension-types.ts | 4 +-- packages/types/src/payment-types.ts | 15 +++++------ 5 files changed, 35 insertions(+), 16 deletions(-) diff --git a/packages/currency/src/chains/ChainsAbstract.ts b/packages/currency/src/chains/ChainsAbstract.ts index ecc96017ef..7d01aefa1c 100644 --- a/packages/currency/src/chains/ChainsAbstract.ts +++ b/packages/currency/src/chains/ChainsAbstract.ts @@ -42,8 +42,14 @@ export abstract class ChainsAbstract< * Throws in the case it's not supported. */ public assertChainSupported(chainName?: string): asserts chainName is CHAIN_NAME { - if (!chainName || !(this.chainNames as string[]).includes(chainName)) - throw new Error(`Unsupported chain ${chainName}`); + if (!this.isChainSupported(chainName)) throw new Error(`Unsupported chain ${chainName}`); + } + + /** + * Check if chainName lives amongst the list of supported chains by this chain type. + */ + public isChainSupported(chainName?: string): boolean { + return !!chainName && (this.chainNames as string[]).includes(chainName); } /** @@ -66,4 +72,20 @@ export abstract class ChainsAbstract< public isTestnet(chainName: CHAIN_NAME): boolean { return Boolean(this.chains[chainName].testnet); } + + /** + * @returns true if both network have the same ID or same name + */ + public isNetworkAlias = (network1: string, network2: string): boolean => { + this.assertChainSupported(network1); + this.assertChainSupported(network2); + return this.isSameChain(network1, network2); + }; + + /** + * @returns true if both chains have the same ID or same name + */ + public isSameChain = (chain1: CHAIN_NAME, chain2: CHAIN_NAME): boolean => { + return chain1 === chain2 || this.getChainId(chain1) === this.getChainId(chain2); + }; } diff --git a/packages/payment-detection/src/btc/address-based.ts b/packages/payment-detection/src/btc/address-based.ts index 846684e8ae..007cb7e9d7 100644 --- a/packages/payment-detection/src/btc/address-based.ts +++ b/packages/payment-detection/src/btc/address-based.ts @@ -7,7 +7,7 @@ import { PaymentDetectorBase } from '../payment-detector-base'; */ export abstract class BtcAddressBasedDetector extends PaymentDetectorBase< ExtensionTypes.PnAddressBased.IAddressBased, - PaymentTypes.IBTCPaymentEventParameters + PaymentTypes.GenericEventParameters > { /** * @param extension The advanced logic payment network extensions @@ -74,7 +74,7 @@ export abstract class BtcAddressBasedDetector extends PaymentDetectorBase< */ protected async getEvents( request: RequestLogicTypes.IRequest, - ): Promise> { + ): Promise> { const { paymentAddress, refundAddress } = this.getPaymentExtension(request).values; this.checkRequiredParameter(paymentAddress, 'paymentAddress'); diff --git a/packages/request-client.js/test/index.test.ts b/packages/request-client.js/test/index.test.ts index e5d334ac58..47349ad375 100644 --- a/packages/request-client.js/test/index.test.ts +++ b/packages/request-client.js/test/index.test.ts @@ -81,7 +81,7 @@ const requestParameters: RequestLogicTypes.ICreateParameters = { const mockBTCProvider = { getAddressBalanceWithEvents: (): Promise< - PaymentTypes.IBalanceWithEvents + PaymentTypes.IBalanceWithEvents > => { return Promise.resolve({ balance: '666743', diff --git a/packages/types/src/extension-types.ts b/packages/types/src/extension-types.ts index b2345a80db..5331df4e34 100644 --- a/packages/types/src/extension-types.ts +++ b/packages/types/src/extension-types.ts @@ -23,13 +23,13 @@ export { }; /** Extension interface is extended by the extensions implementation */ -export interface IExtension { +export interface IExtension { extensionType: TYPE; extensionId: ID; currentVersion: string; applyActionToExtension: ( extensionsState: RequestLogic.IExtensionStates, - extensionAction: IAction, + extensionAction: IAction, requestState: RequestLogic.IRequest, actionSigner: Identity.IIdentity, timestamp: number, diff --git a/packages/types/src/payment-types.ts b/packages/types/src/payment-types.ts index 5cd91e44d1..067f29369a 100644 --- a/packages/types/src/payment-types.ts +++ b/packages/types/src/payment-types.ts @@ -6,7 +6,9 @@ import { ICreationParameters as ICreationParametersAnyToAny } from './extensions import { EvmChainName } from './currency-types'; /** Interface for payment network extensions state and interpretation */ -export interface IPaymentNetwork { +export interface IPaymentNetwork< + TEventParameters extends GenericEventParameters = GenericEventParameters, +> { paymentNetworkId: ExtensionTypes.PAYMENT_NETWORK_ID; extension: ExtensionTypes.IExtension; createExtensionsDataForCreation: (paymentNetworkCreationParameters: any) => Promise; @@ -274,18 +276,13 @@ export interface IBitcoinDetectionProvider { bitcoinNetworkId: number, address: string, eventName: EVENTS_NAMES, - ) => Promise>; + ) => Promise>; } -/** Parameters for events of BTC payments */ -export interface IBTCPaymentEventParameters { - block?: number; - txHash?: string; -} /** BTC Payment Network Event */ -export type BTCPaymentNetworkEvent = IPaymentNetworkEvent; +export type BTCPaymentNetworkEvent = IPaymentNetworkEvent; /** BTC BalanceWithEvents */ -export type BTCBalanceWithEvents = IBalanceWithEvents; +export type BTCBalanceWithEvents = IBalanceWithEvents; /** Parameters for escrow events from EscrowERC20 contract state changes */ export interface IEscrowEventParameters extends Required { From 386a05f2387745f8575712d939bbf7391dba4490 Mon Sep 17 00:00:00 2001 From: yomarion Date: Thu, 23 Mar 2023 07:53:49 +0100 Subject: [PATCH 2/5] chore: reduce irrelevant strong typing in tests --- .../integration-test/test/scheduled/erc20-fee-proxy.test.ts | 1 - .../request-client.js/test/api/content-data-manager.test.ts | 6 ++---- packages/request-logic/test/index.test.ts | 6 ++---- packages/request-logic/test/unit/requestLogicCore.test.ts | 6 ++---- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/packages/integration-test/test/scheduled/erc20-fee-proxy.test.ts b/packages/integration-test/test/scheduled/erc20-fee-proxy.test.ts index 434fe1c0cc..83f5081f94 100644 --- a/packages/integration-test/test/scheduled/erc20-fee-proxy.test.ts +++ b/packages/integration-test/test/scheduled/erc20-fee-proxy.test.ts @@ -15,7 +15,6 @@ import { import { createMockErc20FeeRequest } from '../utils'; const erc20FeeProxy = new Erc20PaymentNetwork.ERC20FeeProxyPaymentDetector({ - // FIXME: the mocked advanced logic is address based advancedLogic: mockAdvancedLogic, currencyManager: CurrencyManager.getDefault(), getSubgraphClient: jest.fn(), diff --git a/packages/request-client.js/test/api/content-data-manager.test.ts b/packages/request-client.js/test/api/content-data-manager.test.ts index 2fd94bc5bc..5d8b4f3418 100644 --- a/packages/request-client.js/test/api/content-data-manager.test.ts +++ b/packages/request-client.js/test/api/content-data-manager.test.ts @@ -5,14 +5,12 @@ import ContentDataExtension from '../../src/api/content-data-extension'; import * as TestData from './data-for-content-data-extension'; import { IAdvancedLogicExtensions } from '@requestnetwork/types/src/advanced-logic-types'; -const mockAdvancedLogic: AdvancedLogicTypes.IAdvancedLogic = { +const mockAdvancedLogic = { applyActionToExtensions: jest.fn(), - getNativeTokenExtensionForNetwork: jest.fn(), - getAnyToNativeTokenExtensionForNetwork: jest.fn(), extensions: { contentData: { createCreationAction: jest.fn() }, } as any as IAdvancedLogicExtensions, -}; +} as any as AdvancedLogicTypes.IAdvancedLogic; let contentDataExtension: ContentDataExtension; diff --git a/packages/request-logic/test/index.test.ts b/packages/request-logic/test/index.test.ts index d0b3cbd0dc..903eafa9f6 100644 --- a/packages/request-logic/test/index.test.ts +++ b/packages/request-logic/test/index.test.ts @@ -37,12 +37,10 @@ const fakeMetaTransactionManager = { }; let fakeTransactionManager: TransactionTypes.ITransactionManager; -const fakeAdvancedLogicBase: AdvancedLogicTypes.IAdvancedLogic = { - getAnyToNativeTokenExtensionForNetwork: jest.fn(), - getNativeTokenExtensionForNetwork: jest.fn(), +const fakeAdvancedLogicBase = { applyActionToExtensions: jest.fn(), extensions: {} as AdvancedLogicTypes.IAdvancedLogicExtensions, -}; +} as any as AdvancedLogicTypes.IAdvancedLogic; /* eslint-disable @typescript-eslint/no-unused-expressions */ describe('index', () => { diff --git a/packages/request-logic/test/unit/requestLogicCore.test.ts b/packages/request-logic/test/unit/requestLogicCore.test.ts index bb85cfcf68..3728b27daf 100644 --- a/packages/request-logic/test/unit/requestLogicCore.test.ts +++ b/packages/request-logic/test/unit/requestLogicCore.test.ts @@ -15,14 +15,12 @@ import * as TestData from './utils/test-data-generator'; import RequestLogicCore from '../../src/requestLogicCore'; -const fakeAdvancedLogic: AdvancedLogicTypes.IAdvancedLogic = { - getAnyToNativeTokenExtensionForNetwork: jest.fn(), - getNativeTokenExtensionForNetwork: jest.fn(), +const fakeAdvancedLogic = { applyActionToExtensions: ( extensionStates: RequestLogicTypes.IExtensionStates, ): RequestLogicTypes.IExtensionStates => extensionStates, extensions: {} as AdvancedLogicTypes.IAdvancedLogicExtensions, -}; +} as any as AdvancedLogicTypes.IAdvancedLogic; /* eslint-disable @typescript-eslint/no-unused-expressions */ describe('requestLogicCore', () => { From ee91ad77c4b69206ea81630c28ece87a3273d788 Mon Sep 17 00:00:00 2001 From: yomarion Date: Thu, 23 Mar 2023 08:19:13 +0100 Subject: [PATCH 3/5] revert ChainsAbstract for clarity --- .../currency/src/chains/ChainsAbstract.ts | 26 ++----------------- 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/packages/currency/src/chains/ChainsAbstract.ts b/packages/currency/src/chains/ChainsAbstract.ts index 7d01aefa1c..ecc96017ef 100644 --- a/packages/currency/src/chains/ChainsAbstract.ts +++ b/packages/currency/src/chains/ChainsAbstract.ts @@ -42,14 +42,8 @@ export abstract class ChainsAbstract< * Throws in the case it's not supported. */ public assertChainSupported(chainName?: string): asserts chainName is CHAIN_NAME { - if (!this.isChainSupported(chainName)) throw new Error(`Unsupported chain ${chainName}`); - } - - /** - * Check if chainName lives amongst the list of supported chains by this chain type. - */ - public isChainSupported(chainName?: string): boolean { - return !!chainName && (this.chainNames as string[]).includes(chainName); + if (!chainName || !(this.chainNames as string[]).includes(chainName)) + throw new Error(`Unsupported chain ${chainName}`); } /** @@ -72,20 +66,4 @@ export abstract class ChainsAbstract< public isTestnet(chainName: CHAIN_NAME): boolean { return Boolean(this.chains[chainName].testnet); } - - /** - * @returns true if both network have the same ID or same name - */ - public isNetworkAlias = (network1: string, network2: string): boolean => { - this.assertChainSupported(network1); - this.assertChainSupported(network2); - return this.isSameChain(network1, network2); - }; - - /** - * @returns true if both chains have the same ID or same name - */ - public isSameChain = (chain1: CHAIN_NAME, chain2: CHAIN_NAME): boolean => { - return chain1 === chain2 || this.getChainId(chain1) === this.getChainId(chain2); - }; } From 24ea0c64aa579655850ecd10074f4dd930014fb5 Mon Sep 17 00:00:00 2001 From: yomarion Date: Thu, 23 Mar 2023 08:51:54 +0100 Subject: [PATCH 4/5] doc: clarify GenericPaymentEvent --- packages/types/src/payment-types.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/types/src/payment-types.ts b/packages/types/src/payment-types.ts index 067f29369a..d44c31b996 100644 --- a/packages/types/src/payment-types.ts +++ b/packages/types/src/payment-types.ts @@ -6,9 +6,7 @@ import { ICreationParameters as ICreationParametersAnyToAny } from './extensions import { EvmChainName } from './currency-types'; /** Interface for payment network extensions state and interpretation */ -export interface IPaymentNetwork< - TEventParameters extends GenericEventParameters = GenericEventParameters, -> { +export interface IPaymentNetwork { paymentNetworkId: ExtensionTypes.PAYMENT_NETWORK_ID; extension: ExtensionTypes.IExtension; createExtensionsDataForCreation: (paymentNetworkCreationParameters: any) => Promise; @@ -194,7 +192,7 @@ export type ERC777BalanceWithEvents = IBalanceWithEvents Date: Thu, 23 Mar 2023 08:54:30 +0100 Subject: [PATCH 5/5] doc: transaction-manager README fix --- packages/transaction-manager/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/transaction-manager/README.md b/packages/transaction-manager/README.md index 3201133ec1..adc164e9cc 100644 --- a/packages/transaction-manager/README.md +++ b/packages/transaction-manager/README.md @@ -17,7 +17,7 @@ npm install @requestnetwork/transaction-manager In order to decrypt encrypted transactions, you must provide a decryption provider. You can see the specification of decryption provider [here](./specs/decryption-provider.md). -An example of implementation of a decryption provider is available in the package: [epk-decryption](../../epk-decryption) +An example of implementation of a decryption provider is available in the package: [epk-decryption](../epk-decryption/) ```javascript import EthereumPrivateKeyDecryptionProvider from '@requestnetwork/epk-decryption';