@replohq/sdk 0.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 (280) hide show
  1. package/LICENSE +11 -0
  2. package/_vendor/replo-utils/lib/crypto.d.ts +30 -0
  3. package/_vendor/replo-utils/lib/errors.d.ts +83 -0
  4. package/_vendor/replo-utils/lib/json.d.ts +6 -0
  5. package/_vendor/replo-utils/lib/json.mjs +43 -0
  6. package/_vendor/replo-utils/lib/misc.d.ts +145 -0
  7. package/_vendor/replo-utils/lib/object.d.ts +31 -0
  8. package/_vendor/schemas/errors.d.ts +459 -0
  9. package/_vendor/schemas/generated/consent.d.ts +55 -0
  10. package/_vendor/schemas/generated/errors.d.ts +61 -0
  11. package/_vendor/schemas/loaderKeys.d.ts +1 -0
  12. package/_vendor/schemas/loaderKeys.mjs +27 -0
  13. package/_vendor/schemas/money.d.ts +60 -0
  14. package/_vendor/schemas/money.mjs +2051 -0
  15. package/analytics/analytics-provider.d.ts +16 -0
  16. package/analytics/analytics-provider.js +113 -0
  17. package/analytics/analytics-provider.js.map +7 -0
  18. package/analytics/analytics-sink.d.ts +26 -0
  19. package/analytics/analytics-sink.js +1 -0
  20. package/analytics/analytics-sink.js.map +7 -0
  21. package/analytics/get-analytics-sinks.d.ts +27 -0
  22. package/analytics/get-analytics-sinks.js +52 -0
  23. package/analytics/get-analytics-sinks.js.map +7 -0
  24. package/analytics/hooks/use-product-viewed-analytics.d.ts +23 -0
  25. package/analytics/hooks/use-product-viewed-analytics.js +34 -0
  26. package/analytics/hooks/use-product-viewed-analytics.js.map +7 -0
  27. package/analytics/replo-first-party-pixel.d.ts +12 -0
  28. package/analytics/replo-first-party-pixel.js +31 -0
  29. package/analytics/replo-first-party-pixel.js.map +7 -0
  30. package/analytics/replo-pixel-script.d.ts +13 -0
  31. package/analytics/replo-pixel-script.js +30 -0
  32. package/analytics/replo-pixel-script.js.map +7 -0
  33. package/analytics/sinks/ga4-sink.d.ts +15 -0
  34. package/analytics/sinks/ga4-sink.js +60 -0
  35. package/analytics/sinks/ga4-sink.js.map +7 -0
  36. package/analytics/sinks/meta-sink.d.ts +14 -0
  37. package/analytics/sinks/meta-sink.js +56 -0
  38. package/analytics/sinks/meta-sink.js.map +7 -0
  39. package/analytics/sinks/pinterest-sink.d.ts +14 -0
  40. package/analytics/sinks/pinterest-sink.js +76 -0
  41. package/analytics/sinks/pinterest-sink.js.map +7 -0
  42. package/analytics/sinks/reddit-sink.d.ts +14 -0
  43. package/analytics/sinks/reddit-sink.js +80 -0
  44. package/analytics/sinks/reddit-sink.js.map +7 -0
  45. package/analytics/sinks/replo-sink.d.ts +14 -0
  46. package/analytics/sinks/replo-sink.js +57 -0
  47. package/analytics/sinks/replo-sink.js.map +7 -0
  48. package/analytics/sinks/snapchat-sink.d.ts +14 -0
  49. package/analytics/sinks/snapchat-sink.js +67 -0
  50. package/analytics/sinks/snapchat-sink.js.map +7 -0
  51. package/analytics/sinks/tiktok-sink.d.ts +14 -0
  52. package/analytics/sinks/tiktok-sink.js +79 -0
  53. package/analytics/sinks/tiktok-sink.js.map +7 -0
  54. package/analytics/sinks/window-sink.d.ts +18 -0
  55. package/analytics/sinks/window-sink.js +46 -0
  56. package/analytics/sinks/window-sink.js.map +7 -0
  57. package/analytics/utils/analytics-utils.d.ts +7 -0
  58. package/analytics/utils/analytics-utils.js +130 -0
  59. package/analytics/utils/analytics-utils.js.map +7 -0
  60. package/analytics/utils/navigation-tracker.d.ts +16 -0
  61. package/analytics/utils/navigation-tracker.js +44 -0
  62. package/analytics/utils/navigation-tracker.js.map +7 -0
  63. package/analytics/utils/shopify-funnel-gate.d.ts +8 -0
  64. package/analytics/utils/shopify-funnel-gate.js +22 -0
  65. package/analytics/utils/shopify-funnel-gate.js.map +7 -0
  66. package/cart/buy-now-action.d.ts +21 -0
  67. package/cart/buy-now-action.js +104 -0
  68. package/cart/buy-now-action.js.map +7 -0
  69. package/cart/cart-actions.d.ts +63 -0
  70. package/cart/cart-actions.js +90 -0
  71. package/cart/cart-actions.js.map +7 -0
  72. package/cart/cart-loader.d.ts +9 -0
  73. package/cart/cart-loader.js +11 -0
  74. package/cart/cart-loader.js.map +7 -0
  75. package/cart/cart-provider.d.ts +85 -0
  76. package/cart/cart-provider.js +372 -0
  77. package/cart/cart-provider.js.map +7 -0
  78. package/cart/cart-schema.d.ts +74 -0
  79. package/cart/cart-schema.js +69 -0
  80. package/cart/cart-schema.js.map +7 -0
  81. package/cart/cart-types.d.ts +132 -0
  82. package/cart/cart-types.js +8 -0
  83. package/cart/cart-types.js.map +7 -0
  84. package/cart/gateways/cart-constants.d.ts +1 -0
  85. package/cart/gateways/cart-constants.js +5 -0
  86. package/cart/gateways/cart-constants.js.map +7 -0
  87. package/cart/gateways/cart-gateway.d.ts +10 -0
  88. package/cart/gateways/cart-gateway.js +19 -0
  89. package/cart/gateways/cart-gateway.js.map +7 -0
  90. package/cart/gateways/cookie-cart-gateway.d.ts +28 -0
  91. package/cart/gateways/cookie-cart-gateway.js +109 -0
  92. package/cart/gateways/cookie-cart-gateway.js.map +7 -0
  93. package/cart/gateways/default-cart-gateway.d.ts +19 -0
  94. package/cart/gateways/default-cart-gateway.js +30 -0
  95. package/cart/gateways/default-cart-gateway.js.map +7 -0
  96. package/cart/gateways/resolver-cart-gateway.d.ts +2 -0
  97. package/cart/gateways/resolver-cart-gateway.js +109 -0
  98. package/cart/gateways/resolver-cart-gateway.js.map +7 -0
  99. package/cart/gateways/stripe-cart-gateway.d.ts +19 -0
  100. package/cart/gateways/stripe-cart-gateway.js +28 -0
  101. package/cart/gateways/stripe-cart-gateway.js.map +7 -0
  102. package/cart/hooks/use-add-to-cart.d.ts +63 -0
  103. package/cart/hooks/use-add-to-cart.js +124 -0
  104. package/cart/hooks/use-add-to-cart.js.map +7 -0
  105. package/cart/hooks/use-buy-now.d.ts +49 -0
  106. package/cart/hooks/use-buy-now.js +62 -0
  107. package/cart/hooks/use-buy-now.js.map +7 -0
  108. package/cart/utils/cart-utils.d.ts +43 -0
  109. package/cart/utils/cart-utils.js +46 -0
  110. package/cart/utils/cart-utils.js.map +7 -0
  111. package/cart/utils/cookie-cart-persistence.d.ts +55 -0
  112. package/cart/utils/cookie-cart-persistence.js +166 -0
  113. package/cart/utils/cookie-cart-persistence.js.map +7 -0
  114. package/cart/utils/variant-to-cart-line.d.ts +74 -0
  115. package/cart/utils/variant-to-cart-line.js +162 -0
  116. package/cart/utils/variant-to-cart-line.js.map +7 -0
  117. package/chunk-UJCSKKID.mjs +27 -0
  118. package/consent/consent-action.d.ts +9 -0
  119. package/consent/consent-action.js +25 -0
  120. package/consent/consent-action.js.map +7 -0
  121. package/consent/consent-actions.d.ts +28 -0
  122. package/consent/consent-actions.js +36 -0
  123. package/consent/consent-actions.js.map +7 -0
  124. package/consent/consent-store.d.ts +69 -0
  125. package/consent/consent-store.js +194 -0
  126. package/consent/consent-store.js.map +7 -0
  127. package/consent/cookie.d.ts +36 -0
  128. package/consent/cookie.js +82 -0
  129. package/consent/cookie.js.map +7 -0
  130. package/consent/replo-scripts.d.ts +23 -0
  131. package/consent/replo-scripts.js +102 -0
  132. package/consent/replo-scripts.js.map +7 -0
  133. package/consent/script-registration-store.d.ts +25 -0
  134. package/consent/script-registration-store.js +61 -0
  135. package/consent/script-registration-store.js.map +7 -0
  136. package/consent/script-snippets.d.ts +24 -0
  137. package/consent/script-snippets.js +122 -0
  138. package/consent/script-snippets.js.map +7 -0
  139. package/consent/types.d.ts +34 -0
  140. package/consent/types.js +1 -0
  141. package/consent/types.js.map +7 -0
  142. package/consent/window-api.d.ts +41 -0
  143. package/consent/window-api.js +73 -0
  144. package/consent/window-api.js.map +7 -0
  145. package/env.d.ts +9 -0
  146. package/env.js +42 -0
  147. package/env.js.map +7 -0
  148. package/gateways/canopy-api.d.ts +83 -0
  149. package/gateways/canopy-api.js +197 -0
  150. package/gateways/canopy-api.js.map +7 -0
  151. package/hooks/use-client-value.d.ts +10 -0
  152. package/hooks/use-client-value.js +12 -0
  153. package/hooks/use-client-value.js.map +7 -0
  154. package/hooks/use-formatted-price.d.ts +15 -0
  155. package/hooks/use-formatted-price.js +20 -0
  156. package/hooks/use-formatted-price.js.map +7 -0
  157. package/lib/canopy-error.d.ts +25 -0
  158. package/lib/canopy-error.js +24 -0
  159. package/lib/canopy-error.js.map +7 -0
  160. package/lib/get-query-client.d.ts +2 -0
  161. package/lib/get-query-client.js +34 -0
  162. package/lib/get-query-client.js.map +7 -0
  163. package/lib/integration-utils.d.ts +2 -0
  164. package/lib/integration-utils.js +9 -0
  165. package/lib/integration-utils.js.map +7 -0
  166. package/lib/shopify-utils.d.ts +10 -0
  167. package/lib/shopify-utils.js +7 -0
  168. package/lib/shopify-utils.js.map +7 -0
  169. package/lib/url-utils.d.ts +4 -0
  170. package/lib/url-utils.js +8 -0
  171. package/lib/url-utils.js.map +7 -0
  172. package/loaders/collection-loader.d.ts +11 -0
  173. package/loaders/collection-loader.js +55 -0
  174. package/loaders/collection-loader.js.map +7 -0
  175. package/loaders/collection-products-loader.d.ts +12 -0
  176. package/loaders/collection-products-loader.js +58 -0
  177. package/loaders/collection-products-loader.js.map +7 -0
  178. package/loaders/contentful-entries-loader.d.ts +17 -0
  179. package/loaders/contentful-entries-loader.js +78 -0
  180. package/loaders/contentful-entries-loader.js.map +7 -0
  181. package/loaders/contentful-entry-loader.d.ts +14 -0
  182. package/loaders/contentful-entry-loader.js +60 -0
  183. package/loaders/contentful-entry-loader.js.map +7 -0
  184. package/loaders/invoke-loader-action.d.ts +11 -0
  185. package/loaders/invoke-loader-action.js +14 -0
  186. package/loaders/invoke-loader-action.js.map +7 -0
  187. package/loaders/invoke-loader-server.d.ts +18 -0
  188. package/loaders/invoke-loader-server.js +40 -0
  189. package/loaders/invoke-loader-server.js.map +7 -0
  190. package/loaders/invoke-loader.d.ts +16 -0
  191. package/loaders/invoke-loader.js +37 -0
  192. package/loaders/invoke-loader.js.map +7 -0
  193. package/loaders/levanta-product-loader.d.ts +11 -0
  194. package/loaders/levanta-product-loader.js +53 -0
  195. package/loaders/levanta-product-loader.js.map +7 -0
  196. package/loaders/loader-error-boundary.d.ts +25 -0
  197. package/loaders/loader-error-boundary.js +24 -0
  198. package/loaders/loader-error-boundary.js.map +7 -0
  199. package/loaders/loader-keys.d.ts +34 -0
  200. package/loaders/loader-keys.js +26 -0
  201. package/loaders/loader-keys.js.map +7 -0
  202. package/loaders/loader-schemas.d.ts +946 -0
  203. package/loaders/loader-schemas.js +353 -0
  204. package/loaders/loader-schemas.js.map +7 -0
  205. package/loaders/metaobject-loader.d.ts +12 -0
  206. package/loaders/metaobject-loader.js +54 -0
  207. package/loaders/metaobject-loader.js.map +7 -0
  208. package/loaders/metaobjects-loader.d.ts +14 -0
  209. package/loaders/metaobjects-loader.js +60 -0
  210. package/loaders/metaobjects-loader.js.map +7 -0
  211. package/loaders/okendo-review-aggregate-loader.d.ts +17 -0
  212. package/loaders/okendo-review-aggregate-loader.js +56 -0
  213. package/loaders/okendo-review-aggregate-loader.js.map +7 -0
  214. package/loaders/okendo-reviews-loader.d.ts +23 -0
  215. package/loaders/okendo-reviews-loader.js +54 -0
  216. package/loaders/okendo-reviews-loader.js.map +7 -0
  217. package/loaders/prefetch-loaders.d.ts +33 -0
  218. package/loaders/prefetch-loaders.js +46 -0
  219. package/loaders/prefetch-loaders.js.map +7 -0
  220. package/loaders/preview-placeholder.d.ts +25 -0
  221. package/loaders/preview-placeholder.js +222 -0
  222. package/loaders/preview-placeholder.js.map +7 -0
  223. package/loaders/product-loader-args.d.ts +21 -0
  224. package/loaders/product-loader-args.js +17 -0
  225. package/loaders/product-loader-args.js.map +7 -0
  226. package/loaders/product-loader.d.ts +10 -0
  227. package/loaders/product-loader.js +52 -0
  228. package/loaders/product-loader.js.map +7 -0
  229. package/loaders/rebuy-recommendations-loader.d.ts +165 -0
  230. package/loaders/rebuy-recommendations-loader.js +57 -0
  231. package/loaders/rebuy-recommendations-loader.js.map +7 -0
  232. package/loaders/reviews-io-review-aggregate-loader.d.ts +12 -0
  233. package/loaders/reviews-io-review-aggregate-loader.js +43 -0
  234. package/loaders/reviews-io-review-aggregate-loader.js.map +7 -0
  235. package/loaders/reviews-io-reviews-loader.d.ts +14 -0
  236. package/loaders/reviews-io-reviews-loader.js +65 -0
  237. package/loaders/reviews-io-reviews-loader.js.map +7 -0
  238. package/loaders/smile-earning-rules-loader.d.ts +19 -0
  239. package/loaders/smile-earning-rules-loader.js +44 -0
  240. package/loaders/smile-earning-rules-loader.js.map +7 -0
  241. package/loaders/smile-rewards-loader.d.ts +19 -0
  242. package/loaders/smile-rewards-loader.js +44 -0
  243. package/loaders/smile-rewards-loader.js.map +7 -0
  244. package/loaders/smile-vip-tiers-loader.d.ts +18 -0
  245. package/loaders/smile-vip-tiers-loader.js +43 -0
  246. package/loaders/smile-vip-tiers-loader.js.map +7 -0
  247. package/loaders/statsig-experiment-loader.d.ts +20 -0
  248. package/loaders/statsig-experiment-loader.js +81 -0
  249. package/loaders/statsig-experiment-loader.js.map +7 -0
  250. package/loaders/yotpo-review-aggregate-loader.d.ts +12 -0
  251. package/loaders/yotpo-review-aggregate-loader.js +50 -0
  252. package/loaders/yotpo-review-aggregate-loader.js.map +7 -0
  253. package/loaders/yotpo-reviews-loader.d.ts +14 -0
  254. package/loaders/yotpo-reviews-loader.js +65 -0
  255. package/loaders/yotpo-reviews-loader.js.map +7 -0
  256. package/money.d.ts +9 -0
  257. package/money.js +13 -0
  258. package/money.js.map +7 -0
  259. package/next/config.d.ts +4 -0
  260. package/next/config.js +91 -0
  261. package/next/config.js.map +7 -0
  262. package/next/image-loader.d.ts +2 -0
  263. package/next/image-loader.js +52 -0
  264. package/next/image-loader.js.map +7 -0
  265. package/next/open-next.d.ts +2 -0
  266. package/next/open-next.js +24 -0
  267. package/next/open-next.js.map +7 -0
  268. package/orders/order-status-schema.d.ts +161 -0
  269. package/orders/order-status-schema.js +83 -0
  270. package/orders/order-status-schema.js.map +7 -0
  271. package/orders/order-status.d.ts +11 -0
  272. package/orders/order-status.js +41 -0
  273. package/orders/order-status.js.map +7 -0
  274. package/package.json +216 -0
  275. package/providers/query-provider.d.ts +1 -0
  276. package/providers/query-provider.js +12 -0
  277. package/providers/query-provider.js.map +7 -0
  278. package/providers/replo-provider.d.ts +1 -0
  279. package/providers/replo-provider.js +22 -0
  280. package/providers/replo-provider.js.map +7 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../analytics/sinks/meta-sink.ts"],
