wormhole-explorer/blockchain-watcher/src/infrastructure/repositories/strategies/RepositoriesStrategy.ts

64 lines
2.0 KiB
TypeScript
Raw Normal View History

2023-11-27 04:10:56 -08:00
import { FileMetadataRepository } from "../FileMetadataRepository";
import { SnsEventRepository } from "../SnsEventRepository";
import { PromStatRepository } from "../PromStatRepository";
import { SNSClient } from "@aws-sdk/client-sns";
import { Config } from "../../config";
import { EvmJsonRPCBlockRepository } from "../EvmJsonRPCBlockRepository";
import { Connection } from "@solana/web3.js";
2023-11-28 10:47:46 -08:00
import { DynamicStrategy } from "./DynamicStrategy";
import { StaticStrategy } from "./StaticStrategy";
2023-11-28 13:29:25 -08:00
import { RateLimitedSolanaSlotRepository, Web3SolanaSlotRepository } from "..";
2023-11-27 04:10:56 -08:00
export class RepositoriesStrategy {
private snsClient?: SNSClient;
private cfg: Config;
constructor(snsClient: SNSClient, cfg: Config) {
this.snsClient = snsClient;
this.cfg = cfg;
}
executeStatic(): Map<string, any> {
2023-11-28 04:29:47 -08:00
let staticRepositories = new Map();
2023-11-28 10:47:46 -08:00
const repositories: StaticStrategy[] = [
2023-11-27 04:10:56 -08:00
new SnsEventRepository(this.snsClient!, this.cfg),
new FileMetadataRepository(this.cfg.metadata!.dir!),
2023-11-27 04:10:56 -08:00
new PromStatRepository(),
];
repositories.forEach((repository) => {
if (repository.apply())
2023-11-28 04:29:47 -08:00
staticRepositories.set(repository.getName(), repository.createInstance());
2023-11-27 04:10:56 -08:00
});
2023-11-28 04:29:47 -08:00
return staticRepositories;
2023-11-27 04:10:56 -08:00
}
2023-11-28 04:29:47 -08:00
executeDynamic(): Map<string, any> {
let dynamicRepositories = new Map();
2023-11-27 04:10:56 -08:00
2023-11-28 04:29:47 -08:00
this.cfg.supportedChains.forEach((chain) => {
2023-11-28 11:33:23 -08:00
const platform = this.cfg.platforms[chain];
if (!platform) throw new Error(`No config for chain ${chain}`);
2023-11-27 04:10:56 -08:00
2023-11-28 13:29:25 -08:00
const repositories = [
2023-11-28 10:47:46 -08:00
new EvmJsonRPCBlockRepository(this.cfg),
2023-11-28 13:29:25 -08:00
new RateLimitedSolanaSlotRepository(
new Web3SolanaSlotRepository(
new Connection(platform.rpcs[0], { disableRetryOnRateLimit: true })
),
platform.rateLimit
)
2023-11-28 04:29:47 -08:00
];
repositories.forEach((repository) => {
2023-11-28 10:47:46 -08:00
if (repository.apply(chain))
2023-11-28 04:29:47 -08:00
dynamicRepositories.set(repository.getName(), repository.createInstance());
});
2023-11-27 04:10:56 -08:00
});
2023-11-28 04:29:47 -08:00
return dynamicRepositories;
2023-11-27 04:10:56 -08:00
}
}