@@ -13,7 +13,7 @@ import {
1313} from '../../advertising/external-ads' ;
1414import { basicAuth } from '../../middlewares/basic-auth.middleware' ;
1515import { addObjectStorageMethodsToRouter , withBodyValidation , withExceptionHandler } from '../../utils/express-helpers' ;
16- import { transformValues } from '../../utils/helpers' ;
16+ import { isDefined , transformValues } from '../../utils/helpers' ;
1717import {
1818 nonEmptyStringsListSchema ,
1919 hostnamesListSchema ,
@@ -72,17 +72,36 @@ import {
7272 * type: array
7373 * items:
7474 * type: string
75+ * parentDepth:
76+ * type: integer
77+ * minimum: 0
78+ * default: 0
79+ * AdByProviderSelector:
80+ * oneOf:
81+ * - type: string
82+ * - type: object
83+ * required:
84+ * - selector
85+ * - parentDepth
86+ * properties:
87+ * selector:
88+ * type: string
89+ * parentDepth:
90+ * type: integer
7591 * AdProvidersDictionary:
7692 * type: object
7793 * additionalProperties:
7894 * type: array
7995 * items:
80- * type: string
96+ * $ref: '#/components/schemas/AdByProviderSelector'
8197 * example:
8298 * google:
8399 * - '#Ads_google_bottom_wide'
84100 * - '.GoogleAdInfo'
85101 * - 'a[href^="https://googleads.g.doubleclick.net/pcs/click"]'
102+ * persona:
103+ * - selector: "a.persona-product"
104+ * parentDepth: 1
86105 * AdProvidersInputsDictionary:
87106 * type: object
88107 * additionalProperties:
@@ -366,11 +385,13 @@ addObjectStorageMethodsToRouter<AdProvidersByDomainRule[]>(adProvidersRouter, {
366385 * schema:
367386 * type: array
368387 * items:
369- * type: string
388+ * $ref: '#/components/schemas/AdByProviderSelector'
370389 * example:
371390 * - '#Ads_google_bottom_wide'
372391 * - '.GoogleAdInfo'
373392 * - 'a[href^="https://googleads.g.doubleclick.net/pcs/click"]'
393+ * - selector: "a.persona-product"
394+ * parentDepth: 1
374395 * '500':
375396 * $ref: '#/components/responses/ErrorResponse'
376397 * /api/slise-ad-rules/providers:
@@ -446,12 +467,20 @@ const transformAdProviderSelectorsRules = (rules: AdProviderSelectorsRule[], req
446467 Array . from (
447468 new Set (
448469 filterByVersion ( rules , req . query . extVersion as string | undefined )
449- . map ( ( { selectors } ) => selectors )
470+ . map ( ( { selectors, parentDepth } ) =>
471+ isDefined ( parentDepth ) && parentDepth > 0 ? { selector : selectors . join ( ', ' ) , parentDepth } : selectors
472+ )
450473 . flat ( )
451474 )
452475 ) ;
453476
454- addObjectStorageMethodsToRouter < AdProviderSelectorsRule [ ] , Record < string , string [ ] > , string [ ] > ( adProvidersRouter , {
477+ type AdByProviderSelector = string | { selector : string ; parentDepth : number } ;
478+
479+ addObjectStorageMethodsToRouter <
480+ AdProviderSelectorsRule [ ] ,
481+ Record < string , AdByProviderSelector [ ] > ,
482+ AdByProviderSelector [ ]
483+ > ( adProvidersRouter , {
455484 path : '/' ,
456485 methods : adProvidersMethods ,
457486 keyName : 'providerId' ,
0 commit comments