@surfside/ads-core 2.0.22 → 2.1.0

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.
Files changed (183) hide show
  1. package/lib/cjs/Api.js +63 -33
  2. package/lib/cjs/Api.js.map +1 -1
  3. package/lib/cjs/BuildInfo.js +6 -2
  4. package/lib/cjs/BuildInfo.js.map +1 -1
  5. package/lib/cjs/Init.js +340 -0
  6. package/lib/cjs/Init.js.map +1 -0
  7. package/lib/cjs/helpers/Functions.js.map +1 -1
  8. package/lib/cjs/helpers/Generator.js.map +1 -1
  9. package/lib/cjs/helpers/Handlebars.js +5 -2
  10. package/lib/cjs/helpers/Handlebars.js.map +1 -1
  11. package/lib/cjs/helpers/NativeRequestBuilder.js.map +1 -1
  12. package/lib/cjs/helpers/RequestBuilder.js +139 -24
  13. package/lib/cjs/helpers/RequestBuilder.js.map +1 -1
  14. package/lib/cjs/helpers/TelemetryCollector.js +72 -0
  15. package/lib/cjs/helpers/TelemetryCollector.js.map +1 -0
  16. package/lib/cjs/helpers/TryGet.js.map +1 -1
  17. package/lib/cjs/helpers/Types.js +3 -0
  18. package/lib/cjs/helpers/Types.js.map +1 -0
  19. package/lib/cjs/helpers/Window.js +52 -11
  20. package/lib/cjs/helpers/Window.js.map +1 -1
  21. package/lib/cjs/helpers/index.js +2 -0
  22. package/lib/cjs/helpers/index.js.map +1 -1
  23. package/lib/cjs/helpers/response/Banner.js.map +1 -1
  24. package/lib/cjs/helpers/response/BuiltResponse.js.map +1 -1
  25. package/lib/cjs/helpers/response/Carousel.js +49 -24
  26. package/lib/cjs/helpers/response/Carousel.js.map +1 -1
  27. package/lib/cjs/helpers/response/Clickthrough.js.map +1 -1
  28. package/lib/cjs/helpers/response/ProductCard.js +16 -9
  29. package/lib/cjs/helpers/response/ProductCard.js.map +1 -1
  30. package/lib/cjs/helpers/response/Video.js.map +1 -1
  31. package/lib/cjs/helpers/response/index.js.map +1 -1
  32. package/lib/cjs/index.js +25 -1
  33. package/lib/cjs/index.js.map +1 -1
  34. package/lib/cjs/models/dynamic/DynamicZone.js.map +1 -1
  35. package/lib/cjs/models/dynamic/index.js.map +1 -1
  36. package/lib/cjs/models/index.js.map +1 -1
  37. package/lib/cjs/models/retail/Category.js.map +1 -1
  38. package/lib/cjs/models/retail/Configuration.js.map +1 -1
  39. package/lib/cjs/models/retail/Product.js.map +1 -1
  40. package/lib/cjs/models/retail/Recommended.js.map +1 -1
  41. package/lib/cjs/models/retail/index.js +1 -0
  42. package/lib/cjs/models/retail/index.js.map +1 -1
  43. package/lib/cjs/models/rtb/BidRequest.js.map +1 -1
  44. package/lib/cjs/models/rtb/BidResponse.js.map +1 -1
  45. package/lib/cjs/models/rtb/NativeRequest.js.map +1 -1
  46. package/lib/cjs/models/rtb/NativeResponse.js.map +1 -1
  47. package/lib/cjs/models/rtb/index.js.map +1 -1
  48. package/lib/cjs/models/tracking/Geo.js.map +1 -1
  49. package/lib/cjs/models/tracking/index.js.map +1 -1
  50. package/lib/cjs/models/vast/Vast.js.map +1 -1
  51. package/lib/cjs/models/vast/index.js.map +1 -1
  52. package/lib/cjs/services/Bidder.js +175 -8
  53. package/lib/cjs/services/Bidder.js.map +1 -1
  54. package/lib/cjs/services/BotFiltering.js.map +1 -1
  55. package/lib/cjs/services/Category.js +8 -4
  56. package/lib/cjs/services/Category.js.map +1 -1
  57. package/lib/cjs/services/Configuration.js +186 -5
  58. package/lib/cjs/services/Configuration.js.map +1 -1
  59. package/lib/cjs/services/Device.js +1 -1
  60. package/lib/cjs/services/Device.js.map +1 -1
  61. package/lib/cjs/services/Dynamic.js +9 -7
  62. package/lib/cjs/services/Dynamic.js.map +1 -1
  63. package/lib/cjs/services/Geo.js +5 -1
  64. package/lib/cjs/services/Geo.js.map +1 -1
  65. package/lib/cjs/services/Logger.js +82 -14
  66. package/lib/cjs/services/Logger.js.map +1 -1
  67. package/lib/cjs/services/Memo.js.map +1 -1
  68. package/lib/cjs/services/Memoization.js +3 -0
  69. package/lib/cjs/services/Memoization.js.map +1 -1
  70. package/lib/cjs/services/Product.js +11 -5
  71. package/lib/cjs/services/Product.js.map +1 -1
  72. package/lib/cjs/services/Recommender.js +40 -15
  73. package/lib/cjs/services/Recommender.js.map +1 -1
  74. package/lib/cjs/services/Result.js +3 -1
  75. package/lib/cjs/services/Result.js.map +1 -1
  76. package/lib/cjs/services/Template.js.map +1 -1
  77. package/lib/cjs/services/Tracker.js.map +1 -1
  78. package/lib/cjs/services/index.js.map +1 -1
  79. package/lib/cjs/util/Functional.js.map +1 -1
  80. package/lib/esm/Api.js +60 -33
  81. package/lib/esm/Api.js.map +1 -1
  82. package/lib/esm/BuildInfo.js +5 -1
  83. package/lib/esm/BuildInfo.js.map +1 -1
  84. package/lib/esm/Init.js +326 -0
  85. package/lib/esm/Init.js.map +1 -0
  86. package/lib/esm/helpers/Functions.js.map +1 -1
  87. package/lib/esm/helpers/Generator.js.map +1 -1
  88. package/lib/esm/helpers/Handlebars.js +5 -2
  89. package/lib/esm/helpers/Handlebars.js.map +1 -1
  90. package/lib/esm/helpers/NativeRequestBuilder.js.map +1 -1
  91. package/lib/esm/helpers/RequestBuilder.js +139 -24
  92. package/lib/esm/helpers/RequestBuilder.js.map +1 -1
  93. package/lib/esm/helpers/TelemetryCollector.js +67 -0
  94. package/lib/esm/helpers/TelemetryCollector.js.map +1 -0
  95. package/lib/esm/helpers/TryGet.js.map +1 -1
  96. package/lib/esm/helpers/Types.js +2 -0
  97. package/lib/esm/helpers/Types.js.map +1 -0
  98. package/lib/esm/helpers/Window.js +47 -10
  99. package/lib/esm/helpers/Window.js.map +1 -1
  100. package/lib/esm/helpers/index.js +2 -0
  101. package/lib/esm/helpers/index.js.map +1 -1
  102. package/lib/esm/helpers/response/Banner.js.map +1 -1
  103. package/lib/esm/helpers/response/BuiltResponse.js.map +1 -1
  104. package/lib/esm/helpers/response/Carousel.js +50 -25
  105. package/lib/esm/helpers/response/Carousel.js.map +1 -1
  106. package/lib/esm/helpers/response/Clickthrough.js.map +1 -1
  107. package/lib/esm/helpers/response/ProductCard.js +16 -9
  108. package/lib/esm/helpers/response/ProductCard.js.map +1 -1
  109. package/lib/esm/helpers/response/Video.js.map +1 -1
  110. package/lib/esm/helpers/response/index.js.map +1 -1
  111. package/lib/esm/index.js +2 -1
  112. package/lib/esm/index.js.map +1 -1
  113. package/lib/esm/models/dynamic/DynamicZone.js.map +1 -1
  114. package/lib/esm/models/dynamic/index.js.map +1 -1
  115. package/lib/esm/models/index.js.map +1 -1
  116. package/lib/esm/models/retail/Category.js.map +1 -1
  117. package/lib/esm/models/retail/Configuration.js.map +1 -1
  118. package/lib/esm/models/retail/Product.js.map +1 -1
  119. package/lib/esm/models/retail/Recommended.js.map +1 -1
  120. package/lib/esm/models/retail/index.js +1 -0
  121. package/lib/esm/models/retail/index.js.map +1 -1
  122. package/lib/esm/models/rtb/BidRequest.js.map +1 -1
  123. package/lib/esm/models/rtb/BidResponse.js.map +1 -1
  124. package/lib/esm/models/rtb/NativeRequest.js.map +1 -1
  125. package/lib/esm/models/rtb/NativeResponse.js.map +1 -1
  126. package/lib/esm/models/rtb/index.js.map +1 -1
  127. package/lib/esm/models/tracking/Geo.js.map +1 -1
  128. package/lib/esm/models/tracking/index.js.map +1 -1
  129. package/lib/esm/models/vast/Vast.js.map +1 -1
  130. package/lib/esm/models/vast/index.js.map +1 -1
  131. package/lib/esm/services/Bidder.js +171 -8
  132. package/lib/esm/services/Bidder.js.map +1 -1
  133. package/lib/esm/services/BotFiltering.js.map +1 -1
  134. package/lib/esm/services/Category.js +6 -2
  135. package/lib/esm/services/Category.js.map +1 -1
  136. package/lib/esm/services/Configuration.js +176 -5
  137. package/lib/esm/services/Configuration.js.map +1 -1
  138. package/lib/esm/services/Device.js +1 -1
  139. package/lib/esm/services/Device.js.map +1 -1
  140. package/lib/esm/services/Dynamic.js +9 -7
  141. package/lib/esm/services/Dynamic.js.map +1 -1
  142. package/lib/esm/services/Geo.js +5 -1
  143. package/lib/esm/services/Geo.js.map +1 -1
  144. package/lib/esm/services/Logger.js +78 -12
  145. package/lib/esm/services/Logger.js.map +1 -1
  146. package/lib/esm/services/Memo.js.map +1 -1
  147. package/lib/esm/services/Memoization.js +3 -0
  148. package/lib/esm/services/Memoization.js.map +1 -1
  149. package/lib/esm/services/Product.js +11 -5
  150. package/lib/esm/services/Product.js.map +1 -1
  151. package/lib/esm/services/Recommender.js +40 -15
  152. package/lib/esm/services/Recommender.js.map +1 -1
  153. package/lib/esm/services/Result.js +1 -0
  154. package/lib/esm/services/Result.js.map +1 -1
  155. package/lib/esm/services/Template.js.map +1 -1
  156. package/lib/esm/services/Tracker.js.map +1 -1
  157. package/lib/esm/services/index.js.map +1 -1
  158. package/lib/esm/util/Functional.js.map +1 -1
  159. package/lib/types/Api.d.ts +33 -16
  160. package/lib/types/BuildInfo.d.ts +1 -1
  161. package/lib/types/Init.d.ts +99 -0
  162. package/lib/types/helpers/Handlebars.d.ts +1 -0
  163. package/lib/types/helpers/RequestBuilder.d.ts +9 -2
  164. package/lib/types/helpers/TelemetryCollector.d.ts +25 -0
  165. package/lib/types/helpers/Types.d.ts +1 -0
  166. package/lib/types/helpers/Window.d.ts +11 -1
  167. package/lib/types/helpers/index.d.ts +2 -0
  168. package/lib/types/helpers/response/Carousel.d.ts +4 -4
  169. package/lib/types/index.d.ts +2 -1
  170. package/lib/types/models/retail/Category.d.ts +1 -1
  171. package/lib/types/models/retail/Configuration.d.ts +10 -0
  172. package/lib/types/models/retail/index.d.ts +1 -0
  173. package/lib/types/models/rtb/BidRequest.d.ts +4 -1
  174. package/lib/types/models/rtb/BidResponse.d.ts +1 -0
  175. package/lib/types/services/Bidder.d.ts +19 -3
  176. package/lib/types/services/Category.d.ts +9 -1
  177. package/lib/types/services/Configuration.d.ts +23 -2
  178. package/lib/types/services/Dynamic.d.ts +5 -3
  179. package/lib/types/services/Logger.d.ts +36 -2
  180. package/lib/types/services/Memoization.d.ts +3 -0
  181. package/lib/types/services/Recommender.d.ts +2 -2
  182. package/lib/types/services/Result.d.ts +1 -0
  183. package/package.json +3 -3
