@replohq/sdk 1.21.1 → 2.0.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.
- package/_vendor/replo-utils/lib/json.mjs +4 -5
- package/_vendor/replo-utils/lib/misc.mjs +4 -3
- package/_vendor/replo-utils/lib/object.d.ts +16 -1
- package/_vendor/replo-utils/lib/object.mjs +3 -4
- package/_vendor/schemas/contentEntry.mjs +3 -3
- package/_vendor/schemas/contentManifest.mjs +6 -6
- package/_vendor/schemas/errors.d.ts +3 -43
- package/_vendor/schemas/{money.d.ts → moneyFormat.d.ts} +1 -8
- package/_vendor/schemas/{money.mjs → moneyFormat.mjs} +5 -16
- package/_vendor/schemas/reploError.d.ts +43 -0
- package/_vendor/schemas/routing/locale.mjs +6 -4
- package/_vendor/schemas/routing/rules.mjs +6 -4
- package/analytics/analytics-sink.d.ts +126 -14
- package/analytics/combine-sinks.js +36 -13
- package/analytics/hooks/use-product-viewed-analytics.d.ts +1 -17
- package/analytics/hooks/use-product-viewed-analytics.js +5 -14
- package/analytics/legacy-checkout.d.ts +2 -0
- package/analytics/legacy-checkout.js +26 -0
- package/analytics/sinks/converge-event-mapper.d.ts +10 -11
- package/analytics/sinks/converge-event-mapper.js +50 -133
- package/analytics/sinks/converge-sink.d.ts +8 -7
- package/analytics/sinks/converge-sink.js +21 -3
- package/analytics/sinks/elevar-sink.d.ts +9 -7
- package/analytics/sinks/elevar-sink.js +37 -128
- package/analytics/sinks/ga4-sink.d.ts +9 -8
- package/analytics/sinks/ga4-sink.js +9 -8
- package/analytics/sinks/intelligems-sink.d.ts +9 -8
- package/analytics/sinks/intelligems-sink.js +3 -1
- package/analytics/sinks/meta-sink.d.ts +5 -4
- package/analytics/sinks/meta-sink.js +7 -3
- package/analytics/sinks/northbeam-sink.d.ts +1 -0
- package/analytics/sinks/northbeam-sink.js +2 -0
- package/analytics/sinks/pinterest-sink.d.ts +7 -6
- package/analytics/sinks/pinterest-sink.js +14 -20
- package/analytics/sinks/reddit-sink.d.ts +8 -7
- package/analytics/sinks/reddit-sink.js +13 -20
- package/analytics/sinks/replo-sink.d.ts +21 -9
- package/analytics/sinks/replo-sink.js +37 -39
- package/analytics/sinks/snapchat-sink.d.ts +6 -5
- package/analytics/sinks/snapchat-sink.js +8 -8
- package/analytics/sinks/tiktok-sink.d.ts +8 -7
- package/analytics/sinks/tiktok-sink.js +10 -15
- package/analytics/sinks/window-sink.d.ts +11 -9
- package/analytics/sinks/window-sink.js +5 -1
- package/analytics/sinks/x-sink.d.ts +5 -4
- package/analytics/sinks/x-sink.js +19 -50
- package/analytics/test-fixtures.d.ts +5 -0
- package/analytics/test-fixtures.js +18 -0
- package/analytics/utils/analytics-products.d.ts +0 -30
- package/analytics/utils/analytics-products.js +1 -51
- package/analytics/utils/collection-analytics.d.ts +2 -15
- package/analytics/utils/collection-analytics.js +14 -18
- package/analytics/utils/product-analytics.d.ts +23 -0
- package/analytics/utils/product-analytics.js +21 -0
- package/cart/hooks/use-add-to-cart.js +1 -1
- package/cart/utils/cart-analytics.d.ts +3 -23
- package/cart/utils/cart-analytics.js +1 -1
- package/cart/utils/cart-utils.js +1 -1
- package/cart/utils/variant-to-cart-line.js +1 -1
- package/chunk-CKRRL66R.mjs +28 -0
- package/{chunk-VVB7BEDE.mjs → chunk-O4QBR4QC.mjs} +9 -4
- package/{chunk-EUIVDITZ.mjs → chunk-OPKMOW43.mjs} +1 -1
- package/{chunk-C37TXOGI.mjs → chunk-PSYP2DYM.mjs} +1 -1
- package/{chunk-ACQS4AG5.mjs → chunk-TTEBDCWT.mjs} +272 -109
- package/{chunk-HFKL4ZR5.mjs → chunk-XGXJOHUY.mjs} +2 -1
- package/{chunk-AQG3256R.mjs → chunk-XSMYSAKY.mjs} +0 -26
- package/{chunk-SSBIMQES.mjs → chunk-XWWFRIXV.mjs} +36 -99
- package/chunk-ZPDXVFCR.mjs +66 -0
- package/hooks/use-formatted-price.js +1 -1
- package/lib/buildMetadata.js +3 -3
- package/loaders/collection-loader.js +8 -6
- package/loaders/collection-products-loader.js +8 -6
- package/loaders/contentful-entries-loader.js +5 -3
- package/loaders/contentful-entry-loader.js +5 -3
- package/loaders/integration-loader-schemas.d.ts +260 -0
- package/loaders/integration-loader-schemas.js +55 -0
- package/loaders/invoke-loader.d.ts +5 -0
- package/loaders/invoke-loader.js +1 -1
- package/loaders/judgeme-review-aggregate-loader.d.ts +1 -1
- package/loaders/judgeme-review-aggregate-loader.js +10 -6
- package/loaders/judgeme-reviews-loader.d.ts +1 -1
- package/loaders/judgeme-reviews-loader.js +5 -3
- package/loaders/kaching-bundles-loader.js +5 -3
- package/loaders/levanta-product-loader.js +8 -6
- package/loaders/loox-review-aggregate-loader.d.ts +1 -1
- package/loaders/loox-review-aggregate-loader.js +10 -6
- package/loaders/loox-reviews-loader.d.ts +1 -1
- package/loaders/loox-reviews-loader.js +8 -6
- package/loaders/metaobject-loader.js +5 -3
- package/loaders/metaobjects-loader.js +5 -3
- package/loaders/okendo-review-aggregate-loader.d.ts +2 -7
- package/loaders/okendo-review-aggregate-loader.js +8 -12
- package/loaders/okendo-reviews-loader.d.ts +2 -42
- package/loaders/okendo-reviews-loader.js +5 -8
- package/loaders/product-loader.js +5 -3
- package/loaders/rebuy-recommendations-loader.d.ts +2 -167
- package/loaders/rebuy-recommendations-loader.js +8 -10
- package/loaders/reviews-io-review-aggregate-loader.d.ts +1 -1
- package/loaders/reviews-io-review-aggregate-loader.js +5 -3
- package/loaders/reviews-io-reviews-loader.d.ts +1 -1
- package/loaders/reviews-io-reviews-loader.js +7 -3
- package/loaders/shopify-integration-details-loader.js +10 -6
- package/loaders/smile-earning-rules-loader.d.ts +2 -8
- package/loaders/smile-earning-rules-loader.js +8 -16
- package/loaders/smile-rewards-loader.d.ts +2 -8
- package/loaders/smile-rewards-loader.js +8 -16
- package/loaders/smile-vip-tiers-loader.d.ts +2 -7
- package/loaders/smile-vip-tiers-loader.js +8 -15
- package/loaders/statsig-experiment-loader.js +5 -3
- package/loaders/yotpo-review-aggregate-loader.d.ts +1 -1
- package/loaders/yotpo-review-aggregate-loader.js +10 -6
- package/loaders/yotpo-reviews-loader.d.ts +1 -1
- package/loaders/yotpo-reviews-loader.js +5 -3
- package/money.d.ts +1 -1
- package/money.js +1 -1
- package/next/config.js +4 -0
- package/next/image-loader.js +3 -3
- package/package.json +8 -4
- package/chunk-CQYCPDPI.mjs +0 -166
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import type { AnalyticsSink,
|
|
1
|
+
import type { AnalyticsSink, CartLineEventPayload, CheckoutStartedPayload, LegacyCheckoutStartedPayload, ProductViewedPayload, PurchasePayload } from "../analytics-sink";
|
|
2
2
|
export declare class MetaSink implements AnalyticsSink {
|
|
3
3
|
private track;
|
|
4
4
|
constructor();
|
|
5
|
+
customEvent(): Promise<void>;
|
|
5
6
|
pageView(): Promise<void>;
|
|
6
7
|
purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
|
|
7
8
|
click(): Promise<void>;
|
|
8
|
-
productViewed({ data }:
|
|
9
|
-
addToCart({ data }:
|
|
9
|
+
productViewed({ data }: ProductViewedPayload): Promise<void>;
|
|
10
|
+
addToCart({ data }: CartLineEventPayload): Promise<void>;
|
|
10
11
|
removeFromCart(): Promise<void>;
|
|
11
12
|
viewCart(): Promise<void>;
|
|
12
|
-
startCheckout(
|
|
13
|
+
startCheckout(payload: CheckoutStartedPayload | LegacyCheckoutStartedPayload): Promise<void>;
|
|
13
14
|
viewCollection(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { toCheckoutStartedData } from "../legacy-checkout";
|
|
1
2
|
import { createEventQueue } from "../utils/analytics-utils";
|
|
2
3
|
class MetaSink {
|
|
3
4
|
track;
|
|
@@ -11,6 +12,8 @@ class MetaSink {
|
|
|
11
12
|
"Meta"
|
|
12
13
|
);
|
|
13
14
|
}
|
|
15
|
+
async customEvent() {
|
|
16
|
+
}
|
|
14
17
|
async pageView() {
|
|
15
18
|
this.track("PageView");
|
|
16
19
|
}
|
|
@@ -37,10 +40,11 @@ class MetaSink {
|
|
|
37
40
|
}
|
|
38
41
|
async viewCart() {
|
|
39
42
|
}
|
|
40
|
-
async startCheckout(
|
|
43
|
+
async startCheckout(payload) {
|
|
44
|
+
const data = toCheckoutStartedData(payload.data);
|
|
41
45
|
this.track("InitiateCheckout", {
|
|
42
|
-
value: data.
|
|
43
|
-
currency: data.
|
|
46
|
+
value: data.total,
|
|
47
|
+
currency: data.currency,
|
|
44
48
|
...data
|
|
45
49
|
});
|
|
46
50
|
}
|
|
@@ -6,6 +6,7 @@ import type { PageMetadata } from "../utils/navigation-tracker";
|
|
|
6
6
|
*/
|
|
7
7
|
export declare class NorthbeamSink implements AnalyticsSink {
|
|
8
8
|
private call;
|
|
9
|
+
customEvent(): Promise<void>;
|
|
9
10
|
pageView(metadata?: PageMetadata): Promise<void>;
|
|
10
11
|
purchase(): Promise<void>;
|
|
11
12
|
click(): Promise<void>;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import type { AnalyticsSink,
|
|
1
|
+
import type { AnalyticsSink, CartLineEventPayload, CheckoutStartedPayload, ClickPayload, CollectionViewedPayload, LegacyCheckoutStartedPayload, ProductViewedPayload, PurchasePayload } from "../analytics-sink";
|
|
2
2
|
export declare class PinterestSink implements AnalyticsSink {
|
|
3
3
|
private track;
|
|
4
4
|
constructor();
|
|
5
|
+
customEvent(): Promise<void>;
|
|
5
6
|
pageView(): Promise<void>;
|
|
6
7
|
purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
|
|
7
|
-
click({ data }:
|
|
8
|
-
productViewed({ data }:
|
|
9
|
-
addToCart({ data }:
|
|
8
|
+
click({ data }: ClickPayload): Promise<void>;
|
|
9
|
+
productViewed({ data }: ProductViewedPayload): Promise<void>;
|
|
10
|
+
addToCart({ data }: CartLineEventPayload): Promise<void>;
|
|
10
11
|
removeFromCart(): Promise<void>;
|
|
11
12
|
viewCart(): Promise<void>;
|
|
12
|
-
startCheckout(
|
|
13
|
-
viewCollection({ data }:
|
|
13
|
+
startCheckout(payload: CheckoutStartedPayload | LegacyCheckoutStartedPayload): Promise<void>;
|
|
14
|
+
viewCollection({ data }: CollectionViewedPayload): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
withoutUndefined
|
|
5
|
-
} from "../utils/analytics-products";
|
|
1
|
+
import { filterUndefined } from "../../_vendor/replo-utils/lib/object.mjs";
|
|
2
|
+
import { toCheckoutStartedData } from "../legacy-checkout";
|
|
3
|
+
import { legacyResourceId } from "../utils/analytics-products";
|
|
6
4
|
import { createEventQueue } from "../utils/analytics-utils";
|
|
7
5
|
class PinterestSink {
|
|
8
6
|
track;
|
|
@@ -16,6 +14,8 @@ class PinterestSink {
|
|
|
16
14
|
"Pinterest"
|
|
17
15
|
);
|
|
18
16
|
}
|
|
17
|
+
async customEvent() {
|
|
18
|
+
}
|
|
19
19
|
async pageView() {
|
|
20
20
|
this.track("pagevisit");
|
|
21
21
|
}
|
|
@@ -23,8 +23,8 @@ class PinterestSink {
|
|
|
23
23
|
this.track("checkout", {
|
|
24
24
|
value: amount,
|
|
25
25
|
currency,
|
|
26
|
-
order_quantity: data.quantity ?? 1,
|
|
27
|
-
order_id: data.
|
|
26
|
+
order_quantity: data.itemCount ?? data.lineItems?.reduce((sum, line) => sum + line.quantity, 0) ?? 1,
|
|
27
|
+
order_id: data.orderId,
|
|
28
28
|
...data
|
|
29
29
|
});
|
|
30
30
|
}
|
|
@@ -33,9 +33,6 @@ class PinterestSink {
|
|
|
33
33
|
}
|
|
34
34
|
async productViewed({ data }) {
|
|
35
35
|
this.track("pagevisit", {
|
|
36
|
-
product_id: data.product_id,
|
|
37
|
-
product_category: data.category,
|
|
38
|
-
product_name: data.name,
|
|
39
36
|
product_price: data.price,
|
|
40
37
|
currency: data.currency,
|
|
41
38
|
...data
|
|
@@ -45,10 +42,7 @@ class PinterestSink {
|
|
|
45
42
|
this.track("addtocart", {
|
|
46
43
|
value: data.price,
|
|
47
44
|
currency: data.currency,
|
|
48
|
-
order_quantity: data.quantity
|
|
49
|
-
product_id: data.product_id,
|
|
50
|
-
product_category: data.category,
|
|
51
|
-
product_name: data.name,
|
|
45
|
+
order_quantity: data.quantity,
|
|
52
46
|
...data
|
|
53
47
|
});
|
|
54
48
|
}
|
|
@@ -57,22 +51,22 @@ class PinterestSink {
|
|
|
57
51
|
async viewCart() {
|
|
58
52
|
this.track("pagevisit");
|
|
59
53
|
}
|
|
60
|
-
async startCheckout(
|
|
54
|
+
async startCheckout(payload) {
|
|
55
|
+
const data = toCheckoutStartedData(payload.data);
|
|
61
56
|
this.track("checkout", {
|
|
62
|
-
value: data.
|
|
57
|
+
value: data.total,
|
|
63
58
|
currency: data.currency,
|
|
64
|
-
order_quantity: data.
|
|
59
|
+
order_quantity: data.itemCount,
|
|
65
60
|
...data
|
|
66
61
|
});
|
|
67
62
|
}
|
|
68
63
|
async viewCollection({ data }) {
|
|
69
|
-
const { products, rest } =
|
|
64
|
+
const { products, ...rest } = data;
|
|
70
65
|
this.track("viewcategory", {
|
|
71
|
-
product_category: data.category,
|
|
72
66
|
currency: data.currency,
|
|
73
67
|
...products.length > 0 ? {
|
|
74
68
|
line_items: products.map((product) => {
|
|
75
|
-
return
|
|
69
|
+
return filterUndefined({
|
|
76
70
|
product_id: legacyResourceId(product.productId),
|
|
77
71
|
product_name: product.productTitle,
|
|
78
72
|
product_price: product.price,
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import type { AnalyticsSink,
|
|
1
|
+
import type { AnalyticsSink, CartLineEventPayload, CartViewedPayload, CheckoutStartedPayload, ClickPayload, CollectionViewedPayload, LegacyCheckoutStartedPayload, ProductViewedPayload, PurchasePayload } from "../analytics-sink";
|
|
2
2
|
export declare class RedditSink implements AnalyticsSink {
|
|
3
3
|
private track;
|
|
4
4
|
constructor();
|
|
5
|
+
customEvent(): Promise<void>;
|
|
5
6
|
pageView(): Promise<void>;
|
|
6
7
|
purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
|
|
7
|
-
click({ data }:
|
|
8
|
-
productViewed({ data }:
|
|
9
|
-
addToCart({ data }:
|
|
8
|
+
click({ data }: ClickPayload): Promise<void>;
|
|
9
|
+
productViewed({ data }: ProductViewedPayload): Promise<void>;
|
|
10
|
+
addToCart({ data }: CartLineEventPayload): Promise<void>;
|
|
10
11
|
removeFromCart(): Promise<void>;
|
|
11
|
-
viewCart({ data }:
|
|
12
|
-
startCheckout(
|
|
13
|
-
viewCollection({ data }:
|
|
12
|
+
viewCart({ data }: CartViewedPayload): Promise<void>;
|
|
13
|
+
startCheckout(payload: CheckoutStartedPayload | LegacyCheckoutStartedPayload): Promise<void>;
|
|
14
|
+
viewCollection({ data }: CollectionViewedPayload): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
withoutUndefined
|
|
5
|
-
} from "../utils/analytics-products";
|
|
1
|
+
import { filterUndefined } from "../../_vendor/replo-utils/lib/object.mjs";
|
|
2
|
+
import { toCheckoutStartedData } from "../legacy-checkout";
|
|
3
|
+
import { legacyResourceId } from "../utils/analytics-products";
|
|
6
4
|
import { createEventQueue } from "../utils/analytics-utils";
|
|
7
5
|
class RedditSink {
|
|
8
6
|
track;
|
|
@@ -16,6 +14,8 @@ class RedditSink {
|
|
|
16
14
|
"Reddit"
|
|
17
15
|
);
|
|
18
16
|
}
|
|
17
|
+
async customEvent() {
|
|
18
|
+
}
|
|
19
19
|
async pageView() {
|
|
20
20
|
this.track("PageVisit");
|
|
21
21
|
}
|
|
@@ -23,8 +23,8 @@ class RedditSink {
|
|
|
23
23
|
this.track("Purchase", {
|
|
24
24
|
value: amount,
|
|
25
25
|
currency,
|
|
26
|
-
itemCount: data.quantity ?? 1,
|
|
27
|
-
transactionId: data.
|
|
26
|
+
itemCount: data.itemCount ?? data.lineItems?.reduce((sum, line) => sum + line.quantity, 0) ?? 1,
|
|
27
|
+
transactionId: data.orderId,
|
|
28
28
|
...data
|
|
29
29
|
});
|
|
30
30
|
}
|
|
@@ -35,9 +35,6 @@ class RedditSink {
|
|
|
35
35
|
this.track("ViewContent", {
|
|
36
36
|
value: data.price,
|
|
37
37
|
currency: data.currency,
|
|
38
|
-
content_category: data.category,
|
|
39
|
-
content_name: data.name,
|
|
40
|
-
content_ids: data.product_id ? [data.product_id] : void 0,
|
|
41
38
|
...data
|
|
42
39
|
});
|
|
43
40
|
}
|
|
@@ -45,10 +42,7 @@ class RedditSink {
|
|
|
45
42
|
this.track("AddToCart", {
|
|
46
43
|
value: data.price,
|
|
47
44
|
currency: data.currency,
|
|
48
|
-
itemCount: data.quantity
|
|
49
|
-
content_category: data.category,
|
|
50
|
-
content_name: data.name,
|
|
51
|
-
content_ids: data.product_id ? [data.product_id] : void 0,
|
|
45
|
+
itemCount: data.quantity,
|
|
52
46
|
...data
|
|
53
47
|
});
|
|
54
48
|
}
|
|
@@ -60,23 +54,22 @@ class RedditSink {
|
|
|
60
54
|
...data
|
|
61
55
|
});
|
|
62
56
|
}
|
|
63
|
-
async startCheckout(
|
|
57
|
+
async startCheckout(payload) {
|
|
58
|
+
const data = toCheckoutStartedData(payload.data);
|
|
64
59
|
this.track("Lead", {
|
|
65
|
-
value: data.
|
|
60
|
+
value: data.total,
|
|
66
61
|
currency: data.currency,
|
|
67
|
-
itemCount: data.quantity,
|
|
68
62
|
...data
|
|
69
63
|
});
|
|
70
64
|
}
|
|
71
65
|
async viewCollection({ data }) {
|
|
72
|
-
const { products, rest } =
|
|
66
|
+
const { products, ...rest } = data;
|
|
73
67
|
this.track("ViewContent", {
|
|
74
|
-
content_category: data.category,
|
|
75
68
|
content_type: "category",
|
|
76
69
|
currency: data.currency,
|
|
77
70
|
...products.length > 0 ? {
|
|
78
71
|
products: products.map((product) => {
|
|
79
|
-
return
|
|
72
|
+
return filterUndefined({
|
|
80
73
|
id: legacyResourceId(product.productId),
|
|
81
74
|
name: product.productTitle
|
|
82
75
|
});
|
|
@@ -1,14 +1,26 @@
|
|
|
1
|
-
import type { AnalyticsSink,
|
|
1
|
+
import type { AnalyticsSink, CartLineEventPayload, CartViewedPayload, CheckoutStartedPayload, ClickPayload, CollectionViewedPayload, LegacyCheckoutStartedPayload, ProductViewedPayload, PurchasePayload } from "../analytics-sink";
|
|
2
|
+
/** The first-party pixel's client (`analytics-client`), which stores `data` as-is. */
|
|
3
|
+
type ReploPixelAnalytics = Omit<AnalyticsSink, "customEvent" | "pageView"> & {
|
|
4
|
+
pageView(): Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
ReploPixel?: {
|
|
9
|
+
analyticsInstance: ReploPixelAnalytics | null;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
}
|
|
2
13
|
export declare class ReploSink implements AnalyticsSink {
|
|
3
14
|
private forward;
|
|
4
|
-
|
|
15
|
+
customEvent(): Promise<void>;
|
|
5
16
|
pageView(): Promise<void>;
|
|
6
17
|
purchase(payload: PurchasePayload): Promise<void>;
|
|
7
|
-
click(payload:
|
|
8
|
-
productViewed(payload:
|
|
9
|
-
addToCart(payload:
|
|
10
|
-
removeFromCart(payload:
|
|
11
|
-
viewCart(payload:
|
|
12
|
-
startCheckout(payload:
|
|
13
|
-
viewCollection(payload:
|
|
18
|
+
click(payload: ClickPayload): Promise<void>;
|
|
19
|
+
productViewed(payload: ProductViewedPayload): Promise<void>;
|
|
20
|
+
addToCart(payload: CartLineEventPayload): Promise<void>;
|
|
21
|
+
removeFromCart(payload: CartLineEventPayload): Promise<void>;
|
|
22
|
+
viewCart(payload: CartViewedPayload): Promise<void>;
|
|
23
|
+
startCheckout(payload: CheckoutStartedPayload | LegacyCheckoutStartedPayload): Promise<void>;
|
|
24
|
+
viewCollection(payload: CollectionViewedPayload): Promise<void>;
|
|
14
25
|
}
|
|
26
|
+
export {};
|
|
@@ -1,53 +1,51 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toCheckoutStartedData } from "../legacy-checkout";
|
|
2
|
+
import { createAnalyticsQueue } from "../utils/analytics-utils";
|
|
3
|
+
function findPixelAnalytics() {
|
|
4
|
+
if (typeof window === "undefined") {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
return window.ReploPixel?.analyticsInstance ?? null;
|
|
8
|
+
}
|
|
2
9
|
class ReploSink {
|
|
3
|
-
forward
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
()
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
);
|
|
10
|
+
forward = createAnalyticsQueue({
|
|
11
|
+
isReady: () => Boolean(findPixelAnalytics()),
|
|
12
|
+
send: (call) => {
|
|
13
|
+
const pixel = findPixelAnalytics();
|
|
14
|
+
if (pixel) {
|
|
15
|
+
void call(pixel);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
queueName: "Replo analytics sink"
|
|
19
|
+
});
|
|
20
|
+
async customEvent() {
|
|
15
21
|
}
|
|
16
22
|
async pageView() {
|
|
17
|
-
this.forward(
|
|
18
|
-
return Promise.resolve();
|
|
23
|
+
this.forward((pixel) => pixel.pageView());
|
|
19
24
|
}
|
|
20
|
-
purchase(payload) {
|
|
21
|
-
this.forward(
|
|
22
|
-
return Promise.resolve();
|
|
25
|
+
async purchase(payload) {
|
|
26
|
+
this.forward((pixel) => pixel.purchase(payload));
|
|
23
27
|
}
|
|
24
|
-
click(payload) {
|
|
25
|
-
this.forward(
|
|
26
|
-
return Promise.resolve();
|
|
28
|
+
async click(payload) {
|
|
29
|
+
this.forward((pixel) => pixel.click(payload));
|
|
27
30
|
}
|
|
28
|
-
productViewed(payload) {
|
|
29
|
-
this.forward(
|
|
30
|
-
return Promise.resolve();
|
|
31
|
+
async productViewed(payload) {
|
|
32
|
+
this.forward((pixel) => pixel.productViewed(payload));
|
|
31
33
|
}
|
|
32
|
-
addToCart(payload) {
|
|
33
|
-
this.forward(
|
|
34
|
-
return Promise.resolve();
|
|
34
|
+
async addToCart(payload) {
|
|
35
|
+
this.forward((pixel) => pixel.addToCart(payload));
|
|
35
36
|
}
|
|
36
|
-
removeFromCart(payload) {
|
|
37
|
-
this.forward(
|
|
38
|
-
return Promise.resolve();
|
|
37
|
+
async removeFromCart(payload) {
|
|
38
|
+
this.forward((pixel) => pixel.removeFromCart(payload));
|
|
39
39
|
}
|
|
40
|
-
viewCart(payload) {
|
|
41
|
-
this.forward(
|
|
42
|
-
return Promise.resolve();
|
|
40
|
+
async viewCart(payload) {
|
|
41
|
+
this.forward((pixel) => pixel.viewCart(payload));
|
|
43
42
|
}
|
|
44
|
-
startCheckout(payload) {
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
async startCheckout(payload) {
|
|
44
|
+
const data = toCheckoutStartedData(payload.data);
|
|
45
|
+
this.forward((pixel) => pixel.startCheckout({ data }));
|
|
47
46
|
}
|
|
48
|
-
viewCollection(payload) {
|
|
49
|
-
this.forward(
|
|
50
|
-
return Promise.resolve();
|
|
47
|
+
async viewCollection(payload) {
|
|
48
|
+
this.forward((pixel) => pixel.viewCollection(payload));
|
|
51
49
|
}
|
|
52
50
|
}
|
|
53
51
|
export {
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import type { AnalyticsSink,
|
|
1
|
+
import type { AnalyticsSink, CartLineEventPayload, CheckoutStartedPayload, ClickPayload, LegacyCheckoutStartedPayload, ProductViewedPayload, PurchasePayload } from "../analytics-sink";
|
|
2
2
|
export declare class SnapchatSink implements AnalyticsSink {
|
|
3
3
|
private track;
|
|
4
4
|
constructor();
|
|
5
|
+
customEvent(): Promise<void>;
|
|
5
6
|
pageView(): Promise<void>;
|
|
6
7
|
purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
|
|
7
|
-
click({ data }:
|
|
8
|
-
productViewed({ data }:
|
|
9
|
-
addToCart({ data }:
|
|
8
|
+
click({ data }: ClickPayload): Promise<void>;
|
|
9
|
+
productViewed({ data }: ProductViewedPayload): Promise<void>;
|
|
10
|
+
addToCart({ data }: CartLineEventPayload): Promise<void>;
|
|
10
11
|
removeFromCart(): Promise<void>;
|
|
11
12
|
viewCart(): Promise<void>;
|
|
12
|
-
startCheckout(
|
|
13
|
+
startCheckout(payload: CheckoutStartedPayload | LegacyCheckoutStartedPayload): Promise<void>;
|
|
13
14
|
viewCollection(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { toCheckoutStartedData } from "../legacy-checkout";
|
|
1
2
|
import { createEventQueue } from "../utils/analytics-utils";
|
|
2
3
|
class SnapchatSink {
|
|
3
4
|
track;
|
|
@@ -11,6 +12,8 @@ class SnapchatSink {
|
|
|
11
12
|
"Snapchat"
|
|
12
13
|
);
|
|
13
14
|
}
|
|
15
|
+
async customEvent() {
|
|
16
|
+
}
|
|
14
17
|
async pageView() {
|
|
15
18
|
this.track("PAGE_VIEW");
|
|
16
19
|
}
|
|
@@ -26,20 +29,16 @@ class SnapchatSink {
|
|
|
26
29
|
}
|
|
27
30
|
async productViewed({ data }) {
|
|
28
31
|
this.track("VIEW_CONTENT", {
|
|
29
|
-
item_ids: data.product_id ? [data.product_id] : void 0,
|
|
30
32
|
price: data.price,
|
|
31
33
|
currency: data.currency,
|
|
32
|
-
item_category: data.category,
|
|
33
34
|
...data
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
37
|
async addToCart({ data }) {
|
|
37
38
|
this.track("ADD_CART", {
|
|
38
|
-
item_ids: data.product_id ? [data.product_id] : void 0,
|
|
39
39
|
price: data.price,
|
|
40
|
-
num_items: data.quantity
|
|
40
|
+
num_items: data.quantity,
|
|
41
41
|
currency: data.currency,
|
|
42
|
-
item_category: data.category,
|
|
43
42
|
...data
|
|
44
43
|
});
|
|
45
44
|
}
|
|
@@ -47,11 +46,12 @@ class SnapchatSink {
|
|
|
47
46
|
}
|
|
48
47
|
async viewCart() {
|
|
49
48
|
}
|
|
50
|
-
async startCheckout(
|
|
49
|
+
async startCheckout(payload) {
|
|
50
|
+
const data = toCheckoutStartedData(payload.data);
|
|
51
51
|
this.track("START_CHECKOUT", {
|
|
52
52
|
currency: data.currency,
|
|
53
|
-
number_items: data.
|
|
54
|
-
price: data.
|
|
53
|
+
number_items: data.itemCount,
|
|
54
|
+
price: data.total,
|
|
55
55
|
...data
|
|
56
56
|
});
|
|
57
57
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import type { AnalyticsSink,
|
|
1
|
+
import type { AnalyticsSink, CartLineEventPayload, CartViewedPayload, CheckoutStartedPayload, ClickPayload, CollectionViewedPayload, LegacyCheckoutStartedPayload, ProductViewedPayload, PurchasePayload } from "../analytics-sink";
|
|
2
2
|
export declare class TikTokSink implements AnalyticsSink {
|
|
3
3
|
private track;
|
|
4
4
|
constructor();
|
|
5
|
+
customEvent(): Promise<void>;
|
|
5
6
|
pageView(): Promise<void>;
|
|
6
7
|
purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
|
|
7
|
-
click({ data }:
|
|
8
|
-
productViewed({ data }:
|
|
9
|
-
addToCart({ data }:
|
|
8
|
+
click({ data }: ClickPayload): Promise<void>;
|
|
9
|
+
productViewed({ data }: ProductViewedPayload): Promise<void>;
|
|
10
|
+
addToCart({ data }: CartLineEventPayload): Promise<void>;
|
|
10
11
|
removeFromCart(): Promise<void>;
|
|
11
|
-
viewCart({ data }:
|
|
12
|
-
startCheckout(
|
|
13
|
-
viewCollection({ data }:
|
|
12
|
+
viewCart({ data }: CartViewedPayload): Promise<void>;
|
|
13
|
+
startCheckout(payload: CheckoutStartedPayload | LegacyCheckoutStartedPayload): Promise<void>;
|
|
14
|
+
viewCollection({ data }: CollectionViewedPayload): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
withoutUndefined
|
|
5
|
-
} from "../utils/analytics-products";
|
|
1
|
+
import { filterUndefined } from "../../_vendor/replo-utils/lib/object.mjs";
|
|
2
|
+
import { toCheckoutStartedData } from "../legacy-checkout";
|
|
3
|
+
import { legacyResourceId } from "../utils/analytics-products";
|
|
6
4
|
import { createEventQueue } from "../utils/analytics-utils";
|
|
7
5
|
class TikTokSink {
|
|
8
6
|
track;
|
|
@@ -16,6 +14,8 @@ class TikTokSink {
|
|
|
16
14
|
"TikTok"
|
|
17
15
|
);
|
|
18
16
|
}
|
|
17
|
+
async customEvent() {
|
|
18
|
+
}
|
|
19
19
|
async pageView() {
|
|
20
20
|
this.track("PageView");
|
|
21
21
|
}
|
|
@@ -33,21 +33,16 @@ class TikTokSink {
|
|
|
33
33
|
async productViewed({ data }) {
|
|
34
34
|
this.track("ViewContent", {
|
|
35
35
|
content_type: "product",
|
|
36
|
-
content_id: data.product_id,
|
|
37
36
|
value: data.price,
|
|
38
37
|
currency: data.currency,
|
|
39
|
-
content_category: data.category,
|
|
40
38
|
...data
|
|
41
39
|
});
|
|
42
40
|
}
|
|
43
41
|
async addToCart({ data }) {
|
|
44
42
|
this.track("AddToCart", {
|
|
45
43
|
content_type: "product",
|
|
46
|
-
content_id: data.product_id,
|
|
47
44
|
value: data.price,
|
|
48
45
|
currency: data.currency,
|
|
49
|
-
quantity: data.quantity ?? 1,
|
|
50
|
-
content_category: data.category,
|
|
51
46
|
...data
|
|
52
47
|
});
|
|
53
48
|
}
|
|
@@ -59,23 +54,23 @@ class TikTokSink {
|
|
|
59
54
|
...data
|
|
60
55
|
});
|
|
61
56
|
}
|
|
62
|
-
async startCheckout(
|
|
57
|
+
async startCheckout(payload) {
|
|
58
|
+
const data = toCheckoutStartedData(payload.data);
|
|
63
59
|
this.track("InitiateCheckout", {
|
|
64
|
-
value: data.
|
|
60
|
+
value: data.total,
|
|
65
61
|
currency: data.currency,
|
|
66
62
|
content_type: "product",
|
|
67
63
|
...data
|
|
68
64
|
});
|
|
69
65
|
}
|
|
70
66
|
async viewCollection({ data }) {
|
|
71
|
-
const { products, rest } =
|
|
67
|
+
const { products, ...rest } = data;
|
|
72
68
|
this.track("ViewContent", {
|
|
73
69
|
content_type: "product_group",
|
|
74
|
-
content_category: data.category,
|
|
75
70
|
currency: data.currency,
|
|
76
71
|
...products.length > 0 ? {
|
|
77
72
|
contents: products.map((product) => {
|
|
78
|
-
return
|
|
73
|
+
return filterUndefined({
|
|
79
74
|
content_id: legacyResourceId(product.productId),
|
|
80
75
|
content_type: "product_group",
|
|
81
76
|
content_name: product.productTitle,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { AnalyticsSink,
|
|
1
|
+
import type { AnalyticsSink, CartLineEventPayload, CartViewedPayload, CheckoutStartedPayload, ClickPayload, CollectionViewedPayload, LegacyCheckoutStartedPayload, ProductViewedPayload, PurchasePayload } from "../analytics-sink";
|
|
2
|
+
import type { PageMetadata } from "../utils/navigation-tracker";
|
|
2
3
|
/**
|
|
3
4
|
* Dispatches CustomEvents to the global window object so 3rd-party scripts or
|
|
4
5
|
* external tools can subscribe to analytics events without coupling directly to
|
|
@@ -6,13 +7,14 @@ import type { AnalyticsSink, DataPayload, PurchasePayload } from "../analytics-s
|
|
|
6
7
|
*/
|
|
7
8
|
export declare class WindowSink implements AnalyticsSink {
|
|
8
9
|
private dispatch;
|
|
9
|
-
|
|
10
|
+
customEvent(): Promise<void>;
|
|
11
|
+
pageView(payload?: PageMetadata): Promise<void>;
|
|
10
12
|
purchase(payload: PurchasePayload): Promise<void>;
|
|
11
|
-
click(payload:
|
|
12
|
-
productViewed(payload:
|
|
13
|
-
addToCart(payload:
|
|
14
|
-
removeFromCart(payload:
|
|
15
|
-
viewCart(payload:
|
|
16
|
-
startCheckout(payload:
|
|
17
|
-
viewCollection(payload:
|
|
13
|
+
click(payload: ClickPayload): Promise<void>;
|
|
14
|
+
productViewed(payload: ProductViewedPayload): Promise<void>;
|
|
15
|
+
addToCart(payload: CartLineEventPayload): Promise<void>;
|
|
16
|
+
removeFromCart(payload: CartLineEventPayload): Promise<void>;
|
|
17
|
+
viewCart(payload: CartViewedPayload): Promise<void>;
|
|
18
|
+
startCheckout(payload: CheckoutStartedPayload | LegacyCheckoutStartedPayload): Promise<void>;
|
|
19
|
+
viewCollection(payload: CollectionViewedPayload): Promise<void>;
|
|
18
20
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { toCheckoutStartedData } from "../legacy-checkout";
|
|
1
2
|
class WindowSink {
|
|
2
3
|
dispatch(eventType, payload) {
|
|
3
4
|
window.dispatchEvent(
|
|
@@ -10,6 +11,8 @@ class WindowSink {
|
|
|
10
11
|
})
|
|
11
12
|
);
|
|
12
13
|
}
|
|
14
|
+
async customEvent() {
|
|
15
|
+
}
|
|
13
16
|
async pageView(payload) {
|
|
14
17
|
this.dispatch("page_viewed", payload);
|
|
15
18
|
}
|
|
@@ -32,7 +35,8 @@ class WindowSink {
|
|
|
32
35
|
this.dispatch("cart_viewed", payload);
|
|
33
36
|
}
|
|
34
37
|
async startCheckout(payload) {
|
|
35
|
-
|
|
38
|
+
const data = toCheckoutStartedData(payload.data);
|
|
39
|
+
this.dispatch("checkout_started", { data });
|
|
36
40
|
}
|
|
37
41
|
async viewCollection(payload) {
|
|
38
42
|
this.dispatch("collection_viewed", payload);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { XPixelEvents } from "../../_vendor/schemas/generated/consent";
|
|
2
|
-
import type { AnalyticsSink,
|
|
2
|
+
import type { AnalyticsSink, CartLineEventPayload, CheckoutStartedPayload, LegacyCheckoutStartedPayload, ProductViewedPayload, PurchasePayload } from "../analytics-sink";
|
|
3
3
|
import type { PageMetadata } from "../utils/navigation-tracker";
|
|
4
4
|
declare global {
|
|
5
5
|
interface Window {
|
|
@@ -20,13 +20,14 @@ export declare class XSink implements AnalyticsSink {
|
|
|
20
20
|
events: XPixelEvents;
|
|
21
21
|
});
|
|
22
22
|
private track;
|
|
23
|
+
customEvent(): Promise<void>;
|
|
23
24
|
pageView(metadata: PageMetadata | undefined): Promise<void>;
|
|
24
25
|
purchase({ amount, currency, data }: PurchasePayload): Promise<void>;
|
|
25
26
|
click(): Promise<void>;
|
|
26
|
-
productViewed({ data }:
|
|
27
|
-
addToCart({ data }:
|
|
27
|
+
productViewed({ data }: ProductViewedPayload): Promise<void>;
|
|
28
|
+
addToCart({ data }: CartLineEventPayload): Promise<void>;
|
|
28
29
|
removeFromCart(): Promise<void>;
|
|
29
30
|
viewCart(): Promise<void>;
|
|
30
|
-
startCheckout(
|
|
31
|
+
startCheckout(payload: CheckoutStartedPayload | LegacyCheckoutStartedPayload): Promise<void>;
|
|
31
32
|
viewCollection(): Promise<void>;
|
|
32
33
|
}
|