@lvble/core 1.0.59
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/LICENSE +21 -0
- package/README.md +100 -0
- package/dist/_bundles/core.js +2 -0
- package/dist/_bundles/core.js.map +1 -0
- package/dist/_bundles/core.min.js +2 -0
- package/dist/_bundles/core.min.js.map +1 -0
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +18 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/lvble.d.ts +61 -0
- package/dist/lib/lvble.d.ts.map +1 -0
- package/dist/lib/lvble.js +217 -0
- package/dist/lib/lvble.js.map +1 -0
- package/dist/lib-esm/index.d.ts +2 -0
- package/dist/lib-esm/index.d.ts.map +1 -0
- package/dist/lib-esm/index.js +2 -0
- package/dist/lib-esm/index.js.map +1 -0
- package/dist/lib-esm/lvble.d.ts +61 -0
- package/dist/lib-esm/lvble.d.ts.map +1 -0
- package/dist/lib-esm/lvble.js +214 -0
- package/dist/lib-esm/lvble.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./lvble"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare enum Environment {
|
|
2
|
+
Local = "local",
|
|
3
|
+
Dev = "development",
|
|
4
|
+
Sandbox = "sandbox",
|
|
5
|
+
Production = "production"
|
|
6
|
+
}
|
|
7
|
+
export type Mode = "onboarding" | "offboarding" | "split" | "repay";
|
|
8
|
+
export interface ModalOptions {
|
|
9
|
+
height: string;
|
|
10
|
+
}
|
|
11
|
+
export interface InitOptions {
|
|
12
|
+
environment: Environment;
|
|
13
|
+
onEvent: (eventType: string, data: any) => void;
|
|
14
|
+
modal?: ModalOptions;
|
|
15
|
+
}
|
|
16
|
+
export interface OpenOptions {
|
|
17
|
+
mode?: Mode;
|
|
18
|
+
token: string;
|
|
19
|
+
}
|
|
20
|
+
export interface WidgetOptions {
|
|
21
|
+
token: string;
|
|
22
|
+
}
|
|
23
|
+
declare class LvbleWidget extends HTMLElement {
|
|
24
|
+
_iframe?: HTMLIFrameElement;
|
|
25
|
+
constructor();
|
|
26
|
+
get environment(): Environment;
|
|
27
|
+
set environment(val: Environment);
|
|
28
|
+
get token(): string;
|
|
29
|
+
set token(val: string);
|
|
30
|
+
connectedCallback(): void;
|
|
31
|
+
disconnectedCallback(): void;
|
|
32
|
+
}
|
|
33
|
+
declare const lvble: (initOptions: InitOptions) => {
|
|
34
|
+
/**
|
|
35
|
+
* This function creates a widget that can be embedded in your website.
|
|
36
|
+
*
|
|
37
|
+
* @returns A lvble widget. Note that it detects mode automagically.
|
|
38
|
+
*/
|
|
39
|
+
createWidget: (widgetOptions: WidgetOptions) => LvbleWidget;
|
|
40
|
+
/**
|
|
41
|
+
* This function opens a modal with the relevant mode.
|
|
42
|
+
* @param openOptions The options for opening the modal. See `OpenOptions` for more information.
|
|
43
|
+
*/
|
|
44
|
+
open: (openOptions: OpenOptions) => void;
|
|
45
|
+
};
|
|
46
|
+
export type LvbleType = ReturnType<typeof lvble>;
|
|
47
|
+
export declare const Lvble: (initOptions: InitOptions) => {
|
|
48
|
+
/**
|
|
49
|
+
* This function creates a widget that can be embedded in your website.
|
|
50
|
+
*
|
|
51
|
+
* @returns A lvble widget. Note that it detects mode automagically.
|
|
52
|
+
*/
|
|
53
|
+
createWidget: (widgetOptions: WidgetOptions) => LvbleWidget;
|
|
54
|
+
/**
|
|
55
|
+
* This function opens a modal with the relevant mode.
|
|
56
|
+
* @param openOptions The options for opening the modal. See `OpenOptions` for more information.
|
|
57
|
+
*/
|
|
58
|
+
open: (openOptions: OpenOptions) => void;
|
|
59
|
+
};
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=lvble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lvble.d.ts","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,GAAG,gBAAgB;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;CAC1B;AAeD,MAAM,MAAM,IAAI,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAE1B,WAAW,EAAE,WAAW,CAAC;IAEzB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAEhD,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAE1B,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAE5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cAAM,WAAY,SAAQ,WAAW;IACnC,OAAO,CAAC,EAAE,iBAAiB,CAAC;;IAQ5B,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,WAAW,CAAC,GAAG,EAJA,WAIA,EAMlB;IAED,IAAI,KAAK,IAIM,MAAM,CAFpB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAMpB;IAED,iBAAiB;IAkBjB,oBAAoB;CAGrB;AA6CD,QAAA,MAAM,KAAK,gBAAiB,WAAW;IAsBnC;;;;OAIG;kCAC2B,aAAa;IAsC3C;;;OAGG;wBACiB,WAAW;CA6ElC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEjD,eAAO,MAAM,KAAK,gBAtJU,WAAW;IAsBnC;;;;OAIG;kCAC2B,aAAa;IAsC3C;;;OAGG;wBACiB,WAAW;CAiFT,CAAC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Lvble = exports.Environment = void 0;
|
|
4
|
+
const mixpanel_browser_1 = require("mixpanel-browser");
|
|
5
|
+
var Environment;
|
|
6
|
+
(function (Environment) {
|
|
7
|
+
Environment["Local"] = "local";
|
|
8
|
+
Environment["Dev"] = "development";
|
|
9
|
+
Environment["Sandbox"] = "sandbox";
|
|
10
|
+
Environment["Production"] = "production";
|
|
11
|
+
})(Environment || (exports.Environment = Environment = {}));
|
|
12
|
+
const envToBaseUrlMapWidget = {
|
|
13
|
+
[Environment.Local]: "http://localhost:3001",
|
|
14
|
+
[Environment.Dev]: "https://v2.widget.pms.development.nowlvble.com",
|
|
15
|
+
[Environment.Sandbox]: "https://v2.widget.pms.sandbox.nowlvble.com",
|
|
16
|
+
[Environment.Production]: "https://v2.widget.pms.production.nowlvble.com",
|
|
17
|
+
};
|
|
18
|
+
const envToBaseUrlMapExperience = {
|
|
19
|
+
[Environment.Local]: "http://localhost:3001",
|
|
20
|
+
[Environment.Dev]: "https://v2.experience.pms.development.nowlvble.com",
|
|
21
|
+
[Environment.Sandbox]: "https://v2.experience.pms.sandbox.nowlvble.com",
|
|
22
|
+
[Environment.Production]: "https://v2.experience.pms.production.nowlvble.com",
|
|
23
|
+
};
|
|
24
|
+
class LvbleWidget extends HTMLElement {
|
|
25
|
+
constructor() {
|
|
26
|
+
super();
|
|
27
|
+
Object.defineProperty(this, "_iframe", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: void 0
|
|
32
|
+
});
|
|
33
|
+
this.attachShadow({ mode: "open" });
|
|
34
|
+
this.style.minHeight = "inherit";
|
|
35
|
+
}
|
|
36
|
+
get environment() {
|
|
37
|
+
return this.getAttribute("environment");
|
|
38
|
+
}
|
|
39
|
+
set environment(val) {
|
|
40
|
+
if (val) {
|
|
41
|
+
this.setAttribute("environment", val);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.removeAttribute("environment");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
get token() {
|
|
48
|
+
return this.getAttribute("token");
|
|
49
|
+
}
|
|
50
|
+
set token(val) {
|
|
51
|
+
if (val) {
|
|
52
|
+
this.setAttribute("token", val);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.removeAttribute("token");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
connectedCallback() {
|
|
59
|
+
var _a;
|
|
60
|
+
const iframeSrc = `${envToBaseUrlMapWidget[this.environment]}?token=${this.token}&environment=${this.environment}`;
|
|
61
|
+
const iframe = document.createElement("iframe");
|
|
62
|
+
iframe.src = iframeSrc;
|
|
63
|
+
iframe.width = `100%`;
|
|
64
|
+
iframe.height = `100%`;
|
|
65
|
+
iframe.style.borderStyle = "solid";
|
|
66
|
+
iframe.style.borderRadius = "10px";
|
|
67
|
+
iframe.style.borderColor = "transparent";
|
|
68
|
+
iframe.style.minHeight = "inherit";
|
|
69
|
+
this._iframe = iframe;
|
|
70
|
+
(_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(iframe);
|
|
71
|
+
}
|
|
72
|
+
disconnectedCallback() {
|
|
73
|
+
if (this.shadowRoot)
|
|
74
|
+
this.shadowRoot.innerHTML = "";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
customElements.define("lvble-widget", LvbleWidget);
|
|
78
|
+
let lvbleInitialized = false;
|
|
79
|
+
let eventListenerLvbleAdded = false;
|
|
80
|
+
let eventListenerOpenAdded = false;
|
|
81
|
+
let modalBackground = undefined;
|
|
82
|
+
let modalIframe = undefined;
|
|
83
|
+
const createModal = ({ modal }) => {
|
|
84
|
+
var _a;
|
|
85
|
+
const modalIframe = document.createElement("iframe");
|
|
86
|
+
const t = `calc(50dvh)`;
|
|
87
|
+
const l = `50vw`;
|
|
88
|
+
modalIframe.style.position = "absolute";
|
|
89
|
+
modalIframe.style.top = t;
|
|
90
|
+
modalIframe.style.left = l;
|
|
91
|
+
modalIframe.style.transform = `translate(-50%, -50%)`;
|
|
92
|
+
modalIframe.style.width = `min(95dvw, 360px)`;
|
|
93
|
+
modalIframe.style.height = `clamp(
|
|
94
|
+
min(75dvh, 750px),
|
|
95
|
+
${(_a = modal === null || modal === void 0 ? void 0 : modal.height) !== null && _a !== void 0 ? _a : "95dvh"},
|
|
96
|
+
min(95dvh, 750px)
|
|
97
|
+
)`;
|
|
98
|
+
modalIframe.style.backgroundColor = "white";
|
|
99
|
+
modalIframe.style.borderRadius = "10px";
|
|
100
|
+
modalIframe.style.borderStyle = "solid";
|
|
101
|
+
modalIframe.style.borderColor = "transparent";
|
|
102
|
+
modalIframe.style.borderWidth = "1px";
|
|
103
|
+
const modalBackground = document.createElement("div");
|
|
104
|
+
modalBackground.style.position = "fixed";
|
|
105
|
+
modalBackground.style.top = "0";
|
|
106
|
+
modalBackground.style.left = "0";
|
|
107
|
+
modalBackground.style.height = "100%";
|
|
108
|
+
modalBackground.style.width = "100%";
|
|
109
|
+
modalBackground.style.zIndex = "2147483647";
|
|
110
|
+
modalBackground.style.backgroundColor = "rgba(0, 0, 0, 0.5)";
|
|
111
|
+
modalBackground.appendChild(modalIframe);
|
|
112
|
+
return { modalBackground, modalIframe };
|
|
113
|
+
};
|
|
114
|
+
const lvble = (initOptions) => {
|
|
115
|
+
/**
|
|
116
|
+
* Note: you can only register for onEvent once.
|
|
117
|
+
*/
|
|
118
|
+
if (!initOptions.onEvent) {
|
|
119
|
+
throw new Error("onEvent callback is required");
|
|
120
|
+
}
|
|
121
|
+
if (!initOptions.environment) {
|
|
122
|
+
throw new Error("environment is required");
|
|
123
|
+
}
|
|
124
|
+
if (!lvbleInitialized) {
|
|
125
|
+
const result = createModal({
|
|
126
|
+
modal: initOptions.modal,
|
|
127
|
+
});
|
|
128
|
+
modalBackground = result.modalBackground;
|
|
129
|
+
modalIframe = result.modalIframe;
|
|
130
|
+
lvbleInitialized = true;
|
|
131
|
+
}
|
|
132
|
+
const l = {
|
|
133
|
+
/**
|
|
134
|
+
* This function creates a widget that can be embedded in your website.
|
|
135
|
+
*
|
|
136
|
+
* @returns A lvble widget. Note that it detects mode automagically.
|
|
137
|
+
*/
|
|
138
|
+
createWidget: (widgetOptions) => {
|
|
139
|
+
const widget = new LvbleWidget();
|
|
140
|
+
widget.environment = initOptions.environment;
|
|
141
|
+
widget.token = widgetOptions.token;
|
|
142
|
+
const messageListener = (message) => {
|
|
143
|
+
// Verify we got a valid message from the iframe.
|
|
144
|
+
if (message.origin != envToBaseUrlMapWidget[initOptions.environment]) {
|
|
145
|
+
console.debug(`Received message from unknown origin: ${message.origin}`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const eventData = message.data;
|
|
149
|
+
if (!eventData.eventType) {
|
|
150
|
+
console.debug(`Received message without eventType: ${JSON.stringify(eventData)}`);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (eventData.eventType === "OPEN_EXPERIENCE_REQUEST") {
|
|
154
|
+
modalIframe.src = `${envToBaseUrlMapExperience[initOptions.environment]}?token=${widgetOptions.token}`;
|
|
155
|
+
l.open({ token: widgetOptions.token });
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
if (!eventListenerLvbleAdded) {
|
|
159
|
+
window.addEventListener("message", messageListener);
|
|
160
|
+
eventListenerLvbleAdded = true;
|
|
161
|
+
mixpanel_browser_1.default.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
|
|
162
|
+
}
|
|
163
|
+
return widget;
|
|
164
|
+
},
|
|
165
|
+
/**
|
|
166
|
+
* This function opens a modal with the relevant mode.
|
|
167
|
+
* @param openOptions The options for opening the modal. See `OpenOptions` for more information.
|
|
168
|
+
*/
|
|
169
|
+
open: (openOptions) => {
|
|
170
|
+
const modeUrlMap = {
|
|
171
|
+
onboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`,
|
|
172
|
+
offboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`,
|
|
173
|
+
split: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`,
|
|
174
|
+
repay: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`,
|
|
175
|
+
};
|
|
176
|
+
const modeUrl = openOptions.mode
|
|
177
|
+
? modeUrlMap[openOptions.mode]
|
|
178
|
+
: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`;
|
|
179
|
+
modalIframe.src = modeUrl;
|
|
180
|
+
document.body.appendChild(modalBackground);
|
|
181
|
+
const messageListener = (message) => {
|
|
182
|
+
// Verify we got a valid message from the iframe.
|
|
183
|
+
if (message.origin != envToBaseUrlMapExperience[initOptions.environment]) {
|
|
184
|
+
console.debug(`Received message from unknown origin: ${message.origin} Expecting only ${envToBaseUrlMapExperience[initOptions.environment]}`);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const eventData = message.data;
|
|
188
|
+
if (!eventData.eventType) {
|
|
189
|
+
console.debug(`Received message without eventType: ${JSON.stringify(eventData)}`);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (eventData.eventType === "CLOSE_EXPERIENCE_REQUEST") {
|
|
193
|
+
document.body.removeChild(modalBackground);
|
|
194
|
+
initOptions.onEvent("EXPERIENCE_CLOSED", {});
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// TODO: Consider using websocket in iframes instead of posting messages to them.
|
|
198
|
+
const iframes = document.querySelectorAll("lvble-widget");
|
|
199
|
+
iframes.forEach((w) => {
|
|
200
|
+
var _a, _b;
|
|
201
|
+
(_b = ((_a = w.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector("iframe")).contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(eventData, "*");
|
|
202
|
+
});
|
|
203
|
+
mixpanel_browser_1.default.track("BEFORE_INVOKE_ON_EVENT", eventData);
|
|
204
|
+
initOptions.onEvent(eventData.eventType, eventData.data);
|
|
205
|
+
mixpanel_browser_1.default.track("AFTER_INVOKE_ON_EVENT", eventData);
|
|
206
|
+
};
|
|
207
|
+
if (!eventListenerOpenAdded) {
|
|
208
|
+
window.addEventListener("message", messageListener);
|
|
209
|
+
eventListenerOpenAdded = true;
|
|
210
|
+
mixpanel_browser_1.default.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
return l;
|
|
215
|
+
};
|
|
216
|
+
exports.Lvble = lvble;
|
|
217
|
+
//# sourceMappingURL=lvble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lvble.js","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare enum Environment {
|
|
2
|
+
Local = "local",
|
|
3
|
+
Dev = "development",
|
|
4
|
+
Sandbox = "sandbox",
|
|
5
|
+
Production = "production"
|
|
6
|
+
}
|
|
7
|
+
export type Mode = "onboarding" | "offboarding" | "split" | "repay";
|
|
8
|
+
export interface ModalOptions {
|
|
9
|
+
height: string;
|
|
10
|
+
}
|
|
11
|
+
export interface InitOptions {
|
|
12
|
+
environment: Environment;
|
|
13
|
+
onEvent: (eventType: string, data: any) => void;
|
|
14
|
+
modal?: ModalOptions;
|
|
15
|
+
}
|
|
16
|
+
export interface OpenOptions {
|
|
17
|
+
mode?: Mode;
|
|
18
|
+
token: string;
|
|
19
|
+
}
|
|
20
|
+
export interface WidgetOptions {
|
|
21
|
+
token: string;
|
|
22
|
+
}
|
|
23
|
+
declare class LvbleWidget extends HTMLElement {
|
|
24
|
+
_iframe?: HTMLIFrameElement;
|
|
25
|
+
constructor();
|
|
26
|
+
get environment(): Environment;
|
|
27
|
+
set environment(val: Environment);
|
|
28
|
+
get token(): string;
|
|
29
|
+
set token(val: string);
|
|
30
|
+
connectedCallback(): void;
|
|
31
|
+
disconnectedCallback(): void;
|
|
32
|
+
}
|
|
33
|
+
declare const lvble: (initOptions: InitOptions) => {
|
|
34
|
+
/**
|
|
35
|
+
* This function creates a widget that can be embedded in your website.
|
|
36
|
+
*
|
|
37
|
+
* @returns A lvble widget. Note that it detects mode automagically.
|
|
38
|
+
*/
|
|
39
|
+
createWidget: (widgetOptions: WidgetOptions) => LvbleWidget;
|
|
40
|
+
/**
|
|
41
|
+
* This function opens a modal with the relevant mode.
|
|
42
|
+
* @param openOptions The options for opening the modal. See `OpenOptions` for more information.
|
|
43
|
+
*/
|
|
44
|
+
open: (openOptions: OpenOptions) => void;
|
|
45
|
+
};
|
|
46
|
+
export type LvbleType = ReturnType<typeof lvble>;
|
|
47
|
+
export declare const Lvble: (initOptions: InitOptions) => {
|
|
48
|
+
/**
|
|
49
|
+
* This function creates a widget that can be embedded in your website.
|
|
50
|
+
*
|
|
51
|
+
* @returns A lvble widget. Note that it detects mode automagically.
|
|
52
|
+
*/
|
|
53
|
+
createWidget: (widgetOptions: WidgetOptions) => LvbleWidget;
|
|
54
|
+
/**
|
|
55
|
+
* This function opens a modal with the relevant mode.
|
|
56
|
+
* @param openOptions The options for opening the modal. See `OpenOptions` for more information.
|
|
57
|
+
*/
|
|
58
|
+
open: (openOptions: OpenOptions) => void;
|
|
59
|
+
};
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=lvble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lvble.d.ts","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,GAAG,gBAAgB;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;CAC1B;AAeD,MAAM,MAAM,IAAI,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,YAAY;IAE3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAE1B,WAAW,EAAE,WAAW,CAAC;IAEzB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAEhD,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAE1B,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAE5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cAAM,WAAY,SAAQ,WAAW;IACnC,OAAO,CAAC,EAAE,iBAAiB,CAAC;;IAQ5B,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,WAAW,CAAC,GAAG,EAJA,WAIA,EAMlB;IAED,IAAI,KAAK,IAIM,MAAM,CAFpB;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAMpB;IAED,iBAAiB;IAkBjB,oBAAoB;CAGrB;AA6CD,QAAA,MAAM,KAAK,gBAAiB,WAAW;IAsBnC;;;;OAIG;kCAC2B,aAAa;IAsC3C;;;OAGG;wBACiB,WAAW;CA6ElC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEjD,eAAO,MAAM,KAAK,gBAtJU,WAAW;IAsBnC;;;;OAIG;kCAC2B,aAAa;IAsC3C;;;OAGG;wBACiB,WAAW;CAiFT,CAAC"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import mixpanel from "mixpanel-browser";
|
|
2
|
+
export var Environment;
|
|
3
|
+
(function (Environment) {
|
|
4
|
+
Environment["Local"] = "local";
|
|
5
|
+
Environment["Dev"] = "development";
|
|
6
|
+
Environment["Sandbox"] = "sandbox";
|
|
7
|
+
Environment["Production"] = "production";
|
|
8
|
+
})(Environment || (Environment = {}));
|
|
9
|
+
const envToBaseUrlMapWidget = {
|
|
10
|
+
[Environment.Local]: "http://localhost:3001",
|
|
11
|
+
[Environment.Dev]: "https://v2.widget.pms.development.nowlvble.com",
|
|
12
|
+
[Environment.Sandbox]: "https://v2.widget.pms.sandbox.nowlvble.com",
|
|
13
|
+
[Environment.Production]: "https://v2.widget.pms.production.nowlvble.com",
|
|
14
|
+
};
|
|
15
|
+
const envToBaseUrlMapExperience = {
|
|
16
|
+
[Environment.Local]: "http://localhost:3001",
|
|
17
|
+
[Environment.Dev]: "https://v2.experience.pms.development.nowlvble.com",
|
|
18
|
+
[Environment.Sandbox]: "https://v2.experience.pms.sandbox.nowlvble.com",
|
|
19
|
+
[Environment.Production]: "https://v2.experience.pms.production.nowlvble.com",
|
|
20
|
+
};
|
|
21
|
+
class LvbleWidget extends HTMLElement {
|
|
22
|
+
constructor() {
|
|
23
|
+
super();
|
|
24
|
+
Object.defineProperty(this, "_iframe", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: void 0
|
|
29
|
+
});
|
|
30
|
+
this.attachShadow({ mode: "open" });
|
|
31
|
+
this.style.minHeight = "inherit";
|
|
32
|
+
}
|
|
33
|
+
get environment() {
|
|
34
|
+
return this.getAttribute("environment");
|
|
35
|
+
}
|
|
36
|
+
set environment(val) {
|
|
37
|
+
if (val) {
|
|
38
|
+
this.setAttribute("environment", val);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.removeAttribute("environment");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
get token() {
|
|
45
|
+
return this.getAttribute("token");
|
|
46
|
+
}
|
|
47
|
+
set token(val) {
|
|
48
|
+
if (val) {
|
|
49
|
+
this.setAttribute("token", val);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.removeAttribute("token");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
connectedCallback() {
|
|
56
|
+
var _a;
|
|
57
|
+
const iframeSrc = `${envToBaseUrlMapWidget[this.environment]}?token=${this.token}&environment=${this.environment}`;
|
|
58
|
+
const iframe = document.createElement("iframe");
|
|
59
|
+
iframe.src = iframeSrc;
|
|
60
|
+
iframe.width = `100%`;
|
|
61
|
+
iframe.height = `100%`;
|
|
62
|
+
iframe.style.borderStyle = "solid";
|
|
63
|
+
iframe.style.borderRadius = "10px";
|
|
64
|
+
iframe.style.borderColor = "transparent";
|
|
65
|
+
iframe.style.minHeight = "inherit";
|
|
66
|
+
this._iframe = iframe;
|
|
67
|
+
(_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.appendChild(iframe);
|
|
68
|
+
}
|
|
69
|
+
disconnectedCallback() {
|
|
70
|
+
if (this.shadowRoot)
|
|
71
|
+
this.shadowRoot.innerHTML = "";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
customElements.define("lvble-widget", LvbleWidget);
|
|
75
|
+
let lvbleInitialized = false;
|
|
76
|
+
let eventListenerLvbleAdded = false;
|
|
77
|
+
let eventListenerOpenAdded = false;
|
|
78
|
+
let modalBackground = undefined;
|
|
79
|
+
let modalIframe = undefined;
|
|
80
|
+
const createModal = ({ modal }) => {
|
|
81
|
+
var _a;
|
|
82
|
+
const modalIframe = document.createElement("iframe");
|
|
83
|
+
const t = `calc(50dvh)`;
|
|
84
|
+
const l = `50vw`;
|
|
85
|
+
modalIframe.style.position = "absolute";
|
|
86
|
+
modalIframe.style.top = t;
|
|
87
|
+
modalIframe.style.left = l;
|
|
88
|
+
modalIframe.style.transform = `translate(-50%, -50%)`;
|
|
89
|
+
modalIframe.style.width = `min(95dvw, 360px)`;
|
|
90
|
+
modalIframe.style.height = `clamp(
|
|
91
|
+
min(75dvh, 750px),
|
|
92
|
+
${(_a = modal === null || modal === void 0 ? void 0 : modal.height) !== null && _a !== void 0 ? _a : "95dvh"},
|
|
93
|
+
min(95dvh, 750px)
|
|
94
|
+
)`;
|
|
95
|
+
modalIframe.style.backgroundColor = "white";
|
|
96
|
+
modalIframe.style.borderRadius = "10px";
|
|
97
|
+
modalIframe.style.borderStyle = "solid";
|
|
98
|
+
modalIframe.style.borderColor = "transparent";
|
|
99
|
+
modalIframe.style.borderWidth = "1px";
|
|
100
|
+
const modalBackground = document.createElement("div");
|
|
101
|
+
modalBackground.style.position = "fixed";
|
|
102
|
+
modalBackground.style.top = "0";
|
|
103
|
+
modalBackground.style.left = "0";
|
|
104
|
+
modalBackground.style.height = "100%";
|
|
105
|
+
modalBackground.style.width = "100%";
|
|
106
|
+
modalBackground.style.zIndex = "2147483647";
|
|
107
|
+
modalBackground.style.backgroundColor = "rgba(0, 0, 0, 0.5)";
|
|
108
|
+
modalBackground.appendChild(modalIframe);
|
|
109
|
+
return { modalBackground, modalIframe };
|
|
110
|
+
};
|
|
111
|
+
const lvble = (initOptions) => {
|
|
112
|
+
/**
|
|
113
|
+
* Note: you can only register for onEvent once.
|
|
114
|
+
*/
|
|
115
|
+
if (!initOptions.onEvent) {
|
|
116
|
+
throw new Error("onEvent callback is required");
|
|
117
|
+
}
|
|
118
|
+
if (!initOptions.environment) {
|
|
119
|
+
throw new Error("environment is required");
|
|
120
|
+
}
|
|
121
|
+
if (!lvbleInitialized) {
|
|
122
|
+
const result = createModal({
|
|
123
|
+
modal: initOptions.modal,
|
|
124
|
+
});
|
|
125
|
+
modalBackground = result.modalBackground;
|
|
126
|
+
modalIframe = result.modalIframe;
|
|
127
|
+
lvbleInitialized = true;
|
|
128
|
+
}
|
|
129
|
+
const l = {
|
|
130
|
+
/**
|
|
131
|
+
* This function creates a widget that can be embedded in your website.
|
|
132
|
+
*
|
|
133
|
+
* @returns A lvble widget. Note that it detects mode automagically.
|
|
134
|
+
*/
|
|
135
|
+
createWidget: (widgetOptions) => {
|
|
136
|
+
const widget = new LvbleWidget();
|
|
137
|
+
widget.environment = initOptions.environment;
|
|
138
|
+
widget.token = widgetOptions.token;
|
|
139
|
+
const messageListener = (message) => {
|
|
140
|
+
// Verify we got a valid message from the iframe.
|
|
141
|
+
if (message.origin != envToBaseUrlMapWidget[initOptions.environment]) {
|
|
142
|
+
console.debug(`Received message from unknown origin: ${message.origin}`);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const eventData = message.data;
|
|
146
|
+
if (!eventData.eventType) {
|
|
147
|
+
console.debug(`Received message without eventType: ${JSON.stringify(eventData)}`);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (eventData.eventType === "OPEN_EXPERIENCE_REQUEST") {
|
|
151
|
+
modalIframe.src = `${envToBaseUrlMapExperience[initOptions.environment]}?token=${widgetOptions.token}`;
|
|
152
|
+
l.open({ token: widgetOptions.token });
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
if (!eventListenerLvbleAdded) {
|
|
156
|
+
window.addEventListener("message", messageListener);
|
|
157
|
+
eventListenerLvbleAdded = true;
|
|
158
|
+
mixpanel.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
|
|
159
|
+
}
|
|
160
|
+
return widget;
|
|
161
|
+
},
|
|
162
|
+
/**
|
|
163
|
+
* This function opens a modal with the relevant mode.
|
|
164
|
+
* @param openOptions The options for opening the modal. See `OpenOptions` for more information.
|
|
165
|
+
*/
|
|
166
|
+
open: (openOptions) => {
|
|
167
|
+
const modeUrlMap = {
|
|
168
|
+
onboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`,
|
|
169
|
+
offboarding: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`,
|
|
170
|
+
split: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`,
|
|
171
|
+
repay: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`,
|
|
172
|
+
};
|
|
173
|
+
const modeUrl = openOptions.mode
|
|
174
|
+
? modeUrlMap[openOptions.mode]
|
|
175
|
+
: `${envToBaseUrlMapExperience[initOptions.environment]}?token=${openOptions.token}`;
|
|
176
|
+
modalIframe.src = modeUrl;
|
|
177
|
+
document.body.appendChild(modalBackground);
|
|
178
|
+
const messageListener = (message) => {
|
|
179
|
+
// Verify we got a valid message from the iframe.
|
|
180
|
+
if (message.origin != envToBaseUrlMapExperience[initOptions.environment]) {
|
|
181
|
+
console.debug(`Received message from unknown origin: ${message.origin} Expecting only ${envToBaseUrlMapExperience[initOptions.environment]}`);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const eventData = message.data;
|
|
185
|
+
if (!eventData.eventType) {
|
|
186
|
+
console.debug(`Received message without eventType: ${JSON.stringify(eventData)}`);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (eventData.eventType === "CLOSE_EXPERIENCE_REQUEST") {
|
|
190
|
+
document.body.removeChild(modalBackground);
|
|
191
|
+
initOptions.onEvent("EXPERIENCE_CLOSED", {});
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
// TODO: Consider using websocket in iframes instead of posting messages to them.
|
|
195
|
+
const iframes = document.querySelectorAll("lvble-widget");
|
|
196
|
+
iframes.forEach((w) => {
|
|
197
|
+
var _a, _b;
|
|
198
|
+
(_b = ((_a = w.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector("iframe")).contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(eventData, "*");
|
|
199
|
+
});
|
|
200
|
+
mixpanel.track("BEFORE_INVOKE_ON_EVENT", eventData);
|
|
201
|
+
initOptions.onEvent(eventData.eventType, eventData.data);
|
|
202
|
+
mixpanel.track("AFTER_INVOKE_ON_EVENT", eventData);
|
|
203
|
+
};
|
|
204
|
+
if (!eventListenerOpenAdded) {
|
|
205
|
+
window.addEventListener("message", messageListener);
|
|
206
|
+
eventListenerOpenAdded = true;
|
|
207
|
+
mixpanel.init("9ad1530a57a977ab9d4005e2ba11ab4a", { debug: true });
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
return l;
|
|
212
|
+
};
|
|
213
|
+
export const Lvble = lvble;
|
|
214
|
+
//# sourceMappingURL=lvble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lvble.js","sourceRoot":"","sources":["../../src/lib/lvble.ts"],"names":[],"mappings":"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"}
|