@active-reach/web-sdk 1.0.0 → 1.2.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.
@@ -0,0 +1,46 @@
1
+ /**
2
+ * E-Commerce helper methods for the Aegis SDK.
3
+ *
4
+ * Provides standardized e-commerce event tracking that maps to the
5
+ * Active Reach Intelligence data governance pipeline.
6
+ *
7
+ * Event names follow the canonical mapper:
8
+ * product_viewed → engagement.product_view
9
+ * product_list_viewed → engagement.product_list_view
10
+ * cart_item_added → cart_item_added
11
+ * cart_item_removed → cart_item_removed
12
+ * cart_viewed → cart_viewed
13
+ * checkout_started → checkout_started
14
+ * checkout_step → checkout_step
15
+ * order_completed → transaction.purchase
16
+ * order_refunded → transaction.refund
17
+ * coupon_applied → coupon_applied
18
+ * coupon_removed → coupon_removed
19
+ * search_performed → search_performed
20
+ * wishlist_item_added → wishlist_item_added
21
+ * promotion_viewed → promotion_viewed
22
+ * promotion_clicked → promotion_clicked
23
+ */
24
+ import type { Aegis } from '../core/analytics';
25
+ import type { EcommerceProduct, EcommerceCart, EcommerceCheckout, EcommerceOrder, EcommerceCoupon, EcommerceSearch, EcommerceProductList, EcommerceWishlist, EcommercePromotion } from './types';
26
+ export declare class EcommerceTracker {
27
+ private aegis;
28
+ constructor(aegis: Aegis);
29
+ productViewed(product: EcommerceProduct): void;
30
+ productListViewed(list: EcommerceProductList): void;
31
+ searchPerformed(search: EcommerceSearch): void;
32
+ addToCart(product: EcommerceProduct): void;
33
+ removeFromCart(product: EcommerceProduct): void;
34
+ cartViewed(cart: EcommerceCart): void;
35
+ checkoutStarted(checkout: EcommerceCheckout): void;
36
+ checkoutStep(step: number, options?: Record<string, unknown>): void;
37
+ orderCompleted(order: EcommerceOrder): void;
38
+ orderRefunded(orderId: string, value?: number, products?: EcommerceProduct[]): void;
39
+ couponApplied(coupon: EcommerceCoupon): void;
40
+ couponRemoved(coupon: EcommerceCoupon): void;
41
+ wishlistItemAdded(wishlist: EcommerceWishlist): void;
42
+ promotionViewed(promo: EcommercePromotion): void;
43
+ promotionClicked(promo: EcommercePromotion): void;
44
+ }
45
+ export type { EcommerceProduct, EcommerceCart, EcommerceCheckout, EcommerceOrder, EcommerceCoupon, EcommerceSearch, EcommerceProductList, EcommerceWishlist, EcommercePromotion, } from './types';
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ecommerce/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAsBjB,qBAAa,gBAAgB;IACf,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK;IAIhC,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAgB9C,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IASnD,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAU9C,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAe1C,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAY/C,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAYrC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAalD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IASnE,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAgB3C,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAUnF,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAI5C,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAM5C,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAcpD,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAIhD,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;CAGlD;AAED,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * E-Commerce event types following the Active Reach Intelligence spec.
3
+ * Compatible with Segment/GA4 e-commerce event schemas.
4
+ */
5
+ export interface EcommerceProduct {
6
+ product_id: string;
7
+ sku?: string;
8
+ name: string;
9
+ price: number;
10
+ quantity?: number;
11
+ currency?: string;
12
+ category?: string;
13
+ brand?: string;
14
+ variant_id?: string;
15
+ variant_label?: string;
16
+ image_url?: string;
17
+ url?: string;
18
+ position?: number;
19
+ }
20
+ export interface EcommerceCart {
21
+ cart_id?: string;
22
+ value: number;
23
+ currency?: string;
24
+ products: EcommerceProduct[];
25
+ }
26
+ export interface EcommerceCheckout {
27
+ checkout_id?: string;
28
+ value: number;
29
+ currency?: string;
30
+ products: EcommerceProduct[];
31
+ coupon?: string;
32
+ shipping?: number;
33
+ tax?: number;
34
+ }
35
+ export interface EcommerceOrder {
36
+ order_id: string;
37
+ value: number;
38
+ revenue?: number;
39
+ currency?: string;
40
+ products: EcommerceProduct[];
41
+ coupon?: string;
42
+ shipping?: number;
43
+ tax?: number;
44
+ discount?: number;
45
+ payment_method?: string;
46
+ }
47
+ export interface EcommerceCoupon {
48
+ coupon_id?: string;
49
+ coupon_code: string;
50
+ discount_value?: number;
51
+ discount_type?: 'percentage' | 'fixed';
52
+ order_id?: string;
53
+ cart_id?: string;
54
+ }
55
+ export interface EcommerceSearch {
56
+ query: string;
57
+ results_count?: number;
58
+ filters?: Record<string, string | string[]>;
59
+ }
60
+ export interface EcommerceProductList {
61
+ list_id?: string;
62
+ list_name?: string;
63
+ products: EcommerceProduct[];
64
+ category?: string;
65
+ }
66
+ export interface EcommerceWishlist {
67
+ wishlist_id?: string;
68
+ wishlist_name?: string;
69
+ product: EcommerceProduct;
70
+ }
71
+ export interface EcommercePromotion {
72
+ promotion_id?: string;
73
+ name: string;
74
+ creative?: string;
75
+ position?: string;
76
+ }
77
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ecommerce/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
package/dist/index.d.ts CHANGED
@@ -20,4 +20,6 @@ export { SdkConfigPoller } from './core/sdk-config-poller';
20
20
  export type { SdkConfig, SdkConfigPollerOptions, ConfigChangeCallback } from './core/sdk-config-poller';
