import { Campaign, CampaignGroup, ChoiceRequest } from "../../models"; import { StepResult } from "../stepResult"; import { MsAuctionService } from "../../services/auction/MsAuction.service"; import logger from "../../utils/logger"; import { BucketSet } from "../../services/metric.service"; import { AbstractStep } from "../abstractStep"; class ProgrammaticResponseStep extends AbstractStep { private msAuctionService: MsAuctionService; constructor(msAuctionService: MsAuctionService) { super("programmatic_response"); this.metricBucket = BucketSet.around100ms; this.autoPassCampaignGroup = CampaignGroup.Managed | CampaignGroup.Marketplace | CampaignGroup.Fallback; this.msAuctionService = msAuctionService; } async run(request: ChoiceRequest): Promise { const result = new StepResult(); const campaign = await this.makeAuctionCall(request, request.campaigns); if (campaign) { result.passCampaigns(campaign); } return result; } private async makeAuctionCall( request: ChoiceRequest, programmaticCampaigns: Campaign[] ): Promise { try { return await this.msAuctionService.getAuctionCampaign( request, programmaticCampaigns, "fixed_price" ); } catch (err: any) { logger.error(err, "[FIXED_PRICE] Error to call auction endpoint"); } return null; } } export default ProgrammaticResponseStep;