Improve strategy implementation
This commit is contained in:
parent
9fc087ae4a
commit
73f3287a9d
|
@ -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,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -19,8 +19,8 @@ export class PromStatRepository implements StatRepository, StaticStrategy {
|
|||
return "metrics";
|
||||
}
|
||||
|
||||
createInstance() {
|
||||
return new PromStatRepository();
|
||||
createInstance(): PromStatRepository {
|
||||
return this;
|
||||
}
|
||||
|
||||
public report() {
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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) => {
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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([
|
||||
|
|
Loading…
Reference in New Issue