@braze/web-sdk 6.3.0 → 6.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 +35 -3
- package/package.json +1 -1
- package/shared-lib/encoding-utils.js +1 -1
- package/shared-lib/event-types.js +23 -23
- package/shared-lib/guid.js +25 -6
- package/shared-lib/indexed-db-adapter.js +7 -7
- package/shared-lib/logger.js +2 -2
- package/shared-lib/supported-options.js +22 -21
- package/src/Banner/display/banner-to-html.js +2 -2
- package/src/Banner/display/detect-banner-impressions.js +7 -7
- package/src/Banner/index.js +2 -0
- package/src/Banner/request-banners-refresh.js +6 -6
- package/src/Banner/ui/insert-banner.js +4 -4
- package/src/Card/card-manager-factory.js +5 -5
- package/src/Card/card-manager.js +4 -4
- package/src/Card/display/card-display.js +7 -7
- package/src/Card/log-card-dismissal.js +3 -3
- package/src/Card/log-content-card-click.js +3 -3
- package/src/Card/log-content-card-impressions.js +6 -6
- package/src/Card/models/card.js +7 -7
- package/src/Card/util/card-factory.js +6 -6
- package/src/ContentCards/content-cards-provider-factory.js +14 -10
- package/src/ContentCards/content-cards-provider.js +28 -28
- package/src/ContentCards/content-cards.js +4 -4
- package/src/ContentCards/get-cached-content-cards.js +2 -2
- package/src/ContentCards/request-content-cards-refresh.js +2 -2
- package/src/ContentCards/subscribe-to-content-cards-updates.js +3 -3
- package/src/ContentCards/ui/show-content-cards.js +8 -8
- package/src/Core/add-sdk-metadata.js +2 -2
- package/src/Core/change-user.js +5 -5
- package/src/Core/disable-sdk.js +3 -3
- package/src/Core/enable-sdk.js +3 -3
- package/src/Core/get-user.js +1 -1
- package/src/Core/is-disabled.js +1 -1
- package/src/Core/log-custom-event.js +9 -9
- package/src/Core/log-purchase.js +7 -7
- package/src/Core/open-session.js +11 -11
- package/src/Core/set-sdk-authentication-signature.js +2 -2
- package/src/Core/wipe-data.js +5 -5
- package/src/DUST/dust-provider-factory.js +20 -0
- package/src/DUST/dust-provider.js +288 -0
- package/src/DUST/index.js +3 -0
- package/src/DUST/subscribe-to-dust.js +24 -0
- package/src/DUST/types.js +1 -0
- package/src/FeatureFlags/feature-flags-provider-factory.js +9 -9
- package/src/FeatureFlags/feature-flags-provider.js +38 -38
- package/src/FeatureFlags/get-all-feature-flags.js +3 -3
- package/src/FeatureFlags/get-feature-flag.js +3 -3
- package/src/FeatureFlags/log-feature-flag-impression.js +5 -5
- package/src/FeatureFlags/refresh-feature-flags.js +5 -5
- package/src/FeatureFlags/subscribe-to-feature-flags-updates.js +3 -3
- package/src/InAppMessage/defer-in-app-message.js +1 -1
- package/src/InAppMessage/display/html-message-to-html.js +5 -5
- package/src/InAppMessage/display/in-app-message-to-html.js +22 -22
- package/src/InAppMessage/display/modal-utils.js +5 -5
- package/src/InAppMessage/get-deferred-in-app-message.js +1 -1
- package/src/InAppMessage/in-app-message-factory.js +4 -4
- package/src/InAppMessage/in-app-message-manager.js +80 -80
- package/src/InAppMessage/log-in-app-message-button-click.js +5 -5
- package/src/InAppMessage/log-in-app-message-click.js +5 -5
- package/src/InAppMessage/log-in-app-message-html-click.js +5 -5
- package/src/InAppMessage/log-in-app-message-impression.js +1 -1
- package/src/InAppMessage/models/control-message.js +1 -1
- package/src/InAppMessage/models/full-screen-message.js +12 -12
- package/src/InAppMessage/models/html-message.js +14 -14
- package/src/InAppMessage/models/in-app-message-button.js +4 -4
- package/src/InAppMessage/models/in-app-message.js +119 -121
- package/src/InAppMessage/models/modal-message.js +12 -12
- package/src/InAppMessage/models/slide-up-message.js +21 -21
- package/src/InAppMessage/models/templated-in-app-message.js +8 -8
- package/src/InAppMessage/subscribe-to-in-app-message.js +1 -1
- package/src/InAppMessage/ui/automatically-show-in-app-messages.js +3 -3
- package/src/InAppMessage/ui/remove-all-visible-in-app-messages.js +18 -0
- package/src/InAppMessage/ui/show-in-app-message.js +24 -24
- package/src/Push/is-push-blocked.js +2 -2
- package/src/Push/is-push-permission-granted.js +2 -2
- package/src/Push/is-push-supported.js +2 -2
- package/src/Push/push-manager-factory.js +8 -8
- package/src/Push/push-manager.js +90 -90
- package/src/Push/utils/push-utils.js +17 -17
- package/src/User/user-manager.js +12 -12
- package/src/User/user.js +48 -48
- package/src/common/constants.js +1 -0
- package/src/common/content-cards-display.js +20 -20
- package/src/common/event-logger.js +4 -4
- package/src/common/properties-base.js +16 -16
- package/src/l10n/l10n-manager-factory.js +2 -2
- package/src/l10n/l10n-manager.js +1 -1
- package/src/managers/auth-manager.js +29 -29
- package/src/managers/braze-instance.js +141 -133
- package/src/managers/device-manager.js +18 -18
- package/src/managers/network-manager.js +139 -139
- package/src/managers/server-config-manager.js +99 -82
- package/src/managers/session-manager.js +32 -32
- package/src/managers/storage-manager-factory.js +8 -8
- package/src/managers/storage-manager.js +76 -74
- package/src/managers/subscription-manager.js +10 -10
- package/src/models/backend-errors.js +5 -5
- package/src/models/braze-event.js +9 -9
- package/src/models/device.js +2 -2
- package/src/models/identifier.js +12 -12
- package/src/models/push-token.js +12 -12
- package/src/models/request-result.js +1 -1
- package/src/models/server-config.js +38 -34
- package/src/request-controller.js +136 -134
- package/src/triggers/models/custom-event-data.js +4 -4
- package/src/triggers/models/custom-event-property-data.js +5 -5
- package/src/triggers/models/filter-set.js +8 -8
- package/src/triggers/models/filter.js +30 -30
- package/src/triggers/models/in-app-message-click-data.js +1 -1
- package/src/triggers/models/purchase-data.js +1 -1
- package/src/triggers/models/purchase-property-data.js +2 -2
- package/src/triggers/models/push-click-data.js +1 -1
- package/src/triggers/models/trigger-condition.js +36 -36
- package/src/triggers/models/trigger-events.js +2 -2
- package/src/triggers/models/trigger.js +15 -15
- package/src/triggers/triggers-provider-factory.js +3 -3
- package/src/triggers/triggers-provider.js +25 -25
- package/src/ui/js/attach-css.js +3 -3
- package/src/ui/js/load-font-awesome.js +2 -2
- package/src/util/base-device-parser.js +3 -3
- package/src/util/braze-actions.js +3 -3
- package/src/util/browser-detector.js +13 -13
- package/src/util/client-hints-parser.js +6 -6
- package/src/util/component-utils.js +1 -1
- package/src/util/dom-utils.js +10 -10
- package/src/util/key-codes.js +1 -1
- package/src/util/net.js +1 -1
- package/src/util/request-header-utils.js +22 -22
- package/src/util/user-agent-parser.js +14 -14
- package/src/util/validation-utils.js +14 -13
- package/src/util/window-utils.js +1 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import ai from "./client-hints-parser.js";
|
|
2
2
|
import gi from "./user-agent-parser.js";
|
|
3
|
-
import { Browsers as
|
|
4
|
-
class
|
|
3
|
+
import { Browsers as di, OperatingSystems as so } from "./device-constants.js";
|
|
4
|
+
class Si {
|
|
5
5
|
constructor() {
|
|
6
6
|
let t;
|
|
7
7
|
(t =
|
|
8
|
-
navigator.userAgent.toLowerCase().includes(
|
|
8
|
+
navigator.userAgent.toLowerCase().includes(di.Sg.toLowerCase()) ||
|
|
9
9
|
!navigator.userAgentData
|
|
10
10
|
? gi
|
|
11
11
|
: ai),
|
|
@@ -14,7 +14,7 @@ class di {
|
|
|
14
14
|
(this.browser = this.vg.ef()),
|
|
15
15
|
(this.version = this.vg.ff()),
|
|
16
16
|
(this.OS = null),
|
|
17
|
-
this.
|
|
17
|
+
this.rc().then((t) => (this.OS = t));
|
|
18
18
|
const i = navigator;
|
|
19
19
|
(this.language = (
|
|
20
20
|
i.userLanguage ||
|
|
@@ -23,18 +23,18 @@ class di {
|
|
|
23
23
|
i.systemLanguage ||
|
|
24
24
|
""
|
|
25
25
|
).toLowerCase()),
|
|
26
|
-
(this.
|
|
26
|
+
(this.Ja = Si.xg(this.userAgent));
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
return this.browser ===
|
|
28
|
+
fE() {
|
|
29
|
+
return this.browser === di.Bg;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
nc() {
|
|
32
32
|
return this.OS || null;
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
rc() {
|
|
35
35
|
return this.OS
|
|
36
36
|
? Promise.resolve(this.OS)
|
|
37
|
-
: this.vg.
|
|
37
|
+
: this.vg.rc(Si.Og).then((t) => ((this.OS = t), t));
|
|
38
38
|
}
|
|
39
39
|
static xg(t) {
|
|
40
40
|
t = t.toLowerCase();
|
|
@@ -63,7 +63,7 @@ class di {
|
|
|
63
63
|
return !1;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
Si.Og = [
|
|
67
67
|
{ string: navigator.platform, cf: "Win", identity: so.kg },
|
|
68
68
|
{ string: navigator.platform, cf: "Mac", identity: so.Pg },
|
|
69
69
|
{ string: navigator.platform, cf: "BlackBerry", identity: "BlackBerry" },
|
|
@@ -91,5 +91,5 @@ di.Og = [
|
|
|
91
91
|
{ string: navigator.userAgent, cf: ["Android"], identity: so.Dg },
|
|
92
92
|
{ string: navigator.platform, cf: "Linux", identity: "Linux" },
|
|
93
93
|
];
|
|
94
|
-
const ro = new
|
|
95
|
-
export { ro as default,
|
|
94
|
+
const ro = new Si();
|
|
95
|
+
export { ro as default, Si as BrowserDetector };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import ge from "./base-device-parser.js";
|
|
2
|
-
import { Browsers as
|
|
2
|
+
import { Browsers as di } from "./device-constants.js";
|
|
3
3
|
export default class ai extends ge {
|
|
4
4
|
constructor() {
|
|
5
5
|
if (
|
|
@@ -9,7 +9,7 @@ export default class ai extends ge {
|
|
|
9
9
|
(this.version = null),
|
|
10
10
|
this.userAgentData)
|
|
11
11
|
) {
|
|
12
|
-
const t = this.
|
|
12
|
+
const t = this.Vc();
|
|
13
13
|
(this.browser = t.browser || "Unknown Browser"),
|
|
14
14
|
(this.version = t.version || "Unknown Version");
|
|
15
15
|
}
|
|
@@ -21,7 +21,7 @@ export default class ai extends ge {
|
|
|
21
21
|
ff() {
|
|
22
22
|
return this.version;
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
rc(t) {
|
|
25
25
|
if (this.OS) return Promise.resolve(this.OS);
|
|
26
26
|
const s = (s) => {
|
|
27
27
|
for (let r = 0; r < t.length; r++) {
|
|
@@ -36,12 +36,12 @@ export default class ai extends ge {
|
|
|
36
36
|
.then((t) => (t.platform ? s(t.platform) : navigator.platform))
|
|
37
37
|
.catch(() => navigator.platform);
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
Vc() {
|
|
40
40
|
const t = {},
|
|
41
41
|
s = this.userAgentData.brands;
|
|
42
42
|
if (s && s.length)
|
|
43
43
|
for (const r of s) {
|
|
44
|
-
const s = this.
|
|
44
|
+
const s = this.Gc(di),
|
|
45
45
|
i = r.brand.match(s);
|
|
46
46
|
if (i && i.length > 0) {
|
|
47
47
|
(t.browser = i[0]), (t.version = r.version);
|
|
@@ -50,7 +50,7 @@ export default class ai extends ge {
|
|
|
50
50
|
}
|
|
51
51
|
return t;
|
|
52
52
|
}
|
|
53
|
-
|
|
53
|
+
Gc(t) {
|
|
54
54
|
const s = [];
|
|
55
55
|
for (const r in t) {
|
|
56
56
|
const i = r;
|
|
@@ -16,7 +16,7 @@ export function createCloseButton(t, o, e, r = "ltr") {
|
|
|
16
16
|
n.appendChild(l),
|
|
17
17
|
l.setAttribute("aria-hidden", "true"),
|
|
18
18
|
n.addEventListener("keydown", (t) => {
|
|
19
|
-
(t.keyCode !== ie.
|
|
19
|
+
(t.keyCode !== ie.do && t.keyCode !== ie.lo) ||
|
|
20
20
|
(e(), t.stopPropagation());
|
|
21
21
|
}),
|
|
22
22
|
(n.onclick = (t) => {
|
package/src/util/dom-utils.js
CHANGED
|
@@ -18,15 +18,15 @@ export function _isInView(t, n = !1, e = !1, s = !1) {
|
|
|
18
18
|
!s)
|
|
19
19
|
);
|
|
20
20
|
}
|
|
21
|
-
export const DOMUtils = {
|
|
22
|
-
export const DIRECTIONS = {
|
|
21
|
+
export const DOMUtils = { Wc: null, Do: _isInView };
|
|
22
|
+
export const DIRECTIONS = { xo: "up", Co: "down", Zt: "left", ae: "right" };
|
|
23
23
|
export function supportsPassive() {
|
|
24
|
-
if (null == DOMUtils.
|
|
25
|
-
DOMUtils.
|
|
24
|
+
if (null == DOMUtils.Wc) {
|
|
25
|
+
DOMUtils.Wc = !1;
|
|
26
26
|
try {
|
|
27
27
|
const t = Object.defineProperty({}, "passive", {
|
|
28
28
|
get: () => {
|
|
29
|
-
DOMUtils.
|
|
29
|
+
DOMUtils.Wc = !0;
|
|
30
30
|
},
|
|
31
31
|
});
|
|
32
32
|
window.addEventListener("testPassive", () => {}, t),
|
|
@@ -35,16 +35,16 @@ export function supportsPassive() {
|
|
|
35
35
|
E.error(si(t));
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
return DOMUtils.
|
|
38
|
+
return DOMUtils.Wc;
|
|
39
39
|
}
|
|
40
40
|
export function addPassiveEventListener(t, n, e = () => {}) {
|
|
41
41
|
t.addEventListener(n, e, !!supportsPassive() && { passive: !0 });
|
|
42
42
|
}
|
|
43
43
|
export function topIsInView(t) {
|
|
44
|
-
return DOMUtils.
|
|
44
|
+
return DOMUtils.Do(t, !0, !1, !1);
|
|
45
45
|
}
|
|
46
46
|
export function bottomIsInView(t) {
|
|
47
|
-
return DOMUtils.
|
|
47
|
+
return DOMUtils.Do(t, !1, !0, !1);
|
|
48
48
|
}
|
|
49
49
|
export function clickElement(t) {
|
|
50
50
|
if (t.onclick) {
|
|
@@ -69,9 +69,9 @@ export function detectSwipe(t, n, e) {
|
|
|
69
69
|
(i = null))
|
|
70
70
|
: Math.abs(u) >= 25 &&
|
|
71
71
|
(((u > 0 &&
|
|
72
|
-
n === DIRECTIONS.
|
|
72
|
+
n === DIRECTIONS.xo &&
|
|
73
73
|
t.scrollTop === t.scrollHeight - t.offsetHeight) ||
|
|
74
|
-
(u < 0 && n === DIRECTIONS.
|
|
74
|
+
(u < 0 && n === DIRECTIONS.Co && 0 === t.scrollTop)) &&
|
|
75
75
|
e(o),
|
|
76
76
|
(s = null),
|
|
77
77
|
(i = null));
|
package/src/util/key-codes.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const KeyCodes = {
|
|
1
|
+
export const KeyCodes = { do: 32, yo: 9, lo: 13, Ih: 27 };
|
package/src/util/net.js
CHANGED
|
@@ -2,50 +2,50 @@ import { REQUEST_ATTEMPT_DEFAULT as Ae } from "../common/constants.js";
|
|
|
2
2
|
import { STORAGE_KEYS as s } from "../managers/storage-manager.js";
|
|
3
3
|
const h = {
|
|
4
4
|
H: {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Yi: "data",
|
|
6
|
+
Ci: "content_cards/sync",
|
|
7
|
+
ke: "feature_flags/sync",
|
|
8
|
+
mn: "template",
|
|
9
9
|
G: "banners/sync",
|
|
10
10
|
},
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
vl: (t) => (null == t ? void 0 : t.lt(s.ct.SE)),
|
|
12
|
+
nm: (t) => (null == t ? void 0 : t.lt(s.ct._E)),
|
|
13
|
+
rm: (t, e) => {
|
|
14
14
|
null == t || t.ft(s.ct.SE, e);
|
|
15
15
|
},
|
|
16
|
-
|
|
16
|
+
um: (t, e) => {
|
|
17
17
|
null == t || t.ft(s.ct._E, e);
|
|
18
18
|
},
|
|
19
|
-
|
|
19
|
+
Gu: (t, e) => {
|
|
20
20
|
if (!t || !e) return -1;
|
|
21
|
-
const s = h.
|
|
21
|
+
const s = h.vl(t);
|
|
22
22
|
if (null == s) return -1;
|
|
23
23
|
const n = s[e];
|
|
24
24
|
return null == n || isNaN(n) ? -1 : n;
|
|
25
25
|
},
|
|
26
|
-
|
|
26
|
+
_u: (t, e) => {
|
|
27
27
|
let s = Ae;
|
|
28
28
|
if (!t || !e) return s;
|
|
29
|
-
const n = h.
|
|
29
|
+
const n = h.nm(t);
|
|
30
30
|
return null == n ? s : ((s = n[e]), null == s || isNaN(s) ? Ae : s);
|
|
31
31
|
},
|
|
32
32
|
K: (t, e, s) => {
|
|
33
33
|
if (!t || !e) return;
|
|
34
|
-
let n = h.
|
|
35
|
-
null == n && (n = {}), (n[e] = s), h.
|
|
34
|
+
let n = h.vl(t);
|
|
35
|
+
null == n && (n = {}), (n[e] = s), h.rm(t, n);
|
|
36
36
|
},
|
|
37
|
-
|
|
37
|
+
Wu: (t, e, s) => {
|
|
38
38
|
if (!t || !e) return;
|
|
39
|
-
let n = h.
|
|
40
|
-
null == n && (n = {}), (n[e] = s), h.
|
|
39
|
+
let n = h.nm(t);
|
|
40
|
+
null == n && (n = {}), (n[e] = s), h.um(t, n);
|
|
41
41
|
},
|
|
42
|
-
|
|
43
|
-
t && e && h.
|
|
42
|
+
fi: (t, e) => {
|
|
43
|
+
t && e && h.Wu(t, e, Ae);
|
|
44
44
|
},
|
|
45
|
-
|
|
45
|
+
sl: (t, e) => {
|
|
46
46
|
if (!t || !e) return;
|
|
47
|
-
const s = h.
|
|
48
|
-
h.
|
|
47
|
+
const s = h._u(t, e);
|
|
48
|
+
h.Wu(t, e, s + 1);
|
|
49
49
|
},
|
|
50
50
|
};
|
|
51
51
|
export default h;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import ge from "./base-device-parser.js";
|
|
2
|
-
import { Browsers as
|
|
2
|
+
import { Browsers as di, OperatingSystems as so } from "./device-constants.js";
|
|
3
3
|
export default class gi extends ge {
|
|
4
4
|
constructor() {
|
|
5
|
-
super(), (this.fd = gi.
|
|
5
|
+
super(), (this.fd = gi.Vc(navigator.userAgent || ""));
|
|
6
6
|
}
|
|
7
7
|
ef() {
|
|
8
8
|
return this.fd[0] || "Unknown Browser";
|
|
@@ -10,7 +10,7 @@ export default class gi extends ge {
|
|
|
10
10
|
ff() {
|
|
11
11
|
return this.fd[1] || "Unknown Version";
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
rc(r) {
|
|
14
14
|
for (let n = 0; n < r.length; n++) {
|
|
15
15
|
const e = r[n].string;
|
|
16
16
|
let i = gi.nf(e, r[n]);
|
|
@@ -22,7 +22,7 @@ export default class gi extends ge {
|
|
|
22
22
|
}
|
|
23
23
|
return Promise.resolve(navigator.platform);
|
|
24
24
|
}
|
|
25
|
-
static
|
|
25
|
+
static Vc(r) {
|
|
26
26
|
let n,
|
|
27
27
|
e =
|
|
28
28
|
r.match(
|
|
@@ -40,40 +40,40 @@ export default class gi extends ge {
|
|
|
40
40
|
if (-1 !== r.indexOf("PhilipsTV")) return ["Philips Smart TV", null];
|
|
41
41
|
if (r.match(/\b(Roku)\b/)) return ["Roku", null];
|
|
42
42
|
if (r.match(/\bAFTM\b/)) return ["Amazon Fire Stick", null];
|
|
43
|
-
if (e[1] ===
|
|
44
|
-
if (r.includes(
|
|
43
|
+
if (e[1] === di.rO) {
|
|
44
|
+
if (r.includes(di.Sg)) return [di.Sg, e[2]];
|
|
45
45
|
if (
|
|
46
46
|
((n = r.match(/\b(OPR|Edge|EdgA|Edg|UCBrowser)\/(\.?\d+(\.\d+)*)/)),
|
|
47
47
|
null != n)
|
|
48
48
|
)
|
|
49
49
|
return (
|
|
50
50
|
(n = n.slice(1)),
|
|
51
|
-
(n[0] = n[0].replace("OPR",
|
|
52
|
-
(n[0] = n[0].replace("EdgA",
|
|
53
|
-
"Edg" === n[0] && (n[0] =
|
|
51
|
+
(n[0] = n[0].replace("OPR", di.oO)),
|
|
52
|
+
(n[0] = n[0].replace("EdgA", di.eO)),
|
|
53
|
+
"Edg" === n[0] && (n[0] = di.eO),
|
|
54
54
|
[n[0], n[1]]
|
|
55
55
|
);
|
|
56
56
|
}
|
|
57
57
|
if (
|
|
58
|
-
e[1] ===
|
|
58
|
+
e[1] === di.Bg &&
|
|
59
59
|
((n = r.match(/\b(EdgiOS)\/(\.?\d+(\.\d+)*)/)), null != n)
|
|
60
60
|
)
|
|
61
61
|
return (
|
|
62
|
-
(n = n.slice(1)), (n[0] = n[0].replace("EdgiOS",
|
|
62
|
+
(n = n.slice(1)), (n[0] = n[0].replace("EdgiOS", di.eO)), [n[0], n[1]]
|
|
63
63
|
);
|
|
64
64
|
if (
|
|
65
65
|
((e = e[2] ? [e[1], e[2]] : [null, null]),
|
|
66
|
-
e[0] ===
|
|
66
|
+
e[0] === di.Bg &&
|
|
67
67
|
null != (n = r.match(/version\/(\.?\d+(\.\d+)*)/i)) &&
|
|
68
68
|
e.splice(1, 1, n[1]),
|
|
69
69
|
null != (n = r.match(/\b(UCBrowser)\/(\.?\d+(\.\d+)*)/)) &&
|
|
70
70
|
e.splice(1, 1, n[2]),
|
|
71
|
-
e[0] ===
|
|
71
|
+
e[0] === di.oO && null != (n = r.match(/mini\/(\.?\d+(\.\d+)*)/i)))
|
|
72
72
|
)
|
|
73
73
|
return ["Opera Mini", n[1] || ""];
|
|
74
74
|
if (e[0]) {
|
|
75
75
|
const r = e[0].toLowerCase();
|
|
76
|
-
"crios" === r && (e[0] =
|
|
76
|
+
"crios" === r && (e[0] = di.rO),
|
|
77
77
|
"tizen" === r && ((e[0] = "Samsung Smart TV"), (e[1] = null)),
|
|
78
78
|
"samsungbrowser" === r && (e[0] = "Samsung Browser");
|
|
79
79
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
isArray as
|
|
2
|
+
isArray as z,
|
|
3
3
|
isDate as Nt,
|
|
4
|
-
isObject as
|
|
4
|
+
isObject as yt,
|
|
5
5
|
keys as C,
|
|
6
6
|
} from "./code-utils.js";
|
|
7
|
-
import { getByteLength as
|
|
7
|
+
import { getByteLength as rr } from "./string-utils.js";
|
|
8
8
|
import { logger as E } from "../../shared-lib/index.js";
|
|
9
9
|
import { toValidBackendTimeString as Lt } from "./date-utils.js";
|
|
10
10
|
import { BRAZE_ACTIONS as oo } from "./braze-actions.js";
|
|
@@ -22,7 +22,8 @@ export const CUSTOM_ATTRIBUTE_RESERVED_OPERATORS = [
|
|
|
22
22
|
"$google_ad_personalization",
|
|
23
23
|
"$google_ad_user_data",
|
|
24
24
|
];
|
|
25
|
-
export const EMAIL_ADDRESS_REGEX =
|
|
25
|
+
export const EMAIL_ADDRESS_REGEX = /^[^@\s]+@[^@\s]+\.[^@\s]+$/;
|
|
26
|
+
export const EMAIL_ADDRESS_MAX_LENGTH = 256;
|
|
26
27
|
export const CUSTOM_PROPERTIES_MAX_SIZE_BYTES = 51200;
|
|
27
28
|
export const CUSTOM_PROPERTIES_MAX_SIZE_STRING = "50KB";
|
|
28
29
|
export const CUSTOM_ATTRIBUTES_MAX_SIZE_BYTES = 76800;
|
|
@@ -57,7 +58,7 @@ export function _validateNestedProperties(t, e, r) {
|
|
|
57
58
|
if (n && r > 50)
|
|
58
59
|
return E.error("Nested attributes cannot be more than 50 levels deep."), !1;
|
|
59
60
|
const o = n ? r + 1 : -1;
|
|
60
|
-
if (
|
|
61
|
+
if (z(t) && z(e)) {
|
|
61
62
|
for (let r = 0; r < t.length && r < e.length; r++)
|
|
62
63
|
if (
|
|
63
64
|
(Nt(t[r]) && (e[r] = Lt(t[r])),
|
|
@@ -65,7 +66,7 @@ export function _validateNestedProperties(t, e, r) {
|
|
|
65
66
|
)
|
|
66
67
|
return !1;
|
|
67
68
|
} else {
|
|
68
|
-
if (!
|
|
69
|
+
if (!yt(t)) return validatePropertyType(t);
|
|
69
70
|
for (const r of C(t)) {
|
|
70
71
|
const i = t[r];
|
|
71
72
|
if (n && !validateCustomAttributeKey(r)) return !1;
|
|
@@ -81,7 +82,7 @@ export function _validateEventPropertyValue(t, e, r, n, o) {
|
|
|
81
82
|
let i;
|
|
82
83
|
return (
|
|
83
84
|
(i =
|
|
84
|
-
|
|
85
|
+
yt(t) || z(t)
|
|
85
86
|
? _validateNestedProperties(t, e, o ? 1 : -1)
|
|
86
87
|
: validatePropertyType(t)),
|
|
87
88
|
i || E.error(`Cannot ${r} because ${n} "${t}" is invalid.`),
|
|
@@ -93,7 +94,7 @@ export function validateStandardString(t, e, r, n = !1) {
|
|
|
93
94
|
return o || E.error(`Cannot ${e} because ${r} "${t}" is invalid.`), o;
|
|
94
95
|
}
|
|
95
96
|
export function validateCustomProperties(t, e, r, n, o) {
|
|
96
|
-
if ((null == t && (t = {}), "object" != typeof t ||
|
|
97
|
+
if ((null == t && (t = {}), "object" != typeof t || z(t)))
|
|
97
98
|
return (
|
|
98
99
|
E.error(`${e} requires that ${r} be an object. Ignoring ${o}.`),
|
|
99
100
|
[!1, null]
|
|
@@ -101,7 +102,7 @@ export function validateCustomProperties(t, e, r, n, o) {
|
|
|
101
102
|
let i, a;
|
|
102
103
|
e === Ft ? ((i = 76800), (a = "75KB")) : ((i = 51200), (a = "50KB"));
|
|
103
104
|
const s = JSON.stringify(t);
|
|
104
|
-
if (
|
|
105
|
+
if (rr(s) > i)
|
|
105
106
|
return (
|
|
106
107
|
E.error(
|
|
107
108
|
`Could not ${n} because ${r} was greater than the max size of ${a}.`,
|
|
@@ -161,7 +162,7 @@ export function validateCustomAttributeArrayType(t, e) {
|
|
|
161
162
|
return [!1, !1];
|
|
162
163
|
r = !0;
|
|
163
164
|
} else {
|
|
164
|
-
if (!
|
|
165
|
+
if (!yt(i)) return o(), [!1, !1];
|
|
165
166
|
if (r) return o(), [!1, !1];
|
|
166
167
|
if (
|
|
167
168
|
!validateCustomProperties(
|
|
@@ -178,9 +179,9 @@ export function validateCustomAttributeArrayType(t, e) {
|
|
|
178
179
|
return [r, n];
|
|
179
180
|
}
|
|
180
181
|
export function isValidEmail(t) {
|
|
181
|
-
return
|
|
182
|
-
|
|
183
|
-
);
|
|
182
|
+
if ("string" != typeof t) return !1;
|
|
183
|
+
const e = t.length;
|
|
184
|
+
return !(0 === e || e > 256) && EMAIL_ADDRESS_REGEX.test(t.toLowerCase());
|
|
184
185
|
}
|
|
185
186
|
export function isValidBrazeActionJson(t) {
|
|
186
187
|
if (!(oo.properties.type in t)) return !1;
|
package/src/util/window-utils.js
CHANGED