@braze/web-sdk 4.2.1 → 4.4.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/index.d.ts +57 -6
- package/package.json +1 -1
- package/shared-lib/braze-shared-lib.js +8 -1
- package/shared-lib/encoding-utils.js +12 -1
- package/shared-lib/event-types.js +32 -1
- package/shared-lib/guid.js +10 -1
- package/shared-lib/indexed-db-adapter.js +315 -1
- package/shared-lib/logger.js +38 -1
- package/shared-lib/supported-options.js +26 -1
- package/src/Card/card-manager-factory.js +14 -1
- package/src/Card/card-manager.js +72 -1
- package/src/Card/display/card-display.js +134 -1
- package/src/Card/index.js +5 -1
- package/src/Card/log-card-click.js +11 -1
- package/src/Card/log-card-dismissal.js +11 -1
- package/src/Card/log-card-impressions.js +13 -1
- package/src/Card/log-content-card-impressions.js +4 -1
- package/src/Card/models/banner.js +30 -1
- package/src/Card/models/captioned-image.js +32 -1
- package/src/Card/models/card.js +174 -1
- package/src/Card/models/classic-card.js +32 -1
- package/src/Card/models/control-card.js +38 -1
- package/src/Card/models/index.js +5 -1
- package/src/Card/util/card-factory.js +104 -1
- package/src/ContentCards/content-cards-provider-factory.js +20 -1
- package/src/ContentCards/content-cards-provider.js +283 -1
- package/src/ContentCards/content-cards.js +24 -1
- package/src/ContentCards/get-cached-content-cards.js +5 -1
- package/src/ContentCards/index.js +8 -1
- package/src/ContentCards/log-content-cards-displayed.js +5 -1
- package/src/ContentCards/request-content-cards-refresh.js +5 -1
- package/src/ContentCards/subscribe-to-content-cards-updates.js +14 -1
- package/src/ContentCards/ui/hide-content-cards.js +8 -1
- package/src/ContentCards/ui/show-content-cards.js +72 -1
- package/src/ContentCards/ui/toggle-content-cards.js +8 -1
- package/src/Core/add-sdk-metadata.js +27 -1
- package/src/Core/braze-sdk-metadata.js +10 -1
- package/src/Core/change-user.js +19 -1
- package/src/Core/destroy.js +5 -1
- package/src/Core/device-properties.js +9 -1
- package/src/Core/disable-sdk.js +10 -1
- package/src/Core/enable-sdk.js +8 -1
- package/src/Core/get-device-id.js +10 -1
- package/src/Core/get-user.js +4 -1
- package/src/Core/handle-braze-action.js +64 -1
- package/src/Core/index.js +23 -1
- package/src/Core/initialize.js +4 -1
- package/src/Core/is-disabled.js +4 -1
- package/src/Core/log-custom-event.js +36 -1
- package/src/Core/log-purchase.js +245 -1
- package/src/Core/open-session.js +23 -1
- package/src/Core/remove-all-subscriptions.js +4 -1
- package/src/Core/remove-subscription.js +4 -1
- package/src/Core/request-immediate-data-flush.js +4 -1
- package/src/Core/set-logger.js +4 -1
- package/src/Core/set-sdk-authentication-signature.js +9 -1
- package/src/Core/subscribe-to-sdk-authentication-failures.js +4 -1
- package/src/Core/toggle-logging.js +4 -1
- package/src/Core/wipe-data.js +15 -1
- package/src/FeatureFlags/feature-flag-factory.js +14 -0
- package/src/FeatureFlags/feature-flag.js +16 -0
- package/src/FeatureFlags/feature-flags-provider-factory.js +19 -0
- package/src/FeatureFlags/feature-flags-provider.js +94 -0
- package/src/FeatureFlags/get-all-feature-flags.js +12 -0
- package/src/FeatureFlags/get-feature-flag.js +12 -0
- package/src/FeatureFlags/index.js +4 -0
- package/src/FeatureFlags/refresh-feature-flags.js +9 -0
- package/src/FeatureFlags/subscribe-to-feature-flags-updates.js +6 -0
- package/src/Feed/feed-provider-factory.js +18 -1
- package/src/Feed/feed-provider.js +79 -1
- package/src/Feed/feed.js +20 -1
- package/src/Feed/get-cached-feed.js +5 -1
- package/src/Feed/index.js +8 -1
- package/src/Feed/log-feed-displayed.js +5 -1
- package/src/Feed/request-feed-refresh.js +5 -1
- package/src/Feed/subscribe-to-feed-updates.js +5 -1
- package/src/Feed/ui/hide-feed.js +7 -1
- package/src/Feed/ui/show-feed.js +89 -1
- package/src/Feed/ui/toggle-feed.js +8 -1
- package/src/InAppMessage/display/get-animation-effect.js +19 -1
- package/src/InAppMessage/display/html-message-to-html.js +223 -1
- package/src/InAppMessage/display/in-app-message-to-html.js +152 -1
- package/src/InAppMessage/display/modal-utils.js +68 -1
- package/src/InAppMessage/in-app-message-factory.js +145 -1
- package/src/InAppMessage/in-app-message-manager-factory.js +16 -1
- package/src/InAppMessage/in-app-message-manager.js +189 -1
- package/src/InAppMessage/index.js +14 -1
- package/src/InAppMessage/log-in-app-message-button-click.js +19 -1
- package/src/InAppMessage/log-in-app-message-click.js +16 -1
- package/src/InAppMessage/log-in-app-message-html-click.js +23 -1
- package/src/InAppMessage/log-in-app-message-impression.js +13 -1
- package/src/InAppMessage/models/control-message.js +8 -1
- package/src/InAppMessage/models/full-screen-message.js +71 -1
- package/src/InAppMessage/models/html-message.js +54 -1
- package/src/InAppMessage/models/in-app-message-button.js +40 -1
- package/src/InAppMessage/models/in-app-message.js +267 -1
- package/src/InAppMessage/models/modal-message.js +68 -1
- package/src/InAppMessage/models/slide-up-message.js +58 -1
- package/src/InAppMessage/models/templated-in-app-message.js +14 -1
- package/src/InAppMessage/subscribe-to-in-app-message.js +10 -1
- package/src/InAppMessage/ui/automatically-show-in-app-messages.js +15 -1
- package/src/InAppMessage/ui/show-in-app-message.js +170 -1
- package/src/Push/index.js +5 -1
- package/src/Push/is-push-blocked.js +5 -1
- package/src/Push/is-push-permission-granted.js +5 -1
- package/src/Push/is-push-supported.js +5 -1
- package/src/Push/push-manager-factory.js +30 -1
- package/src/Push/push-manager.js +360 -1
- package/src/Push/request-push-permission.js +8 -1
- package/src/Push/unregister-push.js +5 -1
- package/src/Push/utils/push-utils.js +34 -1
- package/src/User/index.js +1 -1
- package/src/User/user-manager.js +70 -1
- package/src/User/user.js +278 -1
- package/src/common/base-feed.js +25 -1
- package/src/common/base-provider.js +6 -1
- package/src/common/constants.js +5 -1
- package/src/common/event-logger.js +24 -1
- package/src/common/feed-display.js +200 -1
- package/src/common/translations.js +148 -1
- package/src/index.js +9 -1
- package/src/l10n/l10n-manager-factory.js +22 -1
- package/src/l10n/l10n-manager.js +21 -1
- package/src/managers/auth-manager.js +48 -1
- package/src/managers/braze-instance.js +307 -1
- package/src/managers/device-manager.js +80 -1
- package/src/managers/network-manager.js +219 -1
- package/src/managers/server-config-manager.js +88 -1
- package/src/managers/session-manager.js +68 -1
- package/src/managers/storage-manager-factory.js +35 -1
- package/src/managers/storage-manager.js +394 -1
- package/src/managers/subscription-manager.js +25 -1
- package/src/models/backend-errors.js +8 -1
- package/src/models/braze-event.js +41 -1
- package/src/models/braze-sdk-metadata.js +10 -1
- package/src/models/device.js +26 -1
- package/src/models/identifier.js +20 -1
- package/src/models/push-token.js +22 -1
- package/src/models/request-result.js +8 -1
- package/src/models/server-config.js +32 -1
- package/src/request-controller.js +288 -1
- package/src/triggers/models/custom-event-data.js +14 -1
- package/src/triggers/models/custom-event-property-data.js +21 -1
- package/src/triggers/models/filter-set.js +55 -1
- package/src/triggers/models/filter.js +98 -1
- package/src/triggers/models/in-app-message-click-data.js +25 -1
- package/src/triggers/models/purchase-data.js +14 -1
- package/src/triggers/models/purchase-property-data.js +21 -1
- package/src/triggers/models/push-click-data.js +15 -1
- package/src/triggers/models/trigger-condition.js +109 -1
- package/src/triggers/models/trigger-events.js +8 -1
- package/src/triggers/models/trigger.js +110 -1
- package/src/triggers/triggers-provider-factory.js +30 -1
- package/src/triggers/triggers-provider.js +307 -1
- package/src/ui/js/attach-css.js +12 -1
- package/src/ui/js/feed-css.js +12 -1
- package/src/ui/js/iam-css.js +12 -1
- package/src/ui/js/index.js +3 -1
- package/src/ui/js/load-font-awesome.js +13 -1
- package/src/util/base-device-parser.js +14 -1
- package/src/util/braze-actions.js +79 -1
- package/src/util/browser-detector.js +85 -1
- package/src/util/client-hints-parser.js +60 -1
- package/src/util/code-utils.js +92 -1
- package/src/util/color-utils.js +23 -1
- package/src/util/component-utils.js +26 -1
- package/src/util/date-utils.js +27 -1
- package/src/util/deprecation-utils.js +5 -1
- package/src/util/device-constants.js +14 -1
- package/src/util/dom-utils.js +87 -1
- package/src/util/key-codes.js +1 -1
- package/src/util/math.js +5 -1
- package/src/util/net.js +75 -1
- package/src/util/string-utils.js +22 -1
- package/src/util/url-utils.js +23 -1
- package/src/util/user-agent-parser.js +85 -1
- package/src/util/validation-utils.js +136 -1
- package/src/util/window-utils.js +35 -1
package/src/util/code-utils.js
CHANGED
|
@@ -1 +1,92 @@
|
|
|
1
|
-
import r from"../../shared-lib/braze-shared-lib.js";
|
|
1
|
+
import r from "../../shared-lib/braze-shared-lib.js";
|
|
2
|
+
export function values(t) {
|
|
3
|
+
const e = [];
|
|
4
|
+
for (let r in t) t.hasOwnProperty(r) && void 0 !== t[r] && e.push(t[r]);
|
|
5
|
+
return e;
|
|
6
|
+
}
|
|
7
|
+
export function validateValueIsFromEnum(t, e, n, o) {
|
|
8
|
+
const c = values(t);
|
|
9
|
+
return (
|
|
10
|
+
-1 !== c.indexOf(e) ||
|
|
11
|
+
(r.D.error(`${n} Valid values from ${o} are "${c.join('"/"')}".`), !1)
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
export function isArray(t) {
|
|
15
|
+
return Array.isArray
|
|
16
|
+
? Array.isArray(t)
|
|
17
|
+
: "[object Array]" === Object.prototype.toString.call(t);
|
|
18
|
+
}
|
|
19
|
+
export function isDate(t) {
|
|
20
|
+
return "[object Date]" === Object.prototype.toString.call(t);
|
|
21
|
+
}
|
|
22
|
+
export function isObject(t) {
|
|
23
|
+
return "[object Object]" === Object.prototype.toString.call(t);
|
|
24
|
+
}
|
|
25
|
+
export function intersection(t) {
|
|
26
|
+
null == t && (t = []);
|
|
27
|
+
const e = [],
|
|
28
|
+
r = arguments.length;
|
|
29
|
+
for (let n = 0, o = t.length; n < o; n++) {
|
|
30
|
+
const o = t[n];
|
|
31
|
+
if (-1 !== e.indexOf(o)) continue;
|
|
32
|
+
let c = 1;
|
|
33
|
+
for (c = 1; c < r && -1 !== arguments[c].indexOf(o); c++);
|
|
34
|
+
c === r && e.push(o);
|
|
35
|
+
}
|
|
36
|
+
return e;
|
|
37
|
+
}
|
|
38
|
+
export function keys(t) {
|
|
39
|
+
const e = [];
|
|
40
|
+
for (let r in t) t.hasOwnProperty(r) && e.push(r);
|
|
41
|
+
return e;
|
|
42
|
+
}
|
|
43
|
+
export function isEqual(t, e) {
|
|
44
|
+
if (t === e) return 0 !== t || 1 / t == 1 / e;
|
|
45
|
+
if (null == t || null == e) return t === e;
|
|
46
|
+
const r = t.toString();
|
|
47
|
+
if (r !== e.toString()) return !1;
|
|
48
|
+
switch (r) {
|
|
49
|
+
case "[object RegExp]":
|
|
50
|
+
case "[object String]":
|
|
51
|
+
return "" + t == "" + e;
|
|
52
|
+
case "[object Number]":
|
|
53
|
+
return +t != +t ? +e != +e : 0 == +t ? 1 / +t == 1 / e : +t == +e;
|
|
54
|
+
case "[object Date]":
|
|
55
|
+
case "[object Boolean]":
|
|
56
|
+
return +t == +e;
|
|
57
|
+
}
|
|
58
|
+
const n = "[object Array]" === r;
|
|
59
|
+
if (!n) {
|
|
60
|
+
if ("object" != typeof t || "object" != typeof e) return !1;
|
|
61
|
+
const r = t.constructor,
|
|
62
|
+
n = e.constructor;
|
|
63
|
+
if (
|
|
64
|
+
r !== n &&
|
|
65
|
+
!(
|
|
66
|
+
"function" == typeof r &&
|
|
67
|
+
r instanceof r &&
|
|
68
|
+
"function" == typeof n &&
|
|
69
|
+
n instanceof n
|
|
70
|
+
) &&
|
|
71
|
+
"constructor" in t &&
|
|
72
|
+
"constructor" in e
|
|
73
|
+
)
|
|
74
|
+
return !1;
|
|
75
|
+
}
|
|
76
|
+
const o = [],
|
|
77
|
+
c = [];
|
|
78
|
+
let i = o.length;
|
|
79
|
+
for (; i--; ) if (o[i] === t) return c[i] === e;
|
|
80
|
+
if ((o.push(t), c.push(e), n)) {
|
|
81
|
+
if (((i = t.length), i !== e.length)) return !1;
|
|
82
|
+
for (; i--; ) if (!isEqual(t[i], e[i], o, c)) return !1;
|
|
83
|
+
} else {
|
|
84
|
+
let r,
|
|
85
|
+
n = keys(t);
|
|
86
|
+
if (((i = n.length), keys(e).length !== i)) return !1;
|
|
87
|
+
for (; i--; )
|
|
88
|
+
if (((r = n[i]), !e.hasOwnProperty(r) || !isEqual(t[r], e[r], o, c)))
|
|
89
|
+
return !1;
|
|
90
|
+
}
|
|
91
|
+
return o.pop(), c.pop(), !0;
|
|
92
|
+
}
|
package/src/util/color-utils.js
CHANGED
|
@@ -1 +1,23 @@
|
|
|
1
|
-
import
|
|
1
|
+
import ot from "./browser-detector.js";
|
|
2
|
+
export function isTransparent(r) {
|
|
3
|
+
return (r = parseInt(r)), !isNaN(r) && (4278190080 & r) >>> 24 == 0;
|
|
4
|
+
}
|
|
5
|
+
export function toRgba(r, t) {
|
|
6
|
+
if (((r = parseInt(r)), isNaN(r))) return "";
|
|
7
|
+
(t = parseFloat(t)), isNaN(t) && (t = 1);
|
|
8
|
+
const n = 255 & (r >>>= 0),
|
|
9
|
+
e = (65280 & r) >>> 8,
|
|
10
|
+
o = (16711680 & r) >>> 16,
|
|
11
|
+
a = ((4278190080 & r) >>> 24) / 255;
|
|
12
|
+
return ot.Og()
|
|
13
|
+
? "rgba(" + [o, e, n, a * t].join(",") + ")"
|
|
14
|
+
: "rgb(" + [o, e, n].join(",") + ")";
|
|
15
|
+
}
|
|
16
|
+
export function toRgb(r) {
|
|
17
|
+
if (((r = parseInt(r)), isNaN(r))) return "";
|
|
18
|
+
return (
|
|
19
|
+
"rgb(" +
|
|
20
|
+
[(16711680 & (r >>>= 0)) >>> 16, (65280 & r) >>> 8, 255 & r].join(",") +
|
|
21
|
+
")"
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -1 +1,26 @@
|
|
|
1
|
-
import{addPassiveEventListener as oe,buildSvg as ae}from"./dom-utils.js";
|
|
1
|
+
import { addPassiveEventListener as oe, buildSvg as ae } from "./dom-utils.js";
|
|
2
|
+
import { KeyCodes as at } from "./key-codes.js";
|
|
3
|
+
export function createCloseButton(t, o, e) {
|
|
4
|
+
const n = document.createElement("button");
|
|
5
|
+
n.setAttribute("aria-label", t),
|
|
6
|
+
n.setAttribute("tabindex", "0"),
|
|
7
|
+
n.setAttribute("role", "button"),
|
|
8
|
+
oe(n, "touchstart", () => {}),
|
|
9
|
+
(n.className = "ab-close-button");
|
|
10
|
+
const r = ae(
|
|
11
|
+
"0 0 15 15",
|
|
12
|
+
"M15 1.5L13.5 0l-6 6-6-6L0 1.5l6 6-6 6L1.5 15l6-6 6 6 1.5-1.5-6-6 6-6z",
|
|
13
|
+
o
|
|
14
|
+
);
|
|
15
|
+
return (
|
|
16
|
+
n.appendChild(r),
|
|
17
|
+
n.addEventListener("keydown", t => {
|
|
18
|
+
(t.keyCode !== at.fo && t.keyCode !== at.co) ||
|
|
19
|
+
(e(), t.stopPropagation());
|
|
20
|
+
}),
|
|
21
|
+
(n.onclick = t => {
|
|
22
|
+
e(), t.stopPropagation();
|
|
23
|
+
}),
|
|
24
|
+
n
|
|
25
|
+
);
|
|
26
|
+
}
|
package/src/util/date-utils.js
CHANGED
|
@@ -1 +1,27 @@
|
|
|
1
|
-
import{isDate as yt}from"./code-utils.js";
|
|
1
|
+
import { isDate as yt } from "./code-utils.js";
|
|
2
|
+
export function convertMsToSeconds(e, n) {
|
|
3
|
+
let t = e / 1e3;
|
|
4
|
+
return n && (t = Math.floor(t)), t;
|
|
5
|
+
}
|
|
6
|
+
export function convertSecondsToMs(e) {
|
|
7
|
+
return 1e3 * e;
|
|
8
|
+
}
|
|
9
|
+
export function dateFromUnixTimestamp(e) {
|
|
10
|
+
const n = parseInt(e);
|
|
11
|
+
return null == e || isNaN(n) ? null : new Date(1e3 * n);
|
|
12
|
+
}
|
|
13
|
+
export function toValidBackendTimeString(e) {
|
|
14
|
+
return null != e && yt(e) ? e.toISOString().replace(/\.[0-9]{3}Z$/, "") : e;
|
|
15
|
+
}
|
|
16
|
+
export function rehydrateDateAfterJsonization(e) {
|
|
17
|
+
return null == e || "" === e ? null : new Date(e);
|
|
18
|
+
}
|
|
19
|
+
export function timestampOrNow(e) {
|
|
20
|
+
return null == e || "" === e ? new Date().valueOf() : e;
|
|
21
|
+
}
|
|
22
|
+
export function secondsAgo(e) {
|
|
23
|
+
return (new Date().valueOf() - e.valueOf()) / 1e3;
|
|
24
|
+
}
|
|
25
|
+
export function secondsInTheFuture(e) {
|
|
26
|
+
return (e.valueOf() - new Date().valueOf()) / 1e3;
|
|
27
|
+
}
|
|
@@ -1 +1,5 @@
|
|
|
1
|
-
import r from"../../shared-lib/braze-shared-lib.js";
|
|
1
|
+
import r from "../../shared-lib/braze-shared-lib.js";
|
|
2
|
+
export function logDeprecationWarning(e, a, i) {
|
|
3
|
+
let s = `The '${e}' ${a} is deprecated.`;
|
|
4
|
+
i && (s += ` Please use '${i}' instead.`), r.D.warn(s);
|
|
5
|
+
}
|
|
@@ -1 +1,14 @@
|
|
|
1
|
-
export const Browsers=
|
|
1
|
+
export const Browsers = {
|
|
2
|
+
rE: "Chrome",
|
|
3
|
+
eE: "Edge",
|
|
4
|
+
Pg: "Internet Explorer",
|
|
5
|
+
EE: "Opera",
|
|
6
|
+
kg: "Safari",
|
|
7
|
+
oE: "Firefox"
|
|
8
|
+
};
|
|
9
|
+
export const OperatingSystems = {
|
|
10
|
+
Fg: "Android",
|
|
11
|
+
ln: "iOS",
|
|
12
|
+
jg: "Mac",
|
|
13
|
+
Dg: "Windows"
|
|
14
|
+
};
|
package/src/util/dom-utils.js
CHANGED
|
@@ -1 +1,87 @@
|
|
|
1
|
-
export function _isInView(t,
|
|
1
|
+
export function _isInView(t, n, e, s) {
|
|
2
|
+
if (null == t) return !1;
|
|
3
|
+
(n = n || !1), (e = e || !1);
|
|
4
|
+
const i = t.getBoundingClientRect();
|
|
5
|
+
return (
|
|
6
|
+
null != i &&
|
|
7
|
+
((i.top >= 0 &&
|
|
8
|
+
i.top <= (window.innerHeight || document.documentElement.clientHeight)) ||
|
|
9
|
+
!n) &&
|
|
10
|
+
(i.left >= 0 || !s) &&
|
|
11
|
+
((i.bottom >= 0 &&
|
|
12
|
+
i.bottom <=
|
|
13
|
+
(window.innerHeight || document.documentElement.clientHeight)) ||
|
|
14
|
+
!e) &&
|
|
15
|
+
(i.right <= (window.innerWidth || document.documentElement.clientWidth) ||
|
|
16
|
+
!s)
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
export const DOMUtils = { wu: null, eo: _isInView };
|
|
20
|
+
export const DIRECTIONS = { He: "up", Je: "down", ot: "left", et: "right" };
|
|
21
|
+
export function supportsPassive() {
|
|
22
|
+
if (null == DOMUtils.wu) {
|
|
23
|
+
DOMUtils.wu = !1;
|
|
24
|
+
try {
|
|
25
|
+
const t = Object.defineProperty({}, "passive", {
|
|
26
|
+
get: () => {
|
|
27
|
+
DOMUtils.wu = !0;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
window.addEventListener("testPassive", null, t),
|
|
31
|
+
window.removeEventListener("testPassive", null, t);
|
|
32
|
+
} catch (t) {}
|
|
33
|
+
}
|
|
34
|
+
return DOMUtils.wu;
|
|
35
|
+
}
|
|
36
|
+
export function addPassiveEventListener(t, n, e) {
|
|
37
|
+
t.addEventListener(n, e, !!supportsPassive() && { passive: !0 });
|
|
38
|
+
}
|
|
39
|
+
export function topIsInView(t) {
|
|
40
|
+
return DOMUtils.eo(t, !0, !1, !1);
|
|
41
|
+
}
|
|
42
|
+
export function bottomIsInView(t) {
|
|
43
|
+
return DOMUtils.eo(t, !1, !0, !1);
|
|
44
|
+
}
|
|
45
|
+
export function clickElement(t) {
|
|
46
|
+
if (t.onclick) {
|
|
47
|
+
const n = document.createEvent("MouseEvents");
|
|
48
|
+
n.initEvent("click", !0, !0), t.onclick.apply(t, [n]);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export function detectSwipe(t, n, e) {
|
|
52
|
+
let s = null,
|
|
53
|
+
i = null;
|
|
54
|
+
addPassiveEventListener(t, "touchstart", t => {
|
|
55
|
+
(s = t.touches[0].clientX), (i = t.touches[0].clientY);
|
|
56
|
+
}),
|
|
57
|
+
addPassiveEventListener(t, "touchmove", o => {
|
|
58
|
+
if (null == s || null == i) return;
|
|
59
|
+
const l = s - o.touches[0].clientX,
|
|
60
|
+
u = i - o.touches[0].clientY;
|
|
61
|
+
Math.abs(l) > Math.abs(u) && Math.abs(l) >= 25
|
|
62
|
+
? (((l > 0 && n === DIRECTIONS.ot) || (l < 0 && n === DIRECTIONS.et)) &&
|
|
63
|
+
e(o),
|
|
64
|
+
(s = null),
|
|
65
|
+
(i = null))
|
|
66
|
+
: Math.abs(u) >= 25 &&
|
|
67
|
+
(((u > 0 &&
|
|
68
|
+
n === DIRECTIONS.He &&
|
|
69
|
+
t.scrollTop === t.scrollHeight - t.offsetHeight) ||
|
|
70
|
+
(u < 0 && n === DIRECTIONS.Je && 0 === t.scrollTop)) &&
|
|
71
|
+
e(o),
|
|
72
|
+
(s = null),
|
|
73
|
+
(i = null));
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
export function buildSvg(t, n, e) {
|
|
77
|
+
const s = "http://www.w3.org/2000/svg",
|
|
78
|
+
i = document.createElementNS(s, "svg");
|
|
79
|
+
i.setAttribute("viewBox", t), i.setAttribute("xmlns", s);
|
|
80
|
+
const o = document.createElementNS(s, "path");
|
|
81
|
+
return (
|
|
82
|
+
o.setAttribute("d", n),
|
|
83
|
+
null != e && o.setAttribute("fill", e),
|
|
84
|
+
i.appendChild(o),
|
|
85
|
+
i
|
|
86
|
+
);
|
|
87
|
+
}
|
package/src/util/key-codes.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const KeyCodes={fo:32,oo:9,co:13,
|
|
1
|
+
export const KeyCodes = { fo: 32, oo: 9, co: 13, Vi: 27 };
|
package/src/util/math.js
CHANGED
package/src/util/net.js
CHANGED
|
@@ -1 +1,75 @@
|
|
|
1
|
-
import r from"../../shared-lib/braze-shared-lib.js";
|
|
1
|
+
import r from "../../shared-lib/braze-shared-lib.js";
|
|
2
|
+
import qt from "../models/backend-errors.js";
|
|
3
|
+
const b = {
|
|
4
|
+
Hs: t => {
|
|
5
|
+
let e, o;
|
|
6
|
+
try {
|
|
7
|
+
const n = () => {
|
|
8
|
+
r.D.error("This browser does not have any supported ajax options!");
|
|
9
|
+
};
|
|
10
|
+
if (
|
|
11
|
+
(window.XMLHttpRequest ? ((e = new XMLHttpRequest()), e || n()) : n(),
|
|
12
|
+
null != e)
|
|
13
|
+
) {
|
|
14
|
+
const r = () => {
|
|
15
|
+
"function" == typeof t.error && t.error(e.status),
|
|
16
|
+
"function" == typeof t.Ll && t.Ll(!1);
|
|
17
|
+
};
|
|
18
|
+
(e.onload = () => {
|
|
19
|
+
let o = !1;
|
|
20
|
+
if (4 === e.readyState)
|
|
21
|
+
if (
|
|
22
|
+
((o = (e.status >= 200 && e.status < 300) || 304 === e.status), o)
|
|
23
|
+
) {
|
|
24
|
+
if ("function" == typeof t.S) {
|
|
25
|
+
let o, r;
|
|
26
|
+
try {
|
|
27
|
+
(o = JSON.parse(e.responseText)),
|
|
28
|
+
(r = e.getAllResponseHeaders());
|
|
29
|
+
} catch (o) {
|
|
30
|
+
const n = {
|
|
31
|
+
error: "" === e.responseText ? qt.la : qt.fa,
|
|
32
|
+
response: e.responseText
|
|
33
|
+
};
|
|
34
|
+
t.S(n, r);
|
|
35
|
+
}
|
|
36
|
+
o && t.S(o, r);
|
|
37
|
+
}
|
|
38
|
+
"function" == typeof t.Ll && t.Ll(!0);
|
|
39
|
+
} else r();
|
|
40
|
+
}),
|
|
41
|
+
(e.onerror = () => {
|
|
42
|
+
r();
|
|
43
|
+
}),
|
|
44
|
+
(e.ontimeout = () => {
|
|
45
|
+
r();
|
|
46
|
+
}),
|
|
47
|
+
(o = JSON.stringify(t.data)),
|
|
48
|
+
e.open("POST", t.url, !0),
|
|
49
|
+
e.setRequestHeader("Content-type", "application/json"),
|
|
50
|
+
e.setRequestHeader("X-Requested-With", "XMLHttpRequest");
|
|
51
|
+
const n = t.headers || [];
|
|
52
|
+
for (const t of n) e.setRequestHeader(t[0], t[1]);
|
|
53
|
+
e.send(o);
|
|
54
|
+
}
|
|
55
|
+
} catch (t) {
|
|
56
|
+
r.D.error(`Network request error: ${t.message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
export const readResponseHeaders = t => {
|
|
61
|
+
let e = {};
|
|
62
|
+
const o = t.toString().split("\r\n");
|
|
63
|
+
if (!o) return e;
|
|
64
|
+
let r, n;
|
|
65
|
+
for (const t of o)
|
|
66
|
+
t &&
|
|
67
|
+
((r = t
|
|
68
|
+
.slice(0, t.indexOf(":"))
|
|
69
|
+
.toLowerCase()
|
|
70
|
+
.trim()),
|
|
71
|
+
(n = t.slice(t.indexOf(":") + 1).trim()),
|
|
72
|
+
(e[r] = n));
|
|
73
|
+
return e;
|
|
74
|
+
};
|
|
75
|
+
export default b;
|
package/src/util/string-utils.js
CHANGED
|
@@ -1 +1,22 @@
|
|
|
1
|
-
import r from"../../shared-lib/braze-shared-lib.js";
|
|
1
|
+
import r from "../../shared-lib/braze-shared-lib.js";
|
|
2
|
+
export function getByteLength(e) {
|
|
3
|
+
let t = e.length;
|
|
4
|
+
for (let r = e.length - 1; r >= 0; r--) {
|
|
5
|
+
const n = e.charCodeAt(r);
|
|
6
|
+
n > 127 && n <= 2047 ? t++ : n > 2047 && n <= 65535 && (t += 2),
|
|
7
|
+
n >= 56320 && n <= 57343 && r--;
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
}
|
|
11
|
+
export function decodeBrazeActions(e) {
|
|
12
|
+
try {
|
|
13
|
+
e = e.replace(/-/g, "+").replace(/_/g, "/");
|
|
14
|
+
let t = window.atob(e),
|
|
15
|
+
r = new Uint8Array(t.length);
|
|
16
|
+
for (let e = 0; e < t.length; e++) r[e] = t.charCodeAt(e);
|
|
17
|
+
let n = new Uint16Array(r.buffer);
|
|
18
|
+
return String.fromCharCode(...n);
|
|
19
|
+
} catch (e) {
|
|
20
|
+
return r.D.error("Unable to decode Base64: " + e), null;
|
|
21
|
+
}
|
|
22
|
+
}
|
package/src/util/url-utils.js
CHANGED
|
@@ -1 +1,23 @@
|
|
|
1
|
-
export function parseQueryStringKeyValues(t)
|
|
1
|
+
export function parseQueryStringKeyValues(t) {
|
|
2
|
+
null == t && (t = "");
|
|
3
|
+
const r = t
|
|
4
|
+
.split("?")
|
|
5
|
+
.slice(1)
|
|
6
|
+
.join("?"),
|
|
7
|
+
n = {};
|
|
8
|
+
if (null != r) {
|
|
9
|
+
const t = r.split("&");
|
|
10
|
+
for (let r = 0; r < t.length; r++) {
|
|
11
|
+
const a = t[r].split("=");
|
|
12
|
+
"" !== a[0] && (n[a[0]] = a[1]);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return n;
|
|
16
|
+
}
|
|
17
|
+
export function isURIJavascriptOrData(t) {
|
|
18
|
+
return !(
|
|
19
|
+
!t ||
|
|
20
|
+
(0 !== (t = t.toString().toLowerCase()).lastIndexOf("javascript:", 0) &&
|
|
21
|
+
0 !== t.lastIndexOf("data:", 0))
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -1 +1,85 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Se from "./base-device-parser.js";
|
|
2
|
+
import { Browsers as ri, OperatingSystems as rt } from "./device-constants.js";
|
|
3
|
+
export default class ni extends Se {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(), (this.Su = ni.Vu(navigator.userAgent || ""));
|
|
6
|
+
}
|
|
7
|
+
tf() {
|
|
8
|
+
return this.Su[0] || "Unknown Browser";
|
|
9
|
+
}
|
|
10
|
+
ef() {
|
|
11
|
+
return this.Su[1] || "Unknown Version";
|
|
12
|
+
}
|
|
13
|
+
Yo(r) {
|
|
14
|
+
for (let e = 0; e < r.length; e++) {
|
|
15
|
+
let n = r[e].string,
|
|
16
|
+
i = ni.rf(n, r[e]);
|
|
17
|
+
if (i)
|
|
18
|
+
return (
|
|
19
|
+
i === rt.jg && navigator.maxTouchPoints > 1 && (i = rt.ln),
|
|
20
|
+
Promise.resolve(i)
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
return Promise.resolve(navigator.platform);
|
|
24
|
+
}
|
|
25
|
+
static Vu(r) {
|
|
26
|
+
let e,
|
|
27
|
+
n =
|
|
28
|
+
r.match(
|
|
29
|
+
/(samsungbrowser|tizen|roku|konqueror|icab|crios|opera|ucbrowser|chrome|safari|firefox|camino|msie|trident(?=\/))\/?\s*(\.?\d+(\.\d+)*)/i
|
|
30
|
+
) || [];
|
|
31
|
+
if (/trident/i.test(n[1]))
|
|
32
|
+
return (
|
|
33
|
+
(e = /\brv[ :]+(\.?\d+(\.\d+)*)/g.exec(r) || []), [ri.Pg, e[1] || ""]
|
|
34
|
+
);
|
|
35
|
+
if (-1 !== r.indexOf("(Web0S; Linux/SmartTV)"))
|
|
36
|
+
return ["LG Smart TV", null];
|
|
37
|
+
if (-1 !== r.indexOf("CrKey")) return ["Chromecast", null];
|
|
38
|
+
if (
|
|
39
|
+
-1 !== r.indexOf("BRAVIA") ||
|
|
40
|
+
-1 !== r.indexOf("SonyCEBrowser") ||
|
|
41
|
+
-1 !== r.indexOf("SonyDTV")
|
|
42
|
+
)
|
|
43
|
+
return ["Sony Smart TV", null];
|
|
44
|
+
if (-1 !== r.indexOf("PhilipsTV")) return ["Philips Smart TV", null];
|
|
45
|
+
if (r.match(/\b(Roku)\b/)) return ["Roku", null];
|
|
46
|
+
if (r.match(/\bAFTM\b/)) return ["Amazon Fire Stick", null];
|
|
47
|
+
if (
|
|
48
|
+
n[1] === ri.rE &&
|
|
49
|
+
((e = r.match(/\b(OPR|Edge|EdgA|Edg|UCBrowser)\/(\.?\d+(\.\d+)*)/)),
|
|
50
|
+
null != e)
|
|
51
|
+
)
|
|
52
|
+
return (
|
|
53
|
+
(e = e.slice(1)),
|
|
54
|
+
(e[0] = e[0].replace("OPR", ri.EE)),
|
|
55
|
+
(e[0] = e[0].replace("EdgA", ri.eE)),
|
|
56
|
+
"Edg" === e[0] && (e[0] = ri.eE),
|
|
57
|
+
[e[0], e[1]]
|
|
58
|
+
);
|
|
59
|
+
if (
|
|
60
|
+
n[1] === ri.kg &&
|
|
61
|
+
((e = r.match(/\b(EdgiOS)\/(\.?\d+(\.\d+)*)/)), null != e)
|
|
62
|
+
)
|
|
63
|
+
return (
|
|
64
|
+
(e = e.slice(1)), (e[0] = e[0].replace("EdgiOS", ri.eE)), [e[0], e[1]]
|
|
65
|
+
);
|
|
66
|
+
if (
|
|
67
|
+
((n = n[2] ? [n[1], n[2]] : [null, null]),
|
|
68
|
+
n[0] === ri.kg &&
|
|
69
|
+
null != (e = r.match(/version\/(\.?\d+(\.\d+)*)/i)) &&
|
|
70
|
+
n.splice(1, 1, e[1]),
|
|
71
|
+
null != (e = r.match(/\b(UCBrowser)\/(\.?\d+(\.\d+)*)/)) &&
|
|
72
|
+
n.splice(1, 1, e[2]),
|
|
73
|
+
n[0] === ri.EE && null != (e = r.match(/mini\/(\.?\d+(\.\d+)*)/i)))
|
|
74
|
+
)
|
|
75
|
+
return ["Opera Mini", e[1] || ""];
|
|
76
|
+
if (n[0]) {
|
|
77
|
+
const r = n[0].toLowerCase();
|
|
78
|
+
"msie" === r && (n[0] = ri.Pg),
|
|
79
|
+
"crios" === r && (n[0] = ri.rE),
|
|
80
|
+
"tizen" === r && ((n[0] = "Samsung Smart TV"), (n[1] = null)),
|
|
81
|
+
"samsungbrowser" === r && (n[0] = "Samsung Browser");
|
|
82
|
+
}
|
|
83
|
+
return n;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -1 +1,136 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
isArray as p,
|
|
3
|
+
isDate as yt,
|
|
4
|
+
isObject as Jt,
|
|
5
|
+
keys as rr
|
|
6
|
+
} from "./code-utils.js";
|
|
7
|
+
import { getByteLength as U } from "./string-utils.js";
|
|
8
|
+
import r from "../../shared-lib/braze-shared-lib.js";
|
|
9
|
+
import { toValidBackendTimeString as Nt } from "./date-utils.js";
|
|
10
|
+
import { BRAZE_ACTIONS as _ } from "./braze-actions.js";
|
|
11
|
+
export const CUSTOM_DATA_REGEX = /^[^\x00-\x1F\x22]+$/;
|
|
12
|
+
export const EMAIL_ADDRESS_REGEX = new RegExp(/^.+@.+\..+$/);
|
|
13
|
+
export const CUSTOM_PROPERTIES_MAX_SIZE_BYTES = 51200;
|
|
14
|
+
export const CUSTOM_PROPERTIES_MAX_SIZE_STRING = "50KB";
|
|
15
|
+
export const BRAZE_ACTION_URI_REGEX = /^brazeActions:\/\/v\d+\//;
|
|
16
|
+
export function _validatePropertyType(e) {
|
|
17
|
+
const t = typeof e;
|
|
18
|
+
return (
|
|
19
|
+
null == e || "number" === t || "boolean" === t || yt(e) || "string" === t
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
export function _validateNestedProperties(e, t) {
|
|
23
|
+
if (p(e) && p(t)) {
|
|
24
|
+
for (let r = 0; r < e.length && r < t.length; r++)
|
|
25
|
+
if (
|
|
26
|
+
(yt(e[r]) && (t[r] = Nt(e[r])), !_validateNestedProperties(e[r], t[r]))
|
|
27
|
+
)
|
|
28
|
+
return !1;
|
|
29
|
+
} else {
|
|
30
|
+
if (!Jt(e)) return _validatePropertyType(e);
|
|
31
|
+
for (const r of rr(e))
|
|
32
|
+
if (
|
|
33
|
+
(yt(e[r]) && (t[r] = Nt(e[r])), !_validateNestedProperties(e[r], t[r]))
|
|
34
|
+
)
|
|
35
|
+
return !1;
|
|
36
|
+
}
|
|
37
|
+
return !0;
|
|
38
|
+
}
|
|
39
|
+
export function _validateEventPropertyValue(e, t, n, o) {
|
|
40
|
+
let i;
|
|
41
|
+
return (
|
|
42
|
+
(i =
|
|
43
|
+
Jt(e) || p(e)
|
|
44
|
+
? _validateNestedProperties(e, t)
|
|
45
|
+
: _validatePropertyType(e)),
|
|
46
|
+
i || r.D.error(`Cannot ${n} because ${o} "${e}" is invalid.`),
|
|
47
|
+
i
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
export function validateStandardString(e, t, n, o) {
|
|
51
|
+
const i = "string" == typeof e || (null === e && o);
|
|
52
|
+
return i || r.D.error(`Cannot ${t} because ${n} "${e}" is invalid.`), i;
|
|
53
|
+
}
|
|
54
|
+
export function validateCustomString(e, t, n) {
|
|
55
|
+
const o =
|
|
56
|
+
null != e &&
|
|
57
|
+
"string" == typeof e &&
|
|
58
|
+
("" === e || e.match(CUSTOM_DATA_REGEX));
|
|
59
|
+
return o || r.D.error(`Cannot ${t} because ${n} "${e}" is invalid.`), o;
|
|
60
|
+
}
|
|
61
|
+
export function validateCustomProperties(e, t, n, o, i) {
|
|
62
|
+
if ((null == e && (e = {}), "object" != typeof e || p(e)))
|
|
63
|
+
return (
|
|
64
|
+
r.D.error(`${t} requires that ${n} be an object. Ignoring ${i}.`),
|
|
65
|
+
[!1, null]
|
|
66
|
+
);
|
|
67
|
+
const a = JSON.stringify(e);
|
|
68
|
+
if (U(a) > 51200)
|
|
69
|
+
return (
|
|
70
|
+
r.D.error(
|
|
71
|
+
`Could not ${o} because ${n} was greater than the max size of 50KB.`
|
|
72
|
+
),
|
|
73
|
+
[!1, null]
|
|
74
|
+
);
|
|
75
|
+
let s;
|
|
76
|
+
try {
|
|
77
|
+
s = JSON.parse(a);
|
|
78
|
+
} catch (e) {
|
|
79
|
+
return (
|
|
80
|
+
r.D.error(`Could not ${o} because ${n} did not contain valid JSON.`),
|
|
81
|
+
[!1, null]
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
for (let t in e) {
|
|
85
|
+
if (!validateCustomString(t, o, `the ${i} property name`))
|
|
86
|
+
return [!1, null];
|
|
87
|
+
const r = e[t];
|
|
88
|
+
if (null == r) {
|
|
89
|
+
delete e[t], delete s[t];
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
yt(r) && (s[t] = Nt(r));
|
|
93
|
+
if (!_validateEventPropertyValue(r, s[t], o, `the ${i} property "${t}"`))
|
|
94
|
+
return [!1, null];
|
|
95
|
+
}
|
|
96
|
+
return [!0, s];
|
|
97
|
+
}
|
|
98
|
+
export function isValidEmail(e) {
|
|
99
|
+
return (
|
|
100
|
+
"string" == typeof e && null != e.toLowerCase().match(EMAIL_ADDRESS_REGEX)
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
export function isValidBrazeActionJson(e) {
|
|
104
|
+
if (!(_.properties.type in e)) return !1;
|
|
105
|
+
switch (e[_.properties.type]) {
|
|
106
|
+
case _.types.ue:
|
|
107
|
+
if (_.properties.me in e) return !0;
|
|
108
|
+
break;
|
|
109
|
+
case _.types.logCustomEvent:
|
|
110
|
+
case _.types.setEmailNotificationSubscriptionType:
|
|
111
|
+
case _.types.setPushNotificationSubscriptionType:
|
|
112
|
+
case _.types.setCustomUserAttribute:
|
|
113
|
+
case _.types.addToSubscriptionGroup:
|
|
114
|
+
case _.types.removeFromSubscriptionGroup:
|
|
115
|
+
case _.types.addToCustomAttributeArray:
|
|
116
|
+
case _.types.removeFromCustomAttributeArray:
|
|
117
|
+
case _.types.de:
|
|
118
|
+
case _.types.pe:
|
|
119
|
+
if (_.properties.fe in e) return !0;
|
|
120
|
+
break;
|
|
121
|
+
case _.types.requestPushPermission:
|
|
122
|
+
return !0;
|
|
123
|
+
default:
|
|
124
|
+
return !1;
|
|
125
|
+
}
|
|
126
|
+
return !1;
|
|
127
|
+
}
|
|
128
|
+
export function isValidBrazeActionType(e) {
|
|
129
|
+
let t = !1;
|
|
130
|
+
return (
|
|
131
|
+
Object.keys(_.types).forEach(r => {
|
|
132
|
+
_.types[r] !== e.toString() || (t = !0);
|
|
133
|
+
}),
|
|
134
|
+
t
|
|
135
|
+
);
|
|
136
|
+
}
|