Add isVerbose flag to contract-wrappers subscribe methods
This commit is contained in:
		| @@ -7,7 +7,7 @@ import { | |||||||
|     LogWithDecodedArgs, |     LogWithDecodedArgs, | ||||||
|     RawLog, |     RawLog, | ||||||
| } from '@0xproject/types'; | } from '@0xproject/types'; | ||||||
| import { AbiDecoder, intervalUtils } from '@0xproject/utils'; | import { intervalUtils, logUtils } from '@0xproject/utils'; | ||||||
| import { Web3Wrapper } from '@0xproject/web3-wrapper'; | import { Web3Wrapper } from '@0xproject/web3-wrapper'; | ||||||
| import { Block, BlockAndLogStreamer, Log } from 'ethereumjs-blockstream'; | import { Block, BlockAndLogStreamer, Log } from 'ethereumjs-blockstream'; | ||||||
| import * as _ from 'lodash'; | import * as _ from 'lodash'; | ||||||
| @@ -46,9 +46,12 @@ export class ContractWrapper { | |||||||
|     }; |     }; | ||||||
|     private _onLogAddedSubscriptionToken: string | undefined; |     private _onLogAddedSubscriptionToken: string | undefined; | ||||||
|     private _onLogRemovedSubscriptionToken: string | undefined; |     private _onLogRemovedSubscriptionToken: string | undefined; | ||||||
|     private static _onBlockstreamError(err: Error): void { |     private static _onBlockstreamError(isVerbose: boolean, err: Error): void { | ||||||
|         // Noop on blockstream errors since they are automatically |         // Noop on blockstream errors since they are automatically | ||||||
|         // recovered from and don't cause Blockstream to exit. |         // recovered from and don't cause Blockstream to exit. | ||||||
|  |         if (isVerbose) { | ||||||
|  |             logUtils.warn(err.message); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     constructor(web3Wrapper: Web3Wrapper, networkId: number) { |     constructor(web3Wrapper: Web3Wrapper, networkId: number) { | ||||||
|         this._web3Wrapper = web3Wrapper; |         this._web3Wrapper = web3Wrapper; | ||||||
| @@ -85,10 +88,11 @@ export class ContractWrapper { | |||||||
|         indexFilterValues: IndexedFilterValues, |         indexFilterValues: IndexedFilterValues, | ||||||
|         abi: ContractAbi, |         abi: ContractAbi, | ||||||
|         callback: EventCallback<ArgsType>, |         callback: EventCallback<ArgsType>, | ||||||
|  |         isVerbose: boolean = false, | ||||||
|     ): string { |     ): string { | ||||||
|         const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi); |         const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi); | ||||||
|         if (_.isUndefined(this._blockAndLogStreamerIfExists)) { |         if (_.isUndefined(this._blockAndLogStreamerIfExists)) { | ||||||
|             this._startBlockAndLogStream(); |             this._startBlockAndLogStream(isVerbose); | ||||||
|         } |         } | ||||||
|         const filterToken = filterUtils.generateUUID(); |         const filterToken = filterUtils.generateUUID(); | ||||||
|         this._filters[filterToken] = filter; |         this._filters[filterToken] = filter; | ||||||
| @@ -159,21 +163,21 @@ export class ContractWrapper { | |||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|     private _startBlockAndLogStream(): void { |     private _startBlockAndLogStream(isVerbose: boolean): void { | ||||||
|         if (!_.isUndefined(this._blockAndLogStreamerIfExists)) { |         if (!_.isUndefined(this._blockAndLogStreamerIfExists)) { | ||||||
|             throw new Error(ContractWrappersError.SubscriptionAlreadyPresent); |             throw new Error(ContractWrappersError.SubscriptionAlreadyPresent); | ||||||
|         } |         } | ||||||
|         this._blockAndLogStreamerIfExists = new BlockAndLogStreamer( |         this._blockAndLogStreamerIfExists = new BlockAndLogStreamer( | ||||||
|             this._web3Wrapper.getBlockAsync.bind(this._web3Wrapper), |             this._web3Wrapper.getBlockAsync.bind(this._web3Wrapper), | ||||||
|             this._web3Wrapper.getLogsAsync.bind(this._web3Wrapper), |             this._web3Wrapper.getLogsAsync.bind(this._web3Wrapper), | ||||||
|             ContractWrapper._onBlockstreamError.bind(this), |             ContractWrapper._onBlockstreamError.bind(this, isVerbose), | ||||||
|         ); |         ); | ||||||
|         const catchAllLogFilter = {}; |         const catchAllLogFilter = {}; | ||||||
|         this._blockAndLogStreamerIfExists.addLogFilter(catchAllLogFilter); |         this._blockAndLogStreamerIfExists.addLogFilter(catchAllLogFilter); | ||||||
|         this._blockAndLogStreamIntervalIfExists = intervalUtils.setAsyncExcludingInterval( |         this._blockAndLogStreamIntervalIfExists = intervalUtils.setAsyncExcludingInterval( | ||||||
|             this._reconcileBlockAsync.bind(this), |             this._reconcileBlockAsync.bind(this), | ||||||
|             constants.DEFAULT_BLOCK_POLLING_INTERVAL, |             constants.DEFAULT_BLOCK_POLLING_INTERVAL, | ||||||
|             ContractWrapper._onBlockstreamError.bind(this), |             ContractWrapper._onBlockstreamError.bind(this, isVerbose), | ||||||
|         ); |         ); | ||||||
|         let isRemoved = false; |         let isRemoved = false; | ||||||
|         this._onLogAddedSubscriptionToken = this._blockAndLogStreamerIfExists.subscribeToOnLogAdded( |         this._onLogAddedSubscriptionToken = this._blockAndLogStreamerIfExists.subscribeToOnLogAdded( | ||||||
|   | |||||||
| @@ -133,6 +133,7 @@ export class EtherTokenWrapper extends ContractWrapper { | |||||||
|      * @param   indexFilterValues   An object where the keys are indexed args returned by the event and |      * @param   indexFilterValues   An object where the keys are indexed args returned by the event and | ||||||
|      *                              the value is the value you are interested in. E.g `{_owner: aUserAddressHex}` |      *                              the value is the value you are interested in. E.g `{_owner: aUserAddressHex}` | ||||||
|      * @param   callback            Callback that gets called when a log is added/removed |      * @param   callback            Callback that gets called when a log is added/removed | ||||||
|  |      * @param   isVerbose           Enable verbose subscription warnings (e.g recoverable network issues encountered) | ||||||
|      * @return Subscription token used later to unsubscribe |      * @return Subscription token used later to unsubscribe | ||||||
|      */ |      */ | ||||||
|     public subscribe<ArgsType extends EtherTokenContractEventArgs>( |     public subscribe<ArgsType extends EtherTokenContractEventArgs>( | ||||||
| @@ -140,6 +141,7 @@ export class EtherTokenWrapper extends ContractWrapper { | |||||||
|         eventName: EtherTokenEvents, |         eventName: EtherTokenEvents, | ||||||
|         indexFilterValues: IndexedFilterValues, |         indexFilterValues: IndexedFilterValues, | ||||||
|         callback: EventCallback<ArgsType>, |         callback: EventCallback<ArgsType>, | ||||||
|  |         isVerbose: boolean = false, | ||||||
|     ): string { |     ): string { | ||||||
|         assert.isETHAddressHex('etherTokenAddress', etherTokenAddress); |         assert.isETHAddressHex('etherTokenAddress', etherTokenAddress); | ||||||
|         const normalizedEtherTokenAddress = etherTokenAddress.toLowerCase(); |         const normalizedEtherTokenAddress = etherTokenAddress.toLowerCase(); | ||||||
| @@ -152,6 +154,7 @@ export class EtherTokenWrapper extends ContractWrapper { | |||||||
|             indexFilterValues, |             indexFilterValues, | ||||||
|             artifacts.EtherToken.abi, |             artifacts.EtherToken.abi, | ||||||
|             callback, |             callback, | ||||||
|  |             isVerbose, | ||||||
|         ); |         ); | ||||||
|         return subscriptionToken; |         return subscriptionToken; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -652,12 +652,14 @@ export class ExchangeWrapper extends ContractWrapper { | |||||||
|      * @param   indexFilterValues   An object where the keys are indexed args returned by the event and |      * @param   indexFilterValues   An object where the keys are indexed args returned by the event and | ||||||
|      *                              the value is the value you are interested in. E.g `{maker: aUserAddressHex}` |      *                              the value is the value you are interested in. E.g `{maker: aUserAddressHex}` | ||||||
|      * @param   callback            Callback that gets called when a log is added/removed |      * @param   callback            Callback that gets called when a log is added/removed | ||||||
|  |      * @param   isVerbose           Enable verbose subscription warnings (e.g recoverable network issues encountered) | ||||||
|      * @return Subscription token used later to unsubscribe |      * @return Subscription token used later to unsubscribe | ||||||
|      */ |      */ | ||||||
|     public subscribe<ArgsType extends ExchangeContractEventArgs>( |     public subscribe<ArgsType extends ExchangeContractEventArgs>( | ||||||
|         eventName: ExchangeEvents, |         eventName: ExchangeEvents, | ||||||
|         indexFilterValues: IndexedFilterValues, |         indexFilterValues: IndexedFilterValues, | ||||||
|         callback: EventCallback<ArgsType>, |         callback: EventCallback<ArgsType>, | ||||||
|  |         isVerbose: boolean = false, | ||||||
|     ): string { |     ): string { | ||||||
|         assert.doesBelongToStringEnum('eventName', eventName, ExchangeEvents); |         assert.doesBelongToStringEnum('eventName', eventName, ExchangeEvents); | ||||||
|         assert.doesConformToSchema('indexFilterValues', indexFilterValues, schemas.indexFilterValuesSchema); |         assert.doesConformToSchema('indexFilterValues', indexFilterValues, schemas.indexFilterValuesSchema); | ||||||
| @@ -669,6 +671,7 @@ export class ExchangeWrapper extends ContractWrapper { | |||||||
|             indexFilterValues, |             indexFilterValues, | ||||||
|             artifacts.Exchange.abi, |             artifacts.Exchange.abi, | ||||||
|             callback, |             callback, | ||||||
|  |             isVerbose, | ||||||
|         ); |         ); | ||||||
|         return subscriptionToken; |         return subscriptionToken; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -350,6 +350,7 @@ export class TokenWrapper extends ContractWrapper { | |||||||
|      * @param   indexFilterValues   An object where the keys are indexed args returned by the event and |      * @param   indexFilterValues   An object where the keys are indexed args returned by the event and | ||||||
|      *                              the value is the value you are interested in. E.g `{maker: aUserAddressHex}` |      *                              the value is the value you are interested in. E.g `{maker: aUserAddressHex}` | ||||||
|      * @param   callback            Callback that gets called when a log is added/removed |      * @param   callback            Callback that gets called when a log is added/removed | ||||||
|  |      * @param   isVerbose           Enable verbose subscription warnings (e.g recoverable network issues encountered) | ||||||
|      * @return Subscription token used later to unsubscribe |      * @return Subscription token used later to unsubscribe | ||||||
|      */ |      */ | ||||||
|     public subscribe<ArgsType extends TokenContractEventArgs>( |     public subscribe<ArgsType extends TokenContractEventArgs>( | ||||||
| @@ -357,6 +358,7 @@ export class TokenWrapper extends ContractWrapper { | |||||||
|         eventName: TokenEvents, |         eventName: TokenEvents, | ||||||
|         indexFilterValues: IndexedFilterValues, |         indexFilterValues: IndexedFilterValues, | ||||||
|         callback: EventCallback<ArgsType>, |         callback: EventCallback<ArgsType>, | ||||||
|  |         isVerbose: boolean = false, | ||||||
|     ): string { |     ): string { | ||||||
|         assert.isETHAddressHex('tokenAddress', tokenAddress); |         assert.isETHAddressHex('tokenAddress', tokenAddress); | ||||||
|         const normalizedTokenAddress = tokenAddress.toLowerCase(); |         const normalizedTokenAddress = tokenAddress.toLowerCase(); | ||||||
| @@ -369,6 +371,7 @@ export class TokenWrapper extends ContractWrapper { | |||||||
|             indexFilterValues, |             indexFilterValues, | ||||||
|             artifacts.Token.abi, |             artifacts.Token.abi, | ||||||
|             callback, |             callback, | ||||||
|  |             isVerbose, | ||||||
|         ); |         ); | ||||||
|         return subscriptionToken; |         return subscriptionToken; | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user