2024-02-02 07:35:52 -08:00
|
|
|
import { TransactionFoundEvent } from "../../entities";
|
|
|
|
import { SuiTransactionBlockReceipt } from "../../entities/sui";
|
2024-02-02 11:12:41 -08:00
|
|
|
import { StatRepository } from "../../repositories";
|
2024-02-02 07:35:52 -08:00
|
|
|
|
2024-02-14 06:14:25 -08:00
|
|
|
const COMMITMENT = "immediate";
|
|
|
|
const SUI_CHAIN = "sui";
|
|
|
|
|
2024-02-02 07:35:52 -08:00
|
|
|
export class HandleSuiTransactions {
|
|
|
|
constructor(
|
|
|
|
private readonly cfg: HandleSuiTransactionsOptions,
|
|
|
|
private readonly mapper: (tx: SuiTransactionBlockReceipt) => TransactionFoundEvent,
|
2024-02-14 06:14:25 -08:00
|
|
|
private readonly target: (parsed: TransactionFoundEvent[], chain: string) => Promise<void>,
|
2024-02-02 11:12:41 -08:00
|
|
|
private readonly statsRepo: StatRepository
|
2024-02-02 07:35:52 -08:00
|
|
|
) {}
|
|
|
|
|
|
|
|
public async handle(txs: SuiTransactionBlockReceipt[]): Promise<TransactionFoundEvent[]> {
|
2024-02-02 11:12:41 -08:00
|
|
|
const items: TransactionFoundEvent[] = [];
|
|
|
|
|
|
|
|
for (const tx of txs) {
|
|
|
|
const valid = this.filterTransaction(tx);
|
|
|
|
if (valid) {
|
|
|
|
this.report();
|
|
|
|
items.push(this.mapper(tx));
|
|
|
|
}
|
|
|
|
}
|
2024-02-02 07:35:52 -08:00
|
|
|
|
2024-02-14 06:14:25 -08:00
|
|
|
await this.target(items, SUI_CHAIN);
|
2024-02-02 07:35:52 -08:00
|
|
|
|
|
|
|
return items;
|
|
|
|
}
|
|
|
|
|
|
|
|
private filterTransaction({ events }: SuiTransactionBlockReceipt): boolean {
|
|
|
|
return (
|
|
|
|
!!events && !!this.cfg.eventTypes && events.some((e) => this.cfg.eventTypes!.includes(e.type))
|
|
|
|
);
|
|
|
|
}
|
2024-02-02 11:12:41 -08:00
|
|
|
|
|
|
|
private report() {
|
|
|
|
if (!this.cfg.metricName) return;
|
|
|
|
|
|
|
|
const labels = {
|
|
|
|
job: this.cfg.id,
|
2024-02-14 06:14:25 -08:00
|
|
|
chain: SUI_CHAIN,
|
|
|
|
commitment: COMMITMENT,
|
2024-02-02 11:12:41 -08:00
|
|
|
};
|
|
|
|
this.statsRepo.count(this.cfg.metricName, labels);
|
|
|
|
}
|
2024-02-02 07:35:52 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface HandleSuiTransactionsOptions {
|
|
|
|
eventTypes?: string[];
|
2024-02-02 11:12:41 -08:00
|
|
|
metricName?: string;
|
|
|
|
id: string;
|
2024-02-02 07:35:52 -08:00
|
|
|
}
|