UNPKG

@braze/web-sdk

Version:

Braze SDK for web sites and other JS platforms.

264 lines (263 loc) 7.33 kB
import l from "../util/net.js"; import r from "../managers/braze-instance.js"; import ControlMessage from "./models/control-message.js"; import HtmlMessage from "./models/html-message.js"; import InAppMessage from "./models/in-app-message.js"; import InAppMessageButton from "./models/in-app-message-button.js"; import v from "../common/event-logger.js"; import { newInAppMessageFromJson as pt } from "./in-app-message-factory.js"; import { randomInclusive as a } from "../util/math.js"; import L from "../models/request-result.js"; import { logger as b, EventTypes as p } from "../../shared-lib/index.js"; import f from "../managers/subscription-manager.js"; import gt from "../triggers/models/trigger.js"; import { BRAZE_ACTION_URI_REGEX as to } from "../util/validation-utils.js"; import { containsPushPrimerBrazeAction as jt, containsUnknownBrazeAction as vt, getDecodedBrazeAction as eo, ineligibleBrazeActionURLErrorMessage as yt, INELIGIBLE_BRAZE_ACTION_URL_ERROR_TYPES as bt, } from "../util/braze-actions.js"; import It from "../Push/utils/push-utils.js"; import h from "../util/request-header-utils.js"; import { STORAGE_KEYS as s } from "../managers/storage-manager.js"; import { FullScreenMessage, ModalMessage, SlideUpMessage } from "./index.js"; import { IamClickAction as Le, IamServerTypes as dt } from "./constants.js"; export default class ea { constructor(t, e, s, i) { (this.B = t), (this.C = e), (this.j = s), (this.Ss = i), (this.B = t), (this.C = e), (this.j = s), (this.Ss = i), (this.In = new f()), r.S(this.In), (this.An = 1e3), (this.Dn = 6e4), (this._n = null), (this.qn = null), (this.xn = null); } Pn() { return this.In; } En(t) { return this.In.Ut(t); } Gn() { return this._n; } Nn(t) { this._n = t; } Dt(t, e, s, i) { const r = new L(); let n; if (e === p.Fn || t instanceof ControlMessage) { if (!t.js()) return ( b.info( "This in-app message has already received an impression. Ignoring analytics event.", ), r ); } else if (e === p.On || (t instanceof HtmlMessage && e === p.Xn)) { if (!t.Yt(i)) return ( b.info( "This in-app message has already received a click. Ignoring analytics event.", ), r ); } return ( (n = t instanceof ControlMessage ? { trigger_ids: [t.triggerId] } : this.Hn(t)), null == n ? r : (t.messageExtras && (n.message_extras = t.messageExtras), null != s && (n.bid = s), v.Dt(e, n)) ); } Jn(t, e) { const s = new L(); if (!t.Yt()) return ( b.info( "This in-app message button has already received a click. Ignoring analytics event.", ), s ); const i = this.Hn(e); return null == i ? s : t.id === InAppMessageButton.Kn ? (b.info( "This in-app message button does not have a tracking id. Not logging event to Braze servers.", ), s) : (null != t.id && (i.bid = t.id), v.Dt(p.Xn, i)); } Ln(t) { const e = t.messageFields; return (null != e && e.is_push_primer) || !1; } Qn(t) { if (!(t instanceof InAppMessage)) return; const e = (t) => { if (!t) return; const e = eo(t); if (vt(e)) return yt(bt.Un, "In-App Message"); if (jt(e)) { const t = It.Vn(); if (!t.Wn) return It.Yn(t.reason, "In-App Message"); } }; if (this.Ln(t)) { const t = It.Vn(); if (!t.Wn) return It.Yn(t.reason, "In-App Message"); } const s = t.buttons || []; let i; for (const t of s) if ( t.clickAction === Le.URI && t.uri && to.test(t.uri) && ((i = e(t.uri)), i) ) return i; return t.clickAction === Le.URI && t.uri && to.test(t.uri) ? e(t.uri) : void 0; } Zn(t, e) { e !== this.xn && this._o(), (this.qn = t), (this.xn = e); } _o() { null != this.qn && (clearTimeout(this.qn), (this.qn = null), (this.xn = null)); } Xo(t, e, s, i) { const r = this.B; if (!r) return; this.xn && t.triggerId !== this.xn && (this._o(), h.Ji(this.j, h.it.Yo)); const n = r.Zo(!1), o = r.Z(n); (o.template = { trigger_id: t.triggerId, trigger_event_type: e }), null != s && (o.template.data = s.ta()); const u = r.tt(o, h.it.Yo); r.et( o, (r = -1) => { const n = this.B; if (!n) return; const m = new Date().valueOf(); h.nt(this.j, h.it.Yo, m), -1 !== r && u.push(["X-Braze-Req-Tokens-Remaining", r.toString()]); let c, p, f = !1; l.ot({ url: `${n.ht()}/template/`, data: o, headers: u, lt: (e) => { if (!n.ut(o, e, u)) return void ("function" == typeof t.ia && t.ia()); if ((n.ct(), null == e || null == e.templated_message)) return; const s = e.templated_message; if (s.type !== gt.la.oa) return; const i = pt(s.data); if (null == i) return; const r = this.Qn(i); if (r) return b.error(r), void ("function" == typeof t.ia && t.ia()); "function" == typeof t.ua && t.ua(i); }, error: (e) => { (f = !0), (c = e), (p = `getting user personalization for message ${t.triggerId}.`); }, ft: (r, o) => { if (new Date().valueOf() - t.ma < t.ca) { let r = 0; if (f) { const e = Math.min(t.ca, this.Dn), s = this.An; null == i && (i = s), (r = Math.min(e, a(s, 3 * i))); } n.yt( o, () => { this.Xo(t, e, s, r); }, h.it.Yo, (e) => this.Zn(e, t.triggerId), () => this._o(), r, ); } f && n.dt(c, p); }, }); }, h.it.Yo, ); } Hn(t) { if (null == t.triggerId) return ( b.info( "The in-app message has no analytics id. Not logging event to Braze servers.", ), null ); const e = {}; return null != t.triggerId && (e.trigger_ids = [t.triggerId]), e; } jn(t) { return ( !!this.j && !( !(t && t instanceof InAppMessage && t.constructor !== InAppMessage) || t instanceof ControlMessage ) && this.j.Pt(s.It.pa, t.qt()) ); } sa() { if (!this.j) return null; const t = this.j.St(s.It.pa); if (!t) return null; let e; switch (t.type) { case dt.cE: e = FullScreenMessage.ha(t); break; case dt.iE: case dt.PE: case dt.nE: e = HtmlMessage.ha(t); break; case dt.aE: case dt.UE: e = ModalMessage.ha(t); break; case dt.sE: e = SlideUpMessage.ha(t); } return e && this.fa(), e; } fa() { this.j && this.j.Vt(s.It.pa); } }