import { ScoreType } from "@redstone-finance/protocol"; import { DataPackagesResponse } from "@redstone-finance/sdk"; import { Contract } from "ethers"; import { DataPackagesWrapper } from "./wrappers/DataPackagesWrapper"; import { DataPackagesRequestInput, DataServiceWrapper, } from "./wrappers/DataServiceWrapper"; import { MockDataPackageConfig, MockWrapper } from "./wrappers/MockWrapper"; import { OnDemandRequestWrapper } from "./wrappers/OnDemandRequestWrapper"; import { SimpleNumericMockConfig, SimpleNumericMockWrapper, } from "./wrappers/SimpleMockNumericWrapper"; export class WrapperBuilder { constructor(private baseContract: T) {} static wrap(contract: T): WrapperBuilder { return new WrapperBuilder(contract); } usingDataService(dataPackagesRequestInput: DataPackagesRequestInput): T { return new DataServiceWrapper( dataPackagesRequestInput ).overwriteEthersContract(this.baseContract); } usingMockDataPackages(mockDataPackages: MockDataPackageConfig[]): T { return new MockWrapper(mockDataPackages).overwriteEthersContract( this.baseContract ); } usingSimpleNumericMock(simpleNumericMockConfig: SimpleNumericMockConfig): T { return new SimpleNumericMockWrapper( simpleNumericMockConfig ).overwriteEthersContract(this.baseContract); } usingOnDemandRequest(nodeUrls: string[], scoreType: ScoreType): T { return new OnDemandRequestWrapper( { signer: this.baseContract.signer, scoreType, }, nodeUrls ).overwriteEthersContract(this.baseContract); } usingDataPackages(dataPackages: DataPackagesResponse) { return new DataPackagesWrapper(dataPackages).overwriteEthersContract( this.baseContract ); } }