import { CampaignModel } from "../models/CampaignModel"; import { CampaignGroup, ChoiceRequest, RequestInventorySource } from "../models"; import BidfloorStep from "../steps/bidfloor/bidfloor.step"; import { StepBuilder } from "../steps/stepBuilder"; import { Step } from "../steps/step"; import Funnel from "./funnel"; import { headerBiddingRequestSchema } from "../controllers/validation/InternalRequestValidation"; import { StepFactory } from "../steps/stepFactory"; import { KafkaConnector } from "../models/connector/KafkaProducer"; class HeaderBiddingFunnel extends Funnel { private readonly bidFloorStep: Step; constructor( campaignModel: CampaignModel, stepFactory: StepFactory, kafkaRequestProducer: KafkaConnector | null ) { super( RequestInventorySource.HEADER_BIDDING, campaignModel, stepFactory, kafkaRequestProducer, headerBiddingRequestSchema ); this.bidFloorStep = new StepBuilder(new BidfloorStep(campaignModel)).kafka().metrics().build(); } async chooseAdCampaigns(request: ChoiceRequest) { await this.runSteps( [ this.stepFactory.getAllowedCampaignGroupsStep( CampaignGroup.Managed | CampaignGroup.Programmatic ), this.stepFactory.dvFraudStep, this.stepFactory.deviceFraudIasStep, this.stepFactory.publisherFraudIasStep, this.stepFactory.brandSafetyDvStep, this.stepFactory.brandSafetyIasStep, this.stepFactory.brandSuitabilityIasStep, this.stepFactory.bypassNormalFlowStep, this.stepFactory.orderingStep, this.stepFactory.bidFloorStep, this.stepFactory.speedThresholdStep, this.stepFactory.priorityStep, this.stepFactory.programmaticEnabledStep, this.stepFactory.programmaticIVTStep, this.stepFactory.programmaticResponseStep as Step, this.stepFactory.campaignSizeStep, ], request ); } } export default HeaderBiddingFunnel;