Skip to content
This repository has been archived by the owner on May 24, 2022. It is now read-only.

Commit

Permalink
Merge pull request #36 from paritytech/am-every-block
Browse files Browse the repository at this point in the history
Make onEveryBlock$ dormant
  • Loading branch information
axelchalon committed Nov 7, 2018
2 parents 3d0d455 + 9bcb19b commit 2fed21b
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 3 deletions.
30 changes: 28 additions & 2 deletions packages/light.js/src/frequency/blocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,41 @@
// SPDX-License-Identifier: MIT

import BigNumber from 'bignumber.js';
import { filter, map, withLatestFrom } from 'rxjs/operators';
import * as memoizee from 'memoizee';
import { Observable } from 'rxjs';

import { createApiFromProvider, getApi } from '../api';
import createPubsubObservable from './utils/createPubsubObservable';
import { FrequencyObservableOptions } from '../types';
import { onSyncingChanged$ } from './health';

/**
* Observable that emits on every new block.
* Pure function version of {@link onEveryBlock$}.
*
* @ignore
*/
const onEveryBlockWithApi$ = memoizee(
(api: any, options: FrequencyObservableOptions) =>
onSyncingChanged$(options).pipe(
filter((isSyncing: boolean) => isSyncing === false),
withLatestFrom(createPubsubObservable('eth_blockNumber', options)),
map(([_, blockNumber]) => blockNumber)
) as Observable<BigNumber>,
{ length: 1 } // Only memoize by api
);

/**
* Observable that emits on every new block. Note: this FrequencyObservable
* won't fire when the light client is syncing.
*
* @param options - Options to pass to {@link FrequencyObservable}.
*/
export function onEveryBlock$(options?: FrequencyObservableOptions) {
return createPubsubObservable<BigNumber>('eth_blockNumber', options);
const api =
options && options.provider
? createApiFromProvider(options.provider)
: getApi();

return onEveryBlockWithApi$(api, options);
}
2 changes: 1 addition & 1 deletion packages/light.js/src/rpc/rpc.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ const testRpc = (name: string, rpc$: RpcObservable<any, any>) =>

it('result Observable should return values', done => {
rpc$({}).subscribe(data => {
expect(data).toBeTruthy();
expect(data).not.toBeNull();
done();
});
});
Expand Down
6 changes: 6 additions & 0 deletions packages/light.js/src/utils/testHelpers/mockApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@ const createApi = (
};
});

// For eth.syncing pubsub, always return false
apiObject.pubsub.eth.syncing = (callback: Function) => {
callback(null, false);
return Promise.resolve(1);
};

return apiObject;
},
{
Expand Down

0 comments on commit 2fed21b

Please sign in to comment.