@surfside/ads-core 2.0.22 → 2.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/lib/cjs/BuildInfo.js +1 -1
- package/lib/cjs/BuildInfo.js.map +1 -1
- package/lib/cjs/Init.js +474 -0
- package/lib/cjs/Init.js.map +1 -0
- package/lib/cjs/helpers/TelemetryCollector.js +72 -0
- package/lib/cjs/helpers/TelemetryCollector.js.map +1 -0
- package/lib/cjs/helpers/Types.js +3 -0
- package/lib/cjs/helpers/Types.js.map +1 -0
- package/lib/cjs/helpers/response/Html.js +37 -0
- package/lib/cjs/helpers/response/Html.js.map +1 -0
- package/lib/cjs/helpers/response/Products.js +174 -0
- package/lib/cjs/helpers/response/Products.js.map +1 -0
- package/lib/cjs/services/Product.js.map +1 -1
- package/lib/esm/BuildInfo.js +1 -1
- package/lib/esm/BuildInfo.js.map +1 -1
- package/lib/esm/Init.js +455 -0
- package/lib/esm/Init.js.map +1 -0
- package/lib/esm/helpers/TelemetryCollector.js +67 -0
- package/lib/esm/helpers/TelemetryCollector.js.map +1 -0
- package/lib/esm/helpers/Types.js +2 -0
- package/lib/esm/helpers/Types.js.map +1 -0
- package/lib/esm/helpers/response/Html.js +33 -0
- package/lib/esm/helpers/response/Html.js.map +1 -0
- package/lib/esm/helpers/response/Products.js +169 -0
- package/lib/esm/helpers/response/Products.js.map +1 -0
- package/lib/esm/services/Product.js.map +1 -1
- package/lib/types/Init.d.ts +147 -0
- package/lib/types/helpers/TelemetryCollector.d.ts +25 -0
- package/lib/types/helpers/Types.d.ts +1 -0
- package/lib/types/helpers/response/Html.d.ts +2 -0
- package/lib/types/helpers/response/Products.d.ts +8 -0
- package/package.json +47 -47
package/lib/esm/Init.js
ADDED
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { PROD_SPONSORED_PRODUCT_FEED, PROD_RECOMMENDED_PRODUCT_FEED, PROD_RECOMMENDER_SERVICE, PROD_BIDDER, PROD_TELEMETRY_SERVICE, SurfsideAdsDisabledError, LocationExcludedError } from './Api';
|
|
2
|
+
import Handlebars from 'handlebars/runtime';
|
|
3
|
+
import { GetHelpers, BuildAllSponsoredProductCardResponses, GenerateSponsoredProductCardResponse, StartRequest, StartNative, DefaultNative, BuildSponsoredCarousel, BuildSponsoredCarouselFromInitialBid, BuildHybridCarouselFromInitialBid, BuildRecommendedCarousel, BuildHybridCarousel, GetBrowserInfo, SSRTelemetryCollector, BuildBannerResponseCore, BuildVideoResponseCore, BuildAllResponsesCore, BuildSimpleCarousel, WindowFromUrl, BuildAllBannersCore, BuildAllVideosCore, BuildAllSimpleCarousels } from './helpers';
|
|
4
|
+
import { Err, GetDevice, GetGeo, GetAllSponsoredProducts, GetAllSponsoredBrandProducts, GetRecommendedProduct, NoRecommendationsError, GenerateTopProducts, GenerateForYou, GeneratePreviousPurchases, EvaluateHandlebarsClickthroughTemplate, EvaluateHandlebarsProductCardTemplate, RequestBids, NoBidsError, InitTrackerService, GetDynamicZone, BuildDynamicZoneRequest, Ok, Ctx, GetValue, WrapValue, WrapValueAsync, CreateTelemetryLogger, LoadConfigurationFile, TryDoFlatAsync, LoadGlobalCategoryConfiguration, CreateCategoryConfiguration, LoadCompiledConfiguration, Memoize, MemoizeAsync, Cache, CacheAsync, InitLogger } from './services';
|
|
5
|
+
import { FilterBots, FilterBotsAsyncGenerator } from './services/BotFiltering';
|
|
6
|
+
import { MapCategories } from './services/Category';
|
|
7
|
+
/* =====
|
|
8
|
+
* These are the new initialization functions for Surfside ads. The old ones
|
|
9
|
+
* are being kept for legacy users but they're all deprecated. Move to the new ones!
|
|
10
|
+
*/
|
|
11
|
+
const TLS = (url) => 'https:' + url;
|
|
12
|
+
export const MemoizeOverride = (time = {}) => {
|
|
13
|
+
const cache = new Map();
|
|
14
|
+
return (config, original) => {
|
|
15
|
+
const memoized = Memoize(original, { ...time, cache });
|
|
16
|
+
return Ok(memoized);
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export const MemoizeOverrideAsync = (time = {}) => {
|
|
20
|
+
const cache = new Map();
|
|
21
|
+
return async (config, original) => {
|
|
22
|
+
const memoized = await MemoizeAsync(original, { ...time, cache });
|
|
23
|
+
return Ok(memoized);
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export const CacheOverride = (timeout = {}) => {
|
|
27
|
+
const cache = [-Infinity, undefined];
|
|
28
|
+
return (config, original) => {
|
|
29
|
+
const cached = Cache(original, { ...timeout, cache });
|
|
30
|
+
return Ok(cached);
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export const AsyncCacheOverride = (timeout = {}) => {
|
|
34
|
+
return (config, original) => {
|
|
35
|
+
const cached = CacheAsync(original, timeout);
|
|
36
|
+
return Ok(cached);
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
;
|
|
40
|
+
;
|
|
41
|
+
export function CreateSurfAdsCore(config) {
|
|
42
|
+
const { handlebars, mobile, navigator, accountId, siteId, logger, channelId, locationId, userId, windowInfo, screen, overrides, configuration, geo, device } = config;
|
|
43
|
+
const log = Ctx(config.logger)?.with('CreateSurfAdsCore');
|
|
44
|
+
log?.info('Creating Surfside ads core');
|
|
45
|
+
log?.info('time???', config.logger.time === undefined);
|
|
46
|
+
const ua = navigator.userAgent;
|
|
47
|
+
if (configuration.settings.disableSurfsideAds === true) {
|
|
48
|
+
return Err(new SurfsideAdsDisabledError);
|
|
49
|
+
}
|
|
50
|
+
if (configuration.settings.excludedLocations?.includes(locationId) === true) {
|
|
51
|
+
return Err(new LocationExcludedError(locationId));
|
|
52
|
+
}
|
|
53
|
+
/* == Initialize bid request metadata getters == */
|
|
54
|
+
const getDevice = () => WrapValue(device);
|
|
55
|
+
const getGeo = () => WrapValueAsync(geo);
|
|
56
|
+
/* == Initialize configuration Getter == */
|
|
57
|
+
const getConfiguration = () => WrapValueAsync(configuration);
|
|
58
|
+
const getValueOrLog = (t) => {
|
|
59
|
+
if (t === undefined) {
|
|
60
|
+
// Value wasn't passed, this isn't an error, it's the default state
|
|
61
|
+
logger?.debug('Using default');
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
else if (!t.ok) {
|
|
65
|
+
logger?.warn('Failed to override service. Got ', t.error);
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
logger?.debug('Using override');
|
|
70
|
+
return t.value;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
/* == Initialize product feed == */
|
|
74
|
+
const defaultGetAllSponsoredProducts = GetAllSponsoredProducts.bind(undefined, log, TLS(PROD_SPONSORED_PRODUCT_FEED), configuration, accountId, locationId);
|
|
75
|
+
const getAllSponsoredProducts = getValueOrLog(overrides?.services?.getAllSponsoredProducts?.(config, defaultGetAllSponsoredProducts)) ?? defaultGetAllSponsoredProducts;
|
|
76
|
+
const defaultGetAllSponsoredBrandProducts = GetAllSponsoredBrandProducts.bind(undefined, log, TLS(PROD_SPONSORED_PRODUCT_FEED), configuration, accountId, locationId);
|
|
77
|
+
const getAllSponsoredBrandProducts = getValueOrLog(overrides?.services?.getAllSponsoredBrandProducts?.(config, defaultGetAllSponsoredBrandProducts)) ?? defaultGetAllSponsoredBrandProducts;
|
|
78
|
+
const defaultGetRecommendedProduct = GetRecommendedProduct.bind(undefined, log, TLS(PROD_RECOMMENDED_PRODUCT_FEED), configuration, accountId, locationId);
|
|
79
|
+
const getRecommendedProduct = getValueOrLog(overrides?.services?.getRecommendedProduct?.(config, defaultGetRecommendedProduct)) ?? defaultGetRecommendedProduct;
|
|
80
|
+
const getRecommendedProductFiltered = FilterBots(log, ua, getRecommendedProduct, async () => Err(new NoRecommendationsError()));
|
|
81
|
+
const defaultGenerateTopProducts = GenerateTopProducts.bind(undefined, log, getRecommendedProductFiltered, TLS(PROD_RECOMMENDER_SERVICE), accountId, siteId, locationId);
|
|
82
|
+
const generateTopProducts = getValueOrLog(overrides?.services?.generateTopProducts?.(config, defaultGenerateTopProducts)) ?? defaultGenerateTopProducts;
|
|
83
|
+
const defaultGenerateForYou = GenerateForYou.bind(undefined, log, getRecommendedProductFiltered, TLS(PROD_RECOMMENDER_SERVICE), accountId, siteId, locationId, userId);
|
|
84
|
+
const generateForYou = getValueOrLog(overrides?.services?.generateForYou?.(config, defaultGenerateForYou)) ?? defaultGenerateForYou;
|
|
85
|
+
const defaultGeneratePreviousPurchases = GeneratePreviousPurchases.bind(undefined, log, getRecommendedProductFiltered, TLS(PROD_RECOMMENDER_SERVICE), accountId, siteId, locationId, userId);
|
|
86
|
+
const generatePreviousPurchases = getValueOrLog(overrides?.services?.generatePreviousPurchases?.(config, defaultGeneratePreviousPurchases)) ?? defaultGeneratePreviousPurchases;
|
|
87
|
+
const defaultBuildAllSponsoredProductCardResponses = BuildAllSponsoredProductCardResponses.bind(undefined, log, getAllSponsoredProducts, getAllSponsoredBrandProducts, windowInfo, configuration);
|
|
88
|
+
const buildAllSponsoredProductCardResponses = getValueOrLog(overrides?.services?.buildAllSponsoredProductCardResponses?.(config, defaultBuildAllSponsoredProductCardResponses)) ?? defaultBuildAllSponsoredProductCardResponses;
|
|
89
|
+
const generateTopProductsFiltered = FilterBotsAsyncGenerator(log, ua, generateTopProducts);
|
|
90
|
+
const generateForYouFiltered = FilterBotsAsyncGenerator(log, ua, generateForYou);
|
|
91
|
+
const generatePreviousPurchasesFiltered = FilterBotsAsyncGenerator(log, ua, generatePreviousPurchases);
|
|
92
|
+
/* == Initialize product card generators == */
|
|
93
|
+
const defaultGenerateSponsoredProductCardResponse = GenerateSponsoredProductCardResponse.bind(undefined, log, getAllSponsoredProducts, getAllSponsoredBrandProducts, windowInfo, configuration);
|
|
94
|
+
const generateSponsoredProductCardResponse = getValueOrLog(overrides?.services?.generateSponsoredProductCardResponse?.(config, defaultGenerateSponsoredProductCardResponse)) ?? defaultGenerateSponsoredProductCardResponse;
|
|
95
|
+
/* == Initialize handlebars evaluator functions == */
|
|
96
|
+
const defaultEvaluateClickthroughTemplate = EvaluateHandlebarsClickthroughTemplate.bind(undefined, log, windowInfo, configuration);
|
|
97
|
+
const evaluateClickthroughTemplate = getValueOrLog(overrides?.services?.evaluateClickthroughTemplate?.(config, defaultEvaluateClickthroughTemplate)) ?? defaultEvaluateClickthroughTemplate;
|
|
98
|
+
const defaultEvaluateProductCardTemplate = EvaluateHandlebarsProductCardTemplate.bind(undefined, log, windowInfo, configuration);
|
|
99
|
+
const evaluateProductCardTemplate = getValueOrLog(overrides?.services?.evaluateProductCardTemplate?.(config, defaultEvaluateProductCardTemplate)) ?? defaultEvaluateProductCardTemplate;
|
|
100
|
+
/* == Initialize category mapper */
|
|
101
|
+
const defaultMapCategories = ((categories) => MapCategories(log, categories, windowInfo.href, configuration.category));
|
|
102
|
+
const mapCategories = getValueOrLog(overrides?.services?.mapCategories?.(config, defaultMapCategories)) ?? defaultMapCategories;
|
|
103
|
+
/* == Initialize request builder */
|
|
104
|
+
const defaultStartRequest = StartRequest.bind(undefined, log, accountId, siteId, channelId, locationId, device, geo, userId, mapCategories, configuration.settings.strictCategoryMatching);
|
|
105
|
+
/*
|
|
106
|
+
This one is a little tricky looking, so here's how you would override it:
|
|
107
|
+
|
|
108
|
+
overrides: {
|
|
109
|
+
services: {
|
|
110
|
+
startRequest: (config, startRequest) => (zoneId: string, id?: string) => {
|
|
111
|
+
startRequest(zoneId, id)
|
|
112
|
+
.withApp({ /* ... etc ... *\/ })
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
It's different from the over override functions because it takes the bound startRequest helper.
|
|
118
|
+
This isn't truly overriding a service, but this allows any user to inject a set of default parameters
|
|
119
|
+
for their own bid requests rather than using ours (i.e, the app and site defaults)
|
|
120
|
+
*/
|
|
121
|
+
const startRequest = getValueOrLog(overrides?.services?.startRequest?.(config, defaultStartRequest)) ??
|
|
122
|
+
((zoneId, id) => defaultStartRequest(zoneId, id)
|
|
123
|
+
.withApp({
|
|
124
|
+
bundle: windowInfo.host,
|
|
125
|
+
name: windowInfo.host,
|
|
126
|
+
id: siteId,
|
|
127
|
+
domain: windowInfo.host,
|
|
128
|
+
publisher: {
|
|
129
|
+
domain: windowInfo.host,
|
|
130
|
+
}
|
|
131
|
+
})
|
|
132
|
+
.withSite({
|
|
133
|
+
name: windowInfo.host,
|
|
134
|
+
id: siteId,
|
|
135
|
+
kwarray: [],
|
|
136
|
+
mobile: mobile ? 1 : 0,
|
|
137
|
+
page: windowInfo.href,
|
|
138
|
+
domain: windowInfo.host,
|
|
139
|
+
publisher: {
|
|
140
|
+
id: siteId,
|
|
141
|
+
name: windowInfo.host,
|
|
142
|
+
domain: windowInfo.host,
|
|
143
|
+
},
|
|
144
|
+
ref: '',
|
|
145
|
+
search: windowInfo.search
|
|
146
|
+
}));
|
|
147
|
+
const startNative = StartNative.bind(undefined, log);
|
|
148
|
+
const defaultNative = DefaultNative.bind(undefined, log);
|
|
149
|
+
const defaultRequestBids = RequestBids.bind(undefined, log, TLS(PROD_BIDDER), accountId, siteId, locationId, channelId, configuration.settings.excludedZones);
|
|
150
|
+
const requestBidsFiltered = FilterBots(log, ua, getValueOrLog(overrides?.services?.requestBids?.(config, defaultRequestBids)) ?? defaultRequestBids, async (request) => Err(new NoBidsError(request)));
|
|
151
|
+
/* == Initialize Trackers == */
|
|
152
|
+
const defaultTrackerService = InitTrackerService(log, accountId, siteId, locationId, channelId, windowInfo, ua, geo, device, userId, 'edge.surfside.io');
|
|
153
|
+
const trackerService = getValueOrLog(overrides?.services?.trackerService?.(config, defaultTrackerService)) ?? defaultTrackerService;
|
|
154
|
+
/* == Initialize response builders == */
|
|
155
|
+
const buildSponsoredCarousel = BuildSponsoredCarousel.bind(undefined, log, requestBidsFiltered, generateSponsoredProductCardResponse);
|
|
156
|
+
const buildSponsoredCarouselFromInitialBid = BuildSponsoredCarouselFromInitialBid.bind(undefined, log, requestBidsFiltered, generateSponsoredProductCardResponse);
|
|
157
|
+
const buildHybridCarouselFromInitialBid = BuildHybridCarouselFromInitialBid.bind(undefined, log, evaluateClickthroughTemplate, requestBidsFiltered, generateSponsoredProductCardResponse, generateTopProductsFiltered, generatePreviousPurchasesFiltered, generateForYouFiltered, userId, trackerService, configuration.settings.excludedZones);
|
|
158
|
+
const buildRecommendedCarousel = BuildRecommendedCarousel.bind(undefined, log, evaluateClickthroughTemplate, generateTopProductsFiltered, generatePreviousPurchasesFiltered, generateForYouFiltered, userId, trackerService);
|
|
159
|
+
const buildHybridCarousel = BuildHybridCarousel.bind(undefined, log, evaluateClickthroughTemplate, requestBidsFiltered, generateSponsoredProductCardResponse, generateTopProductsFiltered, generatePreviousPurchasesFiltered, generateForYouFiltered, userId, trackerService, configuration.settings.excludedZones);
|
|
160
|
+
/* == Initialize Dynamic Zone services == */
|
|
161
|
+
const defaultGetDynamicZone = GetDynamicZone.bind(undefined, log, configuration);
|
|
162
|
+
const getDynamicZone = getValueOrLog(overrides?.services?.getDynamicZone?.(config, defaultGetDynamicZone)) ?? defaultGetDynamicZone;
|
|
163
|
+
const buildDynamicZoneRequest = BuildDynamicZoneRequest.bind(undefined, log, startRequest, defaultNative, screen);
|
|
164
|
+
const buildBannerResponseCore = BuildBannerResponseCore.bind(undefined, log, windowInfo, configuration);
|
|
165
|
+
const buildVideoResponseCore = BuildVideoResponseCore.bind(undefined, log, windowInfo, configuration);
|
|
166
|
+
const buildSimpleCarousel = BuildSimpleCarousel.bind(undefined, log, windowInfo, getAllSponsoredBrandProducts, configuration);
|
|
167
|
+
const buildAllResponsesCore = BuildAllResponsesCore.bind(undefined, log, windowInfo, configuration, getAllSponsoredBrandProducts);
|
|
168
|
+
const buildAllBannersCore = BuildAllBannersCore.bind(undefined, log, windowInfo, configuration);
|
|
169
|
+
const buildAllVideosCore = BuildAllVideosCore.bind(undefined, log, windowInfo, configuration);
|
|
170
|
+
const buildAllSimpleCarousels = BuildAllSimpleCarousels.bind(undefined, log, windowInfo, getAllSponsoredBrandProducts, configuration);
|
|
171
|
+
return Ok({
|
|
172
|
+
getDevice,
|
|
173
|
+
device,
|
|
174
|
+
getGeo,
|
|
175
|
+
geo,
|
|
176
|
+
configuration,
|
|
177
|
+
getConfiguration,
|
|
178
|
+
generateCategories: mapCategories,
|
|
179
|
+
mapCategories,
|
|
180
|
+
handlebars,
|
|
181
|
+
requestBids: requestBidsFiltered,
|
|
182
|
+
startRequest,
|
|
183
|
+
startNative,
|
|
184
|
+
defaultNative,
|
|
185
|
+
getAllSponsoredProducts,
|
|
186
|
+
getRecommendedProduct: getRecommendedProductFiltered,
|
|
187
|
+
generateTopProducts: generateTopProductsFiltered,
|
|
188
|
+
generateForYou: generateForYouFiltered,
|
|
189
|
+
generatePreviousPurchases: generatePreviousPurchasesFiltered,
|
|
190
|
+
buildAllSponsoredProductCardResponses,
|
|
191
|
+
generateSponsoredProductCardResponse,
|
|
192
|
+
evaluateProductCardTemplate,
|
|
193
|
+
evaluateClickthroughTemplate,
|
|
194
|
+
buildSponsoredCarousel,
|
|
195
|
+
buildSponsoredCarouselFromInitialBid,
|
|
196
|
+
buildHybridCarousel,
|
|
197
|
+
buildHybridCarouselFromInitialBid,
|
|
198
|
+
buildRecommendedCarousel,
|
|
199
|
+
getDynamicZone,
|
|
200
|
+
buildDynamicZoneRequest,
|
|
201
|
+
buildBannerResponseCore,
|
|
202
|
+
buildVideoResponseCore,
|
|
203
|
+
buildSimpleCarousel,
|
|
204
|
+
buildAllResponsesCore,
|
|
205
|
+
buildAllBannersCore,
|
|
206
|
+
buildAllVideosCore,
|
|
207
|
+
buildAllSimpleCarousels,
|
|
208
|
+
trackers: trackerService
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const InitializeHandlebarsWithHelpers = (logger, helpers) => {
|
|
212
|
+
const handlebars = Handlebars.create();
|
|
213
|
+
const log = Ctx(logger)?.with('HandlebarInit');
|
|
214
|
+
log?.info('Initializing handlebars helpers');
|
|
215
|
+
for (const name in helpers) {
|
|
216
|
+
const helper = helpers[name];
|
|
217
|
+
if (helper === undefined) {
|
|
218
|
+
log?.warn(`Helper ${helper} was missing! Skipping`);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
log?.debug('Adding Helper: ', name);
|
|
222
|
+
handlebars.registerHelper(name, helper);
|
|
223
|
+
}
|
|
224
|
+
return handlebars;
|
|
225
|
+
};
|
|
226
|
+
export const LoadSurfAdsCoreHandlebarsDependencies = (logger, windowInfo) => {
|
|
227
|
+
const handlebarsHelpers = GetHelpers(windowInfo);
|
|
228
|
+
const handlebars = InitializeHandlebarsWithHelpers(logger, handlebarsHelpers);
|
|
229
|
+
return [handlebars, handlebarsHelpers];
|
|
230
|
+
};
|
|
231
|
+
;
|
|
232
|
+
export const LoadSurfAdsCoreConfigurationDependencies = async (config) => {
|
|
233
|
+
if (config.overrides?.dependencies?.configuration !== undefined) {
|
|
234
|
+
return Ok(config.overrides.dependencies.configuration);
|
|
235
|
+
}
|
|
236
|
+
const fileRes = TryDoFlatAsync(() => {
|
|
237
|
+
if (config.overrides?.services?.loadConfigurationFile === undefined) {
|
|
238
|
+
return LoadConfigurationFile(config.logger, config.accountId, config.siteId);
|
|
239
|
+
}
|
|
240
|
+
const fnRes = config.overrides.services.loadConfigurationFile(config, LoadConfigurationFile.bind(undefined, config.logger));
|
|
241
|
+
if (!fnRes.ok) {
|
|
242
|
+
return LoadConfigurationFile(config.logger, config.accountId, config.siteId);
|
|
243
|
+
}
|
|
244
|
+
return fnRes.value(config.accountId, config.siteId);
|
|
245
|
+
});
|
|
246
|
+
const globalCategoryRes = TryDoFlatAsync(() => {
|
|
247
|
+
if (config.overrides?.services?.loadGlobalCategoryConfiguration === undefined) {
|
|
248
|
+
return LoadGlobalCategoryConfiguration(config.logger);
|
|
249
|
+
}
|
|
250
|
+
const fnRes = config.overrides.services.loadGlobalCategoryConfiguration(config, LoadGlobalCategoryConfiguration.bind(undefined, config.logger));
|
|
251
|
+
if (!fnRes.ok) {
|
|
252
|
+
return LoadGlobalCategoryConfiguration(config.logger);
|
|
253
|
+
}
|
|
254
|
+
return fnRes.value();
|
|
255
|
+
});
|
|
256
|
+
const [filePromiseSettledResult, globalCategorySettledResult] = await Promise.allSettled([fileRes, globalCategoryRes]);
|
|
257
|
+
if (filePromiseSettledResult.status === 'rejected') {
|
|
258
|
+
return Err(filePromiseSettledResult.reason);
|
|
259
|
+
}
|
|
260
|
+
if (globalCategorySettledResult.status === 'rejected') {
|
|
261
|
+
return Err(globalCategorySettledResult.reason);
|
|
262
|
+
}
|
|
263
|
+
const fileResult = filePromiseSettledResult.value;
|
|
264
|
+
const globalCategoryResult = globalCategorySettledResult.value;
|
|
265
|
+
if (!fileResult.ok) {
|
|
266
|
+
return fileResult;
|
|
267
|
+
}
|
|
268
|
+
if (!globalCategoryResult.ok) {
|
|
269
|
+
return globalCategoryResult;
|
|
270
|
+
}
|
|
271
|
+
const file = fileResult.value;
|
|
272
|
+
const globalCategories = globalCategoryResult.value;
|
|
273
|
+
const categoryConfigResult = CreateCategoryConfiguration(config.logger, globalCategories, file.category);
|
|
274
|
+
if (!categoryConfigResult.ok) {
|
|
275
|
+
return categoryConfigResult;
|
|
276
|
+
}
|
|
277
|
+
const categoryConfig = categoryConfigResult.value;
|
|
278
|
+
const compiledPublisherConfigurationResult = await LoadCompiledConfiguration(config.logger, file, config.handlebars, config.handlebarsHelpers);
|
|
279
|
+
if (!compiledPublisherConfigurationResult.ok) {
|
|
280
|
+
return compiledPublisherConfigurationResult;
|
|
281
|
+
}
|
|
282
|
+
const compiledPublisherConfiguration = compiledPublisherConfigurationResult.value;
|
|
283
|
+
return Ok({
|
|
284
|
+
...compiledPublisherConfiguration,
|
|
285
|
+
category: categoryConfig
|
|
286
|
+
});
|
|
287
|
+
};
|
|
288
|
+
;
|
|
289
|
+
export const LoadSurfAdsCoreGeoDependencies = (config) => config.overrides?.dependencies?.geo === undefined
|
|
290
|
+
? GetGeo(config.logger)
|
|
291
|
+
: WrapValueAsync(config.overrides?.dependencies.geo);
|
|
292
|
+
export const LoadSurfAdsCoreDeviceDependencies = (config) => config.overrides?.dependencies?.device === undefined
|
|
293
|
+
? GetValue(GetDevice(config.logger, config.screen, config.navigator, config.mobile))
|
|
294
|
+
: config.overrides.dependencies.device;
|
|
295
|
+
export const LoadSurfAdsCoreDependencies = async (config) => {
|
|
296
|
+
const { windowInfo, overrides, accountId, siteId, locationId, channelId, logger, screen, navigator, mobile } = config;
|
|
297
|
+
const device = LoadSurfAdsCoreDeviceDependencies({
|
|
298
|
+
logger,
|
|
299
|
+
navigator,
|
|
300
|
+
mobile,
|
|
301
|
+
screen,
|
|
302
|
+
overrides: config.overrides
|
|
303
|
+
});
|
|
304
|
+
const defaultTelemetryCollector = config.telemetry === true
|
|
305
|
+
? new SSRTelemetryCollector({
|
|
306
|
+
accountId,
|
|
307
|
+
siteId,
|
|
308
|
+
locationId,
|
|
309
|
+
channelId,
|
|
310
|
+
device,
|
|
311
|
+
tags: { accountId, siteId, locationId },
|
|
312
|
+
endpoint: TLS(PROD_TELEMETRY_SERVICE),
|
|
313
|
+
url: config.windowInfo.href
|
|
314
|
+
})
|
|
315
|
+
: undefined;
|
|
316
|
+
const telemetryCollectorOpt = config.telemetry === true
|
|
317
|
+
? config.overrides?.services?.createTelemetryCollector?.({ ...config, device }, defaultTelemetryCollector) ?? Ok(defaultTelemetryCollector)
|
|
318
|
+
: undefined;
|
|
319
|
+
const telemetryCollector = telemetryCollectorOpt !== undefined
|
|
320
|
+
? GetValue(telemetryCollectorOpt)
|
|
321
|
+
: undefined;
|
|
322
|
+
const log = logger !== undefined
|
|
323
|
+
? CreateTelemetryLogger(logger, telemetryCollector)
|
|
324
|
+
: undefined;
|
|
325
|
+
if (config.telemetry === true) {
|
|
326
|
+
log?.info('⏰ Using telemetry!\n' +
|
|
327
|
+
`${log.time !== undefined ? '✅' : '❌'} | log.time\n` +
|
|
328
|
+
`${telemetryCollector !== undefined ? '✅' : '❌'} | telemetryCollector`);
|
|
329
|
+
}
|
|
330
|
+
const [handlebars, handlebarsHelpers] = LoadSurfAdsCoreHandlebarsDependencies(log, windowInfo);
|
|
331
|
+
const configurationPromise = LoadSurfAdsCoreConfigurationDependencies({
|
|
332
|
+
logger: log,
|
|
333
|
+
accountId,
|
|
334
|
+
siteId,
|
|
335
|
+
handlebars,
|
|
336
|
+
handlebarsHelpers,
|
|
337
|
+
overrides
|
|
338
|
+
});
|
|
339
|
+
const geoPromise = LoadSurfAdsCoreGeoDependencies({
|
|
340
|
+
logger: log,
|
|
341
|
+
overrides
|
|
342
|
+
});
|
|
343
|
+
const dependencyPromisesSettled = await Promise.allSettled([
|
|
344
|
+
configurationPromise,
|
|
345
|
+
geoPromise
|
|
346
|
+
]);
|
|
347
|
+
const [configurationPromiseSettled, geoPromiseSettled] = dependencyPromisesSettled;
|
|
348
|
+
/* Check configuration rejection. This should never happen since exceptions are handled internally, but
|
|
349
|
+
* Promise.allSettled doesn't know that so we are being thorough here */
|
|
350
|
+
if (configurationPromiseSettled.status === 'rejected') {
|
|
351
|
+
return Err(new Error('Unknown promise rejection error when retrieving configuration. Got ' +
|
|
352
|
+
configurationPromiseSettled.reason.message));
|
|
353
|
+
}
|
|
354
|
+
/* Check the actual error now, if any */
|
|
355
|
+
const configurationResult = configurationPromiseSettled.value;
|
|
356
|
+
if (!configurationResult.ok) {
|
|
357
|
+
return configurationResult;
|
|
358
|
+
}
|
|
359
|
+
const configuration = configurationResult.value;
|
|
360
|
+
/* Do the same check with geo, except geo is allowed to fail as it's not strictly required for RTB, just targeting.
|
|
361
|
+
* if Geo fails, we may see reduced bid responses. */
|
|
362
|
+
const geo = (geoPromiseSettled.status === 'rejected')
|
|
363
|
+
? undefined
|
|
364
|
+
: GetValue(geoPromiseSettled.value);
|
|
365
|
+
return Ok({
|
|
366
|
+
handlebars,
|
|
367
|
+
geo,
|
|
368
|
+
configuration,
|
|
369
|
+
device,
|
|
370
|
+
telemetryCollector,
|
|
371
|
+
logger: log
|
|
372
|
+
});
|
|
373
|
+
};
|
|
374
|
+
export const LoadSurfAdsCore = async (config) => {
|
|
375
|
+
const { logger, overrides, windowInfo, accountId, siteId, navigator, mobile, ip, channelId, locationId, userId, screen } = config;
|
|
376
|
+
const dependencyResult = await LoadSurfAdsCoreDependencies(config);
|
|
377
|
+
if (!dependencyResult.ok) {
|
|
378
|
+
return dependencyResult;
|
|
379
|
+
}
|
|
380
|
+
const { handlebars, configuration, geo, device, logger: dependenciesLogger } = dependencyResult.value;
|
|
381
|
+
return CreateSurfAdsCore({
|
|
382
|
+
mobile,
|
|
383
|
+
handlebars,
|
|
384
|
+
navigator,
|
|
385
|
+
accountId,
|
|
386
|
+
siteId,
|
|
387
|
+
logger: dependenciesLogger ?? logger,
|
|
388
|
+
channelId,
|
|
389
|
+
locationId,
|
|
390
|
+
userId,
|
|
391
|
+
windowInfo,
|
|
392
|
+
screen,
|
|
393
|
+
configuration,
|
|
394
|
+
device,
|
|
395
|
+
geo,
|
|
396
|
+
ip,
|
|
397
|
+
overrides
|
|
398
|
+
});
|
|
399
|
+
};
|
|
400
|
+
export const LoadAdsCoreBrowser = async (accountId, channelId, siteId, locationId, userId, logger) => {
|
|
401
|
+
const browserInfo = GetBrowserInfo();
|
|
402
|
+
if (!browserInfo.ok) {
|
|
403
|
+
return browserInfo;
|
|
404
|
+
}
|
|
405
|
+
const { windowInfo, navigator, isMobile, screen } = browserInfo.value;
|
|
406
|
+
return LoadSurfAdsCore({
|
|
407
|
+
logger,
|
|
408
|
+
accountId,
|
|
409
|
+
channelId,
|
|
410
|
+
siteId,
|
|
411
|
+
locationId,
|
|
412
|
+
userId,
|
|
413
|
+
windowInfo,
|
|
414
|
+
navigator,
|
|
415
|
+
mobile: isMobile,
|
|
416
|
+
screen,
|
|
417
|
+
ip: undefined
|
|
418
|
+
});
|
|
419
|
+
};
|
|
420
|
+
/* Global version of these overrides for simple headless use cases*/
|
|
421
|
+
const memoizedLoadConfigurationFile = MemoizeOverride({ minutes: 5 });
|
|
422
|
+
const cachedGlobalCategory = CacheOverride({ minutes: 5 });
|
|
423
|
+
export const LoadSurfAdsCoreHeadless = async (config) => {
|
|
424
|
+
const windowInfoRes = WindowFromUrl(config.url);
|
|
425
|
+
if (!windowInfoRes.ok) {
|
|
426
|
+
return windowInfoRes;
|
|
427
|
+
}
|
|
428
|
+
const windowInfo = windowInfoRes.value;
|
|
429
|
+
return LoadSurfAdsCore({
|
|
430
|
+
accountId: config.accountId,
|
|
431
|
+
siteId: config.siteId,
|
|
432
|
+
channelId: config.channelId,
|
|
433
|
+
locationId: config.locationId,
|
|
434
|
+
userId: config.userId,
|
|
435
|
+
mobile: false,
|
|
436
|
+
ip: config.ip,
|
|
437
|
+
windowInfo,
|
|
438
|
+
screen: { width: 1920, height: 1080 },
|
|
439
|
+
navigator: {
|
|
440
|
+
userAgent: config.userAgent,
|
|
441
|
+
language: 'en-US'
|
|
442
|
+
},
|
|
443
|
+
logger: config.logging === true ? InitLogger(false) : undefined,
|
|
444
|
+
telemetry: config.telemetry,
|
|
445
|
+
overrides: {
|
|
446
|
+
...config.overrides,
|
|
447
|
+
services: {
|
|
448
|
+
...config.overrides?.services,
|
|
449
|
+
loadConfigurationFile: config.overrides?.services?.loadConfigurationFile ?? memoizedLoadConfigurationFile,
|
|
450
|
+
loadGlobalCategoryConfiguration: config.overrides?.services?.loadGlobalCategoryConfiguration ?? cachedGlobalCategory
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
});
|
|
454
|
+
};
|
|
455
|
+
//# sourceMappingURL=Init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Init.js","sourceRoot":"/","sources":["Init.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,2BAA2B,EAC3B,6BAA6B,EAC7B,wBAAwB,EACxB,WAAW,EACX,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACxB,MAAM,OAAO,CAAC;AAEf,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAEH,UAAU,EACV,qCAAqC,EACrC,oCAAoC,EACpC,YAAY,EACZ,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,oCAAoC,EACpC,iCAAiC,EACjC,wBAAwB,EACxB,mBAAmB,EAEnB,cAAc,EAEd,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EAC1B,MAAM,WAAW,CAAC;AASnB,OAAO,EAcH,GAAG,EACH,SAAS,EACT,MAAM,EACN,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,yBAAyB,EACzB,sCAAsC,EACtC,qCAAqC,EACrC,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,EAAE,EACF,GAAG,EAEH,QAAQ,EACR,SAAS,EACT,cAAc,EACd,qBAAqB,EAErB,qBAAqB,EACrB,cAAc,EAEd,+BAA+B,EAC/B,2BAA2B,EAC3B,yBAAyB,EACzB,OAAO,EACP,YAAY,EACZ,KAAK,EACL,UAAU,EACV,UAAU,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EACf,wBAAwB,EAC3B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACH,aAAa,EAChB,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AAEH,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC;AAY5C,MAAM,CAAC,MAAM,eAAe,GAAG,CAI7B,OAKG,EAAE,EAAoD,EAAE;IACzD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,OAAO,CAAC,MAAS,EAAE,QAAqC,EAAE,EAAE;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAiB,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAIlC,OAKG,EAAE,EAAkE,EAAE;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,OAAO,KAAK,EAAE,MAAS,EAAE,QAA8C,EAAE,EAAE;QACvE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAiB,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClF,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAI3B,UAKG,EAAE,EAAmD,EAAE;IACxD,MAAM,KAAK,GAAsB,CAAC,CAAC,QAAQ,EAAE,SAAoB,CAAC,CAAC;IACnE,OAAO,CAAC,MAAS,EAAE,QAAqC,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,KAAK,CAAiB,QAAQ,EAAE,EAAC,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAIhC,UAKG,EAAE,EAA4D,EAAE;IACjE,OAAO,CAAC,MAAS,EAAE,QAA8C,EAAE,EAAE;QACjE,MAAM,MAAM,GAAG,UAAU,CAAiB,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC;AACN,CAAC,CAAC;AAsCD,CAAC;AAiBD,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAC7B,MAAiC;IAEjC,MAAM,EACF,UAAU,EACV,MAAM,EACN,SAAS,EACT,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,SAAS,EACT,aAAa,EACb,GAAG,EACH,MAAM,EACT,GAAG,MAAM,CAAC;IAEX,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1D,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACxC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAG,MAAM,CAAC,MAAc,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAEhE,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC;IAE/B,IAAI,aAAa,CAAC,QAAQ,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;QACrD,OAAO,GAAG,CAAC,IAAI,wBAAwB,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,aAAa,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1E,OAAO,GAAG,CAAC,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,mDAAmD;IACnD,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAEzC,2CAA2C;IAC3C,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAE7D,MAAM,aAAa,GAAG,CAAe,CAA2B,EAAiB,EAAE;QAC/E,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAClB,mEAAmE;YACnE,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/B,OAAO,SAAS,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,EAAE,IAAI,CAAC,kCAAkC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1D,OAAO,SAAS,CAAC;QACrB,CAAC;aAAM,CAAC;YACJ,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAChC,OAAO,CAAC,CAAC,KAAK,CAAC;QACnB,CAAC;IACL,CAAC,CAAC;IAEF,mCAAmC;IACnC,MAAM,8BAA8B,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC9E,GAAG,CAAC,2BAA2B,CAAC,EAChC,aAAa,EACb,SAAS,EACT,UAAU,CACb,CAAC;IACF,MAAM,uBAAuB,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CACxF,MAAM,EACN,8BAA8B,CACjC,CAAC,IAAI,8BAA8B,CAAC;IAErC,MAAM,mCAAmC,GAAG,4BAA4B,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACxF,GAAG,CAAC,2BAA2B,CAAC,EAChC,aAAa,EACb,SAAS,EACT,UAAU,CACb,CAAC;IACF,MAAM,4BAA4B,GAAG,aAAa,CAC9C,SAAS,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC,MAAM,EAAE,mCAAmC,CAAC,CACnG,IAAI,mCAAmC,CAAC;IAEzC,MAAM,4BAA4B,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC1E,GAAG,CAAC,6BAA6B,CAAC,EAClC,aAAa,EACb,SAAS,EACT,UAAU,CACb,CAAC;IACF,MAAM,qBAAqB,GAAG,aAAa,CACvC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC,MAAM,EAAE,4BAA4B,CAAC,CACrF,IAAI,4BAA4B,CAAC;IAElC,MAAM,6BAA6B,GAAG,UAAU,CAC5C,GAAG,EACH,EAAE,EACF,qBAAqB,EACrB,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAChD,CAAC;IAEF,MAAM,0BAA0B,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACtE,6BAA6B,EAC7B,GAAG,CAAC,wBAAwB,CAAC,EAC7B,SAAS,EACT,MAAM,EACN,UAAU,CACb,CAAC;IACF,MAAM,mBAAmB,GAAG,aAAa,CACrC,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,MAAM,EAAE,0BAA0B,CAAC,CACjF,IAAI,0BAA0B,CAAC;IAEhC,MAAM,qBAAqB,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC5D,6BAA6B,EAC7B,GAAG,CAAC,wBAAwB,CAAC,EAC7B,SAAS,EACT,MAAM,EACN,UAAU,EACV,MAAM,CACT,CAAC;IACF,MAAM,cAAc,GAAG,aAAa,CAChC,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC,CACvE,IAAI,qBAAqB,CAAC;IAE3B,MAAM,gCAAgC,GAAG,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAClF,6BAA6B,EAC7B,GAAG,CAAC,wBAAwB,CAAC,EAC7B,SAAS,EACT,MAAM,EACN,UAAU,EACV,MAAM,CACT,CAAC;IACF,MAAM,yBAAyB,GAAG,aAAa,CAC3C,SAAS,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAC7F,IAAI,gCAAgC,CAAC;IAEtC,MAAM,4CAA4C,GAAG,qCAAqC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC1G,uBAAuB,EACvB,4BAA4B,EAC5B,UAAU,EACV,aAAa,CAChB,CAAC;IACF,MAAM,qCAAqC,GAAG,aAAa,CACvD,SAAS,EAAE,QAAQ,EAAE,qCAAqC,EAAE,CACxD,MAAM,EACN,4CAA4C,CAC/C,CACJ,IAAI,4CAA4C,CAAC;IAElD,MAAM,2BAA2B,GAAG,wBAAwB,CAAC,GAAG,EAC5D,EAAE,EACF,mBAAmB,CACtB,CAAC;IACF,MAAM,sBAAsB,GAAG,wBAAwB,CAAC,GAAG,EACvD,EAAE,EACF,cAAc,CACjB,CAAC;IACF,MAAM,iCAAiC,GAAG,wBAAwB,CAAC,GAAG,EAClE,EAAE,EACF,yBAAyB,CAC5B,CAAC;IAEF,8CAA8C;IAC9C,MAAM,2CAA2C,GAAI,oCAAoC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACzG,uBAAuB,EACvB,4BAA4B,EAC5B,UAAU,EACV,aAAa,CAChB,CAAC;IACF,MAAM,oCAAoC,GAAG,aAAa,CACtD,SAAS,EAAE,QAAQ,EAAE,oCAAoC,EAAE,CAAC,MAAM,EAAE,2CAA2C,CAAC,CACnH,IAAI,2CAA2C,CAAC;IAEjD,qDAAqD;IACrD,MAAM,mCAAmC,GAAG,sCAAsC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAClG,UAAU,EACV,aAAa,CAChB,CAAC;IACF,MAAM,4BAA4B,GAAG,aAAa,CAC9C,SAAS,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC,MAAM,EAAE,mCAAmC,CAAC,CACnG,IAAI,mCAAmC,CAAC;IAEzC,MAAM,kCAAkC,GAAG,qCAAqC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAChG,UAAU,EACV,aAAa,CAChB,CAAC;IACF,MAAM,2BAA2B,GAAG,aAAa,CAC7C,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE,CAAC,MAAM,EAAE,kCAAkC,CAAC,CACjG,IAAI,kCAAkC,CAAC;IAExC,mCAAmC;IACnC,MAAM,oBAAoB,GAAG,CAAC,CAAC,UAAoB,EAAE,EAAE,CAAC,aAAa,CACjE,GAAG,EACH,UAAU,EACV,UAAU,CAAC,IAAI,EACf,aAAa,CAAC,QAAQ,CACzB,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,aAAa,CAC/B,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,MAAM,EAAE,oBAAoB,CAAC,CACrE,IAAI,oBAAoB,CAAC;IAE1B,mCAAmC;IAEnC,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EACnD,GAAG,EACH,SAAS,EACT,MAAM,EACN,SAAS,EACT,UAAU,EACV,MAAM,EACN,GAAG,EACH,MAAM,EACN,aAAa,EACb,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAChD,CAAC;IAEF;;;;;;;;;;;;;;;MAeE;IACF,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAChG,CAAC,CAAC,MAAc,EAAE,EAAW,EAAE,EAAE,CAC7B,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC;aAC1B,OAAO,CAAC;YACL,MAAM,EAAE,UAAU,CAAC,IAAI;YACvB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,EAAE,EAAE,MAAM;YACV,MAAM,EAAE,UAAU,CAAC,IAAI;YACvB,SAAS,EAAE;gBACP,MAAM,EAAE,UAAU,CAAC,IAAI;aAC1B;SACJ,CAAC;aACD,QAAQ,CAAC;YACN,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,MAAM,EAAE,UAAU,CAAC,IAAI;YACvB,SAAS,EAAE;gBACP,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,UAAU,CAAC,IAAI;aAC1B;YACD,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,UAAU,CAAC,MAAM;SAC5B,CAAC,CAAC,CAAC;IAEhB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAEzD,MAAM,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACtD,GAAG,CAAC,WAAW,CAAC,EAChB,SAAS,EACT,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,CAAC,QAAQ,CAAC,aAAa,CACvC,CAAC;IACF,MAAM,mBAAmB,GAAG,UAAU,CAAC,GAAG,EACtC,EAAE,EACF,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,IAAI,kBAAkB,EACnG,KAAK,EAAC,OAAO,EAAC,EAAE,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CACjD,CAAC;IAEF,+BAA+B;IAC/B,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,GAAG,EAChD,SAAS,EACT,MAAM,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,EAAE,EACF,GAAG,EACH,MAAM,EACN,MAAM,EACN,kBAAkB,CACrB,CAAC;IACF,MAAM,cAAc,GAAG,aAAa,CAChC,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC,CACvE,IAAI,qBAAqB,CAAC;IAE3B,wCAAwC;IACxC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACrE,mBAAmB,EACnB,oCAAoC,CACvC,CAAC;IAEF,MAAM,oCAAoC,GAAG,oCAAoC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACjG,mBAAmB,EACnB,oCAAoC,CACvC,CAAC;IAEF,MAAM,iCAAiC,GAAG,iCAAiC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC3F,4BAA4B,EAC5B,mBAAmB,EACnB,oCAAoC,EACpC,2BAA2B,EAC3B,iCAAiC,EACjC,sBAAsB,EACtB,MAAM,EACN,cAAc,EACd,aAAa,CAAC,QAAQ,CAAC,aAAa,CACvC,CAAC;IAEF,MAAM,wBAAwB,GAAG,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACzE,4BAA4B,EAC5B,2BAA2B,EAC3B,iCAAiC,EACjC,sBAAsB,EACtB,MAAM,EACN,cAAc,CACjB,CAAC;IAEF,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC/D,4BAA4B,EAC5B,mBAAmB,EACnB,oCAAoC,EACpC,2BAA2B,EAC3B,iCAAiC,EACjC,sBAAsB,EACtB,MAAM,EACN,cAAc,EACd,aAAa,CAAC,QAAQ,CAAC,aAAa,CACvC,CAAC;IAEF,4CAA4C;IAC5C,MAAM,qBAAqB,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC5D,aAAa,CAChB,CAAC;IACF,MAAM,cAAc,GAAG,aAAa,CAChC,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC,CACvE,IAAI,qBAAqB,CAAC;IAE3B,MAAM,uBAAuB,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACvE,YAAY,EACZ,aAAa,EACb,MAAM,CACT,CAAC;IAEF,MAAM,uBAAuB,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACvE,UAAU,EACV,aAAa,CAChB,CAAC;IACF,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACrE,UAAU,EACV,aAAa,CAChB,CAAC;IACF,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC/D,UAAU,EACV,4BAA4B,EAC5B,aAAa,CAChB,CAAC;IACF,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACnE,UAAU,EACV,aAAa,EACb,4BAA4B,CAC/B,CAAC;IAEF,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC/D,UAAU,EACV,aAAa,CAChB,CAAC;IACF,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAC7D,UAAU,EACV,aAAa,CAChB,CAAC;IACF,MAAM,uBAAuB,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EACvE,UAAU,EACV,4BAA4B,EAC5B,aAAa,CAChB,CAAC;IAEF,OAAO,EAAE,CAAC;QACN,SAAS;QACT,MAAM;QACN,MAAM;QACN,GAAG;QACH,aAAa;QACb,gBAAgB;QAChB,kBAAkB,EAAE,aAAa;QACjC,aAAa;QACb,UAAU;QACV,WAAW,EAAE,mBAAmB;QAChC,YAAY;QACZ,WAAW;QACX,aAAa;QACb,uBAAuB;QACvB,qBAAqB,EAAE,6BAA6B;QACpD,mBAAmB,EAAE,2BAA2B;QAChD,cAAc,EAAE,sBAAsB;QACtC,yBAAyB,EAAE,iCAAiC;QAC5D,qCAAqC;QACrC,oCAAoC;QACpC,2BAA2B;QAC3B,4BAA4B;QAC5B,sBAAsB;QACtB,oCAAoC;QACpC,mBAAmB;QACnB,iCAAiC;QACjC,wBAAwB;QACxB,cAAc;QACd,uBAAuB;QACvB,uBAAuB;QACvB,sBAAsB;QACtB,mBAAmB;QACnB,qBAAqB;QACrB,mBAAmB;QACnB,kBAAkB;QAClB,uBAAuB;QACvB,QAAQ,EAAE,cAAc;KAC3B,CAAC,CAAC;AACP,CAAC;AAqBD,MAAM,+BAA+B,GAAG,CACpC,MAA2B,EAC3B,OAA0B,EAC5B,EAAE;IACA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/C,GAAG,EAAE,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,IAA+B,CAAC,CAAC;QACxD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,GAAG,EAAE,IAAI,CAAC,UAAU,MAAM,wBAAwB,CAAC,CAAC;YACpD,SAAS;QACb,CAAC;QACD,GAAG,EAAE,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACpC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAUF,MAAM,CAAC,MAAM,qCAAqC,GAAG,CACjD,MAA2B,EAC3B,UAAyC,EACH,EAAE;IACxC,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,+BAA+B,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9E,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC,CAAC;AAqBD,CAAC;AAEF,MAAM,CAAC,MAAM,wCAAwC,GACjD,KAAK,EAAE,MAAuD,EAAgD,EAAE;IAC5G,IAAI,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,aAAa,KAAK,SAAS,EAAE,CAAC;QAC9D,OAAO,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAoD,EAAE;QACjF,IAAI,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAClE,OAAO,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAC5F,SAAS,EACT,MAAM,CAAC,MAAM,CAChB,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,cAAc,CAAC,GAAkD,EAAE;QACzF,IAAI,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,+BAA+B,KAAK,SAAS,EAAE,CAAC;YAC5E,OAAO,+BAA+B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,+BAA+B,CACnE,MAAM,EACN,+BAA+B,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CACjE,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,+BAA+B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,MAAM,CACF,wBAAwB,EACxB,2BAA2B,CAC9B,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE3D,IAAI,wBAAwB,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC,wBAAwB,CAAC,MAAe,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,2BAA2B,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACpD,OAAO,GAAG,CAAC,2BAA2B,CAAC,MAAe,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,wBAAwB,CAAC,KAAK,CAAC;IAClD,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,KAAK,CAAC;IAC/D,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC;QAC3B,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;IAC9B,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC;IAEpD,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,MAAM,CAAC,MAAM,EAClE,gBAAgB,EAChB,IAAI,CAAC,QAAQ,CAChB,CAAC;IAEF,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC;QAC3B,OAAO,oBAAoB,CAAC;IAChC,CAAC;IACD,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC;IAElD,MAAM,oCAAoC,GAAG,MAAM,yBAAyB,CACxE,MAAM,CAAC,MAAM,EACb,IAAI,EACJ,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,iBAAiB,CAC3B,CAAC;IACF,IAAI,CAAC,oCAAoC,CAAC,EAAE,EAAE,CAAC;QAC3C,OAAO,oCAAoC,CAAC;IAChD,CAAC;IACD,MAAM,8BAA8B,GAAG,oCAAoC,CAAC,KAAK,CAAC;IAClF,OAAO,EAAE,CAAC;QACN,GAAG,8BAA8B;QACjC,QAAQ,EAAE,cAAc;KAC3B,CAAC,CAAC;AACP,CAAC,CAAC;AAQL,CAAC;AACF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC1C,MAA6C,EACrB,EAAE,CAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,KAAK,SAAS;IAC7C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;AAY7D,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC7C,MAAgD,EAC7B,EAAE,CACrB,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,KAAK,SAAS;IAChD,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACpF,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC;AAE/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAC5C,MAAqC,EACA,EAAE;IACvC,MAAM,EACF,UAAU,EACV,SAAS,EACT,SAAS,EACT,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,MAAM,EACT,GAAG,MAAM,CAAC;IAEX,MAAM,MAAM,GAAG,iCAAiC,CAAC;QAC7C,MAAM;QACN,SAAS;QACT,MAAM;QACN,MAAM;QACN,SAAS,EAAE,MAAM,CAAC,SAAS;KAC9B,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI;QACvD,CAAC,CAAC,IAAI,qBAAqB,CAAC;YACxB,SAAS;YACT,MAAM;YACN,UAAU;YACV,SAAS;YACT,MAAM;YACN,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;YACvC,QAAQ,EAAE,GAAG,CAAC,sBAAsB,CAAC;YACrC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI;SAC9B,CAAC;QACF,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,qBAAqB,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI;QACnD,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CACpD,EAAC,GAAG,MAAM,EAAE,MAAM,EAAC,EACnB,yBAAyB,CAC5B,IAAI,EAAE,CAAC,yBAAyB,CAAC;QAClC,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,kBAAkB,GAAG,qBAAqB,KAAK,SAAS;QAC1D,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACjC,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,GAAG,GAAG,MAAM,KAAK,SAAS;QAC5B,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,CAAC;QACnD,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC5B,GAAG,EAAE,IAAI,CACL,sBAAsB;YACtB,GAAG,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,eAAe;YACpD,GAAG,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAC,GAAG,qCAAqC,CACzE,GAAG,EACH,UAAU,CACb,CAAC;IAEF,MAAM,oBAAoB,GAAG,wCAAwC,CAAC;QAClE,MAAM,EAAE,GAAG;QACX,SAAS;QACT,MAAM;QACN,UAAU;QACV,iBAAiB;QACjB,SAAS;KACZ,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,8BAA8B,CAAC;QAC9C,MAAM,EAAE,GAAG;QACX,SAAS;KACZ,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACvD,oBAAoB;QACpB,UAAU;KACb,CAAC,CAAC;IAEH,MAAM,CAAE,2BAA2B,EAAE,iBAAiB,CAAE,GAAG,yBAAyB,CAAC;IAErF;4EACwE;IACxE,IAAI,2BAA2B,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACpD,OAAO,GAAG,CACN,IAAI,KAAK,CACL,qEAAqE;YACpE,2BAA2B,CAAC,MAAgB,CAAC,OAAO,CACxD,CACJ,CAAC;IACN,CAAC;IACD,wCAAwC;IACxC,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,KAAK,CAAC;IAC9D,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IACD,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC;IAEhD;yDACqD;IACrD,MAAM,GAAG,GAAG,CAAC,iBAAiB,CAAC,MAAM,KAAK,UAAU,CAAC;QACjD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,EAAE,CAAC;QACN,UAAU;QACV,GAAG;QACH,aAAa;QACb,MAAM;QACN,kBAAkB;QAClB,MAAM,EAAE,GAAG;KACd,CAAC,CAAC;AAEP,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAChC,MAAqC,EACZ,EAAE;IAC3B,MAAM,EACF,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,MAAM,EACN,SAAS,EACT,MAAM,EACN,EAAE,EACF,SAAS,EACT,UAAU,EACV,MAAM,EACN,MAAM,EACT,GAAG,MAAM,CAAC;IAEX,MAAM,gBAAgB,GAAG,MAAM,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACnE,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;QACvB,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC;IAEtG,OAAO,iBAAiB,CAAC;QACrB,MAAM;QACN,UAAU;QACV,SAAS;QACT,SAAS;QACT,MAAM;QACN,MAAM,EAAE,kBAAkB,IAAI,MAAM;QACpC,SAAS;QACT,UAAU;QACV,MAAM;QACN,UAAU;QACV,MAAM;QACN,aAAa;QACb,MAAM;QACN,GAAG;QACH,EAAE;QACF,SAAS;KACZ,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACnC,SAAiB,EACjB,SAAiB,EACjB,MAAc,EACd,UAAkB,EAClB,MAAe,EACf,MAAgB,EACS,EAAE;IAC3B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,WAAW,CAAC;IACvB,CAAC;IACD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC;IAEtE,OAAO,eAAe,CAClB;QACI,MAAM;QACN,SAAS;QACT,SAAS;QACT,MAAM;QACN,UAAU;QACV,MAAM;QACN,UAAU;QACV,SAAS;QACT,MAAM,EAAE,QAAQ;QAChB,MAAM;QACN,EAAE,EAAE,SAAS;KAChB,CACJ,CAAC;AACN,CAAC,CAAC;AAmBF,oEAAoE;AACpE,MAAM,6BAA6B,GAG/B,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,oBAAoB,GAGtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EACxC,MAAsC,EACb,EAAE;IAC3B,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACpB,OAAO,aAAa,CAAC;IACzB,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC;IAEvC,OAAO,eAAe,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,KAAK;QACb,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,UAAU;QACV,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACrC,SAAS,EAAE;YACP,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,OAAO;SACpB;QACD,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE;YACP,GAAG,MAAM,CAAC,SAAS;YACnB,QAAQ,EAAE;gBACN,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ;gBAC7B,qBAAqB,EACjB,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,IAAI,6BAA6B;gBACtF,+BAA+B,EAC3B,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,+BAA+B,IAAI,oBAAoB;aAC1F;SACJ;KACJ,CAAC,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ITelemetryCollector } from '../services/Logger';
|
|
2
|
+
export const DeviceToTelemetryDevice = (device) => {
|
|
3
|
+
if (device === undefined) {
|
|
4
|
+
return undefined;
|
|
5
|
+
}
|
|
6
|
+
const browser = device.sua?.browsers?.[0];
|
|
7
|
+
return {
|
|
8
|
+
ua: device.ua,
|
|
9
|
+
browser: browser !== undefined
|
|
10
|
+
? `${browser.brand} ${browser.version?.join('.') ?? ''}`.trim()
|
|
11
|
+
: undefined,
|
|
12
|
+
os: device.os,
|
|
13
|
+
osv: device.osv,
|
|
14
|
+
make: device.make,
|
|
15
|
+
model: device.model,
|
|
16
|
+
deviceType: device.devicetype,
|
|
17
|
+
screenW: device.w,
|
|
18
|
+
screenH: device.h,
|
|
19
|
+
language: device.language,
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export class SSRTelemetryCollector extends ITelemetryCollector {
|
|
23
|
+
_endpoint;
|
|
24
|
+
_tags;
|
|
25
|
+
_batchIntervalMs;
|
|
26
|
+
_pageUrl;
|
|
27
|
+
queue = [];
|
|
28
|
+
flushTimer;
|
|
29
|
+
constructor(options) {
|
|
30
|
+
super(options.accountId, options.siteId, options.channelId, options.locationId, options.device);
|
|
31
|
+
this._endpoint = options.endpoint;
|
|
32
|
+
this._tags = { ...(options.tags ?? {}) };
|
|
33
|
+
this._batchIntervalMs = options.batchIntervalMs ?? 1000;
|
|
34
|
+
this._pageUrl = options.url;
|
|
35
|
+
}
|
|
36
|
+
record(entry) {
|
|
37
|
+
this.queue.push({
|
|
38
|
+
device: this.device,
|
|
39
|
+
pageUrl: this._pageUrl,
|
|
40
|
+
...entry,
|
|
41
|
+
tags: { ...this._tags, ...(entry.tags ?? {}) },
|
|
42
|
+
});
|
|
43
|
+
if (this._batchIntervalMs === 0) {
|
|
44
|
+
this.flush();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
clearTimeout(this.flushTimer);
|
|
48
|
+
this.flushTimer = setTimeout(() => this.flush(), this._batchIntervalMs);
|
|
49
|
+
if (this.queue.length >= 100) {
|
|
50
|
+
this.flush();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
flush() {
|
|
54
|
+
if (this.queue.length === 0) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const payload = JSON.stringify(this.queue.splice(0));
|
|
58
|
+
clearTimeout(this.flushTimer);
|
|
59
|
+
this.flushTimer = undefined;
|
|
60
|
+
fetch(this._endpoint, {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
headers: { 'Content-Type': 'application/json' },
|
|
63
|
+
body: payload,
|
|
64
|
+
}).catch(() => { });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=TelemetryCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelemetryCollector.js","sourceRoot":"/","sources":["helpers/TelemetryCollector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAA+C,MAAM,oBAAoB,CAAC;AActG,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAA2B,EAAgC,EAAE;IACjG,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO;QACH,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,OAAO,KAAK,SAAS;YAC1B,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE;YAC/D,CAAC,CAAC,SAAS;QACf,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC5B,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,OAAO,qBAAsB,SAAQ,mBAAmB;IACzC,SAAS,CAAS;IAClB,KAAK,CAAyB;IAC9B,gBAAgB,CAAS;IACzB,QAAQ,CAAS;IAC1B,KAAK,GAAsB,EAAE,CAAC;IAC9B,UAAU,CAA4C;IAE9D,YAAY,OAAsC;QAC9C,KAAK,CACD,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,MAAM,CACjB,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,KAAsB;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,GAAG,KAAK;YACR,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;SACjD,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO;QACX,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACL,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,OAAO;SAChB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvB,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Types.js","sourceRoot":"/","sources":["helpers/Types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const dataRegex = /data-(?<field>[^"]*)="(?<value>[^"]*)"/ig;
|
|
2
|
+
export const getDataFromHtmlString = (html) => {
|
|
3
|
+
const productInfo = {};
|
|
4
|
+
for (const match of html.matchAll(dataRegex)) {
|
|
5
|
+
if (match.groups === undefined) {
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
const { field, value } = match.groups;
|
|
9
|
+
if (field === undefined || value === undefined) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
productInfo[field] = value;
|
|
13
|
+
}
|
|
14
|
+
const { image, price, saleprice, thc, strain, cbd, name, brandname, producttype, details, cta, clickthroughurl, winurl, pixelurl, } = productInfo;
|
|
15
|
+
return {
|
|
16
|
+
image,
|
|
17
|
+
price,
|
|
18
|
+
salePrice: saleprice,
|
|
19
|
+
thc,
|
|
20
|
+
strain,
|
|
21
|
+
cbd,
|
|
22
|
+
name,
|
|
23
|
+
brand_name: brandname,
|
|
24
|
+
brandName: brandname,
|
|
25
|
+
productType: producttype,
|
|
26
|
+
details,
|
|
27
|
+
cta,
|
|
28
|
+
clickthroughUrl: clickthroughurl,
|
|
29
|
+
winUrl: winurl,
|
|
30
|
+
pixelUrl: pixelurl
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=Html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Html.js","sourceRoot":"/","sources":["helpers/response/Html.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,0CAA0C,CAAC;AAE7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAgC,EAAE;IAChF,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,SAAS;QACb,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QACtC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7C,SAAS;QACb,CAAC;QAED,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC/B,CAAC;IACD,MAAM,EACF,KAAK,EACL,KAAK,EACL,SAAS,EACT,GAAG,EACH,MAAM,EACN,GAAG,EACH,IAAI,EACJ,SAAS,EACT,WAAW,EACX,OAAO,EACP,GAAG,EACH,eAAe,EACf,MAAM,EACN,QAAQ,GACX,GAAG,WAAW,CAAC;IAEhB,OAAO;QACH,KAAK;QACL,KAAK;QACL,SAAS,EAAE,SAAS;QACpB,GAAG;QACH,MAAM;QACN,GAAG;QACH,IAAI;QACJ,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,WAAW;QACxB,OAAO;QACP,GAAG;QACH,eAAe,EAAE,eAAe;QAChC,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,QAAQ;KACrB,CAAC;AACN,CAAC,CAAC"}
|