Improve strategy implementation
This commit is contained in:
parent
9fc087ae4a
commit
73f3287a9d
|
@ -8,11 +8,11 @@ module.exports = {
|
||||||
},
|
},
|
||||||
collectCoverage: true,
|
collectCoverage: true,
|
||||||
collectCoverageFrom: ["**/*.(t|j)s"],
|
collectCoverageFrom: ["**/*.(t|j)s"],
|
||||||
coveragePathIgnorePatterns: ["node_modules", "test"],
|
coveragePathIgnorePatterns: ["node_modules", "test", "start", "Server", "log", "index"],
|
||||||
coverageDirectory: "./coverage",
|
coverageDirectory: "./coverage",
|
||||||
coverageThreshold: {
|
coverageThreshold: {
|
||||||
global: {
|
global: {
|
||||||
lines: 55,
|
lines: 70,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -48,7 +48,7 @@ export class EvmJsonRPCBlockRepository implements EvmBlockRepository, DynamicStr
|
||||||
}
|
}
|
||||||
|
|
||||||
createInstance(): EvmJsonRPCBlockRepository {
|
createInstance(): EvmJsonRPCBlockRepository {
|
||||||
return new EvmJsonRPCBlockRepository(this.cfg);
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getBlockHeight(finality: EvmTag): Promise<bigint> {
|
async getBlockHeight(finality: EvmTag): Promise<bigint> {
|
||||||
|
|
|
@ -24,8 +24,8 @@ export class FileMetadataRepository implements MetadataRepository<any>, StaticSt
|
||||||
return "metadata";
|
return "metadata";
|
||||||
}
|
}
|
||||||
|
|
||||||
createInstance() {
|
createInstance(): FileMetadataRepository {
|
||||||
return new FileMetadataRepository(this.dirPath);
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
async get(id: string): Promise<any> {
|
async get(id: string): Promise<any> {
|
||||||
|
|
|
@ -19,8 +19,8 @@ export class PromStatRepository implements StatRepository, StaticStrategy {
|
||||||
return "metrics";
|
return "metrics";
|
||||||
}
|
}
|
||||||
|
|
||||||
createInstance() {
|
createInstance(): PromStatRepository {
|
||||||
return new PromStatRepository();
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public report() {
|
public report() {
|
||||||
|
|
|
@ -42,7 +42,7 @@ export class SnsEventRepository implements SnsRepository, StaticStrategy {
|
||||||
}
|
}
|
||||||
|
|
||||||
createInstance(): SnsEventRepository {
|
createInstance(): SnsEventRepository {
|
||||||
return new SnsEventRepository(this.client!, this.cfg);
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
async publish(events: LogFoundEvent<any>[]): Promise<SnsPublishResult> {
|
async publish(events: LogFoundEvent<any>[]): Promise<SnsPublishResult> {
|
||||||
|
|
|
@ -21,8 +21,8 @@ export class Web3SolanaSlotRepository implements SolanaSlotRepository, DynamicSt
|
||||||
private connection: Connection;
|
private connection: Connection;
|
||||||
private cfg: Config;
|
private cfg: Config;
|
||||||
|
|
||||||
constructor(cfg: Config) {
|
constructor(connection: Connection, cfg: Config) {
|
||||||
this.connection = new Connection(cfg.platforms[CHAIN].rpcs[0]);
|
this.connection = connection;
|
||||||
this.cfg = cfg;
|
this.cfg = cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ export class Web3SolanaSlotRepository implements SolanaSlotRepository, DynamicSt
|
||||||
return NAME;
|
return NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
createInstance() {
|
createInstance(): Web3SolanaSlotRepository {
|
||||||
return new Web3SolanaSlotRepository(this.cfg);
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
getLatestSlot(commitment: string): Promise<number> {
|
getLatestSlot(commitment: string): Promise<number> {
|
||||||
|
|
|
@ -39,11 +39,15 @@ export class RepositoriesStrategy {
|
||||||
let dynamicRepositories = new Map();
|
let dynamicRepositories = new Map();
|
||||||
|
|
||||||
this.cfg.supportedChains.forEach((chain) => {
|
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[] = [
|
const repositories: DynamicStrategy[] = [
|
||||||
new EvmJsonRPCBlockRepository(this.cfg),
|
new EvmJsonRPCBlockRepository(this.cfg),
|
||||||
new Web3SolanaSlotRepository(this.cfg),
|
new Web3SolanaSlotRepository(
|
||||||
|
new Connection(platform.rpcs[0], { disableRetryOnRateLimit: true }),
|
||||||
|
this.cfg
|
||||||
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
repositories.forEach((repository) => {
|
repositories.forEach((repository) => {
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { configMock } from "../../mock/configMock";
|
||||||
describe("FileMetadataRepository", () => {
|
describe("FileMetadataRepository", () => {
|
||||||
const dirPath = "./metadata-repo";
|
const dirPath = "./metadata-repo";
|
||||||
const cfg = configMock();
|
const cfg = configMock();
|
||||||
const repo = new FileMetadataRepository(cfg);
|
const repo = new FileMetadataRepository(dirPath);
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
if (!fs.existsSync(dirPath)) {
|
if (!fs.existsSync(dirPath)) {
|
||||||
|
|
|
@ -35,7 +35,7 @@ describe("RepositoriesBuilder", () => {
|
||||||
const repos = new RepositoriesBuilder(configMock(["ethereum", "solana"]));
|
const repos = new RepositoriesBuilder(configMock(["ethereum", "solana"]));
|
||||||
// Then
|
// Then
|
||||||
const job = repos.getJobsRepository();
|
const job = repos.getJobsRepository();
|
||||||
expect(job).toBeTruthy()
|
expect(job).toBeTruthy();
|
||||||
|
|
||||||
expect(repos.getEvmBlockRepository("ethereum")).toBeInstanceOf(EvmJsonRPCBlockRepository);
|
expect(repos.getEvmBlockRepository("ethereum")).toBeInstanceOf(EvmJsonRPCBlockRepository);
|
||||||
expect(repos.getMetadataRepository()).toBeInstanceOf(FileMetadataRepository);
|
expect(repos.getMetadataRepository()).toBeInstanceOf(FileMetadataRepository);
|
||||||
|
|
|
@ -10,7 +10,8 @@ describe("Web3SolanaSlotRepository", () => {
|
||||||
describe("strategy", () => {
|
describe("strategy", () => {
|
||||||
it("should be apply Web3SolanaSlotRepository", async () => {
|
it("should be apply Web3SolanaSlotRepository", async () => {
|
||||||
// Given
|
// Given
|
||||||
const repo = new Web3SolanaSlotRepository(cfg);
|
const connectionMock = {};
|
||||||
|
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
const result = await repo.apply(chain);
|
const result = await repo.apply(chain);
|
||||||
|
@ -21,7 +22,8 @@ describe("Web3SolanaSlotRepository", () => {
|
||||||
|
|
||||||
it("should be get name metadata", async () => {
|
it("should be get name metadata", async () => {
|
||||||
// Given
|
// Given
|
||||||
const repo = new Web3SolanaSlotRepository(cfg);
|
const connectionMock = {};
|
||||||
|
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
const result = await repo.getName();
|
const result = await repo.getName();
|
||||||
|
@ -32,7 +34,8 @@ describe("Web3SolanaSlotRepository", () => {
|
||||||
|
|
||||||
it("should be create instance", async () => {
|
it("should be create instance", async () => {
|
||||||
// Given
|
// Given
|
||||||
const repo = new Web3SolanaSlotRepository(cfg);
|
const connectionMock = {};
|
||||||
|
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
const result = await repo.createInstance();
|
const result = await repo.createInstance();
|
||||||
|
@ -48,10 +51,10 @@ describe("Web3SolanaSlotRepository", () => {
|
||||||
const connectionMock = {
|
const connectionMock = {
|
||||||
getSlot: () => Promise.resolve(100),
|
getSlot: () => Promise.resolve(100),
|
||||||
};
|
};
|
||||||
const repo = new Web3SolanaSlotRepository(cfg);
|
const repository = new Web3SolanaSlotRepository(connectionMock as any, cfg);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
const latestSlot = await repo.getLatestSlot("finalized");
|
const latestSlot = await repository.getLatestSlot("finalized");
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
expect(latestSlot).toBe(100);
|
expect(latestSlot).toBe(100);
|
||||||
|
@ -68,7 +71,7 @@ describe("Web3SolanaSlotRepository", () => {
|
||||||
const connectionMock = {
|
const connectionMock = {
|
||||||
getBlock: (slot: number) => Promise.resolve(expected),
|
getBlock: (slot: number) => Promise.resolve(expected),
|
||||||
};
|
};
|
||||||
const repo = new Web3SolanaSlotRepository(cfg);
|
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
const block = (await repo.getBlock(100)).getValue();
|
const block = (await repo.getBlock(100)).getValue();
|
||||||
|
@ -95,7 +98,7 @@ describe("Web3SolanaSlotRepository", () => {
|
||||||
const connectionMock = {
|
const connectionMock = {
|
||||||
getSignaturesForAddress: () => Promise.resolve(expected),
|
getSignaturesForAddress: () => Promise.resolve(expected),
|
||||||
};
|
};
|
||||||
const repo = new Web3SolanaSlotRepository(cfg);
|
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
const signatures = await repo.getSignaturesForAddress(
|
const signatures = await repo.getSignaturesForAddress(
|
||||||
|
@ -130,7 +133,7 @@ describe("Web3SolanaSlotRepository", () => {
|
||||||
const connectionMock = {
|
const connectionMock = {
|
||||||
getTransactions: (sigs: solana.ConfirmedSignatureInfo[]) => Promise.resolve(expected),
|
getTransactions: (sigs: solana.ConfirmedSignatureInfo[]) => Promise.resolve(expected),
|
||||||
};
|
};
|
||||||
const repo = new Web3SolanaSlotRepository(cfg);
|
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
const transactions = await repo.getTransactions([
|
const transactions = await repo.getTransactions([
|
||||||
|
|
Loading…
Reference in New Issue