Improve strategy implementation

This commit is contained in:
Julian Merlo 2023-11-28 16:33:23 -03:00
parent 9fc087ae4a
commit 73f3287a9d
10 changed files with 31 additions and 24 deletions

View File

@ -8,11 +8,11 @@ module.exports = {
},
collectCoverage: true,
collectCoverageFrom: ["**/*.(t|j)s"],
coveragePathIgnorePatterns: ["node_modules", "test"],
coveragePathIgnorePatterns: ["node_modules", "test", "start", "Server", "log", "index"],
coverageDirectory: "./coverage",
coverageThreshold: {
global: {
lines: 55,
lines: 70,
},
},
};

View File

@ -48,7 +48,7 @@ export class EvmJsonRPCBlockRepository implements EvmBlockRepository, DynamicStr
}
createInstance(): EvmJsonRPCBlockRepository {
return new EvmJsonRPCBlockRepository(this.cfg);
return this;
}
async getBlockHeight(finality: EvmTag): Promise<bigint> {

View File

@ -24,8 +24,8 @@ export class FileMetadataRepository implements MetadataRepository<any>, StaticSt
return "metadata";
}
createInstance() {
return new FileMetadataRepository(this.dirPath);
createInstance(): FileMetadataRepository {
return this;
}
async get(id: string): Promise<any> {

View File

@ -19,8 +19,8 @@ export class PromStatRepository implements StatRepository, StaticStrategy {
return "metrics";
}
createInstance() {
return new PromStatRepository();
createInstance(): PromStatRepository {
return this;
}
public report() {

View File

@ -42,7 +42,7 @@ export class SnsEventRepository implements SnsRepository, StaticStrategy {
}
createInstance(): SnsEventRepository {
return new SnsEventRepository(this.client!, this.cfg);
return this;
}
async publish(events: LogFoundEvent<any>[]): Promise<SnsPublishResult> {

View File

@ -21,8 +21,8 @@ export class Web3SolanaSlotRepository implements SolanaSlotRepository, DynamicSt
private connection: Connection;
private cfg: Config;
constructor(cfg: Config) {
this.connection = new Connection(cfg.platforms[CHAIN].rpcs[0]);
constructor(connection: Connection, cfg: Config) {
this.connection = connection;
this.cfg = cfg;
}
@ -34,8 +34,8 @@ export class Web3SolanaSlotRepository implements SolanaSlotRepository, DynamicSt
return NAME;
}
createInstance() {
return new Web3SolanaSlotRepository(this.cfg);
createInstance(): Web3SolanaSlotRepository {
return this;
}
getLatestSlot(commitment: string): Promise<number> {

View File

@ -39,11 +39,15 @@ export class RepositoriesStrategy {
let dynamicRepositories = new Map();
this.cfg.supportedChains.forEach((chain) => {
if (!this.cfg.platforms[chain]) throw new Error(`No config for chain ${chain}`);
const platform = this.cfg.platforms[chain];
if (!platform) throw new Error(`No config for chain ${chain}`);
const repositories: DynamicStrategy[] = [
new EvmJsonRPCBlockRepository(this.cfg),
new Web3SolanaSlotRepository(this.cfg),
new Web3SolanaSlotRepository(
new Connection(platform.rpcs[0], { disableRetryOnRateLimit: true }),
this.cfg
),
];
repositories.forEach((repository) => {

View File

@ -6,7 +6,7 @@ import { configMock } from "../../mock/configMock";
describe("FileMetadataRepository", () => {
const dirPath = "./metadata-repo";
const cfg = configMock();
const repo = new FileMetadataRepository(cfg);
const repo = new FileMetadataRepository(dirPath);
beforeEach(() => {
if (!fs.existsSync(dirPath)) {

View File

@ -35,7 +35,7 @@ describe("RepositoriesBuilder", () => {
const repos = new RepositoriesBuilder(configMock(["ethereum", "solana"]));
// Then
const job = repos.getJobsRepository();
expect(job).toBeTruthy()
expect(job).toBeTruthy();
expect(repos.getEvmBlockRepository("ethereum")).toBeInstanceOf(EvmJsonRPCBlockRepository);
expect(repos.getMetadataRepository()).toBeInstanceOf(FileMetadataRepository);

View File

@ -10,7 +10,8 @@ describe("Web3SolanaSlotRepository", () => {
describe("strategy", () => {
it("should be apply Web3SolanaSlotRepository", async () => {
// Given
const repo = new Web3SolanaSlotRepository(cfg);
const connectionMock = {};
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
// When
const result = await repo.apply(chain);
@ -21,7 +22,8 @@ describe("Web3SolanaSlotRepository", () => {
it("should be get name metadata", async () => {
// Given
const repo = new Web3SolanaSlotRepository(cfg);
const connectionMock = {};
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
// When
const result = await repo.getName();
@ -32,7 +34,8 @@ describe("Web3SolanaSlotRepository", () => {
it("should be create instance", async () => {
// Given
const repo = new Web3SolanaSlotRepository(cfg);
const connectionMock = {};
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
// When
const result = await repo.createInstance();
@ -48,10 +51,10 @@ describe("Web3SolanaSlotRepository", () => {
const connectionMock = {
getSlot: () => Promise.resolve(100),
};
const repo = new Web3SolanaSlotRepository(cfg);
const repository = new Web3SolanaSlotRepository(connectionMock as any, cfg);
// When
const latestSlot = await repo.getLatestSlot("finalized");
const latestSlot = await repository.getLatestSlot("finalized");
// Then
expect(latestSlot).toBe(100);
@ -68,7 +71,7 @@ describe("Web3SolanaSlotRepository", () => {
const connectionMock = {
getBlock: (slot: number) => Promise.resolve(expected),
};
const repo = new Web3SolanaSlotRepository(cfg);
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
// When
const block = (await repo.getBlock(100)).getValue();
@ -95,7 +98,7 @@ describe("Web3SolanaSlotRepository", () => {
const connectionMock = {
getSignaturesForAddress: () => Promise.resolve(expected),
};
const repo = new Web3SolanaSlotRepository(cfg);
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
// When
const signatures = await repo.getSignaturesForAddress(
@ -130,7 +133,7 @@ describe("Web3SolanaSlotRepository", () => {
const connectionMock = {
getTransactions: (sigs: solana.ConfirmedSignatureInfo[]) => Promise.resolve(expected),
};
const repo = new Web3SolanaSlotRepository(cfg);
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
// When
const transactions = await repo.getTransactions([