@lvble/core 2.0.70 → 3.1.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/README.md +0 -9
- package/dist/_bundles/core.js +1 -1
- package/dist/_bundles/core.js.map +1 -1
- package/dist/_bundles/core.min.js +1 -1
- package/dist/_bundles/core.min.js.map +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/lvble.d.ts +4 -27
- package/dist/lib/lvble.d.ts.map +1 -1
- package/dist/lib/lvble.js +121 -192
- package/dist/lib/lvble.js.map +1 -1
- package/dist/lib-esm/index.d.ts.map +1 -1
- package/dist/lib-esm/index.js.map +1 -1
- package/dist/lib-esm/lvble.d.ts +4 -27
- package/dist/lib-esm/lvble.d.ts.map +1 -1
- package/dist/lib-esm/lvble.js +121 -192
- package/dist/lib-esm/lvble.js.map +1 -1
- package/package.json +2 -1
package/dist/lib-esm/lvble.js
CHANGED
|
@@ -6,18 +6,24 @@ export var Environment;
|
|
|
6
6
|
Environment["Sandbox"] = "sandbox";
|
|
7
7
|
Environment["Production"] = "production";
|
|
8
8
|
})(Environment || (Environment = {}));
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
const envToBaseUrlMap = {
|
|
10
|
+
widget: {
|
|
11
|
+
[Environment.Local]: "http://localhost:3001",
|
|
12
|
+
[Environment.Dev]: "https://v2.widget.pms.development.nowlvble.com",
|
|
13
|
+
[Environment.Sandbox]: "https://v2.widget.pms.sandbox.nowlvble.com",
|
|
14
|
+
[Environment.Production]: "https://v2.widget.pms.production.nowlvble.com",
|
|
15
|
+
},
|
|
16
|
+
experience: {
|
|
17
|
+
[Environment.Local]: "http://localhost:3001",
|
|
18
|
+
[Environment.Dev]: "https://v2.experience.pms.development.nowlvble.com",
|
|
19
|
+
[Environment.Sandbox]: "https://v2.experience.pms.sandbox.nowlvble.com",
|
|
20
|
+
[Environment.Production]: "https://v2.experience.pms.production.nowlvble.com",
|
|
21
|
+
},
|
|
20
22
|
};
|
|
23
|
+
const MIXPANEL_TOKEN = "9ad1530a57a977ab9d4005e2ba11ab4a";
|
|
24
|
+
let lvbleInitialized = false;
|
|
25
|
+
let eventListenersAdded = { lvble: false, open: false };
|
|
26
|
+
let modalElements = {};
|
|
21
27
|
class LvbleWidget extends HTMLElement {
|
|
22
28
|
constructor() {
|
|
23
29
|
super();
|
|
@@ -34,31 +40,20 @@ class LvbleWidget extends HTMLElement {
|
|
|
34
40
|
return this.getAttribute("environment");
|
|
35
41
|
}
|
|
36
42
|
set environment(val) {
|
|
37
|
-
|
|
38
|
-
this.setAttribute("environment", val)
|
|
39
|
-
|
|
40
|
-
else {
|
|
41
|
-
this.removeAttribute("environment");
|
|
42
|
-
}
|
|
43
|
+
val
|
|
44
|
+
? this.setAttribute("environment", val)
|
|
45
|
+
: this.removeAttribute("environment");
|
|
43
46
|
}
|
|
44
47
|
get token() {
|
|
45
|
-
return this.getAttribute("token");
|
|
48
|
+
return this.getAttribute("token") || "";
|
|
46
49
|
}
|
|
47
50
|
set token(val) {
|
|
48
|
-
|
|
49
|
-
this.setAttribute("token", val);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
this.removeAttribute("token");
|
|
53
|
-
}
|
|
51
|
+
val ? this.setAttribute("token", val) : this.removeAttribute("token");
|
|
54
52
|
}
|
|
55
53
|
get customApiUrlParam() {
|
|
56
|
-
// This api url will be used in the widget and the experience instead of the existing url
|
|
57
54
|
return this.getAttribute("custom-api-url-param") || "";
|
|
58
55
|
}
|
|
59
56
|
set customApiUrlParam(value) {
|
|
60
|
-
// This api url will be used in the widget and the experience instead of the existing url
|
|
61
|
-
// Only allow setting the custom url if this is dev environment
|
|
62
57
|
if (value && this.environment === Environment.Dev) {
|
|
63
58
|
this.setAttribute("custom-api-url-param", value);
|
|
64
59
|
}
|
|
@@ -68,15 +63,15 @@ class LvbleWidget extends HTMLElement {
|
|
|
68
63
|
}
|
|
69
64
|
connectedCallback() {
|
|
70
65
|
var _a;
|
|
71
|
-
const iframeSrc = `${envToBaseUrlMapWidget[this.environment]}?token=${this.token}&environment=${this.environment}${this.customApiUrlParam}`;
|
|
72
66
|
const iframe = document.createElement("iframe");
|
|
73
|
-
iframe.src =
|
|
74
|
-
iframe.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
67
|
+
iframe.src = `${envToBaseUrlMap.widget[this.environment]}?token=${this.token}&environment=${this.environment}${this.customApiUrlParam}`;
|
|
68
|
+
iframe.style.cssText = `
|
|
69
|
+
width: 100%;
|
|
70
|
+
height: 100%;
|
|
71
|
+
border: solid transparent;
|
|
72
|
+
border-radius: 10px;
|
|
73
|
+
min-height: 220px;
|
|
74
|
+
`;
|
|
80
75
|
this._iframe = iframe;
|
|
81
76
|
(_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(iframe);
|
|
82
77
|
}
|
|
@@ -86,39 +81,33 @@ class LvbleWidget extends HTMLElement {
|
|
|
86
81
|
}
|
|
87
82
|
}
|
|
88
83
|
customElements.define("lvble-widget", LvbleWidget);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
modalIframe.style.left = l;
|
|
102
|
-
modalIframe.style.transform = `translate(-50%, -50%)`;
|
|
103
|
-
modalIframe.style.width = `min(95dvw, 360px)`;
|
|
104
|
-
modalIframe.style.borderRadius = "10px";
|
|
105
|
-
modalIframe.style.borderStyle = "solid";
|
|
106
|
-
modalIframe.style.borderColor = "transparent";
|
|
107
|
-
modalIframe.style.borderWidth = "1px";
|
|
84
|
+
const createModalElements = ({ modal }) => {
|
|
85
|
+
const iframe = document.createElement("iframe");
|
|
86
|
+
iframe.className = "livble-modal-iframe";
|
|
87
|
+
iframe.style.cssText = `
|
|
88
|
+
position: absolute;
|
|
89
|
+
top: calc(50dvh);
|
|
90
|
+
left: 50vw;
|
|
91
|
+
transform: translate(-50%, -50%);
|
|
92
|
+
width: min(95dvw, 360px);
|
|
93
|
+
border: solid transparent 1px;
|
|
94
|
+
border-radius: 10px;
|
|
95
|
+
`;
|
|
108
96
|
if (modal === null || modal === void 0 ? void 0 : modal.height) {
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
97
|
+
iframe.style.height = modal.height;
|
|
98
|
+
}
|
|
99
|
+
const background = document.createElement("div");
|
|
100
|
+
background.style.cssText = `
|
|
101
|
+
position: fixed;
|
|
102
|
+
top: 0;
|
|
103
|
+
left: 0;
|
|
104
|
+
width: 100%;
|
|
105
|
+
height: 100%;
|
|
106
|
+
background-color: rgba(0, 0, 0, 0.5);
|
|
107
|
+
z-index: 2147483647;
|
|
108
|
+
`;
|
|
109
|
+
background.hidden = true;
|
|
110
|
+
background.appendChild(iframe);
|
|
122
111
|
let isUiwebview = /((iPhone|iPod|iPad).*AppleWebKit(?!.*Version)|; wv)/i.test(navigator.userAgent);
|
|
123
112
|
if (isUiwebview) {
|
|
124
113
|
const style = document.createElement("style");
|
|
@@ -139,7 +128,7 @@ const createModal = ({ modal }) => {
|
|
|
139
128
|
}
|
|
140
129
|
}
|
|
141
130
|
`;
|
|
142
|
-
|
|
131
|
+
iframe.appendChild(style);
|
|
143
132
|
}
|
|
144
133
|
else {
|
|
145
134
|
const style = document.createElement("style");
|
|
@@ -149,142 +138,82 @@ const createModal = ({ modal }) => {
|
|
|
149
138
|
height: clamp(min(75dvh, 750px), ${(modal === null || modal === void 0 ? void 0 : modal.height) || "95dvh"}, min(95dvh, 750px));
|
|
150
139
|
}
|
|
151
140
|
`;
|
|
152
|
-
|
|
141
|
+
iframe.appendChild(style);
|
|
153
142
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
143
|
+
return { background, iframe };
|
|
144
|
+
};
|
|
145
|
+
const createWidget = (initOptions, modalElements, eventListenersAdded, customApiUrlParam, token) => {
|
|
146
|
+
const widget = new LvbleWidget();
|
|
147
|
+
widget.environment = initOptions.environment;
|
|
148
|
+
widget.token = token;
|
|
149
|
+
widget.customApiUrlParam = customApiUrlParam;
|
|
150
|
+
modalElements.iframe.src = `${envToBaseUrlMap.experience[initOptions.environment]}?token=${token}${customApiUrlParam}`;
|
|
151
|
+
document.body.appendChild(modalElements.background);
|
|
152
|
+
const handleWidgetMessage = (message) => {
|
|
153
|
+
if (message.origin !== envToBaseUrlMap.widget[initOptions.environment])
|
|
154
|
+
return;
|
|
155
|
+
const { eventType, data } = message.data;
|
|
156
|
+
if (!eventType)
|
|
157
|
+
return;
|
|
158
|
+
if (eventType === "OPEN_EXPERIENCE_REQUEST") {
|
|
159
|
+
openExperience(initOptions, modalElements, customApiUrlParam, token);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
if (!eventListenersAdded.lvble) {
|
|
163
|
+
window.addEventListener("message", handleWidgetMessage);
|
|
164
|
+
eventListenersAdded.lvble = true;
|
|
165
|
+
mixpanel.init(MIXPANEL_TOKEN, { debug: false });
|
|
159
166
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
167
|
+
return widget;
|
|
168
|
+
};
|
|
169
|
+
const openExperience = (initOptions, modalElements, customApiUrlParam, token) => {
|
|
170
|
+
if (!modalElements.iframe.src) {
|
|
171
|
+
modalElements.iframe.src = `${envToBaseUrlMap.experience[initOptions.environment]}?token=${token}${customApiUrlParam}`;
|
|
172
|
+
document.body.appendChild(modalElements.background);
|
|
173
|
+
}
|
|
174
|
+
modalElements.background.hidden = false;
|
|
175
|
+
const handleModalMessage = (message) => {
|
|
176
|
+
if (message.origin !== envToBaseUrlMap.experience[initOptions.environment])
|
|
177
|
+
return;
|
|
178
|
+
const { eventType, data } = message.data;
|
|
179
|
+
if (!eventType)
|
|
180
|
+
return;
|
|
181
|
+
if (eventType === "CLOSE_EXPERIENCE_REQUEST") {
|
|
182
|
+
modalElements.background.hidden = true;
|
|
183
|
+
initOptions.onEvent("EXPERIENCE_CLOSED", {});
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
document.querySelectorAll("lvble-widget").forEach((widget) => {
|
|
187
|
+
var _a, _b;
|
|
188
|
+
const iframe = (_a = widget.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector("iframe");
|
|
189
|
+
(_b = iframe.contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(message.data, "*");
|
|
190
|
+
});
|
|
191
|
+
mixpanel.track("BEFORE_INVOKE_ON_EVENT", message.data);
|
|
192
|
+
initOptions.onEvent(eventType, data);
|
|
193
|
+
mixpanel.track("AFTER_INVOKE_ON_EVENT", message.data);
|
|
194
|
+
};
|
|
195
|
+
if (!modalElements.background.hidden) {
|
|
196
|
+
window.addEventListener("message", handleModalMessage);
|
|
164
197
|
}
|
|
165
|
-
`;
|
|
166
|
-
return { modalBackground, modalIframe };
|
|
167
198
|
};
|
|
168
199
|
const lvble = (initOptions) => {
|
|
169
|
-
|
|
170
|
-
* Note: you can only register for onEvent once.
|
|
171
|
-
*/
|
|
172
|
-
if (!initOptions.onEvent) {
|
|
200
|
+
if (!initOptions.onEvent)
|
|
173
201
|
throw new Error("onEvent callback is required");
|
|
174
|
-
|
|
175
|
-
if (!initOptions.environment) {
|
|
202
|
+
if (!initOptions.environment)
|
|
176
203
|
throw new Error("environment is required");
|
|
177
|
-
}
|
|
178
204
|
if (!lvbleInitialized) {
|
|
179
|
-
|
|
180
|
-
modal: initOptions.modal,
|
|
181
|
-
});
|
|
182
|
-
modalBackground = result.modalBackground;
|
|
183
|
-
modalIframe = result.modalIframe;
|
|
205
|
+
modalElements = createModalElements({ modal: initOptions.modal });
|
|
184
206
|
lvbleInitialized = true;
|
|
185
207
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
208
|
+
const customApiUrlParam = initOptions.customApiUrl
|
|
209
|
+
? `&customApiUrl=${initOptions.customApiUrl}`
|
|
210
|
+
: "";
|
|
211
|
+
const lvbleInstance = {
|
|
190
212
|
isModalBuilt: false,
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
*
|
|
194
|
-
* @returns A lvble widget. Note that it detects mode automatically.
|
|
195
|
-
*/
|
|
196
|
-
createWidget: (widgetOptions) => {
|
|
197
|
-
const widget = new LvbleWidget();
|
|
198
|
-
widget.environment = initOptions.environment;
|
|
199
|
-
widget.token = widgetOptions.token;
|
|
200
|
-
widget.customApiUrlParam = customApiUrlParam; // Order matters, customApiUrlParam expects environment is set.
|
|
201
|
-
/** The iframe is created and rendered upon widget initialization! (Eager Loading)
|
|
202
|
-
* Since the "hidden" attribute is used, we control only the modal's VISIBILITY upon opening / closing
|
|
203
|
-
*/
|
|
204
|
-
modalIframe.src = `${envToBaseUrlMapExperience[initOptions.environment]}?token=${widgetOptions.token}${customApiUrlParam}`;
|
|
205
|
-
document.body.appendChild(modalBackground);
|
|
206
|
-
l.isModalBuilt = true;
|
|
207
|
-
const messageListener = (message) => {
|
|
208
|
-
// Verify we got a valid message from the iframe.
|
|
209
|
-
if (message.origin != envToBaseUrlMapWidget[initOptions.environment]) {
|
|
210
|
-
console.debug(`Received message from unknown origin: ${message.origin}`);
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
const eventData = message.data;
|
|
214
|
-
if (!eventData.eventType) {
|
|
215
|
-
console.debug(`Received message without eventType: ${JSON.stringify(eventData)}`);
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
if (eventData.eventType === "OPEN_EXPERIENCE_REQUEST") {
|
|
219
|
-
l.open({ token: widgetOptions.token });
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
if (!eventListenerLvbleAdded) {
|
|
223
|
-
window.addEventListener("message", messageListener);
|
|
224
|
-
eventListenerLvbleAdded = true;
|
|
225
|
-
mixpanel.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
|
|
226
|
-
}
|
|
227
|
-
return widget;
|
|
228
|
-
},
|
|
229
|
-
/**
|
|
230
|
-
* This function opens a modal with the relevant mode.
|
|
231
|
-
* @param openOptions The options for opening the modal. See `OpenOptions` for more information.
|
|
232
|
-
*/
|
|
233
|
-
open: (openOptions) => {
|
|
234
|
-
const modeUrlMap = {
|
|
235
|
-
onboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}${customApiUrlParam}`,
|
|
236
|
-
offboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}${customApiUrlParam}`,
|
|
237
|
-
split: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}${customApiUrlParam}`,
|
|
238
|
-
repay: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}${customApiUrlParam}`,
|
|
239
|
-
};
|
|
240
|
-
/** Modal's iframe is given src and rendered ONLY in case the Livble widget is not present
|
|
241
|
-
* (Otherwise it is already initialized upon widget creation)
|
|
242
|
-
*/
|
|
243
|
-
if (!l.isModalBuilt) {
|
|
244
|
-
const modeUrl = openOptions.mode
|
|
245
|
-
? modeUrlMap[openOptions.mode]
|
|
246
|
-
: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}${customApiUrlParam}`;
|
|
247
|
-
modalIframe.src = modeUrl;
|
|
248
|
-
document.body.appendChild(modalBackground);
|
|
249
|
-
l.isModalBuilt = true;
|
|
250
|
-
}
|
|
251
|
-
// Display modal by switching off the "hidden" attribute
|
|
252
|
-
modalBackground.hidden = false;
|
|
253
|
-
const messageListener = (message) => {
|
|
254
|
-
// Verify we got a valid message from the iframe.
|
|
255
|
-
if (message.origin != envToBaseUrlMapExperience[initOptions.environment]) {
|
|
256
|
-
console.debug(`Received message from unknown origin: ${message.origin} Expecting only ${envToBaseUrlMapExperience[initOptions.environment]}`);
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
|
-
const eventData = message.data;
|
|
260
|
-
if (!eventData.eventType) {
|
|
261
|
-
console.debug(`Received message without eventType: ${JSON.stringify(eventData)}`);
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
if (eventData.eventType === "CLOSE_EXPERIENCE_REQUEST") {
|
|
265
|
-
// Modal visibility is switched off (but the modal itself is not removed from the DOM)
|
|
266
|
-
modalBackground.hidden = true;
|
|
267
|
-
initOptions.onEvent("EXPERIENCE_CLOSED", {});
|
|
268
|
-
return;
|
|
269
|
-
}
|
|
270
|
-
// TODO: Consider using websocket in iframes instead of posting messages to them.
|
|
271
|
-
const iframes = document.querySelectorAll("lvble-widget");
|
|
272
|
-
iframes.forEach((w) => {
|
|
273
|
-
var _a, _b;
|
|
274
|
-
(_b = ((_a = w.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector("iframe")).contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(eventData, "*");
|
|
275
|
-
});
|
|
276
|
-
mixpanel.track("BEFORE_INVOKE_ON_EVENT", eventData);
|
|
277
|
-
initOptions.onEvent(eventData.eventType, eventData.data);
|
|
278
|
-
mixpanel.track("AFTER_INVOKE_ON_EVENT", eventData);
|
|
279
|
-
};
|
|
280
|
-
if (!eventListenerOpenAdded) {
|
|
281
|
-
window.addEventListener("message", messageListener);
|
|
282
|
-
eventListenerOpenAdded = true;
|
|
283
|
-
mixpanel.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
|
|
284
|
-
}
|
|
285
|
-
},
|
|
213
|
+
createWidget: ({ token }) => createWidget(initOptions, modalElements, eventListenersAdded, customApiUrlParam, token),
|
|
214
|
+
open: (token) => openExperience(initOptions, modalElements, customApiUrlParam, token),
|
|
286
215
|
};
|
|
287
|
-
return
|
|
216
|
+
return lvbleInstance;
|
|
288
217
|
};
|
|
289
218
|
export const Lvble = lvble;
|
|
290
219
|
//# sourceMappingURL=lvble.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lvble.js","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AAExC,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,kCAAmB,CAAA;IACnB,kCAAmB,CAAA;IACnB,wCAAyB,CAAA;AAC3B,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;
|
|
1
|
+
{"version":3,"file":"lvble.js","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"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"}
|