Skip to content

Commit 3a5a915

Browse files
authored
TW-1399: New ads providers to replace (#157)
* TW-1442 Add API for sites blacklist for replacing ads * TW-1442 Change response types for URLs blacklist * TW-1399 Add parentDepth parameter for selectors by ads providers
1 parent 8f706e6 commit 3a5a915

File tree

3 files changed

+37
-6
lines changed

3 files changed

+37
-6
lines changed

src/advertising/external-ads.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ export interface AdProvidersByDomainRule extends ExtVersionConstraints {
132132

133133
export interface AdProviderSelectorsRule extends ExtVersionConstraints {
134134
selectors: string[];
135+
parentDepth?: number;
135136
}
136137

137138
export interface AdProviderForAllSitesRule extends ExtVersionConstraints {

src/routers/slise-ad-rules/providers.ts

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
} from '../../advertising/external-ads';
1414
import { basicAuth } from '../../middlewares/basic-auth.middleware';
1515
import { addObjectStorageMethodsToRouter, withBodyValidation, withExceptionHandler } from '../../utils/express-helpers';
16-
import { transformValues } from '../../utils/helpers';
16+
import { isDefined, transformValues } from '../../utils/helpers';
1717
import {
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',

src/utils/schemas.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ export const adProvidersByDomainsRulesDictionarySchema: IObjectSchema<Record<str
206206

207207
const adProvidersSelectorsRuleSchema = objectSchema().shape({
208208
selectors: cssSelectorsListSchema.clone().required(),
209-
extVersion: versionRangeSchema.clone().required()
209+
extVersion: versionRangeSchema.clone().required(),
210+
parentDepth: numberSchema().integer().min(0).default(0)
210211
});
211212

212213
export const adProvidersDictionarySchema: IObjectSchema<Record<string, AdProviderSelectorsRule[]>> =

0 commit comments

Comments
 (0)