From de49a4f0d2b7fa00ab28559af965f7ba28380f06 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Wed, 27 Nov 2019 14:38:09 +0000 Subject: [PATCH 1/3] [#361] Added networkType to Http.ts --- src/infrastructure/AccountHttp.ts | 9 +++--- src/infrastructure/BlockHttp.ts | 9 +++--- src/infrastructure/ChainHttp.ts | 2 +- src/infrastructure/DiagnosticHttp.ts | 2 +- src/infrastructure/Http.ts | 34 +++++++++++--------- src/infrastructure/MetadataHttp.ts | 9 +++--- src/infrastructure/MosaicHttp.ts | 9 +++--- src/infrastructure/MultisigHttp.ts | 9 +++--- src/infrastructure/NamespaceHttp.ts | 9 +++--- src/infrastructure/NetworkHttp.ts | 4 +-- src/infrastructure/NodeHttp.ts | 2 +- src/infrastructure/ReceiptHttp.ts | 9 +++--- src/infrastructure/RestrictionAccountHttp.ts | 6 ++-- src/infrastructure/RestrictionMosaicHttp.ts | 6 ++-- src/infrastructure/TransactionHttp.ts | 13 ++++---- 15 files changed, 65 insertions(+), 67 deletions(-) diff --git a/src/infrastructure/AccountHttp.ts b/src/infrastructure/AccountHttp.ts index c8df976268..d2c320504e 100644 --- a/src/infrastructure/AccountHttp.ts +++ b/src/infrastructure/AccountHttp.ts @@ -19,6 +19,7 @@ import {catchError, map} from 'rxjs/operators'; import {AccountInfo} from '../model/account/AccountInfo'; import { ActivityBucket } from '../model/account/ActivityBucket'; import {Address} from '../model/account/Address'; +import { NetworkType } from '../model/blockchain/NetworkType'; import {Mosaic} from '../model/mosaic/Mosaic'; import {MosaicId} from '../model/mosaic/MosaicId'; import {AggregateTransaction} from '../model/transaction/AggregateTransaction'; @@ -28,7 +29,6 @@ import {AccountRepository} from './AccountRepository'; import { AccountInfoDTO, AccountRoutesApi } from './api'; import {Http} from './Http'; -import {NetworkHttp} from './NetworkHttp'; import {QueryParams} from './QueryParams'; import {CreateTransactionFromDTO} from './transaction/CreateTransactionFromDTO'; @@ -47,11 +47,10 @@ export class AccountHttp extends Http implements AccountRepository { /** * Constructor * @param url - * @param networkHttp + * @param networkType */ - constructor(url: string, networkHttp?: NetworkHttp) { - networkHttp = networkHttp == null ? new NetworkHttp(url) : networkHttp; - super(networkHttp); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.accountRoutesApi = new AccountRoutesApi(url); } diff --git a/src/infrastructure/BlockHttp.ts b/src/infrastructure/BlockHttp.ts index c9293e137d..76ab8832bc 100644 --- a/src/infrastructure/BlockHttp.ts +++ b/src/infrastructure/BlockHttp.ts @@ -20,12 +20,12 @@ import {PublicAccount} from '../model/account/PublicAccount'; import {BlockInfo} from '../model/blockchain/BlockInfo'; import { MerklePathItem } from '../model/blockchain/MerklePathItem'; import { MerkleProofInfo } from '../model/blockchain/MerkleProofInfo'; +import { NetworkType } from '../model/blockchain/NetworkType'; import {Transaction} from '../model/transaction/Transaction'; import {UInt64} from '../model/UInt64'; import { BlockRoutesApi } from './api'; import {BlockRepository} from './BlockRepository'; import {Http} from './Http'; -import { NetworkHttp } from './NetworkHttp'; import {QueryParams} from './QueryParams'; import {CreateTransactionFromDTO, extractBeneficiary} from './transaction/CreateTransactionFromDTO'; @@ -58,11 +58,10 @@ export class BlockHttp extends Http implements BlockRepository { /** * Constructor * @param url - * @param networkHttp + * @param networkType */ - constructor(url: string, networkHttp?: NetworkHttp) { - networkHttp = networkHttp == null ? new NetworkHttp(url) : networkHttp; - super(networkHttp); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.blockRoutesApi = new BlockRoutesApi(url); } diff --git a/src/infrastructure/ChainHttp.ts b/src/infrastructure/ChainHttp.ts index e07c9a23d0..2246f491ca 100644 --- a/src/infrastructure/ChainHttp.ts +++ b/src/infrastructure/ChainHttp.ts @@ -39,7 +39,7 @@ export class ChainHttp extends Http implements ChainRepository { * @param url */ constructor(url: string) { - super(); + super(url); this.chainRoutesApi = new ChainRoutesApi(url); } diff --git a/src/infrastructure/DiagnosticHttp.ts b/src/infrastructure/DiagnosticHttp.ts index 212aa87547..300c507ca1 100644 --- a/src/infrastructure/DiagnosticHttp.ts +++ b/src/infrastructure/DiagnosticHttp.ts @@ -39,7 +39,7 @@ export class DiagnosticHttp extends Http implements DiagnosticRepository { * @param url */ constructor(url: string) { - super(); + super(url); this.diagnosticRoutesApi = new DiagnosticRoutesApi(url); } diff --git a/src/infrastructure/Http.ts b/src/infrastructure/Http.ts index 38c5726d3d..08e7574a37 100644 --- a/src/infrastructure/Http.ts +++ b/src/infrastructure/Http.ts @@ -14,36 +14,40 @@ * limitations under the License. */ -import {Observable, of as observableOf} from 'rxjs'; -import {map} from 'rxjs/operators'; +// tslint:disable-next-line: ordered-imports +import {from as observableFrom, Observable, of as observableOf, throwError} from 'rxjs'; +import {catchError, map} from 'rxjs/operators'; import {NetworkType} from '../model/blockchain/NetworkType'; -import {NetworkHttp} from './NetworkHttp'; +import { NodeRoutesApi } from './api/apis'; import { QueryParams } from './QueryParams'; /** * Http extended by all http services */ export abstract class Http { - private networkHttp: NetworkHttp; - private networkType: NetworkType; + protected readonly url: string; + protected networkType: NetworkType; /** * Constructor - * @param url - * @param networkHttp + * @param url Base catapult-rest url + * @param networkType */ - constructor(networkHttp?: NetworkHttp) { - if (networkHttp) { - this.networkHttp = networkHttp; + constructor(url: string, networkType?: NetworkType) { + if (networkType) { + this.networkType = networkType; } + this.url = url; } getNetworkTypeObservable(): Observable { let networkTypeResolve; - if (this.networkType == null) { - networkTypeResolve = this.networkHttp.getNetworkType().pipe(map((networkType) => { - this.networkType = networkType; - return networkType; - })); + if (!this.networkType) { + networkTypeResolve = observableFrom(new NodeRoutesApi(this.url).getNodeInfo()).pipe( + map(({body}) => { + return body.networkIdentifier; + }), + catchError((error) => throwError(this.errorHandling(error))), + ); } else { networkTypeResolve = observableOf(this.networkType); } diff --git a/src/infrastructure/MetadataHttp.ts b/src/infrastructure/MetadataHttp.ts index 25a73fbb1a..5d8d863fa7 100644 --- a/src/infrastructure/MetadataHttp.ts +++ b/src/infrastructure/MetadataHttp.ts @@ -18,6 +18,7 @@ import {from as observableFrom, Observable, throwError} from 'rxjs'; import {catchError, map} from 'rxjs/operators'; import { Convert } from '../core/format/Convert'; import { Address } from '../model/account/Address'; +import { NetworkType } from '../model/blockchain/NetworkType'; import { Metadata } from '../model/metadata/Metadata'; import { MetadataEntry } from '../model/metadata/MetadataEntry'; import { MetadataType } from '../model/metadata/MetadataType'; @@ -27,7 +28,6 @@ import {UInt64} from '../model/UInt64'; import { MetadataDTO, MetadataRoutesApi } from './api'; import {Http} from './Http'; import { MetadataRepository } from './MetadataRepository'; -import {NetworkHttp} from './NetworkHttp'; import { QueryParams } from './QueryParams'; /** @@ -45,11 +45,10 @@ export class MetadataHttp extends Http implements MetadataRepository { /** * Constructor * @param url - * @param networkHttp + * @param networkType */ - constructor(url: string, networkHttp?: NetworkHttp) { - networkHttp = networkHttp == null ? new NetworkHttp(url) : networkHttp; - super(networkHttp); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.metadataRoutesApi = new MetadataRoutesApi(url); } diff --git a/src/infrastructure/MosaicHttp.ts b/src/infrastructure/MosaicHttp.ts index 81474ca627..6be9b42d3c 100644 --- a/src/infrastructure/MosaicHttp.ts +++ b/src/infrastructure/MosaicHttp.ts @@ -18,6 +18,7 @@ import {from as observableFrom, Observable, throwError} from 'rxjs'; import {catchError, map, mergeMap} from 'rxjs/operators'; import { Address } from '../model/account/Address'; import {PublicAccount} from '../model/account/PublicAccount'; +import { NetworkType } from '../model/blockchain/NetworkType'; import {MosaicFlags} from '../model/mosaic/MosaicFlags'; import {MosaicId} from '../model/mosaic/MosaicId'; import {MosaicInfo} from '../model/mosaic/MosaicInfo'; @@ -25,7 +26,6 @@ import {UInt64} from '../model/UInt64'; import { MosaicRoutesApi } from './api'; import {Http} from './Http'; import {MosaicRepository} from './MosaicRepository'; -import {NetworkHttp} from './NetworkHttp'; /** * Mosaic http repository. @@ -42,11 +42,10 @@ export class MosaicHttp extends Http implements MosaicRepository { /** * Constructor * @param url - * @param networkHttp + * @param networkType */ - constructor(url: string, networkHttp?: NetworkHttp) { - networkHttp = networkHttp == null ? new NetworkHttp(url) : networkHttp; - super(networkHttp); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.mosaicRoutesApi = new MosaicRoutesApi(url); } diff --git a/src/infrastructure/MultisigHttp.ts b/src/infrastructure/MultisigHttp.ts index c705dd1f96..b379ce14e9 100644 --- a/src/infrastructure/MultisigHttp.ts +++ b/src/infrastructure/MultisigHttp.ts @@ -20,10 +20,10 @@ import {Address} from '../model/account/Address'; import {MultisigAccountGraphInfo} from '../model/account/MultisigAccountGraphInfo'; import {MultisigAccountInfo} from '../model/account/MultisigAccountInfo'; import {PublicAccount} from '../model/account/PublicAccount'; +import { NetworkType } from '../model/blockchain/NetworkType'; import { MultisigRoutesApi } from './api/multisigRoutesApi'; import {Http} from './Http'; import { MultisigRepository } from './MultisigRepository'; -import {NetworkHttp} from './NetworkHttp'; /** * Multisig http repository. @@ -40,11 +40,10 @@ export class MultisigHttp extends Http implements MultisigRepository { /** * Constructor * @param url - * @param networkHttp + * @param networkType */ - constructor(url: string, networkHttp?: NetworkHttp) { - networkHttp = networkHttp == null ? new NetworkHttp(url) : networkHttp; - super(networkHttp); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.multisigRoutesApi = new MultisigRoutesApi(url); } diff --git a/src/infrastructure/NamespaceHttp.ts b/src/infrastructure/NamespaceHttp.ts index a0e3ca4755..61a734fb1e 100644 --- a/src/infrastructure/NamespaceHttp.ts +++ b/src/infrastructure/NamespaceHttp.ts @@ -19,6 +19,7 @@ import {Convert as convert, RawAddress as AddressLibrary} from '../core/format'; import { AccountNames } from '../model/account/AccountNames'; import {Address} from '../model/account/Address'; import {PublicAccount} from '../model/account/PublicAccount'; +import { NetworkType } from '../model/blockchain/NetworkType'; import {MosaicId} from '../model/mosaic/MosaicId'; import { MosaicNames } from '../model/mosaic/MosaicNames'; import {AddressAlias} from '../model/namespace/AddressAlias'; @@ -33,7 +34,6 @@ import {UInt64} from '../model/UInt64'; import { NamespaceRoutesApi } from './api'; import {Http} from './Http'; import {NamespaceRepository} from './NamespaceRepository'; -import {NetworkHttp} from './NetworkHttp'; import {QueryParams} from './QueryParams'; /** @@ -51,11 +51,10 @@ export class NamespaceHttp extends Http implements NamespaceRepository { /** * Constructor * @param url - * @param networkHttp + * @param networkType */ - constructor(url: string, networkHttp?: NetworkHttp) { - networkHttp = networkHttp == null ? new NetworkHttp(url) : networkHttp; - super(networkHttp); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.namespaceRoutesApi = new NamespaceRoutesApi(url); } diff --git a/src/infrastructure/NetworkHttp.ts b/src/infrastructure/NetworkHttp.ts index cc5a76e823..840b569cd1 100644 --- a/src/infrastructure/NetworkHttp.ts +++ b/src/infrastructure/NetworkHttp.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { ClientResponse } from 'http'; import {from as observableFrom, Observable, throwError} from 'rxjs'; import {catchError, map} from 'rxjs/operators'; import { NetworkName } from '../model/blockchain/NetworkName'; @@ -22,7 +21,6 @@ import {NetworkType} from '../model/blockchain/NetworkType'; import { NodeInfo } from '../model/node/NodeInfo'; import { NetworkRoutesApi } from './api/apis'; import {Http} from './Http'; -import { NetworkTypeDTO } from './model/networkTypeDTO'; import {NetworkRepository} from './NetworkRepository'; import { NodeHttp } from './NodeHttp'; @@ -44,7 +42,7 @@ export class NetworkHttp extends Http implements NetworkRepository { * @param url */ constructor(url: string) { - super(); + super(url); this.nodeHttp = new NodeHttp(url); this.networkRouteApi = new NetworkRoutesApi(url); diff --git a/src/infrastructure/NodeHttp.ts b/src/infrastructure/NodeHttp.ts index af986369a0..50ab06d391 100644 --- a/src/infrastructure/NodeHttp.ts +++ b/src/infrastructure/NodeHttp.ts @@ -40,7 +40,7 @@ export class NodeHttp extends Http implements NodeRepository { * @param url */ constructor(url: string) { - super(); + super(url); this.nodeRoutesApi = new NodeRoutesApi(url); } diff --git a/src/infrastructure/ReceiptHttp.ts b/src/infrastructure/ReceiptHttp.ts index b64a61819c..c323223744 100644 --- a/src/infrastructure/ReceiptHttp.ts +++ b/src/infrastructure/ReceiptHttp.ts @@ -18,10 +18,10 @@ import {from as observableFrom, Observable, throwError} from 'rxjs'; import {catchError, map, mergeMap} from 'rxjs/operators'; import { MerklePathItem } from '../model/blockchain/MerklePathItem'; import { MerkleProofInfo } from '../model/blockchain/MerkleProofInfo'; +import { NetworkType } from '../model/blockchain/NetworkType'; import { Statement } from '../model/receipt/Statement'; import { ReceiptRoutesApi } from './api/receiptRoutesApi'; import {Http} from './Http'; -import { NetworkHttp } from './NetworkHttp'; import { CreateStatementFromDTO } from './receipt/CreateReceiptFromDTO'; import { ReceiptRepository } from './ReceiptRepository'; @@ -40,11 +40,10 @@ export class ReceiptHttp extends Http implements ReceiptRepository { /** * Constructor * @param url - * @param networkHttp + * @param networkType */ - constructor(url: string, networkHttp?: NetworkHttp) { - networkHttp = networkHttp == null ? new NetworkHttp(url) : networkHttp; - super(networkHttp); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.receiptRoutesApi = new ReceiptRoutesApi(url); } diff --git a/src/infrastructure/RestrictionAccountHttp.ts b/src/infrastructure/RestrictionAccountHttp.ts index 8caaba8122..2e46d016ce 100644 --- a/src/infrastructure/RestrictionAccountHttp.ts +++ b/src/infrastructure/RestrictionAccountHttp.ts @@ -18,6 +18,7 @@ import {from as observableFrom, Observable, throwError} from 'rxjs'; import {catchError, map} from 'rxjs/operators'; import { DtoMapping } from '../core/utils/DtoMapping'; import { Address } from '../model/account/Address'; +import { NetworkType } from '../model/blockchain/NetworkType'; import { AccountRestriction } from '../model/restriction/AccountRestriction'; import { AccountRestrictions } from '../model/restriction/AccountRestrictions'; import { RestrictionAccountRoutesApi } from './api/restrictionAccountRoutesApi'; @@ -38,9 +39,10 @@ export class RestrictionAccountHttp extends Http implements RestrictionAccountRe /** * Constructor * @param url + * @param networkType */ - constructor(url: string) { - super(); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.restrictionAccountRoutesApi = new RestrictionAccountRoutesApi(url); } diff --git a/src/infrastructure/RestrictionMosaicHttp.ts b/src/infrastructure/RestrictionMosaicHttp.ts index f00587e024..3ab891e78d 100644 --- a/src/infrastructure/RestrictionMosaicHttp.ts +++ b/src/infrastructure/RestrictionMosaicHttp.ts @@ -17,6 +17,7 @@ import {from as observableFrom, Observable, throwError} from 'rxjs'; import {catchError, map} from 'rxjs/operators'; import { Address } from '../model/account/Address'; +import { NetworkType } from '../model/blockchain/NetworkType'; import { MosaicId } from '../model/mosaic/MosaicId'; import { MosaicAddressRestriction } from '../model/restriction/MosaicAddressRestriction'; import { MosaicGlobalRestriction } from '../model/restriction/MosaicGlobalRestriction'; @@ -39,9 +40,10 @@ export class RestrictionMosaicHttp extends Http implements RestrictionMosaicRepo /** * Constructor * @param url + * @param networkType */ - constructor(url: string) { - super(); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.restrictionMosaicRoutesApi = new RestrictionMosaicRoutesApi(url); } diff --git a/src/infrastructure/TransactionHttp.ts b/src/infrastructure/TransactionHttp.ts index c65aaac15d..e58c8fe9be 100644 --- a/src/infrastructure/TransactionHttp.ts +++ b/src/infrastructure/TransactionHttp.ts @@ -19,6 +19,7 @@ import * as requestPromise from 'request-promise-native'; import {from as observableFrom, Observable, throwError} from 'rxjs'; import {catchError, map, mergeMap} from 'rxjs/operators'; import {PublicAccount} from '../model/account/PublicAccount'; +import { NetworkType } from '../model/blockchain/NetworkType'; import {CosignatureSignedTransaction} from '../model/transaction/CosignatureSignedTransaction'; import {Deadline} from '../model/transaction/Deadline'; import {SignedTransaction} from '../model/transaction/SignedTransaction'; @@ -29,11 +30,8 @@ import {TransactionInfo} from '../model/transaction/TransactionInfo'; import {TransactionStatus} from '../model/transaction/TransactionStatus'; import {TransactionType} from '../model/transaction/TransactionType'; import {UInt64} from '../model/UInt64'; -import { AnnounceTransactionInfoDTO, - BlockInfoDTO, BlockRoutesApi, - TransactionInfoDTO, - TransactionRoutesApi, - TransactionStatusDTO } from './api'; +import { BlockInfoDTO, BlockRoutesApi, + TransactionRoutesApi } from './api'; import {Http} from './Http'; import {CreateTransactionFromDTO} from './transaction/CreateTransactionFromDTO'; import {TransactionRepository} from './TransactionRepository'; @@ -59,9 +57,10 @@ export class TransactionHttp extends Http implements TransactionRepository { /** * Constructor * @param url + * @param networkType */ - constructor(private readonly url: string) { - super(); + constructor(url: string, networkType?: NetworkType) { + super(url, networkType); this.transactionRoutesApi = new TransactionRoutesApi(url); this.blockRoutesApi = new BlockRoutesApi(url); } From ca1102d60c9813636b04fff9ecdba5cc327dd0ad Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Wed, 27 Nov 2019 14:41:20 +0000 Subject: [PATCH 2/3] Added networkType to namespaceHttp e2e tests --- e2e/infrastructure/NamespaceHttp.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/infrastructure/NamespaceHttp.spec.ts b/e2e/infrastructure/NamespaceHttp.spec.ts index f6e7e6898e..4704173af4 100644 --- a/e2e/infrastructure/NamespaceHttp.spec.ts +++ b/e2e/infrastructure/NamespaceHttp.spec.ts @@ -45,7 +45,7 @@ describe('NamespaceHttp', () => { const json = JSON.parse(data); config = json; account = Account.createFromPrivateKey(json.testAccount.privateKey, NetworkType.MIJIN_TEST); - namespaceHttp = new NamespaceHttp(json.apiUrl); + namespaceHttp = new NamespaceHttp(json.apiUrl, NetworkType.MIJIN_TEST); transactionHttp = new TransactionHttp(json.apiUrl); generationHash = json.generationHash; done(); From 24a5690eb60969aa66dd3d7a43ad8c26e97bda09 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Mon, 2 Dec 2019 13:48:19 +0000 Subject: [PATCH 3/3] set private var networkType in getter --- src/infrastructure/Http.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/infrastructure/Http.ts b/src/infrastructure/Http.ts index 08e7574a37..d9654de2c9 100644 --- a/src/infrastructure/Http.ts +++ b/src/infrastructure/Http.ts @@ -44,6 +44,7 @@ export abstract class Http { if (!this.networkType) { networkTypeResolve = observableFrom(new NodeRoutesApi(this.url).getNodeInfo()).pipe( map(({body}) => { + this.networkType = body.networkIdentifier; return body.networkIdentifier; }), catchError((error) => throwError(this.errorHandling(error))),