@braze/web-sdk 5.4.0 → 5.6.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 +109 -7
- package/package.json +1 -1
- package/shared-lib/encoding-utils.js +1 -1
- package/shared-lib/event-types.js +33 -31
- package/shared-lib/guid.js +3 -3
- package/shared-lib/indexed-db-adapter.js +20 -20
- package/shared-lib/logger.js +18 -18
- package/shared-lib/supported-options.js +24 -24
- package/src/Banner/banner-factory.js +14 -0
- package/src/Banner/banner-provider-factory.js +19 -0
- package/src/Banner/banner-provider.js +198 -0
- package/src/Banner/banner.js +30 -0
- package/src/Banner/display/banner-to-html.js +57 -0
- package/src/Banner/display/destroy-banner-html.js +7 -0
- package/src/Banner/display/detect-banner-impressions.js +28 -0
- package/src/Banner/get-all-banners.js +13 -0
- package/src/Banner/get-banner.js +19 -0
- package/src/Banner/index.js +7 -0
- package/src/Banner/log-banner-click.js +22 -0
- package/src/Banner/log-banner-impressions.js +31 -0
- package/src/Banner/request-banners-refresh.js +35 -0
- package/src/Banner/subscribe-to-banners-updates.js +23 -0
- package/src/Banner/types.js +1 -0
- package/src/Banner/ui/insert-banner.js +24 -0
- package/src/Card/card-manager-factory.js +10 -10
- package/src/Card/card-manager.js +64 -58
- package/src/Card/display/card-display.js +77 -91
- package/src/Card/log-card-click.js +6 -6
- package/src/Card/log-card-dismissal.js +6 -5
- package/src/Card/log-card-impressions.js +11 -11
- package/src/Card/models/captioned-image.js +21 -21
- package/src/Card/models/card.js +111 -105
- package/src/Card/models/classic-card.js +21 -21
- package/src/Card/models/control-card.js +11 -11
- package/src/Card/models/image-only.js +19 -19
- package/src/Card/util/card-factory.js +58 -58
- package/src/ContentCards/content-cards-provider-factory.js +14 -14
- package/src/ContentCards/content-cards-provider.js +260 -262
- package/src/ContentCards/content-cards.js +5 -5
- package/src/ContentCards/get-cached-content-cards.js +3 -3
- package/src/ContentCards/request-content-cards-refresh.js +4 -4
- package/src/ContentCards/subscribe-to-content-cards-updates.js +13 -13
- package/src/ContentCards/ui/hide-content-cards.js +7 -7
- package/src/ContentCards/ui/show-content-cards.js +52 -52
- package/src/ContentCards/ui/toggle-content-cards.js +4 -4
- package/src/Core/add-sdk-metadata.js +9 -9
- package/src/Core/change-user.js +14 -14
- package/src/Core/destroy.js +3 -3
- package/src/Core/disable-sdk.js +13 -13
- package/src/Core/enable-sdk.js +9 -9
- package/src/Core/get-device-id.js +10 -10
- package/src/Core/get-user.js +2 -2
- package/src/Core/handle-braze-action.js +53 -53
- package/src/Core/initialize.js +2 -2
- package/src/Core/is-disabled.js +2 -2
- package/src/Core/is-initialized.js +2 -2
- package/src/Core/log-custom-event.js +24 -24
- package/src/Core/log-purchase.js +38 -38
- package/src/Core/open-session.js +18 -18
- package/src/Core/remove-all-subscriptions.js +2 -2
- package/src/Core/remove-subscription.js +3 -3
- package/src/Core/request-immediate-data-flush.js +5 -5
- package/src/Core/set-logger.js +2 -2
- package/src/Core/set-sdk-authentication-signature.js +6 -6
- package/src/Core/subscribe-to-sdk-authentication-failures.js +5 -5
- package/src/Core/toggle-logging.js +2 -2
- package/src/Core/wipe-data.js +10 -10
- package/src/FeatureFlags/feature-flag-factory.js +13 -13
- package/src/FeatureFlags/feature-flag.js +10 -10
- package/src/FeatureFlags/feature-flags-provider-factory.js +13 -14
- package/src/FeatureFlags/feature-flags-provider.js +118 -116
- package/src/FeatureFlags/get-all-feature-flags.js +10 -10
- package/src/FeatureFlags/get-feature-flag.js +9 -9
- package/src/FeatureFlags/log-feature-flag-impression.js +18 -18
- package/src/FeatureFlags/refresh-feature-flags.js +6 -6
- package/src/FeatureFlags/subscribe-to-feature-flags-updates.js +9 -9
- package/src/Feed/feed-provider-factory.js +12 -12
- package/src/Feed/feed-provider.js +59 -59
- package/src/Feed/feed.js +4 -4
- package/src/Feed/get-cached-feed.js +3 -3
- package/src/Feed/log-feed-displayed.js +5 -5
- package/src/Feed/request-feed-refresh.js +3 -3
- package/src/Feed/subscribe-to-feed-updates.js +4 -4
- package/src/Feed/ui/hide-feed.js +5 -5
- package/src/Feed/ui/show-feed.js +53 -53
- package/src/Feed/ui/toggle-feed.js +4 -4
- package/src/InAppMessage/defer-in-app-message.js +9 -9
- package/src/InAppMessage/display/html-message-display-utils.js +18 -164
- package/src/InAppMessage/display/html-message-to-html.js +55 -62
- package/src/InAppMessage/display/in-app-message-to-html.js +74 -74
- package/src/InAppMessage/display/modal-utils.js +17 -17
- package/src/InAppMessage/get-deferred-in-app-message.js +2 -2
- package/src/InAppMessage/in-app-message-factory.js +61 -61
- package/src/InAppMessage/in-app-message-manager-factory.js +9 -9
- package/src/InAppMessage/in-app-message-manager.js +158 -156
- package/src/InAppMessage/log-in-app-message-button-click.js +16 -16
- package/src/InAppMessage/log-in-app-message-click.js +11 -11
- package/src/InAppMessage/log-in-app-message-html-click.js +15 -15
- package/src/InAppMessage/log-in-app-message-impression.js +6 -6
- package/src/InAppMessage/models/control-message.js +15 -8
- package/src/InAppMessage/models/full-screen-message.js +34 -34
- package/src/InAppMessage/models/html-message.js +23 -23
- package/src/InAppMessage/models/in-app-message-button.js +10 -10
- package/src/InAppMessage/models/in-app-message.js +155 -155
- package/src/InAppMessage/models/modal-message.js +33 -33
- package/src/InAppMessage/models/slide-up-message.js +35 -35
- package/src/InAppMessage/models/templated-in-app-message.js +8 -8
- package/src/InAppMessage/subscribe-to-in-app-message.js +3 -3
- package/src/InAppMessage/ui/automatically-show-in-app-messages.js +6 -6
- package/src/InAppMessage/ui/show-in-app-message.js +103 -103
- 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 +25 -25
- package/src/Push/push-manager.js +176 -176
- package/src/Push/request-push-permission.js +8 -8
- package/src/Push/unregister-push.js +4 -4
- package/src/Push/utils/push-utils.js +4 -4
- package/src/User/user-manager.js +38 -38
- package/src/User/user.js +95 -92
- package/src/common/base-feed.js +9 -9
- package/src/common/base-provider.js +2 -2
- package/src/common/constants.js +1 -0
- package/src/common/detect-impression.js +18 -0
- package/src/common/event-logger.js +22 -22
- package/src/common/feed-display.js +53 -53
- package/src/index.js +1 -0
- package/src/l10n/l10n-manager-factory.js +15 -15
- package/src/l10n/l10n-manager.js +4 -4
- package/src/managers/auth-manager.js +38 -38
- package/src/managers/braze-instance.js +212 -212
- package/src/managers/device-manager.js +30 -30
- package/src/managers/network-manager.js +231 -232
- package/src/managers/server-config-manager.js +99 -83
- package/src/managers/session-manager.js +46 -50
- package/src/managers/storage-manager-factory.js +13 -13
- package/src/managers/storage-manager.js +182 -180
- package/src/managers/subscription-manager.js +12 -12
- package/src/managers/utils.js +4 -4
- 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 +15 -15
- package/src/models/push-token.js +10 -10
- package/src/models/request-result.js +4 -4
- package/src/models/server-config.js +38 -34
- package/src/request-controller.js +228 -228
- package/src/triggers/models/custom-event-data.js +5 -5
- package/src/triggers/models/custom-event-property-data.js +6 -6
- package/src/triggers/models/filter-set.js +10 -10
- package/src/triggers/models/filter.js +66 -66
- package/src/triggers/models/in-app-message-click-data.js +10 -10
- package/src/triggers/models/purchase-data.js +2 -2
- package/src/triggers/models/purchase-property-data.js +6 -6
- package/src/triggers/models/push-click-data.js +5 -5
- package/src/triggers/models/trigger-condition.js +46 -46
- package/src/triggers/models/trigger-events.js +4 -4
- package/src/triggers/models/trigger.js +33 -33
- package/src/triggers/triggers-provider-factory.js +16 -16
- package/src/triggers/triggers-provider.js +156 -154
- package/src/ui/js/attach-css.js +7 -7
- package/src/ui/js/banner-css.js +11 -0
- package/src/ui/js/feed-css.js +4 -4
- package/src/ui/js/iam-css.js +4 -4
- package/src/ui/js/index.js +1 -0
- package/src/ui/js/load-font-awesome.js +8 -8
- package/src/util/base-device-parser.js +9 -9
- package/src/util/braze-actions.js +32 -32
- package/src/util/browser-detector.js +27 -27
- package/src/util/client-hints-parser.js +9 -9
- package/src/util/code-utils.js +5 -5
- package/src/util/component-utils.js +5 -5
- package/src/util/deprecation-utils.js +3 -3
- package/src/util/device-constants.js +1 -1
- package/src/util/dom-utils.js +13 -13
- package/src/util/html-display-utils.js +158 -0
- package/src/util/key-codes.js +1 -1
- package/src/util/net.js +21 -21
- package/src/util/request-header-utils.js +31 -30
- package/src/util/string-utils.js +2 -2
- package/src/util/user-agent-parser.js +9 -9
- package/src/util/validation-utils.js +89 -85
- package/src/util/window-utils.js +3 -3
package/src/User/user-manager.js
CHANGED
|
@@ -1,73 +1,73 @@
|
|
|
1
1
|
import _t from "../models/identifier.js";
|
|
2
|
-
import { getByteLength as
|
|
2
|
+
import { getByteLength as er } from "../util/string-utils.js";
|
|
3
3
|
import ti from "../models/push-token.js";
|
|
4
|
-
import { logger as
|
|
5
|
-
import { STORAGE_KEYS as
|
|
4
|
+
import { logger as N, IndexedDBAdapter as it } from "../../shared-lib/index.js";
|
|
5
|
+
import { STORAGE_KEYS as t } from "../managers/storage-manager.js";
|
|
6
6
|
import { User } from "../User/index.js";
|
|
7
7
|
export default class kt {
|
|
8
8
|
constructor(t, s) {
|
|
9
|
-
(this.
|
|
9
|
+
(this.B = t), (this.C = s), (this.B = t), (this.C = s);
|
|
10
10
|
}
|
|
11
11
|
getUserId() {
|
|
12
|
-
const
|
|
13
|
-
if (null ==
|
|
14
|
-
let
|
|
15
|
-
|
|
16
|
-
if (
|
|
17
|
-
for (;
|
|
18
|
-
(
|
|
12
|
+
const s = this.C.tu(t.iu.su);
|
|
13
|
+
if (null == s) return null;
|
|
14
|
+
let i = s.eu,
|
|
15
|
+
e = er(i);
|
|
16
|
+
if (e > User.mr) {
|
|
17
|
+
for (; e > User.mr; ) (i = i.slice(0, i.length - 1)), (e = er(i));
|
|
18
|
+
(s.eu = i), this.C.uu(t.iu.su, s);
|
|
19
19
|
}
|
|
20
|
-
return
|
|
20
|
+
return i;
|
|
21
21
|
}
|
|
22
|
-
ou(
|
|
23
|
-
const
|
|
24
|
-
this.
|
|
22
|
+
ou(s) {
|
|
23
|
+
const i = null == this.getUserId();
|
|
24
|
+
this.C.uu(t.iu.su, new _t(s)), i && this.C.ru(s);
|
|
25
25
|
}
|
|
26
26
|
setCustomUserAttribute(t, s) {
|
|
27
|
-
if (this.
|
|
27
|
+
if (this.B.hu(t))
|
|
28
28
|
return (
|
|
29
|
-
|
|
29
|
+
N.info('Custom Attribute "' + t + '" is blocklisted, ignoring.'), !1
|
|
30
30
|
);
|
|
31
31
|
const i = {};
|
|
32
32
|
return (i[t] = s), this.nu(User.lu, i, !0);
|
|
33
33
|
}
|
|
34
34
|
nu(t, s, i = !1, e = !1) {
|
|
35
|
-
const u = this.
|
|
35
|
+
const u = this.C.mu(this.getUserId(), t, s);
|
|
36
36
|
let o = "",
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
r = t,
|
|
38
|
+
h = s;
|
|
39
39
|
return (
|
|
40
40
|
i &&
|
|
41
41
|
((o = " custom"),
|
|
42
42
|
"object" == typeof s &&
|
|
43
|
-
((
|
|
44
|
-
(
|
|
45
|
-
"object" == typeof
|
|
46
|
-
!e && u &&
|
|
43
|
+
((r = Object.keys(s)[0]),
|
|
44
|
+
(h = s[r]),
|
|
45
|
+
"object" == typeof h && (h = JSON.stringify(h, null, 2)))),
|
|
46
|
+
!e && u && N.info(`Logged${o} attribute ${r} with value ${h}`),
|
|
47
47
|
u
|
|
48
48
|
);
|
|
49
49
|
}
|
|
50
|
-
|
|
51
|
-
this.nu("push_token",
|
|
52
|
-
this.nu("custom_push_public_key",
|
|
53
|
-
this.nu("custom_push_user_auth",
|
|
54
|
-
this.nu("custom_push_vapid_public_key",
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
this.
|
|
50
|
+
En(s, i, e, u, o) {
|
|
51
|
+
this.nu("push_token", s, !1, !0),
|
|
52
|
+
this.nu("custom_push_public_key", e, !1, !0),
|
|
53
|
+
this.nu("custom_push_user_auth", u, !1, !0),
|
|
54
|
+
this.nu("custom_push_vapid_public_key", o, !1, !0);
|
|
55
|
+
const r = it.Gs._s,
|
|
56
|
+
h = new it(r, N),
|
|
57
|
+
n = new ti(s, i, e, u, o);
|
|
58
|
+
this.C.js(t.bs.Kn, n.Bs()), h.setItem(r.Os.cu, r.oe, !0);
|
|
59
59
|
}
|
|
60
|
-
|
|
60
|
+
Cn(s) {
|
|
61
61
|
if (
|
|
62
62
|
(this.nu("push_token", null, !1, !0),
|
|
63
63
|
this.nu("custom_push_public_key", null, !1, !0),
|
|
64
64
|
this.nu("custom_push_user_auth", null, !1, !0),
|
|
65
65
|
this.nu("custom_push_vapid_public_key", null, !1, !0),
|
|
66
|
-
|
|
66
|
+
s)
|
|
67
67
|
) {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
this.
|
|
68
|
+
const s = it.Gs._s,
|
|
69
|
+
i = new it(s, N);
|
|
70
|
+
this.C.js(t.bs.Kn, !1), i.setItem(s.Os.cu, s.oe, !1);
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
}
|
package/src/User/user.js
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
1
|
import {
|
|
2
|
-
isArray as
|
|
2
|
+
isArray as w,
|
|
3
3
|
isDate as Nt,
|
|
4
4
|
isObject as Ct,
|
|
5
|
-
validateValueIsFromEnum as
|
|
5
|
+
validateValueIsFromEnum as ta,
|
|
6
6
|
} from "../util/code-utils.js";
|
|
7
|
-
import { logger as
|
|
7
|
+
import { logger as N, EventTypes as d } from "../../shared-lib/index.js";
|
|
8
8
|
import {
|
|
9
9
|
isValidEmail as St,
|
|
10
10
|
validateCustomAttributeArrayType as At,
|
|
11
11
|
validateCustomAttributeKey as Ut,
|
|
12
|
-
validateCustomProperties as
|
|
13
|
-
validateCustomString as
|
|
12
|
+
validateCustomProperties as rt,
|
|
13
|
+
validateCustomString as nt,
|
|
14
14
|
validatePropertyType as Ft,
|
|
15
|
-
validateStandardString as
|
|
15
|
+
validateStandardString as ir,
|
|
16
16
|
} from "../util/validation-utils.js";
|
|
17
17
|
import { SET_CUSTOM_USER_ATTRIBUTE_STRING as $t } from "../common/constants.js";
|
|
18
18
|
import { toValidBackendTimeString as Bt } from "../util/date-utils.js";
|
|
19
19
|
export default class User {
|
|
20
20
|
constructor(t, e) {
|
|
21
|
-
(this.
|
|
21
|
+
(this.As = t), (this.Ue = e), (this.As = t), (this.Ue = e);
|
|
22
22
|
}
|
|
23
23
|
getUserId(t) {
|
|
24
|
-
const e = this.
|
|
24
|
+
const e = this.As.getUserId();
|
|
25
25
|
if ("function" != typeof t) return e;
|
|
26
|
-
|
|
26
|
+
N.warn(
|
|
27
27
|
"The callback for getUserId is deprecated. You can access its return value directly instead (e.g. `const id = braze.getUser().getUserId()`)",
|
|
28
28
|
),
|
|
29
29
|
t(e);
|
|
30
30
|
}
|
|
31
31
|
addAlias(t, e) {
|
|
32
|
-
return !
|
|
33
|
-
? (
|
|
34
|
-
: !
|
|
35
|
-
? (
|
|
36
|
-
: this.
|
|
32
|
+
return !ir(t, "add alias", "the alias", !1) || t.length <= 0
|
|
33
|
+
? (N.error("addAlias requires a non-empty alias"), !1)
|
|
34
|
+
: !ir(e, "add alias", "the label", !1) || e.length <= 0
|
|
35
|
+
? (N.error("addAlias requires a non-empty label"), !1)
|
|
36
|
+
: this.Ue.$n(t, e).ss;
|
|
37
37
|
}
|
|
38
38
|
setFirstName(t) {
|
|
39
39
|
return (
|
|
40
|
-
!!
|
|
41
|
-
this.
|
|
40
|
+
!!ir(t, "set first name", "the firstName", !0) &&
|
|
41
|
+
this.As.nu("first_name", t)
|
|
42
42
|
);
|
|
43
43
|
}
|
|
44
44
|
setLastName(t) {
|
|
45
45
|
return (
|
|
46
|
-
!!
|
|
46
|
+
!!ir(t, "set last name", "the lastName", !0) && this.As.nu("last_name", t)
|
|
47
47
|
);
|
|
48
48
|
}
|
|
49
49
|
setEmail(t) {
|
|
50
50
|
return null === t || St(t)
|
|
51
|
-
? this.
|
|
52
|
-
: (
|
|
51
|
+
? this.As.nu("email", t)
|
|
52
|
+
: (N.error(
|
|
53
53
|
`Cannot set email address - "${t}" did not pass RFC-5322 validation.`,
|
|
54
54
|
),
|
|
55
55
|
!1);
|
|
@@ -59,115 +59,118 @@ export default class User {
|
|
|
59
59
|
"string" == typeof t && (t = t.toLowerCase()),
|
|
60
60
|
!(
|
|
61
61
|
null !== t &&
|
|
62
|
-
!
|
|
62
|
+
!ta(
|
|
63
63
|
User.Genders,
|
|
64
64
|
t,
|
|
65
65
|
`Gender "${t}" is not a valid gender.`,
|
|
66
66
|
"User.Genders",
|
|
67
67
|
)
|
|
68
|
-
) && this.
|
|
68
|
+
) && this.As.nu("gender", t)
|
|
69
69
|
);
|
|
70
70
|
}
|
|
71
|
-
setDateOfBirth(t, e,
|
|
72
|
-
return null === t && null === e && null ===
|
|
73
|
-
? this.
|
|
71
|
+
setDateOfBirth(t, e, r) {
|
|
72
|
+
return null === t && null === e && null === r
|
|
73
|
+
? this.As.nu("dob", null)
|
|
74
74
|
: ((t = null != t ? parseInt(t.toString()) : null),
|
|
75
75
|
(e = null != e ? parseInt(e.toString()) : null),
|
|
76
|
-
(
|
|
76
|
+
(r = null != r ? parseInt(r.toString()) : null),
|
|
77
77
|
null == t ||
|
|
78
78
|
null == e ||
|
|
79
|
-
null ==
|
|
79
|
+
null == r ||
|
|
80
80
|
isNaN(t) ||
|
|
81
81
|
isNaN(e) ||
|
|
82
|
-
isNaN(
|
|
82
|
+
isNaN(r) ||
|
|
83
83
|
e > 12 ||
|
|
84
84
|
e < 1 ||
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
? (
|
|
85
|
+
r > 31 ||
|
|
86
|
+
r < 1
|
|
87
|
+
? (N.error(
|
|
88
88
|
"Cannot set date of birth - parameters should comprise a valid date e.g. setDateOfBirth(1776, 7, 4);",
|
|
89
89
|
),
|
|
90
90
|
!1)
|
|
91
|
-
: this.
|
|
91
|
+
: this.As.nu("dob", `${t}-${e}-${r}`));
|
|
92
92
|
}
|
|
93
93
|
setCountry(t) {
|
|
94
|
-
return
|
|
94
|
+
return (
|
|
95
|
+
!!ir(t, "set country", "the country", !0) && this.As.nu("country", t)
|
|
96
|
+
);
|
|
95
97
|
}
|
|
96
98
|
setHomeCity(t) {
|
|
97
99
|
return (
|
|
98
|
-
!!
|
|
100
|
+
!!ir(t, "set home city", "the homeCity", !0) && this.As.nu("home_city", t)
|
|
99
101
|
);
|
|
100
102
|
}
|
|
101
103
|
setLanguage(t) {
|
|
102
104
|
return (
|
|
103
|
-
!!
|
|
105
|
+
!!ir(t, "set language", "the language", !0) && this.As.nu("language", t)
|
|
104
106
|
);
|
|
105
107
|
}
|
|
106
108
|
setEmailNotificationSubscriptionType(t) {
|
|
107
109
|
return (
|
|
108
|
-
!!
|
|
110
|
+
!!ta(
|
|
109
111
|
User.NotificationSubscriptionTypes,
|
|
110
112
|
t,
|
|
111
113
|
`Email notification setting "${t}" is not a valid subscription type.`,
|
|
112
114
|
"User.NotificationSubscriptionTypes",
|
|
113
|
-
) && this.
|
|
115
|
+
) && this.As.nu("email_subscribe", t)
|
|
114
116
|
);
|
|
115
117
|
}
|
|
116
118
|
setPushNotificationSubscriptionType(t) {
|
|
117
119
|
return (
|
|
118
|
-
!!
|
|
120
|
+
!!ta(
|
|
119
121
|
User.NotificationSubscriptionTypes,
|
|
120
122
|
t,
|
|
121
123
|
`Push notification setting "${t}" is not a valid subscription type.`,
|
|
122
124
|
"User.NotificationSubscriptionTypes",
|
|
123
|
-
) && this.
|
|
125
|
+
) && this.As.nu("push_subscribe", t)
|
|
124
126
|
);
|
|
125
127
|
}
|
|
126
128
|
setPhoneNumber(t) {
|
|
127
129
|
return (
|
|
128
|
-
!!
|
|
129
|
-
(null === t || t.match(User.
|
|
130
|
-
? this.
|
|
131
|
-
: (
|
|
130
|
+
!!ir(t, "set phone number", "the phoneNumber", !0) &&
|
|
131
|
+
(null === t || t.match(User.Xn)
|
|
132
|
+
? this.As.nu("phone", t)
|
|
133
|
+
: (N.error(`Cannot set phone number - "${t}" did not pass validation.`),
|
|
132
134
|
!1))
|
|
133
135
|
);
|
|
134
136
|
}
|
|
135
|
-
setLastKnownLocation(t, e, s, n
|
|
137
|
+
setLastKnownLocation(t, e, r, s, n) {
|
|
136
138
|
return null == t || null == e
|
|
137
|
-
? (
|
|
139
|
+
? (N.error(
|
|
138
140
|
"Cannot set last-known location - latitude and longitude are required.",
|
|
139
141
|
),
|
|
140
142
|
!1)
|
|
141
143
|
: ((t = parseFloat(t.toString())),
|
|
142
144
|
(e = parseFloat(e.toString())),
|
|
145
|
+
null != r && (r = parseFloat(r.toString())),
|
|
143
146
|
null != s && (s = parseFloat(s.toString())),
|
|
144
147
|
null != n && (n = parseFloat(n.toString())),
|
|
145
|
-
null != i && (i = parseFloat(i.toString())),
|
|
146
148
|
isNaN(t) ||
|
|
147
149
|
isNaN(e) ||
|
|
150
|
+
(null != r && isNaN(r)) ||
|
|
148
151
|
(null != s && isNaN(s)) ||
|
|
149
|
-
(null != n && isNaN(n))
|
|
150
|
-
|
|
151
|
-
? (r.error(
|
|
152
|
+
(null != n && isNaN(n))
|
|
153
|
+
? (N.error(
|
|
152
154
|
"Cannot set last-known location - all supplied parameters must be numeric.",
|
|
153
155
|
),
|
|
154
156
|
!1)
|
|
155
157
|
: t > 90 || t < -90 || e > 180 || e < -180
|
|
156
|
-
? (
|
|
158
|
+
? (N.error(
|
|
157
159
|
"Cannot set last-known location - latitude and longitude are bounded by ±90 and ±180 respectively.",
|
|
158
160
|
),
|
|
159
161
|
!1)
|
|
160
|
-
: (null !=
|
|
161
|
-
? (
|
|
162
|
+
: (null != r && r < 0) || (null != n && n < 0)
|
|
163
|
+
? (N.error(
|
|
162
164
|
"Cannot set last-known location - accuracy and altitudeAccuracy may not be negative.",
|
|
163
165
|
),
|
|
164
166
|
!1)
|
|
165
|
-
: this.
|
|
167
|
+
: this.Ue.setLastKnownLocation(this.As.getUserId(), t, e, s, r, n)
|
|
168
|
+
.ss);
|
|
166
169
|
}
|
|
167
170
|
setCustomUserAttribute(t, e, r) {
|
|
168
171
|
if (!Ut(t)) return !1;
|
|
169
172
|
const s = (e) => {
|
|
170
|
-
const [r] =
|
|
173
|
+
const [r] = rt(
|
|
171
174
|
e,
|
|
172
175
|
$t,
|
|
173
176
|
"attribute value",
|
|
@@ -176,20 +179,20 @@ export default class User {
|
|
|
176
179
|
);
|
|
177
180
|
return r;
|
|
178
181
|
};
|
|
179
|
-
if (
|
|
182
|
+
if (w(e)) {
|
|
180
183
|
const [r, n] = At(t, e);
|
|
181
184
|
if (!r && !n && 0 !== e.length) return !1;
|
|
182
|
-
if (r || 0 === e.length) return this.
|
|
185
|
+
if (r || 0 === e.length) return this.Ue.Zn(d.au, t, e).ss;
|
|
183
186
|
for (const t of e) if (!s(t)) return !1;
|
|
184
187
|
} else if (Ct(e)) {
|
|
185
188
|
if (!s(e)) return !1;
|
|
186
|
-
if (r) return this.
|
|
189
|
+
if (r) return this.Ue.Zn(d.du, t, e).ss;
|
|
187
190
|
} else {
|
|
188
191
|
if (!(void 0 !== e && Ft(e))) return !1;
|
|
189
192
|
if (
|
|
190
193
|
(Nt(e) && (e = Bt(e)),
|
|
191
194
|
"string" == typeof e &&
|
|
192
|
-
!
|
|
195
|
+
!nt(
|
|
193
196
|
e,
|
|
194
197
|
`set custom user attribute "${t}"`,
|
|
195
198
|
"the element in the given array",
|
|
@@ -197,87 +200,87 @@ export default class User {
|
|
|
197
200
|
)
|
|
198
201
|
return !1;
|
|
199
202
|
}
|
|
200
|
-
return this.
|
|
203
|
+
return this.As.setCustomUserAttribute(t, e);
|
|
201
204
|
}
|
|
202
205
|
addToCustomAttributeArray(t, e) {
|
|
203
206
|
return (
|
|
204
|
-
!!
|
|
207
|
+
!!nt(t, "add to custom user attribute array", "the given key") &&
|
|
205
208
|
!(
|
|
206
209
|
null != e &&
|
|
207
|
-
!
|
|
210
|
+
!nt(e, "add to custom user attribute array", "the given value")
|
|
208
211
|
) &&
|
|
209
|
-
this.
|
|
212
|
+
this.Ue.Zn(d.pu, t, e).ss
|
|
210
213
|
);
|
|
211
214
|
}
|
|
212
215
|
removeFromCustomAttributeArray(t, e) {
|
|
213
216
|
return (
|
|
214
|
-
!!
|
|
217
|
+
!!nt(t, "remove from custom user attribute array", "the given key") &&
|
|
215
218
|
!(
|
|
216
219
|
null != e &&
|
|
217
|
-
!
|
|
220
|
+
!nt(e, "remove from custom user attribute array", "the given value")
|
|
218
221
|
) &&
|
|
219
|
-
this.
|
|
222
|
+
this.Ue.Zn(d.bu, t, e).ss
|
|
220
223
|
);
|
|
221
224
|
}
|
|
222
225
|
incrementCustomUserAttribute(t, e) {
|
|
223
|
-
if (!
|
|
226
|
+
if (!nt(t, "increment custom user attribute", "the given key")) return !1;
|
|
224
227
|
null == e && (e = 1);
|
|
225
|
-
const
|
|
226
|
-
return isNaN(
|
|
227
|
-
? (
|
|
228
|
+
const r = parseInt(e.toString());
|
|
229
|
+
return isNaN(r) || r !== parseFloat(e.toString())
|
|
230
|
+
? (N.error(
|
|
228
231
|
`Cannot increment custom user attribute because the given incrementValue "${e}" is not an integer.`,
|
|
229
232
|
),
|
|
230
233
|
!1)
|
|
231
|
-
: this.
|
|
234
|
+
: this.Ue.Zn(d.fu, t, r).ss;
|
|
232
235
|
}
|
|
233
|
-
setCustomLocationAttribute(t, e,
|
|
236
|
+
setCustomLocationAttribute(t, e, r) {
|
|
234
237
|
return (
|
|
235
|
-
!!
|
|
236
|
-
((null !== e || null !==
|
|
238
|
+
!!nt(t, "set custom location attribute", "the given key") &&
|
|
239
|
+
((null !== e || null !== r) &&
|
|
237
240
|
((e = null != e ? parseFloat(e.toString()) : null),
|
|
238
|
-
(
|
|
239
|
-
(null == e && null !=
|
|
240
|
-
(null != e && null ==
|
|
241
|
+
(r = null != r ? parseFloat(r.toString()) : null),
|
|
242
|
+
(null == e && null != r) ||
|
|
243
|
+
(null != e && null == r) ||
|
|
241
244
|
(null != e && (isNaN(e) || e > 90 || e < -90)) ||
|
|
242
|
-
(null !=
|
|
243
|
-
? (
|
|
245
|
+
(null != r && (isNaN(r) || r > 180 || r < -180)))
|
|
246
|
+
? (N.error(
|
|
244
247
|
"Received invalid values for latitude and/or longitude. Latitude and longitude are bounded by ±90 and ±180 respectively, or must both be null for removal.",
|
|
245
248
|
),
|
|
246
249
|
!1)
|
|
247
|
-
: this.
|
|
250
|
+
: this.Ue.gu(t, e, r).ss)
|
|
248
251
|
);
|
|
249
252
|
}
|
|
250
253
|
addToSubscriptionGroup(t) {
|
|
251
|
-
return !
|
|
254
|
+
return !ir(
|
|
252
255
|
t,
|
|
253
256
|
"add user to subscription group",
|
|
254
257
|
"subscription group ID",
|
|
255
258
|
!1,
|
|
256
259
|
) || t.length <= 0
|
|
257
|
-
? (
|
|
260
|
+
? (N.error(
|
|
258
261
|
"addToSubscriptionGroup requires a non-empty subscription group ID",
|
|
259
262
|
),
|
|
260
263
|
!1)
|
|
261
|
-
: this.
|
|
264
|
+
: this.Ue.yu(t, User.Nu.SUBSCRIBED).ss;
|
|
262
265
|
}
|
|
263
266
|
removeFromSubscriptionGroup(t) {
|
|
264
|
-
return !
|
|
267
|
+
return !ir(
|
|
265
268
|
t,
|
|
266
269
|
"remove user from subscription group",
|
|
267
270
|
"subscription group ID",
|
|
268
271
|
!1,
|
|
269
272
|
) || t.length <= 0
|
|
270
|
-
? (
|
|
273
|
+
? (N.error(
|
|
271
274
|
"removeFromSubscriptionGroup requires a non-empty subscription group ID",
|
|
272
275
|
),
|
|
273
276
|
!1)
|
|
274
|
-
: this.
|
|
277
|
+
: this.Ue.yu(t, User.Nu.UNSUBSCRIBED).ss;
|
|
275
278
|
}
|
|
276
|
-
|
|
277
|
-
this.
|
|
279
|
+
En(t, e, r, s, n) {
|
|
280
|
+
this.As.En(t, e, r, s, n), this.Ue.vu();
|
|
278
281
|
}
|
|
279
|
-
|
|
280
|
-
this.
|
|
282
|
+
Cn(t) {
|
|
283
|
+
this.As.Cn(t);
|
|
281
284
|
}
|
|
282
285
|
}
|
|
283
286
|
(User.Genders = {
|
|
@@ -293,8 +296,8 @@ export default class User {
|
|
|
293
296
|
SUBSCRIBED: "subscribed",
|
|
294
297
|
UNSUBSCRIBED: "unsubscribed",
|
|
295
298
|
}),
|
|
296
|
-
(User.
|
|
297
|
-
(User.
|
|
298
|
-
(User.
|
|
299
|
+
(User.Xn = /^[0-9 .\\(\\)\\+\\-]+$/),
|
|
300
|
+
(User.Nu = { SUBSCRIBED: "subscribed", UNSUBSCRIBED: "unsubscribed" }),
|
|
301
|
+
(User.Cu = "user_id"),
|
|
299
302
|
(User.lu = "custom"),
|
|
300
|
-
(User.
|
|
303
|
+
(User.mr = 997);
|
package/src/common/base-feed.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { logger as
|
|
1
|
+
import { logger as N } from "../../shared-lib/index.js";
|
|
2
2
|
import { ControlCard } from "../Card/index.js";
|
|
3
3
|
export const FEED_ANIMATION_DURATION = 500;
|
|
4
|
-
export default class
|
|
4
|
+
export default class rr {
|
|
5
5
|
constructor(s, e) {
|
|
6
6
|
(this.cards = s),
|
|
7
7
|
(this.lastUpdated = e),
|
|
@@ -13,17 +13,17 @@ export default class x {
|
|
|
13
13
|
for (const e of this.cards) e.viewed || e instanceof ControlCard || s++;
|
|
14
14
|
return s;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
ur() {
|
|
17
|
+
N.error("Must be implemented in a subclass");
|
|
18
18
|
}
|
|
19
19
|
logCardImpressions(s) {
|
|
20
|
-
|
|
20
|
+
N.error("Must be implemented in a subclass");
|
|
21
21
|
}
|
|
22
22
|
logCardClick(s) {
|
|
23
|
-
|
|
23
|
+
N.error("Must be implemented in a subclass");
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
dr() {
|
|
26
|
+
N.error("Must be implemented in a subclass");
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
(
|
|
29
|
+
(rr.ar = 6e4), (rr.Ih = 500), (rr.No = 1e4);
|
package/src/common/constants.js
CHANGED
|
@@ -12,3 +12,4 @@ export const GLOBAL_RATE_LIMIT_REFILL_RATE_DEFAULT = 30;
|
|
|
12
12
|
export const LAST_REQUEST_TO_ENDPOINT_MS_AGO_DEFAULT = 72e5;
|
|
13
13
|
export const MAX_ERROR_RETRIES_CONTENT_CARDS = 3;
|
|
14
14
|
export const REQUEST_ATTEMPT_DEFAULT = 1;
|
|
15
|
+
export const SUBSCRIPTION_ID_DATA_ATTRIBUTE = "data-update-subscription-id";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const TOP_IMPRESSION_DATA_ATTRIBUTE = "data-ab-had-top-impression";
|
|
2
|
+
export const BOTTOM_IMPRESSION_DATA_ATTRIBUTE = "data-ab-had-bottom-impression";
|
|
3
|
+
export function topHadImpression(o) {
|
|
4
|
+
return null != o && !!o.getAttribute("data-ab-had-top-impression");
|
|
5
|
+
}
|
|
6
|
+
export function impressOnTop(o) {
|
|
7
|
+
null != o && o.setAttribute("data-ab-had-top-impression", "true");
|
|
8
|
+
}
|
|
9
|
+
export function bottomHadImpression(o) {
|
|
10
|
+
return null != o && !!o.getAttribute("data-ab-had-bottom-impression");
|
|
11
|
+
}
|
|
12
|
+
export function impressOnBottom(o) {
|
|
13
|
+
null != o && o.setAttribute("data-ab-had-bottom-impression", "true");
|
|
14
|
+
}
|
|
15
|
+
export const detectImpression = {
|
|
16
|
+
oo: topHadImpression,
|
|
17
|
+
no: bottomHadImpression,
|
|
18
|
+
};
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { logger as
|
|
2
|
-
import
|
|
1
|
+
import { logger as N } from "../../shared-lib/index.js";
|
|
2
|
+
import r from "../managers/braze-instance.js";
|
|
3
3
|
import ve from "../models/braze-event.js";
|
|
4
|
-
import
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
if (!
|
|
4
|
+
import E from "../models/request-result.js";
|
|
5
|
+
const c = {
|
|
6
|
+
ds: (e, o, t) => {
|
|
7
|
+
var n, s;
|
|
8
|
+
const i = new E(),
|
|
9
|
+
l = r.P();
|
|
10
|
+
if (!l)
|
|
11
11
|
return (
|
|
12
|
-
|
|
13
|
-
`Not logging event with type "${
|
|
12
|
+
N.info(
|
|
13
|
+
`Not logging event with type "${e}" because the current session ID could not be found.`,
|
|
14
14
|
),
|
|
15
|
-
|
|
15
|
+
i
|
|
16
16
|
);
|
|
17
|
-
const
|
|
17
|
+
const d = l.qo();
|
|
18
18
|
return (
|
|
19
|
-
|
|
19
|
+
i.fe.push(
|
|
20
20
|
new ve(
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
t || (null === (n = r.tr()) || void 0 === n ? void 0 : n.getUserId()),
|
|
22
|
+
e,
|
|
23
23
|
new Date().valueOf(),
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
d,
|
|
25
|
+
o,
|
|
26
26
|
),
|
|
27
27
|
),
|
|
28
|
-
(
|
|
29
|
-
(null === (
|
|
30
|
-
|
|
28
|
+
(i.ss =
|
|
29
|
+
(null === (s = r.j()) || void 0 === s ? void 0 : s.Eo(i.fe)) || !1),
|
|
30
|
+
i
|
|
31
31
|
);
|
|
32
32
|
},
|
|
33
33
|
};
|
|
34
|
-
export default
|
|
34
|
+
export default c;
|