@braze/web-sdk 5.9.0 → 6.0.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.
Files changed (159) hide show
  1. package/index.d.ts +109 -253
  2. package/package.json +1 -1
  3. package/shared-lib/encoding-utils.js +1 -1
  4. package/shared-lib/event-types.js +24 -26
  5. package/shared-lib/guid.js +2 -2
  6. package/shared-lib/indexed-db-adapter.js +19 -19
  7. package/shared-lib/logger.js +2 -2
  8. package/shared-lib/supported-options.js +21 -22
  9. package/src/Banner/display/banner-to-html.js +13 -25
  10. package/src/Banner/display/destroy-banner-html.js +2 -2
  11. package/src/Banner/display/detect-banner-impressions.js +11 -11
  12. package/src/Banner/index.js +0 -1
  13. package/src/Banner/request-banners-refresh.js +8 -8
  14. package/src/Banner/subscribe-to-banners-updates.js +2 -2
  15. package/src/Banner/ui/insert-banner.js +7 -7
  16. package/src/Card/card-manager.js +35 -37
  17. package/src/Card/display/card-display.js +76 -74
  18. package/src/Card/index.js +0 -2
  19. package/src/Card/log-card-dismissal.js +2 -2
  20. package/src/Card/log-content-card-click.js +9 -2
  21. package/src/Card/log-content-card-impressions.js +11 -2
  22. package/src/Card/models/captioned-image.js +20 -20
  23. package/src/Card/models/card.js +110 -104
  24. package/src/Card/models/classic-card.js +20 -20
  25. package/src/Card/models/control-card.js +14 -14
  26. package/src/Card/models/image-only.js +19 -20
  27. package/src/Card/util/card-factory.js +57 -78
  28. package/src/ContentCards/content-cards-provider-factory.js +10 -10
  29. package/src/ContentCards/content-cards-provider.js +109 -109
  30. package/src/ContentCards/content-cards.js +21 -13
  31. package/src/ContentCards/get-cached-content-cards.js +2 -2
  32. package/src/ContentCards/request-content-cards-refresh.js +2 -2
  33. package/src/ContentCards/subscribe-to-content-cards-updates.js +5 -5
  34. package/src/ContentCards/ui/hide-content-cards.js +5 -5
  35. package/src/ContentCards/ui/show-content-cards.js +34 -34
  36. package/src/Core/add-sdk-metadata.js +2 -2
  37. package/src/Core/change-user.js +7 -7
  38. package/src/Core/disable-sdk.js +6 -6
  39. package/src/Core/enable-sdk.js +5 -5
  40. package/src/Core/get-user.js +1 -1
  41. package/src/Core/handle-braze-action.js +7 -7
  42. package/src/Core/is-disabled.js +2 -2
  43. package/src/Core/is-initialized.js +1 -1
  44. package/src/Core/log-custom-event.js +9 -9
  45. package/src/Core/log-purchase.js +7 -7
  46. package/src/Core/open-session.js +12 -12
  47. package/src/Core/request-immediate-data-flush.js +1 -1
  48. package/src/Core/set-sdk-authentication-signature.js +2 -2
  49. package/src/Core/wipe-data.js +7 -7
  50. package/src/FeatureFlags/feature-flag-factory.js +7 -7
  51. package/src/FeatureFlags/feature-flag.js +6 -6
  52. package/src/FeatureFlags/feature-flags-provider-factory.js +9 -9
  53. package/src/FeatureFlags/feature-flags-provider.js +1 -1
  54. package/src/FeatureFlags/get-all-feature-flags.js +2 -2
  55. package/src/FeatureFlags/get-feature-flag.js +2 -2
  56. package/src/FeatureFlags/log-feature-flag-impression.js +4 -4
  57. package/src/FeatureFlags/refresh-feature-flags.js +2 -2
  58. package/src/FeatureFlags/subscribe-to-feature-flags-updates.js +2 -2
  59. package/src/InAppMessage/defer-in-app-message.js +1 -1
  60. package/src/InAppMessage/display/html-message-to-html.js +37 -37
  61. package/src/InAppMessage/display/in-app-message-to-html.js +139 -133
  62. package/src/InAppMessage/display/modal-utils.js +39 -41
  63. package/src/InAppMessage/get-deferred-in-app-message.js +1 -1
  64. package/src/InAppMessage/in-app-message-factory.js +22 -14
  65. package/src/InAppMessage/in-app-message-manager.js +90 -88
  66. package/src/InAppMessage/log-in-app-message-button-click.js +5 -5
  67. package/src/InAppMessage/log-in-app-message-click.js +5 -5
  68. package/src/InAppMessage/log-in-app-message-html-click.js +5 -5
  69. package/src/InAppMessage/log-in-app-message-impression.js +1 -1
  70. package/src/InAppMessage/models/control-message.js +2 -2
  71. package/src/InAppMessage/models/full-screen-message.js +40 -34
  72. package/src/InAppMessage/models/html-message.js +23 -21
  73. package/src/InAppMessage/models/in-app-message-button.js +2 -2
  74. package/src/InAppMessage/models/in-app-message.js +137 -133
  75. package/src/InAppMessage/models/modal-message.js +39 -33
  76. package/src/InAppMessage/models/slide-up-message.js +36 -30
  77. package/src/InAppMessage/models/templated-in-app-message.js +8 -8
  78. package/src/InAppMessage/subscribe-to-in-app-message.js +1 -1
  79. package/src/InAppMessage/ui/automatically-show-in-app-messages.js +3 -3
  80. package/src/InAppMessage/ui/show-in-app-message.js +56 -62
  81. package/src/Push/is-push-blocked.js +2 -2
  82. package/src/Push/is-push-permission-granted.js +2 -2
  83. package/src/Push/is-push-supported.js +2 -2
  84. package/src/Push/push-manager-factory.js +8 -8
  85. package/src/Push/push-manager.js +90 -90
  86. package/src/Push/request-push-permission.js +1 -1
  87. package/src/Push/utils/push-utils.js +25 -15
  88. package/src/User/user-manager.js +14 -14
  89. package/src/User/user.js +55 -55
  90. package/src/common/content-cards-display.js +211 -0
  91. package/src/common/event-logger.js +6 -6
  92. package/src/index.js +0 -1
  93. package/src/l10n/l10n-manager-factory.js +9 -9
  94. package/src/l10n/l10n-manager.js +6 -6
  95. package/src/managers/auth-manager.js +27 -27
  96. package/src/managers/braze-instance.js +136 -137
  97. package/src/managers/device-manager.js +22 -22
  98. package/src/managers/network-manager.js +180 -183
  99. package/src/managers/server-config-manager.js +63 -63
  100. package/src/managers/session-manager.js +34 -34
  101. package/src/managers/storage-manager-factory.js +11 -11
  102. package/src/managers/storage-manager.js +139 -141
  103. package/src/managers/subscription-manager.js +3 -3
  104. package/src/managers/utils.js +1 -1
  105. package/src/models/backend-errors.js +5 -5
  106. package/src/models/braze-event.js +15 -15
  107. package/src/models/device.js +3 -3
  108. package/src/models/identifier.js +13 -13
  109. package/src/models/push-token.js +12 -12
  110. package/src/models/request-result.js +2 -2
  111. package/src/models/server-config.js +29 -29
  112. package/src/request-controller.js +181 -169
  113. package/src/triggers/models/custom-event-data.js +6 -6
  114. package/src/triggers/models/custom-event-property-data.js +7 -7
  115. package/src/triggers/models/filter-set.js +8 -8
  116. package/src/triggers/models/filter.js +45 -45
  117. package/src/triggers/models/in-app-message-click-data.js +3 -3
  118. package/src/triggers/models/purchase-data.js +1 -1
  119. package/src/triggers/models/purchase-property-data.js +4 -4
  120. package/src/triggers/models/push-click-data.js +1 -1
  121. package/src/triggers/models/trigger-condition.js +47 -47
  122. package/src/triggers/models/trigger-events.js +3 -3
  123. package/src/triggers/models/trigger.js +15 -15
  124. package/src/triggers/triggers-provider-factory.js +4 -4
  125. package/src/triggers/triggers-provider.js +44 -44
  126. package/src/ui/js/attach-css.js +3 -3
  127. package/src/ui/js/banner-css.js +1 -1
  128. package/src/ui/js/iam-css.js +1 -1
  129. package/src/ui/js/load-font-awesome.js +2 -2
  130. package/src/util/base-device-parser.js +4 -4
  131. package/src/util/braze-actions.js +8 -14
  132. package/src/util/browser-detector.js +12 -12
  133. package/src/util/client-hints-parser.js +3 -3
  134. package/src/util/component-utils.js +14 -14
  135. package/src/util/device-constants.js +1 -1
  136. package/src/util/dom-utils.js +6 -6
  137. package/src/util/html-display-utils.js +37 -37
  138. package/src/util/key-codes.js +1 -1
  139. package/src/util/net.js +1 -1
  140. package/src/util/request-header-utils.js +17 -17
  141. package/src/util/user-agent-parser.js +4 -4
  142. package/src/util/validation-utils.js +20 -20
  143. package/src/util/window-utils.js +1 -1
  144. package/src/Card/log-card-click.js +0 -11
  145. package/src/Card/log-card-impressions.js +0 -13
  146. package/src/Feed/feed-provider-factory.js +0 -18
  147. package/src/Feed/feed-provider.js +0 -90
  148. package/src/Feed/feed.js +0 -20
  149. package/src/Feed/get-cached-feed.js +0 -5
  150. package/src/Feed/index.js +0 -8
  151. package/src/Feed/log-feed-displayed.js +0 -7
  152. package/src/Feed/request-feed-refresh.js +0 -5
  153. package/src/Feed/subscribe-to-feed-updates.js +0 -5
  154. package/src/Feed/types.js +0 -1
  155. package/src/Feed/ui/hide-feed.js +0 -7
  156. package/src/Feed/ui/show-feed.js +0 -96
  157. package/src/Feed/ui/toggle-feed.js +0 -8
  158. package/src/common/base-feed.js +0 -29
  159. package/src/common/feed-display.js +0 -211
