diff --git a/package.json b/package.json index 1d26bb3..f494835 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ora-stack", - "version": "0.3.1", + "version": "0.3.2", "private": true, "packageManager": "pnpm@9.7.0", "description": "", diff --git a/packages/orap/package.json b/packages/orap/package.json index 3f2b23f..9b35111 100644 --- a/packages/orap/package.json +++ b/packages/orap/package.json @@ -1,7 +1,7 @@ { "name": "@ora-io/orap", "type": "module", - "version": "0.3.1", + "version": "0.3.2", "packageManager": "pnpm@8.10.5", "description": "", "author": "Norman (nom4dv3), MuRong", diff --git a/packages/orap/src/flow/event.ts b/packages/orap/src/flow/event.ts index be1ca02..35f11f3 100644 --- a/packages/orap/src/flow/event.ts +++ b/packages/orap/src/flow/event.ts @@ -3,7 +3,7 @@ import type { Context } from '../task' import type { TaskFlowParams } from '../flow/task' import { TaskFlow } from '../flow/task' import { StoreManager } from '../store' -import type { EventSignalRegisterParams } from '../signal' +import type { CrosscheckOptions, EventSignalRegisterParams } from '../signal' import { EventVerse } from '../verse/event' import type { TaskVerse } from '../verse/task' import type { Flow, HandleFn } from './interface' @@ -33,7 +33,7 @@ export class EventFlow implements Flow { return this._taskFlows } - crosscheck(options?: Omit) { + crosscheck(options?: CrosscheckOptions) { this.partialCrosscheckOptions = options return this } diff --git a/packages/orap/src/signal/event.ts b/packages/orap/src/signal/event.ts index eb457dc..980ca77 100644 --- a/packages/orap/src/signal/event.ts +++ b/packages/orap/src/signal/event.ts @@ -12,6 +12,15 @@ export interface EventSignalRegisterParams { // esig?: string, } +export interface CrosscheckParams { + /** + * Disable crosscheck + */ + disabled?: boolean +} + +export type CrosscheckOptions = CrosscheckParams & Omit + export type EventSignalCallback = ethers.Listener export class EventSignal implements Signal { @@ -25,11 +34,12 @@ export class EventSignal implements Signal { crosschecker?: AutoCrossChecker crosscheckerOptions?: AutoCrossCheckParam + crosscheckerParams?: CrosscheckParams constructor( public params: EventSignalRegisterParams, public callback: EventSignalCallback, - crosscheckOptions?: Omit, + crosscheckOptions?: CrosscheckOptions, ) { this.contract = new ethers.Contract( params.address, @@ -69,7 +79,7 @@ export class EventSignal implements Signal { return new ContractUnknownEventPayload(this.contract, this.subscribeCallback, this.params.eventName, log) } - private _setCrosscheckOptions(options: Omit) { + private _setCrosscheckOptions(options: CrosscheckOptions) { const { pollingInterval = ONE_MINUTE_MS * 60, ignoreLogs = [], @@ -83,6 +93,9 @@ export class EventSignal implements Signal { pollingInterval, ignoreLogs, } + this.crosscheckerParams = { + disabled: options?.disabled, + } } // TODO: should be wsProvider only? @@ -114,6 +127,9 @@ export class EventSignal implements Signal { } async startCrossChecker(provider?: Providers) { + if (this.crosscheckerParams?.disabled) + return + if (!this.crosscheckerOptions) return if (!provider) diff --git a/packages/reku/package.json b/packages/reku/package.json index d1a4883..5f917b8 100644 --- a/packages/reku/package.json +++ b/packages/reku/package.json @@ -1,7 +1,7 @@ { "name": "@ora-io/reku", "type": "module", - "version": "0.3.2", + "version": "0.3.3", "packageManager": "pnpm@8.10.5", "description": "", "author": "Norman (nom4dv3), MuRong", diff --git a/packages/reku/src/provider/contract.ts b/packages/reku/src/provider/contract.ts index 8fe956a..7c9bc76 100644 --- a/packages/reku/src/provider/contract.ts +++ b/packages/reku/src/provider/contract.ts @@ -1,6 +1,7 @@ import type { ContractAddress, Fn } from '@ora-io/utils' import type { Interface, InterfaceAbi } from 'ethers' import { ethers } from 'ethers' +import { debug } from '../debug' export class RekuContractManager { private _contract?: ethers.Contract @@ -22,12 +23,14 @@ export class RekuContractManager { if (!this._listeners.has(event)) { this._listeners.set(event, listener) this._contract?.on(event, listener) + debug('add listener %s %s', this.address, event) } } removeListener(event: ethers.ContractEventName, listener: ethers.Listener) { this._contract?.removeListener(event, listener) this._listeners.delete(event) + debug('remove listener %s %s', this.address, event) } removeAllListeners() { diff --git a/packages/reku/src/provider/provider.ts b/packages/reku/src/provider/provider.ts index 1986077..b105acc 100644 --- a/packages/reku/src/provider/provider.ts +++ b/packages/reku/src/provider/provider.ts @@ -64,11 +64,13 @@ export class RekuProviderManager { const contract = new RekuContractManager(address, abi, this._provider) this._contracts.set(address, contract) + debug('add contract %s', address) return contract } else if (abi instanceof ethers.Contract) { const contract = new RekuContractManager(address, abi.interface, this._provider) this._contracts.set(address, contract) + debug('add contract %s', address) return contract } else { @@ -87,6 +89,7 @@ export class RekuProviderManager { } removeAllListeners() { + debug('remove all listeners') this._provider?.removeAllListeners() this._contracts.forEach((contract) => { contract.removeAllListeners() @@ -94,6 +97,7 @@ export class RekuProviderManager { } removeAllContract() { + debug('remove all contracts') this._contracts.forEach((contract) => { contract.removeAllListeners() }) @@ -101,6 +105,7 @@ export class RekuProviderManager { } retryAllListeners() { + debug('retry all listeners') this._contracts.forEach((contract) => { contract.retryAllListeners() }) @@ -110,6 +115,7 @@ export class RekuProviderManager { if (!this._event) this._event = new EventEmitter() + debug('on %s', event) this._event?.on(event, listener) } @@ -117,14 +123,17 @@ export class RekuProviderManager { if (!this._event) this._event = new EventEmitter() + debug('once %s', event) this._event?.once(event, listener) } removeEvent(event: RekuProviderManagerEvent, listener: (...args: any[]) => void) { + debug('remove event %s', event) this._event?.removeListener(event, listener) } removeAllEvents() { + debug('remove all events') this._event?.removeAllListeners() } @@ -185,6 +194,7 @@ export class RekuProviderManager { .catch((err) => { this.reconnect() this._event?.emit('error', err) + debug('heartbeat error: %s', err) }) }, this._heartbeatInterval) }