@@ -15,6 +15,8 @@ import { timedAuctionHook } from "../../src/utils/perfMetrics.ts";
1515const MODULE_NAME = 'shapingRulesModule' ;
1616const STORAGE_KEY = 'rules_module_config' ;
1717
18+ let unregisterFunctions : Array < ( ) => void > = [ ] ;
19+
1820let rulesConfig : ModuleConfig = {
1921 endpoint : {
2022 method : 'GET' ,
@@ -101,7 +103,7 @@ export function evaluateConfig(context, rulesJson) {
101103 }
102104}
103105
104- function assignModelGroups ( rulesets : RuleSet [ ] ) {
106+ export function assignModelGroups ( rulesets : RuleSet [ ] ) {
105107 for ( const ruleset of rulesets ) {
106108 const { modelGroups } = ruleset ;
107109 if ( ! modelGroups ?. length ) continue ;
@@ -149,7 +151,7 @@ function evaluateRules(rules, schema, stage, analyticsKey) {
149151 }
150152}
151153
152- function evaluateSchema ( func , args , context ) {
154+ export function evaluateSchema ( func , args , context ) {
153155 switch ( func ) {
154156 case 'percent' :
155157 return ( ) => Math . random ( ) * 100 < args [ 0 ] ;
@@ -231,9 +233,18 @@ function evaluateFunction(func, args, schema, conditions, stage, analyticsKey) {
231233 switch ( func ) {
232234 case 'excludeBidders' :
233235 return ( ) => {
234- const activity = stage === 'processed-auction-request' ? ACTIVITY_FETCH_BIDS : ACTIVITY_ADD_BID_RESPONSE ;
236+ let activity ;
237+ switch ( stage ) {
238+ case 'processed-auction-request' :
239+ activity = ACTIVITY_FETCH_BIDS ;
240+ break ;
241+ case 'processed-auction' :
242+ default :
243+ activity = ACTIVITY_ADD_BID_RESPONSE ;
244+ break ;
245+ }
235246 args . forEach ( ( { bidders, analyticsValue, seatnonbid} ) => {
236- registerActivityControl ( activity , MODULE_NAME , ( params ) => {
247+ const unregister = registerActivityControl ( activity , MODULE_NAME , ( params ) => {
237248 let conditionMet = true ;
238249 for ( const [ index , schemaEntry ] of schema . entries ( ) ) {
239250 const func = evaluateSchema ( schemaEntry . function , schemaEntry . args || [ ] , params ) ;
@@ -249,10 +260,11 @@ function evaluateFunction(func, args, schema, conditions, stage, analyticsKey) {
249260 setLabels ( { [ analyticsKey ] : analyticsValue } ) ;
250261 }
251262 return { allow : finalCondition , reason : `Bidder ${ params . bidder } excluded by rules module` } ;
252- } )
263+ } ) ;
264+ unregisterFunctions . push ( unregister ) ;
253265 } ) ;
254266 }
255- case 'logATag ' :
267+ case 'logAtag ' :
256268 return ( ) => {
257269 // @todo : is that enough?
258270 setLabels ( { [ analyticsKey ] : args . analyticsValue } ) ;
@@ -326,4 +338,18 @@ function init(rules: ModuleConfig) {
326338 getHook ( 'requestBids' ) . before ( requestBidsHook , 50 ) ;
327339}
328340
341+ export function reset ( ) {
342+ unregisterFunctions . forEach ( unregister => {
343+ if ( unregister && typeof unregister === 'function' ) {
344+ unregister ( ) ;
345+ }
346+ } ) ;
347+ unregisterFunctions = [ ] ;
348+ try {
349+ getHook ( 'requestBids' ) . getHooks ( { hook : requestBidsHook } ) . remove ( ) ;
350+ } catch ( e ) {
351+ }
352+ setLabels ( { } ) ;
353+ }
354+
329355config . getConfig ( 'rules' , config => init ( config . rules ) ) ;
0 commit comments