@@ -1,5 +0,0 @@
1
- import r from "../managers/braze-instance.js";
2
- import ie from "./feed-provider-factory.js";
3
- export function subscribeToFeedUpdates(e) {
4
- if (r.rr()) return ie.m().qt(e);
5
- }
package/src/Feed/types.js DELETED
@@ -1 +0,0 @@
1
- export {};
@@ -1,7 +0,0 @@
1
- import r from "../../managers/braze-instance.js";
2
- import { destroyFeedHtml as ee } from "../../common/feed-display.js";
3
- export function destroyFeed() {
4
- if (!r.rr()) return;
5
- const e = document.querySelectorAll(".ab-feed");
6
- for (let o = 0; o < e.length; o++) ee(e[o]);
7
- }
@@ -1,96 +0,0 @@
1
- import r, { OPTIONS as w } from "../../managers/braze-instance.js";
2
- import {
3
- destroyFeedHtml as ee,
4
- detectFeedImpressions as nn,
5
- feedToHtml as tn,
6
- LAST_REQUESTED_REFRESH_DATA_ATTRIBUTE as en,
7
- refreshFeed as on,
8
- registerFeedSubscriptionId as rn,
9
- updateFeedCards as an,
10
- } from "../../common/feed-display.js";
11
- import { Feed, logFeedDisplayed, subscribeToFeedUpdates } from "../index.js";
12
- import ie from "../feed-provider-factory.js";
13
- import { intersection as te } from "../../util/code-utils.js";
14
- import { setCardHeight as sn } from "../../Card/display/card-display.js";
15
- import { setupFeedUI as fn } from "../../ui/js/index.js";
16
- import { logger as N } from "../../../shared-lib/index.js";
17
- export function showFeed(e, t, n) {
18
- if (!r.rr()) return;
19
- fn();
20
- const o = (e, t) => {
21
- if (null == t) return e;
22
- const n = [];
23
- for (let e = 0; e < t.length; e++) n.push(t[e].toLowerCase());
24
- const o = [];
25
- for (let t = 0; t < e.length; t++) {
26
- const r = [],
27
- i = e[t].categories || [];
28
- for (let e = 0; e < i.length; e++) r.push(i[e].toLowerCase());
29
- te(r, n).length > 0 && o.push(e[t]);
30
- }
31
- return o;
32
- },
33
- i = r.ee(w.tn) || r.ee(w.en) || !1;
34
- let s = !1;
35
- null == e && ((e = document.body), (s = !0));
36
- let l,
37
- f = !1;
38
- null == t
39
- ? ((l = ie.m().ki()),
40
- an(l, o(l.cards, n), l.lastUpdated, null, i),
41
- (f = !0))
42
- : (l = new Feed(o(t, n), new Date()));
43
- const a = tn(l, i, s);
44
- if (f) {
45
- (null == l.lastUpdated ||
46
- new Date().valueOf() - l.lastUpdated.valueOf() > Feed.dr) &&
47
- (N.info(
48
- `Cached feed was older than max TTL of ${Feed.dr} ms, requesting an update from the server.`,
49
- ),
50
- on(l, a));
51
- const e = new Date().valueOf(),
52
- t = subscribeToFeedUpdates(function (t) {
53
- const r = a.querySelectorAll(".ab-refresh-button")[0];
54
- if (null != r) {
55
- let t = 500;
56
- t -= new Date().valueOf() - e;
57
- const n = a.getAttribute(en);
58
- if (n) {
59
- const e = parseInt(n);
60
- isNaN(e) || (t -= new Date().valueOf() - e);
61
- }
62
- setTimeout(
63
- function () {
64
- r.className = r.className.replace(/fa-spin/g, "");
65
- },
66
- Math.max(t, 0),
67
- );
68
- }
69
- an(l, o(t.cards, n), t.lastUpdated, a, i);
70
- });
71
- rn(t, a);
72
- }
73
- const u = (e) => {
74
- const t = e.querySelectorAll(".ab-feed");
75
- let n = null;
76
- for (let o = 0; o < t.length; o++) t[o].parentNode === e && (n = t[o]);
77
- null != n
78
- ? (ee(n), n.parentNode && n.parentNode.replaceChild(a, n))
79
- : e.appendChild(a),
80
- setTimeout(function () {
81
- a.className = a.className.replace("ab-hide", "ab-show");
82
- }, 0),
83
- s && a.focus(),
84
- logFeedDisplayed(),
85
- nn(l, a),
86
- l && sn(l.cards, e);
87
- };
88
- var d;
89
- null != e
90
- ? u(e)
91
- : (window.onload =
92
- ((d = window.onload),
93
- function () {
94
- "function" == typeof d && d(new Event("oldLoad")), u(document.body);
95
- }));
96
- }
@@ -1,8 +0,0 @@
1
- import r from "../../managers/braze-instance.js";
2
- import { destroyFeed, showFeed } from "../index.js";
3
- export function toggleFeed(e, o, n) {
4
- r.rr() &&
5
- (document.querySelectorAll(".ab-feed").length > 0
6
- ? destroyFeed()
7
- : showFeed(e, o, n));
8
- }
@@ -1,29 +0,0 @@
1
- import { logger as N } from "../../shared-lib/index.js";
2
- import { ControlCard } from "../Card/index.js";
3
- export const FEED_ANIMATION_DURATION = 500;
4
- export default class rr {
5
- constructor(s, e) {
6
- (this.cards = s),
7
- (this.lastUpdated = e),
8
- (this.cards = s),
9
- (this.lastUpdated = e);
10
- }
11
- getUnreadCardCount() {
12
- let s = 0;
13
- for (const e of this.cards) e.viewed || e instanceof ControlCard || s++;
14
- return s;
15
- }
16
- nr() {
17
- N.error("Must be implemented in a subclass");
18
- }
19
- logCardImpressions(s) {
20
- N.error("Must be implemented in a subclass");
21
- }
22
- logCardClick(s) {
23
- N.error("Must be implemented in a subclass");
24
- }
25
- sr() {
26
- N.error("Must be implemented in a subclass");
27
- }
28
- }
29
- (rr.dr = 6e4), (rr.Ih = 500), (rr.Ro = 1e4);
@@ -1,211 +0,0 @@
1
- import rr from "./base-feed.js";
2
- import {
3
- getCardId as be,
4
- markCardAsRead as ye,
5
- } from "../Card/display/card-display.js";
6
- import { bottomIsInView as B, topIsInView as x } from "../util/dom-utils.js";
7
- import { Card, ControlCard } from "../Card/index.js";
8
- import { cardToHtml as Fe } from "../Card/display/card-display.js";
9
- import { isArray as z } from "../util/code-utils.js";
10
- import { KeyCodes as bt } from "../util/key-codes.js";
11
- import ge from "../l10n/l10n-manager-factory.js";
12
- import { removeSubscription } from "../Core/remove-subscription.js";
13
- import { logger as N, Guid as K } from "../../shared-lib/index.js";
14
- import { BRAZE_ACTION_URI_REGEX as to } from "../util/validation-utils.js";
15
- import {
16
- INELIGIBLE_BRAZE_ACTION_URL_ERROR_TYPES as jt,
17
- ineligibleBrazeActionURLErrorMessage as dt,
18
- getDecodedBrazeAction as eo,
19
- containsUnknownBrazeAction as ft,
20
- } from "../util/braze-actions.js";
21
- import {
22
- bottomHadImpression as xe,
23
- impressOnBottom as j,
24
- impressOnTop as $,
25
- topHadImpression as Ee,
26
- } from "./detect-impression.js";
27
- import { SUBSCRIPTION_ID_DATA_ATTRIBUTE as f } from "./constants.js";
28
- export const LAST_REQUESTED_REFRESH_DATA_ATTRIBUTE =
29
- "data-last-requested-refresh";
30
- export const SCROLL_LISTENER_ID = "data-listener-id";
31
- export const scrollListeners = {};
32
- export function destroyFeedHtml(e) {
33
- e &&
34
- ((e.className = e.className.replace("ab-show", "ab-hide")),
35
- setTimeout(() => {
36
- e && e.parentNode && e.parentNode.removeChild(e);
37
- }, rr.Ih));
38
- const t = e.getAttribute(f);
39
- null != t && removeSubscription(t);
40
- const o = e.getAttribute("data-listener-id");
41
- null != o &&
42
- (window.removeEventListener("scroll", scrollListeners[o]),
43
- delete scrollListeners[o]);
44
- }
45
- export function generateFeedBody(e, t) {
46
- const o = ge.ea(),
47
- s = document.createElement("div");
48
- if (
49
- ((s.className = "ab-feed-body"),
50
- s.setAttribute("aria-label", "Feed"),
51
- s.setAttribute("role", "feed"),
52
- null == e.lastUpdated)
53
- ) {
54
- const e = document.createElement("div");
55
- e.className = "ab-no-cards-message";
56
- const t = document.createElement("i");
57
- (t.className = "fa fa-spinner fa-spin fa-4x ab-initial-spinner"),
58
- e.appendChild(t),
59
- s.appendChild(e);
60
- } else {
61
- let n = !1;
62
- const logCardClick = (t) => e.logCardClick(t);
63
- for (const r of e.cards) {
64
- const i = r instanceof ControlCard;
65
- !i || e.nr()
66
- ? (s.appendChild(Fe(r, logCardClick, t, o.Oo())), (n = n || !i))
67
- : N.error(
68
- "Received a control card for a legacy news feed. Control cards are only supported with content cards.",
69
- );
70
- }
71
- if (!n) {
72
- const e = document.createElement("div");
73
- (e.className = "ab-no-cards-message"),
74
- (e.innerHTML = o.get("NO_CARDS_MESSAGE") || ""),
75
- e.setAttribute("role", "article"),
76
- s.appendChild(e);
77
- }
78
- }
79
- return s;
80
- }
81
- export function detectFeedImpressions(e, t) {
82
- if (null != e && null != t) {
83
- const o = [],
84
- s = t.querySelectorAll(".ab-card");
85
- e._o || (e._o = {});
86
- for (let t = 0; t < s.length; t++) {
87
- const n = be(s[t]),
88
- r = x(s[t]),
89
- i = B(s[t]);
90
- if (e._o[n]) {
91
- r || i || ye(s[t]);
92
- continue;
93
- }
94
- let a = Ee(s[t]),
95
- d = xe(s[t]);
96
- const l = a,
97
- c = d;
98
- if (
99
- (!a && r && ((a = !0), $(s[t])), !d && i && ((d = !0), j(s[t])), a && d)
100
- ) {
101
- if (l && c) continue;
102
- for (const t of e.cards)
103
- if (t.id === n) {
104
- (e._o[t.id] = !0), o.push(t);
105
- break;
106
- }
107
- }
108
- }
109
- o.length > 0 && e.logCardImpressions(o);
110
- }
111
- }
112
- export function refreshFeed(e, t) {
113
- if (null == e || null == t) return;
114
- t.setAttribute("aria-busy", "true");
115
- const o = t.querySelectorAll(".ab-refresh-button")[0];
116
- null != o && (o.className += " fa-spin");
117
- const s = new Date().valueOf().toString();
118
- t.setAttribute("data-last-requested-refresh", s),
119
- setTimeout(() => {
120
- if (t.getAttribute("data-last-requested-refresh") === s) {
121
- const e = t.querySelectorAll(".fa-spin");
122
- for (let t = 0; t < e.length; t++)
123
- e[t].className = e[t].className.replace(/fa-spin/g, "");
124
- const o = t.querySelectorAll(".ab-initial-spinner")[0];
125
- if (null != o) {
126
- const e = document.createElement("span");
127
- (e.innerHTML = ge.ea().get("FEED_TIMEOUT_MESSAGE") || ""),
128
- null != o.parentNode &&
129
- (o.parentNode.appendChild(e), o.parentNode.removeChild(o));
130
- }
131
- "true" === t.getAttribute("aria-busy") &&
132
- t.setAttribute("aria-busy", "false");
133
- }
134
- }, rr.Ro),
135
- e.sr();
136
- }
137
- export function feedToHtml(e, t, o) {
138
- const s = document.createElement("div");
139
- (s.className = "ab-feed ab-hide ab-effect-slide"),
140
- s.setAttribute("role", "dialog"),
141
- s.setAttribute("aria-label", "Feed"),
142
- s.setAttribute("tabindex", "-1");
143
- const n = document.createElement("div");
144
- (n.className = "ab-feed-buttons-wrapper"),
145
- n.setAttribute("role", "group"),
146
- s.appendChild(n);
147
- const r = document.createElement("i");
148
- (r.className = "fa fa-times ab-close-button"),
149
- r.setAttribute("aria-label", "Close Feed"),
150
- r.setAttribute("tabindex", "0"),
151
- r.setAttribute("role", "button");
152
- const i = (e) => {
153
- destroyFeedHtml(s), e.stopPropagation();
154
- };
155
- r.addEventListener("keydown", (e) => {
156
- (e.keyCode !== bt.Wo && e.keyCode !== bt.Xo) || i(e);
157
- }),
158
- (r.onclick = i);
159
- const a = document.createElement("i");
160
- (a.className = "fa fa-refresh ab-refresh-button"),
161
- e && null == e.lastUpdated && (a.className += " fa-spin"),
162
- a.setAttribute("aria-label", "Refresh Feed"),
163
- a.setAttribute("tabindex", "0"),
164
- a.setAttribute("role", "button");
165
- const d = (t) => {
166
- refreshFeed(e, s), t.stopPropagation();
167
- };
168
- a.addEventListener("keydown", (e) => {
169
- (e.keyCode !== bt.Wo && e.keyCode !== bt.Xo) || d(e);
170
- }),
171
- (a.onclick = d),
172
- n.appendChild(a),
173
- n.appendChild(r),
174
- s.appendChild(generateFeedBody(e, t));
175
- const l = () => detectFeedImpressions(e, s);
176
- if ((s.addEventListener("scroll", l), !o)) {
177
- window.addEventListener("scroll", l);
178
- const e = K.ce();
179
- (scrollListeners[e] = l), s.setAttribute("data-listener-id", e);
180
- }
181
- return s;
182
- }
183
- export function updateFeedCards(e, t, o, s, n) {
184
- if (!z(t)) return;
185
- const r = [];
186
- for (const e of t)
187
- if (e instanceof Card) {
188
- if (e.url && to.test(e.url)) {
189
- const t = eo(e.url);
190
- if (ft(t)) {
191
- N.error(dt(jt.Mr, "Content Card"));
192
- continue;
193
- }
194
- }
195
- r.push(e);
196
- }
197
- if (((e.cards = r), (e.lastUpdated = o), null != s))
198
- if ((s.setAttribute("aria-busy", "false"), null == e.lastUpdated))
199
- destroyFeedHtml(s);
200
- else {
201
- const t = s.querySelectorAll(".ab-feed-body")[0];
202
- if (null != t) {
203
- const o = generateFeedBody(e, n);
204
- t.parentNode && t.parentNode.replaceChild(o, t),
205
- detectFeedImpressions(e, o.parentNode);
206
- }
207
- }
208
- }
209
- export function registerFeedSubscriptionId(e, t) {
210
- e && t.setAttribute(f, e);
211
- }