@surfside/ads-core 1.0.6 → 2.0.2

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 (293) hide show
  1. package/README.md +15 -64
  2. package/lib/cjs/Api.js +195 -0
  3. package/lib/cjs/Api.js.map +1 -0
  4. package/lib/cjs/helpers/Generator.js +50 -0
  5. package/lib/cjs/helpers/Generator.js.map +1 -0
  6. package/lib/cjs/helpers/Handlebars.js +270 -0
  7. package/lib/cjs/helpers/Handlebars.js.map +1 -0
  8. package/lib/cjs/helpers/NativeRequestBuilder.js +174 -0
  9. package/lib/cjs/helpers/NativeRequestBuilder.js.map +1 -0
  10. package/lib/cjs/helpers/RequestBuilder.js +160 -0
  11. package/lib/cjs/helpers/RequestBuilder.js.map +1 -0
  12. package/lib/cjs/helpers/TryGet.js +14 -0
  13. package/lib/cjs/helpers/TryGet.js.map +1 -0
  14. package/lib/cjs/helpers/Window.js +24 -0
  15. package/lib/cjs/helpers/Window.js.map +1 -0
  16. package/lib/cjs/helpers/index.js +24 -0
  17. package/lib/cjs/helpers/index.js.map +1 -0
  18. package/lib/cjs/helpers/response/Banner.js +4 -0
  19. package/lib/cjs/helpers/response/Banner.js.map +1 -0
  20. package/lib/cjs/helpers/response/BuiltResponse.js +27 -0
  21. package/lib/cjs/helpers/response/BuiltResponse.js.map +1 -0
  22. package/lib/cjs/helpers/response/Carousel.js +282 -0
  23. package/lib/cjs/helpers/response/Carousel.js.map +1 -0
  24. package/lib/cjs/helpers/response/Clickthrough.js +24 -0
  25. package/lib/cjs/helpers/response/Clickthrough.js.map +1 -0
  26. package/lib/cjs/helpers/response/ProductCard.js +198 -0
  27. package/lib/cjs/helpers/response/ProductCard.js.map +1 -0
  28. package/lib/cjs/helpers/response/Video.js +4 -0
  29. package/lib/cjs/helpers/response/Video.js.map +1 -0
  30. package/lib/cjs/helpers/response/index.js +23 -0
  31. package/lib/cjs/helpers/response/index.js.map +1 -0
  32. package/lib/cjs/index.js +21 -0
  33. package/lib/cjs/index.js.map +1 -0
  34. package/lib/cjs/models/dynamic/DynamicZone.js +12 -0
  35. package/lib/cjs/models/dynamic/DynamicZone.js.map +1 -0
  36. package/lib/cjs/models/dynamic/index.js +18 -0
  37. package/lib/cjs/models/dynamic/index.js.map +1 -0
  38. package/lib/cjs/models/index.js +22 -0
  39. package/lib/cjs/models/index.js.map +1 -0
  40. package/lib/cjs/models/retail/Configuration.js +10 -0
  41. package/lib/cjs/models/retail/Configuration.js.map +1 -0
  42. package/lib/cjs/models/retail/Product.js +4 -0
  43. package/lib/cjs/models/retail/Product.js.map +1 -0
  44. package/lib/cjs/models/retail/Recommended.js +3 -0
  45. package/lib/cjs/models/retail/Recommended.js.map +1 -0
  46. package/lib/cjs/models/retail/index.js +20 -0
  47. package/lib/cjs/models/retail/index.js.map +1 -0
  48. package/lib/cjs/models/rtb/BidRequest.js +20 -0
  49. package/lib/cjs/models/rtb/BidRequest.js.map +1 -0
  50. package/lib/cjs/models/rtb/BidResponse.js +3 -0
  51. package/lib/cjs/models/rtb/BidResponse.js.map +1 -0
  52. package/lib/cjs/models/rtb/NativeRequest.js +122 -0
  53. package/lib/cjs/models/rtb/NativeRequest.js.map +1 -0
  54. package/lib/cjs/models/rtb/NativeResponse.js +26 -0
  55. package/lib/cjs/models/rtb/NativeResponse.js.map +1 -0
  56. package/lib/cjs/models/rtb/index.js +21 -0
  57. package/lib/cjs/models/rtb/index.js.map +1 -0
  58. package/lib/cjs/models/tracking/Geo.js +3 -0
  59. package/lib/cjs/models/tracking/Geo.js.map +1 -0
  60. package/lib/cjs/models/tracking/index.js +18 -0
  61. package/lib/cjs/models/tracking/index.js.map +1 -0
  62. package/lib/cjs/models/vast/Vast.js +4 -0
  63. package/lib/cjs/models/vast/Vast.js.map +1 -0
  64. package/lib/cjs/models/vast/index.js +18 -0
  65. package/lib/cjs/models/vast/index.js.map +1 -0
  66. package/lib/cjs/services/Bidder.js +128 -0
  67. package/lib/cjs/services/Bidder.js.map +1 -0
  68. package/lib/cjs/services/Configuration.js +93 -0
  69. package/lib/cjs/services/Configuration.js.map +1 -0
  70. package/lib/cjs/services/Device.js +236 -0
  71. package/lib/cjs/services/Device.js.map +1 -0
  72. package/lib/cjs/services/Dynamic.js +129 -0
  73. package/lib/cjs/services/Dynamic.js.map +1 -0
  74. package/lib/cjs/services/Geo.js +35 -0
  75. package/lib/cjs/services/Geo.js.map +1 -0
  76. package/lib/cjs/services/Logger.js +57 -0
  77. package/lib/cjs/services/Logger.js.map +1 -0
  78. package/lib/cjs/services/Memoization.js +17 -0
  79. package/lib/cjs/services/Memoization.js.map +1 -0
  80. package/lib/cjs/services/Product.js +127 -0
  81. package/lib/cjs/services/Product.js.map +1 -0
  82. package/lib/cjs/services/Recommender.js +83 -0
  83. package/lib/cjs/services/Recommender.js.map +1 -0
  84. package/lib/cjs/services/Result.js +220 -0
  85. package/lib/cjs/services/Result.js.map +1 -0
  86. package/lib/cjs/services/Template.js +43 -0
  87. package/lib/cjs/services/Template.js.map +1 -0
  88. package/lib/cjs/services/index.js +28 -0
  89. package/lib/cjs/services/index.js.map +1 -0
  90. package/lib/cjs/services/mock/Bidder.js +3 -0
  91. package/lib/cjs/services/mock/Bidder.js.map +1 -0
  92. package/lib/cjs/services/mock/index.js +18 -0
  93. package/lib/cjs/services/mock/index.js.map +1 -0
  94. package/lib/esm/Api.js +183 -0
  95. package/lib/esm/Api.js.map +1 -0
  96. package/lib/esm/helpers/Generator.js +42 -0
  97. package/lib/esm/helpers/Generator.js.map +1 -0
  98. package/lib/esm/helpers/Handlebars.js +251 -0
  99. package/lib/esm/helpers/Handlebars.js.map +1 -0
  100. package/lib/esm/helpers/NativeRequestBuilder.js +169 -0
  101. package/lib/esm/helpers/NativeRequestBuilder.js.map +1 -0
  102. package/lib/esm/helpers/RequestBuilder.js +157 -0
  103. package/lib/esm/helpers/RequestBuilder.js.map +1 -0
  104. package/lib/esm/helpers/TryGet.js +10 -0
  105. package/lib/esm/helpers/TryGet.js.map +1 -0
  106. package/lib/esm/helpers/Window.js +20 -0
  107. package/lib/esm/helpers/Window.js.map +1 -0
  108. package/lib/esm/helpers/index.js +8 -0
  109. package/lib/esm/helpers/index.js.map +1 -0
  110. package/lib/esm/helpers/response/Banner.js +3 -0
  111. package/lib/esm/helpers/response/Banner.js.map +1 -0
  112. package/lib/esm/helpers/response/BuiltResponse.js +22 -0
  113. package/lib/esm/helpers/response/BuiltResponse.js.map +1 -0
  114. package/lib/esm/helpers/response/Carousel.js +273 -0
  115. package/lib/esm/helpers/response/Carousel.js.map +1 -0
  116. package/lib/esm/helpers/response/Clickthrough.js +20 -0
  117. package/lib/esm/helpers/response/Clickthrough.js.map +1 -0
  118. package/lib/esm/helpers/response/ProductCard.js +189 -0
  119. package/lib/esm/helpers/response/ProductCard.js.map +1 -0
  120. package/lib/esm/helpers/response/Video.js +3 -0
  121. package/lib/esm/helpers/response/Video.js.map +1 -0
  122. package/lib/esm/helpers/response/index.js +7 -0
  123. package/lib/esm/helpers/response/index.js.map +1 -0
  124. package/lib/esm/index.js +5 -0
  125. package/lib/esm/index.js.map +1 -0
  126. package/lib/esm/models/dynamic/DynamicZone.js +11 -0
  127. package/lib/esm/models/dynamic/DynamicZone.js.map +1 -0
  128. package/lib/esm/models/dynamic/index.js +2 -0
  129. package/lib/esm/models/dynamic/index.js.map +1 -0
  130. package/lib/esm/models/index.js +6 -0
  131. package/lib/esm/models/index.js.map +1 -0
  132. package/lib/esm/models/retail/Configuration.js +9 -0
  133. package/lib/esm/models/retail/Configuration.js.map +1 -0
  134. package/lib/esm/models/retail/Product.js +3 -0
  135. package/lib/esm/models/retail/Product.js.map +1 -0
  136. package/lib/esm/models/retail/Recommended.js +2 -0
  137. package/lib/esm/models/retail/Recommended.js.map +1 -0
  138. package/lib/esm/models/retail/index.js +4 -0
  139. package/lib/esm/models/retail/index.js.map +1 -0
  140. package/lib/esm/models/rtb/BidRequest.js +17 -0
  141. package/lib/esm/models/rtb/BidRequest.js.map +1 -0
  142. package/lib/esm/models/rtb/BidResponse.js +2 -0
  143. package/lib/esm/models/rtb/BidResponse.js.map +1 -0
  144. package/lib/esm/models/rtb/NativeRequest.js +119 -0
  145. package/lib/esm/models/rtb/NativeRequest.js.map +1 -0
  146. package/lib/esm/models/rtb/NativeResponse.js +23 -0
  147. package/lib/esm/models/rtb/NativeResponse.js.map +1 -0
  148. package/lib/esm/models/rtb/index.js +5 -0
  149. package/lib/esm/models/rtb/index.js.map +1 -0
  150. package/lib/esm/models/tracking/Geo.js +2 -0
  151. package/lib/esm/models/tracking/Geo.js.map +1 -0
  152. package/lib/esm/models/tracking/index.js +2 -0
  153. package/lib/esm/models/tracking/index.js.map +1 -0
  154. package/lib/esm/models/vast/Vast.js +3 -0
  155. package/lib/esm/models/vast/Vast.js.map +1 -0
  156. package/lib/esm/models/vast/index.js +2 -0
  157. package/lib/esm/models/vast/index.js.map +1 -0
  158. package/lib/esm/services/Bidder.js +119 -0
  159. package/lib/esm/services/Bidder.js.map +1 -0
  160. package/lib/esm/services/Configuration.js +56 -0
  161. package/lib/esm/services/Configuration.js.map +1 -0
  162. package/lib/esm/services/Device.js +232 -0
  163. package/lib/esm/services/Device.js.map +1 -0
  164. package/lib/esm/services/Dynamic.js +120 -0
  165. package/lib/esm/services/Dynamic.js.map +1 -0
  166. package/lib/esm/services/Geo.js +30 -0
  167. package/lib/esm/services/Geo.js.map +1 -0
  168. package/lib/esm/services/Logger.js +52 -0
  169. package/lib/esm/services/Logger.js.map +1 -0
  170. package/lib/esm/services/Memoization.js +13 -0
  171. package/lib/esm/services/Memoization.js.map +1 -0
  172. package/lib/esm/services/Product.js +120 -0
  173. package/lib/esm/services/Product.js.map +1 -0
  174. package/lib/esm/services/Recommender.js +78 -0
  175. package/lib/esm/services/Recommender.js.map +1 -0
  176. package/lib/esm/services/Result.js +199 -0
  177. package/lib/esm/services/Result.js.map +1 -0
  178. package/lib/esm/services/Template.js +38 -0
  179. package/lib/esm/services/Template.js.map +1 -0
  180. package/lib/esm/services/index.js +12 -0
  181. package/lib/esm/services/index.js.map +1 -0
  182. package/lib/esm/services/mock/Bidder.js +2 -0
  183. package/lib/esm/services/mock/Bidder.js.map +1 -0
  184. package/lib/esm/services/mock/index.js +2 -0
  185. package/lib/esm/services/mock/index.js.map +1 -0
  186. package/lib/types/Api.d.ts +169 -0
  187. package/lib/types/helpers/Generator.d.ts +5 -0
  188. package/lib/types/helpers/{handlebars/index.d.ts → Handlebars.d.ts} +10 -5
  189. package/lib/types/helpers/NativeRequestBuilder.d.ts +29 -0
  190. package/lib/types/helpers/RequestBuilder.d.ts +16 -0
  191. package/lib/types/helpers/TryGet.d.ts +2 -0
  192. package/lib/types/helpers/Window.d.ts +3 -0
  193. package/lib/types/helpers/index.d.ts +7 -4
  194. package/lib/types/helpers/response/Banner.d.ts +22 -0
  195. package/lib/types/helpers/response/BuiltResponse.d.ts +31 -0
  196. package/lib/types/helpers/response/Carousel.d.ts +51 -0
  197. package/lib/types/helpers/response/Clickthrough.d.ts +3 -0
  198. package/lib/types/helpers/response/ProductCard.d.ts +49 -0
  199. package/lib/types/helpers/response/Video.d.ts +17 -0
  200. package/lib/types/helpers/response/index.d.ts +6 -0
  201. package/lib/types/index.d.ts +2 -17
  202. package/lib/types/models/dynamic/DynamicZone.d.ts +37 -0
  203. package/lib/types/models/dynamic/index.d.ts +1 -0
  204. package/lib/types/models/index.d.ts +2 -1
  205. package/lib/types/models/retail/{IPublisherConfiguration.d.ts → Configuration.d.ts} +11 -9
  206. package/lib/types/models/retail/Product.d.ts +19 -0
  207. package/lib/types/models/retail/index.d.ts +3 -3
  208. package/lib/types/models/rtb/{IBidRequest.d.ts → BidRequest.d.ts} +28 -18
  209. package/lib/types/models/rtb/NativeRequest.d.ts +170 -0
  210. package/lib/types/models/rtb/{native/INativeResponse.d.ts → NativeResponse.d.ts} +5 -5
  211. package/lib/types/models/rtb/index.d.ts +4 -3
  212. package/lib/types/models/tracking/index.d.ts +1 -3
  213. package/lib/types/models/vast/Vast.d.ts +6 -9
  214. package/lib/types/services/Bidder.d.ts +31 -0
  215. package/lib/types/services/Configuration.d.ts +6 -0
  216. package/lib/types/services/Device.d.ts +12 -0
  217. package/lib/types/services/Dynamic.d.ts +26 -0
  218. package/lib/types/services/Geo.d.ts +6 -0
  219. package/lib/types/services/Logger.d.ts +14 -0
  220. package/lib/types/services/Memoization.d.ts +1 -0
  221. package/lib/types/services/Product.d.ts +13 -0
  222. package/lib/types/services/Recommender.d.ts +8 -0
  223. package/lib/types/services/Result.d.ts +57 -0
  224. package/lib/types/services/Template.d.ts +7 -0
  225. package/lib/types/services/index.d.ts +11 -5
  226. package/lib/types/services/mock/Bidder.d.ts +1 -0
  227. package/lib/types/services/mock/index.d.ts +1 -0
  228. package/package.json +42 -47
  229. package/lib/index.js +0 -1
  230. package/lib/types/constant-values/index.d.ts +0 -46
  231. package/lib/types/errors/index.d.ts +0 -3
  232. package/lib/types/helpers/generators/CollectN.d.ts +0 -2
  233. package/lib/types/helpers/generators/index.d.ts +0 -1
  234. package/lib/types/helpers/requests/RequestBuilder.d.ts +0 -124
  235. package/lib/types/helpers/requests/SimpleBannerRequest.d.ts +0 -26
  236. package/lib/types/helpers/requests/index.d.ts +0 -2
  237. package/lib/types/helpers/responses/BuildBannerResponse.d.ts +0 -10
  238. package/lib/types/helpers/responses/BuildNativeResponse.d.ts +0 -21
  239. package/lib/types/helpers/responses/BuildVideoResponse.d.ts +0 -0
  240. package/lib/types/helpers/responses/ClickthroughHelpers.d.ts +0 -2
  241. package/lib/types/helpers/responses/VastHelpers.d.ts +0 -4
  242. package/lib/types/helpers/responses/index.d.ts +0 -4
  243. package/lib/types/middleware/DeviceMiddleware.d.ts +0 -3
  244. package/lib/types/middleware/GeoMiddleware.d.ts +0 -3
  245. package/lib/types/middleware/IdentityMiddleware.d.ts +0 -4
  246. package/lib/types/middleware/index.d.ts +0 -3
  247. package/lib/types/models/retail/IProductInformation.d.ts +0 -37
  248. package/lib/types/models/rtb/native/Constants.d.ts +0 -60
  249. package/lib/types/models/rtb/native/INativeRequest.d.ts +0 -54
  250. package/lib/types/models/rtb/native/NativeConstants.d.ts +0 -120
  251. package/lib/types/models/rtb/native/NativeRequestBuilder.d.ts +0 -158
  252. package/lib/types/models/rtb/native/index.d.ts +0 -4
  253. package/lib/types/models/tracking/IEvents.d.ts +0 -82
  254. package/lib/types/models/tracking/IUserID.d.ts +0 -1
  255. package/lib/types/services/OverrideService.d.ts +0 -10
  256. package/lib/types/services/logger/ILoggerService.d.ts +0 -39
  257. package/lib/types/services/logger/LocalLoggerService.d.ts +0 -19
  258. package/lib/types/services/logger/index.d.ts +0 -2
  259. package/lib/types/services/product-feed/IProductFeedService.d.ts +0 -5
  260. package/lib/types/services/product-feed/SurfsideProductFeedService.d.ts +0 -11
  261. package/lib/types/services/product-feed/index.d.ts +0 -2
  262. package/lib/types/services/recommender/IRecommenderService.d.ts +0 -47
  263. package/lib/types/services/recommender/SurfsideRecommenderService.d.ts +0 -31
  264. package/lib/types/services/recommender/index.d.ts +0 -2
  265. package/lib/types/services/rtb/bidder/IBidderService.d.ts +0 -12
  266. package/lib/types/services/rtb/bidder/SurfsideBidderService.d.ts +0 -28
  267. package/lib/types/services/rtb/bidder/index.d.ts +0 -2
  268. package/lib/types/services/rtb/configuration/IConfigurationService.d.ts +0 -14
  269. package/lib/types/services/rtb/configuration/SurfsideConfigurationService.d.ts +0 -29
  270. package/lib/types/services/rtb/configuration/index.d.ts +0 -2
  271. package/lib/types/services/rtb/index.d.ts +0 -2
  272. package/lib/types/services/tracking/device/DeviceOverrideService.d.ts +0 -8
  273. package/lib/types/services/tracking/device/IDeviceService.d.ts +0 -4
  274. package/lib/types/services/tracking/device/SurfsideDeviceService.d.ts +0 -16
  275. package/lib/types/services/tracking/device/index.d.ts +0 -3
  276. package/lib/types/services/tracking/events/IEventService.d.ts +0 -5
  277. package/lib/types/services/tracking/events/SurfsideEventService.d.ts +0 -42
  278. package/lib/types/services/tracking/events/index.d.ts +0 -2
  279. package/lib/types/services/tracking/geo/GeoOverrideService.d.ts +0 -8
  280. package/lib/types/services/tracking/geo/IGeoService.d.ts +0 -12
  281. package/lib/types/services/tracking/geo/SurfsideGeoService.d.ts +0 -7
  282. package/lib/types/services/tracking/geo/index.d.ts +0 -3
  283. package/lib/types/services/tracking/index.d.ts +0 -4
  284. package/lib/types/services/tracking/user/IUserIDService.d.ts +0 -4
  285. package/lib/types/services/tracking/user/SurfsideUserIDService.d.ts +0 -7
  286. package/lib/types/services/tracking/user/UserOverrideService.d.ts +0 -8
  287. package/lib/types/services/tracking/user/index.d.ts +0 -3
  288. package/lib/types/utils/Protocol.d.ts +0 -1
  289. package/lib/types/utils/Rendering.d.ts +0 -44
  290. package/lib/types/utils/index.d.ts +0 -2
  291. /package/lib/types/models/retail/{IRecommenderResponse.d.ts → Recommended.d.ts} +0 -0
  292. /package/lib/types/models/rtb/{IBidResponse.d.ts → BidResponse.d.ts} +0 -0
  293. /package/lib/types/models/tracking/{IGeoContext.d.ts → Geo.d.ts} +0 -0
