@gengage/assistant-fe 0.1.7 → 0.1.9

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 (134) hide show
  1. package/README.md +80 -282
  2. package/dist/assistant-fe.css +1 -1
  3. package/dist/chat/api.d.ts +1 -12
  4. package/dist/chat/api.d.ts.map +1 -1
  5. package/dist/chat/components/ChatDrawer.d.ts +15 -1
  6. package/dist/chat/components/ChatDrawer.d.ts.map +1 -1
  7. package/dist/chat/components/ChoicePrompter.d.ts +1 -0
  8. package/dist/chat/components/ChoicePrompter.d.ts.map +1 -1
  9. package/dist/chat/components/ComparisonTable.d.ts +5 -3
  10. package/dist/chat/components/ComparisonTable.d.ts.map +1 -1
  11. package/dist/chat/components/PanelTopBar.d.ts +2 -0
  12. package/dist/chat/components/PanelTopBar.d.ts.map +1 -1
  13. package/dist/chat/components/ProductSummaryCard.d.ts.map +1 -1
  14. package/dist/chat/components/ReviewHighlights.d.ts +3 -0
  15. package/dist/chat/components/ReviewHighlights.d.ts.map +1 -1
  16. package/dist/chat/components/renderUISpec.d.ts +0 -5
  17. package/dist/chat/components/renderUISpec.d.ts.map +1 -1
  18. package/dist/chat/index.d.ts +18 -9
  19. package/dist/chat/index.d.ts.map +1 -1
  20. package/dist/chat/locales/en.d.ts.map +1 -1
  21. package/dist/chat/locales/tr.d.ts.map +1 -1
  22. package/dist/chat/session-persistence.d.ts +3 -0
  23. package/dist/chat/session-persistence.d.ts.map +1 -1
  24. package/dist/chat/types.d.ts +23 -25
  25. package/dist/chat/types.d.ts.map +1 -1
  26. package/dist/chat.cjs +1 -1
  27. package/dist/chat.iife.js +24 -24
  28. package/dist/chat.iife.js.map +1 -1
  29. package/dist/chat.js +8 -9
  30. package/dist/chat.js.map +1 -1
  31. package/dist/common/action-router.d.ts.map +1 -1
  32. package/dist/common/activity-tracker.d.ts +1 -1
  33. package/dist/common/analytics.d.ts +12 -8
  34. package/dist/common/analytics.d.ts.map +1 -1
  35. package/dist/common/api-paths.d.ts +2 -5
  36. package/dist/common/api-paths.d.ts.map +1 -1
  37. package/dist/common/config-schema.d.ts.map +1 -1
  38. package/dist/common/debug.d.ts +14 -0
  39. package/dist/common/debug.d.ts.map +1 -0
  40. package/dist/common/events.d.ts.map +1 -1
  41. package/dist/common/index.d.ts +2 -2
  42. package/dist/common/index.d.ts.map +1 -1
  43. package/dist/common/overlay.d.ts +19 -0
  44. package/dist/common/overlay.d.ts.map +1 -1
  45. package/dist/common/{v1-protocol-adapter.d.ts → protocol-adapter.d.ts} +2 -2
  46. package/dist/common/protocol-adapter.d.ts.map +1 -0
  47. package/dist/common/quantity-stepper.d.ts +10 -10
  48. package/dist/common/quantity-stepper.d.ts.map +1 -1
  49. package/dist/common/safe-html.d.ts.map +1 -1
  50. package/dist/common/streaming.d.ts.map +1 -1
  51. package/dist/common/tts-player.d.ts +2 -0
  52. package/dist/common/tts-player.d.ts.map +1 -1
  53. package/dist/common/types.d.ts +1 -1
  54. package/dist/common/voice-input.d.ts +1 -0
  55. package/dist/common/voice-input.d.ts.map +1 -1
  56. package/dist/common/widget-base.d.ts.map +1 -1
  57. package/dist/common.cjs +1 -1
  58. package/dist/common.cjs.map +1 -1
  59. package/dist/common.js +173 -172
  60. package/dist/common.js.map +1 -1
  61. package/dist/index-BWPx4pM7.cjs +13 -0
  62. package/dist/index-BWPx4pM7.cjs.map +1 -0
  63. package/dist/index-CEt87kCd.js +4463 -0
  64. package/dist/index-CEt87kCd.js.map +1 -0
  65. package/dist/index-DL4CAkyL.cjs +2 -0
  66. package/dist/index-DL4CAkyL.cjs.map +1 -0
  67. package/dist/{index-BH-V2lWn.js → index-DR2uepzb.js} +108 -106
  68. package/dist/index-DR2uepzb.js.map +1 -0
  69. package/dist/index.cjs +1 -1
  70. package/dist/index.js +16 -16
  71. package/dist/native.cjs +1 -1
  72. package/dist/native.iife.js +18 -18
  73. package/dist/native.iife.js.map +1 -1
  74. package/dist/native.js +1 -1
  75. package/dist/qna/index.d.ts +19 -0
  76. package/dist/qna/index.d.ts.map +1 -1
  77. package/dist/qna/types.d.ts +2 -2
  78. package/dist/qna/types.d.ts.map +1 -1
  79. package/dist/qna.cjs +1 -1
  80. package/dist/qna.cjs.map +1 -1
  81. package/dist/qna.css +1 -1
  82. package/dist/qna.iife.js +7 -7
  83. package/dist/qna.iife.js.map +1 -1
  84. package/dist/qna.js +14 -14
  85. package/dist/qna.js.map +1 -1
  86. package/dist/quantity-stepper-C-nV4lwi.js +77 -0
  87. package/dist/quantity-stepper-C-nV4lwi.js.map +1 -0
  88. package/dist/quantity-stepper-CURMkwRF.cjs +2 -0
  89. package/dist/quantity-stepper-CURMkwRF.cjs.map +1 -0
  90. package/dist/{schemas-yF4IOEUi.js → schemas-DIhL3DkL.js} +1166 -947
  91. package/dist/schemas-DIhL3DkL.js.map +1 -0
  92. package/dist/schemas-Dsr0bbO_.cjs +86 -0
  93. package/dist/schemas-Dsr0bbO_.cjs.map +1 -0
  94. package/dist/simrel/api.d.ts +1 -1
  95. package/dist/simrel/api.d.ts.map +1 -1
  96. package/dist/simrel/components/GroupTabs.d.ts +1 -1
  97. package/dist/simrel/components/GroupTabs.d.ts.map +1 -1
  98. package/dist/simrel/components/ProductCard.d.ts +1 -1
  99. package/dist/simrel/components/ProductCard.d.ts.map +1 -1
  100. package/dist/simrel/components/ProductGrid.d.ts +1 -1
  101. package/dist/simrel/components/ProductGrid.d.ts.map +1 -1
  102. package/dist/simrel/index.d.ts +20 -1
  103. package/dist/simrel/index.d.ts.map +1 -1
  104. package/dist/simrel/locales/en.d.ts.map +1 -1
  105. package/dist/simrel/locales/tr.d.ts.map +1 -1
  106. package/dist/simrel/types.d.ts +1 -0
  107. package/dist/simrel/types.d.ts.map +1 -1
  108. package/dist/simrel.cjs +1 -1
  109. package/dist/simrel.cjs.map +1 -1
  110. package/dist/simrel.css +1 -1
  111. package/dist/simrel.iife.js +11 -11
  112. package/dist/simrel.iife.js.map +1 -1
  113. package/dist/simrel.js +123 -111
  114. package/dist/simrel.js.map +1 -1
  115. package/package.json +1 -1
  116. package/dist/chat/components/ProactivePopup.d.ts +0 -20
  117. package/dist/chat/components/ProactivePopup.d.ts.map +0 -1
  118. package/dist/chat/heartbeat.d.ts +0 -71
  119. package/dist/chat/heartbeat.d.ts.map +0 -1
  120. package/dist/common/v1-protocol-adapter.d.ts.map +0 -1
  121. package/dist/index-1yPxOqAw.cjs +0 -13
  122. package/dist/index-1yPxOqAw.cjs.map +0 -1
  123. package/dist/index-BH-V2lWn.js.map +0 -1
  124. package/dist/index-BelS6Vnv.cjs +0 -2
  125. package/dist/index-BelS6Vnv.cjs.map +0 -1
  126. package/dist/index-CERWfDdF.js +0 -4571
  127. package/dist/index-CERWfDdF.js.map +0 -1
  128. package/dist/quantity-stepper-B8kX8GbN.js +0 -209
  129. package/dist/quantity-stepper-B8kX8GbN.js.map +0 -1
  130. package/dist/quantity-stepper-UbAp53Ow.cjs +0 -2
  131. package/dist/quantity-stepper-UbAp53Ow.cjs.map +0 -1
  132. package/dist/schemas-DHzfUzwA.cjs +0 -86
  133. package/dist/schemas-DHzfUzwA.cjs.map +0 -1
  134. package/dist/schemas-yF4IOEUi.js.map +0 -1