4
+ "sourcesContent": ["import type {\n AnalyticsSink,\n DataPayload,\n PurchasePayload,\n} from \"../analytics-sink\";\n\nimport { createEventQueue } from \"../utils/analytics-utils\";\n\nexport class MetaSink implements AnalyticsSink {\n // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed\n private track: (event: string, params?: Record<string, any>) => void;\n\n constructor() {\n this.track = createEventQueue(\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n () => typeof window !== \"undefined\" && Boolean((window as any).fbq),\n (event, params) => {\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n const fbq = (window as any).fbq;\n fbq(\"track\", event, params);\n },\n \"Meta\",\n );\n }\n\n async pageView() {\n this.track(\"PageView\");\n }\n\n async purchase({ amount, currency, data }: PurchasePayload) {\n this.track(\"Purchase\", { value: amount, currency, ...data });\n }\n\n async click() {\n // No direct equivalent in Meta\n }\n\n async productViewed({ data }: DataPayload) {\n this.track(\"ViewContent\", {\n value: data.price,\n currency: data.currency,\n ...data,\n });\n }\n\n async addToCart({ data }: DataPayload) {\n this.track(\"AddToCart\", {\n value: data.price,\n currency: data.currency,\n ...data,\n });\n }\n\n async removeFromCart() {\n // No direct equivalent in Meta\n }\n\n async viewCart() {\n // No direct equivalent in Meta\n }\n\n async startCheckout({ data }: DataPayload) {\n this.track(\"InitiateCheckout\", {\n value: data.totalPrice?.amount,\n currency: data.currencyCode,\n ...data,\n });\n }\n\n async viewCollection() {\n // No direct equivalent in Meta\n }\n}\n"],
5
+ "mappings": "AAMA,SAAS,wBAAwB;AAE1B,MAAM,SAAkC;AAAA;AAAA,EAErC;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ;AAAA;AAAA;AAAA,MAGX,MAAM,OAAO,WAAW,eAAe,QAAS,OAAe,GAAG;AAAA,MAClE,CAAC,OAAO,WAAW;AAGjB,cAAM,MAAO,OAAe;AAC5B,YAAI,SAAS,OAAO,MAAM;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW;AACf,SAAK,MAAM,UAAU;AAAA,EACvB;AAAA,EAEA,MAAM,SAAS,EAAE,QAAQ,UAAU,KAAK,GAAoB;AAC1D,SAAK,MAAM,YAAY,EAAE,OAAO,QAAQ,UAAU,GAAG,KAAK,CAAC;AAAA,EAC7D;AAAA,EAEA,MAAM,QAAQ;AAAA,EAEd;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,eAAe;AAAA,MACxB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,EAAE,KAAK,GAAgB;AACrC,SAAK,MAAM,aAAa;AAAA,MACtB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBAAiB;AAAA,EAEvB;AAAA,EAEA,MAAM,WAAW;AAAA,EAEjB;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,oBAAoB;AAAA,MAC7B,OAAO,KAAK,YAAY;AAAA,MACxB,UAAU,KAAK;AAAA,MACf,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBAAiB;AAAA,EAEvB;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import type { AnalyticsSink, DataPayload, PurchasePayload } from "../analytics-sink";
2
+ export declare class PinterestSink implements AnalyticsSink {
3
+ private track;
4
+ constructor();
5
+ pageView(): Promise<void>;
6
+ purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
7
+ click({ data }: DataPayload): Promise<void>;
8
+ productViewed({ data }: DataPayload): Promise<void>;
9
+ addToCart({ data }: DataPayload): Promise<void>;
10
+ removeFromCart(): Promise<void>;
11
+ viewCart(): Promise<void>;
12
+ startCheckout({ data }: DataPayload): Promise<void>;
13
+ viewCollection({ data }: DataPayload): Promise<void>;
14
+ }
@@ -0,0 +1,76 @@
1
+ import { createEventQueue } from "../utils/analytics-utils";
2
+ class PinterestSink {
3
+ // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed
4
+ track;
5
+ constructor() {
6
+ this.track = createEventQueue(
7
+ // Legacy cast - may or may not be necessary
8
+ // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed
9
+ () => typeof window !== "undefined" && Boolean(window.pintrk),
10
+ (event, params) => {
11
+ const pintrk = window.pintrk;
12
+ pintrk("track", event, params);
13
+ },
14
+ "Pinterest"
15
+ );
16
+ }
17
+ async pageView() {
18
+ this.track("pagevisit");
19
+ }
20
+ async purchase({ amount, currency, data }) {
21
+ this.track("checkout", {
22
+ value: amount,
23
+ currency,
24
+ order_quantity: data.quantity ?? 1,
25
+ order_id: data.order_id,
26
+ ...data
27
+ });
28
+ }
29
+ async click({ data }) {
30
+ this.track("custom", data);
31
+ }
32
+ async productViewed({ data }) {
33
+ this.track("pagevisit", {
34
+ product_id: data.product_id,
35
+ product_category: data.category,
36
+ product_name: data.name,
37
+ product_price: data.price,
38
+ currency: data.currency,
39
+ ...data
40
+ });
41
+ }
42
+ async addToCart({ data }) {
43
+ this.track("addtocart", {
44
+ value: data.price,
45
+ currency: data.currency,
46
+ order_quantity: data.quantity ?? 1,
47
+ product_id: data.product_id,
48
+ product_category: data.category,
49
+ product_name: data.name,
50
+ ...data
51
+ });
52
+ }
53
+ async removeFromCart() {
54
+ }
55
+ async viewCart() {
56
+ this.track("pagevisit");
57
+ }
58
+ async startCheckout({ data }) {
59
+ this.track("checkout", {
60
+ value: data.price,
61
+ currency: data.currency,
62
+ order_quantity: data.quantity,
63
+ ...data
64
+ });
65
+ }
66
+ async viewCollection({ data }) {
67
+ this.track("viewcategory", {
68
+ product_category: data.category,
69
+ ...data
70
+ });
71
+ }
72
+ }
73
+ export {
74
+ PinterestSink
75
+ };
76
+ //# sourceMappingURL=pinterest-sink.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../analytics/sinks/pinterest-sink.ts"],
4
+ "sourcesContent": ["import type {\n AnalyticsSink,\n DataPayload,\n PurchasePayload,\n} from \"../analytics-sink\";\n\nimport { createEventQueue } from \"../utils/analytics-utils\";\n\nexport class PinterestSink implements AnalyticsSink {\n // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed\n private track: (event: string, params?: Record<string, any>) => void;\n\n constructor() {\n this.track = createEventQueue(\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n () => typeof window !== \"undefined\" && Boolean((window as any).pintrk),\n (event, params) => {\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n const pintrk = (window as any).pintrk;\n pintrk(\"track\", event, params);\n },\n \"Pinterest\",\n );\n }\n\n async pageView() {\n this.track(\"pagevisit\");\n }\n\n async purchase({ amount, currency, data }: PurchasePayload) {\n this.track(\"checkout\", {\n value: amount,\n currency,\n order_quantity: data.quantity ?? 1,\n order_id: data.order_id,\n ...data,\n });\n }\n\n async click({ data }: DataPayload) {\n this.track(\"custom\", data);\n }\n\n async productViewed({ data }: DataPayload) {\n this.track(\"pagevisit\", {\n product_id: data.product_id,\n product_category: data.category,\n product_name: data.name,\n product_price: data.price,\n currency: data.currency,\n ...data,\n });\n }\n\n async addToCart({ data }: DataPayload) {\n this.track(\"addtocart\", {\n value: data.price,\n currency: data.currency,\n order_quantity: data.quantity ?? 1,\n product_id: data.product_id,\n product_category: data.category,\n product_name: data.name,\n ...data,\n });\n }\n\n async removeFromCart() {\n // No direct equivalent in Pinterest\n }\n\n async viewCart() {\n this.track(\"pagevisit\");\n }\n\n async startCheckout({ data }: DataPayload) {\n this.track(\"checkout\", {\n value: data.price,\n currency: data.currency,\n order_quantity: data.quantity,\n ...data,\n });\n }\n\n async viewCollection({ data }: DataPayload) {\n this.track(\"viewcategory\", {\n product_category: data.category,\n ...data,\n });\n }\n}\n"],
5
+ "mappings": "AAMA,SAAS,wBAAwB;AAE1B,MAAM,cAAuC;AAAA;AAAA,EAE1C;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ;AAAA;AAAA;AAAA,MAGX,MAAM,OAAO,WAAW,eAAe,QAAS,OAAe,MAAM;AAAA,MACrE,CAAC,OAAO,WAAW;AAGjB,cAAM,SAAU,OAAe;AAC/B,eAAO,SAAS,OAAO,MAAM;AAAA,MAC/B;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW;AACf,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,MAAM,SAAS,EAAE,QAAQ,UAAU,KAAK,GAAoB;AAC1D,SAAK,MAAM,YAAY;AAAA,MACrB,OAAO;AAAA,MACP;AAAA,MACA,gBAAgB,KAAK,YAAY;AAAA,MACjC,UAAU,KAAK;AAAA,MACf,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,EAAE,KAAK,GAAgB;AACjC,SAAK,MAAM,UAAU,IAAI;AAAA,EAC3B;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,aAAa;AAAA,MACtB,YAAY,KAAK;AAAA,MACjB,kBAAkB,KAAK;AAAA,MACvB,cAAc,KAAK;AAAA,MACnB,eAAe,KAAK;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,EAAE,KAAK,GAAgB;AACrC,SAAK,MAAM,aAAa;AAAA,MACtB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,gBAAgB,KAAK,YAAY;AAAA,MACjC,YAAY,KAAK;AAAA,MACjB,kBAAkB,KAAK;AAAA,MACvB,cAAc,KAAK;AAAA,MACnB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBAAiB;AAAA,EAEvB;AAAA,EAEA,MAAM,WAAW;AACf,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,YAAY;AAAA,MACrB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,gBAAgB,KAAK;AAAA,MACrB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,EAAE,KAAK,GAAgB;AAC1C,SAAK,MAAM,gBAAgB;AAAA,MACzB,kBAAkB,KAAK;AAAA,MACvB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import type { AnalyticsSink, DataPayload, PurchasePayload } from "../analytics-sink";
2
+ export declare class RedditSink implements AnalyticsSink {
3
+ private track;
4
+ constructor();
5
+ pageView(): Promise<void>;
6
+ purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
7
+ click({ data }: DataPayload): Promise<void>;
8
+ productViewed({ data }: DataPayload): Promise<void>;
9
+ addToCart({ data }: DataPayload): Promise<void>;
10
+ removeFromCart(): Promise<void>;
11
+ viewCart({ data }: DataPayload): Promise<void>;
12
+ startCheckout({ data }: DataPayload): Promise<void>;
13
+ viewCollection({ data }: DataPayload): Promise<void>;
14
+ }
@@ -0,0 +1,80 @@
1
+ import { createEventQueue } from "../utils/analytics-utils";
2
+ class RedditSink {
3
+ // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed
4
+ track;
5
+ constructor() {
6
+ this.track = createEventQueue(
7
+ // Legacy cast - may or may not be necessary
8
+ // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed
9
+ () => typeof window !== "undefined" && Boolean(window.rdt),
10
+ (event, params) => {
11
+ const rdt = window.rdt;
12
+ rdt("track", event, params);
13
+ },
14
+ "Reddit"
15
+ );
16
+ }
17
+ async pageView() {
18
+ this.track("PageVisit");
19
+ }
20
+ async purchase({ amount, currency, data }) {
21
+ this.track("Purchase", {
22
+ value: amount,
23
+ currency,
24
+ itemCount: data.quantity ?? 1,
25
+ transactionId: data.order_id,
26
+ ...data
27
+ });
28
+ }
29
+ async click({ data }) {
30
+ this.track("Custom", data);
31
+ }
32
+ async productViewed({ data }) {
33
+ this.track("ViewContent", {
34
+ value: data.price,
35
+ currency: data.currency,
36
+ content_category: data.category,
37
+ content_name: data.name,
38
+ content_ids: data.product_id ? [data.product_id] : void 0,
39
+ ...data
40
+ });
41
+ }
42
+ async addToCart({ data }) {
43
+ this.track("AddToCart", {
44
+ value: data.price,
45
+ currency: data.currency,
46
+ itemCount: data.quantity ?? 1,
47
+ content_category: data.category,
48
+ content_name: data.name,
49
+ content_ids: data.product_id ? [data.product_id] : void 0,
50
+ ...data
51
+ });
52
+ }
53
+ async removeFromCart() {
54
+ }
55
+ async viewCart({ data }) {
56
+ this.track("ViewContent", {
57
+ content_type: "cart",
58
+ ...data
59
+ });
60
+ }
61
+ async startCheckout({ data }) {
62
+ this.track("Lead", {
63
+ value: data.price,
64
+ currency: data.currency,
65
+ itemCount: data.quantity,
66
+ ...data
67
+ });
68
+ }
69
+ async viewCollection({ data }) {
70
+ this.track("ViewContent", {
71
+ content_category: data.category,
72
+ content_type: "category",
73
+ ...data
74
+ });
75
+ }
76
+ }
77
+ export {
78
+ RedditSink
79
+ };
80
+ //# sourceMappingURL=reddit-sink.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../analytics/sinks/reddit-sink.ts"],
4
+ "sourcesContent": ["import type {\n AnalyticsSink,\n DataPayload,\n PurchasePayload,\n} from \"../analytics-sink\";\n\nimport { createEventQueue } from \"../utils/analytics-utils\";\n\nexport class RedditSink implements AnalyticsSink {\n // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed\n private track: (event: string, params?: Record<string, any>) => void;\n\n constructor() {\n this.track = createEventQueue(\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n () => typeof window !== \"undefined\" && Boolean((window as any).rdt),\n (event, params) => {\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n const rdt = (window as any).rdt;\n rdt(\"track\", event, params);\n },\n \"Reddit\",\n );\n }\n\n async pageView() {\n this.track(\"PageVisit\");\n }\n\n async purchase({ amount, currency, data }: PurchasePayload) {\n this.track(\"Purchase\", {\n value: amount,\n currency,\n itemCount: data.quantity ?? 1,\n transactionId: data.order_id,\n ...data,\n });\n }\n\n async click({ data }: DataPayload) {\n this.track(\"Custom\", data);\n }\n\n async productViewed({ data }: DataPayload) {\n this.track(\"ViewContent\", {\n value: data.price,\n currency: data.currency,\n content_category: data.category,\n content_name: data.name,\n content_ids: data.product_id ? [data.product_id] : undefined,\n ...data,\n });\n }\n\n async addToCart({ data }: DataPayload) {\n this.track(\"AddToCart\", {\n value: data.price,\n currency: data.currency,\n itemCount: data.quantity ?? 1,\n content_category: data.category,\n content_name: data.name,\n content_ids: data.product_id ? [data.product_id] : undefined,\n ...data,\n });\n }\n\n async removeFromCart() {\n // No direct equivalent in Reddit\n }\n\n async viewCart({ data }: DataPayload) {\n this.track(\"ViewContent\", {\n content_type: \"cart\",\n ...data,\n });\n }\n\n async startCheckout({ data }: DataPayload) {\n this.track(\"Lead\", {\n value: data.price,\n currency: data.currency,\n itemCount: data.quantity,\n ...data,\n });\n }\n\n async viewCollection({ data }: DataPayload) {\n this.track(\"ViewContent\", {\n content_category: data.category,\n content_type: \"category\",\n ...data,\n });\n }\n}\n"],
5
+ "mappings": "AAMA,SAAS,wBAAwB;AAE1B,MAAM,WAAoC;AAAA;AAAA,EAEvC;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ;AAAA;AAAA;AAAA,MAGX,MAAM,OAAO,WAAW,eAAe,QAAS,OAAe,GAAG;AAAA,MAClE,CAAC,OAAO,WAAW;AAGjB,cAAM,MAAO,OAAe;AAC5B,YAAI,SAAS,OAAO,MAAM;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW;AACf,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,MAAM,SAAS,EAAE,QAAQ,UAAU,KAAK,GAAoB;AAC1D,SAAK,MAAM,YAAY;AAAA,MACrB,OAAO;AAAA,MACP;AAAA,MACA,WAAW,KAAK,YAAY;AAAA,MAC5B,eAAe,KAAK;AAAA,MACpB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,EAAE,KAAK,GAAgB;AACjC,SAAK,MAAM,UAAU,IAAI;AAAA,EAC3B;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,eAAe;AAAA,MACxB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,kBAAkB,KAAK;AAAA,MACvB,cAAc,KAAK;AAAA,MACnB,aAAa,KAAK,aAAa,CAAC,KAAK,UAAU,IAAI;AAAA,MACnD,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,EAAE,KAAK,GAAgB;AACrC,SAAK,MAAM,aAAa;AAAA,MACtB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,WAAW,KAAK,YAAY;AAAA,MAC5B,kBAAkB,KAAK;AAAA,MACvB,cAAc,KAAK;AAAA,MACnB,aAAa,KAAK,aAAa,CAAC,KAAK,UAAU,IAAI;AAAA,MACnD,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBAAiB;AAAA,EAEvB;AAAA,EAEA,MAAM,SAAS,EAAE,KAAK,GAAgB;AACpC,SAAK,MAAM,eAAe;AAAA,MACxB,cAAc;AAAA,MACd,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,QAAQ;AAAA,MACjB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,WAAW,KAAK;AAAA,MAChB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,EAAE,KAAK,GAAgB;AAC1C,SAAK,MAAM,eAAe;AAAA,MACxB,kBAAkB,KAAK;AAAA,MACvB,cAAc;AAAA,MACd,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import type { AnalyticsSink, DataPayload, PurchasePayload } from "../analytics-sink";
2
+ export declare class ReploSink implements AnalyticsSink {
3
+ private forward;
4
+ constructor();
5
+ pageView(): Promise<void>;
6
+ purchase(payload: PurchasePayload): Promise<void>;
7
+ click(payload: DataPayload): Promise<void>;
8
+ productViewed(payload: DataPayload): Promise<void>;
9
+ addToCart(payload: DataPayload): Promise<void>;
10
+ removeFromCart(payload: DataPayload): Promise<void>;
11
+ viewCart(payload: DataPayload): Promise<void>;
12
+ startCheckout(payload: DataPayload): Promise<void>;
13
+ viewCollection(payload: DataPayload): Promise<void>;
14
+ }
@@ -0,0 +1,57 @@
1
+ import { createMethodQueue } from "../utils/analytics-utils";
2
+ class ReploSink {
3
+ // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed
4
+ forward;
5
+ constructor() {
6
+ this.forward = createMethodQueue(
7
+ () => {
8
+ if (typeof window === "undefined") {
9
+ return null;
10
+ }
11
+ const pixel = window.ReploPixel;
12
+ return pixel?.analyticsInstance ?? null;
13
+ },
14
+ { queueName: "Replo analytics sink" }
15
+ );
16
+ }
17
+ async pageView() {
18
+ this.forward("pageView");
19
+ return Promise.resolve();
20
+ }
21
+ purchase(payload) {
22
+ this.forward("purchase", payload);
23
+ return Promise.resolve();
24
+ }
25
+ click(payload) {
26
+ this.forward("click", payload);
27
+ return Promise.resolve();
28
+ }
29
+ productViewed(payload) {
30
+ this.forward("productViewed", payload);
31
+ return Promise.resolve();
32
+ }
33
+ addToCart(payload) {
34
+ this.forward("addToCart", payload);
35
+ return Promise.resolve();
36
+ }
37
+ removeFromCart(payload) {
38
+ this.forward("removeFromCart", payload);
39
+ return Promise.resolve();
40
+ }
41
+ viewCart(payload) {
42
+ this.forward("viewCart", payload);
43
+ return Promise.resolve();
44
+ }
45
+ startCheckout(payload) {
46
+ this.forward("startCheckout", payload);
47
+ return Promise.resolve();
48
+ }
49
+ viewCollection(payload) {
50
+ this.forward("viewCollection", payload);
51
+ return Promise.resolve();
52
+ }
53
+ }
54
+ export {
55
+ ReploSink
56
+ };
57
+ //# sourceMappingURL=replo-sink.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../analytics/sinks/replo-sink.ts"],
4
+ "sourcesContent": ["import type {\n AnalyticsSink,\n DataPayload,\n PurchasePayload,\n} from \"../analytics-sink\";\n\nimport { createMethodQueue } from \"../utils/analytics-utils\";\n\nexport class ReploSink implements AnalyticsSink {\n // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed\n private forward: (method: keyof AnalyticsSink, ...args: any[]) => void;\n\n constructor() {\n this.forward = createMethodQueue(\n () => {\n if (typeof window === \"undefined\") {\n return null;\n }\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n const pixel = (window as any).ReploPixel;\n return pixel?.analyticsInstance ?? null;\n },\n { queueName: \"Replo analytics sink\" },\n );\n }\n\n async pageView() {\n this.forward(\"pageView\");\n return Promise.resolve();\n }\n purchase(payload: PurchasePayload) {\n this.forward(\"purchase\", payload);\n return Promise.resolve();\n }\n click(payload: DataPayload) {\n this.forward(\"click\", payload);\n return Promise.resolve();\n }\n productViewed(payload: DataPayload) {\n this.forward(\"productViewed\", payload);\n return Promise.resolve();\n }\n addToCart(payload: DataPayload) {\n this.forward(\"addToCart\", payload);\n return Promise.resolve();\n }\n removeFromCart(payload: DataPayload) {\n this.forward(\"removeFromCart\", payload);\n return Promise.resolve();\n }\n viewCart(payload: DataPayload) {\n this.forward(\"viewCart\", payload);\n return Promise.resolve();\n }\n startCheckout(payload: DataPayload) {\n this.forward(\"startCheckout\", payload);\n return Promise.resolve();\n }\n viewCollection(payload: DataPayload) {\n this.forward(\"viewCollection\", payload);\n return Promise.resolve();\n }\n}\n"],
5
+ "mappings": "AAMA,SAAS,yBAAyB;AAE3B,MAAM,UAAmC;AAAA;AAAA,EAEtC;AAAA,EAER,cAAc;AACZ,SAAK,UAAU;AAAA,MACb,MAAM;AACJ,YAAI,OAAO,WAAW,aAAa;AACjC,iBAAO;AAAA,QACT;AAGA,cAAM,QAAS,OAAe;AAC9B,eAAO,OAAO,qBAAqB;AAAA,MACrC;AAAA,MACA,EAAE,WAAW,uBAAuB;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,WAAW;AACf,SAAK,QAAQ,UAAU;AACvB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,SAAS,SAA0B;AACjC,SAAK,QAAQ,YAAY,OAAO;AAChC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,MAAM,SAAsB;AAC1B,SAAK,QAAQ,SAAS,OAAO;AAC7B,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,cAAc,SAAsB;AAClC,SAAK,QAAQ,iBAAiB,OAAO;AACrC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,UAAU,SAAsB;AAC9B,SAAK,QAAQ,aAAa,OAAO;AACjC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,eAAe,SAAsB;AACnC,SAAK,QAAQ,kBAAkB,OAAO;AACtC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,SAAS,SAAsB;AAC7B,SAAK,QAAQ,YAAY,OAAO;AAChC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,cAAc,SAAsB;AAClC,SAAK,QAAQ,iBAAiB,OAAO;AACrC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,eAAe,SAAsB;AACnC,SAAK,QAAQ,kBAAkB,OAAO;AACtC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import type { AnalyticsSink, DataPayload, PurchasePayload } from "../analytics-sink";
2
+ export declare class SnapchatSink implements AnalyticsSink {
3
+ private track;
4
+ constructor();
5
+ pageView(): Promise<void>;
6
+ purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
7
+ click({ data }: DataPayload): Promise<void>;
8
+ productViewed({ data }: DataPayload): Promise<void>;
9
+ addToCart({ data }: DataPayload): Promise<void>;
10
+ removeFromCart(): Promise<void>;
11
+ viewCart(): Promise<void>;
12
+ startCheckout({ data }: DataPayload): Promise<void>;
13
+ viewCollection(): Promise<void>;
14
+ }
@@ -0,0 +1,67 @@
1
+ import { createEventQueue } from "../utils/analytics-utils";
2
+ class SnapchatSink {
3
+ // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed
4
+ track;
5
+ constructor() {
6
+ this.track = createEventQueue(
7
+ // Legacy cast - may or may not be necessary
8
+ // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed
9
+ () => typeof window !== "undefined" && Boolean(window.snaptr),
10
+ (event, params) => {
11
+ const snaptr = window.snaptr;
12
+ snaptr("track", event, params);
13
+ },
14
+ "Snapchat"
15
+ );
16
+ }
17
+ async pageView() {
18
+ this.track("PAGE_VIEW");
19
+ }
20
+ async purchase({ amount, currency, data }) {
21
+ this.track("PURCHASE", {
22
+ price: amount,
23
+ currency,
24
+ ...data
25
+ });
26
+ }
27
+ async click({ data }) {
28
+ this.track("CUSTOM_EVENT_1", data);
29
+ }
30
+ async productViewed({ data }) {
31
+ this.track("VIEW_CONTENT", {
32
+ item_ids: data.product_id ? [data.product_id] : void 0,
33
+ price: data.price,
34
+ currency: data.currency,
35
+ item_category: data.category,
36
+ ...data
37
+ });
38
+ }
39
+ async addToCart({ data }) {
40
+ this.track("ADD_CART", {
41
+ item_ids: data.product_id ? [data.product_id] : void 0,
42
+ price: data.price,
43
+ num_items: data.quantity ?? 1,
44
+ currency: data.currency,
45
+ item_category: data.category,
46
+ ...data
47
+ });
48
+ }
49
+ async removeFromCart() {
50
+ }
51
+ async viewCart() {
52
+ }
53
+ async startCheckout({ data }) {
54
+ this.track("START_CHECKOUT", {
55
+ currency: data.currency,
56
+ number_items: data.quantity,
57
+ price: data.price,
58
+ ...data
59
+ });
60
+ }
61
+ async viewCollection() {
62
+ }
63
+ }
64
+ export {
65
+ SnapchatSink
66
+ };
67
+ //# sourceMappingURL=snapchat-sink.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../analytics/sinks/snapchat-sink.ts"],
4
+ "sourcesContent": ["import type {\n AnalyticsSink,\n DataPayload,\n PurchasePayload,\n} from \"../analytics-sink\";\n\nimport { createEventQueue } from \"../utils/analytics-utils\";\n\nexport class SnapchatSink implements AnalyticsSink {\n // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed\n private track: (event: string, params?: Record<string, any>) => void;\n\n constructor() {\n this.track = createEventQueue(\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n () => typeof window !== \"undefined\" && Boolean((window as any).snaptr),\n (event, params) => {\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n const snaptr = (window as any).snaptr;\n snaptr(\"track\", event, params);\n },\n \"Snapchat\",\n );\n }\n\n async pageView() {\n this.track(\"PAGE_VIEW\");\n }\n\n async purchase({ amount, currency, data }: PurchasePayload) {\n this.track(\"PURCHASE\", {\n price: amount,\n currency,\n ...data,\n });\n }\n\n async click({ data }: DataPayload) {\n this.track(\"CUSTOM_EVENT_1\", data);\n }\n\n async productViewed({ data }: DataPayload) {\n this.track(\"VIEW_CONTENT\", {\n item_ids: data.product_id ? [data.product_id] : undefined,\n price: data.price,\n currency: data.currency,\n item_category: data.category,\n ...data,\n });\n }\n\n async addToCart({ data }: DataPayload) {\n this.track(\"ADD_CART\", {\n item_ids: data.product_id ? [data.product_id] : undefined,\n price: data.price,\n num_items: data.quantity ?? 1,\n currency: data.currency,\n item_category: data.category,\n ...data,\n });\n }\n\n async removeFromCart() {\n // No direct equivalent in Snapchat\n }\n\n async viewCart() {\n // No direct equivalent in Snapchat\n }\n\n async startCheckout({ data }: DataPayload) {\n this.track(\"START_CHECKOUT\", {\n currency: data.currency,\n number_items: data.quantity,\n price: data.price,\n ...data,\n });\n }\n\n async viewCollection() {\n // No direct equivalent in Snapchat\n }\n}\n"],
5
+ "mappings": "AAMA,SAAS,wBAAwB;AAE1B,MAAM,aAAsC;AAAA;AAAA,EAEzC;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ;AAAA;AAAA;AAAA,MAGX,MAAM,OAAO,WAAW,eAAe,QAAS,OAAe,MAAM;AAAA,MACrE,CAAC,OAAO,WAAW;AAGjB,cAAM,SAAU,OAAe;AAC/B,eAAO,SAAS,OAAO,MAAM;AAAA,MAC/B;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW;AACf,SAAK,MAAM,WAAW;AAAA,EACxB;AAAA,EAEA,MAAM,SAAS,EAAE,QAAQ,UAAU,KAAK,GAAoB;AAC1D,SAAK,MAAM,YAAY;AAAA,MACrB,OAAO;AAAA,MACP;AAAA,MACA,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,EAAE,KAAK,GAAgB;AACjC,SAAK,MAAM,kBAAkB,IAAI;AAAA,EACnC;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,gBAAgB;AAAA,MACzB,UAAU,KAAK,aAAa,CAAC,KAAK,UAAU,IAAI;AAAA,MAChD,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,MACpB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,EAAE,KAAK,GAAgB;AACrC,SAAK,MAAM,YAAY;AAAA,MACrB,UAAU,KAAK,aAAa,CAAC,KAAK,UAAU,IAAI;AAAA,MAChD,OAAO,KAAK;AAAA,MACZ,WAAW,KAAK,YAAY;AAAA,MAC5B,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,MACpB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBAAiB;AAAA,EAEvB;AAAA,EAEA,MAAM,WAAW;AAAA,EAEjB;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,kBAAkB;AAAA,MAC3B,UAAU,KAAK;AAAA,MACf,cAAc,KAAK;AAAA,MACnB,OAAO,KAAK;AAAA,MACZ,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBAAiB;AAAA,EAEvB;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import type { AnalyticsSink, DataPayload, PurchasePayload } from "../analytics-sink";
2
+ export declare class TikTokSink implements AnalyticsSink {
3
+ private track;
4
+ constructor();
5
+ pageView(): Promise<void>;
6
+ purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
7
+ click({ data }: DataPayload): Promise<void>;
8
+ productViewed({ data }: DataPayload): Promise<void>;
9
+ addToCart({ data }: DataPayload): Promise<void>;
10
+ removeFromCart(): Promise<void>;
11
+ viewCart({ data }: DataPayload): Promise<void>;
12
+ startCheckout({ data }: DataPayload): Promise<void>;
13
+ viewCollection({ data }: DataPayload): Promise<void>;
14
+ }
@@ -0,0 +1,79 @@
1
+ import { createEventQueue } from "../utils/analytics-utils";
2
+ class TikTokSink {
3
+ // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed
4
+ track;
5
+ constructor() {
6
+ this.track = createEventQueue(
7
+ // Legacy cast - may or may not be necessary
8
+ // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed
9
+ () => typeof window !== "undefined" && Boolean(window.ttq),
10
+ (event, params) => {
11
+ const ttq = window.ttq;
12
+ ttq.track(event, params);
13
+ },
14
+ "TikTok"
15
+ );
16
+ }
17
+ async pageView() {
18
+ this.track("PageView");
19
+ }
20
+ async purchase({ amount, currency, data }) {
21
+ this.track("CompletePayment", {
22
+ value: amount,
23
+ currency,
24
+ content_type: "product",
25
+ ...data
26
+ });
27
+ }
28
+ async click({ data }) {
29
+ this.track("ClickButton", data);
30
+ }
31
+ async productViewed({ data }) {
32
+ this.track("ViewContent", {
33
+ content_type: "product",
34
+ content_id: data.product_id,
35
+ value: data.price,
36
+ currency: data.currency,
37
+ content_category: data.category,
38
+ ...data
39
+ });
40
+ }
41
+ async addToCart({ data }) {
42
+ this.track("AddToCart", {
43
+ content_type: "product",
44
+ content_id: data.product_id,
45
+ value: data.price,
46
+ currency: data.currency,
47
+ quantity: data.quantity ?? 1,
48
+ content_category: data.category,
49
+ ...data
50
+ });
51
+ }
52
+ async removeFromCart() {
53
+ }
54
+ async viewCart({ data }) {
55
+ this.track("ViewContent", {
56
+ content_type: "cart",
57
+ ...data
58
+ });
59
+ }
60
+ async startCheckout({ data }) {
61
+ this.track("InitiateCheckout", {
62
+ value: data.price,
63
+ currency: data.currency,
64
+ content_type: "product",
65
+ ...data
66
+ });
67
+ }
68
+ async viewCollection({ data }) {
69
+ this.track("ViewContent", {
70
+ content_type: "product_group",
71
+ content_category: data.category,
72
+ ...data
73
+ });
74
+ }
75
+ }
76
+ export {
77
+ TikTokSink
78
+ };
79
+ //# sourceMappingURL=tiktok-sink.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../analytics/sinks/tiktok-sink.ts"],
4
+ "sourcesContent": ["import type {\n AnalyticsSink,\n DataPayload,\n PurchasePayload,\n} from \"../analytics-sink\";\n\nimport { createEventQueue } from \"../utils/analytics-utils\";\n\nexport class TikTokSink implements AnalyticsSink {\n // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed\n private track: (event: string, params?: Record<string, any>) => void;\n\n constructor() {\n this.track = createEventQueue(\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n () => typeof window !== \"undefined\" && Boolean((window as any).ttq),\n (event, params) => {\n // Legacy cast - may or may not be necessary\n // oxlint-disable-next-line replo/no-as-cast, typescript/no-explicit-any -- legacy any/cast, may or may not be needed\n const ttq = (window as any).ttq;\n ttq.track(event, params);\n },\n \"TikTok\",\n );\n }\n\n async pageView() {\n this.track(\"PageView\");\n }\n\n async purchase({ amount, currency, data }: PurchasePayload) {\n this.track(\"CompletePayment\", {\n value: amount,\n currency,\n content_type: \"product\",\n ...data,\n });\n }\n\n async click({ data }: DataPayload) {\n this.track(\"ClickButton\", data);\n }\n\n async productViewed({ data }: DataPayload) {\n this.track(\"ViewContent\", {\n content_type: \"product\",\n content_id: data.product_id,\n value: data.price,\n currency: data.currency,\n content_category: data.category,\n ...data,\n });\n }\n\n async addToCart({ data }: DataPayload) {\n this.track(\"AddToCart\", {\n content_type: \"product\",\n content_id: data.product_id,\n value: data.price,\n currency: data.currency,\n quantity: data.quantity ?? 1,\n content_category: data.category,\n ...data,\n });\n }\n\n async removeFromCart() {\n // No direct equivalent in TikTok\n }\n\n async viewCart({ data }: DataPayload) {\n this.track(\"ViewContent\", {\n content_type: \"cart\",\n ...data,\n });\n }\n\n async startCheckout({ data }: DataPayload) {\n this.track(\"InitiateCheckout\", {\n value: data.price,\n currency: data.currency,\n content_type: \"product\",\n ...data,\n });\n }\n\n async viewCollection({ data }: DataPayload) {\n this.track(\"ViewContent\", {\n content_type: \"product_group\",\n content_category: data.category,\n ...data,\n });\n }\n}\n"],
5
+ "mappings": "AAMA,SAAS,wBAAwB;AAE1B,MAAM,WAAoC;AAAA;AAAA,EAEvC;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ;AAAA;AAAA;AAAA,MAGX,MAAM,OAAO,WAAW,eAAe,QAAS,OAAe,GAAG;AAAA,MAClE,CAAC,OAAO,WAAW;AAGjB,cAAM,MAAO,OAAe;AAC5B,YAAI,MAAM,OAAO,MAAM;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW;AACf,SAAK,MAAM,UAAU;AAAA,EACvB;AAAA,EAEA,MAAM,SAAS,EAAE,QAAQ,UAAU,KAAK,GAAoB;AAC1D,SAAK,MAAM,mBAAmB;AAAA,MAC5B,OAAO;AAAA,MACP;AAAA,MACA,cAAc;AAAA,MACd,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,EAAE,KAAK,GAAgB;AACjC,SAAK,MAAM,eAAe,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,eAAe;AAAA,MACxB,cAAc;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,kBAAkB,KAAK;AAAA,MACvB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,EAAE,KAAK,GAAgB;AACrC,SAAK,MAAM,aAAa;AAAA,MACtB,cAAc;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,UAAU,KAAK,YAAY;AAAA,MAC3B,kBAAkB,KAAK;AAAA,MACvB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBAAiB;AAAA,EAEvB;AAAA,EAEA,MAAM,SAAS,EAAE,KAAK,GAAgB;AACpC,SAAK,MAAM,eAAe;AAAA,MACxB,cAAc;AAAA,MACd,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,EAAE,KAAK,GAAgB;AACzC,SAAK,MAAM,oBAAoB;AAAA,MAC7B,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,cAAc;AAAA,MACd,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,EAAE,KAAK,GAAgB;AAC1C,SAAK,MAAM,eAAe;AAAA,MACxB,cAAc;AAAA,MACd,kBAAkB,KAAK;AAAA,MACvB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ import type { AnalyticsSink, DataPayload, PurchasePayload } from "../analytics-sink";
2
+ /**
3
+ * Dispatches CustomEvents to the global window object so 3rd-party scripts or
4
+ * external tools can subscribe to analytics events without coupling directly to
5
+ * the core analytics client. Matches Shopify analytics event naming conventions.
6
+ */
7
+ export declare class WindowSink implements AnalyticsSink {
8
+ private dispatch;
9
+ pageView(payload?: any): Promise<void>;
10
+ purchase(payload: PurchasePayload): Promise<void>;
11
+ click(payload: DataPayload): Promise<void>;
12
+ productViewed(payload: DataPayload): Promise<void>;
13
+ addToCart(payload: DataPayload): Promise<void>;
14
+ removeFromCart(payload: DataPayload): Promise<void>;
15
+ viewCart(payload: DataPayload): Promise<void>;
16
+ startCheckout(payload: DataPayload): Promise<void>;
17
+ viewCollection(payload: DataPayload): Promise<void>;
18
+ }
@@ -0,0 +1,46 @@
1
+ class WindowSink {
2
+ // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed
3
+ dispatch(eventType, payload) {
4
+ window.dispatchEvent(
5
+ new CustomEvent("replo:analytics", {
6
+ detail: {
7
+ event: eventType,
8
+ payload,
9
+ timestamp: Date.now()
10
+ }
11
+ })
12
+ );
13
+ }
14
+ // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed
15
+ async pageView(payload) {
16
+ this.dispatch("page_viewed", payload);
17
+ }
18
+ async purchase(payload) {
19
+ this.dispatch("checkout_completed", payload);
20
+ }
21
+ async click(payload) {
22
+ this.dispatch("clicked", payload);
23
+ }
24
+ async productViewed(payload) {
25
+ this.dispatch("product_viewed", payload);
26
+ }
27
+ async addToCart(payload) {
28
+ this.dispatch("product_added_to_cart", payload);
29
+ }
30
+ async removeFromCart(payload) {
31
+ this.dispatch("product_removed_from_cart", payload);
32
+ }
33
+ async viewCart(payload) {
34
+ this.dispatch("cart_viewed", payload);
35
+ }
36
+ async startCheckout(payload) {
37
+ this.dispatch("checkout_started", payload);
38
+ }
39
+ async viewCollection(payload) {
40
+ this.dispatch("collection_viewed", payload);
41
+ }
42
+ }
43
+ export {
44
+ WindowSink
45
+ };
46
+ //# sourceMappingURL=window-sink.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../analytics/sinks/window-sink.ts"],
4
+ "sourcesContent": ["import type {\n AnalyticsSink,\n DataPayload,\n PurchasePayload,\n} from \"../analytics-sink\";\n\n/**\n * Dispatches CustomEvents to the global window object so 3rd-party scripts or\n * external tools can subscribe to analytics events without coupling directly to\n * the core analytics client. Matches Shopify analytics event naming conventions.\n */\nexport class WindowSink implements AnalyticsSink {\n // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed\n private dispatch(eventType: string, payload: any) {\n window.dispatchEvent(\n new CustomEvent(\"replo:analytics\", {\n detail: {\n event: eventType,\n payload,\n timestamp: Date.now(),\n },\n }),\n );\n }\n\n // oxlint-disable-next-line typescript/no-explicit-any -- legacy any, may or may not be needed\n async pageView(payload?: any) {\n this.dispatch(\"page_viewed\", payload);\n }\n\n async purchase(payload: PurchasePayload) {\n this.dispatch(\"checkout_completed\", payload);\n }\n\n async click(payload: DataPayload) {\n this.dispatch(\"clicked\", payload);\n }\n\n async productViewed(payload: DataPayload) {\n this.dispatch(\"product_viewed\", payload);\n }\n\n async addToCart(payload: DataPayload) {\n this.dispatch(\"product_added_to_cart\", payload);\n }\n\n async removeFromCart(payload: DataPayload) {\n this.dispatch(\"product_removed_from_cart\", payload);\n }\n\n async viewCart(payload: DataPayload) {\n this.dispatch(\"cart_viewed\", payload);\n }\n\n async startCheckout(payload: DataPayload) {\n this.dispatch(\"checkout_started\", payload);\n }\n\n async viewCollection(payload: DataPayload) {\n this.dispatch(\"collection_viewed\", payload);\n }\n}\n"],
5
+ "mappings": "AAWO,MAAM,WAAoC;AAAA;AAAA,EAEvC,SAAS,WAAmB,SAAc;AAChD,WAAO;AAAA,MACL,IAAI,YAAY,mBAAmB;AAAA,QACjC,QAAQ;AAAA,UACN,OAAO;AAAA,UACP;AAAA,UACA,WAAW,KAAK,IAAI;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAAS,SAAe;AAC5B,SAAK,SAAS,eAAe,OAAO;AAAA,EACtC;AAAA,EAEA,MAAM,SAAS,SAA0B;AACvC,SAAK,SAAS,sBAAsB,OAAO;AAAA,EAC7C;AAAA,EAEA,MAAM,MAAM,SAAsB;AAChC,SAAK,SAAS,WAAW,OAAO;AAAA,EAClC;AAAA,EAEA,MAAM,cAAc,SAAsB;AACxC,SAAK,SAAS,kBAAkB,OAAO;AAAA,EACzC;AAAA,EAEA,MAAM,UAAU,SAAsB;AACpC,SAAK,SAAS,yBAAyB,OAAO;AAAA,EAChD;AAAA,EAEA,MAAM,eAAe,SAAsB;AACzC,SAAK,SAAS,6BAA6B,OAAO;AAAA,EACpD;AAAA,EAEA,MAAM,SAAS,SAAsB;AACnC,SAAK,SAAS,eAAe,OAAO;AAAA,EACtC;AAAA,EAEA,MAAM,cAAc,SAAsB;AACxC,SAAK,SAAS,oBAAoB,OAAO;AAAA,EAC3C;AAAA,EAEA,MAAM,eAAe,SAAsB;AACzC,SAAK,SAAS,qBAAqB,OAAO;AAAA,EAC5C;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ export declare function createEventQueue(checkPixelReady: () => boolean, sendEvent: (event: string, params: Record<string, any>) => void, pixelName: string): (event: string, params?: Record<string, any>) => void;
2
+ type MethodQueueOptions = {
3
+ queueName?: string;
4
+ onTimeout?: () => void;
5
+ };
6
+ export declare function createMethodQueue<InstanceType extends Record<string, (...args: any[]) => any>>(checkInstanceReady: () => InstanceType | null, options?: MethodQueueOptions): (method: keyof InstanceType, ...args: any[]) => void;
7
+ export {};