@liquidcommercedev/rmn-sdk 1.5.0-beta.2 → 1.5.0-beta.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. package/dist/index.cjs +2728 -953
  2. package/dist/index.esm.js +2729 -954
  3. package/dist/types/common/helpers/event-type.helper.d.ts +8 -0
  4. package/dist/types/common/helpers/extract-deep.helper.d.ts +28 -0
  5. package/dist/types/common/helpers/index.d.ts +5 -0
  6. package/dist/types/common/helpers/utils.helper.d.ts +35 -0
  7. package/dist/types/enums.d.ts +8 -1
  8. package/dist/types/modules/element/component/skeleton/index.d.ts +2 -0
  9. package/dist/types/modules/element/component/skeleton/skeleton.component.d.ts +3 -0
  10. package/dist/types/modules/element/component/skeleton/skeleton.interface.d.ts +13 -0
  11. package/dist/types/modules/element/component/skeleton/skeleton.template.d.ts +2 -0
  12. package/dist/types/modules/element/element.constant.d.ts +3 -0
  13. package/dist/types/modules/element/element.interface.d.ts +5 -2
  14. package/dist/types/modules/element/element.service.d.ts +11 -0
  15. package/dist/types/modules/element/template/helper.d.ts +2 -1
  16. package/dist/types/modules/event/event.interface.d.ts +11 -32
  17. package/dist/types/modules/event/event.service.d.ts +11 -27
  18. package/dist/types/modules/event/index.d.ts +0 -1
  19. package/dist/types/modules/{event/helpers → helper-service}/index.d.ts +1 -0
  20. package/dist/types/modules/{event/helpers → helper-service}/intersection.service.d.ts +1 -1
  21. package/dist/types/modules/helper-service/localstorage.service.d.ts +77 -0
  22. package/dist/types/modules/{event/pubsub.d.ts → helper-service/pubsub.service.d.ts} +8 -8
  23. package/dist/types/modules/{event/helpers → helper-service}/resize.service.d.ts +1 -1
  24. package/dist/types/modules/monitor/index.d.ts +2 -0
  25. package/dist/types/modules/monitor/monitor.enums.d.ts +4 -0
  26. package/dist/types/modules/monitor/monitor.interface.d.ts +16 -0
  27. package/dist/types/modules/monitor/monitor.service.d.ts +12 -0
  28. package/dist/types/modules/monitor/monitors/datalayer.monitor.d.ts +12 -0
  29. package/dist/types/modules/selection/selection.interface.d.ts +10 -2
  30. package/dist/types/modules/selection/selection.service.d.ts +1 -0
  31. package/dist/types/rmn-client.d.ts +17 -25
  32. package/dist/types/rmn-client.helper.d.ts +36 -0
  33. package/dist/types/types.d.ts +5 -4
  34. package/package.json +1 -1
  35. package/umd/liquidcommerce-rmn-sdk.min.js +1 -1
  36. package/dist/types/modules/element/component/utils.d.ts +0 -1
  37. package/dist/types/modules/event/helpers/localstorage.service.d.ts +0 -26
  38. /package/dist/types/{static.constant.d.ts → example.constant.d.ts} +0 -0
@@ -0,0 +1,8 @@
1
+ import { RMN_SPOT_EVENT } from 'enums';
2
+ /**
3
+ * Determines the event type from a raw event string by checking for keyword patterns.
4
+ *
5
+ * @param {string} [event] - The raw event string to evaluate
6
+ * @returns {RMN_SPOT_EVENT | null} - The corresponding RMN_SPOT_EVENT or null if no match
7
+ */
8
+ export declare function getEventTypeFromRawEvent(event?: string): RMN_SPOT_EVENT | null;
@@ -0,0 +1,28 @@
1
+ type ExtractorTarget = 'ids' | 'price';
2
+ type ExtractedValue = string | number;
3
+ /**
4
+ * Extracts deep values from an object based on specified target type
5
+ * @param data - The source data object to extract values from
6
+ * @param target - The type of values to extract ('ids' or 'price')
7
+ * @param options - Optional configuration for the extraction process
8
+ * @returns Array of extracted values or a single value if onlyFirst is true
9
+ */
10
+ export declare function extractDeepValues(data: unknown, target: ExtractorTarget, options?: {
11
+ onlyFirst?: boolean;
12
+ shouldIncludeZero?: boolean;
13
+ }): ExtractedValue[] | ExtractedValue | undefined;
14
+ /**
15
+ * Cleans and normalizes an array of product IDs by:
16
+ * 1. Converting all IDs to strings
17
+ * 2. Trimming whitespace
18
+ * 3. Removing leading zeros while preserving single "0"
19
+ * 4. Filtering out empty/invalid values
20
+ *
21
+ * @param productIds - Array of product IDs that can be either strings or numbers
22
+ * @returns Array of cleaned string IDs
23
+ *
24
+ * @example
25
+ * cleanProductIds(["001", " 123 ", 456, "0"]) // ["1", "123", "456", "0"]
26
+ */
27
+ export declare function cleanProductIds(productIds: Array<string | number>): string[];
28
+ export {};
@@ -1,2 +1,7 @@
1
+ export * from './event-type.helper';
2
+ export * from './extract-deep.helper';
3
+ export * from './helpers.interface';
1
4
  export * from './object.helper';
