@liquidcommercedev/rmn-sdk 1.5.0-beta.1 → 1.5.0-beta.2
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/dist/index.cjs
CHANGED
@@ -18196,7 +18196,8 @@ class EventService {
|
|
18196
18196
|
})();
|
18197
18197
|
}
|
18198
18198
|
/**
|
18199
|
-
* Fires an event using the navigator.sendBeacon method
|
18199
|
+
* Fires an event using the navigator.sendBeacon method or a fallback method if sendBeacon is not available.
|
18200
|
+
* If the event is a click event and a redirect URL is found, it redirects the user to that URL.
|
18200
18201
|
*
|
18201
18202
|
* @param {IFireEventParams} params - The parameters for firing the event.
|
18202
18203
|
* @param {RMN_SPOT_EVENT} params.event - The event type.
|
@@ -18204,26 +18205,65 @@ class EventService {
|
|
18204
18205
|
* @returns {Promise<void>} - A promise that resolves when the event is fired.
|
18205
18206
|
*/
|
18206
18207
|
async fireEvent({ event, eventUrl }) {
|
18207
|
-
|
18208
|
-
|
18209
|
-
|
18208
|
+
var _a;
|
18209
|
+
try {
|
18210
|
+
const didFireEvent = ((_a = navigator === null || navigator === void 0 ? void 0 : navigator.sendBeacon) === null || _a === void 0 ? void 0 : _a.call(navigator, eventUrl)) || (await this.fallbackEventFire(eventUrl));
|
18211
|
+
if (!didFireEvent) {
|
18212
|
+
return;
|
18213
|
+
}
|
18214
|
+
if (event === exports.RMN_SPOT_EVENT.CLICK) {
|
18215
|
+
const redirectUrl = this.getRedirectUrlFromPayload(eventUrl);
|
18216
|
+
if (redirectUrl) {
|
18217
|
+
window.location.href = redirectUrl;
|
18218
|
+
}
|
18219
|
+
}
|
18220
|
+
}
|
18221
|
+
catch (_b) {
|
18222
|
+
// Handle errors silently
|
18223
|
+
}
|
18224
|
+
}
|
18225
|
+
// Fallback method using fetch if sendBeacon isn't available
|
18226
|
+
async fallbackEventFire(url) {
|
18227
|
+
try {
|
18228
|
+
const racePromise = Promise.race([
|
18229
|
+
// Promise #1: The fetch request
|
18230
|
+
fetch(url, {
|
18231
|
+
method: 'POST',
|
18232
|
+
keepalive: true,
|
18233
|
+
}),
|
18234
|
+
// Promise #2: The timeout
|
18235
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Request timeout')), 2000)),
|
18236
|
+
]);
|
18237
|
+
/**
|
18238
|
+
* Prevent requests from hanging indefinitely
|
18239
|
+
* Improve user experience by failing fast
|
18240
|
+
* Handle slow network conditions gracefully
|
18241
|
+
* Ensure resources are freed up in a timely manner
|
18242
|
+
*/
|
18243
|
+
const response = await racePromise;
|
18244
|
+
return response.ok;
|
18245
|
+
}
|
18246
|
+
catch (_a) {
|
18247
|
+
return false;
|
18210
18248
|
}
|
18211
18249
|
}
|
18212
18250
|
/**
|
18213
18251
|
* Extracts and decodes a URL from a base64-encoded query parameter.
|
18214
18252
|
*
|
18215
18253
|
* @param {string} url - The URL containing the base64-encoded query parameter.
|
18216
|
-
* @returns {string} - The decoded URL or
|
18254
|
+
* @returns {string | null} - The decoded URL or null if not found or invalid.
|
18217
18255
|
*/
|
18218
18256
|
getRedirectUrlFromPayload(url) {
|
18219
|
-
var _a, _b;
|
18220
|
-
const base64String = (_a = new URL(url).searchParams.get('e')) !== null && _a !== void 0 ? _a : '';
|
18221
18257
|
try {
|
18258
|
+
const base64String = new URL(url).searchParams.get('e');
|
18259
|
+
if (!base64String) {
|
18260
|
+
return null;
|
18261
|
+
}
|
18222
18262
|
const data = JSON.parse(atob(base64String));
|
18223
|
-
return
|
18263
|
+
return data.ur || null;
|
18224
18264
|
}
|
18225
|
-
catch (
|
18226
|
-
return
|
18265
|
+
catch (_a) {
|
18266
|
+
return null;
|
18227
18267
|
}
|
18228
18268
|
}
|
18229
18269
|
}
|
package/dist/index.esm.js
CHANGED
@@ -18194,7 +18194,8 @@ class EventService {
|
|
18194
18194
|
})();
|
18195
18195
|
}
|
18196
18196
|
/**
|
18197
|
-
* Fires an event using the navigator.sendBeacon method
|
18197
|
+
* Fires an event using the navigator.sendBeacon method or a fallback method if sendBeacon is not available.
|
18198
|
+
* If the event is a click event and a redirect URL is found, it redirects the user to that URL.
|
18198
18199
|
*
|
18199
18200
|
* @param {IFireEventParams} params - The parameters for firing the event.
|
18200
18201
|
* @param {RMN_SPOT_EVENT} params.event - The event type.
|
@@ -18202,26 +18203,65 @@ class EventService {
|
|
18202
18203
|
* @returns {Promise<void>} - A promise that resolves when the event is fired.
|
18203
18204
|
*/
|
18204
18205
|
async fireEvent({ event, eventUrl }) {
|
18205
|
-
|
18206
|
-
|
18207
|
-
|
18206
|
+
var _a;
|
18207
|
+
try {
|
18208
|
+
const didFireEvent = ((_a = navigator === null || navigator === void 0 ? void 0 : navigator.sendBeacon) === null || _a === void 0 ? void 0 : _a.call(navigator, eventUrl)) || (await this.fallbackEventFire(eventUrl));
|
18209
|
+
if (!didFireEvent) {
|
18210
|
+
return;
|
18211
|
+
}
|
18212
|
+
if (event === RMN_SPOT_EVENT.CLICK) {
|
18213
|
+
const redirectUrl = this.getRedirectUrlFromPayload(eventUrl);
|
18214
|
+
if (redirectUrl) {
|
18215
|
+
window.location.href = redirectUrl;
|
18216
|
+
}
|
18217
|
+
}
|
18218
|
+
}
|
18219
|
+
catch (_b) {
|
18220
|
+
// Handle errors silently
|
18221
|
+
}
|
18222
|
+
}
|
18223
|
+
// Fallback method using fetch if sendBeacon isn't available
|
18224
|
+
async fallbackEventFire(url) {
|
18225
|
+
try {
|
18226
|
+
const racePromise = Promise.race([
|
18227
|
+
// Promise #1: The fetch request
|
18228
|
+
fetch(url, {
|
18229
|
+
method: 'POST',
|
18230
|
+
keepalive: true,
|
18231
|
+
}),
|
18232
|
+
// Promise #2: The timeout
|
18233
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Request timeout')), 2000)),
|
18234
|
+
]);
|
18235
|
+
/**
|
18236
|
+
* Prevent requests from hanging indefinitely
|
18237
|
+
* Improve user experience by failing fast
|
18238
|
+
* Handle slow network conditions gracefully
|
18239
|
+
* Ensure resources are freed up in a timely manner
|
18240
|
+
*/
|
18241
|
+
const response = await racePromise;
|
18242
|
+
return response.ok;
|
18243
|
+
}
|
18244
|
+
catch (_a) {
|
18245
|
+
return false;
|
18208
18246
|
}
|
18209
18247
|
}
|
18210
18248
|
/**
|
18211
18249
|
* Extracts and decodes a URL from a base64-encoded query parameter.
|
18212
18250
|
*
|
18213
18251
|
* @param {string} url - The URL containing the base64-encoded query parameter.
|
18214
|
-
* @returns {string} - The decoded URL or
|
18252
|
+
* @returns {string | null} - The decoded URL or null if not found or invalid.
|
18215
18253
|
*/
|
18216
18254
|
getRedirectUrlFromPayload(url) {
|
18217
|
-
var _a, _b;
|
18218
|
-
const base64String = (_a = new URL(url).searchParams.get('e')) !== null && _a !== void 0 ? _a : '';
|
18219
18255
|
try {
|
18256
|
+
const base64String = new URL(url).searchParams.get('e');
|
18257
|
+
if (!base64String) {
|
18258
|
+
return null;
|
18259
|
+
}
|
18220
18260
|
const data = JSON.parse(atob(base64String));
|
18221
|
-
return
|
18261
|
+
return data.ur || null;
|
18222
18262
|
}
|
18223
|
-
catch (
|
18224
|
-
return
|
18263
|
+
catch (_a) {
|
18264
|
+
return null;
|
18225
18265
|
}
|
18226
18266
|
}
|
18227
18267
|
}
|
@@ -27,7 +27,8 @@ export declare class EventService {
|
|
27
27
|
private handleIntersectionObserver;
|
28
28
|
private fireImpressionEvent;
|
29
29
|
/**
|
30
|
-
* Fires an event using the navigator.sendBeacon method
|
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.
|
31
32
|
*
|
32
33
|
* @param {IFireEventParams} params - The parameters for firing the event.
|
33
34
|
* @param {RMN_SPOT_EVENT} params.event - The event type.
|
@@ -35,11 +36,12 @@ export declare class EventService {
|
|
35
36
|
* @returns {Promise<void>} - A promise that resolves when the event is fired.
|
36
37
|
*/
|
37
38
|
private fireEvent;
|
39
|
+
private fallbackEventFire;
|
38
40
|
/**
|
39
41
|
* Extracts and decodes a URL from a base64-encoded query parameter.
|
40
42
|
*
|
41
43
|
* @param {string} url - The URL containing the base64-encoded query parameter.
|
42
|
-
* @returns {string} - The decoded URL or
|
44
|
+
* @returns {string | null} - The decoded URL or null if not found or invalid.
|
43
45
|
*/
|
44
46
|
private getRedirectUrlFromPayload;
|
45
47
|
}
|
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.0-beta.
|
5
|
+
"version": "1.5.0-beta.2",
|
6
6
|
"homepage": "https://docs.liquidcommerce.co/rmn-sdk",
|
7
7
|
"main": "./dist/index.cjs",
|
8
8
|
"module": "./dist/index.esm.js",
|