@liquidcommercedev/rmn-sdk 1.4.6-beta.8 → 1.5.0-beta.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.cjs +620 -121
- package/dist/index.esm.js +620 -122
- package/dist/types/common/helpers/uuid.helper.d.ts +49 -0
- package/dist/types/index.umd.d.ts +2 -2
- package/dist/types/modules/element/component/carousel/carousel.interface.d.ts +4 -0
- package/dist/types/modules/element/element.interface.d.ts +4 -3
- package/dist/types/modules/element/template/helper.d.ts +2 -1
- package/dist/types/modules/element/template/template.type.d.ts +1 -1
- package/dist/types/modules/event/event.interface.d.ts +5 -5
- package/dist/types/modules/event/event.service.d.ts +14 -2
- package/dist/types/modules/event/helpers/index.d.ts +1 -0
- package/dist/types/modules/event/helpers/localstorage.service.d.ts +26 -0
- package/dist/types/modules/event/pubsub.d.ts +5 -3
- package/dist/types/modules/selection/selection.interface.d.ts +1 -0
- package/dist/types/rmn-client.d.ts +9 -13
- package/dist/types/static.constant.d.ts +1 -0
- package/dist/types/types.d.ts +5 -4
- package/package.json +1 -1
- package/umd/liquidcommerce-rmn-sdk.min.js +1 -1
@@ -0,0 +1,49 @@
|
|
1
|
+
export declare class UniqueIdGenerator {
|
2
|
+
private static readonly epoch;
|
3
|
+
private static readonly nodeBits;
|
4
|
+
private static readonly sequenceBits;
|
5
|
+
private static lastTimestamp;
|
6
|
+
private static sequence;
|
7
|
+
private static nodeId;
|
8
|
+
private static readonly base32Chars;
|
9
|
+
/**
|
10
|
+
* Initialize the generator with a node ID
|
11
|
+
* @param nodeId Number between 0-1023 to identify this instance
|
12
|
+
*/
|
13
|
+
static initialize(nodeId?: number): void;
|
14
|
+
/**
|
15
|
+
* Convert a number to base32 string with specified length
|
16
|
+
*/
|
17
|
+
private static toBase32;
|
18
|
+
/**
|
19
|
+
* Generate a cryptographically secure random number
|
20
|
+
*/
|
21
|
+
private static getSecureRandom;
|
22
|
+
/**
|
23
|
+
* Wait until next millisecond
|
24
|
+
*/
|
25
|
+
private static waitNextMillis;
|
26
|
+
/**
|
27
|
+
* Generates a highly unique ID with the following format:
|
28
|
+
* TTTTTTTTTTCCCCNNNNNRRRR
|
29
|
+
* T: Timestamp (10 chars)
|
30
|
+
* C: Counter (4 chars)
|
31
|
+
* N: Node ID (5 chars)
|
32
|
+
* R: Random (4 chars)
|
33
|
+
*
|
34
|
+
* Total length: 23 characters, always uppercase alphanumeric
|
35
|
+
*/
|
36
|
+
static generate(): string;
|
37
|
+
/**
|
38
|
+
* Validates if a string matches the expected ID format
|
39
|
+
*/
|
40
|
+
static isValid(id: string): boolean;
|
41
|
+
/**
|
42
|
+
* Decode base32 string to number
|
43
|
+
*/
|
44
|
+
private static decodeBase32;
|
45
|
+
/**
|
46
|
+
* Extract timestamp from ID
|
47
|
+
*/
|
48
|
+
static getTimestamp(id: string): Date;
|
49
|
+
}
|
@@ -1,2 +1,2 @@
|
|
1
|
-
import { RmnClient, RmnCreateSpotElement } from './index';
|
2
|
-
export { RmnClient, RmnCreateSpotElement };
|
1
|
+
import { RmnClient, RmnCreateSpotElement, RmnEventManager } from './index';
|
2
|
+
export { RmnClient, RmnCreateSpotElement, RmnEventManager };
|
@@ -4,6 +4,8 @@ export interface ICarouselDotOptions {
|
|
4
4
|
position: CarouselNavPositionType;
|
5
5
|
color: string;
|
6
6
|
activeColor: string;
|
7
|
+
size: 'small' | 'base' | 'large';
|
8
|
+
opacity: number;
|
7
9
|
}
|
8
10
|
export interface ICarouselButtonOptions {
|
9
11
|
position: CarouselNavPositionType;
|
@@ -11,6 +13,8 @@ export interface ICarouselButtonOptions {
|
|
11
13
|
textColor: string;
|
12
14
|
backgroundColor: string;
|
13
15
|
borderRadius: string;
|
16
|
+
size: 'small' | 'base' | 'large';
|
17
|
+
opacity: number;
|
14
18
|
prev: string;
|
15
19
|
next: string;
|
16
20
|
}
|
@@ -9,15 +9,16 @@ export interface ISpotColors {
|
|
9
9
|
ctaBorderColor?: string;
|
10
10
|
}
|
11
11
|
export interface ISpotOverlay {
|
12
|
+
size: 'small' | 'base' | 'large';
|
12
13
|
color: string;
|
13
|
-
|
14
|
+
opacity: 'light' | 'medium' | 'dark';
|
14
15
|
}
|
15
16
|
export interface IInjectSpotElementConfig {
|
16
17
|
fluid?: boolean;
|
17
18
|
url?: string;
|
18
19
|
colors?: ISpotColors;
|
19
20
|
minScale?: number;
|
20
|
-
overlay?: ISpotOverlay
|
21
|
+
overlay?: ISpotOverlay;
|
21
22
|
carousel?: ICarouselOptions;
|
22
23
|
}
|
23
24
|
export interface IInjectSpotElement {
|
@@ -46,6 +47,6 @@ export interface IElementService {
|
|
46
47
|
export interface IRmnCreateSpotElementConfig {
|
47
48
|
fluid?: boolean;
|
48
49
|
colors?: ISpotColors;
|
49
|
-
overlay?: ISpotOverlay
|
50
|
+
overlay?: ISpotOverlay;
|
50
51
|
minScale?: number;
|
51
52
|
}
|
@@ -1,3 +1,4 @@
|
|
1
1
|
import type { ISpotOverlay } from '../element.interface';
|
2
|
-
export declare function
|
2
|
+
export declare function convertHexToRgba(hex: string, opacity?: number): string;
|
3
|
+
export declare function generateGradientColor(overlay?: ISpotOverlay, fallback?: string): string;
|
3
4
|
export declare function spotHtmlStringToElement(htmlString: string): HTMLElement;
|
@@ -3,7 +3,7 @@ import type { SpotVariantType } from 'modules/selection';
|
|
3
3
|
import type { ISpot } from 'types';
|
4
4
|
import type { ISpotOverlay } from '../element.interface';
|
5
5
|
export interface ISpotTemplateConfig {
|
6
|
-
overlay?: ISpotOverlay
|
6
|
+
overlay?: ISpotOverlay;
|
7
7
|
prefix?: string;
|
8
8
|
}
|
9
9
|
export type TemplateFunction = (spot: ISpot, config: ISpotTemplateConfig) => string;
|
@@ -10,8 +10,8 @@ export interface ILSIdentifier {
|
|
10
10
|
spotType: string;
|
11
11
|
}
|
12
12
|
export interface ILSDom {
|
13
|
-
|
14
|
-
|
13
|
+
visibleOnViewport: boolean;
|
14
|
+
spotElement?: HTMLElement;
|
15
15
|
}
|
16
16
|
export interface ILSState {
|
17
17
|
mounted: boolean;
|
@@ -33,12 +33,12 @@ export interface ILifecycleState {
|
|
33
33
|
export interface IClickEvent {
|
34
34
|
placementId: string;
|
35
35
|
spotId: string;
|
36
|
-
|
36
|
+
spotElement: HTMLElement;
|
37
37
|
}
|
38
38
|
export interface IImpressionEvent {
|
39
39
|
placementId: string;
|
40
40
|
spotId: string;
|
41
|
-
|
41
|
+
spotElement: HTMLElement;
|
42
42
|
}
|
43
43
|
export interface IAddToCartEvent {
|
44
44
|
placementId: string;
|
@@ -67,6 +67,6 @@ export interface IEventMap {
|
|
67
67
|
}
|
68
68
|
export interface IRegisterSpotParams {
|
69
69
|
placementId: string;
|
70
|
-
|
70
|
+
spotElement: HTMLElement;
|
71
71
|
spot: ISpot;
|
72
72
|
}
|
@@ -3,6 +3,7 @@ import type { IEventMap, ILifecycleState, IRegisterSpotParams } from './event.in
|
|
3
3
|
export declare class EventService {
|
4
4
|
private static instance;
|
5
5
|
private pubSub;
|
6
|
+
private localStorage;
|
6
7
|
private intersectionObserver;
|
7
8
|
private spotStates;
|
8
9
|
private activeSpots;
|
@@ -10,10 +11,21 @@ export declare class EventService {
|
|
10
11
|
static getInstance(): EventService;
|
11
12
|
subscribe(eventType: RMN_SPOT_EVENT, callback: (data: IEventMap[RMN_SPOT_EVENT]) => void): () => void;
|
12
13
|
publish(eventType: RMN_SPOT_EVENT, data: IEventMap[RMN_SPOT_EVENT]): void;
|
14
|
+
registerSpot(params: IRegisterSpotParams): void;
|
15
|
+
unregisterSpot(placementId: string): void;
|
16
|
+
/**
|
17
|
+
* Updates the state of a spot.
|
18
|
+
*
|
19
|
+
* @param {string} placementId - The placement ID of the spot.
|
20
|
+
* @param {Partial<ILifecycleState>} updates - The updates to apply to the spot state.
|
21
|
+
* @param {boolean} publish - Whether to publish the updated state.
|
22
|
+
*
|
23
|
+
* @returns {void}
|
24
|
+
*/
|
13
25
|
handleSpotState(placementId: string, updates: Partial<ILifecycleState>, publish?: boolean): void;
|
14
|
-
|
15
|
-
unregisterSpot(spotId: string): void;
|
26
|
+
private handleClick;
|
16
27
|
private handleIntersectionObserver;
|
28
|
+
private fireImpressionEvent;
|
17
29
|
/**
|
18
30
|
* Fires an event using the navigator.sendBeacon method and redirects the user if the event is a click event.
|
19
31
|
*
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import type { RMN_SPOT_TYPE } from 'enums';
|
2
|
+
import type { ISpotEvent } from 'modules/selection';
|
3
|
+
export interface ILocalStorageSpot {
|
4
|
+
spotId: string;
|
5
|
+
spotType: RMN_SPOT_TYPE;
|
6
|
+
events: ISpotEvent[];
|
7
|
+
productIds: Array<string | number>;
|
8
|
+
createdAt?: number;
|
9
|
+
}
|
10
|
+
export declare class LocalStorage {
|
11
|
+
private spots;
|
12
|
+
private static instance;
|
13
|
+
private static readonly localStorageKey;
|
14
|
+
private static readonly spotExpirationTime;
|
15
|
+
private constructor();
|
16
|
+
static getInstance(): LocalStorage;
|
17
|
+
private syncLocalStorage;
|
18
|
+
setSpot(spotId: string, data: ILocalStorageSpot): void;
|
19
|
+
getSpot(spotId: string): ILocalStorageSpot | undefined;
|
20
|
+
removeSpot(spotId: string): void;
|
21
|
+
private updateLocalStorage;
|
22
|
+
clearLocalStorage(): void;
|
23
|
+
private removeExpiredSpots;
|
24
|
+
private mapToObj;
|
25
|
+
private objToMap;
|
26
|
+
}
|
@@ -2,17 +2,19 @@
|
|
2
2
|
* Callback function type for event subscribers
|
3
3
|
* @template T The type of data the callback receives
|
4
4
|
*/
|
5
|
-
export type
|
5
|
+
export type PubSubCallback<T> = (data: T) => void;
|
6
6
|
/**
|
7
7
|
* Function type for unsubscribing from an event
|
8
8
|
*/
|
9
|
-
export type
|
9
|
+
export type PubSubUnsubscribe = () => void;
|
10
10
|
/**
|
11
11
|
* PubSub class
|
12
12
|
* Manages event subscriptions and publications
|
13
13
|
* @template IEventMap A record type defining the structure of events and their data
|
14
14
|
*/
|
15
15
|
export declare class PubSub<IEventMap> {
|
16
|
+
private static instance;
|
17
|
+
static getInstance<IEventMap>(): PubSub<IEventMap>;
|
16
18
|
/**
|
17
19
|
* Object to store subscribers for each event type
|
18
20
|
*/
|
@@ -28,7 +30,7 @@ export declare class PubSub<IEventMap> {
|
|
28
30
|
* console.log(`User ${data.username} logged in`);
|
29
31
|
* });
|
30
32
|
*/
|
31
|
-
subscribe<K extends keyof IEventMap>(eventType: K, callback:
|
33
|
+
subscribe<K extends keyof IEventMap>(eventType: K, callback: PubSubCallback<IEventMap[K]>): PubSubUnsubscribe;
|
32
34
|
/**
|
33
35
|
* Publish an event
|
34
36
|
* @param eventType - The type of event to publish
|
@@ -1,9 +1,7 @@
|
|
1
1
|
import type { IAuthCredentials } from 'modules/auth';
|
2
2
|
import type { IInjectSpotElementParams, IRmnCreateSpotElementConfig } from 'modules/element';
|
3
|
-
import { type IEventMap } from 'modules/event';
|
4
3
|
import type { ISpot, ISpots, ISpotSelectionParams } from 'modules/selection';
|
5
|
-
import type { IRmnClient, IRmnConfig } from 'types';
|
6
|
-
import type { RMN_SPOT_EVENT } from './enums';
|
4
|
+
import type { IRmnClient, IRmnConfig, IRmnEventManager } from 'types';
|
7
5
|
export declare class LiquidCommerceRmnClient implements IRmnClient {
|
8
6
|
private readonly selectionService;
|
9
7
|
private readonly elementService;
|
@@ -29,15 +27,6 @@ export declare class LiquidCommerceRmnClient implements IRmnClient {
|
|
29
27
|
* @return {Promise<void>} - A promise that resolves when the spot elements are injected.
|
30
28
|
*/
|
31
29
|
injectSpotElement(params: IInjectSpotElementParams): Promise<void>;
|
32
|
-
/**
|
33
|
-
* Returns the event manager instance.
|
34
|
-
*
|
35
|
-
* @return {EventService} - The event manager instance.
|
36
|
-
*/
|
37
|
-
eventManager: {
|
38
|
-
subscribe: (eventType: RMN_SPOT_EVENT, callback: (data: IEventMap[RMN_SPOT_EVENT]) => void) => (() => void);
|
39
|
-
publish: (eventType: RMN_SPOT_EVENT, data: IEventMap[RMN_SPOT_EVENT]) => void;
|
40
|
-
};
|
41
30
|
/**
|
42
31
|
* Makes a selection request on our server based on the provided data.
|
43
32
|
*
|
@@ -79,6 +68,7 @@ export declare class LiquidCommerceRmnClient implements IRmnClient {
|
|
79
68
|
private preventDuplicateSpotPlacementIds;
|
80
69
|
private preventNonExistentSpotTypes;
|
81
70
|
private updateSpotsState;
|
71
|
+
private useSpotSelectionExample;
|
82
72
|
}
|
83
73
|
/**
|
84
74
|
* Creates a new instance of the RmnClient.
|
@@ -89,6 +79,12 @@ export declare class LiquidCommerceRmnClient implements IRmnClient {
|
|
89
79
|
* @return {Promise<IRmnClient>} - The RmnClient instance.
|
90
80
|
*/
|
91
81
|
declare function RmnClient(apiKey: string, config: IRmnConfig): Promise<IRmnClient>;
|
82
|
+
/**
|
83
|
+
* Creates a new instance of the RmnEventManager.
|
84
|
+
*
|
85
|
+
* @return {IRmnEventManager} - The RmnEventManager instance.
|
86
|
+
*/
|
87
|
+
declare function RmnEventManager(): IRmnEventManager;
|
92
88
|
/**
|
93
89
|
* Creates the spot html element based on the provided data using shadow dom.
|
94
90
|
*
|
@@ -102,4 +98,4 @@ declare function RmnClient(apiKey: string, config: IRmnConfig): Promise<IRmnClie
|
|
102
98
|
* @return {HTMLElement | null} - The spot html element or null if the browser environment is not available.
|
103
99
|
*/
|
104
100
|
declare function RmnCreateSpotElement(spot: ISpot, config?: IRmnCreateSpotElementConfig): HTMLElement | null;
|
105
|
-
export { RmnClient, RmnCreateSpotElement };
|
101
|
+
export { RmnClient, RmnCreateSpotElement, RmnEventManager };
|
package/dist/types/types.d.ts
CHANGED
@@ -11,10 +11,11 @@ export interface IRmnClient {
|
|
11
11
|
error: string;
|
12
12
|
}>;
|
13
13
|
injectSpotElement(params: IInjectSpotElementParams): Promise<void>;
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
}
|
15
|
+
export interface IRmnEventManager {
|
16
|
+
subscribe: (eventType: RMN_SPOT_EVENT, callback: (data: IEventMap[RMN_SPOT_EVENT]) => void) => () => void;
|
17
|
+
publish: (eventType: RMN_SPOT_EVENT, data: IEventMap[RMN_SPOT_EVENT]) => void;
|
18
|
+
destroySpot: (placementId: string) => void;
|
18
19
|
}
|
19
20
|
export interface IRmnConfig {
|
20
21
|
env: RMN_ENV;
|
package/package.json
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
"name": "@liquidcommercedev/rmn-sdk",
|
3
3
|
"description": "LiquidCommerce RMN SDK",
|
4
4
|
"author": "LiquidCommerce Tech",
|
5
|
-
"version": "1.
|
5
|
+
"version": "1.5.0-beta.1",
|
6
6
|
"homepage": "https://docs.liquidcommerce.co/rmn-sdk",
|
7
7
|
"main": "./dist/index.cjs",
|
8
8
|
"module": "./dist/index.esm.js",
|