2
5
  export * from './string.helper';
6
+ export * from './utils.helper';
7
+ export * from './uuid.helper';
@@ -0,0 +1,35 @@
1
+ import type { IFireEventParams } from 'modules/event';
2
+ export declare function fallbackEventFire(url: string): Promise<boolean>;
3
+ /**
4
+ * Helper function to decode base64 string and parse JSON
5
+ *
6
+ * @param {string} base64String - The base64 encoded JSON string
7
+ * @returns {T | null} - Decoded and parsed object or null if invalid
8
+ */
9
+ export declare function decodeBase64Json<T>(base64String: string): T | null;
10
+ /**
11
+ * Extracts and decodes a URL from a base64-encoded query parameter.
12
+ *
13
+ * @param {string} url - The URL containing the base64-encoded query parameter.
14
+ * @returns {string | null} - The decoded URL or null if not found or invalid.
15
+ * @throws {Error} - If URL is malformed or payload is invalid.
16
+ */
17
+ export declare function getRedirectUrlFromPayload(url: string): string | null;
18
+ /**
19
+ * Fires an event using the navigator.sendBeacon method or a fallback method if sendBeacon is not available.
20
+ * If the event is a click event and a redirect URL is found, it redirects the user to that URL.
21
+ *
22
+ * @param {IFireEventParams} params - The parameters for firing the event.
23
+ * @param {RMN_SPOT_EVENT} params.event - The event type.
24
+ * @param {string} params.eventUrl - The URL to which the event is sent.
25
+ * @returns {Promise<void>} - A promise that resolves when the event is fired.
26
+ */
27
+ export declare function fireEvent({ event, eventUrl }: IFireEventParams): Promise<void>;
28
+ export declare function calculateScaleFactor(elementScale: number): number;
29
+ /**
30
+ * Converts an object to a query string.
31
+ *
32
+ * @param {Record<string, string|number|undefined|null>} obj - The object to be converted to a query string.
33
+ * @returns {string} - The query string.
34
+ */
35
+ export declare function objectToQueryParams(obj?: Record<string, string | number | undefined | null>): string;
@@ -1,4 +1,5 @@
1
1
  export declare enum RMN_SPOT_TYPE {
2
+ RB_HOMEPAGE_HERO = "rbHomepageHero",
2
3
  RB_HOMEPAGE_HERO_THREE_TILE = "rbHomepageHeroThreeTile",
3
4
  RB_HOMEPAGE_HERO_TWO_TILE = "rbHomepageHeroTwoTile",
4
5
  RB_HOMEPAGE_HERO_FULL_IMAGE = "rbHomepageHeroFullImage",
@@ -48,13 +49,19 @@ export declare enum RMN_FILTER_PROPERTIES {
48
49
  PUBLISHERS = "publishers",
49
50
  SECTION = "section"
50
51
  }
51
- export declare enum RMN_SPOT_EVENT {
52
+ export declare enum RMN_EVENT {
52
53
  LIFECYCLE_STATE = "LIFECYCLE_STATE",
54
+ SPOT_EVENT = "SPOT_EVENT"
55
+ }
56
+ export declare enum RMN_SPOT_EVENT {
53
57
  IMPRESSION = "IMPRESSION",
54
58
  CLICK = "CLICK",
55
59
  PURCHASE = "PURCHASE",
56
60
  ADD_TO_CART = "ADD_TO_CART",
61
+ REMOVE_FROM_CART = "REMOVE_FROM_CART",
62
+ ADD_TO_CART_FROM_DETAILS = "ADD_TO_CART_FROM_DETAILS",
57
63
  ADD_TO_WISHLIST = "ADD_TO_WISHLIST",
64
+ EXPAND_PRODUCT = "EXPAND_PRODUCT",
58
65
  BUY_NOW = "BUY_NOW"
59
66
  }
60
67
  export declare enum RMN_ENV {
@@ -0,0 +1,2 @@
1
+ export * from './skeleton.component';
2
+ export * from './skeleton.interface';
@@ -0,0 +1,3 @@
1
+ import type { ICustomSkeletonElement } from './skeleton.interface';
2
+ declare let SkeletonElement: new () => ICustomSkeletonElement;
3
+ export { SkeletonElement };
@@ -0,0 +1,13 @@
1
+ import type { RMN_SPOT_TYPE } from 'enums';
2
+ export interface ICustomSkeletonElementData {
3
+ fluid: boolean;
4
+ width: number;
5
+ height: number;
6
+ }
7
+ export interface ICustomSkeletonElement extends HTMLElement {
8
+ data: ICustomSkeletonElementData;
9
+ }
10
+ export interface ICreateSkeletonElementParams {
11
+ fluid: boolean;
12
+ spotType: RMN_SPOT_TYPE;
13
+ }
@@ -0,0 +1,2 @@
1
+ import type { ICustomSkeletonElementData } from './skeleton.interface';
2
+ export declare function SkeletonTemplate({ fluid, width, height }: ICustomSkeletonElementData): string;
@@ -1,5 +1,8 @@
1
+ import type { SpotDimensionsType } from 'modules/selection';
1
2
  export declare const SPOT_ELEMENT_TAG = "spot-element";
2
3
  export declare const CAROUSEL_ELEMENT_TAG = "spot-carousel-element";
4
+ export declare const SKELETON_ELEMENT_TAG = "spot-skeleton-element";
3
5
  export declare const GFONT_PRECONNECT = "\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n";
4
6
  export declare const GFONT_SOURCE_SANS_3 = "\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,200..900;1,200..900&display=swap\">\n";
5
7
  export declare const GFONT_CORMORANT = "\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Cormorant:ital,wght@0,300..700;1,300..700&family=Source+Sans+3:ital,wght@0,200..900;1,200..900&display=swap\">\n";
8
+ export declare const SPOT_DIMENSIONS: SpotDimensionsType;
@@ -1,4 +1,4 @@
1
- import type { RMN_SPOT_TYPE } from 'enums';
1
+ import type { RMN_FILTER_PROPERTIES, RMN_SPOT_TYPE } from 'enums';
2
2
  import type { ICarouselOptions, ICreateCarouselElementParams } from 'modules/element/component/carousel';
3
3
  import type { ICreateSpotElementParams } from 'modules/element/component/spot';
4
4
  import type { RmnFilterType } from 'modules/selection';
@@ -21,12 +21,15 @@ export interface IInjectSpotElementConfig {
21
21
  overlay?: ISpotOverlay;
22
22
  carousel?: ICarouselOptions;
23
23
  }
24
+ export type IInjectSpotElementFilterType = Partial<Omit<RmnFilterType, RMN_FILTER_PROPERTIES.KEYWORDS> & {
25
+ exactMatch?: string;
26
+ }>;
24
27
  export interface IInjectSpotElement {
25
28
  placementId: string;
26
29
  spotType: RMN_SPOT_TYPE | string;
27
30
  count?: number;
28
31
  config?: Omit<IInjectSpotElementConfig, 'url'>;
29
- filter?: Partial<RmnFilterType>;
32
+ filter?: IInjectSpotElementFilterType;
30
33
  }
31
34
  export interface ICreateElementConfig {
32
35
  spot?: RMN_SPOT_TYPE;
@@ -1,5 +1,6 @@
1
1
  import type { ISpot } from 'modules/selection';
2
2
  import type { ICreateCarouselElementParams } from './component/carousel';
3
+ import type { ICreateSkeletonElementParams } from './component/skeleton';
3
4
  import type { ICreateSpotElementParams } from './component/spot';
4
5
  import type { IElementService, ISpotColors } from './element.interface';
5
6
  export declare class ElementService implements IElementService {
@@ -24,6 +25,16 @@ export declare class ElementService implements IElementService {
24
25
  * @return {HTMLElement | null} - The html element or null if the browser environment is not available.
25
26
  */
26
27
  createCarouselElement({ slides, config, }: ICreateCarouselElementParams): HTMLElement | null;
28
+ /**
29
+ * Creates the skeleton html element based on the provided data using shadow dom.
30
+ *
31
+ * This method is only available in browser environments.
32
+ *
33
+ * @param {ICreateSkeletonElementParams} params - The parameters to create the final element.
34
+ *
35
+ * @return {HTMLElement | null} - The html element or null if the browser environment is not available.
36
+ */
37
+ createSkeletonElement(params: ICreateSkeletonElementParams): HTMLElement | null;
27
38
  /**
28
39
  * Overrides the spot colors with the provided colors.
29
40
  *
@@ -1,4 +1,5 @@
1
+ import type { RMN_SPOT_TYPE } from 'enums';
1
2
  import type { ISpotOverlay } from '../element.interface';
2
3
  export declare function convertHexToRgba(hex: string, opacity?: number): string;
3
4
  export declare function generateGradientColor(overlay?: ISpotOverlay, fallback?: string): string;
4
- export declare function spotHtmlStringToElement(htmlString: string): HTMLElement;
5
+ export declare function spotHtmlStringToElement(htmlString: string, spotType: RMN_SPOT_TYPE): HTMLElement;
@@ -1,5 +1,10 @@
1
- import type { RMN_SPOT_EVENT } from 'enums';
1
+ import type { RMN_EVENT, RMN_SPOT_EVENT } from 'enums';
2
2
  import type { ISpot } from '../selection';
3
+ export type ActiveSpotsType = Map<string, // spotId
4
+ {
5
+ placementId: string;
6
+ spotElement: HTMLElement;
7
+ }>;
3
8
  export interface IFireEventParams {
4
9
  event: RMN_SPOT_EVENT;
5
10
  eventUrl: string;
@@ -30,40 +35,14 @@ export interface ILifecycleState {
30
35
  state?: Partial<ILSState>;
31
36
  displayConfig?: Partial<ILSDisplayConfig>;
32
37
  }
33
- export interface IClickEvent {
34
- placementId: string;
35
- spotId: string;
36
- spotElement: HTMLElement;
37
- }
38
- export interface IImpressionEvent {
39
- placementId: string;
40
- spotId: string;
41
- spotElement: HTMLElement;
42
- }
43
- export interface IAddToCartEvent {
44
- placementId: string;
45
- spotId: string;
46
- }
47
- export interface IAddToWishlistEvent {
48
- placementId: string;
49
- spotId: string;
50
- }
51
- export interface IPurchaseEvent {
52
- placementId: string;
53
- spotId: string;
54
- }
55
- export interface IBuyNowEvent {
38
+ export interface IRmnSpotEvent {
39
+ eventType: RMN_SPOT_EVENT;
56
40
  placementId: string;
57
41
  spotId: string;
58
42
  }
59
- export interface IEventMap {
60
- [RMN_SPOT_EVENT.LIFECYCLE_STATE]: ILifecycleState;
61
- [RMN_SPOT_EVENT.CLICK]: IClickEvent;
62
- [RMN_SPOT_EVENT.IMPRESSION]: IImpressionEvent;
63
- [RMN_SPOT_EVENT.ADD_TO_CART]: IAddToCartEvent;
64
- [RMN_SPOT_EVENT.ADD_TO_WISHLIST]: IAddToWishlistEvent;
65
- [RMN_SPOT_EVENT.PURCHASE]: IPurchaseEvent;
66
- [RMN_SPOT_EVENT.BUY_NOW]: IBuyNowEvent;
43
+ export interface IRmnEventMap {
44
+ [RMN_EVENT.LIFECYCLE_STATE]: ILifecycleState;
45
+ [RMN_EVENT.SPOT_EVENT]: IRmnSpotEvent;
67
46
  }
68
47
  export interface IRegisterSpotParams {
69
48
  placementId: string;
@@ -1,16 +1,16 @@
1
- import { RMN_SPOT_EVENT } from 'enums';
2
- import type { IEventMap, ILifecycleState, IRegisterSpotParams } from './event.interface';
1
+ import { RMN_EVENT } from 'enums';
2
+ import type { ILifecycleState, IRegisterSpotParams, IRmnEventMap } from './event.interface';
3
3
  export declare class EventService {
4
4
  private static instance;
5
- private pubSub;
6
- private localStorage;
5
+ private pubSubService;
6
+ private localStorageService;
7
7
  private intersectionObserver;
8
8
  private spotStates;
9
- private activeSpots;
9
+ private readonly activeSpots;
10
10
  private constructor();
11
11
  static getInstance(): EventService;
12
- subscribe(eventType: RMN_SPOT_EVENT, callback: (data: IEventMap[RMN_SPOT_EVENT]) => void): () => void;
13
- publish(eventType: RMN_SPOT_EVENT, data: IEventMap[RMN_SPOT_EVENT]): void;
12
+ subscribe(eventType: RMN_EVENT, callback: (data: IRmnEventMap[RMN_EVENT]) => void): () => void;
13
+ publish(eventType: RMN_EVENT, data: IRmnEventMap[RMN_EVENT]): void;
14
14
  registerSpot(params: IRegisterSpotParams): void;
15
15
  unregisterSpot(placementId: string): void;
16
16
  /**
@@ -23,25 +23,9 @@ export declare class EventService {
23
23
  * @returns {void}
24
24
  */
25
25
  handleSpotState(placementId: string, updates: Partial<ILifecycleState>, publish?: boolean): void;
26
- private handleClick;
26
+ private handleClickEvent;
27
+ private handleImpressionEvent;
28
+ private getSpotIdByPlacementId;
29
+ private deepMerge;
27
30
  private handleIntersectionObserver;
28
- private fireImpressionEvent;
29
- /**
30
- * Fires an event using the navigator.sendBeacon method or a fallback method if sendBeacon is not available.
31
- * If the event is a click event and a redirect URL is found, it redirects the user to that URL.
32
- *
33
- * @param {IFireEventParams} params - The parameters for firing the event.
34
- * @param {RMN_SPOT_EVENT} params.event - The event type.
35
- * @param {string} params.eventUrl - The URL to which the event is sent.
36
- * @returns {Promise<void>} - A promise that resolves when the event is fired.
37
- */
38
- private fireEvent;
39
- private fallbackEventFire;
40
- /**
41
- * Extracts and decodes a URL from a base64-encoded query parameter.
42
- *
43
- * @param {string} url - The URL containing the base64-encoded query parameter.
44
- * @returns {string | null} - The decoded URL or null if not found or invalid.
45
- */
46
- private getRedirectUrlFromPayload;
47
31
  }
@@ -1,4 +1,3 @@
1
1
  export * from './event.constant';
2
2
  export * from './event.interface';
3
3
  export * from './event.service';
4
- export * from './helpers';
@@ -1,3 +1,4 @@
1
1
  export * from './intersection.service';
2
2
  export * from './localstorage.service';
3
+ export * from './pubsub.service';
3
4
  export * from './resize.service';
@@ -1,6 +1,6 @@
1
1
  export declare class IntersectionObserverService {
2
2
  private observers;
3
- private defaultOptions;
3
+ private readonly defaultOptions;
4
4
  constructor(defaultOptions?: IntersectionObserverInit);
5
5
  observe(element: HTMLElement, callback: (entry: IntersectionObserverEntry) => void, options?: IntersectionObserverInit): void;
6
6
  unobserve(element: HTMLElement): void;
@@ -0,0 +1,77 @@
1
+ import type { RMN_SPOT_TYPE } from 'enums';
2
+ import type { ISpotEvent } from 'modules/selection';
3
+ export interface ILocalStorageSpot {
4
+ placementId: string;
5
+ spotId: string;
6
+ spotType: RMN_SPOT_TYPE;
7
+ events: ISpotEvent[];
8
+ productIds: Array<string | number>;
9
+ createdAt?: number;
10
+ }
11
+ export type LocalStorageSpotsMapType = Map<string, // spotId
12
+ ILocalStorageSpot>;
13
+ export type LocalStorageSpotsObjectType = Record<string, // spotId
14
+ ILocalStorageSpot>;
15
+ export type LocalStorageSpotArray = [
16
+ string,
17
+ string,
18
+ RMN_SPOT_TYPE,
19
+ string[],
20
+ Array<string | number>,
21
+ // PRODUCT_IDS = 4
22
+ number | undefined
23
+ ];
24
+ export declare enum ENUM_LOCAL_STORAGE_SPOT_ARRAY_INDEX {
25
+ PLACEMENT_ID = 0,
26
+ SPOT_ID = 1,
27
+ SPOT_TYPE = 2,
28
+ EVENTS = 3,
29
+ PRODUCT_IDS = 4,
30
+ CREATED_AT = 5
31
+ }
32
+ export declare const LOCAL_STORAGE_SPOT_EVENTS_ARRAY_INDEX: {
33
+ readonly IMPRESSION: 0;
34
+ readonly CLICK: 1;
35
+ readonly PURCHASE: 2;
36
+ readonly ADD_TO_CART: 3;
37
+ readonly REMOVE_FROM_CART: 4;
38
+ readonly ADD_TO_CART_FROM_DETAILS: 5;
39
+ readonly ADD_TO_WISHLIST: 6;
40
+ readonly EXPAND_PRODUCT: 7;
41
+ readonly BUY_NOW: 8;
42
+ };
43
+ export type LocalStorageSpotsArrayType = Record<string, // spotId
44
+ LocalStorageSpotArray>;
45
+ export declare class LocalStorageService {
46
+ private spots?;
47
+ private static instance;
48
+ private static readonly localStorageKeyPrefix;
49
+ private static localStorageKey;
50
+ private static readonly spotExpirationTime;
51
+ private static readonly encryptData;
52
+ private constructor();
53
+ static getInstance(): LocalStorageService;
54
+ private syncLocalStorage;
55
+ setSpot(spotId: string, data: ILocalStorageSpot): void;
56
+ removeSpot(spotId: string): void;
57
+ getSpot(spotId: string): ILocalStorageSpot | undefined;
58
+ getSpots(): LocalStorageSpotsObjectType | undefined;
59
+ private updateLocalStorage;
60
+ private clearLocalStorage;
61
+ private removeExpiredSpots;
62
+ getUserId(): string;
63
+ /**
64
+ * Sets the user ID in the local storage.
65
+ * If no existing key is found,
66
+ * it generates a new unique ID and sets it as the local storage key.
67
+ */
68
+ setUserId(): void;
69
+ private mapToObject;
70
+ private objectToMap;
71
+ private spotEventObjectToArray;
72
+ private spotEventArrayToObject;
73
+ private spotObjectToArray;
74
+ private spotArrayToObject;
75
+ private encryptData;
76
+ private decryptData;
77
+ }
@@ -8,13 +8,13 @@ export type PubSubCallback<T> = (data: T) => void;
8
8
  */
9
9
  export type PubSubUnsubscribe = () => void;
10
10
  /**
11
- * PubSub class
11
+ * PubsubService class
12
12
  * Manages event subscriptions and publications
13
- * @template IEventMap A record type defining the structure of events and their data
13
+ * @template IRmnEventMap A record type defining the structure of events and their data
14
14
  */
15
- export declare class PubSub<IEventMap> {
15
+ export declare class PubsubService<IRmnEventMap> {
16
16
  private static instance;
17
- static getInstance<IEventMap>(): PubSub<IEventMap>;
17
+ static getInstance<IRmnEventMap>(): PubsubService<IRmnEventMap>;
18
18
  /**
19
19
  * Object to store subscribers for each event type
20
20
  */
@@ -30,7 +30,7 @@ export declare class PubSub<IEventMap> {
30
30
  * console.log(`User ${data.username} logged in`);
31
31
  * });
32
32
  */
33
- subscribe<K extends keyof IEventMap>(eventType: K, callback: PubSubCallback<IEventMap[K]>): PubSubUnsubscribe;
33
+ subscribe<K extends keyof IRmnEventMap>(eventType: K, callback: PubSubCallback<IRmnEventMap[K]>): PubSubUnsubscribe;
34
34
  /**
35
35
  * Publish an event
36
36
  * @param eventType - The type of event to publish
@@ -39,17 +39,17 @@ export declare class PubSub<IEventMap> {
39
39
  * @Example:
40
40
  * pubSub.publish('userLogin', { username: 'john_doe', timestamp: Date.now() });
41
41
  */
42
- publish<K extends keyof IEventMap>(eventType: K, data: IEventMap[K]): void;
42
+ publish<K extends keyof IRmnEventMap>(eventType: K, data: IRmnEventMap[K]): void;
43
43
  }
44
44
  /**
45
45
  * Usage Example:
46
46
  *
47
- * interface IEventMap {
47
+ * interface IRmnEventMap {
48
48
  * userLogin: { username: string; timestamp: number };
49
49
  * pageView: { url: string; timestamp: number };
50
50
  * }
51
51
  *
52
- * const pubSub = new PubSub<IEventMap>();
52
+ * const pubSub = new PubsubService<IRmnEventMap>();
53
53
  *
54
54
  * // Subscribe to events
55
55
  * const unsubscribeLogin = pubSub.subscribe('userLogin', (data) => {
@@ -18,7 +18,7 @@ export interface ISizeChangedEvent extends CustomEvent {
18
18
  }
19
19
  export declare class ResizeObserverService {
20
20
  private element;
21
- private container;
21
+ private readonly container;
22
22
  private resizeObserver;
23
23
  private maxSize;
24
24
  private minSize;
@@ -0,0 +1,2 @@
1
+ export * from './monitor.interface';
2
+ export * from './monitor.service';
@@ -0,0 +1,4 @@
1
+ export declare enum AnalyticsTool {
2
+ GoogleAnalytics = "google-analytics",
3
+ Other = "Other"
4
+ }
@@ -0,0 +1,16 @@
1
+ import type { RMN_SPOT_EVENT } from 'enums';
2
+ export interface IDataLayerEvent {
3
+ event: string;
4
+ [key: string]: any;
5
+ }
6
+ export interface INormalizedEventData {
7
+ event: RMN_SPOT_EVENT;
8
+ productIds: Array<string | number>;
9
+ productPrice?: number;
10
+ }
11
+ export interface IFireAndPublishSpotEventParams {
12
+ spotEvent: RMN_SPOT_EVENT;
13
+ eventUrl: string;
14
+ placementId: string;
15
+ spotId: string;
16
+ }
@@ -0,0 +1,12 @@
1
+ export declare class MonitorService {
2
+ private static instance;
3
+ private readonly implementedMonitor?;
4
+ private readonly pubSubService?;
5
+ private readonly localStorageService?;
6
+ private constructor();
7
+ static getInstance(): MonitorService;
8
+ start(): void;
9
+ private matchAndFireEvent;
10
+ private fireAndPublishSpotEvent;
11
+ private detectAnalyticsTool;
12
+ }
@@ -0,0 +1,12 @@
1
+ import type { INormalizedEventData } from '../monitor.interface';
2
+ export declare class DataLayerMonitor {
3
+ private static instance;
4
+ private readonly originalPush;
5
+ private listener?;
6
+ private constructor();
7
+ static getInstance(): DataLayerMonitor;
8
+ setListener(listener: (data: INormalizedEventData) => void): void;
9
+ start(): void;
10
+ private cleanEventData;
11
+ stop(): void;
12
+ }
@@ -2,14 +2,20 @@ import type { RMN_SPOT_EVENT, RMN_SPOT_TYPE } from 'enums';
2
2
  import type { PlacementIdType, SpotVariantType } from 'modules/selection';
3
3
  import type { RmnFilterType, RmnSpotType } from 'types';
4
4
  export interface ISpotSelectionParams {
5
- url?: string;
6
5
  spots: RmnSpotType[];
7
6
  filter?: Partial<RmnFilterType>;
7
+ userId?: string;
8
+ url?: string;
8
9
  }
9
10
  export interface ISpotEvent {
10
11
  event: RMN_SPOT_EVENT;
11
12
  url: string;
12
13
  }
14
+ export interface ISpotEventPayload {
15
+ e: number;
16
+ u: string;
17
+ ss: string;
18
+ }
13
19
  export interface ISpot {
14
20
  id: string;
15
21
  events: ISpotEvent[];
@@ -30,7 +36,9 @@ export interface ISpot {
30
36
  mobilePrimaryImage?: string;
31
37
  mobileSecondaryImage?: string;
32
38
  productIds?: Array<string | number>;
33
- productUpcs?: string[];
39
+ rbProductUpcs?: Array<string | number>;
40
+ rbProductSalsifyGroupings?: Array<string | number>;
41
+ rbProductSalsifyPids?: Array<string | number>;
34
42
  }
35
43
  export type ISpots = Record<PlacementIdType, ISpot[]>;
36
44
  export interface ISelectionService {
@@ -15,4 +15,5 @@ export declare class SelectionService extends BaseApi implements ISelectionServi
15
15
  spotSelection(data: ISpotSelectionParams): Promise<ISpots | {
16
16
  error: string;
17
17
  }>;
18
+ private getUserId;
18
19
  }
@@ -2,10 +2,16 @@ import type { IAuthCredentials } from 'modules/auth';
2
2
  import type { IInjectSpotElementParams, IRmnCreateSpotElementConfig } from 'modules/element';
3
3
  import type { ISpot, ISpots, ISpotSelectionParams } from 'modules/selection';
4
4
  import type { IRmnClient, IRmnConfig, IRmnEventManager } from 'types';
5
+ /**
6
+ * LiquidCommerce Rmn Client
7
+ *
8
+ * @class
9
+ */
5
10
  export declare class LiquidCommerceRmnClient implements IRmnClient {
6
11
  private readonly selectionService;
7
12
  private readonly elementService;
8
13
  private readonly eventService;
14
+ private intersectionObserver;
9
15
  constructor(auth: IAuthCredentials);
10
16
  /**
11
17
  * Makes a selection request on our server based on the provided data.
@@ -14,7 +20,7 @@ export declare class LiquidCommerceRmnClient implements IRmnClient {
14
20
  *
15
21
  * @param {ISpotSelectionParams} params - Spots selection parameters.
16
22
  *
17
- * @return {Promise<ISpots | {error : string}>} - The spots response object.
23
+ * @return {Promise<ISpots | { error : string }>} - The spots response object.
18
24
  */
19
25
  spotSelection(params: ISpotSelectionParams): Promise<ISpots | {
20
26
  error: string;
@@ -28,47 +34,33 @@ export declare class LiquidCommerceRmnClient implements IRmnClient {
28
34
  */
29
35
  injectSpotElement(params: IInjectSpotElementParams): Promise<void>;
30
36
  /**
31
- * Makes a selection request on our server based on the provided data.
32
- *
33
- * @param {IInjectSpotElementParams} params - Parameters for injecting spot elements.
34
- *
35
- * @return {Promise<ISpots | {error: string}>} - The spots response object.
36
- */
37
- private spotSelectionRequest;
38
- /**
39
- * Injects a carousel element with the provided spots into the placement.
37
+ * Injects a single spot element into the provided placement.
40
38
  *
41
39
  * @param {HTMLElement} placement - The placement element.
42
- * @param {ISpot[]} spots - The spot data.
40
+ * @param {ISpot} spot - The spot data.
43
41
  * @param {IInjectSpotElementConfig} config - The configuration object.
44
42
  *
45
43
  * @return {void}
46
44
  */
47
- private injectCarouselSpotElement;
45
+ private injectOneSpotElement;
48
46
  /**
49
- * Injects a single spot element into the provided placement.
47
+ * Injects a carousel element with the provided spots into the placement.
50
48
  *
51
- * @param {IInjectSpotElement} injectItem - The inject item data.
52
49
  * @param {HTMLElement} placement - The placement element.
53
- * @param {ISpot} spot - The spot data.
50
+ * @param {ISpot[]} spots - The spot data.
54
51
  * @param {IInjectSpotElementConfig} config - The configuration object.
55
52
  *
56
53
  * @return {void}
57
54
  */
58
- private injectOneSpotElement;
55
+ private injectCarouselSpotElement;
59
56
  /**
60
- * Prevents duplicate placement ids in the inject data.
61
- *
62
- * @param {IInjectSpotElement[]} inject - The inject data.
57
+ * Makes a selection request on our server based on the provided data.
63
58
  *
64
- * @throws {Error} - If a duplicate placement id is found.
59
+ * @param {IInjectSpotElementParams} params - Parameters for injecting spot elements.
65
60
  *
66
- * @return {void}
61
+ * @return {Promise<ISpots | {error: string}>} - The spots response object.
67
62
  */
68
- private preventDuplicateSpotPlacementIds;
69
- private preventNonExistentSpotTypes;
70
- private updateSpotsState;
71
- private useSpotSelectionExample;
63
+ private injectSpotSelectionRequest;
72
64
  }
73
65
  /**
74
66
  * Creates a new instance of the RmnClient.