@@ -5,14 +5,16 @@ import Handlebars from 'handlebars/runtime';
5
5
  import { type BuildHybridCarouselFn, type BuildHybridCarouselFromInitialBidFn, type BuildRecommendedCarouselFn, type BuildSponsoredCarouselFn, type BuildSponsoredCarouselFromInitialBidFn } from './helpers/response/Carousel';
6
6
  import { type EvaluateClickthroughTemplateFn, type EvaluateProductCardTemplateFn } from './services/Template';
7
7
  import { type BuildDynamicZoneRequestFn, type GetDynamicZoneFn } from './services/Dynamic';
8
- import { type GenerateCategoriesFn } from './services/Category';
8
+ import { type MapCategoriesFn } from './services/Category';
9
9
  import { type InitTrackerServiceFn, type IProductTrackerService } from './services/Tracker';
10
10
  export declare const PROD_BIDDER = "//bid.surfside.io/rtb/bids/surfside";
11
11
  export declare const PROD_CONFIGURATION_SERVICE = "//r.surfside.io";
12
+ export declare const PROD_CATEGORY_CONFIGURATION_SERVICE = "//r.surfside.io";
12
13
  export declare const PROD_SPONSORED_PRODUCT_FEED = "//creative.surfside.io";
13
14
  export declare const PROD_RECOMMENDED_PRODUCT_FEED = "//creative.surfside.io";
14
15
  export declare const PROD_RECOMMENDER_SERVICE = "//t.surfside.io";
15
16
  export declare const PROD_DYNAMIC_ZONE_SERVICE = "//r.surfside.io/";
17
+ export declare const PROD_TELEMETRY_SERVICE = "//telemetry.surfside.io/v1/ingest";
16
18
  /**
17
19
  * A collection of services for querying the surfside API and building responses
18
20
  */