21
21
  export { AegisWebPush } from './push/AegisWebPush';
22
22
  export type { AegisWebPushConfig, AegisAPIClient, ContactIdentity, PushEventTracker, } from './push/AegisWebPush';
23
+ export { EcommerceTracker } from './ecommerce';
24
+ export type { EcommerceProduct, EcommerceCart, EcommerceCheckout, EcommerceOrder, EcommerceCoupon, EcommerceSearch, EcommerceProductList, EcommerceWishlist, EcommercePromotion, } from './ecommerce';
23
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC;AAErB,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5E,YAAY,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,oBAAoB,GACrB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAExG,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC;AAErB,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5E,YAAY,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,oBAAoB,GACrB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAExG,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
- import { l as logger, A as Aegis } from "./analytics-B11keZ55.mjs";
1
+ import { l as logger, A as Aegis } from "./analytics-CNtfsb7E.mjs";
2
+ import { E } from "./analytics-CNtfsb7E.mjs";
2
3
  import { AegisWebPush } from "./push/AegisWebPush.js";
3
4
  function debounce(func, wait) {
4
5
  let timeoutId = null;
@@ -2023,6 +2024,73 @@ class AegisPlacementManager {
2023
2024
  return "#000000";
2024
2025
  }
2025
2026
  sanitizeHTML(html) {
2027
+ const purify = window.DOMPurify;
2028
+ if (purify == null ? void 0 : purify.sanitize) {
2029
+ return purify.sanitize(html, {
2030
+ ALLOWED_TAGS: [
2031
+ "a",
2032
+ "b",
2033
+ "br",
2034
+ "div",
2035
+ "em",
2036
+ "h1",
2037
+ "h2",
2038
+ "h3",
2039
+ "h4",
2040
+ "h5",
2041
+ "h6",
2042
+ "i",
2043
+ "img",
2044
+ "li",
2045
+ "ol",
2046
+ "p",
2047
+ "span",
2048
+ "strong",
2049
+ "u",
2050
+ "ul",
2051
+ "table",
2052
+ "thead",
2053
+ "tbody",
2054
+ "tr",
2055
+ "th",
2056
+ "td",
2057
+ "blockquote",
2058
+ "hr",
2059
+ "figure",
2060
+ "figcaption",
2061
+ "picture",
2062
+ "source",
2063
+ "video",
2064
+ "section",
2065
+ "article"
2066
+ ],
2067
+ ALLOWED_ATTR: [
2068
+ "href",
2069
+ "target",
2070
+ "rel",
2071
+ "src",
2072
+ "alt",
2073
+ "width",
2074
+ "height",
2075
+ "class",
2076
+ "id",
2077
+ "style",
2078
+ "title",
2079
+ "loading",
2080
+ "srcset",
2081
+ "sizes",
2082
+ "type",
2083
+ "media",
2084
+ "controls",
2085
+ "poster"
2086
+ ],
2087
+ ALLOW_DATA_ATTR: false
2088
+ });
2089
+ }
2090
+ this.log(
2091
+ 'DOMPurify not found — falling back to built-in sanitizer. For full HTML placement support, add <script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.2.4/purify.min.js"><\/script>',
2092
+ false
2093
+ );
2026
2094
  const tempDiv = document.createElement("div");
2027
2095
  tempDiv.textContent = html;
2028
2096
  return tempDiv.innerHTML;
@@ -4286,6 +4354,7 @@ export {
4286
4354
  AegisPlacementManager,
4287
4355
  AegisWebPush,
4288
4356
  AegisWidgetManager,
4357
+ E as EcommerceTracker,
4289
4358
  SdkConfigPoller,
4290
4359
  TriggerEngine,
4291
4360
  debounce,