package/README.md CHANGED
@@ -1,64 +1,15 @@
1
- # Surfside Ads Core
2
-
3
- Surfside Ads Core is a headless SDK designed to seamlessly integrate ad-serving capabilities into your web applications. Unlike Surfside Ads, this SDK focuses solely on the backend processes related to advertising, without including any code for rendering banners, videos, or products on the frontend. It gives you complete control over how ads are displayed while handling the communication with Surfside's ad-serving and data services.
4
-
5
- ## Key Features
6
- * **Ad Requests**: Fetch relevant ads for your users by sending requests to Surfside's ad services.
7
- * **Product Information**: Retrieve detailed information on products linked to ads.
8
- * **Logging & Event Tracking**: Integrate with built-in services to log important events and track user interactions, ensuring you're capturing engagement metrics.
9
- * **Enhanced Data Requests**: Use additional services for IP-geolocation, user identification, and cookie management to enrich your ad targeting capabilities.
10
-
11
- ## Usage
12
- Surfside Ads Core exposes a set of service classes for communicating with Surfside's backend services. For example, to send a bid request to the Surfside bidder, instantiate a SurfsideBidder and send an [OpenRTB 2.6](https://iabtechlab.com/blog/openrtb-2-6-is-ready-for-implementation/) bid request:
13
-
14
- ```ts
15
- const bidder = new SurfsideBidder;
16
- const response = await bidder.requestBids(new BannerRequest(800, 600, 'abcdefg'));
17
- /* Bid responses can contain multiple bids */
18
- document.querySelector('#my-ad').innerHTML = response.seatbid[0].bids[0].adm;
19
- ```
20
-
21
- SurfsideBidder will automatically look up Geo information, User ID information, and surfside Context (account ID, location ID, etc) from the Surfside Digital SDK and append it to the bid request. The `adm` field contains all the HTML required for a renderable ad creative, including tracking pixels.
22
-
23
- More complicated requests can be built using the Request builder:
24
-
25
- ```ts
26
- const response = await bidder.requestBids((new RequestBuilder)
27
- .addBanner(800, 600, 'abcdefg')
28
- .addBanner(728, 90, '123456', { /* Add multiple banners to the request */
29
- keywords: ['Auto parts'], /* Optional keywords for targeting */
30
- bcat: [AdProduct2.Gambling] /* Other OpenRTB fields, like blocked categories */
31
- })
32
- .build());
33
- ```
34
-
35
- The bidder also supports native ads requests:
36
-
37
- ```ts
38
- const response = await bidder.requestBid(
39
- new NativeRequest() /* Default native request includes all default OpenRTB asset fields,
40
- * such as title and image */
41
- );
42
- ```
43
-
44
- Which can be customized as well:
45
-
46
- ```ts
47
- const response = await bidder.requestBid(
48
- (new RequestBuilder)
49
- .addNative(
50
- (new NativeBuilder)
51
- .withTitle(120, true) /* Optional "length" and "required" fields */
52
- .withDescription(300, false)
53
- .withImage(
54
- 200, 200, /* Width, Height */
55
- 64, 64 /* min width, min height */
56
- )
57
- .build()
58
- )
59
- )
60
- .build()
61
- );
62
-
63
- console.log(JSON.parse(response.seatbid[0].bid[0].adm)); /* Adm for a native response is JSON */
64
- ```
1
+ # @surfside/ads-core
2
+
3
+ To install dependencies:
4
+
5
+ ```bash
6
+ bun install
7
+ ```
8
+
9
+ To run:
10
+
11
+ ```bash
12
+ bun run src/index.ts
13
+ ```
14
+
15
+ This project was created using `bun init` in bun v1.2.10. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
package/lib/cjs/Api.js ADDED
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.NotABrowserError = exports.MissingConfigurationError = exports.InitSurfAdsCore = exports.InitSurfAdsCoreSSR = exports.InitSurfAdsCoreServices = exports.PROD_DYNAMIC_ZONE_SERVICE = exports.PROD_RECOMMENDER_SERVICE = exports.PROD_RECOMMENDED_PRODUCT_FEED = exports.PROD_SPONSORED_PRODUCT_FEED = exports.PROD_CONFIGURATION_SERVICE = exports.PROD_BIDDER = void 0;
7
+ exports.InitSurfAdsCoreInternal = InitSurfAdsCoreInternal;
8
+ const services_1 = require("./services");
9
+ const helpers_1 = require("./helpers");
10
+ const runtime_1 = __importDefault(require("handlebars/runtime"));
11
+ const Carousel_1 = require("./helpers/response/Carousel");
12
+ const Window_1 = require("./helpers/Window");
13
+ const Template_1 = require("./services/Template");
14
+ const Dynamic_1 = require("./services/Dynamic");
15
+ exports.PROD_BIDDER = '//bid.surfside.io/rtb/bids/surfside';
16
+ exports.PROD_CONFIGURATION_SERVICE = '//r.surfside.io';
17
+ exports.PROD_SPONSORED_PRODUCT_FEED = '//creative.surfside.io';
18
+ exports.PROD_RECOMMENDED_PRODUCT_FEED = '//creative.surfside.io';
19
+ exports.PROD_RECOMMENDER_SERVICE = '//t.surfside.io';
20
+ exports.PROD_DYNAMIC_ZONE_SERVICE = '//r.surfside.io/';
21
+ const TLS = (url) => 'http:' + url;
22
+ /**
23
+ * Initializes the API with the services explicitly passed to it. This function is used by the framework for overloading
24
+ * mock services. It should not be used in an application
25
+ * @param internalApiDto The list of services and helpers to inject
26
+ * @returns An initialized Surfside API
27
+ */
28
+ async function InitSurfAdsCoreInternal(internalApiDto) {
29
+ const { getDevice, mobile, navigator, ip, getGeo, geoProviderToken, getConfiguration, accountId, siteId, logger, channelId, locationId, userId, handlebars, windowInfo, screenInfo, requestBids, getSponsoredProduct, getAllSponsoredProducts, getRecommendedProduct, generateTopProducts, generateForYou, generatePreviousPurchases, getDynamicZone, buildAllSponsoredProductCardResponses, generateSponsoredProductCardResponse, evaluateProductCardTemplate, evaluateClickthroughTemplate, } = internalApiDto;
30
+ const device = getDevice(screenInfo, navigator, mobile);
31
+ const geo = await getGeo(geoProviderToken, ip);
32
+ const configuration = await getConfiguration();
33
+ if (!configuration.ok) {
34
+ return (0, services_1.Err)(new MissingConfigurationError(accountId, siteId));
35
+ }
36
+ const startRequestBound = helpers_1.StartRequest.bind(undefined, logger, accountId, siteId, channelId, locationId, (0, services_1.GetValue)(device), (0, services_1.GetValue)(geo), userId);
37
+ const startRequest = (zoneId, id) => startRequestBound(zoneId, id)
38
+ .withApp({
39
+ bundle: windowInfo.host,
40
+ name: windowInfo.host,
41
+ id: siteId,
42
+ domain: windowInfo.host,
43
+ publisher: {
44
+ domain: windowInfo.host,
45
+ }
46
+ })
47
+ .withSite({
48
+ name: windowInfo.host,
49
+ id: siteId,
50
+ kwarray: [],
51
+ mobile: isMobile() ? 1 : 0,
52
+ page: windowInfo.href,
53
+ domain: windowInfo.host,
54
+ publisher: {
55
+ id: siteId,
56
+ name: windowInfo.host,
57
+ domain: windowInfo.host,
58
+ },
59
+ ref: '',
60
+ search: windowInfo.search
61
+ });
62
+ const startNative = helpers_1.StartNative.bind(undefined, logger);
63
+ const defaultNative = helpers_1.DefaultNative.bind(undefined, logger);
64
+ return (0, services_1.Ok)({
65
+ logger,
66
+ getDevice,
67
+ device: (0, services_1.GetValue)(device),
68
+ getGeo,
69
+ geo: (0, services_1.GetValue)(geo),
70
+ configuration: configuration.value,
71
+ getConfiguration,
72
+ handlebars,
73
+ requestBids,
74
+ startRequest,
75
+ startNative,
76
+ defaultNative,
77
+ getSponsoredProduct,
78
+ getAllSponsoredProducts,
79
+ getRecommendedProduct,
80
+ generateTopProducts,
81
+ generateForYou,
82
+ generatePreviousPurchases,
83
+ buildAllSponsoredProductCardResponses,
84
+ generateSponsoredProductCardResponse,
85
+ evaluateProductCardTemplate,
86
+ evaluateClickthroughTemplate,
87
+ buildSponsoredCarousel: Carousel_1.BuildSponsoredCarousel.bind(undefined, logger, requestBids, generateSponsoredProductCardResponse),
88
+ buildSponsoredCarouselFromInitialBid: Carousel_1.BuildSponsoredCarouselFromInitialBid.bind(undefined, logger, requestBids, generateSponsoredProductCardResponse),
89
+ buildHybridCarouselFromInitialBid: Carousel_1.BuildHybridCarouselFromInitialBid.bind(undefined, logger, evaluateClickthroughTemplate, requestBids, generateSponsoredProductCardResponse, generateTopProducts, generatePreviousPurchases, generateForYou, userId),
90
+ buildRecommendedCarousel: Carousel_1.BuildRecommendedCarousel.bind(undefined, logger, evaluateClickthroughTemplate, generateTopProducts, generatePreviousPurchases, generateForYou, userId),
91
+ buildHybridCarousel: Carousel_1.BuildHybridCarousel.bind(undefined, logger, evaluateClickthroughTemplate, requestBids, generateSponsoredProductCardResponse, generateTopProducts, generatePreviousPurchases, generateForYou, userId),
92
+ getDynamicZone,
93
+ buildDynamicZoneRequest: Dynamic_1.BuildDynamicZoneRequest.bind(undefined, logger, startRequest, defaultNative, screenInfo)
94
+ });
95
+ }
96
+ const InitSurfAdsCoreServices = async (logger, bidderServiceUrl, configurationServiceUrl, productFeedUrl, recommendedProductFeedUrl, recommenderServiceUrl, dynamicZoneServiceUrl, windowInfo, screenInfo, navigator, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId) => {
97
+ const handlebars = runtime_1.default.create();
98
+ const helpers = (0, helpers_1.GetHelpers)();
99
+ const recommendedProductFeed = services_1.GetRecommendedProduct.bind(undefined, logger, recommendedProductFeedUrl, accountId, locationId);
100
+ const configurationService = services_1.GetConfiguration.bind(undefined, logger, configurationServiceUrl, handlebars, helpers, accountId, siteId);
101
+ const configuration = await configurationService();
102
+ if (!configuration.ok) {
103
+ return configuration;
104
+ }
105
+ const getAllSponsoredProducts = services_1.GetAllSponsoredProducts.bind(undefined, logger, productFeedUrl, accountId, locationId);
106
+ const generateProductCardResponse = helpers_1.GenerateSponsoredProductCardResponse.bind(undefined, logger, getAllSponsoredProducts, windowInfo, configuration.value);
107
+ const evaluateClickthroughTemplate = Template_1.EvaluateHandlebarsClickthroughTemplate.bind(undefined, logger, windowInfo, configuration.value);
108
+ const evaluateProductCardTemplate = Template_1.EvaluateHandlebarsProductCardTemplate.bind(undefined, logger, windowInfo, configuration.value);
109
+ return await InitSurfAdsCoreInternal({
110
+ logger,
111
+ requestBids: services_1.RequestBids.bind(undefined, logger, bidderServiceUrl, accountId, siteId, locationId, channelId),
112
+ getConfiguration: configurationService,
113
+ getGeo: services_1.GetGeo.bind(undefined, logger),
114
+ getDevice: services_1.GetDevice.bind(undefined, logger),
115
+ getSponsoredProduct: services_1.GetSponsoredProduct.bind(undefined, logger, productFeedUrl, accountId, locationId),
116
+ getAllSponsoredProducts,
117
+ getRecommendedProduct: services_1.GetRecommendedProduct.bind(undefined, logger, recommendedProductFeedUrl, accountId, locationId),
118
+ generateTopProducts: services_1.GenerateTopProducts.bind(undefined, logger, recommendedProductFeed, recommenderServiceUrl, accountId, siteId, locationId),
119
+ generateForYou: services_1.GenerateForYou.bind(undefined, logger, recommendedProductFeed, recommenderServiceUrl, accountId, siteId, locationId, userId ?? 'undefined'),
120
+ generatePreviousPurchases: services_1.GeneratePreviousPurchases.bind(undefined, logger, recommendedProductFeed, recommenderServiceUrl, accountId, siteId, locationId, userId ?? 'undefined'),
121
+ buildAllSponsoredProductCardResponses: helpers_1.BuildAllSponsoredProductCardResponses.bind(undefined, logger, getAllSponsoredProducts, windowInfo, configuration.value),
122
+ generateSponsoredProductCardResponse: generateProductCardResponse,
123
+ evaluateProductCardTemplate,
124
+ evaluateClickthroughTemplate,
125
+ handlebars,
126
+ windowInfo,
127
+ screenInfo,
128
+ navigator,
129
+ mobile,
130
+ ip,
131
+ geoProviderToken,
132
+ accountId,
133
+ siteId,
134
+ channelId,
135
+ locationId,
136
+ userId,
137
+ getDynamicZone: Dynamic_1.GetDynamicZone.bind(undefined, logger, configuration.value)
138
+ });
139
+ };
140
+ exports.InitSurfAdsCoreServices = InitSurfAdsCoreServices;
141
+ /* For use in serverside rendering */
142
+ // TODO: Rename this?
143
+ const InitSurfAdsCoreSSR = async (windowInfo, screen, navigator, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId, logger) => (0, exports.InitSurfAdsCoreServices)(logger, TLS(exports.PROD_BIDDER), TLS(exports.PROD_CONFIGURATION_SERVICE), TLS(exports.PROD_SPONSORED_PRODUCT_FEED), TLS(exports.PROD_RECOMMENDED_PRODUCT_FEED), TLS(exports.PROD_RECOMMENDER_SERVICE), TLS(exports.PROD_DYNAMIC_ZONE_SERVICE), windowInfo, screen, navigator, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId);
144
+ exports.InitSurfAdsCoreSSR = InitSurfAdsCoreSSR;
145
+ /* For use in web browsers */
146
+ const InitSurfAdsCore = async (channelId, accountId, siteId, locationId, userId, logger) => {
147
+ /* Not in a browser */
148
+ const windowInfo = (0, Window_1.GetWindowInfo)();
149
+ if (!windowInfo.ok) {
150
+ return windowInfo;
151
+ }
152
+ return (0, exports.InitSurfAdsCoreServices)(logger, TLS(exports.PROD_BIDDER), TLS(exports.PROD_CONFIGURATION_SERVICE), TLS(exports.PROD_SPONSORED_PRODUCT_FEED), TLS(exports.PROD_RECOMMENDED_PRODUCT_FEED), TLS(exports.PROD_RECOMMENDER_SERVICE), TLS(exports.PROD_DYNAMIC_ZONE_SERVICE), windowInfo.value, window.screen, window.navigator, isMobile(), undefined, undefined, accountId, siteId, channelId, locationId, userId);
153
+ };
154
+ exports.InitSurfAdsCore = InitSurfAdsCore;
155
+ class MissingConfigurationError extends Error {
156
+ constructor(accountId, siteId) {
157
+ super('Missing configuration for\n' +
158
+ ` accountId: ${accountId}\n` +
159
+ ` siteId: ${siteId}\n` +
160
+ '1. Check to make sure that these are the correct values for each field' +
161
+ '2. Check your publisher configuration at ' +
162
+ `https://app.surfside.io/inventory/sites/publisher/${accountId}/${siteId}`);
163
+ }
164
+ }
165
+ exports.MissingConfigurationError = MissingConfigurationError;
166
+ ;
167
+ class NotABrowserError extends Error {
168
+ constructor() {
169
+ super('You are not running Surfside Ads Core in a Web browser, so you cannot use "InitSurfAdsCore". ' +
170
+ 'Instead, use InitSurfAdsCoreSSR, and pass the user\'s screen, navigator, and IP address explicitly ' +
171
+ 'so that Surfside Ads Core can initialize geo and device information services. e.g: \n' +
172
+ ' InitSurfAdsCoreSSR(\n' +
173
+ ' /* width and height of the user\'s screen: */\n' +
174
+ ' { width: screenWidth, height: screenHeight },\n' +
175
+ ' /* userAgent string and language of the user: */\n' +
176
+ ' { userAgent: userAgent, language: userLanguage },\n' +
177
+ ' /* whether the user is on mobile or not: */\n' +
178
+ ' true,\n' +
179
+ ' /* the requesting User\'s IP */\n' +
180
+ ' request.ipAddress,\n' +
181
+ ' /* Your API Token for the Surfside Geo Service: */\n' +
182
+ ' geoProviderToken,\n' +
183
+ ' accountId,\n' +
184
+ ' siteId,\n' +
185
+ ' channelId,\n' +
186
+ ' locationId,\n' +
187
+ ' userId,\n' +
188
+ ' /* Optional logger: */\n' +
189
+ ' logger\n' +
190
+ ' )');
191
+ }
192
+ }
193
+ exports.NotABrowserError = NotABrowserError;
194
+ const isMobile = () => typeof window !== 'undefined' ? (window.ontouchstart !== undefined) : false;
195
+ //# sourceMappingURL=Api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Api.js","sourceRoot":"src/","sources":["Api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConsumeAllAsync = exports.ConsumeNAsync = exports.ConsumeAll = exports.ConsumeN = void 0;
4
+ exports.GenerateArray = GenerateArray;
5
+ const ConsumeN = (generator, n) => {
6
+ const consumed = [];
7
+ for (let i = 0; i < n; i++) {
8
+ const value = generator.next();
9
+ if (value.done === true) {
10
+ break;
11
+ }
12
+ consumed.push(value.value);
13
+ }
14
+ return consumed;
15
+ };
16
+ exports.ConsumeN = ConsumeN;
17
+ const ConsumeAll = (generator) => {
18
+ const consumed = [];
19
+ for (const value of generator) {
20
+ consumed.push(value);
21
+ }
22
+ return consumed;
23
+ };
24
+ exports.ConsumeAll = ConsumeAll;
25
+ const ConsumeNAsync = async (generator, n) => {
26
+ const consumed = [];
27
+ while (consumed.length < n) {
28
+ const result = await generator.next();
29
+ if (result.done === true) {
30
+ return [consumed, true];
31
+ }
32
+ consumed.push(result.value);
33
+ }
34
+ return [consumed, false];
35
+ };
36
+ exports.ConsumeNAsync = ConsumeNAsync;
37
+ const ConsumeAllAsync = async (generator) => {
38
+ const consumed = [];
39
+ for await (const value of generator) {
40
+ consumed.push(value);
41
+ }
42
+ return consumed;
43
+ };
44
+ exports.ConsumeAllAsync = ConsumeAllAsync;
45
+ function* GenerateArray(data) {
46
+ for (const t of data) {
47
+ yield t;
48
+ }
49
+ }
50
+ //# sourceMappingURL=Generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Generator.js","sourceRoot":"src/","sources":["helpers/Generator.ts"],"names":[],"mappings":";;;AA2CA,sCAIC;AA/CM,MAAM,QAAQ,GAAG,CAAI,SAAuB,EAAE,CAAS,EAAO,EAAE;IACnE,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM;QACV,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAVW,QAAA,QAAQ,YAUnB;AAEK,MAAM,UAAU,GAAG,CAAI,SAAuB,EAAO,EAAE;IAC1D,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB;AAEK,MAAM,aAAa,GAAG,KAAK,EAC9B,SAA4B,EAC5B,CAAS,EAC8B,EAAE;IACzC,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC;AAbW,QAAA,aAAa,iBAaxB;AAEK,MAAM,eAAe,GAAG,KAAK,EAAK,SAA4B,EAAgB,EAAE;IACnF,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AANW,QAAA,eAAe,mBAM1B;AAEF,QAAe,CAAC,CAAC,aAAa,CAAI,IAAS;IACvC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,CAAC,CAAC;IACZ,CAAC;AACL,CAAC"}
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetHelpers = void 0;
4
+ exports.slug = slug;
5
+ exports.lower = lower;
6
+ exports.upper = upper;
7
+ exports.path = path;
8
+ exports.sed = sed;
9
+ exports.replace = replace;
10
+ exports.search = search;
11
+ exports.coalesce = coalesce;
12
+ exports.join = join;
13
+ exports.uri = uri;
14
+ exports.eq = eq;
15
+ exports.or = or;
16
+ exports.and = and;
17
+ exports.isIn = isIn;
18
+ exports.array = array;
19
+ const DEFAULT_MAX_SLUG = 5;
20
+ /**
21
+ * Converts the passed string to a slug with the specified options. By default, the slug is hyphenated and only
22
+ * contains alphanumeric characters. You can pass a different hyphenation regex and a different drop regex to
23
+ * customize the slug. For example, {{slug "My Product Name"}} will return "my-product-name".
24
+ *
25
+ * To change which characters are converted to hyphens, you can pass a regular expression to the hyphenate option.
26
+ * For example, {{slug "My Product's Name" hyphenate="[\s']"}} will return "my-product-s-name".
27
+ * The default hyphenate regex is /[\s_\-,]/ig.
28
+ *
29
+ * To remove characters instead of hyphenate them, you can pass a regular expression to the drop option.
30
+ * For example, {{slug "My Product's Name" drop="[^A-Za-z0-9\s']"}} will return "my-product's-name".
31
+ * The default drop regex is /[^A-Za-z0-9\-]/ig.
32
+ *
33
+ * To limit the max number of hyphenated slug components returned, you can pass a length option.
34
+ * For example, {{slug "My Product's Name" length=2}} will return "my-product".
35
+ * The default length is 5.
36
+ *
37
+ * @param name The string to be slugified
38
+ * @param options The options object. Can take "hypenate", "drop", and "length" options.
39
+ * @returns The slugified string
40
+ */
41
+ function slug(name, options) {
42
+ if (name === undefined || name === null || typeof (name) !== 'string') {
43
+ return '';
44
+ }
45
+ const hyphenate = options.hash.hyphenate !== undefined
46
+ ? new RegExp(options.hash.hyphenate, 'ig')
47
+ : /[\s_\-,]/ig;
48
+ const drop = options.hash.drop !== undefined
49
+ ? new RegExp(options.hash.drop, 'ig')
50
+ : /[^A-Za-z0-9-]/ig;
51
+ const dropBefore = options.hash.dropBefore !== undefined
52
+ ? new RegExp(options.hash.dropBefore)
53
+ : undefined;
54
+ const maxSlug = options.hash.length ?? DEFAULT_MAX_SLUG;
55
+ const separator = options.hash.separator ?? '-';
56
+ if (dropBefore !== undefined) {
57
+ name = name.replace(dropBefore, '');
58
+ }
59
+ return name
60
+ .replace(hyphenate, separator)
61
+ .replace(drop, '')
62
+ .toLowerCase()
63
+ .split(separator)
64
+ .slice(0, maxSlug)
65
+ .join(separator);
66
+ }
67
+ /**
68
+ * Converts the passed string to lowercase. For example, {{lower "My Product Name"}} will return "my product name".
69
+ *
70
+ * @param name The string to be converted to lowercase
71
+ * @returns A lowercase version of the passed string
72
+ */
73
+ function lower(name) {
74
+ if (name === undefined || name === null || typeof (name) !== 'string') {
75
+ return '';
76
+ }
77
+ return name.toLowerCase();
78
+ }
79
+ function upper(name) {
80
+ if (name === undefined || name === null || typeof (name) !== 'string') {
81
+ return '';
82
+ }
83
+ return name.toUpperCase();
84
+ }
85
+ /**
86
+ * Returns the path component of the URL at the specified position, 1-indexed
87
+ * For example, if the URL is "https://example.com/foo/bar", {{path 1}} will return "foo".
88
+ *
89
+ * @param position The position of the path component to return, 1-indexed
90
+ * @returns The path component at the specified position
91
+ */
92
+ function path(position) {
93
+ if (position === 0 || position === undefined || position === null) {
94
+ return '';
95
+ }
96
+ const paths = window.location.pathname.split('/');
97
+ if (paths.length <= position) {
98
+ return '';
99
+ }
100
+ return paths[position];
101
+ }
102
+ function sed(input, searchRegex, replacement) {
103
+ return input.replace(new RegExp(searchRegex), (...args) => {
104
+ const END = -2;
105
+ const groups = args.slice(1, END); // Extract capture groups
106
+ let result = replacement;
107
+ // Replace backreferences (\1, \2, etc.)
108
+ result = result.replace(/\\(\d+)/g, (_, groupIndex) => groups[groupIndex - 1] ?? '');
109
+ // Support for \U (uppercase transformation)
110
+ result = result.replace(/\\U(\d+)/g, (_, groupIndex) => (groups[groupIndex - 1] ?? '').toUpperCase());
111
+ result = sedCommand(result, 'U', groups, str => str?.toUpperCase());
112
+ result = sedCommand(result, 'L', groups, str => str?.toLowerCase());
113
+ result = sedCommand(result, 'I', groups, str => str?.[0]);
114
+ return result ?? '';
115
+ });
116
+ }
117
+ function replace(input, search, replacement, all = true) {
118
+ if (input === null || input === undefined) {
119
+ return '';
120
+ }
121
+ if (search === null || search === undefined || replacement === null || replacement === undefined) {
122
+ return input;
123
+ }
124
+ if (all) {
125
+ return input.replaceAll(search, replacement);
126
+ }
127
+ return input.replace(search, replacement);
128
+ }
129
+ function sedCommand(input, char, groups, transform) {
130
+ if (input === undefined) {
131
+ return undefined;
132
+ }
133
+ return input.replace(new RegExp(`\\\\${char}(\\d+)`, 'g'), (_, groupIndex) => transform(groups[groupIndex - 1] ?? '') ?? '');
134
+ }
135
+ /**
136
+ * Returns the value of the specified query parameter from the URL, specified by key.
137
+ * For example, if the URL is "https://example.com?foo=bar", {{search "foo"}} will return "bar".
138
+ *
139
+ * @param name The name of the query parameter to return
140
+ * @returns The value of the query parameter, or an empty string if the parameter is not found
141
+ */
142
+ function search(name) {
143
+ if (name?.length === undefined || name.length === 0) {
144
+ return '';
145
+ }
146
+ const search = window.location.search;
147
+ if (search.length === 0) {
148
+ return '';
149
+ }
150
+ const params = new URLSearchParams(search);
151
+ return params.get(name) ?? '';
152
+ }
153
+ /**
154
+ * Returns the first truthy argument, or an empty string if all arguments are falsy. Returns false for empty strings
155
+ * For example, {{coalesce false (eq "b" "d") c}} will return "c", because false is falsy, "b" is not equal to "d",
156
+ * and c is truthy.
157
+ *
158
+ * @returns The first truthy argument, or an empty string if all arguments are falsy
159
+ */
160
+ function coalesce(...args) {
161
+ for (let i = 0; i < args.length - 1; i++) {
162
+ const arg = args[i];
163
+ if (arg !== null && arg !== undefined && arg !== '' && arg !== false) {
164
+ return arg;
165
+ }
166
+ }
167
+ return '';
168
+ }
169
+ /**
170
+ * Joins the passed arguments with the specified separator.
171
+ * For example, {{join "foo" "bar" "baz"}} will return "foo/bar/baz"..
172
+ *
173
+ * There is an optional "separator" argument that can be passed to change the separator. For example,
174
+ * {{join "foo" "bar" "baz" separator=","}} will return "foo,bar,baz".
175
+ *
176
+ * @returns The joined string
177
+ */
178
+ function join(...args) {
179
+ const pargs = [...args].slice(0, args.length - 1);
180
+ const options = args[args.length - 1]; /* options is always the last argument */
181
+ const separator = options.hash.separator ?? '/';
182
+ return pargs
183
+ .filter(arg => arg !== undefined && arg !== null && arg !== '') /* filter out nulls and empties */
184
+ .join(separator);
185
+ }
186
+ /**
187
+ * Encodes the passed string for use in a URI component.
188
+ *
189
+ * @param component The string to encode
190
+ * @returns The encoded string, or an empty string if the component is falsy
191
+ */
192
+ function uri(component) {
193
+ if (component?.length === undefined || component.length === 0) {
194
+ return '';
195
+ }
196
+ const encoded = encodeURIComponent(component);
197
+ return encoded.replaceAll('\'', '%27');
198
+ }
199
+ /**
200
+ * Returns true if the two passed arguments are equal (using javascript ===), false otherwise.
201
+ *
202
+ * @param a The first argument
203
+ * @param b The second argument
204
+ * @returns True if the two arguments are equal, false otherwise
205
+ */
206
+ function eq(a, b) {
207
+ return a === b;
208
+ }
209
+ /**
210
+ * Returns true if either of the passed arguments are truthy, false otherwise.
211
+ *
212
+ * @param a The first argument
213
+ * @param b The second argument
214
+ * @returns True if either of the arguments are truthy, false otherwise
215
+ */
216
+ function or(a, b) {
217
+ return Boolean(a) || Boolean(b);
218
+ }
219
+ /**
220
+ * Returns true if both of the passed arguments are truthy, false otherwise.
221
+ *
222
+ * @param a The first argument
223
+ * @param b The second argument
224
+ * @returns True if both of the arguments are truthy, false otherwise
225
+ */
226
+ function and(a, b) {
227
+ return Boolean(a) && Boolean(b);
228
+ }
229
+ /**
230
+ * Returns true if the first argument is in the second argument (an array). Otherwise, returns false.
231
+ * If the second argument is not an array, or the array is empty, this will return false.
232
+ *
233
+ * The name of the helper is "in" but the name of the function is "isIn" because "in" is a reserved word in javascript.
234
+ *
235
+ * @param a The value to check
236
+ * @param b The array to check against
237
+ * @returns True if the value is in the array, false otherwise
238
+ */
239
+ function isIn(a, b) {
240
+ if (b?.length === undefined || b.length === 0) {
241
+ return false;
242
+ }
243
+ return b.includes(a);
244
+ }
245
+ /**
246
+ * Returns an array of the passed arguments. Useful with the "in" helper
247
+ *
248
+ * @returns An array of the passed arguments
249
+ */
250
+ function array(...args) {
251
+ return Array.from(args).slice(0, -1);
252
+ }
253
+ const GetHelpers = () => ({
254
+ slug,
255
+ lower,
256
+ path,
257
+ sed,
258
+ replace,
259
+ search,
260
+ coalesce,
261
+ join,
262
+ get_first: coalesce,
263
+ uri,
264
+ or,
265
+ and,
266
+ isIn,
267
+ array
268
+ });
269
+ exports.GetHelpers = GetHelpers;
270
+ //# sourceMappingURL=Handlebars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Handlebars.js","sourceRoot":"src/","sources":["helpers/Handlebars.ts"],"names":[],"mappings":"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"}