11import type { EventFragment , Log } from 'ethers'
22import { ethers } from 'ethers'
3- import { AutoCrossChecker , ONE_MINUTE_MS } from '@ora-io/rek'
3+ import { AutoCrossChecker , ONE_MINUTE_MS , ProviderManager } from '@ora-io/rek'
44import type { AutoCrossCheckParam } from '@ora-io/rek'
5+ import type { Providers } from '../types'
56import type { Signal } from './type'
67
78export interface EventSignalRegisterParams {
@@ -14,7 +15,7 @@ export interface EventSignalRegisterParams {
1415export type EventSignalCallback = ethers . Listener
1516
1617export class EventSignal implements Signal {
17- provider ?: ethers . JsonRpcProvider | ethers . WebSocketProvider
18+ provider ?: Providers
1819 contract : ethers . Contract
1920 esig : string
2021 eventFragment : EventFragment
@@ -57,28 +58,36 @@ export class EventSignal implements Signal {
5758
5859 // TODO: how to integrate crosschecker
5960 // TODO: should be wsProvider only?
60- listen ( provider : ethers . WebSocketProvider , crosscheckProvider ?: ethers . JsonRpcProvider ) {
61+ listen ( provider : Providers , crosscheckProvider ?: Providers ) {
6162 this . provider = provider
6263
6364 // start event listener
64- const listener = this . contract . connect ( provider )
65- listener ?. on (
66- this . params . eventName ,
67- // TODO: calling this seems to be async, should we make it to sequential?
68- this . subscribeCallback ,
69- )
65+ if ( provider instanceof ProviderManager ) {
66+ provider . addContract ( this . params . address , this . contract )
67+ provider . addListener ( this . params . address , this . params . eventName , this . subscribeCallback )
68+ }
69+ else {
70+ const listener = this . contract . connect ( provider )
71+ listener ?. on (
72+ this . params . eventName ,
73+ // TODO: calling this seems to be async, should we make it to sequential?
74+ this . subscribeCallback ,
75+ )
76+ }
7077
7178 // start cross-checker if ever set
7279 if ( this . crosscheckerOptions ) {
7380 if ( ! crosscheckProvider )
7481 throw new Error ( 'crosschecker set, please provide crosscheckProvider to listen function' )
75- this . startCrossChecker ( crosscheckProvider )
82+ const _crosscheckProvider = crosscheckProvider instanceof ProviderManager ? crosscheckProvider . provider : crosscheckProvider
83+ if ( _crosscheckProvider )
84+ this . startCrossChecker ( _crosscheckProvider )
7685 }
7786
7887 return this
7988 }
8089
81- async startCrossChecker ( provider : ethers . JsonRpcProvider ) {
90+ async startCrossChecker ( provider : ethers . WebSocketProvider | ethers . JsonRpcProvider ) {
8291 if ( ! this . crosscheckerOptions )
8392 throw new Error ( 'no crosscheck set, can\'t start crosschecker' )
8493 this . crosschecker = new AutoCrossChecker ( provider , this . crosscheckerOptions )
0 commit comments