import { ChoiceRequest, CampaignGroup } from "../../models"; import { FeatureConfigService } from "../../services/FeatureConfig.service"; import logger from "../../utils/logger"; import { AbstractStep } from "../abstractStep"; import { StepResult } from "../stepResult"; class BypassNormalFlowStep extends AbstractStep { featureConfigService: FeatureConfigService; constructor() { super("bypass_normal_flow"); this.autoPassCampaignGroup = CampaignGroup.Marketplace | CampaignGroup.Fallback; this.featureConfigService = FeatureConfigService.getInstance(); } async run(request: ChoiceRequest): Promise { const result = new StepResult(); if (!this.shouldBypassNormalFlow(request)) { result.passCampaigns(...request.campaigns); } return result; } protected shouldBypassNormalFlow(request: ChoiceRequest): boolean { const bypassingAssets: string[] = this.featureConfigService.getParameterValueAsStringList( request, "ms-choices.bypass-normal-flow-assets", ",", [] ); const shouldBypass = !!request.app?.bundle_id && bypassingAssets.includes(request.app?.bundle_id); logger.debug( () => `[${request.inventory_source}] bundleId ${request.app?.bundle_id} ${ shouldBypass ? "bypasses" : "not bypasses" } normal flow` ); return shouldBypass; } } export default BypassNormalFlowStep;