@@ -1,46 +1,46 @@
1
- import { G as Q } from "./index-CERWfDdF.js";
2
- import { GengageQNA as H } from "./qna.js";
3
- import { GengageSimRel as V } from "./simrel.js";
4
- import { o as p, s as h, U as j, _ as E, d as y, v as q, V as K, W as G } from "./schemas-yF4IOEUi.js";
5
- const b = p({
1
+ import { G as H } from "./index-CEt87kCd.js";
2
+ import { GengageQNA as j } from "./qna.js";
3
+ import { GengageSimRel as K } from "./simrel.js";
4
+ import { o as p, s as h, Y as V, _ as x, D as q, d as y, y as M, Z as $, $ as G, E as Y } from "./schemas-DIhL3DkL.js";
5
+ const T = p({
6
6
  enabled: y().default(!0)
7
- }), $ = p({
7
+ }), J = p({
8
8
  chat: h().optional(),
9
9
  qna: h().optional(),
10
10
  simrel: h().optional()
11
- }), Y = p({}), J = E(["none", "x-api-key-header", "bearer-header", "body-api-key"]), X = p({
12
- mode: J.default("none"),
11
+ }), X = p({}), Z = x(["none", "x-api-key-header", "bearer-header", "body-api-key"]), z = p({
12
+ mode: Z.default("none"),
13
13
  key: h().optional(),
14
14
  headerName: h().optional(),
15
15
  bodyField: h().default("api_key")
16
- }), z = p({
16
+ }), ee = p({
17
17
  enabled: y().default(!0),
18
18
  endpoint: h().default("/analytics"),
19
- auth: X.default({ mode: "none", bodyField: "api_key" }),
19
+ auth: z.default({ mode: "none", bodyField: "api_key" }),
20
20
  fireAndForget: y().default(!0),
21
21
  useBeacon: y().default(!0),
22
22
  keepaliveFetch: y().default(!0),
23
- timeoutMs: q().int().positive().default(4e3),
24
- maxRetries: q().int().min(0).max(5).default(1)
25
- }), x = "__gengageWidgetsInit", Z = p({
26
- idempotencyKey: h().default(x),
23
+ timeoutMs: M().int().positive().default(4e3),
24
+ maxRetries: M().int().min(0).max(5).default(1)
25
+ }), U = "__gengageWidgetsInit", te = p({
26
+ idempotencyKey: h().default(U),
27
27
  requireDomReady: y().default(!0)
28
- }), ee = E(["log-and-ignore", "throw", "delegate"]), te = p({
29
- unknownActionPolicy: ee.default("log-and-ignore"),
28
+ }), ne = x(["log-and-ignore", "throw", "delegate"]), ie = p({
29
+ unknownActionPolicy: ne.default("log-and-ignore"),
30
30
  allowScriptCall: y().default(!1)
31
31
  }), R = p({
32
- version: j("1"),
33
- accountId: h().min(1),
34
- middlewareUrl: h().url(),
32
+ version: V("1", { error: 'version must be "1"' }),
33
+ accountId: h({ error: "accountId must be a non-empty string" }).min(1, { error: "accountId must be a non-empty string" }),
34
+ middlewareUrl: h({ error: 'middlewareUrl must be a valid URL (e.g. "https://your-backend.example.com")' }).url({ error: 'middlewareUrl must be a valid URL (e.g. "https://your-backend.example.com")' }),
35
35
  locale: h().optional(),
36
36
  widgets: p({
37
- chat: b.default({ enabled: !0 }),
38
- qna: b.default({ enabled: !0 }),
39
- simrel: b.default({ enabled: !0 })
37
+ chat: T.default({ enabled: !0 }),
38
+ qna: T.default({ enabled: !0 }),
39
+ simrel: T.default({ enabled: !0 })
40
40
  }),
41
- mounts: $.default({}),
42
- transport: Y.default({}),
43
- analytics: z.default({
41
+ mounts: J.default({}),
42
+ transport: X.default({}),
43
+ analytics: ee.default({
44
44
  enabled: !0,
45
45
  endpoint: "/analytics",
46
46
  auth: { mode: "none", bodyField: "api_key" },
@@ -50,23 +50,25 @@ const b = p({
50
50
  timeoutMs: 4e3,
51
51
  maxRetries: 1
52
52
  }),
53
- gtm: Z.default({
53
+ gtm: te.default({
54
54
  idempotencyKey: "__gengageWidgetsInit",
55
55
  requireDomReady: !0
56
56
  }),
57
- actionHandling: te.default({
57
+ actionHandling: ie.default({
58
58
  unknownActionPolicy: "log-and-ignore",
59
59
  allowScriptCall: !1
60
60
  })
61
61
  });
62
- function ne(t) {
63
- return R.parse(t);
62
+ function se(t) {
63
+ q("config", "parsing account runtime config", t);
64
+ const e = R.parse(t);
65
+ return q("config", "config resolved", { accountId: e.accountId, middlewareUrl: e.middlewareUrl }), e;
64
66
  }
65
- function Te(t) {
67
+ function Ce(t) {
66
68
  return R.safeParse(t);
67
69
  }
68
- function be(t) {
69
- return ne({
70
+ function Ie(t) {
71
+ return se({
70
72
  version: "1",
71
73
  accountId: t.accountId,
72
74
  middlewareUrl: t.middlewareUrl,
@@ -78,7 +80,7 @@ function be(t) {
78
80
  }
79
81
  });
80
82
  }
81
- const U = `${x}_overlay_`, ie = "#gengage-qna", se = "#gengage-simrel";
83
+ const P = `${U}_overlay_`, oe = "#gengage-qna", ae = "#gengage-simrel";
82
84
  function C() {
83
85
  const t = window;
84
86
  return t.__gengageOverlayRegistry || (t.__gengageOverlayRegistry = {
@@ -86,13 +88,13 @@ function C() {
86
88
  pending: {}
87
89
  }), t.__gengageOverlayRegistry;
88
90
  }
89
- function oe(t) {
91
+ function re(t) {
90
92
  const e = {
91
93
  pageType: t.pageContext?.pageType ?? (t.sku !== void 0 ? "pdp" : "other")
92
94
  }, n = t.pageContext;
93
95
  return n?.sku !== void 0 && (e.sku = n.sku), n?.price !== void 0 && (e.price = n.price), n?.categoryTree !== void 0 && (e.categoryTree = n.categoryTree), n?.url !== void 0 && (e.url = n.url), n?.extra !== void 0 && (e.extra = n.extra), t.sku !== void 0 && (e.sku = t.sku), e;
94
96
  }
95
- function ae(t, e) {
97
+ function de(t, e) {
96
98
  const n = {
97
99
  ...t,
98
100
  ...e,
@@ -100,15 +102,15 @@ function ae(t, e) {
100
102
  };
101
103
  return e.sku === void 0 && t.sku !== void 0 && (n.sku = t.sku), n;
102
104
  }
103
- function M(t) {
105
+ function S(t) {
104
106
  return t instanceof HTMLElement || document.querySelector(t) ? t : null;
105
107
  }
106
- function P(t) {
107
- return t.idempotencyKey ?? `${U}${t.accountId}`;
108
+ function W(t) {
109
+ return t.idempotencyKey ?? `${P}${t.accountId}`;
108
110
  }
109
- class re {
111
+ class ce {
110
112
  constructor(e, n) {
111
- this.options = e, this.onDestroy = n, this._chat = null, this._qna = null, this._simrel = null, this._analyticsClient = null, this._offQnaWire = null, this._destroyed = !1, this._queue = Promise.resolve(), this._warnedQnaMountMissing = !1, this._warnedSimRelMountMissing = !1, this.idempotencyKey = P(e), this.session = K(e.session), this._pageContext = oe(e);
113
+ this.options = e, this.onDestroy = n, this._chat = null, this._qna = null, this._simrel = null, this._analyticsClient = null, this._offQnaWire = null, this._destroyed = !1, this._queue = Promise.resolve(), this._warnedQnaMountMissing = !1, this._warnedSimRelMountMissing = !1, this.idempotencyKey = W(e), this.session = $(e.session), this._pageContext = re(e);
112
114
  }
113
115
  get chat() {
114
116
  return this._chat;
@@ -133,7 +135,7 @@ class re {
133
135
  }
134
136
  async updateContext(e) {
135
137
  this._destroyed || await this._enqueue(async () => {
136
- this._pageContext = ae(this._pageContext, e), window.gengage || (window.gengage = {}), window.gengage.pageContext = this._pageContext, this._chat?.update(e), this._qna?.update(e), this._simrel?.update(e), await this._syncPdpWidgets();
138
+ this._pageContext = de(this._pageContext, e), window.gengage || (window.gengage = {}), window.gengage.pageContext = this._pageContext, this._chat?.update(e), this._qna?.update(e), this._simrel?.update(e), await this._syncPdpWidgets();
137
139
  });
138
140
  }
139
141
  async updateSku(e, n = "pdp") {
@@ -151,7 +153,7 @@ class re {
151
153
  pageContext: this._pageContext,
152
154
  variant: this.options.chat?.variant ?? "floating"
153
155
  };
154
- this.options.theme !== void 0 && (n.theme = this.options.theme), this.options.locale !== void 0 && (n.locale = this.options.locale), this.options.pricing !== void 0 && (n.pricing = this.options.pricing), this.options.chat?.mountTarget !== void 0 && (n.mountTarget = this.options.chat.mountTarget), this.options.chat?.launcherSvg !== void 0 && (n.launcherSvg = this.options.chat.launcherSvg), this.options.chat?.headerTitle !== void 0 && (n.headerTitle = this.options.chat.headerTitle), this.options.chat?.headerAvatarUrl !== void 0 && (n.headerAvatarUrl = this.options.chat.headerAvatarUrl), this.options.chat?.headerBadge !== void 0 && (n.headerBadge = this.options.chat.headerBadge), this.options.chat?.headerCartUrl !== void 0 && (n.headerCartUrl = this.options.chat.headerCartUrl), this.options.chat?.headerFavoritesToggle !== void 0 && (n.headerFavoritesToggle = this.options.chat.headerFavoritesToggle), this.options.chat?.hideMobileLauncher !== void 0 && (n.hideMobileLauncher = this.options.chat.hideMobileLauncher), this.options.chat?.mobileBreakpoint !== void 0 && (n.mobileBreakpoint = this.options.chat.mobileBreakpoint), this.options.chat?.mobileInitialState !== void 0 && (n.mobileInitialState = this.options.chat.mobileInitialState), this.options.chat?.i18n !== void 0 && (n.i18n = this.options.chat.i18n), this.options.chat?.actionHandling !== void 0 && (n.actionHandling = this.options.chat.actionHandling), this.options.onScriptCall !== void 0 && (n.onScriptCall = this.options.onScriptCall), this._chat = new Q(), await this._chat.init(n);
156
+ this.options.theme !== void 0 && (n.theme = this.options.theme), this.options.locale !== void 0 && (n.locale = this.options.locale), this.options.pricing !== void 0 && (n.pricing = this.options.pricing), this.options.chat?.mountTarget !== void 0 && (n.mountTarget = this.options.chat.mountTarget), this.options.chat?.launcherSvg !== void 0 && (n.launcherSvg = this.options.chat.launcherSvg), this.options.chat?.headerTitle !== void 0 && (n.headerTitle = this.options.chat.headerTitle), this.options.chat?.headerAvatarUrl !== void 0 && (n.headerAvatarUrl = this.options.chat.headerAvatarUrl), this.options.chat?.headerBadge !== void 0 && (n.headerBadge = this.options.chat.headerBadge), this.options.chat?.headerCartUrl !== void 0 && (n.headerCartUrl = this.options.chat.headerCartUrl), this.options.chat?.headerFavoritesToggle !== void 0 && (n.headerFavoritesToggle = this.options.chat.headerFavoritesToggle), this.options.chat?.hideMobileLauncher !== void 0 && (n.hideMobileLauncher = this.options.chat.hideMobileLauncher), this.options.chat?.mobileBreakpoint !== void 0 && (n.mobileBreakpoint = this.options.chat.mobileBreakpoint), this.options.chat?.mobileInitialState !== void 0 && (n.mobileInitialState = this.options.chat.mobileInitialState), this.options.chat?.i18n !== void 0 && (n.i18n = this.options.chat.i18n), this.options.chat?.actionHandling !== void 0 && (n.actionHandling = this.options.chat.actionHandling), this.options.onScriptCall !== void 0 && (n.onScriptCall = this.options.onScriptCall), this._chat = new H(), await this._chat.init(n);
155
157
  }
156
158
  async _syncPdpWidgets() {
157
159
  if (this._destroyed) return;
@@ -162,12 +164,12 @@ class re {
162
164
  }
163
165
  const a = this.options.middlewareUrl;
164
166
  if (this.options.qna?.enabled !== !1) {
165
- const s = this.options.qna?.mountTarget ?? ie, i = M(s);
167
+ const s = this.options.qna?.mountTarget ?? oe, i = S(s);
166
168
  if (i)
167
169
  if (this._warnedQnaMountMissing = !1, this._qna)
168
170
  this._qna.show(), this._qna.update({ pageType: "pdp", sku: e });
169
171
  else {
170
- const u = new H(), o = {
172
+ const u = new j(), o = {
171
173
  accountId: this.options.accountId,
172
174
  middlewareUrl: a,
173
175
  session: this.session,
@@ -184,12 +186,12 @@ class re {
184
186
  } else
185
187
  this._qna?.destroy(), this._qna = null;
186
188
  if (this.options.simrel?.enabled !== !1) {
187
- const s = this.options.simrel?.mountTarget ?? se, i = M(s);
189
+ const s = this.options.simrel?.mountTarget ?? ae, i = S(s);
188
190
  if (i)
189
191
  if (this._warnedSimRelMountMissing = !1, this._simrel)
190
192
  this._simrel.show(), this._simrel.update({ pageType: "pdp", sku: e });
191
193
  else {
192
- const u = new V(), o = {
194
+ const u = new K(), o = {
193
195
  accountId: this.options.accountId,
194
196
  middlewareUrl: a,
195
197
  session: this.session,
@@ -197,7 +199,7 @@ class re {
197
199
  mountTarget: i
198
200
  };
199
201
  this.options.theme !== void 0 && (o.theme = this.options.theme), this.options.pricing !== void 0 && (o.pricing = this.options.pricing), this.options.simrel?.discountType !== void 0 && (o.discountType = this.options.simrel.discountType), this.options.onAddToCart !== void 0 && (o.onAddToCart = this.options.onAddToCart), this.options.onProductNavigate !== void 0 ? o.onProductNavigate = this.options.onProductNavigate : o.onProductNavigate = (r, c, m) => {
200
- this._chat?.saveSession(m ?? this.session.sessionId, c), window.location.href = r;
202
+ Y(r) && (this._chat?.saveSession(m ?? this.session.sessionId, c), window.location.href = r);
201
203
  }, await u.init(o), this._simrel = u;
202
204
  }
203
205
  else
@@ -214,12 +216,12 @@ class re {
214
216
  }), n;
215
217
  }
216
218
  }
217
- async function de(t) {
218
- const e = P(t), n = C(), a = n.instances[e];
219
+ async function le(t) {
220
+ const e = W(t), n = C(), a = n.instances[e];
219
221
  if (a) return a;
220
222
  const s = n.pending[e];
221
223
  if (s) return s;
222
- const i = new re(t, () => {
224
+ const i = new ce(t, () => {
223
225
  const o = C();
224
226
  delete o.instances[e], delete o.pending[e];
225
227
  }), u = i.init().then(() => (n.instances[e] = i, delete n.pending[e], i)).catch((o) => {
@@ -227,16 +229,16 @@ async function de(t) {
227
229
  });
228
230
  return n.pending[e] = u, u;
229
231
  }
230
- function ce(t) {
232
+ function ge(t) {
231
233
  return C().instances[t] ?? null;
232
234
  }
233
- function Ce(t) {
234
- ce(t)?.destroy();
235
- }
236
235
  function Ne(t) {
237
- return `${U}${t}`;
236
+ ge(t)?.destroy();
237
+ }
238
+ function qe(t) {
239
+ return `${P}${t}`;
238
240
  }
239
- const le = [
241
+ const ue = [
240
242
  "gengage:chat:open",
241
243
  "gengage:chat:close",
242
244
  "gengage:chat:ready",
@@ -247,8 +249,8 @@ const le = [
247
249
  "gengage:similar:add-to-cart",
248
250
  "gengage:global:error",
249
251
  "gengage:context:update"
250
- ], ge = 32, S = "#gengage-qna", k = "#gengage-simrel";
251
- function ue(t) {
252
+ ], he = 32, k = "#gengage-qna", A = "#gengage-simrel";
253
+ function fe(t) {
252
254
  let e = t;
253
255
  if (typeof t == "string") {
254
256
  const i = t.trim();
@@ -273,7 +275,7 @@ function ue(t) {
273
275
  }
274
276
  return s === void 0 ? { type: a } : { type: a, payload: s };
275
277
  }
276
- function he(t) {
278
+ function pe(t) {
277
279
  if (typeof t == "string" && t.length > 0)
278
280
  return { sku: t };
279
281
  if (t && typeof t == "object" && "sku" in t) {
@@ -285,11 +287,11 @@ function he(t) {
285
287
  }
286
288
  return null;
287
289
  }
288
- function N(t, e) {
290
+ function I(t, e) {
289
291
  return e instanceof HTMLElement ? !0 : typeof e != "string" ? !1 : t.document.querySelector(e) !== null;
290
292
  }
291
- function A(t, e, n) {
292
- if (e instanceof HTMLElement || N(t, e) || typeof e != "string") return e;
293
+ function E(t, e, n) {
294
+ if (e instanceof HTMLElement || I(t, e) || typeof e != "string") return e;
293
295
  if (e.startsWith("#")) {
294
296
  const i = e.slice(1);
295
297
  if (i.length > 0) {
@@ -304,7 +306,7 @@ function A(t, e, n) {
304
306
  const s = t.document.createElement("div");
305
307
  return s.id = n, t.document.body.appendChild(s), s;
306
308
  }
307
- function W(t, e) {
309
+ function L(t, e) {
308
310
  const n = t.webkit?.messageHandlers?.[e];
309
311
  return n && typeof n.postMessage == "function" ? n.postMessage.bind(n) : null;
310
312
  }
@@ -315,14 +317,14 @@ function O(t, e) {
315
317
  function B(t, e) {
316
318
  return O(t, e);
317
319
  }
318
- function L(t, e) {
320
+ function D(t, e) {
319
321
  return O(t, e);
320
322
  }
321
- function fe(t = {}) {
323
+ function me(t = {}) {
322
324
  const e = t.win ?? window, n = t.iosHandlerName ?? "gengage", a = t.androidInterfaceName ?? "GengageNative", s = t.reactNativeInterfaceName ?? "ReactNativeWebView";
323
- return W(e, n) ? "ios" : B(e, a) ? "android" : L(e, s) ? "react-native" : "browser";
325
+ return L(e, n) ? "ios" : B(e, a) ? "android" : D(e, s) ? "react-native" : "browser";
324
326
  }
325
- function pe(t, e = {}) {
327
+ function ye(t, e = {}) {
326
328
  const n = e.win ?? window;
327
329
  if (t.sessionId !== void 0) {
328
330
  n.__gengageSessionId = t.sessionId, n.gengage || (n.gengage = {}), n.gengage.sessionId = t.sessionId;
@@ -337,15 +339,15 @@ function pe(t, e = {}) {
337
339
  s.userId = t.userId, a.session = s;
338
340
  }
339
341
  }
340
- function me(t = {}) {
342
+ function ve(t = {}) {
341
343
  const e = t.win ?? window, n = e;
342
344
  if (n.gengageNative) return n.gengageNative;
343
- const a = t.iosHandlerName ?? "gengage", s = t.androidInterfaceName ?? "GengageNative", i = t.reactNativeInterfaceName ?? "ReactNativeWebView", u = t.trackedEvents ?? [...le], o = fe({ win: e, iosHandlerName: a, androidInterfaceName: s, reactNativeInterfaceName: i });
345
+ const a = t.iosHandlerName ?? "gengage", s = t.androidInterfaceName ?? "GengageNative", i = t.reactNativeInterfaceName ?? "ReactNativeWebView", u = t.trackedEvents ?? [...ue], o = me({ win: e, iosHandlerName: a, androidInterfaceName: s, reactNativeInterfaceName: i });
344
346
  let r = e.gengage?.overlay ?? null;
345
347
  const c = [], m = (l, d) => {
346
348
  const f = d === void 0 ? { type: l } : { type: l, payload: d };
347
349
  if (o === "ios") {
348
- W(e, a)?.(f);
350
+ L(e, a)?.(f);
349
351
  return;
350
352
  }
351
353
  if (o === "android") {
@@ -353,7 +355,7 @@ function me(t = {}) {
353
355
  return;
354
356
  }
355
357
  if (o === "react-native") {
356
- L(e, i)?.postMessage(JSON.stringify(f));
358
+ D(e, i)?.postMessage(JSON.stringify(f));
357
359
  return;
358
360
  }
359
361
  }, v = (l) => {
@@ -375,14 +377,14 @@ function me(t = {}) {
375
377
  };
376
378
  return e.addEventListener(l, d), { event: l, handler: d };
377
379
  }), _ = (l) => {
378
- c.length >= ge && c.shift(), c.push(l);
379
- }, D = () => {
380
+ c.length >= he && c.shift(), c.push(l);
381
+ }, Q = () => {
380
382
  if (!r || c.length === 0) return;
381
383
  const l = c.splice(0, c.length);
382
384
  for (const d of l)
383
- I(d);
384
- }, I = (l) => {
385
- const d = ue(l);
385
+ N(d);
386
+ }, N = (l) => {
387
+ const d = fe(l);
386
388
  if (!d || typeof d.type != "string") {
387
389
  console.warn("[gengage:native-bridge] Invalid message:", l);
388
390
  return;
@@ -404,16 +406,16 @@ function me(t = {}) {
404
406
  return;
405
407
  }
406
408
  case "updateSku": {
407
- const T = he(g);
408
- if (r && T) {
409
- r.updateSku(T.sku, T.pageType);
409
+ const b = pe(g);
410
+ if (r && b) {
411
+ r.updateSku(b.sku, b.pageType);
410
412
  return;
411
413
  }
412
414
  r ? console.warn("[gengage:native-bridge] updateSku: missing sku") : _(d);
413
415
  return;
414
416
  }
415
417
  case "setSession": {
416
- g && typeof g == "object" && pe(g, { win: e });
418
+ g && typeof g == "object" && ye(g, { win: e });
417
419
  return;
418
420
  }
419
421
  case "destroy": {
@@ -426,9 +428,9 @@ function me(t = {}) {
426
428
  }, w = {
427
429
  env: o,
428
430
  sendToNative: m,
429
- receive: I,
431
+ receive: N,
430
432
  setController(l) {
431
- r = l, D();
433
+ r = l, Q();
432
434
  },
433
435
  destroy() {
434
436
  e.removeEventListener("gengage:bridge:message", v);
@@ -439,8 +441,8 @@ function me(t = {}) {
439
441
  };
440
442
  return n.gengageNative = w, w;
441
443
  }
442
- async function Ie(t) {
443
- const { nativeBridge: e, emitReadyEvent: n = !0, ...a } = t, s = me(e), i = { ...a };
444
+ async function Me(t) {
445
+ const { nativeBridge: e, emitReadyEvent: n = !0, ...a } = t, s = ve(e), i = { ...a };
444
446
  i.onAddToCart || (i.onAddToCart = (c) => {
445
447
  s.sendToNative("addToCart", {
446
448
  sku: c.sku,
@@ -457,24 +459,24 @@ async function Ie(t) {
457
459
  const u = i.qna?.enabled === !0 || i.qna?.mountTarget !== void 0;
458
460
  if (i.qna?.enabled !== !1)
459
461
  if (u) {
460
- const c = A(
462
+ const c = E(
461
463
  window,
462
- i.qna?.mountTarget ?? S,
464
+ i.qna?.mountTarget ?? k,
463
465
  "gengage-qna"
464
466
  );
465
467
  i.qna = { ...i.qna, enabled: !0, mountTarget: c };
466
- } else N(window, S) || (i.qna = { enabled: !1 });
468
+ } else I(window, k) || (i.qna = { enabled: !1 });
467
469
  const o = i.simrel?.enabled === !0 || i.simrel?.mountTarget !== void 0;
468
470
  if (i.simrel?.enabled !== !1)
469
471
  if (o) {
470
- const c = A(
472
+ const c = E(
471
473
  window,
472
- i.simrel?.mountTarget ?? k,
474
+ i.simrel?.mountTarget ?? A,
473
475
  "gengage-simrel"
474
476
  );
475
477
  i.simrel = { ...i.simrel, enabled: !0, mountTarget: c };
476
- } else N(window, k) || (i.simrel = { enabled: !1 });
477
- const r = await de(i);
478
+ } else I(window, A) || (i.simrel = { enabled: !1 });
479
+ const r = await le(i);
478
480
  return s.setController(r), n && s.sendToNative("ready", {
479
481
  sessionId: r.session.sessionId,
480
482
  widgets: {
@@ -492,19 +494,19 @@ async function Ie(t) {
492
494
  }
493
495
  export {
494
496
  R as A,
495
- le as D,
496
- ee as U,
497
- J as a,
498
- pe as b,
499
- Ne as c,
500
- be as d,
501
- me as e,
502
- Ce as f,
503
- fe as g,
504
- ce as h,
505
- de as i,
506
- Ie as j,
507
- ne as p,
508
- Te as s
497
+ ue as D,
498
+ ne as U,
499
+ Z as a,
500
+ ye as b,
501
+ qe as c,
502
+ Ie as d,
503
+ ve as e,
504
+ Ne as f,
505
+ me as g,
506
+ ge as h,
507
+ le as i,
508
+ Me as j,
509
+ se as p,
510
+ Ce as s
509
511
  };
510
- //# sourceMappingURL=index-BH-V2lWn.js.map
512
+ //# sourceMappingURL=index-DR2uepzb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DR2uepzb.js","sources":["../src/common/config-schema.ts","../src/common/overlay.ts","../src/common/native-webview.ts"],"sourcesContent":["import { z } from 'zod';\nimport { debugLog } from './debug.js';\n\nconst WidgetToggleSchema = z.object({\n enabled: z.boolean().default(true),\n});\n\nconst MountSelectorsSchema = z.object({\n chat: z.string().optional(),\n qna: z.string().optional(),\n simrel: z.string().optional(),\n});\n\nconst TransportSchema = z.object({});\n\nexport const AnalyticsAuthModeSchema = z.enum(['none', 'x-api-key-header', 'bearer-header', 'body-api-key']);\n\nconst AnalyticsAuthSchema = z.object({\n mode: AnalyticsAuthModeSchema.default('none'),\n key: z.string().optional(),\n headerName: z.string().optional(),\n bodyField: z.string().default('api_key'),\n});\n\nconst AnalyticsSchema = z.object({\n enabled: z.boolean().default(true),\n endpoint: z.string().default('/analytics'),\n auth: AnalyticsAuthSchema.default({ mode: 'none', bodyField: 'api_key' }),\n fireAndForget: z.boolean().default(true),\n useBeacon: z.boolean().default(true),\n keepaliveFetch: z.boolean().default(true),\n timeoutMs: z.number().int().positive().default(4000),\n maxRetries: z.number().int().min(0).max(5).default(1),\n});\n\nexport const DEFAULT_IDEMPOTENCY_KEY = '__gengageWidgetsInit';\n\nconst GTMSchema = z.object({\n idempotencyKey: z.string().default(DEFAULT_IDEMPOTENCY_KEY),\n requireDomReady: z.boolean().default(true),\n});\n\nexport const UnknownActionPolicySchema = z.enum(['log-and-ignore', 'throw', 'delegate']);\n\nconst ActionHandlingSchema = z.object({\n unknownActionPolicy: UnknownActionPolicySchema.default('log-and-ignore'),\n allowScriptCall: z.boolean().default(false),\n});\n\nexport const AccountRuntimeConfigSchema = z.object({\n version: z.literal('1', { error: 'version must be \"1\"' }),\n accountId: z\n .string({ error: 'accountId must be a non-empty string' })\n .min(1, { error: 'accountId must be a non-empty string' }),\n middlewareUrl: z\n .string({ error: 'middlewareUrl must be a valid URL (e.g. \"https://your-backend.example.com\")' })\n .url({ error: 'middlewareUrl must be a valid URL (e.g. \"https://your-backend.example.com\")' }),\n locale: z.string().optional(),\n widgets: z.object({\n chat: WidgetToggleSchema.default({ enabled: true }),\n qna: WidgetToggleSchema.default({ enabled: true }),\n simrel: WidgetToggleSchema.default({ enabled: true }),\n }),\n mounts: MountSelectorsSchema.default({}),\n transport: TransportSchema.default({}),\n analytics: AnalyticsSchema.default({\n enabled: true,\n endpoint: '/analytics',\n auth: { mode: 'none', bodyField: 'api_key' },\n fireAndForget: true,\n useBeacon: true,\n keepaliveFetch: true,\n timeoutMs: 4000,\n maxRetries: 1,\n }),\n gtm: GTMSchema.default({\n idempotencyKey: '__gengageWidgetsInit',\n requireDomReady: true,\n }),\n actionHandling: ActionHandlingSchema.default({\n unknownActionPolicy: 'log-and-ignore',\n allowScriptCall: false,\n }),\n});\n\nexport type AccountRuntimeConfig = z.infer<typeof AccountRuntimeConfigSchema>;\nexport type AnalyticsAuthMode = z.infer<typeof AnalyticsAuthModeSchema>;\nexport type UnknownActionPolicy = z.infer<typeof UnknownActionPolicySchema>;\n\nexport function parseAccountRuntimeConfig(input: unknown): AccountRuntimeConfig {\n debugLog('config', 'parsing account runtime config', input);\n const result = AccountRuntimeConfigSchema.parse(input);\n debugLog('config', 'config resolved', { accountId: result.accountId, middlewareUrl: result.middlewareUrl });\n return result;\n}\n\nexport function safeParseAccountRuntimeConfig(input: unknown): ReturnType<typeof AccountRuntimeConfigSchema.safeParse> {\n return AccountRuntimeConfigSchema.safeParse(input);\n}\n\nexport function createDefaultAccountRuntimeConfig(params: {\n accountId: string;\n middlewareUrl: string;\n locale?: string;\n}): AccountRuntimeConfig {\n return parseAccountRuntimeConfig({\n version: '1',\n accountId: params.accountId,\n middlewareUrl: params.middlewareUrl,\n locale: params.locale,\n widgets: {\n chat: { enabled: true },\n qna: { enabled: true },\n simrel: { enabled: true },\n },\n });\n}\n","import { GengageChat } from '../chat/index.js';\nimport type { ChatI18n, ChatWidgetConfig } from '../chat/types.js';\nimport { GengageQNA } from '../qna/index.js';\nimport type { QNAWidgetConfig } from '../qna/types.js';\nimport { GengageSimRel } from '../simrel/index.js';\nimport type { SimRelWidgetConfig } from '../simrel/types.js';\nimport { DEFAULT_IDEMPOTENCY_KEY } from './config-schema.js';\nimport { resolveSession } from './context.js';\nimport { wireQNAToChat } from './events.js';\nimport { isSafeUrl } from './safe-html.js';\nimport type { PageContext, SessionContext, WidgetTheme } from './types.js';\n\nconst DEFAULT_OVERLAY_KEY_PREFIX = `${DEFAULT_IDEMPOTENCY_KEY}_overlay_`;\nconst DEFAULT_QNA_MOUNT = '#gengage-qna';\nconst DEFAULT_SIMREL_MOUNT = '#gengage-simrel';\n\ninterface OverlayRegistryState {\n instances: Record<string, OverlayWidgetsRuntime>;\n pending: Record<string, Promise<OverlayWidgetsRuntime>>;\n}\n\ninterface WindowWithOverlayRegistry extends Window {\n __gengageOverlayRegistry?: OverlayRegistryState;\n}\n\nfunction getOverlayRegistry(): OverlayRegistryState {\n const win = window as WindowWithOverlayRegistry;\n if (!win.__gengageOverlayRegistry) {\n win.__gengageOverlayRegistry = {\n instances: {},\n pending: {},\n };\n }\n return win.__gengageOverlayRegistry;\n}\n\nfunction buildInitialPageContext(options: OverlayWidgetsOptions): PageContext {\n const base: PageContext = {\n pageType: options.pageContext?.pageType ?? (options.sku !== undefined ? 'pdp' : 'other'),\n };\n\n const incoming = options.pageContext;\n if (incoming?.sku !== undefined) base.sku = incoming.sku;\n if (incoming?.price !== undefined) base.price = incoming.price;\n if (incoming?.categoryTree !== undefined) base.categoryTree = incoming.categoryTree;\n if (incoming?.url !== undefined) base.url = incoming.url;\n if (incoming?.extra !== undefined) base.extra = incoming.extra;\n\n if (options.sku !== undefined) {\n base.sku = options.sku;\n }\n\n return base;\n}\n\nfunction mergePageContext(current: PageContext, patch: Partial<PageContext>): PageContext {\n const next: PageContext = {\n ...current,\n ...patch,\n pageType: patch.pageType ?? current.pageType,\n };\n if (patch.sku === undefined && current.sku !== undefined) {\n next.sku = current.sku;\n }\n return next;\n}\n\nfunction resolveMountTarget(target: HTMLElement | string): HTMLElement | string | null {\n if (target instanceof HTMLElement) return target;\n if (document.querySelector(target)) return target;\n return null;\n}\n\nfunction buildOverlayKey(options: OverlayWidgetsOptions): string {\n return options.idempotencyKey ?? `${DEFAULT_OVERLAY_KEY_PREFIX}${options.accountId}`;\n}\n\nexport interface OverlayChatOptions {\n enabled?: boolean;\n variant?: ChatWidgetConfig['variant'];\n mountTarget?: HTMLElement | string;\n launcherSvg?: string;\n headerTitle?: string;\n headerAvatarUrl?: string;\n headerBadge?: string;\n headerCartUrl?: string;\n headerFavoritesToggle?: boolean;\n hideMobileLauncher?: boolean;\n mobileBreakpoint?: number;\n mobileInitialState?: 'half' | 'full';\n i18n?: Partial<ChatI18n>;\n actionHandling?: ChatWidgetConfig['actionHandling'];\n}\n\nexport interface OverlayQNAOptions {\n enabled?: boolean;\n mountTarget?: HTMLElement | string;\n ctaText?: string;\n inputPlaceholder?: QNAWidgetConfig['inputPlaceholder'];\n}\n\nexport interface OverlaySimRelOptions {\n enabled?: boolean;\n mountTarget?: HTMLElement | string;\n discountType?: SimRelWidgetConfig['discountType'];\n}\n\nexport interface OverlayWidgetsOptions {\n accountId: string;\n middlewareUrl: string;\n locale?: string;\n session?: Partial<SessionContext>;\n pageContext?: Partial<PageContext>;\n sku?: string;\n theme?: WidgetTheme;\n /** Price formatting options. Defaults to Turkish locale. */\n pricing?: import('./price-formatter.js').PriceFormatConfig;\n idempotencyKey?: string;\n wireQnaToChat?: boolean;\n chat?: OverlayChatOptions;\n qna?: OverlayQNAOptions;\n simrel?: OverlaySimRelOptions;\n onAddToCart?: SimRelWidgetConfig['onAddToCart'];\n onProductNavigate?: SimRelWidgetConfig['onProductNavigate'];\n onScriptCall?: ChatWidgetConfig['onScriptCall'];\n}\n\nexport interface OverlayWidgetsController {\n readonly idempotencyKey: string;\n readonly session: SessionContext;\n readonly chat: GengageChat | null;\n readonly qna: GengageQNA | null;\n readonly simrel: GengageSimRel | null;\n /** Shared analytics client for custom event tracking (null if not configured). */\n readonly analyticsClient: import('./analytics.js').AnalyticsClient | null;\n openChat(options?: { state?: 'half' | 'full' }): void;\n closeChat(): void;\n updateContext(patch: Partial<PageContext>): Promise<void>;\n updateSku(sku: string, pageType?: PageContext['pageType']): Promise<void>;\n destroy(): void;\n}\n\nclass OverlayWidgetsRuntime implements OverlayWidgetsController {\n private _chat: GengageChat | null = null;\n private _qna: GengageQNA | null = null;\n private _simrel: GengageSimRel | null = null;\n private _analyticsClient: import('./analytics.js').AnalyticsClient | null = null;\n private _offQnaWire: (() => void) | null = null;\n private _pageContext: PageContext;\n private _destroyed = false;\n private _queue: Promise<void> = Promise.resolve();\n private _warnedQnaMountMissing = false;\n private _warnedSimRelMountMissing = false;\n\n readonly idempotencyKey: string;\n readonly session: SessionContext;\n\n constructor(\n private readonly options: OverlayWidgetsOptions,\n private readonly onDestroy: () => void,\n ) {\n this.idempotencyKey = buildOverlayKey(options);\n this.session = resolveSession(options.session);\n this._pageContext = buildInitialPageContext(options);\n }\n\n get chat(): GengageChat | null {\n return this._chat;\n }\n\n get qna(): GengageQNA | null {\n return this._qna;\n }\n\n get simrel(): GengageSimRel | null {\n return this._simrel;\n }\n\n get analyticsClient(): import('./analytics.js').AnalyticsClient | null {\n return this._analyticsClient;\n }\n\n async init(): Promise<void> {\n if (!window.gengage) window.gengage = {};\n window.gengage.sessionId = this.session.sessionId;\n window.gengage.pageContext = this._pageContext;\n\n await this._initChat();\n\n if (this.options.wireQnaToChat !== false) {\n this._offQnaWire = wireQNAToChat();\n }\n\n await this._syncPdpWidgets();\n\n window.gengage.overlay = this;\n }\n\n openChat(options?: { state?: 'half' | 'full' }): void {\n this._chat?.open(options);\n }\n\n closeChat(): void {\n this._chat?.close();\n }\n\n async updateContext(patch: Partial<PageContext>): Promise<void> {\n if (this._destroyed) return;\n await this._enqueue(async () => {\n this._pageContext = mergePageContext(this._pageContext, patch);\n\n if (!window.gengage) window.gengage = {};\n window.gengage.pageContext = this._pageContext;\n\n this._chat?.update(patch);\n this._qna?.update(patch);\n this._simrel?.update(patch);\n await this._syncPdpWidgets();\n });\n }\n\n async updateSku(sku: string, pageType: PageContext['pageType'] = 'pdp'): Promise<void> {\n await this.updateContext({ sku, pageType });\n }\n\n destroy(): void {\n if (this._destroyed) return;\n this._destroyed = true;\n\n this._offQnaWire?.();\n this._offQnaWire = null;\n\n this._chat?.destroy();\n this._qna?.destroy();\n this._simrel?.destroy();\n\n this._chat = null;\n this._qna = null;\n this._simrel = null;\n\n if (window.gengage?.overlay === this) {\n delete window.gengage.overlay;\n }\n\n this.onDestroy();\n }\n\n private async _initChat(): Promise<void> {\n if (this.options.chat?.enabled === false) return;\n\n const middlewareUrl = this.options.middlewareUrl;\n\n const config: ChatWidgetConfig = {\n accountId: this.options.accountId,\n middlewareUrl,\n session: this.session,\n pageContext: this._pageContext,\n variant: this.options.chat?.variant ?? 'floating',\n };\n\n if (this.options.theme !== undefined) config.theme = this.options.theme;\n if (this.options.locale !== undefined) config.locale = this.options.locale;\n if (this.options.pricing !== undefined) config.pricing = this.options.pricing;\n if (this.options.chat?.mountTarget !== undefined) config.mountTarget = this.options.chat.mountTarget;\n if (this.options.chat?.launcherSvg !== undefined) config.launcherSvg = this.options.chat.launcherSvg;\n if (this.options.chat?.headerTitle !== undefined) config.headerTitle = this.options.chat.headerTitle;\n if (this.options.chat?.headerAvatarUrl !== undefined) {\n config.headerAvatarUrl = this.options.chat.headerAvatarUrl;\n }\n if (this.options.chat?.headerBadge !== undefined) config.headerBadge = this.options.chat.headerBadge;\n if (this.options.chat?.headerCartUrl !== undefined) config.headerCartUrl = this.options.chat.headerCartUrl;\n if (this.options.chat?.headerFavoritesToggle !== undefined) {\n config.headerFavoritesToggle = this.options.chat.headerFavoritesToggle;\n }\n if (this.options.chat?.hideMobileLauncher !== undefined) {\n config.hideMobileLauncher = this.options.chat.hideMobileLauncher;\n }\n if (this.options.chat?.mobileBreakpoint !== undefined) {\n config.mobileBreakpoint = this.options.chat.mobileBreakpoint;\n }\n if (this.options.chat?.mobileInitialState !== undefined) {\n config.mobileInitialState = this.options.chat.mobileInitialState;\n }\n if (this.options.chat?.i18n !== undefined) config.i18n = this.options.chat.i18n;\n if (this.options.chat?.actionHandling !== undefined) {\n config.actionHandling = this.options.chat.actionHandling;\n }\n if (this.options.onScriptCall !== undefined) {\n config.onScriptCall = this.options.onScriptCall;\n }\n\n this._chat = new GengageChat();\n await this._chat.init(config);\n }\n\n private async _syncPdpWidgets(): Promise<void> {\n if (this._destroyed) return;\n const sku = this._pageContext.sku;\n const isPdp = this._pageContext.pageType === 'pdp' && sku !== undefined && sku.length > 0;\n\n if (!isPdp) {\n this._destroyPdpWidgets();\n return;\n }\n\n const middlewareUrl = this.options.middlewareUrl;\n\n if (this.options.qna?.enabled !== false) {\n const qnaTarget = this.options.qna?.mountTarget ?? DEFAULT_QNA_MOUNT;\n const mountTarget = resolveMountTarget(qnaTarget);\n\n if (mountTarget) {\n this._warnedQnaMountMissing = false;\n if (!this._qna) {\n const qna = new GengageQNA();\n const qnaConfig: QNAWidgetConfig = {\n accountId: this.options.accountId,\n middlewareUrl,\n session: this.session,\n pageContext: {\n pageType: 'pdp',\n sku,\n },\n mountTarget,\n };\n if (this.options.theme !== undefined) qnaConfig.theme = this.options.theme;\n if (this.options.qna?.ctaText !== undefined) qnaConfig.ctaText = this.options.qna.ctaText;\n if (this.options.qna?.inputPlaceholder !== undefined) {\n qnaConfig.inputPlaceholder = this.options.qna.inputPlaceholder;\n }\n await qna.init(qnaConfig);\n this._qna = qna;\n } else {\n this._qna.show();\n this._qna.update({ pageType: 'pdp', sku });\n }\n } else {\n this._qna?.destroy();\n this._qna = null;\n if (!this._warnedQnaMountMissing) {\n console.warn(`[gengage] QNA mount target not found: ${qnaTarget}`);\n this._warnedQnaMountMissing = true;\n }\n }\n } else {\n this._qna?.destroy();\n this._qna = null;\n }\n\n if (this.options.simrel?.enabled !== false) {\n const simRelTarget = this.options.simrel?.mountTarget ?? DEFAULT_SIMREL_MOUNT;\n const mountTarget = resolveMountTarget(simRelTarget);\n\n if (mountTarget) {\n this._warnedSimRelMountMissing = false;\n if (!this._simrel) {\n const simrel = new GengageSimRel();\n const simRelConfig: SimRelWidgetConfig = {\n accountId: this.options.accountId,\n middlewareUrl,\n session: this.session,\n sku,\n mountTarget,\n };\n if (this.options.theme !== undefined) simRelConfig.theme = this.options.theme;\n if (this.options.pricing !== undefined) simRelConfig.pricing = this.options.pricing;\n if (this.options.simrel?.discountType !== undefined) {\n simRelConfig.discountType = this.options.simrel.discountType;\n }\n if (this.options.onAddToCart !== undefined) {\n simRelConfig.onAddToCart = this.options.onAddToCart;\n }\n if (this.options.onProductNavigate !== undefined) {\n simRelConfig.onProductNavigate = this.options.onProductNavigate;\n } else {\n simRelConfig.onProductNavigate = (url, productSku, sessionId) => {\n if (!isSafeUrl(url)) return;\n this._chat?.saveSession(sessionId ?? this.session.sessionId, productSku);\n window.location.href = url;\n };\n }\n await simrel.init(simRelConfig);\n this._simrel = simrel;\n } else {\n this._simrel.show();\n this._simrel.update({ pageType: 'pdp', sku });\n }\n } else {\n this._simrel?.destroy();\n this._simrel = null;\n if (!this._warnedSimRelMountMissing) {\n console.warn(`[gengage] SimRel mount target not found: ${simRelTarget}`);\n this._warnedSimRelMountMissing = true;\n }\n }\n } else {\n this._simrel?.destroy();\n this._simrel = null;\n }\n }\n\n private _destroyPdpWidgets(): void {\n this._qna?.destroy();\n this._simrel?.destroy();\n this._qna = null;\n this._simrel = null;\n }\n\n private _enqueue(fn: () => Promise<void>): Promise<void> {\n const next = this._queue.then(fn);\n this._queue = next.catch((err) => {\n if (import.meta.env?.DEV) {\n console.error('[gengage:overlay] Queued operation failed:', err);\n }\n });\n return next;\n }\n}\n\n/**\n * Initialize all three widgets (chat, QNA, SimRel) in a single call.\n * Idempotent — safe to call multiple times from GTM; deduplicates by account + SKU key.\n *\n * @example\n * ```ts\n * import { initOverlayWidgets } from '@gengage/assistant-fe';\n *\n * const controller = await initOverlayWidgets({\n * accountId: 'mystore',\n * middlewareUrl: 'https://chat.gengage.ai',\n * sku: window.productSku,\n * pageContext: { pageType: 'pdp' },\n * chat: { variant: 'floating' },\n * qna: { mountTarget: '#qna-section' },\n * simrel: { mountTarget: '#similar-products' },\n * });\n * ```\n */\nexport async function initOverlayWidgets(options: OverlayWidgetsOptions): Promise<OverlayWidgetsController> {\n const key = buildOverlayKey(options);\n const registry = getOverlayRegistry();\n\n const existing = registry.instances[key];\n if (existing) return existing;\n\n const pending = registry.pending[key];\n if (pending) return pending;\n\n const runtime = new OverlayWidgetsRuntime(options, () => {\n const liveRegistry = getOverlayRegistry();\n delete liveRegistry.instances[key];\n delete liveRegistry.pending[key];\n });\n\n const runtimeInit = runtime\n .init()\n .then(() => {\n registry.instances[key] = runtime;\n delete registry.pending[key];\n return runtime;\n })\n .catch((err) => {\n delete registry.pending[key];\n throw err;\n });\n\n registry.pending[key] = runtimeInit;\n return runtimeInit;\n}\n\nexport function getOverlayWidgets(idempotencyKey: string): OverlayWidgetsController | null {\n const registry = getOverlayRegistry();\n return registry.instances[idempotencyKey] ?? null;\n}\n\nexport function destroyOverlayWidgets(idempotencyKey: string): void {\n const controller = getOverlayWidgets(idempotencyKey);\n controller?.destroy();\n}\n\nexport function buildOverlayIdempotencyKey(accountId: string): string {\n return `${DEFAULT_OVERLAY_KEY_PREFIX}${accountId}`;\n}\n","import { initOverlayWidgets } from './overlay.js';\nimport type { OverlayWidgetsController, OverlayWidgetsOptions } from './overlay.js';\nimport type { PageContext } from './types.js';\n\nexport const DEFAULT_NATIVE_TRACKED_EVENTS = [\n 'gengage:chat:open',\n 'gengage:chat:close',\n 'gengage:chat:ready',\n 'gengage:chat:add-to-cart',\n 'gengage:qna:action',\n 'gengage:qna:open-chat',\n 'gengage:similar:product-click',\n 'gengage:similar:add-to-cart',\n 'gengage:global:error',\n 'gengage:context:update',\n] as const;\n\nexport type NativeTrackedEvent = (typeof DEFAULT_NATIVE_TRACKED_EVENTS)[number];\nexport type NativeInboundMessage = 'openChat' | 'closeChat' | 'updateContext' | 'updateSku' | 'setSession' | 'destroy';\n\nexport type NativeBridgeEnvironment = 'ios' | 'android' | 'react-native' | 'browser';\n\nexport interface NativeSessionPayload {\n sessionId?: string;\n userId?: string;\n}\n\nexport interface NativeBridgeMessage {\n type: string;\n payload?: unknown;\n}\n\nexport interface NativeWebViewBridgeOptions {\n iosHandlerName?: string;\n androidInterfaceName?: string;\n reactNativeInterfaceName?: string;\n trackedEvents?: NativeTrackedEvent[] | string[];\n /** Log unhandled inbound message types to console in addition to forwarding to postMessage. */\n logUnhandled?: boolean;\n /** Injected for tests; defaults to global window. */\n win?: Window;\n}\n\nexport interface NativeWebViewBridge {\n readonly env: NativeBridgeEnvironment;\n sendToNative(type: string, payload?: unknown): void;\n receive(message: NativeBridgeMessage | string): void;\n setController(controller: OverlayWidgetsController | null): void;\n destroy(): void;\n}\n\nexport interface NativeOverlayInitOptions extends OverlayWidgetsOptions {\n nativeBridge?: Omit<NativeWebViewBridgeOptions, 'win'>;\n emitReadyEvent?: boolean;\n}\n\nexport interface NativeOverlayInitResult {\n controller: OverlayWidgetsController;\n bridge: NativeWebViewBridge;\n destroy(): void;\n}\n\nconst MAX_QUEUED_NATIVE_COMMANDS = 32;\nconst DEFAULT_NATIVE_QNA_MOUNT = '#gengage-qna';\nconst DEFAULT_NATIVE_SIMREL_MOUNT = '#gengage-simrel';\n\ninterface NativeWindow extends Window {\n webkit?: {\n messageHandlers?: Record<string, { postMessage?: (message: unknown) => void }>;\n };\n GengageNative?: {\n postMessage?: (message: string) => void;\n };\n ReactNativeWebView?: {\n postMessage?: (message: string) => void;\n };\n gengageNative?: NativeWebViewBridge;\n}\n\nfunction toNativeWindow(win: Window): NativeWindow {\n return win as NativeWindow;\n}\n\nfunction parseNativeBridgeMessage(raw: NativeBridgeMessage | string): NativeBridgeMessage | null {\n let candidate: unknown = raw;\n\n if (typeof raw === 'string') {\n const trimmed = raw.trim();\n if (trimmed.length === 0) return null;\n\n // Allow plain command strings such as \"openChat\" from native evaluateJavaScript calls.\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\n return { type: trimmed };\n }\n\n try {\n candidate = JSON.parse(trimmed);\n } catch {\n return null;\n }\n }\n\n if (!candidate || typeof candidate !== 'object') return null;\n const obj = candidate as Record<string, unknown>;\n\n const typeCandidate = [obj['type'], obj['command'], obj['action'], obj['event']].find(\n (value): value is string => typeof value === 'string' && value.length > 0,\n );\n if (!typeCandidate) return null;\n\n let payload = obj['payload'];\n if (payload === undefined && 'data' in obj) payload = obj['data'];\n\n // Common native shorthand:\n // { type: \"setSession\", sessionId: \"...\", userId: \"...\" }\n if (typeCandidate === 'setSession' && payload === undefined) {\n const sessionPayload: NativeSessionPayload = {};\n if (typeof obj['sessionId'] === 'string') sessionPayload.sessionId = obj['sessionId'];\n if (typeof obj['userId'] === 'string') sessionPayload.userId = obj['userId'];\n if (sessionPayload.sessionId !== undefined || sessionPayload.userId !== undefined) {\n payload = sessionPayload;\n }\n }\n\n return payload === undefined ? { type: typeCandidate } : { type: typeCandidate, payload };\n}\n\nfunction parseUpdateSkuPayload(payload: unknown): { sku: string; pageType?: PageContext['pageType'] } | null {\n if (typeof payload === 'string' && payload.length > 0) {\n return { sku: payload };\n }\n if (payload && typeof payload === 'object' && 'sku' in payload) {\n const sku = (payload as { sku?: unknown }).sku;\n if (typeof sku === 'string' && sku.length > 0) {\n const pageType = (payload as { pageType?: PageContext['pageType'] }).pageType;\n return pageType !== undefined ? { sku, pageType } : { sku };\n }\n }\n return null;\n}\n\nfunction hasMountTarget(win: Window, target: HTMLElement | string): boolean {\n if (target instanceof HTMLElement) return true;\n if (typeof target !== 'string') return false;\n return win.document.querySelector(target) !== null;\n}\n\nfunction ensureMountTarget(\n win: Window,\n preferredTarget: HTMLElement | string,\n fallbackId: string,\n): HTMLElement | string {\n if (preferredTarget instanceof HTMLElement) return preferredTarget;\n if (hasMountTarget(win, preferredTarget)) return preferredTarget;\n if (typeof preferredTarget !== 'string') return preferredTarget;\n\n // If target is a simple #id selector, create that mount.\n if (preferredTarget.startsWith('#')) {\n const id = preferredTarget.slice(1);\n if (id.length > 0) {\n const existing = win.document.getElementById(id);\n if (existing) return existing;\n const mount = win.document.createElement('div');\n mount.id = id;\n win.document.body.appendChild(mount);\n return mount;\n }\n }\n\n const fallback = win.document.getElementById(fallbackId);\n if (fallback) return fallback;\n const mount = win.document.createElement('div');\n mount.id = fallbackId;\n win.document.body.appendChild(mount);\n return mount;\n}\n\nfunction getIosPostMessage(win: Window, handlerName: string): ((message: unknown) => void) | null {\n const handler = toNativeWindow(win).webkit?.messageHandlers?.[handlerName];\n if (handler && typeof handler.postMessage === 'function') {\n return handler.postMessage.bind(handler);\n }\n return null;\n}\n\nfunction getNamedBridge(win: Window, interfaceName: string): { postMessage: (message: string) => void } | null {\n const candidate = (win as Window & Record<string, unknown>)[interfaceName];\n if (candidate && typeof candidate === 'object') {\n const postMessage = (candidate as { postMessage?: unknown }).postMessage;\n if (typeof postMessage === 'function') {\n return candidate as { postMessage: (message: string) => void };\n }\n }\n return null;\n}\n\nfunction getAndroidBridge(win: Window, interfaceName: string): { postMessage: (message: string) => void } | null {\n return getNamedBridge(win, interfaceName);\n}\n\nfunction getReactNativeBridge(win: Window, interfaceName: string): { postMessage: (message: string) => void } | null {\n return getNamedBridge(win, interfaceName);\n}\n\nexport function detectNativeEnvironment(\n options: Pick<\n NativeWebViewBridgeOptions,\n 'iosHandlerName' | 'androidInterfaceName' | 'reactNativeInterfaceName' | 'win'\n > = {},\n): NativeBridgeEnvironment {\n const win = options.win ?? window;\n const iosHandlerName = options.iosHandlerName ?? 'gengage';\n const androidInterfaceName = options.androidInterfaceName ?? 'GengageNative';\n const reactNativeInterfaceName = options.reactNativeInterfaceName ?? 'ReactNativeWebView';\n\n if (getIosPostMessage(win, iosHandlerName)) return 'ios';\n if (getAndroidBridge(win, androidInterfaceName)) return 'android';\n if (getReactNativeBridge(win, reactNativeInterfaceName)) return 'react-native';\n return 'browser';\n}\n\n/**\n * Applies native-provided session identity so widgets can share correlation IDs\n * with the host app. Safe to call before or after widget initialization.\n */\nexport function applyNativeSession(\n payload: NativeSessionPayload,\n options: Pick<NativeWebViewBridgeOptions, 'win'> = {},\n): void {\n const win = options.win ?? window;\n\n if (payload.sessionId !== undefined) {\n win.__gengageSessionId = payload.sessionId;\n if (!win.gengage) win.gengage = {};\n win.gengage.sessionId = payload.sessionId;\n try {\n win.sessionStorage.setItem('gengage_session_id', payload.sessionId);\n } catch {\n // sessionStorage can be unavailable in restricted WebView modes.\n }\n }\n\n if (payload.userId !== undefined) {\n if (!win.gengage) win.gengage = {};\n const bag = win.gengage as unknown as Record<string, unknown>;\n const session = (bag['session'] as Record<string, unknown> | undefined) ?? {};\n session['userId'] = payload.userId;\n bag['session'] = session;\n }\n}\n\n/**\n * Installs a native WebView bridge compatible with:\n * - iOS WKWebView (`webkit.messageHandlers`)\n * - Android JavascriptInterface (`window.GengageNative`)\n * - React Native WebView (`window.ReactNativeWebView`)\n * and exposes it on `window.gengageNative`.\n */\nexport function createNativeWebViewBridge(options: NativeWebViewBridgeOptions = {}): NativeWebViewBridge {\n const win = options.win ?? window;\n const nativeWin = toNativeWindow(win);\n if (nativeWin.gengageNative) return nativeWin.gengageNative;\n\n const iosHandlerName = options.iosHandlerName ?? 'gengage';\n const androidInterfaceName = options.androidInterfaceName ?? 'GengageNative';\n const reactNativeInterfaceName = options.reactNativeInterfaceName ?? 'ReactNativeWebView';\n const trackedEvents = options.trackedEvents ?? [...DEFAULT_NATIVE_TRACKED_EVENTS];\n const env = detectNativeEnvironment({ win, iosHandlerName, androidInterfaceName, reactNativeInterfaceName });\n\n let controller: OverlayWidgetsController | null = win.gengage?.overlay ?? null;\n const queuedCommands: NativeBridgeMessage[] = [];\n\n const sendToNative = (type: string, payload?: unknown): void => {\n const message: NativeBridgeMessage = payload === undefined ? { type } : { type, payload };\n\n if (env === 'ios') {\n const postMessage = getIosPostMessage(win, iosHandlerName);\n postMessage?.(message);\n return;\n }\n\n if (env === 'android') {\n const androidBridge = getAndroidBridge(win, androidInterfaceName);\n androidBridge?.postMessage(JSON.stringify(message));\n return;\n }\n\n if (env === 'react-native') {\n const reactNativeBridge = getReactNativeBridge(win, reactNativeInterfaceName);\n reactNativeBridge?.postMessage(JSON.stringify(message));\n return;\n }\n\n // Browser fallback: no-op. Useful when running the same integration\n // outside a native WebView (desktop QA, local dev, docs previews).\n return;\n };\n\n const bridgeMessageHandler: EventListener = (event) => {\n const detail = (event as CustomEvent<{ namespace: string; type: string; payload?: unknown }>).detail;\n if (!detail || typeof detail.namespace !== 'string' || typeof detail.type !== 'string') return;\n sendToNative('bridge_message', {\n namespace: detail.namespace,\n type: detail.type,\n payload: detail.payload,\n });\n };\n\n win.addEventListener('gengage:bridge:message', bridgeMessageHandler);\n\n const trackedEventHandlers: Array<{ event: string; handler: EventListener }> = trackedEvents.map((eventName) => {\n const handler: EventListener = (event) => {\n const detail = (event as CustomEvent<unknown>).detail;\n sendToNative('widget_event', {\n event: eventName,\n detail,\n });\n };\n win.addEventListener(eventName, handler);\n return { event: eventName, handler };\n });\n\n const queueCommand = (command: NativeBridgeMessage): void => {\n if (queuedCommands.length >= MAX_QUEUED_NATIVE_COMMANDS) {\n queuedCommands.shift();\n }\n queuedCommands.push(command);\n };\n\n const flushQueuedCommands = (): void => {\n if (!controller || queuedCommands.length === 0) return;\n const pending = queuedCommands.splice(0, queuedCommands.length);\n for (const command of pending) {\n receive(command);\n }\n };\n\n const receive = (message: NativeBridgeMessage | string): void => {\n const incoming = parseNativeBridgeMessage(message);\n if (!incoming || typeof incoming.type !== 'string') {\n console.warn('[gengage:native-bridge] Invalid message:', message);\n return;\n }\n\n const type = incoming.type as NativeInboundMessage | string;\n const payload = incoming.payload;\n\n switch (type) {\n case 'openChat': {\n if (controller) {\n controller.openChat(\n payload && typeof payload === 'object'\n ? (payload as { state?: 'half' | 'full' })\n : payload === 'half' || payload === 'full'\n ? { state: payload }\n : undefined,\n );\n } else {\n queueCommand(incoming);\n }\n return;\n }\n\n case 'closeChat': {\n if (controller) {\n controller.closeChat();\n } else {\n queueCommand(incoming);\n }\n return;\n }\n\n case 'updateContext': {\n if (controller && payload && typeof payload === 'object') {\n void controller.updateContext(payload as Partial<PageContext>);\n } else if (!controller) {\n queueCommand(incoming);\n } else {\n console.warn('[gengage:native-bridge] updateContext: missing payload');\n }\n return;\n }\n\n case 'updateSku': {\n const parsed = parseUpdateSkuPayload(payload);\n if (controller && parsed) {\n void controller.updateSku(parsed.sku, parsed.pageType);\n return;\n }\n if (!controller) {\n queueCommand(incoming);\n } else {\n console.warn('[gengage:native-bridge] updateSku: missing sku');\n }\n return;\n }\n\n case 'setSession': {\n if (payload && typeof payload === 'object') {\n applyNativeSession(payload as NativeSessionPayload, { win });\n }\n return;\n }\n\n case 'destroy': {\n controller?.destroy();\n return;\n }\n\n default: {\n win.postMessage({ gengage: 'native', type, payload }, win.location.origin);\n if (options.logUnhandled) {\n console.warn('[gengage:native-bridge] Unhandled inbound type forwarded:', type);\n }\n }\n }\n };\n\n const bridge: NativeWebViewBridge = {\n env,\n sendToNative,\n receive,\n setController(nextController) {\n controller = nextController;\n flushQueuedCommands();\n },\n destroy() {\n win.removeEventListener('gengage:bridge:message', bridgeMessageHandler);\n for (const entry of trackedEventHandlers) {\n win.removeEventListener(entry.event, entry.handler);\n }\n queuedCommands.splice(0, queuedCommands.length);\n if (toNativeWindow(win).gengageNative === bridge) {\n delete toNativeWindow(win).gengageNative;\n }\n },\n };\n\n nativeWin.gengageNative = bridge;\n return bridge;\n}\n\n/**\n * Convenience helper for mobile WebViews:\n * 1) installs native bridge\n * 2) initializes overlay widgets\n * 3) sends a `ready` message to native\n */\nexport async function initNativeOverlayWidgets(options: NativeOverlayInitOptions): Promise<NativeOverlayInitResult> {\n const { nativeBridge, emitReadyEvent = true, ...overlayOptions } = options;\n const bridge = createNativeWebViewBridge(nativeBridge);\n const resolvedOptions: OverlayWidgetsOptions = { ...overlayOptions };\n\n // Mobile-app-friendly defaults:\n // 1) translate commerce callbacks to native bridge messages by default\n // 2) avoid noisy missing-mount warnings unless PDP widgets are explicitly requested\n if (!resolvedOptions.onAddToCart) {\n resolvedOptions.onAddToCart = (params) => {\n bridge.sendToNative('addToCart', {\n sku: params.sku,\n quantity: params.quantity,\n cartCode: params.cartCode,\n });\n };\n }\n\n if (!resolvedOptions.onProductNavigate) {\n resolvedOptions.onProductNavigate = (url, sku, sessionId) => {\n bridge.sendToNative('productNavigate', {\n url,\n sku,\n sessionId,\n });\n };\n }\n\n const qnaRequested = resolvedOptions.qna?.enabled === true || resolvedOptions.qna?.mountTarget !== undefined;\n if (resolvedOptions.qna?.enabled !== false) {\n if (qnaRequested) {\n const mountTarget = ensureMountTarget(\n window,\n resolvedOptions.qna?.mountTarget ?? DEFAULT_NATIVE_QNA_MOUNT,\n 'gengage-qna',\n );\n resolvedOptions.qna = { ...resolvedOptions.qna, enabled: true, mountTarget };\n } else if (!hasMountTarget(window, DEFAULT_NATIVE_QNA_MOUNT)) {\n resolvedOptions.qna = { enabled: false };\n }\n }\n\n const simrelRequested = resolvedOptions.simrel?.enabled === true || resolvedOptions.simrel?.mountTarget !== undefined;\n if (resolvedOptions.simrel?.enabled !== false) {\n if (simrelRequested) {\n const mountTarget = ensureMountTarget(\n window,\n resolvedOptions.simrel?.mountTarget ?? DEFAULT_NATIVE_SIMREL_MOUNT,\n 'gengage-simrel',\n );\n resolvedOptions.simrel = { ...resolvedOptions.simrel, enabled: true, mountTarget };\n } else if (!hasMountTarget(window, DEFAULT_NATIVE_SIMREL_MOUNT)) {\n resolvedOptions.simrel = { enabled: false };\n }\n }\n\n const controller = await initOverlayWidgets(resolvedOptions);\n bridge.setController(controller);\n\n if (emitReadyEvent) {\n bridge.sendToNative('ready', {\n sessionId: controller.session.sessionId,\n widgets: {\n chat: controller.chat !== null,\n qna: controller.qna !== null,\n simrel: controller.simrel !== null,\n },\n });\n }\n\n return {\n controller,\n bridge,\n destroy() {\n controller.destroy();\n bridge.destroy();\n },\n };\n}\n"],"names":["WidgetToggleSchema","z.object","z.boolean","MountSelectorsSchema","z.string","TransportSchema","AnalyticsAuthModeSchema","z.enum","AnalyticsAuthSchema","AnalyticsSchema","z.number","DEFAULT_IDEMPOTENCY_KEY","GTMSchema","UnknownActionPolicySchema","ActionHandlingSchema","AccountRuntimeConfigSchema","z.literal","parseAccountRuntimeConfig","input","debugLog","result","safeParseAccountRuntimeConfig","createDefaultAccountRuntimeConfig","params","DEFAULT_OVERLAY_KEY_PREFIX","DEFAULT_QNA_MOUNT","DEFAULT_SIMREL_MOUNT","getOverlayRegistry","win","buildInitialPageContext","options","base","incoming","mergePageContext","current","patch","next","resolveMountTarget","target","buildOverlayKey","OverlayWidgetsRuntime","onDestroy","resolveSession","wireQNAToChat","sku","pageType","middlewareUrl","config","GengageChat","qnaTarget","mountTarget","qna","GengageQNA","qnaConfig","simRelTarget","simrel","GengageSimRel","simRelConfig","url","productSku","sessionId","isSafeUrl","fn","err","initOverlayWidgets","key","registry","existing","pending","runtime","liveRegistry","runtimeInit","getOverlayWidgets","idempotencyKey","destroyOverlayWidgets","buildOverlayIdempotencyKey","accountId","DEFAULT_NATIVE_TRACKED_EVENTS","MAX_QUEUED_NATIVE_COMMANDS","DEFAULT_NATIVE_QNA_MOUNT","DEFAULT_NATIVE_SIMREL_MOUNT","parseNativeBridgeMessage","raw","candidate","trimmed","obj","typeCandidate","value","payload","sessionPayload","parseUpdateSkuPayload","hasMountTarget","ensureMountTarget","preferredTarget","fallbackId","id","mount","fallback","getIosPostMessage","handlerName","handler","getNamedBridge","interfaceName","getAndroidBridge","getReactNativeBridge","detectNativeEnvironment","iosHandlerName","androidInterfaceName","reactNativeInterfaceName","applyNativeSession","bag","session","createNativeWebViewBridge","nativeWin","trackedEvents","env","controller","queuedCommands","sendToNative","type","message","bridgeMessageHandler","event","detail","trackedEventHandlers","eventName","queueCommand","command","flushQueuedCommands","receive","parsed","bridge","nextController","entry","initNativeOverlayWidgets","nativeBridge","emitReadyEvent","overlayOptions","resolvedOptions","qnaRequested","simrelRequested"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./index-1yPxOqAw.cjs"),n=require("./qna.cjs"),r=require("./simrel.cjs"),e=require("./schemas-DHzfUzwA.cjs"),t=require("./index-BelS6Vnv.cjs"),a=require("./common.cjs");exports.GengageChat=i.GengageChat;exports.VoiceInput=i.VoiceInput;exports.createChatWidget=i.createChatWidget;exports.createDefaultChatUISpecRegistry=i.createDefaultChatUISpecRegistry;exports.defaultChatUnknownUISpecRenderer=i.defaultChatUnknownUISpecRenderer;exports.isVoiceInputSupported=i.isVoiceInputSupported;exports.renderChatUISpec=i.renderUISpec;exports.routeStreamAction=i.routeStreamAction;exports.GengageQNA=n.GengageQNA;exports.createDefaultQnaUISpecRegistry=n.createDefaultQnaUISpecRegistry;exports.createQNAWidget=n.createQNAWidget;exports.defaultQnaUnknownUISpecRenderer=n.defaultQnaUnknownUISpecRenderer;exports.renderQnaUISpec=n.renderQnaUISpec;exports.GengageSimRel=r.GengageSimRel;exports.createDefaultSimRelUISpecRegistry=r.createDefaultSimRelUISpecRegistry;exports.createSimRelWidget=r.createSimRelWidget;exports.defaultSimRelUnknownUISpecRenderer=r.defaultSimRelUnknownUISpecRenderer;exports.renderSimRelUISpec=r.renderSimRelUISpec;exports.DEFAULT_WIDGET_THEME_TOKENS=e.DEFAULT_WIDGET_THEME_TOKENS;exports.bootstrapSession=e.bootstrapSession;exports.buildChatEndpointUrl=e.buildChatEndpointUrl;exports.consumeStream=e.consumeStream;exports.defaultUnknownUISpecRenderer=e.defaultUnknownUISpecRenderer;exports.dispatch=e.dispatch;exports.listen=e.listen;exports.normalizeMiddlewareUrl=e.normalizeMiddlewareUrl;exports.renderUISpecWithRegistry=e.renderUISpecWithRegistry;exports.streamPost=e.streamPost;exports.updatePageContext=e.updatePageContext;exports.wireGADataLayer=e.wireGADataLayer;exports.wireQNAToChat=e.wireQNAToChat;exports.wireSimilarToChat=e.wireSimilarToChat;exports.withDefaultWidgetTheme=e.withDefaultWidgetTheme;exports.AccountRuntimeConfigSchema=t.AccountRuntimeConfigSchema;exports.AnalyticsAuthModeSchema=t.AnalyticsAuthModeSchema;exports.UnknownActionPolicySchema=t.UnknownActionPolicySchema;exports.applyNativeSession=t.applyNativeSession;exports.buildOverlayIdempotencyKey=t.buildOverlayIdempotencyKey;exports.createDefaultAccountRuntimeConfig=t.createDefaultAccountRuntimeConfig;exports.createNativeWebViewBridge=t.createNativeWebViewBridge;exports.destroyOverlayWidgets=t.destroyOverlayWidgets;exports.detectNativeEnvironment=t.detectNativeEnvironment;exports.getOverlayWidgets=t.getOverlayWidgets;exports.initNativeOverlayWidgets=t.initNativeOverlayWidgets;exports.initOverlayWidgets=t.initOverlayWidgets;exports.parseAccountRuntimeConfig=t.parseAccountRuntimeConfig;exports.safeParseAccountRuntimeConfig=t.safeParseAccountRuntimeConfig;exports.BASE_WIDGET_THEME=a.BASE_WIDGET_THEME;exports.DEFAULT_CUSTOMIZATION_LOCALE=a.DEFAULT_CUSTOMIZATION_LOCALE;exports.autoDetectPageContext=a.autoDetectPageContext;exports.createAccountIdentity=a.createAccountIdentity;exports.createAnalyticsClient=a.createAnalyticsClient;exports.createDefaultAnalyticsConfig=a.createDefaultAnalyticsConfig;exports.createFloatingChatConfig=a.createFloatingChatConfig;exports.createPdpQnaConfig=a.createPdpQnaConfig;exports.createPdpSimRelConfig=a.createPdpSimRelConfig;exports.detectPageType=a.detectPageType;exports.extractSkuFromUrl=a.extractSkuFromUrl;exports.initGengageClient=a.initGengageClient;exports.preflightDiagnostics=a.preflightDiagnostics;exports.withBaseTheme=a.withBaseTheme;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./index-BWPx4pM7.cjs"),n=require("./qna.cjs"),r=require("./simrel.cjs"),e=require("./schemas-Dsr0bbO_.cjs"),t=require("./index-DL4CAkyL.cjs"),a=require("./common.cjs");exports.GengageChat=i.GengageChat;exports.VoiceInput=i.VoiceInput;exports.createChatWidget=i.createChatWidget;exports.createDefaultChatUISpecRegistry=i.createDefaultChatUISpecRegistry;exports.defaultChatUnknownUISpecRenderer=i.defaultChatUnknownUISpecRenderer;exports.isVoiceInputSupported=i.isVoiceInputSupported;exports.renderChatUISpec=i.renderUISpec;exports.routeStreamAction=i.routeStreamAction;exports.GengageQNA=n.GengageQNA;exports.createDefaultQnaUISpecRegistry=n.createDefaultQnaUISpecRegistry;exports.createQNAWidget=n.createQNAWidget;exports.defaultQnaUnknownUISpecRenderer=n.defaultQnaUnknownUISpecRenderer;exports.renderQnaUISpec=n.renderQnaUISpec;exports.GengageSimRel=r.GengageSimRel;exports.createDefaultSimRelUISpecRegistry=r.createDefaultSimRelUISpecRegistry;exports.createSimRelWidget=r.createSimRelWidget;exports.defaultSimRelUnknownUISpecRenderer=r.defaultSimRelUnknownUISpecRenderer;exports.renderSimRelUISpec=r.renderSimRelUISpec;exports.DEFAULT_WIDGET_THEME_TOKENS=e.DEFAULT_WIDGET_THEME_TOKENS;exports.bootstrapSession=e.bootstrapSession;exports.buildChatEndpointUrl=e.buildChatEndpointUrl;exports.consumeStream=e.consumeStream;exports.defaultUnknownUISpecRenderer=e.defaultUnknownUISpecRenderer;exports.dispatch=e.dispatch;exports.listen=e.listen;exports.normalizeMiddlewareUrl=e.normalizeMiddlewareUrl;exports.renderUISpecWithRegistry=e.renderUISpecWithRegistry;exports.streamPost=e.streamPost;exports.updatePageContext=e.updatePageContext;exports.wireGADataLayer=e.wireGADataLayer;exports.wireQNAToChat=e.wireQNAToChat;exports.wireSimilarToChat=e.wireSimilarToChat;exports.withDefaultWidgetTheme=e.withDefaultWidgetTheme;exports.AccountRuntimeConfigSchema=t.AccountRuntimeConfigSchema;exports.AnalyticsAuthModeSchema=t.AnalyticsAuthModeSchema;exports.UnknownActionPolicySchema=t.UnknownActionPolicySchema;exports.applyNativeSession=t.applyNativeSession;exports.buildOverlayIdempotencyKey=t.buildOverlayIdempotencyKey;exports.createDefaultAccountRuntimeConfig=t.createDefaultAccountRuntimeConfig;exports.createNativeWebViewBridge=t.createNativeWebViewBridge;exports.destroyOverlayWidgets=t.destroyOverlayWidgets;exports.detectNativeEnvironment=t.detectNativeEnvironment;exports.getOverlayWidgets=t.getOverlayWidgets;exports.initNativeOverlayWidgets=t.initNativeOverlayWidgets;exports.initOverlayWidgets=t.initOverlayWidgets;exports.parseAccountRuntimeConfig=t.parseAccountRuntimeConfig;exports.safeParseAccountRuntimeConfig=t.safeParseAccountRuntimeConfig;exports.BASE_WIDGET_THEME=a.BASE_WIDGET_THEME;exports.DEFAULT_CUSTOMIZATION_LOCALE=a.DEFAULT_CUSTOMIZATION_LOCALE;exports.autoDetectPageContext=a.autoDetectPageContext;exports.createAccountIdentity=a.createAccountIdentity;exports.createAnalyticsClient=a.createAnalyticsClient;exports.createDefaultAnalyticsConfig=a.createDefaultAnalyticsConfig;exports.createFloatingChatConfig=a.createFloatingChatConfig;exports.createPdpQnaConfig=a.createPdpQnaConfig;exports.createPdpSimRelConfig=a.createPdpSimRelConfig;exports.detectPageType=a.detectPageType;exports.extractSkuFromUrl=a.extractSkuFromUrl;exports.initGengageClient=a.initGengageClient;exports.preflightDiagnostics=a.preflightDiagnostics;exports.withBaseTheme=a.withBaseTheme;
2
2
  //# sourceMappingURL=index.cjs.map