@@ -46,9 +48,14 @@ export interface ISurfsideApi {
46
48
  */
47
49
  getConfiguration: GetConfigurationFn;
48
50
  /**
49
- * Generates categories for the site
51
+ * @deprecated Use mapCategories instead
52
+ * Maps publisher categories to Surfside canonical categories
50
53
  */
51
- generateCategories: GenerateCategoriesFn;
54
+ generateCategories: MapCategoriesFn;
55
+ /**
56
+ * Maps publisher categories to Surfside canonical categories
57
+ */
58
+ mapCategories: MapCategoriesFn;
52
59
  /**
53
60
  * Creates a set of trackers from a product input. Builds a URL with all relevant info from the trackers
54
61
  * and returns functions to call when the relevant events fire
@@ -128,17 +135,11 @@ export interface ISurfsideApi {
128
135
  getDynamicZone: GetDynamicZoneFn;
129
136
  buildDynamicZoneRequest: BuildDynamicZoneRequestFn;
130
137
  }
131
- /**
132
- * Initializes the API with the services explicitly passed to it. This function is used by the framework for overloading
133
- * mock services. It should not be used in an application
134
- * @param internalApiDto The list of services and helpers to inject
135
- * @returns An initialized Surfside API
136
- */
137
- export declare function InitSurfAdsCoreInternal(internalApiDto: {
138
+ export type SurfAdsCoreInitDto = {
138
139
  logger: ILogger | undefined;
139
140
  requestBids: RequestBidsFn;
140
141
  getConfiguration: GetConfigurationFn;
141
- generateCategories: GenerateCategoriesFn;
142
+ generateCategories: MapCategoriesFn;
142
143
  getGeo: GetGeoFn;
143
144
  getDevice: GetDeviceFn;
144
145
  getAllSponsoredProducts: GetAllSponsoredProductFromNativeIdFn;
@@ -164,13 +165,29 @@ export declare function InitSurfAdsCoreInternal(internalApiDto: {
164
165
  channelId: string;
165
166
  locationId: string;
166
167
  userId: string | undefined;
167
- }): AsyncResult<ISurfsideApi>;
168
- export declare const InitSurfAdsCoreServices: (logger: ILogger | undefined, bidderServiceUrl: string, configurationServiceUrl: string, productFeedUrl: string, recommendedProductFeedUrl: string, recommenderServiceUrl: string, dynamicZoneServiceUrl: string, windowInfo: INativeTemplateDelegateWindow, screenInfo: IScreen, navigator: INavigator, mobile: boolean, ip: string | undefined, geoProviderToken: string | undefined, accountId: string, siteId: string, channelId: string, locationId: string, userId: string | undefined, initTrackerService?: InitTrackerServiceFn) => AsyncResult<ISurfsideApi>;
168
+ };
169
+ /**
170
+ * Initializes the API with the services explicitly passed to it. This function is used by the framework for overloading
171
+ * mock services. It should not be used in an application
172
+ * @param internalApiDto The list of services and helpers to inject
173
+ * @returns An initialized Surfside API
174
+ */
175
+ export declare function InitSurfAdsCoreInternal(internalApiDto: SurfAdsCoreInitDto): AsyncResult<ISurfsideApi>;
176
+ export declare const InitSurfAdsCoreServices: (logger: ILogger | undefined, bidderServiceUrl: string, configurationServiceUrl: string, productFeedUrl: string, recommendedProductFeedUrl: string, recommenderServiceUrl: string, dynamicZoneServiceUrl: string, windowInfo: INativeTemplateDelegateWindow, screenInfo: IScreen, navigator: INavigator, mobile: boolean, ip: string | undefined, geoProviderToken: string | undefined, accountId: string, siteId: string, channelId: string, locationId: string, userId: string | undefined, initTrackerService?: InitTrackerServiceFn, overrides?: Partial<SurfAdsCoreInitDto>) => AsyncResult<ISurfsideApi>;
169
177
  export declare const InitSurfAdsCoreSSR: (windowInfo: INativeTemplateDelegateWindow, screen: IScreen, navigator: INavigator, mobile: boolean, ip: string, geoProviderToken: string, accountId: string, siteId: string, channelId: string, locationId: string, userId: string | undefined, logger?: ILogger) => AsyncResult<ISurfsideApi>;
170
178
  export declare const InitSurfAdsCore: (channelId: string, accountId: string, siteId: string, locationId: string, userId: string | undefined, logger?: ILogger) => AsyncResult<ISurfsideApi>;
171
- export declare class MissingConfigurationError extends Error {
172
- constructor(accountId: string, siteId: string);
173
- }
174
179
  export declare class NotABrowserError extends Error {
175
180
  constructor();
176
181
  }
182
+ export declare class SurfsideAdsDisabledError extends Error {
183
+ constructor();
184
+ }
185
+ export declare class LocationExcludedError extends Error {
186
+ constructor(locationId: string);
187
+ }
188
+ export declare class ZoneExcludedError extends Error {
189
+ constructor(zoneId: string);
190
+ }
191
+ export declare class MissingConfigurationError extends Error {
192
+ constructor(accountId: string, siteId: string);
193
+ }
@@ -1,4 +1,4 @@
1
- export declare const SurfsideAdsCoreVersionInfo: {
1
+ export declare const VersionInfo: {
2
2
  buildBranch: string;
3
3
  buildHash: string;
4
4
  buildVer: string;
@@ -0,0 +1,99 @@
1
+ import { type ISurfsideApi } from './Api';
2
+ import Handlebars from 'handlebars/runtime';
3
+ import { type BuildAllSponsoredProductCardResponsesFn, type GenerateSponsoredProductCardResponseFn, type HandlebarsHelpers, type RequestBuilderFn } from './helpers';
4
+ import { type IDevice, type ICompiledPublisherConfiguration, type IGeoContext, type INativeTemplateDelegateWindow } from './models';
5
+ import { type RequestBidsFn, type GetAllSponsoredProductFromNativeIdFn, type GetRecommendedProductFromProductIdFn, type NonPersonalRecommenderFn, type PersonalRecommenderFn, type GetDynamicZoneFn, type EvaluateProductCardTemplateFn, type EvaluateClickthroughTemplateFn, type IProductTrackerService, type ILogger, type ITelemetryCollector, type IScreen, type INavigator, type Result, type AsyncResult } from './services';
6
+ import { type MapCategoriesFn } from './services/Category';
7
+ export type OverrideFactory<T, U = ISurfAdsCoreConfiguration> = (config: U, original: T) => Result<T>;
8
+ export interface ISurfAdsCoreConfigurationOverrides {
9
+ mapCategories: OverrideFactory<(categories: string[]) => string[]>;
10
+ generateCategories: OverrideFactory<MapCategoriesFn>;
11
+ requestBids: OverrideFactory<RequestBidsFn>;
12
+ getAllSponsoredProducts: OverrideFactory<GetAllSponsoredProductFromNativeIdFn>;
13
+ getAllSponsoredBrandProducts: OverrideFactory<GetAllSponsoredProductFromNativeIdFn>;
14
+ getRecommendedProduct: OverrideFactory<GetRecommendedProductFromProductIdFn>;
15
+ generateTopProducts: OverrideFactory<NonPersonalRecommenderFn>;
16
+ generateForYou: OverrideFactory<PersonalRecommenderFn>;
17
+ generatePreviousPurchases: OverrideFactory<PersonalRecommenderFn>;
18
+ getDynamicZone: OverrideFactory<GetDynamicZoneFn>;
19
+ buildAllSponsoredProductCardResponses: OverrideFactory<BuildAllSponsoredProductCardResponsesFn>;
20
+ generateSponsoredProductCardResponse: OverrideFactory<GenerateSponsoredProductCardResponseFn>;
21
+ evaluateProductCardTemplate: OverrideFactory<EvaluateProductCardTemplateFn>;
22
+ evaluateClickthroughTemplate: OverrideFactory<EvaluateClickthroughTemplateFn>;
23
+ startRequest: (config: ISurfAdsCoreConfiguration, startRequest: RequestBuilderFn) => Result<RequestBuilderFn>;
24
+ trackerService: OverrideFactory<IProductTrackerService>;
25
+ createTelemetryCollector: OverrideFactory<ITelemetryCollector | undefined, Omit<ISurfAdsCoreConfiguration, 'geo' | 'handlebars' | 'configuration' | 'logger'>>;
26
+ }
27
+ export interface ISurfAdsCoreConfiguration extends ISurfAdsCoreDependencies {
28
+ windowInfo: INativeTemplateDelegateWindow;
29
+ screen: IScreen;
30
+ navigator: INavigator;
31
+ mobile: boolean;
32
+ ip: string | undefined;
33
+ accountId: string;
34
+ siteId: string;
35
+ channelId: string;
36
+ locationId: string;
37
+ userId: string | undefined;
38
+ overrides?: {
39
+ services?: Partial<ISurfAdsCoreConfigurationOverrides>;
40
+ };
41
+ }
42
+ export declare function CreateSurfAdsCore(config: ISurfAdsCoreConfiguration): Result<ISurfsideApi>;
43
+ export interface ILoadSurfAdsCoreConfiguration {
44
+ logger?: ILogger;
45
+ windowInfo: INativeTemplateDelegateWindow;
46
+ screen: IScreen;
47
+ navigator: INavigator;
48
+ mobile: boolean;
49
+ ip: string | undefined;
50
+ accountId: string;
51
+ siteId: string;
52
+ channelId: string;
53
+ locationId: string;
54
+ userId: string | undefined;
55
+ telemetry?: boolean;
56
+ overrides?: {
57
+ services?: Partial<ISurfAdsCoreConfigurationOverrides>;
58
+ dependencies?: Partial<ISurfAdsCoreDependencies>;
59
+ };
60
+ }
61
+ export interface ISurfAdsCoreDependencies {
62
+ handlebars: typeof Handlebars;
63
+ configuration: ICompiledPublisherConfiguration;
64
+ geo: IGeoContext | undefined;
65
+ device: IDevice | undefined;
66
+ logger: ILogger | undefined;
67
+ }
68
+ export declare const LoadSurfAdsCoreHandlebarsDependencies: (logger: ILogger | undefined, windowInfo: INativeTemplateDelegateWindow) => [typeof Handlebars, HandlebarsHelpers];
69
+ export interface ILoadSurfAdsCoreConfigurationDependenciesConfig {
70
+ logger: ILogger | undefined;
71
+ accountId: string;
72
+ siteId: string;
73
+ handlebars: typeof Handlebars;
74
+ handlebarsHelpers: HandlebarsHelpers;
75
+ overrides?: {
76
+ dependencies?: Partial<ISurfAdsCoreDependencies>;
77
+ };
78
+ }
79
+ export declare const LoadSurfAdsCoreConfigurationDependencies: (config: ILoadSurfAdsCoreConfigurationDependenciesConfig) => AsyncResult<ICompiledPublisherConfiguration>;
80
+ export interface ILoadSurfAdsCoreGeoDependenciesConfig {
81
+ logger: ILogger | undefined;
82
+ overrides?: {
83
+ dependencies?: Partial<ISurfAdsCoreDependencies>;
84
+ };
85
+ }
86
+ export declare const LoadSurfAdsCoreGeoDependencies: (config: ILoadSurfAdsCoreGeoDependenciesConfig) => AsyncResult<IGeoContext>;
87
+ export interface ILoadSurfAdsCoreDeviceDependenciesConfig {
88
+ logger: ILogger | undefined;
89
+ screen: IScreen;
90
+ navigator: INavigator;
91
+ mobile: boolean;
92
+ overrides?: {
93
+ dependencies?: Partial<ISurfAdsCoreDependencies>;
94
+ };
95
+ }
96
+ export declare const LoadSurfAdsCoreDeviceDependencies: (config: ILoadSurfAdsCoreDeviceDependenciesConfig) => IDevice | undefined;
97
+ export declare const LoadSurfAdsCoreDependencies: (config: ILoadSurfAdsCoreConfiguration) => AsyncResult<ISurfAdsCoreDependencies>;
98
+ export declare const LoadSurfAdsCore: (config: ILoadSurfAdsCoreConfiguration) => AsyncResult<ISurfsideApi>;
99
+ export declare const LoadAdsCoreBrowser: (accountId: string, channelId: string, siteId: string, locationId: string, userId?: string, logger?: ILogger) => AsyncResult<ISurfsideApi>;
@@ -28,6 +28,7 @@ export declare function slug(name: string, options: {
28
28
  dropBefore: string | undefined;
29
29
  length: number | undefined;
30
30
  separator: string | undefined;
31
+ asciify: boolean | undefined;
31
32
  };
32
33
  }): string;
33
34
  /**
@@ -1,7 +1,7 @@
1
1
  import { type IApp, type IBanner, type IBidRequest, type IDevice, type IGeoContext, type IImp, type INative, type INativeRequest, type IRegs, type ISite, type IUser, type IVideo } from '../models';
2
2
  import { type ILogger } from '../services';
3
3
  import { type NativeRequestBuilder } from './NativeRequestBuilder';
4
- import { type GenerateCategoriesFn } from '../services/Category';
4
+ import { type MapCategoriesFn } from '../services/Category';
5
5
  export type RequestBuilderFn = (zoneId: string, id?: string) => RequestBuilder;
6
6
  export type RequestWith<T> = (t: T) => RequestBuilder;
7
7
  export type RequestBuilder = {
@@ -17,6 +17,13 @@ export type RequestBuilder = {
17
17
  withNatives: (requests: (string | INativeRequest)[], options?: Partial<INative>, impOptions?: Partial<IImp>) => RequestBuilder;
18
18
  withNativeCopies: (request: string | INativeRequest, n: number, options?: Partial<INative>, impOptions?: Partial<IImp>) => RequestBuilder;
19
19
  withProductCards: (nativeBuilder: NativeRequestBuilder, options?: Partial<INative>, impOptions?: Partial<IImp>) => RequestBuilder;
20
+ withImp: (zoneId: string, imp?: Partial<IImp>) => ImpressionRequestBuilder;
20
21
  build: () => IBidRequest;
21
22
  };
22
- export declare function StartRequest(logger: ILogger | undefined, accountId: string, siteId: string, channelId: string, locationId: string, device: IDevice | undefined, geo: IGeoContext | undefined, userId: string | undefined, generateCategories: GenerateCategoriesFn, zoneId: string, id?: string): RequestBuilder;
23
+ export type ImpressionRequestBuilder = RequestBuilder & {
24
+ andBanner: (w: number, h: number, options?: Partial<IBanner>) => ImpressionRequestBuilder;
25
+ andVideo: (w: number, h: number, minduration: number | undefined, maxduration: number, mimes?: string[], options?: Partial<IVideo>) => ImpressionRequestBuilder;
26
+ andNative: (request: string | INativeRequest, options?: Partial<INative>) => ImpressionRequestBuilder;
27
+ andProductCards: (nativeBuilder: NativeRequestBuilder, options?: Partial<INative>) => ImpressionRequestBuilder;
28
+ };
29
+ export declare function StartRequest(logger: ILogger | undefined, accountId: string, siteId: string, channelId: string, locationId: string, device: IDevice | undefined, geo: IGeoContext | undefined, userId: string | undefined, generateCategories: MapCategoriesFn, strictCategoryFiltering: boolean | undefined, zoneId: string, id?: string): RequestBuilder;
@@ -0,0 +1,25 @@
1
+ import { type IDevice } from '../models';
2
+ import { ITelemetryCollector, type ITelemetryDevice, type ITelemetryEntry } from '../services/Logger';
3
+ export interface ISSRTelemetryCollectorOptions {
4
+ accountId: string;
5
+ siteId: string;
6
+ channelId: string;
7
+ locationId: string;
8
+ endpoint: string;
9
+ tags?: Record<string, string>;
10
+ batchIntervalMs?: number;
11
+ url: string;
12
+ device?: ITelemetryDevice;
13
+ }
14
+ export declare const DeviceToTelemetryDevice: (device: IDevice | undefined) => ITelemetryDevice | undefined;
15
+ export declare class SSRTelemetryCollector extends ITelemetryCollector {
16
+ private readonly _endpoint;
17
+ private readonly _tags;
18
+ private readonly _batchIntervalMs;
19
+ private readonly _pageUrl;
20
+ private queue;
21
+ private flushTimer;
22
+ constructor(options: ISSRTelemetryCollectorOptions);
23
+ record(entry: ITelemetryEntry): void;
24
+ flush(): void;
25
+ }
@@ -0,0 +1 @@
1
+ export type Debouncer = ReturnType<typeof globalThis.setTimeout>;
@@ -1,7 +1,17 @@
1
+ import { NotABrowserError } from '../Api';
1
2
  import { type INativeTemplateDelegateWindow } from '../models';
2
- import { type Result } from '../services';
3
+ import { type INavigator, type IScreen, type Result } from '../services';
3
4
  export declare const WindowFromUrl: (urlStr: string) => Result<INativeTemplateDelegateWindow>;
4
5
  export declare const GetWindowInfo: () => Result<INativeTemplateDelegateWindow>;
6
+ export declare const GetNavigator: () => Result<INavigator>;
7
+ export declare const GetScreenInfo: () => Result<IScreen>;
8
+ export declare const GetBrowserInfo: () => Result<{
9
+ windowInfo: INativeTemplateDelegateWindow;
10
+ navigator: INavigator;
11
+ isMobile: boolean;
12
+ screen: IScreen;
13
+ }>;
14
+ export declare const IsMobile: () => import("../services").ErrResult<NotABrowserError> | import("../services").OkResult<boolean>;
5
15
  export declare class NotAUrlError extends Error {
6
16
  url: string;
7
17
  constructor(url: string);
@@ -2,7 +2,9 @@ export * from './NativeRequestBuilder';
2
2
  export * from './RequestBuilder';
3
3
  export * from './response';
4
4
  export * from './Handlebars';
5
+ export * from './TelemetryCollector';
5
6
  export * from './TryGet';
6
7
  export * from './Window';
7
8
  export * from './Generator';
8
9
  export * from './Functions';
10
+ export * from './Types';
@@ -5,7 +5,7 @@ import { type IProductTrackerService } from '../../services/Tracker';
5
5
  import type { GenerateSponsoredProductCardResponseFn, IBuiltProductCardResponse } from './ProductCard';
6
6
  export type BuildSponsoredCarouselFn = (request: IBidRequest) => Result<IBuiltCarousel>;
7
7
  export type BuildSponsoredCarouselFromInitialBidFn = (request: IBidRequest, initialBid: IBid) => Result<IBuiltCarousel>;
8
- export type BuildRecommendedCarouselFn = (RecommenderType: PublicRecommenderType) => Result<IBuiltCarousel>;
8
+ export type BuildRecommendedCarouselFn = (RecommenderType: PublicRecommenderType, category?: string) => Result<IBuiltCarousel>;
9
9
  export type BuildHybridCarouselFn = (recommenderType: PublicRecommenderType, request: IBidRequest) => Result<IBuiltCarousel>;
10
10
  export type BuildHybridCarouselFromInitialBidFn = (RecommenderType: PublicRecommenderType, request: IBidRequest, initialBid: IBid) => Result<IBuiltCarousel>;
11
11
  export type CarouselNextProductFn = () => AsyncGenerator<IBuiltProductCardResponse>;
@@ -43,9 +43,9 @@ export interface IPastPurchasesProductRecommender {
43
43
  export type ProductRecommender = ITopProductRecommender | IForYouProductRecommender | IPastPurchasesProductRecommender;
44
44
  export declare const BuildSponsoredCarousel: (logger: ILogger | undefined, requestBids: RequestBidsFn, generateProductCardResponse: GenerateSponsoredProductCardResponseFn, request: IBidRequest) => Result<IBuiltCarousel>;
45
45
  export declare const BuildSponsoredCarouselFromInitialBid: (logger: ILogger | undefined, requestBids: RequestBidsFn, generateProductCardResponse: GenerateSponsoredProductCardResponseFn, request: IBidRequest, initialBid: IBid) => Result<IBuiltCarousel>;
46
- export declare const BuildRecommendedCarousel: (logger: ILogger | undefined, evaluateClickthroughTemplate: EvaluateClickthroughTemplateFn, topProductGenerator: NonPersonalRecommenderFn, forYouProductGenerator: PersonalRecommenderFn, pastPurchasesProductGenerator: PersonalRecommenderFn, userId: string | undefined, trackers: IProductTrackerService, recommenderType: PublicRecommenderType) => Result<IBuiltCarousel>;
47
- export declare const BuildHybridCarousel: (logger: ILogger | undefined, evaluateClickthroughTemplate: EvaluateClickthroughTemplateFn, requestBids: RequestBidsFn, generateProductCardResponse: GenerateSponsoredProductCardResponseFn, topProductGenerator: NonPersonalRecommenderFn, forYouProductGenerator: PersonalRecommenderFn, pastPurchasesProductGenerator: PersonalRecommenderFn, userId: string | undefined, trackers: IProductTrackerService, recommenderType: PublicRecommenderType, request: IBidRequest) => Result<IBuiltCarousel>;
48
- export declare const BuildHybridCarouselFromInitialBid: (logger: ILogger | undefined, evaluateClickthroughTemplate: EvaluateClickthroughTemplateFn, requestBids: RequestBidsFn, generateProductCardResponse: GenerateSponsoredProductCardResponseFn, topProductGenerator: NonPersonalRecommenderFn, forYouProductGenerator: PersonalRecommenderFn, pastPurchasesProductGenerator: PersonalRecommenderFn, userId: string | undefined, trackers: IProductTrackerService, recommenderType: PublicRecommenderType, request: IBidRequest, initialBid: IBid) => Result<IBuiltCarousel>;
46
+ export declare const BuildRecommendedCarousel: (logger: ILogger | undefined, evaluateClickthroughTemplate: EvaluateClickthroughTemplateFn, topProductGenerator: NonPersonalRecommenderFn, forYouProductGenerator: PersonalRecommenderFn, pastPurchasesProductGenerator: PersonalRecommenderFn, userId: string | undefined, trackers: IProductTrackerService, recommenderType: PublicRecommenderType, category?: string) => Result<IBuiltCarousel>;
47
+ export declare const BuildHybridCarousel: (logger: ILogger | undefined, evaluateClickthroughTemplate: EvaluateClickthroughTemplateFn, requestBids: RequestBidsFn, generateProductCardResponse: GenerateSponsoredProductCardResponseFn, topProductGenerator: NonPersonalRecommenderFn, forYouProductGenerator: PersonalRecommenderFn, pastPurchasesProductGenerator: PersonalRecommenderFn, userId: string | undefined, trackers: IProductTrackerService, excludedZones: string[] | undefined, recommenderType: PublicRecommenderType, request: IBidRequest) => Result<IBuiltCarousel>;
48
+ export declare const BuildHybridCarouselFromInitialBid: (logger: ILogger | undefined, evaluateClickthroughTemplate: EvaluateClickthroughTemplateFn, requestBids: RequestBidsFn, generateProductCardResponse: GenerateSponsoredProductCardResponseFn, topProductGenerator: NonPersonalRecommenderFn, forYouProductGenerator: PersonalRecommenderFn, pastPurchasesProductGenerator: PersonalRecommenderFn, userId: string | undefined, trackers: IProductTrackerService, excludedZones: string[] | undefined, recommenderType: PublicRecommenderType, request: IBidRequest, initialBid: IBid) => Result<IBuiltCarousel>;
49
49
  export declare class InvalidRecommenderTypeError extends Error {
50
50
  type: string;
51
51
  constructor(type: string);
@@ -2,4 +2,5 @@ export * from './helpers';
2
2
  export * from './models';
3
3
  export * from './services';
4
4
  export * from './Api';
5
- export * from './BuildInfo';
5
+ export * as SurfsideAdsCoreVersionInfo from './BuildInfo';
6
+ export * from './Init';
@@ -4,7 +4,7 @@ export interface ICompiledCategoryGlobalConfigDTO {
4
4
  globalPatterns: string[];
5
5
  }
6
6
  export interface ICompiledCategoryPublisherConfigurationDTO {
7
- 'strategy': CategoryStrategy;
7
+ strategy: CategoryStrategy;
8
8
  customCanonicalMap: Record<string, string>;
9
9
  customPatterns: string[];
10
10
  }
@@ -32,6 +32,7 @@ export interface IPublisherConfiguration {
32
32
  carouselStyleSheet?: string;
33
33
  reAuctionEnabled?: boolean;
34
34
  reAuctionInterval?: number;
35
+ brandTakeover?: Record<string, string[]>;
35
36
  }
36
37
  export interface ICompiledPublisherConfigurationTemplatesDTO {
37
38
  productCardTemplate: string;
@@ -65,6 +66,10 @@ export interface ICompiledPublisherConfigurationSettingsDTO {
65
66
  sponsoredByEnabled?: boolean;
66
67
  defaultImage?: string;
67
68
  strictCategoryMatching?: boolean;
69
+ disableSurfsideAds?: boolean;
70
+ excludedLocations?: string[];
71
+ excludedZones?: string[];
72
+ brandTakeover?: Record<string, string[]>;
68
73
  }
69
74
  export interface ICompiledPublisherConfigurationDTO {
70
75
  templates: ICompiledPublisherConfigurationTemplatesDTO;
@@ -72,6 +77,11 @@ export interface ICompiledPublisherConfigurationDTO {
72
77
  category: ICompiledCategoryPublisherConfigurationDTO;
73
78
  dynamicZones?: Record<string, IDynamicZone>;
74
79
  }
80
+ export interface ILoadedTemplateModules {
81
+ productCardTemplateRaw?: TemplateSpecification;
82
+ clickthroughTemplateRaw?: TemplateSpecification;
83
+ callbacks?: Callbacks;
84
+ }
75
85
  export interface ICompiledPublisherConfiguration {
76
86
  settings: ICompiledPublisherConfigurationSettingsDTO;
77
87
  templates: ICompiledPublisherConfigurationTemplates;
@@ -1,3 +1,4 @@
1
1
  export * from './Configuration';
2
2
  export * from './Product';
3
3
  export * from './Recommended';
4
+ export * from './Category';
@@ -229,7 +229,7 @@ export interface ISite {
229
229
  }
230
230
  export interface IDeal {
231
231
  id: string;
232
- bidfloor: number;
232
+ bidfloor?: number;
233
233
  bidfloorcur?: string;
234
234
  at?: number;
235
235
  wseat?: string[];
@@ -408,4 +408,7 @@ export interface ISurfExtension {
408
408
  accountLocationId: string;
409
409
  surfCategory: string[];
410
410
  keywords?: string[];
411
+ publisherConfig?: string;
412
+ bcreatives?: number[];
413
+ bplacements?: number[];
411
414
  }
@@ -1,6 +1,7 @@
1
1
  export interface IBidExtensions extends Record<string, any> {
2
2
  primaryCategory?: string;
3
3
  originalCategories?: string[];
4
+ filteringEnabled?: boolean;
4
5
  }
5
6
  export interface IBid {
6
7
  id: string;
@@ -1,8 +1,21 @@
1
- import type { IBidRequest, IBidResponse } from '../models';
1
+ import type { IBidRequest, IBidResponse, ICompiledPublisherConfiguration, INativeTemplateDelegateWindow } from '../models';
2
2
  import { type ILogger } from './Logger';
3
- import { type AsyncResult } from './Result';
3
+ import { type AsyncResult, type ErrResult, type Result } from './Result';
4
4
  export type RequestBidsFn = (request: IBidRequest) => AsyncResult<IBidResponse>;
5
- export declare const RequestBids: (logger: ILogger | undefined, url: string, accountId: string, siteId: string, locationId: string, channelId: string, bidRequest: IBidRequest) => AsyncResult<IBidResponse>;
5
+ export declare const RequestBids: (logger: ILogger | undefined, url: string, accountId: string, siteId: string, locationId: string, channelId: string, excludedZones: string[] | undefined, bidRequest: IBidRequest) => AsyncResult<IBidResponse>;
6
+ export declare class StatefulRequestBidsSubscriber {
7
+ private _log;
8
+ private _requestBids;
9
+ private _bounce?;
10
+ private _resolvers;
11
+ private _requestToImpIdMap;
12
+ private _request;
13
+ constructor(_log: ILogger | undefined, _requestBids: RequestBidsFn);
14
+ kill(err: ErrResult): void;
15
+ debounce(bidRequest: IBidRequest, res: (value: Result<IBidResponse>) => void): void;
16
+ }
17
+ export declare const DebounceBidRequests: (state: StatefulRequestBidsSubscriber) => (bidRequest: IBidRequest) => AsyncResult<IBidResponse>;
18
+ export declare const WrapBidRequestDebouncerIfEnabled: (logger: ILogger | undefined, config: ICompiledPublisherConfiguration, window: INativeTemplateDelegateWindow, requestBids: RequestBidsFn) => RequestBidsFn;
6
19
  export declare class NoBidsError extends Error {
7
20
  readonly request: IBidRequest;
8
21
  readonly response?: Response | undefined;
@@ -29,3 +42,6 @@ export declare class MalformedBidResponseError extends Error {
29
42
  readonly bidResponse: unknown;
30
43
  constructor(request: IBidRequest, response: Response, bidResponse: unknown);
31
44
  }
45
+ export declare class MissingBidRequestInDebouncerError extends Error {
46
+ constructor();
47
+ }
@@ -1,4 +1,12 @@
1
1
  import { type ICompiledCategoryPublisherConfiguration } from '../models/retail/Category';
2
2
  import { type ILogger } from './Logger';
3
- export type GenerateCategoriesFn = (providedCategories: string[]) => string[];
3
+ export type MapCategoriesFn = (providedCategories: string[]) => string[];
4
+ /**
5
+ * @deprecated Use MapCategoriesFn
6
+ */
7
+ export type GenerateCategoriesFn = MapCategoriesFn;
8
+ export declare const MapCategories: (logger: ILogger | undefined, providedCategories: string[], page: string, categoryConfig: ICompiledCategoryPublisherConfiguration) => string[];
9
+ /**
10
+ * @deprecated Use MapCategories
11
+ */
4
12
  export declare const GenerateCategories: (logger: ILogger | undefined, providedCategories: string[], page: string, categoryConfig: ICompiledCategoryPublisherConfiguration) => string[];
@@ -1,6 +1,27 @@
1
1
  import type Handlebars from 'handlebars/runtime';
2
- import type { ICompiledPublisherConfiguration } from '../models';
3
- import { type AsyncResult, type ILogger } from '.';
2
+ import type { ICompiledPublisherConfiguration, ICompiledPublisherConfigurationDTO, ILoadedTemplateModules } from '../models';
3
+ import { type AsyncResult, type ILogger, type Result } from '.';
4
4
  import { type HandlebarsHelpers } from '../helpers';
5
+ import { type ICompiledCategoryGlobalConfigDTO, type ICompiledCategoryPublisherConfiguration, type ICompiledCategoryPublisherConfigurationDTO } from '../models/retail/Category';
5
6
  export type GetConfigurationFn = () => AsyncResult<ICompiledPublisherConfiguration>;
6
7
  export declare const GetConfiguration: (logger: ILogger | undefined, url: string, handlebars: typeof Handlebars, helpers: HandlebarsHelpers, accountId: string, siteId: string) => AsyncResult<ICompiledPublisherConfiguration>;
8
+ export declare const LoadConfigurationFile: (logger: ILogger | undefined, accountId: string, siteId: string) => AsyncResult<ICompiledPublisherConfigurationDTO>;
9
+ export declare const LoadConfigurationTemplateModules: (logger: ILogger | undefined, configurationDto: ICompiledPublisherConfigurationDTO) => AsyncResult<ILoadedTemplateModules>;
10
+ export declare const CreateCompiledConfiguration: (logger: ILogger | undefined, loadedTemplateModules: ILoadedTemplateModules, configurationDto: ICompiledPublisherConfigurationDTO, handlebars: typeof Handlebars, handlebarsHelpers: HandlebarsHelpers, globalCategories: ICompiledCategoryGlobalConfigDTO) => Result<ICompiledPublisherConfiguration>;
11
+ export declare const LoadCompiledConfiguration: (logger: ILogger | undefined, configurationDto: ICompiledPublisherConfigurationDTO, handlebars: typeof Handlebars, handlebarsHelpers: HandlebarsHelpers) => AsyncResult<Omit<ICompiledPublisherConfiguration, "category">>;
12
+ export declare const CreateCategoryConfiguration: (logger: ILogger | undefined, globalCategories: ICompiledCategoryGlobalConfigDTO, publisherCategories: ICompiledCategoryPublisherConfigurationDTO | undefined) => Result<ICompiledCategoryPublisherConfiguration>;
13
+ export declare const LoadGlobalCategoryConfiguration: (logger: ILogger | undefined) => AsyncResult<ICompiledCategoryGlobalConfigDTO>;
14
+ export declare const LoadConfiguration: (logger: ILogger | undefined, accountId: string, siteId: string, handlebars: typeof Handlebars, handlebarsHelpers: HandlebarsHelpers) => AsyncResult<ICompiledPublisherConfiguration>;
15
+ export declare class FailedToFetchConfigurationError extends Error {
16
+ accountId: string;
17
+ siteId: string;
18
+ constructor(accountId: string, siteId: string);
19
+ }
20
+ export declare class MalformedConfigurationError extends Error {
21
+ accountId: string;
22
+ siteId: string;
23
+ constructor(accountId: string, siteId: string);
24
+ }
25
+ export declare class FailedToFetchGlobalCategoryConfigurationError extends Error {
26
+ constructor();
27
+ }
@@ -1,4 +1,5 @@
1
- import type { NativeRequestBuilderFn, RequestBuilder, RequestBuilderFn } from '../helpers';
1
+ import { ZoneExcludedError } from '../Api';
2
+ import type { ImpressionRequestBuilder, NativeRequestBuilderFn, RequestBuilder, RequestBuilderFn } from '../helpers';
2
3
  import type { IBidRequest, ICompiledPublisherConfiguration } from '../models';
3
4
  import { type DynamicCreative, type IDynamicZone, type IScreenSize } from '../models/dynamic/DynamicZone';
4
5
  import type { IScreen } from './Device';
@@ -6,11 +7,12 @@ import { type ILogger } from './Logger';
6
7
  import { type AsyncResult, type Result } from './Result';
7
8
  export interface IDynamicZoneRequest {
8
9
  request: IBidRequest;
10
+ /** @deprecated */
9
11
  requestIds: Record<string, DynamicCreative>;
10
12
  }
11
13
  export type BuildDynamicZoneRequestFn = (zoneId: string, dynamicZone: IDynamicZone, category?: string[]) => Result<IDynamicZoneRequest>;
12
14
  export type GetDynamicZoneFn = (zoneId: string) => AsyncResult<IDynamicZone>;
13
- export declare const GetDynamicZone: (logger: ILogger | undefined, config: ICompiledPublisherConfiguration, zoneId: string) => Promise<import("./Result").ErrResult<MissingDynamicZoneError> | import("./Result").OkResult<IDynamicZone>>;
15
+ export declare const GetDynamicZone: (logger: ILogger | undefined, config: ICompiledPublisherConfiguration, zoneId: string) => Promise<import("./Result").ErrResult<ZoneExcludedError> | import("./Result").OkResult<IDynamicZone>>;
14
16
  export declare const BuildDynamicZoneRequest: (logger: ILogger | undefined, startRequest: RequestBuilderFn, nativeRequest: NativeRequestBuilderFn, screenInfo: IScreen, zoneId: string, dynamicZone: IDynamicZone, category?: string[]) => Result<IDynamicZoneRequest>;
15
17
  export declare class NoDynamicScreenSizeMatchError extends Error {
16
18
  readonly dynamicZone: IDynamicZone;
@@ -19,7 +21,7 @@ export declare class NoDynamicScreenSizeMatchError extends Error {
19
21
  constructor(dynamicZone: IDynamicZone, screenInfo: IScreen, selectedStringSize: string);
20
22
  }
21
23
  export declare const buildDynamicBidRequestFromSelectedScreenSize: (logger: ILogger | undefined, startRequest: RequestBuilderFn, nativeRequest: NativeRequestBuilderFn, zoneId: string, screenSize: IScreenSize, category?: string[]) => Result<IDynamicZoneRequest>;
22
- export declare const buildDynamicBidRequestRecursive: (logger: ILogger | undefined, nativeRequest: NativeRequestBuilderFn, builder: RequestBuilder, requestIds: Record<string, DynamicCreative>, [head, ...tail]: DynamicCreative[]) => Result<[builder: RequestBuilder, requestIds: Record<string, DynamicCreative>]>;
24
+ export declare const buildDynamicBidRequestRecursive: (logger: ILogger | undefined, nativeRequest: NativeRequestBuilderFn, builder: ImpressionRequestBuilder, requestIds: Record<string, DynamicCreative>, [head, ...tail]: DynamicCreative[]) => Result<[builder: RequestBuilder, /** @deprecated */ requestIds: Record<string, DynamicCreative>]>;
23
25
  export declare class MissingDynamicZoneError extends Error {
24
26
  readonly zoneId: string;
25
27
  constructor(zoneId: string);
@@ -1,5 +1,34 @@
1
1
  export type LoggerFn = (...args: any[]) => void;
2
- export type ContextFn = (...prefix: (string | undefined)[]) => IContextLogger;
2
+ export type ContextFn = (name: string | undefined, tags?: Record<string, string>) => IContextLogger;
3
+ export interface ITelemetryDevice {
4
+ ua?: string;
5
+ browser?: string;
6
+ os?: string;
7
+ osv?: string;
8
+ make?: string;
9
+ model?: string;
10
+ deviceType?: number;
11
+ screenW?: number;
12
+ screenH?: number;
13
+ language?: string;
14
+ }
15
+ export interface ITelemetryEntry {
16
+ name: string;
17
+ durationMs: number;
18
+ timestamp: number;
19
+ pageUrl?: string;
20
+ device?: ITelemetryDevice;
21
+ tags?: Record<string, string>;
22
+ }
23
+ export declare abstract class ITelemetryCollector {
24
+ protected readonly accountId: string;
25
+ protected readonly siteId: string;
26
+ protected readonly channelId: string;
27
+ protected readonly locationId: string;
28
+ protected readonly device: ITelemetryDevice | undefined;
29
+ constructor(accountId: string, siteId: string, channelId: string, locationId: string, device: ITelemetryDevice | undefined);
30
+ abstract record(entry: ITelemetryEntry): void;
31
+ }
3
32
  export interface ILogger {
4
33
  info: LoggerFn;
5
34
  debug: LoggerFn;
@@ -9,6 +38,11 @@ export interface ILogger {
9
38
  }
10
39
  export interface IContextLogger extends ILogger {
11
40
  with: ContextFn;
41
+ prefix?: string;
42
+ time?: (name: string) => () => void;
43
+ collector?: ITelemetryCollector;
12
44
  }
13
45
  export declare const InitLogger: (rich?: boolean) => IContextLogger;
14
- export declare const Ctx: (logger: ILogger | undefined) => IContextLogger | undefined;
46
+ export declare function CreateTelemetryLogger(logger: ILogger, telemetryCollector: ITelemetryCollector | undefined): IContextLogger;
47
+ export declare function Ctx(logger: ILogger): IContextLogger;
48
+ export declare function Ctx(logger: ILogger | undefined): IContextLogger | undefined;
@@ -1 +1,4 @@
1
+ /**
2
+ * @deprecated @see Memoize
3
+ */
1
4
  export declare const Memo: <T extends any[], R>(fn: (...args: T) => R) => (...args: T) => R;
@@ -4,8 +4,8 @@ import type { GetRecommendedProductFromProductIdFn } from './Product';
4
4
  export type NonPersonalRecommenderFn = (category?: string) => AsyncGenerator<IProductInformation>;
5
5
  export type PersonalRecommenderFn = (userId: string, category?: string) => AsyncGenerator<IProductInformation>;
6
6
  export declare function GenerateTopProducts(logger: ILogger | undefined, productFeed: GetRecommendedProductFromProductIdFn, url: string, accountId: string, siteId: string, locationId: string, category?: string): AsyncGenerator<IProductInformation>;
7
- export declare function GenerateForYou(logger: ILogger | undefined, productFeed: GetRecommendedProductFromProductIdFn, url: string, accountId: string, siteId: string, locationId: string, userId: string, category?: string): AsyncGenerator<IProductInformation>;
8
- export declare function GeneratePreviousPurchases(logger: ILogger | undefined, productFeed: GetRecommendedProductFromProductIdFn, url: string, accountId: string, siteId: string, locationId: string, userId: string, category?: string): AsyncGenerator<IProductInformation>;
7
+ export declare function GenerateForYou(logger: ILogger | undefined, productFeed: GetRecommendedProductFromProductIdFn, url: string, accountId: string, siteId: string, locationId: string, userId: string | undefined, category?: string): AsyncGenerator<IProductInformation>;
8
+ export declare function GeneratePreviousPurchases(logger: ILogger | undefined, productFeed: GetRecommendedProductFromProductIdFn, url: string, accountId: string, siteId: string, locationId: string, userId: string | undefined, category?: string): AsyncGenerator<IProductInformation>;
9
9
  export declare class NoRecommendationsError extends Error {
10
10
  constructor();
11
11
  }
@@ -18,6 +18,7 @@ export declare const GetValue: <T, E = Error>(result: Result<T, E> | undefined)
18
18
  export declare const ValueOr: <T, E = Error, U = T>(result: Result<T, E> | undefined, or: U) => T | U;
19
19
  export declare const GetValueOrThrow: <T>(result: Result<T, Error>, error?: Error) => T;
20
20
  export declare const WrapValue: <T>(value: T | undefined | null) => Result<T>;
21
+ export declare const WrapValueAsync: <T>(value: T | undefined | null) => AsyncResult<T>;
21
22
  export declare const AssertValue: <T>(result: Result<T, Error>, error?: Error) => T;
22
23
  export declare const AllOrNone: <T>(results: Result<T, Error>[]) => Result<T[]>;
23
24
  export declare const Some: <T>(results: Result<T, Error>[]) => OkResult<T[]>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@surfside/ads-core",
3
- "version": "2.0.22",
3
+ "version": "2.1.0",
4
4
  "module": "./lib/esm/index.js",
5
5
  "main": "./lib/cjs/index.js",
6
6
  "types": "./lib/types/index.d.ts",
@@ -37,8 +37,8 @@
37
37
  },
38
38
  "scripts": {
39
39
  "clean": "rm -rf ./lib",
40
- "prebuild": "echo \"export const SurfsideAdsCoreVersionInfo = { buildBranch: '$(git rev-parse --abbrev-ref HEAD)', buildHash: '$(git rev-parse --short HEAD)', buildVer: '$(bun -e 'console.log(require(\"./package.json\").version)')'};\" > src/BuildInfo.ts",
41
- "build": "bunx npm-run-all --parallel \"types\" \"esm\" \"cjs\"",
40
+ "build": "bun x npm-run-all --parallel \"types\" \"esm\" \"cjs\"",
41
+ "build:debug": "bun ./debug.build.ts",
42
42
  "types": "tsc -p ./tsconfig.types.json",
43
43
  "esm": "tsc -p ./tsconfig.esm.json",
44
44
  "cjs": "tsc -p tsconfig.cjs.json",