@gengage/assistant-fe 0.2.5 → 0.2.7

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 (70) hide show
  1. package/dist/assistant-fe.css +1 -1
  2. package/dist/chat/chat-presentation-state.d.ts +54 -0
  3. package/dist/chat/chat-presentation-state.d.ts.map +1 -0
  4. package/dist/chat/components/AIGroupingCards.d.ts.map +1 -1
  5. package/dist/chat/components/AISuggestedSearchCards.d.ts.map +1 -1
  6. package/dist/chat/components/AITopPicks.d.ts.map +1 -1
  7. package/dist/chat/components/ChatDrawer.d.ts +46 -0
  8. package/dist/chat/components/ChatDrawer.d.ts.map +1 -1
  9. package/dist/chat/components/ThumbnailsColumn.d.ts +2 -0
  10. package/dist/chat/components/ThumbnailsColumn.d.ts.map +1 -1
  11. package/dist/chat/index.d.ts +10 -0
  12. package/dist/chat/index.d.ts.map +1 -1
  13. package/dist/chat/locales/en.d.ts.map +1 -1
  14. package/dist/chat/locales/tr.d.ts.map +1 -1
  15. package/dist/chat/types.d.ts +7 -1
  16. package/dist/chat/types.d.ts.map +1 -1
  17. package/dist/chat/utils/chat-presentation-debug.d.ts +20 -0
  18. package/dist/chat/utils/chat-presentation-debug.d.ts.map +1 -0
  19. package/dist/chat/utils/get-chat-scroll-element.d.ts +11 -0
  20. package/dist/chat/utils/get-chat-scroll-element.d.ts.map +1 -0
  21. package/dist/chat.cjs +1 -1
  22. package/dist/chat.iife.js +22 -22
  23. package/dist/chat.iife.js.map +1 -1
  24. package/dist/chat.js +10 -6
  25. package/dist/common/index.d.ts +2 -0
  26. package/dist/common/index.d.ts.map +1 -1
  27. package/dist/common/protocol-adapter.d.ts.map +1 -1
  28. package/dist/common/suggested-search-keywords.d.ts +19 -0
  29. package/dist/common/suggested-search-keywords.d.ts.map +1 -0
  30. package/dist/common/theme-utils.d.ts.map +1 -1
  31. package/dist/common.cjs +1 -1
  32. package/dist/common.cjs.map +1 -1
  33. package/dist/common.js +70 -66
  34. package/dist/common.js.map +1 -1
  35. package/dist/index-6hAto23F.cjs +13 -0
  36. package/dist/index-6hAto23F.cjs.map +1 -0
  37. package/dist/index-BXXXyQzR.js +5101 -0
  38. package/dist/index-BXXXyQzR.js.map +1 -0
  39. package/dist/{index-B6xRdkMq.cjs → index-CjQUfIYI.cjs} +2 -2
  40. package/dist/{index-B6xRdkMq.cjs.map → index-CjQUfIYI.cjs.map} +1 -1
  41. package/dist/{index-BsvmfVa1.js → index-DJUtLUPL.js} +3 -3
  42. package/dist/{index-BsvmfVa1.js.map → index-DJUtLUPL.js.map} +1 -1
  43. package/dist/index.cjs +1 -1
  44. package/dist/index.js +5 -5
  45. package/dist/native.cjs +1 -1
  46. package/dist/native.iife.js +28 -28
  47. package/dist/native.iife.js.map +1 -1
  48. package/dist/native.js +1 -1
  49. package/dist/qna.cjs +1 -1
  50. package/dist/qna.css +1 -1
  51. package/dist/qna.iife.js +6 -6
  52. package/dist/qna.iife.js.map +1 -1
  53. package/dist/qna.js +1 -1
  54. package/dist/{schemas-Fiaobs4L.js → schemas-5lXjLjwW.js} +903 -879
  55. package/dist/schemas-5lXjLjwW.js.map +1 -0
  56. package/dist/schemas-DqUVzVDf.cjs +86 -0
  57. package/dist/schemas-DqUVzVDf.cjs.map +1 -0
  58. package/dist/simrel.cjs +1 -1
  59. package/dist/simrel.css +1 -1
  60. package/dist/simrel.iife.js +7 -7
  61. package/dist/simrel.iife.js.map +1 -1
  62. package/dist/simrel.js +1 -1
  63. package/package.json +3 -2
  64. package/dist/index-BzCc2DCm.cjs +0 -13
  65. package/dist/index-BzCc2DCm.cjs.map +0 -1
  66. package/dist/index-D5UPIXIA.js +0 -4831
  67. package/dist/index-D5UPIXIA.js.map +0 -1
  68. package/dist/schemas-CNzyBhf7.cjs +0 -86
  69. package/dist/schemas-CNzyBhf7.cjs.map +0 -1
  70. package/dist/schemas-Fiaobs4L.js.map +0 -1
package/dist/chat.js CHANGED
@@ -1,11 +1,15 @@
1
- import "./schemas-Fiaobs4L.js";
2
- import { G as r, e as c, c as s, a as n, d, b as g } from "./index-D5UPIXIA.js";
1
+ import "./schemas-5lXjLjwW.js";
2
+ import { C as r, e as s, G as C, f as c, c as h, a as n, d as l, g as o, h as g, b as S } from "./index-BXXXyQzR.js";
3
3
  export {
4
- r as GengageChat,
4
+ r as CHAT_SCROLL_ELEMENT_ID,
5
+ s as ChatPresentationState,
6
+ C as GengageChat,
5
7
  c as chatCatalog,
6
- s as createChatWidget,
8
+ h as createChatWidget,
7
9
  n as createDefaultChatUISpecRegistry,
8
- d as defaultChatUnknownUISpecRenderer,
9
- g as renderUISpec
10
+ l as defaultChatUnknownUISpecRenderer,
11
+ o as getChatScrollElement,
12
+ g as invalidateChatScrollCache,
13
+ S as renderUISpec
10
14
  };
11
15
  //# sourceMappingURL=chat.js.map
@@ -40,4 +40,6 @@ export type { VoiceInputState, VoiceInputErrorCode, VoiceInputCallbacks, VoiceIn
40
40
  export { detectPageType, extractSkuFromUrl, autoDetectPageContext } from './page-detect.js';
41
41
  export type { DetectablePageType, PageDetectionRule } from './page-detect.js';
42
42
  export type { NormalizedProduct, SimilarProductsJsonResponse, ProductGroupingsJsonResponse, } from './protocol-adapter.js';
43
+ export { getSuggestedSearchKeywords, getSuggestedSearchKeywordsText } from './suggested-search-keywords.js';
44
+ export type { SuggestedSearchKeywordSource } from './suggested-search-keywords.js';
43
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-adapter.d.ts","sourceRoot":"","sources":["../../src/common/protocol-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol-adapter.d.ts","sourceRoot":"","sources":["../../src/common/protocol-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,WAAW,EAQZ,MAAM,YAAY,CAAC;AAmDpB,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AA0JD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAC9F;AAuJD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,GAAG,IAAI,CAoFlF;AA4pCD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAwBD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,SAAS,GAAG,iBAAiB,CAgDnE;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;KAC9B,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,2BAA2B,GAAG,iBAAiB,EAAE,CAEvG;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,4BAA4B,GAAG,KAAK,CAAC;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B,CAAC,CASD"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Compact browse-card keyword line for `aiSuggestedSearches`.
3
+ *
4
+ * Prefer backend `display_keywords`; otherwise derive short fragments from
5
+ * `chosen_attribute` / `short_name`. Does not use `why_different` (avoids long
6
+ * explanatory sentences in the tertiary line).
7
+ */
8
+ export type SuggestedSearchKeywordSource = {
9
+ display_keywords?: string[];
10
+ chosen_attribute?: string;
11
+ short_name?: string;
12
+ };
13
+ /**
14
+ * Ordered unique keywords (max 3) for suggested-search browse cards.
15
+ */
16
+ export declare function getSuggestedSearchKeywords(search: SuggestedSearchKeywordSource): string[];
17
+ /** Join keywords for the tertiary browse line (e.g. "A • B • C"). */
18
+ export declare function getSuggestedSearchKeywordsText(search: SuggestedSearchKeywordSource): string;
19
+ //# sourceMappingURL=suggested-search-keywords.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggested-search-keywords.d.ts","sourceRoot":"","sources":["../../src/common/suggested-search-keywords.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,4BAA4B,GAAG;IACzC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAoCF;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,4BAA4B,GAAG,MAAM,EAAE,CAgBzF;AAED,qEAAqE;AACrE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,4BAA4B,GAAG,MAAM,CAE3F"}
@@ -1 +1 @@
1
- {"version":3,"file":"theme-utils.d.ts","sourceRoot":"","sources":["../../src/common/theme-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,WA0B/B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,WAAW,CAEjE"}
1
+ {"version":3,"file":"theme-utils.d.ts","sourceRoot":"","sources":["../../src/common/theme-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,WA4B/B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,WAAW,CAEjE"}
package/dist/common.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./schemas-CNzyBhf7.cjs"),l=require("./index-B6xRdkMq.cjs"),u=require("./index-BzCc2DCm.cjs");require("./qna.cjs");require("./simrel.cjs");const E={enabled:!0,endpoint:"/analytics",fireAndForget:!0,useBeacon:!0,keepaliveFetch:!0,timeoutMs:4e3,maxRetries:0,batchSize:10,flushIntervalMs:250},T={mode:"none",key:"",headerName:"X-API-Key",bodyField:"api_key"};class f{constructor(t){this.queue=[],this.flushTimer=null,this.config={...E,...t,auth:{...T,...t.auth??{}}},this.onPageHideBound=()=>{this.queue.length!==0&&this.flushAllSync()},typeof window<"u"&&window.addEventListener("pagehide",this.onPageHideBound)}track(t){if(!this.config.enabled)return;const n=C(t);if(this.queue.push(n),this.queue.length>=this.config.batchSize){this.scheduleImmediateFlush();return}this.scheduleFlush()}flush(){if(!this.config.enabled||this.queue.length===0)return;const t=this.queue.splice(0,this.config.batchSize),n=this.buildTransportBody(t),o=g(this.config.endpoint,this.config.middlewareUrl);this.send(o,n)}flushAll(){for(;this.queue.length>0;)this.flush()}destroy(){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.queue.length>0&&this.flushAllSync(),typeof window<"u"&&window.removeEventListener("pagehide",this.onPageHideBound)}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush()},this.config.flushIntervalMs))}scheduleImmediateFlush(){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.flush()}buildTransportBody(t){const n={events:t};return this.config.auth.mode==="body-api-key"&&this.config.auth.key&&(n[this.config.auth.bodyField]=this.config.auth.key),n}send(t,n){try{const o=JSON.stringify(n);if(this.config.useBeacon&&this.config.auth.mode!=="x-api-key-header"&&this.config.auth.mode!=="bearer-header"&&m()){const r=new Blob([o],{type:"application/json"});navigator.sendBeacon(t,r);return}if(typeof fetch>"u")return;const a={"Content-Type":"application/json"};this.config.auth.mode==="x-api-key-header"&&this.config.auth.key&&(a[this.config.auth.headerName]=this.config.auth.key),this.config.auth.mode==="bearer-header"&&this.config.auth.key&&(a.Authorization=`Bearer ${this.config.auth.key}`),fetch(t,{method:"POST",headers:a,body:o,keepalive:!0}).catch(()=>{})}catch{}}flushAllSync(){if(!this.config.enabled)return;const t=g(this.config.endpoint,this.config.middlewareUrl);for(;this.queue.length>0;){const n=this.queue.splice(0,this.config.batchSize),o=this.buildTransportBody(n);try{const a=JSON.stringify(o);if(m()){const r=new Blob([a],{type:"application/json"});navigator.sendBeacon(t,r)}}catch{}}}}function S(e){return new f(e)}function C(e){const t={event_name:e.event_name,event_version:e.event_version??"1",timestamp_ms:e.timestamp_ms??Date.now(),account_id:e.account_id,session_id:e.session_id,correlation_id:e.correlation_id,payload:e.payload};return e.view_id!==void 0&&(t.view_id=e.view_id),e.user_id!==void 0&&(t.user_id=e.user_id),e.widget!==void 0&&(t.widget=e.widget),e.page_type!==void 0&&(t.page_type=e.page_type),e.sku!==void 0&&(t.sku=e.sku),t}function g(e,t){if(/^https?:\/\//i.test(e))return e;const n=i.normalizeMiddlewareUrl(t),o=e.startsWith("/")?e:`/${e}`;return`${n}${o}`}function m(){return typeof navigator<"u"&&typeof navigator.sendBeacon=="function"}const p={primaryColor:"#000000",primaryForeground:"#ffffff",backgroundColor:"#ffffff",foregroundColor:"#222222",borderRadius:"8px",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',fontSize:"14px",zIndex:"1000","--glov-chatbot-width":"420px","--glov-left-spacing":"260px","--chatbot-padding":"16px","--root-wrapper-background-color":"#F2F2F2","--root-wrapper-border-color":"#E5E5E5","--gengage-chat-width":"400px","--gengage-chat-shell-radius":"12px","--gengage-chat-header-height":"60px","--gengage-chat-conversation-width":"396px","--gengage-chat-panel-min-width":"320px","--gengage-chat-panel-max-width":"860px","--gengage-chat-input-height":"48px","--gengage-qna-pill-radius":"999px","--gengage-qna-input-radius":"14px","--gengage-simrel-card-radius":"14px"};function b(e){return{...p,...e}}const h="tr";function A(e){return{ACCOUNT_ID:e.accountId,MIDDLEWARE_URL:e.middlewareUrl,LOCALE:e.locale??h}}function k(e,t={}){const n={accountId:e.accountId,middlewareUrl:e.middlewareUrl,session:{sessionId:e.sessionId},variant:"floating",locale:e.locale??h,...t};return e.theme!==void 0&&(n.theme=e.theme),n}function I(e,t={}){const n={accountId:e.accountId,middlewareUrl:e.middlewareUrl,session:{sessionId:e.sessionId},pageContext:{pageType:"pdp",sku:e.sku},mountTarget:e.mountTarget,...t};return e.theme!==void 0&&(n.theme=e.theme),n}function U(e,t={}){const n={accountId:e.accountId,middlewareUrl:e.middlewareUrl,session:{sessionId:e.sessionId},sku:e.sku,mountTarget:e.mountTarget,...t};return e.theme!==void 0&&(n.theme=e.theme),n}function P(e,t={}){return{enabled:!0,middlewareUrl:e,endpoint:"/analytics",fireAndForget:!0,useBeacon:!0,...t}}function _(e){try{return document.querySelector(e),!0}catch{return!1}}function y(e,t){const n=[],o=e.mounts,a=[["qna",o.qna],["simrel",o.simrel],["chat",o.chat]];for(const[s,c]of a)if(c!==void 0){if(!_(c)){n.push({code:"INVALID_SELECTOR",message:`[gengage preflight] ${s} mount selector is invalid CSS: "${c}"`,severity:"error"});continue}document.querySelector(c)||n.push({code:"MOUNT_NOT_FOUND",message:`[gengage preflight] ${s} mount target not found: "${c}" — widget will skip or wait for DOM`,severity:"warn"})}const r=e.gtm.idempotencyKey;if(window[r]!==void 0&&n.push({code:"DUPLICATE_IDEMPOTENCY",message:`[gengage preflight] window["${r}"] already exists — widgets may have already initialized`,severity:"warn"}),!t?.skipCspCheck){let s=!1;const c=d=>{d.blockedURI&&e.middlewareUrl.startsWith(d.blockedURI)&&(s=!0)};document.addEventListener("securitypolicyviolation",c);try{fetch(e.middlewareUrl,{method:"HEAD",mode:"no-cors"}).catch(()=>{})}catch{s=!0}document.removeEventListener("securitypolicyviolation",c),s&&n.push({code:"CSP_BLOCKED",message:`[gengage preflight] middleware URL may be blocked by Content-Security-Policy: "${e.middlewareUrl}". Add it to connect-src.`,severity:"warn"})}for(const s of n)s.severity==="error"?console.error(s.message):console.warn(s.message);return{ok:n.every(s=>s.severity!=="error"),warnings:n}}function x(e){const t=l.safeParseAccountRuntimeConfig(e);if(!t.success){const n=t.error.issues.map(o=>`${o.path.join(".")}: ${o.message}`).join("; ");throw new Error(`[gengage] Invalid runtime config: ${n}`)}return t.data}function R(e,t,n){const o={accountId:e.accountId,middlewareUrl:e.middlewareUrl,idempotencyKey:e.gtm.idempotencyKey};return e.locale!==void 0&&(o.locale=e.locale),n!==void 0&&(o.pageContext=n,n.sku!==void 0&&(o.sku=n.sku)),o.chat={enabled:e.widgets.chat.enabled},e.mounts.chat!==void 0&&(o.chat.mountTarget=e.mounts.chat),o.qna={enabled:e.widgets.qna.enabled},e.mounts.qna!==void 0&&(o.qna.mountTarget=e.mounts.qna),o.simrel={enabled:e.widgets.simrel.enabled},e.mounts.simrel!==void 0&&(o.simrel.mountTarget=e.mounts.simrel),t?.onAddToCart!==void 0&&(o.onAddToCart=t.onAddToCart),t?.onProductNavigate!==void 0&&(o.onProductNavigate=t.onProductNavigate),t?.onScriptCall!==void 0&&(o.onScriptCall=t.onScriptCall),o}async function D(e){const t=x(e.runtimeConfig);if(e.preflight!==!1){const r=y(t);if(!r.ok){const s=r.warnings.filter(c=>c.severity==="error");throw new Error(`[gengage] Preflight failed: ${s.map(c=>c.message).join("; ")}`)}}const n=e.contextResolver?.(),o=R(t,e.hostActions,n),a=await l.initOverlayWidgets(o);if(e.contextResolver!==void 0){const r=e.contextResolver,s=()=>{const d=r();a.updateContext(d)};window.addEventListener("gengage:context:update",s);const c=a.destroy.bind(a);a.destroy=()=>{window.removeEventListener("gengage:context:update",s),c()}}return a}const O=[{pageType:"home",urlPatterns:["^/$","^/index\\.html?$","^/anasayfa$"]},{pageType:"search",urlPatterns:["/arama","/search","/ara\\?"],queryParam:"q"},{pageType:"cart",urlPatterns:["/sepet","/cart","/basket","/sepetim"]},{pageType:"plp",urlPatterns:["/kategori/","/category/","/c/","/koleksiyon/","/collection/"]},{pageType:"pdp",urlPatterns:["/urun/","/product/","/p/","/-p-","/-pm-"]}];function v(e,t){const n=t??(typeof window<"u"?new URL(window.location.href):null);if(!n)return"other";const o=e??O,a=n.pathname;for(const r of o)if(!(r.urlPatterns&&!r.urlPatterns.some(c=>{try{return new RegExp(c,"i").test(a)}catch{return!1}}))&&!(r.queryParam&&!n.searchParams.has(r.queryParam))&&!(r.selector&&typeof document<"u"&&!document.querySelector(r.selector)))return r.pageType;return"other"}function w(e){const t=e??(typeof window<"u"?new URL(window.location.href):null);if(!t)return;const n=t.pathname,o=n.match(/\/(?:p|urun|product)\/([^/?#]+)/i);if(o?.[1])return o[1];const a=n.match(/-p-(\d+)/i);if(a?.[1])return a[1]}function L(e){const t=v(e),n={pageType:t};if(t==="pdp"){const o=w();o&&(n.sku=o)}return typeof window<"u"&&(n.url=window.location.href),n}exports.BaseWidget=i.BaseWidget;exports.DEFAULT_WIDGET_THEME_TOKENS=i.DEFAULT_WIDGET_THEME_TOKENS;exports.adaptBackendEvent=i.adaptBackendEvent;exports.basketAddEvent=i.basketAddEvent;exports.bootstrapSession=i.bootstrapSession;exports.buildChatEndpointUrl=i.buildChatEndpointUrl;exports.chatHistorySnapshotEvent=i.chatHistorySnapshotEvent;exports.checkoutCompleteEvent=i.checkoutCompleteEvent;exports.checkoutStartEvent=i.checkoutStartEvent;exports.consumeStream=i.consumeStream;exports.defaultUnknownUISpecRenderer=i.defaultUnknownUISpecRenderer;exports.dismissGlobalErrorToast=i.dismissGlobalErrorToast;exports.dispatch=i.dispatch;exports.getGlobalErrorMessage=i.getGlobalErrorMessage;exports.getWindowPageContext=i.getWindowPageContext;exports.listen=i.listen;exports.llmUsageEvent=i.llmUsageEvent;exports.mergeUISpecRegistry=i.mergeUISpecRegistry;exports.meteringIncrementEvent=i.meteringIncrementEvent;exports.meteringSummaryEvent=i.meteringSummaryEvent;exports.normalizeMiddlewareUrl=i.normalizeMiddlewareUrl;exports.normalizeProductGroupingsResponse=i.normalizeProductGroupingsResponse;exports.normalizeSimilarProductsResponse=i.normalizeSimilarProductsResponse;exports.productToNormalized=i.productToNormalized;exports.registerGlobalErrorToastListener=i.registerGlobalErrorToastListener;exports.renderUISpecWithRegistry=i.renderUISpecWithRegistry;exports.resolveSession=i.resolveSession;exports.sanitizeHtml=i.sanitizeHtml;exports.showGlobalErrorToast=i.showGlobalErrorToast;exports.streamChunkEvent=i.streamChunkEvent;exports.streamDoneEvent=i.streamDoneEvent;exports.streamErrorEvent=i.streamErrorEvent;exports.streamPost=i.streamPost;exports.streamStartEvent=i.streamStartEvent;exports.streamUiSpecEvent=i.streamUiSpecEvent;exports.updatePageContext=i.updatePageContext;exports.widgetHistorySnapshotEvent=i.widgetHistorySnapshotEvent;exports.wireGADataLayer=i.wireGADataLayer;exports.wireQNAToChat=i.wireQNAToChat;exports.wireSimilarToChat=i.wireSimilarToChat;exports.withDefaultWidgetTheme=i.withDefaultWidgetTheme;exports.AccountRuntimeConfigSchema=l.AccountRuntimeConfigSchema;exports.AnalyticsAuthModeSchema=l.AnalyticsAuthModeSchema;exports.UnknownActionPolicySchema=l.UnknownActionPolicySchema;exports.applyNativeSession=l.applyNativeSession;exports.buildOverlayIdempotencyKey=l.buildOverlayIdempotencyKey;exports.createDefaultAccountRuntimeConfig=l.createDefaultAccountRuntimeConfig;exports.createNativeWebViewBridge=l.createNativeWebViewBridge;exports.destroyOverlayWidgets=l.destroyOverlayWidgets;exports.detectNativeEnvironment=l.detectNativeEnvironment;exports.getOverlayWidgets=l.getOverlayWidgets;exports.initNativeOverlayWidgets=l.initNativeOverlayWidgets;exports.initOverlayWidgets=l.initOverlayWidgets;exports.parseAccountRuntimeConfig=l.parseAccountRuntimeConfig;exports.safeParseAccountRuntimeConfig=l.safeParseAccountRuntimeConfig;exports.VoiceInput=u.VoiceInput;exports.isVoiceInputSupported=u.isVoiceInputSupported;exports.routeStreamAction=u.routeStreamAction;exports.AnalyticsClient=f;exports.BASE_WIDGET_THEME=p;exports.DEFAULT_CUSTOMIZATION_LOCALE=h;exports.autoDetectPageContext=L;exports.createAccountIdentity=A;exports.createAnalyticsClient=S;exports.createDefaultAnalyticsConfig=P;exports.createFloatingChatConfig=k;exports.createPdpQnaConfig=I;exports.createPdpSimRelConfig=U;exports.detectPageType=v;exports.extractSkuFromUrl=w;exports.initGengageClient=D;exports.preflightDiagnostics=y;exports.withBaseTheme=b;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./schemas-DqUVzVDf.cjs"),d=require("./index-CjQUfIYI.cjs"),u=require("./index-6hAto23F.cjs");require("./qna.cjs");require("./simrel.cjs");const E={enabled:!0,endpoint:"/analytics",fireAndForget:!0,useBeacon:!0,keepaliveFetch:!0,timeoutMs:4e3,maxRetries:0,batchSize:10,flushIntervalMs:250},S={mode:"none",key:"",headerName:"X-API-Key",bodyField:"api_key"};class f{constructor(t){this.queue=[],this.flushTimer=null,this.config={...E,...t,auth:{...S,...t.auth??{}}},this.onPageHideBound=()=>{this.queue.length!==0&&this.flushAllSync()},typeof window<"u"&&window.addEventListener("pagehide",this.onPageHideBound)}track(t){if(!this.config.enabled)return;const n=C(t);if(this.queue.push(n),this.queue.length>=this.config.batchSize){this.scheduleImmediateFlush();return}this.scheduleFlush()}flush(){if(!this.config.enabled||this.queue.length===0)return;const t=this.queue.splice(0,this.config.batchSize),n=this.buildTransportBody(t),r=g(this.config.endpoint,this.config.middlewareUrl);this.send(r,n)}flushAll(){for(;this.queue.length>0;)this.flush()}destroy(){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.queue.length>0&&this.flushAllSync(),typeof window<"u"&&window.removeEventListener("pagehide",this.onPageHideBound)}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush()},this.config.flushIntervalMs))}scheduleImmediateFlush(){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.flush()}buildTransportBody(t){const n={events:t};return this.config.auth.mode==="body-api-key"&&this.config.auth.key&&(n[this.config.auth.bodyField]=this.config.auth.key),n}send(t,n){try{const r=JSON.stringify(n);if(this.config.useBeacon&&this.config.auth.mode!=="x-api-key-header"&&this.config.auth.mode!=="bearer-header"&&m()){const o=new Blob([r],{type:"application/json"});navigator.sendBeacon(t,o);return}if(typeof fetch>"u")return;const a={"Content-Type":"application/json"};this.config.auth.mode==="x-api-key-header"&&this.config.auth.key&&(a[this.config.auth.headerName]=this.config.auth.key),this.config.auth.mode==="bearer-header"&&this.config.auth.key&&(a.Authorization=`Bearer ${this.config.auth.key}`),fetch(t,{method:"POST",headers:a,body:r,keepalive:!0}).catch(()=>{})}catch{}}flushAllSync(){if(!this.config.enabled)return;const t=g(this.config.endpoint,this.config.middlewareUrl);for(;this.queue.length>0;){const n=this.queue.splice(0,this.config.batchSize),r=this.buildTransportBody(n);try{const a=JSON.stringify(r);if(m()){const o=new Blob([a],{type:"application/json"});navigator.sendBeacon(t,o)}}catch{}}}}function T(e){return new f(e)}function C(e){const t={event_name:e.event_name,event_version:e.event_version??"1",timestamp_ms:e.timestamp_ms??Date.now(),account_id:e.account_id,session_id:e.session_id,correlation_id:e.correlation_id,payload:e.payload};return e.view_id!==void 0&&(t.view_id=e.view_id),e.user_id!==void 0&&(t.user_id=e.user_id),e.widget!==void 0&&(t.widget=e.widget),e.page_type!==void 0&&(t.page_type=e.page_type),e.sku!==void 0&&(t.sku=e.sku),t}function g(e,t){if(/^https?:\/\//i.test(e))return e;const n=i.normalizeMiddlewareUrl(t),r=e.startsWith("/")?e:`/${e}`;return`${n}${r}`}function m(){return typeof navigator<"u"&&typeof navigator.sendBeacon=="function"}const p={primaryColor:"#b7102a",primaryForeground:"#ffffff",backgroundColor:"#f8f9fa",foregroundColor:"#191c1d",borderRadius:"0.75rem",fontFamily:'"Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:"14px",zIndex:"1000","--glov-chatbot-width":"420px","--glov-left-spacing":"260px","--chatbot-padding":"16px","--root-wrapper-background-color":"#f8f9fa","--root-wrapper-border-color":"#edeeef","--gengage-chat-width":"400px","--gengage-chat-shell-radius":"1rem","--gengage-chat-header-height":"60px","--gengage-chat-conversation-width":"396px","--gengage-chat-panel-min-width":"320px","--gengage-chat-panel-max-width":"860px","--gengage-chat-input-height":"48px","--gengage-qna-pill-radius":"999px","--gengage-qna-input-radius":"0.75rem","--gengage-simrel-card-radius":"0.75rem"};function b(e){return{...p,...e}}const h="tr";function A(e){return{ACCOUNT_ID:e.accountId,MIDDLEWARE_URL:e.middlewareUrl,LOCALE:e.locale??h}}function k(e,t={}){const n={accountId:e.accountId,middlewareUrl:e.middlewareUrl,session:{sessionId:e.sessionId},variant:"floating",locale:e.locale??h,...t};return e.theme!==void 0&&(n.theme=e.theme),n}function I(e,t={}){const n={accountId:e.accountId,middlewareUrl:e.middlewareUrl,session:{sessionId:e.sessionId},pageContext:{pageType:"pdp",sku:e.sku},mountTarget:e.mountTarget,...t};return e.theme!==void 0&&(n.theme=e.theme),n}function U(e,t={}){const n={accountId:e.accountId,middlewareUrl:e.middlewareUrl,session:{sessionId:e.sessionId},sku:e.sku,mountTarget:e.mountTarget,...t};return e.theme!==void 0&&(n.theme=e.theme),n}function P(e,t={}){return{enabled:!0,middlewareUrl:e,endpoint:"/analytics",fireAndForget:!0,useBeacon:!0,...t}}function _(e){try{return document.querySelector(e),!0}catch{return!1}}function y(e,t){const n=[],r=e.mounts,a=[["qna",r.qna],["simrel",r.simrel],["chat",r.chat]];for(const[s,c]of a)if(c!==void 0){if(!_(c)){n.push({code:"INVALID_SELECTOR",message:`[gengage preflight] ${s} mount selector is invalid CSS: "${c}"`,severity:"error"});continue}document.querySelector(c)||n.push({code:"MOUNT_NOT_FOUND",message:`[gengage preflight] ${s} mount target not found: "${c}" — widget will skip or wait for DOM`,severity:"warn"})}const o=e.gtm.idempotencyKey;if(window[o]!==void 0&&n.push({code:"DUPLICATE_IDEMPOTENCY",message:`[gengage preflight] window["${o}"] already exists — widgets may have already initialized`,severity:"warn"}),!t?.skipCspCheck){let s=!1;const c=l=>{l.blockedURI&&e.middlewareUrl.startsWith(l.blockedURI)&&(s=!0)};document.addEventListener("securitypolicyviolation",c);try{fetch(e.middlewareUrl,{method:"HEAD",mode:"no-cors"}).catch(()=>{})}catch{s=!0}document.removeEventListener("securitypolicyviolation",c),s&&n.push({code:"CSP_BLOCKED",message:`[gengage preflight] middleware URL may be blocked by Content-Security-Policy: "${e.middlewareUrl}". Add it to connect-src.`,severity:"warn"})}for(const s of n)s.severity==="error"?console.error(s.message):console.warn(s.message);return{ok:n.every(s=>s.severity!=="error"),warnings:n}}function R(e){const t=d.safeParseAccountRuntimeConfig(e);if(!t.success){const n=t.error.issues.map(r=>`${r.path.join(".")}: ${r.message}`).join("; ");throw new Error(`[gengage] Invalid runtime config: ${n}`)}return t.data}function x(e,t,n){const r={accountId:e.accountId,middlewareUrl:e.middlewareUrl,idempotencyKey:e.gtm.idempotencyKey};return e.locale!==void 0&&(r.locale=e.locale),n!==void 0&&(r.pageContext=n,n.sku!==void 0&&(r.sku=n.sku)),r.chat={enabled:e.widgets.chat.enabled},e.mounts.chat!==void 0&&(r.chat.mountTarget=e.mounts.chat),r.qna={enabled:e.widgets.qna.enabled},e.mounts.qna!==void 0&&(r.qna.mountTarget=e.mounts.qna),r.simrel={enabled:e.widgets.simrel.enabled},e.mounts.simrel!==void 0&&(r.simrel.mountTarget=e.mounts.simrel),t?.onAddToCart!==void 0&&(r.onAddToCart=t.onAddToCart),t?.onProductNavigate!==void 0&&(r.onProductNavigate=t.onProductNavigate),t?.onScriptCall!==void 0&&(r.onScriptCall=t.onScriptCall),r}async function D(e){const t=R(e.runtimeConfig);if(e.preflight!==!1){const o=y(t);if(!o.ok){const s=o.warnings.filter(c=>c.severity==="error");throw new Error(`[gengage] Preflight failed: ${s.map(c=>c.message).join("; ")}`)}}const n=e.contextResolver?.(),r=x(t,e.hostActions,n),a=await d.initOverlayWidgets(r);if(e.contextResolver!==void 0){const o=e.contextResolver,s=()=>{const l=o();a.updateContext(l)};window.addEventListener("gengage:context:update",s);const c=a.destroy.bind(a);a.destroy=()=>{window.removeEventListener("gengage:context:update",s),c()}}return a}const O=[{pageType:"home",urlPatterns:["^/$","^/index\\.html?$","^/anasayfa$"]},{pageType:"search",urlPatterns:["/arama","/search","/ara\\?"],queryParam:"q"},{pageType:"cart",urlPatterns:["/sepet","/cart","/basket","/sepetim"]},{pageType:"plp",urlPatterns:["/kategori/","/category/","/c/","/koleksiyon/","/collection/"]},{pageType:"pdp",urlPatterns:["/urun/","/product/","/p/","/-p-","/-pm-"]}];function v(e,t){const n=t??(typeof window<"u"?new URL(window.location.href):null);if(!n)return"other";const r=e??O,a=n.pathname;for(const o of r)if(!(o.urlPatterns&&!o.urlPatterns.some(c=>{try{return new RegExp(c,"i").test(a)}catch{return!1}}))&&!(o.queryParam&&!n.searchParams.has(o.queryParam))&&!(o.selector&&typeof document<"u"&&!document.querySelector(o.selector)))return o.pageType;return"other"}function w(e){const t=e??(typeof window<"u"?new URL(window.location.href):null);if(!t)return;const n=t.pathname,r=n.match(/\/(?:p|urun|product)\/([^/?#]+)/i);if(r?.[1])return r[1];const a=n.match(/-p-(\d+)/i);if(a?.[1])return a[1]}function L(e){const t=v(e),n={pageType:t};if(t==="pdp"){const r=w();r&&(n.sku=r)}return typeof window<"u"&&(n.url=window.location.href),n}exports.BaseWidget=i.BaseWidget;exports.DEFAULT_WIDGET_THEME_TOKENS=i.DEFAULT_WIDGET_THEME_TOKENS;exports.adaptBackendEvent=i.adaptBackendEvent;exports.basketAddEvent=i.basketAddEvent;exports.bootstrapSession=i.bootstrapSession;exports.buildChatEndpointUrl=i.buildChatEndpointUrl;exports.chatHistorySnapshotEvent=i.chatHistorySnapshotEvent;exports.checkoutCompleteEvent=i.checkoutCompleteEvent;exports.checkoutStartEvent=i.checkoutStartEvent;exports.consumeStream=i.consumeStream;exports.defaultUnknownUISpecRenderer=i.defaultUnknownUISpecRenderer;exports.dismissGlobalErrorToast=i.dismissGlobalErrorToast;exports.dispatch=i.dispatch;exports.getGlobalErrorMessage=i.getGlobalErrorMessage;exports.getSuggestedSearchKeywords=i.getSuggestedSearchKeywords;exports.getSuggestedSearchKeywordsText=i.getSuggestedSearchKeywordsText;exports.getWindowPageContext=i.getWindowPageContext;exports.listen=i.listen;exports.llmUsageEvent=i.llmUsageEvent;exports.mergeUISpecRegistry=i.mergeUISpecRegistry;exports.meteringIncrementEvent=i.meteringIncrementEvent;exports.meteringSummaryEvent=i.meteringSummaryEvent;exports.normalizeMiddlewareUrl=i.normalizeMiddlewareUrl;exports.normalizeProductGroupingsResponse=i.normalizeProductGroupingsResponse;exports.normalizeSimilarProductsResponse=i.normalizeSimilarProductsResponse;exports.productToNormalized=i.productToNormalized;exports.registerGlobalErrorToastListener=i.registerGlobalErrorToastListener;exports.renderUISpecWithRegistry=i.renderUISpecWithRegistry;exports.resolveSession=i.resolveSession;exports.sanitizeHtml=i.sanitizeHtml;exports.showGlobalErrorToast=i.showGlobalErrorToast;exports.streamChunkEvent=i.streamChunkEvent;exports.streamDoneEvent=i.streamDoneEvent;exports.streamErrorEvent=i.streamErrorEvent;exports.streamPost=i.streamPost;exports.streamStartEvent=i.streamStartEvent;exports.streamUiSpecEvent=i.streamUiSpecEvent;exports.updatePageContext=i.updatePageContext;exports.widgetHistorySnapshotEvent=i.widgetHistorySnapshotEvent;exports.wireGADataLayer=i.wireGADataLayer;exports.wireQNAToChat=i.wireQNAToChat;exports.wireSimilarToChat=i.wireSimilarToChat;exports.withDefaultWidgetTheme=i.withDefaultWidgetTheme;exports.AccountRuntimeConfigSchema=d.AccountRuntimeConfigSchema;exports.AnalyticsAuthModeSchema=d.AnalyticsAuthModeSchema;exports.UnknownActionPolicySchema=d.UnknownActionPolicySchema;exports.applyNativeSession=d.applyNativeSession;exports.buildOverlayIdempotencyKey=d.buildOverlayIdempotencyKey;exports.createDefaultAccountRuntimeConfig=d.createDefaultAccountRuntimeConfig;exports.createNativeWebViewBridge=d.createNativeWebViewBridge;exports.destroyOverlayWidgets=d.destroyOverlayWidgets;exports.detectNativeEnvironment=d.detectNativeEnvironment;exports.getOverlayWidgets=d.getOverlayWidgets;exports.initNativeOverlayWidgets=d.initNativeOverlayWidgets;exports.initOverlayWidgets=d.initOverlayWidgets;exports.parseAccountRuntimeConfig=d.parseAccountRuntimeConfig;exports.safeParseAccountRuntimeConfig=d.safeParseAccountRuntimeConfig;exports.VoiceInput=u.VoiceInput;exports.isVoiceInputSupported=u.isVoiceInputSupported;exports.routeStreamAction=u.routeStreamAction;exports.AnalyticsClient=f;exports.BASE_WIDGET_THEME=p;exports.DEFAULT_CUSTOMIZATION_LOCALE=h;exports.autoDetectPageContext=L;exports.createAccountIdentity=A;exports.createAnalyticsClient=T;exports.createDefaultAnalyticsConfig=P;exports.createFloatingChatConfig=k;exports.createPdpQnaConfig=I;exports.createPdpSimRelConfig=U;exports.detectPageType=v;exports.extractSkuFromUrl=w;exports.initGengageClient=D;exports.preflightDiagnostics=y;exports.withBaseTheme=b;
2
2
  //# sourceMappingURL=common.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.cjs","sources":["../src/common/analytics.ts","../src/common/theme-utils.ts","../src/common/customization-factories.ts","../src/common/preflight.ts","../src/common/client.ts","../src/common/page-detect.ts"],"sourcesContent":["import { normalizeMiddlewareUrl } from './api-paths.js';\nimport type { AnalyticsAuthMode } from './config-schema.js';\n\nexport interface AnalyticsEnvelope {\n event_name: string;\n event_version: '1';\n timestamp_ms: number;\n account_id: string;\n session_id: string;\n correlation_id: string;\n view_id?: string;\n user_id?: string;\n widget?: 'chat' | 'qna' | 'simrel';\n page_type?: string;\n sku?: string;\n payload: Record<string, unknown>;\n}\n\nexport interface AnalyticsAuthConfig {\n mode?: AnalyticsAuthMode;\n key?: string;\n headerName?: string;\n bodyField?: string;\n}\n\nexport interface AnalyticsClientConfig {\n enabled?: boolean;\n middlewareUrl: string;\n endpoint?: string;\n auth?: AnalyticsAuthConfig;\n fireAndForget?: boolean;\n useBeacon?: boolean;\n keepaliveFetch?: boolean;\n timeoutMs?: number;\n maxRetries?: number;\n batchSize?: number;\n flushIntervalMs?: number;\n}\n\nexport type AnalyticsInput = Omit<AnalyticsEnvelope, 'event_version' | 'timestamp_ms'> &\n Partial<Pick<AnalyticsEnvelope, 'event_version' | 'timestamp_ms'>>;\n\ninterface AnalyticsTransportBody {\n events: AnalyticsEnvelope[];\n [extra: string]: unknown;\n}\n\nconst DEFAULT_ANALYTICS_CONFIG: Required<Omit<AnalyticsClientConfig, 'auth' | 'middlewareUrl'>> = {\n enabled: true,\n endpoint: '/analytics',\n fireAndForget: true,\n useBeacon: true,\n keepaliveFetch: true,\n timeoutMs: 4000,\n maxRetries: 0,\n batchSize: 10,\n flushIntervalMs: 250,\n};\n\nconst DEFAULT_AUTH: Required<AnalyticsAuthConfig> = {\n mode: 'none',\n key: '',\n headerName: 'X-API-Key',\n bodyField: 'api_key',\n};\n\n/**\n * Fire-and-forget analytics client.\n *\n * All transport errors are silently suppressed — the backend analytics\n * endpoint is not yet implemented, so callers must never observe failures.\n */\nexport class AnalyticsClient {\n private readonly config: Required<Omit<AnalyticsClientConfig, 'auth'>> & { auth: Required<AnalyticsAuthConfig> };\n private readonly queue: AnalyticsEnvelope[] = [];\n private flushTimer: ReturnType<typeof setTimeout> | null = null;\n private readonly onPageHideBound: () => void;\n\n constructor(config: AnalyticsClientConfig) {\n this.config = {\n ...DEFAULT_ANALYTICS_CONFIG,\n ...config,\n auth: {\n ...DEFAULT_AUTH,\n ...(config.auth ?? {}),\n },\n };\n\n this.onPageHideBound = () => {\n if (this.queue.length === 0) return;\n this.flushAllSync();\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('pagehide', this.onPageHideBound);\n }\n }\n\n track(input: AnalyticsInput): void {\n if (!this.config.enabled) return;\n const envelope = normalizeAnalyticsInput(input);\n this.queue.push(envelope);\n\n if (this.queue.length >= this.config.batchSize) {\n this.scheduleImmediateFlush();\n return;\n }\n\n this.scheduleFlush();\n }\n\n flush(): void {\n if (!this.config.enabled || this.queue.length === 0) return;\n\n const batch = this.queue.splice(0, this.config.batchSize);\n const body = this.buildTransportBody(batch);\n const endpoint = resolveAnalyticsEndpoint(this.config.endpoint, this.config.middlewareUrl);\n\n this.send(endpoint, body);\n }\n\n /** Drain the entire queue synchronously (used on page hide). */\n flushAll(): void {\n while (this.queue.length > 0) {\n this.flush();\n }\n }\n\n destroy(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n if (this.queue.length > 0) {\n this.flushAllSync();\n }\n if (typeof window !== 'undefined') {\n window.removeEventListener('pagehide', this.onPageHideBound);\n }\n }\n\n private scheduleFlush(): void {\n if (this.flushTimer) return;\n this.flushTimer = setTimeout(() => {\n this.flushTimer = null;\n this.flush();\n }, this.config.flushIntervalMs);\n }\n\n private scheduleImmediateFlush(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n this.flush();\n }\n\n private buildTransportBody(events: AnalyticsEnvelope[]): AnalyticsTransportBody {\n const body: AnalyticsTransportBody = { events };\n if (this.config.auth.mode === 'body-api-key' && this.config.auth.key) {\n body[this.config.auth.bodyField] = this.config.auth.key;\n }\n return body;\n }\n\n /** Best-effort send — all errors silently suppressed. */\n private send(endpoint: string, body: AnalyticsTransportBody): void {\n try {\n const payload = JSON.stringify(body);\n\n // Prefer sendBeacon (works during page unload, no response needed)\n if (\n this.config.useBeacon &&\n this.config.auth.mode !== 'x-api-key-header' &&\n this.config.auth.mode !== 'bearer-header' &&\n hasSendBeacon()\n ) {\n const blob = new Blob([payload], { type: 'application/json' });\n navigator.sendBeacon(endpoint, blob);\n return;\n }\n\n if (typeof fetch === 'undefined') return;\n\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.auth.mode === 'x-api-key-header' && this.config.auth.key) {\n headers[this.config.auth.headerName] = this.config.auth.key;\n }\n if (this.config.auth.mode === 'bearer-header' && this.config.auth.key) {\n headers.Authorization = `Bearer ${this.config.auth.key}`;\n }\n\n // Fire-and-forget: no await, no error handling, keepalive for page unload\n void fetch(endpoint, {\n method: 'POST',\n headers,\n body: payload,\n keepalive: true,\n }).catch(() => {\n // Silently suppress — backend not implemented yet\n });\n } catch {\n // Silently suppress all errors\n }\n }\n\n /** Synchronous flush using sendBeacon only (for page unload). */\n private flushAllSync(): void {\n if (!this.config.enabled) return;\n const endpoint = resolveAnalyticsEndpoint(this.config.endpoint, this.config.middlewareUrl);\n while (this.queue.length > 0) {\n const batch = this.queue.splice(0, this.config.batchSize);\n const body = this.buildTransportBody(batch);\n try {\n const payload = JSON.stringify(body);\n if (hasSendBeacon()) {\n const blob = new Blob([payload], { type: 'application/json' });\n navigator.sendBeacon(endpoint, blob);\n }\n } catch {\n // Silently suppress\n }\n }\n }\n}\n\nexport function createAnalyticsClient(config: AnalyticsClientConfig): AnalyticsClient {\n return new AnalyticsClient(config);\n}\n\nfunction normalizeAnalyticsInput(input: AnalyticsInput): AnalyticsEnvelope {\n const envelope: AnalyticsEnvelope = {\n event_name: input.event_name,\n event_version: input.event_version ?? '1',\n timestamp_ms: input.timestamp_ms ?? Date.now(),\n account_id: input.account_id,\n session_id: input.session_id,\n correlation_id: input.correlation_id,\n payload: input.payload,\n };\n\n if (input.view_id !== undefined) envelope.view_id = input.view_id;\n if (input.user_id !== undefined) envelope.user_id = input.user_id;\n if (input.widget !== undefined) envelope.widget = input.widget;\n if (input.page_type !== undefined) envelope.page_type = input.page_type;\n if (input.sku !== undefined) envelope.sku = input.sku;\n\n return envelope;\n}\n\nfunction resolveAnalyticsEndpoint(endpoint: string, middlewareUrl: string): string {\n if (/^https?:\\/\\//i.test(endpoint)) return endpoint;\n const baseUrl = normalizeMiddlewareUrl(middlewareUrl);\n const normalizedEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;\n return `${baseUrl}${normalizedEndpoint}`;\n}\n\nfunction hasSendBeacon(): boolean {\n return typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function';\n}\n","import type { WidgetTheme } from './types.js';\n\n/**\n * Shared baseline tokens used by account customizations.\n *\n * These values come from historical Gengage host defaults and are\n * intentionally conservative so account themes can override only what differs.\n */\nexport const BASE_WIDGET_THEME: WidgetTheme = {\n primaryColor: '#000000',\n primaryForeground: '#ffffff',\n backgroundColor: '#ffffff',\n foregroundColor: '#222222',\n borderRadius: '8px',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: '14px',\n zIndex: '1000',\n\n '--glov-chatbot-width': '420px',\n '--glov-left-spacing': '260px',\n '--chatbot-padding': '16px',\n '--root-wrapper-background-color': '#F2F2F2',\n '--root-wrapper-border-color': '#E5E5E5',\n\n '--gengage-chat-width': '400px',\n '--gengage-chat-shell-radius': '12px',\n '--gengage-chat-header-height': '60px',\n '--gengage-chat-conversation-width': '396px',\n '--gengage-chat-panel-min-width': '320px',\n '--gengage-chat-panel-max-width': '860px',\n '--gengage-chat-input-height': '48px',\n '--gengage-qna-pill-radius': '999px',\n '--gengage-qna-input-radius': '14px',\n '--gengage-simrel-card-radius': '14px',\n};\n\n/**\n * Merge account overrides on top of the shared base theme.\n *\n * Account customization files should call this helper so shared defaults stay\n * centralized under src/common.\n */\nexport function withBaseTheme(overrides: WidgetTheme): WidgetTheme {\n return { ...BASE_WIDGET_THEME, ...overrides };\n}\n","import type { ChatWidgetConfig } from '../chat/types.js';\nimport type { QNAWidgetConfig } from '../qna/types.js';\nimport type { SimRelWidgetConfig } from '../simrel/types.js';\nimport type { AnalyticsClientConfig } from './analytics.js';\nimport type { WidgetTheme } from './types.js';\n\nexport const DEFAULT_CUSTOMIZATION_LOCALE = 'tr';\n\nexport interface AccountIdentityConfig {\n accountId: string;\n middlewareUrl: string;\n locale?: string;\n}\n\nexport interface AccountIdentity {\n ACCOUNT_ID: string;\n MIDDLEWARE_URL: string;\n LOCALE: string;\n}\n\ninterface BaseAccountWidgetConfigInput {\n accountId: string;\n middlewareUrl: string;\n sessionId: string;\n theme?: WidgetTheme;\n}\n\nexport interface FloatingChatConfigInput extends BaseAccountWidgetConfigInput {\n locale?: string;\n}\n\nexport interface PdpQnaConfigInput extends BaseAccountWidgetConfigInput {\n sku: string;\n mountTarget: QNAWidgetConfig['mountTarget'];\n}\n\nexport interface PdpSimRelConfigInput extends BaseAccountWidgetConfigInput {\n sku: string;\n mountTarget: SimRelWidgetConfig['mountTarget'];\n}\n\ntype FloatingChatConfigOverrides = Omit<\n Partial<ChatWidgetConfig>,\n 'accountId' | 'middlewareUrl' | 'session' | 'variant' | 'theme' | 'locale'\n>;\ntype PdpQnaConfigOverrides = Omit<\n Partial<QNAWidgetConfig>,\n 'accountId' | 'middlewareUrl' | 'session' | 'pageContext' | 'mountTarget' | 'theme'\n>;\ntype SimRelAccountConfig = Omit<SimRelWidgetConfig, 'onAddToCart' | 'onProductNavigate'>;\ntype PdpSimRelConfigOverrides = Omit<\n Partial<SimRelAccountConfig>,\n 'accountId' | 'middlewareUrl' | 'session' | 'sku' | 'mountTarget' | 'theme'\n>;\ntype DefaultAnalyticsConfigOverrides = Omit<AnalyticsClientConfig, 'middlewareUrl'>;\n\n/**\n * Shared account identity factory used by all customization folders.\n * Keeps middleware URL + locale defaults centralized in the SDK layer.\n */\nexport function createAccountIdentity(config: AccountIdentityConfig): AccountIdentity {\n return {\n ACCOUNT_ID: config.accountId,\n MIDDLEWARE_URL: config.middlewareUrl,\n LOCALE: config.locale ?? DEFAULT_CUSTOMIZATION_LOCALE,\n };\n}\n\n/**\n * Shared floating-chat baseline used by account customizations.\n * Account files only pass differences via `overrides`.\n */\nexport function createFloatingChatConfig(\n input: FloatingChatConfigInput,\n overrides: FloatingChatConfigOverrides = {},\n): ChatWidgetConfig {\n const config: ChatWidgetConfig = {\n accountId: input.accountId,\n middlewareUrl: input.middlewareUrl,\n session: { sessionId: input.sessionId },\n variant: 'floating',\n locale: input.locale ?? DEFAULT_CUSTOMIZATION_LOCALE,\n ...overrides,\n };\n if (input.theme !== undefined) {\n config.theme = input.theme;\n }\n return config;\n}\n\n/**\n * Shared PDP QNA baseline used by account customizations.\n */\nexport function createPdpQnaConfig(input: PdpQnaConfigInput, overrides: PdpQnaConfigOverrides = {}): QNAWidgetConfig {\n const config: QNAWidgetConfig = {\n accountId: input.accountId,\n middlewareUrl: input.middlewareUrl,\n session: { sessionId: input.sessionId },\n pageContext: { pageType: 'pdp', sku: input.sku },\n mountTarget: input.mountTarget,\n ...overrides,\n };\n if (input.theme !== undefined) {\n config.theme = input.theme;\n }\n return config;\n}\n\n/**\n * Shared PDP SimRel baseline used by account customizations.\n * Host-level commerce callbacks stay in account init wrappers.\n */\nexport function createPdpSimRelConfig(\n input: PdpSimRelConfigInput,\n overrides: PdpSimRelConfigOverrides = {},\n): SimRelAccountConfig {\n const config: SimRelAccountConfig = {\n accountId: input.accountId,\n middlewareUrl: input.middlewareUrl,\n session: { sessionId: input.sessionId },\n sku: input.sku,\n mountTarget: input.mountTarget,\n ...overrides,\n };\n if (input.theme !== undefined) {\n config.theme = input.theme;\n }\n return config;\n}\n\n/**\n * Shared analytics defaults for account customization wrappers.\n */\nexport function createDefaultAnalyticsConfig(\n middlewareUrl: string,\n overrides: DefaultAnalyticsConfigOverrides = {},\n): AnalyticsClientConfig {\n return {\n enabled: true,\n middlewareUrl,\n endpoint: '/analytics',\n fireAndForget: true,\n useBeacon: true,\n ...overrides,\n };\n}\n","import type { AccountRuntimeConfig } from './config-schema.js';\n\nexport interface PreflightWarning {\n code: string;\n message: string;\n severity: 'warn' | 'error';\n}\n\nexport interface PreflightResult {\n ok: boolean;\n warnings: PreflightWarning[];\n}\n\nfunction isValidSelector(selector: string): boolean {\n try {\n document.querySelector(selector);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function preflightDiagnostics(\n config: AccountRuntimeConfig,\n options?: { skipCspCheck?: boolean },\n): PreflightResult {\n const warnings: PreflightWarning[] = [];\n\n const mounts = config.mounts;\n const mountEntries: Array<[string, string | undefined]> = [\n ['qna', mounts.qna],\n ['simrel', mounts.simrel],\n ['chat', mounts.chat],\n ];\n\n for (const [widget, selector] of mountEntries) {\n if (selector === undefined) continue;\n\n if (!isValidSelector(selector)) {\n warnings.push({\n code: 'INVALID_SELECTOR',\n message: `[gengage preflight] ${widget} mount selector is invalid CSS: \"${selector}\"`,\n severity: 'error',\n });\n continue;\n }\n\n if (!document.querySelector(selector)) {\n warnings.push({\n code: 'MOUNT_NOT_FOUND',\n message: `[gengage preflight] ${widget} mount target not found: \"${selector}\" — widget will skip or wait for DOM`,\n severity: 'warn',\n });\n }\n }\n\n const idempotencyKey = config.gtm.idempotencyKey;\n if ((window as unknown as Record<string, unknown>)[idempotencyKey] !== undefined) {\n warnings.push({\n code: 'DUPLICATE_IDEMPOTENCY',\n message: `[gengage preflight] window[\"${idempotencyKey}\"] already exists — widgets may have already initialized`,\n severity: 'warn',\n });\n }\n\n // CSP connect-src probe: detect if the middleware URL is blocked.\n // Uses a synchronous SecurityPolicyViolationEvent listener to catch CSP blocks.\n if (!options?.skipCspCheck) {\n let cspBlocked = false;\n const cspListener = (e: SecurityPolicyViolationEvent) => {\n if (e.blockedURI && config.middlewareUrl.startsWith(e.blockedURI)) {\n cspBlocked = true;\n }\n };\n document.addEventListener('securitypolicyviolation', cspListener);\n try {\n // A HEAD request with mode 'no-cors' is cheap and triggers CSP if connect-src blocks it.\n void fetch(config.middlewareUrl, { method: 'HEAD', mode: 'no-cors' }).catch(() => {\n /* swallow — we only care about CSP violations, not network errors */\n });\n } catch {\n // fetch itself may throw if CSP blocks it synchronously\n cspBlocked = true;\n }\n // Give the browser a tick to fire the violation event synchronously.\n // If it fired, cspBlocked is already true.\n document.removeEventListener('securitypolicyviolation', cspListener);\n if (cspBlocked) {\n warnings.push({\n code: 'CSP_BLOCKED',\n message: `[gengage preflight] middleware URL may be blocked by Content-Security-Policy: \"${config.middlewareUrl}\". Add it to connect-src.`,\n severity: 'warn',\n });\n }\n }\n\n for (const w of warnings) {\n if (w.severity === 'error') {\n console.error(w.message);\n } else {\n console.warn(w.message);\n }\n }\n\n return {\n ok: warnings.every((w) => w.severity !== 'error'),\n warnings,\n };\n}\n","import type { AccountRuntimeConfig } from './config-schema.js';\nimport { safeParseAccountRuntimeConfig } from './config-schema.js';\nimport { initOverlayWidgets } from './overlay.js';\nimport type { OverlayWidgetsController, OverlayWidgetsOptions } from './overlay.js';\nimport { preflightDiagnostics } from './preflight.js';\nimport type { PageContext } from './types.js';\n\nexport interface HostActions {\n onAddToCart?: (info: { sku: string; quantity?: number; cartCode?: string }) => void;\n onProductNavigate?: (url: string, sku: string, sessionId: string | null) => void;\n onScriptCall?: (params: { name: string; payload?: Record<string, unknown> }) => void;\n}\n\nexport interface GengageClientOptions {\n runtimeConfig: AccountRuntimeConfig | unknown;\n contextResolver?: () => Partial<PageContext>;\n hostActions?: HostActions;\n preflight?: boolean;\n}\n\nfunction parseConfig(raw: AccountRuntimeConfig | unknown): AccountRuntimeConfig {\n const result = safeParseAccountRuntimeConfig(raw);\n if (!result.success) {\n const messages = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');\n throw new Error(`[gengage] Invalid runtime config: ${messages}`);\n }\n return result.data;\n}\n\nfunction mapConfigToOverlayOptions(\n config: AccountRuntimeConfig,\n hostActions?: HostActions,\n initialContext?: Partial<PageContext>,\n): OverlayWidgetsOptions {\n const options: OverlayWidgetsOptions = {\n accountId: config.accountId,\n middlewareUrl: config.middlewareUrl,\n idempotencyKey: config.gtm.idempotencyKey,\n };\n\n if (config.locale !== undefined) options.locale = config.locale;\n\n if (initialContext !== undefined) {\n options.pageContext = initialContext;\n if (initialContext.sku !== undefined) options.sku = initialContext.sku;\n }\n\n options.chat = {\n enabled: config.widgets.chat.enabled,\n };\n if (config.mounts.chat !== undefined) {\n options.chat.mountTarget = config.mounts.chat;\n }\n\n options.qna = {\n enabled: config.widgets.qna.enabled,\n };\n if (config.mounts.qna !== undefined) {\n options.qna.mountTarget = config.mounts.qna;\n }\n\n options.simrel = {\n enabled: config.widgets.simrel.enabled,\n };\n if (config.mounts.simrel !== undefined) {\n options.simrel.mountTarget = config.mounts.simrel;\n }\n\n if (hostActions?.onAddToCart !== undefined) {\n options.onAddToCart = hostActions.onAddToCart;\n }\n\n if (hostActions?.onProductNavigate !== undefined) {\n options.onProductNavigate = hostActions.onProductNavigate;\n }\n\n if (hostActions?.onScriptCall !== undefined) {\n options.onScriptCall = hostActions.onScriptCall;\n }\n\n return options;\n}\n\nexport async function initGengageClient(options: GengageClientOptions): Promise<OverlayWidgetsController> {\n const config = parseConfig(options.runtimeConfig);\n\n if (options.preflight !== false) {\n const result = preflightDiagnostics(config);\n if (!result.ok) {\n const errors = result.warnings.filter((w) => w.severity === 'error');\n throw new Error(`[gengage] Preflight failed: ${errors.map((e) => e.message).join('; ')}`);\n }\n }\n\n const initialContext = options.contextResolver?.();\n\n const overlayOptions = mapConfigToOverlayOptions(config, options.hostActions, initialContext);\n const controller = await initOverlayWidgets(overlayOptions);\n\n if (options.contextResolver !== undefined) {\n const resolver = options.contextResolver;\n const listener = () => {\n const ctx = resolver();\n void controller.updateContext(ctx);\n };\n window.addEventListener('gengage:context:update', listener);\n\n // Wrap destroy to remove the listener and prevent a memory leak.\n const originalDestroy = controller.destroy.bind(controller);\n controller.destroy = () => {\n window.removeEventListener('gengage:context:update', listener);\n originalDestroy();\n };\n }\n\n return controller;\n}\n","/**\n * URL-based page type detection.\n *\n * Provides auto-detection of page type from URL patterns and DOM signals.\n * Falls back to 'other' when no rule matches.\n */\n\nimport type { PageContext } from './types.js';\n\nexport type DetectablePageType = PageContext['pageType'];\n\nexport interface PageDetectionRule {\n /** Page type to assign when this rule matches. */\n pageType: DetectablePageType;\n /** URL pathname patterns (tested with `new RegExp(pattern)`). */\n urlPatterns?: string[];\n /** If present, page type is detected only when this query param exists. */\n queryParam?: string;\n /** DOM selector — if an element matching this exists, rule matches. */\n selector?: string;\n}\n\n/** Default rules covering common Turkish e-commerce URL patterns. */\nconst DEFAULT_RULES: PageDetectionRule[] = [\n {\n pageType: 'home',\n urlPatterns: ['^/$', '^/index\\\\.html?$', '^/anasayfa$'],\n },\n {\n pageType: 'search',\n urlPatterns: ['/arama', '/search', '/ara\\\\?'],\n queryParam: 'q',\n },\n {\n pageType: 'cart',\n urlPatterns: ['/sepet', '/cart', '/basket', '/sepetim'],\n },\n {\n pageType: 'plp',\n urlPatterns: ['/kategori/', '/category/', '/c/', '/koleksiyon/', '/collection/'],\n },\n {\n pageType: 'pdp',\n urlPatterns: ['/urun/', '/product/', '/p/', '/-p-', '/-pm-'],\n },\n];\n\n/**\n * Detects page type from the current URL and optional DOM signals.\n *\n * @param rules - Custom rules (defaults to common Turkish e-commerce patterns).\n * @param url - URL to analyze (defaults to window.location).\n * @returns Detected page type, or 'other' if no rule matches.\n */\nexport function detectPageType(rules?: PageDetectionRule[], url?: URL): DetectablePageType {\n const loc = url ?? (typeof window !== 'undefined' ? new URL(window.location.href) : null);\n if (!loc) return 'other';\n\n const effectiveRules = rules ?? DEFAULT_RULES;\n const pathname = loc.pathname;\n\n for (const rule of effectiveRules) {\n // Check URL patterns\n if (rule.urlPatterns) {\n const urlMatch = rule.urlPatterns.some((pattern) => {\n try {\n return new RegExp(pattern, 'i').test(pathname);\n } catch {\n return false;\n }\n });\n if (!urlMatch) continue;\n }\n\n // Check query param requirement\n if (rule.queryParam && !loc.searchParams.has(rule.queryParam)) {\n continue;\n }\n\n // Check DOM selector\n if (rule.selector && typeof document !== 'undefined') {\n if (!document.querySelector(rule.selector)) continue;\n }\n\n return rule.pageType;\n }\n\n return 'other';\n}\n\n/**\n * Attempts to extract a product SKU from the URL path.\n * Looks for common patterns like `/p/SKU`, `/urun/SKU`, `/-p-SKU`.\n */\nexport function extractSkuFromUrl(url?: URL): string | undefined {\n const loc = url ?? (typeof window !== 'undefined' ? new URL(window.location.href) : null);\n if (!loc) return undefined;\n\n const pathname = loc.pathname;\n\n // Pattern: /p/SKU or /urun/SKU or /product/SKU\n const segmentMatch = pathname.match(/\\/(?:p|urun|product)\\/([^/?#]+)/i);\n if (segmentMatch?.[1]) return segmentMatch[1];\n\n // Pattern: -p-SKU at end of path (Trendyol style)\n const suffixMatch = pathname.match(/-p-(\\d+)/i);\n if (suffixMatch?.[1]) return suffixMatch[1];\n\n return undefined;\n}\n\n/**\n * Auto-detects page context from URL and DOM signals.\n * Use as a fallback when the host page doesn't set pageContext explicitly.\n */\nexport function autoDetectPageContext(rules?: PageDetectionRule[]): Partial<PageContext> {\n const pageType = detectPageType(rules);\n const result: Partial<PageContext> = { pageType };\n\n if (pageType === 'pdp') {\n const sku = extractSkuFromUrl();\n if (sku) result.sku = sku;\n }\n\n if (typeof window !== 'undefined') {\n result.url = window.location.href;\n }\n\n return result;\n}\n"],"names":["DEFAULT_ANALYTICS_CONFIG","DEFAULT_AUTH","AnalyticsClient","config","input","envelope","normalizeAnalyticsInput","batch","body","endpoint","resolveAnalyticsEndpoint","events","payload","hasSendBeacon","blob","headers","createAnalyticsClient","middlewareUrl","baseUrl","normalizeMiddlewareUrl","normalizedEndpoint","BASE_WIDGET_THEME","withBaseTheme","overrides","DEFAULT_CUSTOMIZATION_LOCALE","createAccountIdentity","createFloatingChatConfig","createPdpQnaConfig","createPdpSimRelConfig","createDefaultAnalyticsConfig","isValidSelector","selector","preflightDiagnostics","options","warnings","mounts","mountEntries","widget","idempotencyKey","cspBlocked","cspListener","e","w","parseConfig","raw","result","safeParseAccountRuntimeConfig","messages","i","mapConfigToOverlayOptions","hostActions","initialContext","initGengageClient","errors","overlayOptions","controller","initOverlayWidgets","resolver","listener","ctx","originalDestroy","DEFAULT_RULES","detectPageType","rules","url","loc","effectiveRules","pathname","rule","pattern","extractSkuFromUrl","segmentMatch","suffixMatch","autoDetectPageContext","pageType","sku"],"mappings":"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"}
1
+ {"version":3,"file":"common.cjs","sources":["../src/common/analytics.ts","../src/common/theme-utils.ts","../src/common/customization-factories.ts","../src/common/preflight.ts","../src/common/client.ts","../src/common/page-detect.ts"],"sourcesContent":["import { normalizeMiddlewareUrl } from './api-paths.js';\nimport type { AnalyticsAuthMode } from './config-schema.js';\n\nexport interface AnalyticsEnvelope {\n event_name: string;\n event_version: '1';\n timestamp_ms: number;\n account_id: string;\n session_id: string;\n correlation_id: string;\n view_id?: string;\n user_id?: string;\n widget?: 'chat' | 'qna' | 'simrel';\n page_type?: string;\n sku?: string;\n payload: Record<string, unknown>;\n}\n\nexport interface AnalyticsAuthConfig {\n mode?: AnalyticsAuthMode;\n key?: string;\n headerName?: string;\n bodyField?: string;\n}\n\nexport interface AnalyticsClientConfig {\n enabled?: boolean;\n middlewareUrl: string;\n endpoint?: string;\n auth?: AnalyticsAuthConfig;\n fireAndForget?: boolean;\n useBeacon?: boolean;\n keepaliveFetch?: boolean;\n timeoutMs?: number;\n maxRetries?: number;\n batchSize?: number;\n flushIntervalMs?: number;\n}\n\nexport type AnalyticsInput = Omit<AnalyticsEnvelope, 'event_version' | 'timestamp_ms'> &\n Partial<Pick<AnalyticsEnvelope, 'event_version' | 'timestamp_ms'>>;\n\ninterface AnalyticsTransportBody {\n events: AnalyticsEnvelope[];\n [extra: string]: unknown;\n}\n\nconst DEFAULT_ANALYTICS_CONFIG: Required<Omit<AnalyticsClientConfig, 'auth' | 'middlewareUrl'>> = {\n enabled: true,\n endpoint: '/analytics',\n fireAndForget: true,\n useBeacon: true,\n keepaliveFetch: true,\n timeoutMs: 4000,\n maxRetries: 0,\n batchSize: 10,\n flushIntervalMs: 250,\n};\n\nconst DEFAULT_AUTH: Required<AnalyticsAuthConfig> = {\n mode: 'none',\n key: '',\n headerName: 'X-API-Key',\n bodyField: 'api_key',\n};\n\n/**\n * Fire-and-forget analytics client.\n *\n * All transport errors are silently suppressed — the backend analytics\n * endpoint is not yet implemented, so callers must never observe failures.\n */\nexport class AnalyticsClient {\n private readonly config: Required<Omit<AnalyticsClientConfig, 'auth'>> & { auth: Required<AnalyticsAuthConfig> };\n private readonly queue: AnalyticsEnvelope[] = [];\n private flushTimer: ReturnType<typeof setTimeout> | null = null;\n private readonly onPageHideBound: () => void;\n\n constructor(config: AnalyticsClientConfig) {\n this.config = {\n ...DEFAULT_ANALYTICS_CONFIG,\n ...config,\n auth: {\n ...DEFAULT_AUTH,\n ...(config.auth ?? {}),\n },\n };\n\n this.onPageHideBound = () => {\n if (this.queue.length === 0) return;\n this.flushAllSync();\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('pagehide', this.onPageHideBound);\n }\n }\n\n track(input: AnalyticsInput): void {\n if (!this.config.enabled) return;\n const envelope = normalizeAnalyticsInput(input);\n this.queue.push(envelope);\n\n if (this.queue.length >= this.config.batchSize) {\n this.scheduleImmediateFlush();\n return;\n }\n\n this.scheduleFlush();\n }\n\n flush(): void {\n if (!this.config.enabled || this.queue.length === 0) return;\n\n const batch = this.queue.splice(0, this.config.batchSize);\n const body = this.buildTransportBody(batch);\n const endpoint = resolveAnalyticsEndpoint(this.config.endpoint, this.config.middlewareUrl);\n\n this.send(endpoint, body);\n }\n\n /** Drain the entire queue synchronously (used on page hide). */\n flushAll(): void {\n while (this.queue.length > 0) {\n this.flush();\n }\n }\n\n destroy(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n if (this.queue.length > 0) {\n this.flushAllSync();\n }\n if (typeof window !== 'undefined') {\n window.removeEventListener('pagehide', this.onPageHideBound);\n }\n }\n\n private scheduleFlush(): void {\n if (this.flushTimer) return;\n this.flushTimer = setTimeout(() => {\n this.flushTimer = null;\n this.flush();\n }, this.config.flushIntervalMs);\n }\n\n private scheduleImmediateFlush(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n this.flush();\n }\n\n private buildTransportBody(events: AnalyticsEnvelope[]): AnalyticsTransportBody {\n const body: AnalyticsTransportBody = { events };\n if (this.config.auth.mode === 'body-api-key' && this.config.auth.key) {\n body[this.config.auth.bodyField] = this.config.auth.key;\n }\n return body;\n }\n\n /** Best-effort send — all errors silently suppressed. */\n private send(endpoint: string, body: AnalyticsTransportBody): void {\n try {\n const payload = JSON.stringify(body);\n\n // Prefer sendBeacon (works during page unload, no response needed)\n if (\n this.config.useBeacon &&\n this.config.auth.mode !== 'x-api-key-header' &&\n this.config.auth.mode !== 'bearer-header' &&\n hasSendBeacon()\n ) {\n const blob = new Blob([payload], { type: 'application/json' });\n navigator.sendBeacon(endpoint, blob);\n return;\n }\n\n if (typeof fetch === 'undefined') return;\n\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.auth.mode === 'x-api-key-header' && this.config.auth.key) {\n headers[this.config.auth.headerName] = this.config.auth.key;\n }\n if (this.config.auth.mode === 'bearer-header' && this.config.auth.key) {\n headers.Authorization = `Bearer ${this.config.auth.key}`;\n }\n\n // Fire-and-forget: no await, no error handling, keepalive for page unload\n void fetch(endpoint, {\n method: 'POST',\n headers,\n body: payload,\n keepalive: true,\n }).catch(() => {\n // Silently suppress — backend not implemented yet\n });\n } catch {\n // Silently suppress all errors\n }\n }\n\n /** Synchronous flush using sendBeacon only (for page unload). */\n private flushAllSync(): void {\n if (!this.config.enabled) return;\n const endpoint = resolveAnalyticsEndpoint(this.config.endpoint, this.config.middlewareUrl);\n while (this.queue.length > 0) {\n const batch = this.queue.splice(0, this.config.batchSize);\n const body = this.buildTransportBody(batch);\n try {\n const payload = JSON.stringify(body);\n if (hasSendBeacon()) {\n const blob = new Blob([payload], { type: 'application/json' });\n navigator.sendBeacon(endpoint, blob);\n }\n } catch {\n // Silently suppress\n }\n }\n }\n}\n\nexport function createAnalyticsClient(config: AnalyticsClientConfig): AnalyticsClient {\n return new AnalyticsClient(config);\n}\n\nfunction normalizeAnalyticsInput(input: AnalyticsInput): AnalyticsEnvelope {\n const envelope: AnalyticsEnvelope = {\n event_name: input.event_name,\n event_version: input.event_version ?? '1',\n timestamp_ms: input.timestamp_ms ?? Date.now(),\n account_id: input.account_id,\n session_id: input.session_id,\n correlation_id: input.correlation_id,\n payload: input.payload,\n };\n\n if (input.view_id !== undefined) envelope.view_id = input.view_id;\n if (input.user_id !== undefined) envelope.user_id = input.user_id;\n if (input.widget !== undefined) envelope.widget = input.widget;\n if (input.page_type !== undefined) envelope.page_type = input.page_type;\n if (input.sku !== undefined) envelope.sku = input.sku;\n\n return envelope;\n}\n\nfunction resolveAnalyticsEndpoint(endpoint: string, middlewareUrl: string): string {\n if (/^https?:\\/\\//i.test(endpoint)) return endpoint;\n const baseUrl = normalizeMiddlewareUrl(middlewareUrl);\n const normalizedEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;\n return `${baseUrl}${normalizedEndpoint}`;\n}\n\nfunction hasSendBeacon(): boolean {\n return typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function';\n}\n","import type { WidgetTheme } from './types.js';\n\n/**\n * Shared baseline tokens used by account customizations.\n *\n * These values come from historical Gengage host defaults and are\n * intentionally conservative so account themes can override only what differs.\n */\nexport const BASE_WIDGET_THEME: WidgetTheme = {\n /* ── Editorial Commerce Framework ────────────────────────────────────── */\n /* Primary: signature red; never use pure black for text — use on_surface */\n primaryColor: '#b7102a',\n primaryForeground: '#ffffff',\n backgroundColor: '#f8f9fa' /* canvas / background */,\n foregroundColor: '#191c1d' /* on_surface — softened contrast */,\n borderRadius: '0.75rem' /* md roundedness */,\n fontFamily: '\"Plus Jakarta Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: '14px',\n zIndex: '1000',\n\n '--glov-chatbot-width': '420px',\n '--glov-left-spacing': '260px',\n '--chatbot-padding': '16px',\n '--root-wrapper-background-color': '#f8f9fa' /* background token */,\n '--root-wrapper-border-color': '#edeeef' /* surface-container */,\n\n '--gengage-chat-width': '400px',\n '--gengage-chat-shell-radius': '1rem' /* lg roundedness */,\n '--gengage-chat-header-height': '60px',\n '--gengage-chat-conversation-width': '396px',\n '--gengage-chat-panel-min-width': '320px',\n '--gengage-chat-panel-max-width': '860px',\n '--gengage-chat-input-height': '48px',\n '--gengage-qna-pill-radius': '999px' /* roundedness-full */,\n '--gengage-qna-input-radius': '0.75rem' /* md roundedness */,\n '--gengage-simrel-card-radius': '0.75rem' /* md roundedness */,\n};\n\n/**\n * Merge account overrides on top of the shared base theme.\n *\n * Account customization files should call this helper so shared defaults stay\n * centralized under src/common.\n */\nexport function withBaseTheme(overrides: WidgetTheme): WidgetTheme {\n return { ...BASE_WIDGET_THEME, ...overrides };\n}\n","import type { ChatWidgetConfig } from '../chat/types.js';\nimport type { QNAWidgetConfig } from '../qna/types.js';\nimport type { SimRelWidgetConfig } from '../simrel/types.js';\nimport type { AnalyticsClientConfig } from './analytics.js';\nimport type { WidgetTheme } from './types.js';\n\nexport const DEFAULT_CUSTOMIZATION_LOCALE = 'tr';\n\nexport interface AccountIdentityConfig {\n accountId: string;\n middlewareUrl: string;\n locale?: string;\n}\n\nexport interface AccountIdentity {\n ACCOUNT_ID: string;\n MIDDLEWARE_URL: string;\n LOCALE: string;\n}\n\ninterface BaseAccountWidgetConfigInput {\n accountId: string;\n middlewareUrl: string;\n sessionId: string;\n theme?: WidgetTheme;\n}\n\nexport interface FloatingChatConfigInput extends BaseAccountWidgetConfigInput {\n locale?: string;\n}\n\nexport interface PdpQnaConfigInput extends BaseAccountWidgetConfigInput {\n sku: string;\n mountTarget: QNAWidgetConfig['mountTarget'];\n}\n\nexport interface PdpSimRelConfigInput extends BaseAccountWidgetConfigInput {\n sku: string;\n mountTarget: SimRelWidgetConfig['mountTarget'];\n}\n\ntype FloatingChatConfigOverrides = Omit<\n Partial<ChatWidgetConfig>,\n 'accountId' | 'middlewareUrl' | 'session' | 'variant' | 'theme' | 'locale'\n>;\ntype PdpQnaConfigOverrides = Omit<\n Partial<QNAWidgetConfig>,\n 'accountId' | 'middlewareUrl' | 'session' | 'pageContext' | 'mountTarget' | 'theme'\n>;\ntype SimRelAccountConfig = Omit<SimRelWidgetConfig, 'onAddToCart' | 'onProductNavigate'>;\ntype PdpSimRelConfigOverrides = Omit<\n Partial<SimRelAccountConfig>,\n 'accountId' | 'middlewareUrl' | 'session' | 'sku' | 'mountTarget' | 'theme'\n>;\ntype DefaultAnalyticsConfigOverrides = Omit<AnalyticsClientConfig, 'middlewareUrl'>;\n\n/**\n * Shared account identity factory used by all customization folders.\n * Keeps middleware URL + locale defaults centralized in the SDK layer.\n */\nexport function createAccountIdentity(config: AccountIdentityConfig): AccountIdentity {\n return {\n ACCOUNT_ID: config.accountId,\n MIDDLEWARE_URL: config.middlewareUrl,\n LOCALE: config.locale ?? DEFAULT_CUSTOMIZATION_LOCALE,\n };\n}\n\n/**\n * Shared floating-chat baseline used by account customizations.\n * Account files only pass differences via `overrides`.\n */\nexport function createFloatingChatConfig(\n input: FloatingChatConfigInput,\n overrides: FloatingChatConfigOverrides = {},\n): ChatWidgetConfig {\n const config: ChatWidgetConfig = {\n accountId: input.accountId,\n middlewareUrl: input.middlewareUrl,\n session: { sessionId: input.sessionId },\n variant: 'floating',\n locale: input.locale ?? DEFAULT_CUSTOMIZATION_LOCALE,\n ...overrides,\n };\n if (input.theme !== undefined) {\n config.theme = input.theme;\n }\n return config;\n}\n\n/**\n * Shared PDP QNA baseline used by account customizations.\n */\nexport function createPdpQnaConfig(input: PdpQnaConfigInput, overrides: PdpQnaConfigOverrides = {}): QNAWidgetConfig {\n const config: QNAWidgetConfig = {\n accountId: input.accountId,\n middlewareUrl: input.middlewareUrl,\n session: { sessionId: input.sessionId },\n pageContext: { pageType: 'pdp', sku: input.sku },\n mountTarget: input.mountTarget,\n ...overrides,\n };\n if (input.theme !== undefined) {\n config.theme = input.theme;\n }\n return config;\n}\n\n/**\n * Shared PDP SimRel baseline used by account customizations.\n * Host-level commerce callbacks stay in account init wrappers.\n */\nexport function createPdpSimRelConfig(\n input: PdpSimRelConfigInput,\n overrides: PdpSimRelConfigOverrides = {},\n): SimRelAccountConfig {\n const config: SimRelAccountConfig = {\n accountId: input.accountId,\n middlewareUrl: input.middlewareUrl,\n session: { sessionId: input.sessionId },\n sku: input.sku,\n mountTarget: input.mountTarget,\n ...overrides,\n };\n if (input.theme !== undefined) {\n config.theme = input.theme;\n }\n return config;\n}\n\n/**\n * Shared analytics defaults for account customization wrappers.\n */\nexport function createDefaultAnalyticsConfig(\n middlewareUrl: string,\n overrides: DefaultAnalyticsConfigOverrides = {},\n): AnalyticsClientConfig {\n return {\n enabled: true,\n middlewareUrl,\n endpoint: '/analytics',\n fireAndForget: true,\n useBeacon: true,\n ...overrides,\n };\n}\n","import type { AccountRuntimeConfig } from './config-schema.js';\n\nexport interface PreflightWarning {\n code: string;\n message: string;\n severity: 'warn' | 'error';\n}\n\nexport interface PreflightResult {\n ok: boolean;\n warnings: PreflightWarning[];\n}\n\nfunction isValidSelector(selector: string): boolean {\n try {\n document.querySelector(selector);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function preflightDiagnostics(\n config: AccountRuntimeConfig,\n options?: { skipCspCheck?: boolean },\n): PreflightResult {\n const warnings: PreflightWarning[] = [];\n\n const mounts = config.mounts;\n const mountEntries: Array<[string, string | undefined]> = [\n ['qna', mounts.qna],\n ['simrel', mounts.simrel],\n ['chat', mounts.chat],\n ];\n\n for (const [widget, selector] of mountEntries) {\n if (selector === undefined) continue;\n\n if (!isValidSelector(selector)) {\n warnings.push({\n code: 'INVALID_SELECTOR',\n message: `[gengage preflight] ${widget} mount selector is invalid CSS: \"${selector}\"`,\n severity: 'error',\n });\n continue;\n }\n\n if (!document.querySelector(selector)) {\n warnings.push({\n code: 'MOUNT_NOT_FOUND',\n message: `[gengage preflight] ${widget} mount target not found: \"${selector}\" — widget will skip or wait for DOM`,\n severity: 'warn',\n });\n }\n }\n\n const idempotencyKey = config.gtm.idempotencyKey;\n if ((window as unknown as Record<string, unknown>)[idempotencyKey] !== undefined) {\n warnings.push({\n code: 'DUPLICATE_IDEMPOTENCY',\n message: `[gengage preflight] window[\"${idempotencyKey}\"] already exists — widgets may have already initialized`,\n severity: 'warn',\n });\n }\n\n // CSP connect-src probe: detect if the middleware URL is blocked.\n // Uses a synchronous SecurityPolicyViolationEvent listener to catch CSP blocks.\n if (!options?.skipCspCheck) {\n let cspBlocked = false;\n const cspListener = (e: SecurityPolicyViolationEvent) => {\n if (e.blockedURI && config.middlewareUrl.startsWith(e.blockedURI)) {\n cspBlocked = true;\n }\n };\n document.addEventListener('securitypolicyviolation', cspListener);\n try {\n // A HEAD request with mode 'no-cors' is cheap and triggers CSP if connect-src blocks it.\n void fetch(config.middlewareUrl, { method: 'HEAD', mode: 'no-cors' }).catch(() => {\n /* swallow — we only care about CSP violations, not network errors */\n });\n } catch {\n // fetch itself may throw if CSP blocks it synchronously\n cspBlocked = true;\n }\n // Give the browser a tick to fire the violation event synchronously.\n // If it fired, cspBlocked is already true.\n document.removeEventListener('securitypolicyviolation', cspListener);\n if (cspBlocked) {\n warnings.push({\n code: 'CSP_BLOCKED',\n message: `[gengage preflight] middleware URL may be blocked by Content-Security-Policy: \"${config.middlewareUrl}\". Add it to connect-src.`,\n severity: 'warn',\n });\n }\n }\n\n for (const w of warnings) {\n if (w.severity === 'error') {\n console.error(w.message);\n } else {\n console.warn(w.message);\n }\n }\n\n return {\n ok: warnings.every((w) => w.severity !== 'error'),\n warnings,\n };\n}\n","import type { AccountRuntimeConfig } from './config-schema.js';\nimport { safeParseAccountRuntimeConfig } from './config-schema.js';\nimport { initOverlayWidgets } from './overlay.js';\nimport type { OverlayWidgetsController, OverlayWidgetsOptions } from './overlay.js';\nimport { preflightDiagnostics } from './preflight.js';\nimport type { PageContext } from './types.js';\n\nexport interface HostActions {\n onAddToCart?: (info: { sku: string; quantity?: number; cartCode?: string }) => void;\n onProductNavigate?: (url: string, sku: string, sessionId: string | null) => void;\n onScriptCall?: (params: { name: string; payload?: Record<string, unknown> }) => void;\n}\n\nexport interface GengageClientOptions {\n runtimeConfig: AccountRuntimeConfig | unknown;\n contextResolver?: () => Partial<PageContext>;\n hostActions?: HostActions;\n preflight?: boolean;\n}\n\nfunction parseConfig(raw: AccountRuntimeConfig | unknown): AccountRuntimeConfig {\n const result = safeParseAccountRuntimeConfig(raw);\n if (!result.success) {\n const messages = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');\n throw new Error(`[gengage] Invalid runtime config: ${messages}`);\n }\n return result.data;\n}\n\nfunction mapConfigToOverlayOptions(\n config: AccountRuntimeConfig,\n hostActions?: HostActions,\n initialContext?: Partial<PageContext>,\n): OverlayWidgetsOptions {\n const options: OverlayWidgetsOptions = {\n accountId: config.accountId,\n middlewareUrl: config.middlewareUrl,\n idempotencyKey: config.gtm.idempotencyKey,\n };\n\n if (config.locale !== undefined) options.locale = config.locale;\n\n if (initialContext !== undefined) {\n options.pageContext = initialContext;\n if (initialContext.sku !== undefined) options.sku = initialContext.sku;\n }\n\n options.chat = {\n enabled: config.widgets.chat.enabled,\n };\n if (config.mounts.chat !== undefined) {\n options.chat.mountTarget = config.mounts.chat;\n }\n\n options.qna = {\n enabled: config.widgets.qna.enabled,\n };\n if (config.mounts.qna !== undefined) {\n options.qna.mountTarget = config.mounts.qna;\n }\n\n options.simrel = {\n enabled: config.widgets.simrel.enabled,\n };\n if (config.mounts.simrel !== undefined) {\n options.simrel.mountTarget = config.mounts.simrel;\n }\n\n if (hostActions?.onAddToCart !== undefined) {\n options.onAddToCart = hostActions.onAddToCart;\n }\n\n if (hostActions?.onProductNavigate !== undefined) {\n options.onProductNavigate = hostActions.onProductNavigate;\n }\n\n if (hostActions?.onScriptCall !== undefined) {\n options.onScriptCall = hostActions.onScriptCall;\n }\n\n return options;\n}\n\nexport async function initGengageClient(options: GengageClientOptions): Promise<OverlayWidgetsController> {\n const config = parseConfig(options.runtimeConfig);\n\n if (options.preflight !== false) {\n const result = preflightDiagnostics(config);\n if (!result.ok) {\n const errors = result.warnings.filter((w) => w.severity === 'error');\n throw new Error(`[gengage] Preflight failed: ${errors.map((e) => e.message).join('; ')}`);\n }\n }\n\n const initialContext = options.contextResolver?.();\n\n const overlayOptions = mapConfigToOverlayOptions(config, options.hostActions, initialContext);\n const controller = await initOverlayWidgets(overlayOptions);\n\n if (options.contextResolver !== undefined) {\n const resolver = options.contextResolver;\n const listener = () => {\n const ctx = resolver();\n void controller.updateContext(ctx);\n };\n window.addEventListener('gengage:context:update', listener);\n\n // Wrap destroy to remove the listener and prevent a memory leak.\n const originalDestroy = controller.destroy.bind(controller);\n controller.destroy = () => {\n window.removeEventListener('gengage:context:update', listener);\n originalDestroy();\n };\n }\n\n return controller;\n}\n","/**\n * URL-based page type detection.\n *\n * Provides auto-detection of page type from URL patterns and DOM signals.\n * Falls back to 'other' when no rule matches.\n */\n\nimport type { PageContext } from './types.js';\n\nexport type DetectablePageType = PageContext['pageType'];\n\nexport interface PageDetectionRule {\n /** Page type to assign when this rule matches. */\n pageType: DetectablePageType;\n /** URL pathname patterns (tested with `new RegExp(pattern)`). */\n urlPatterns?: string[];\n /** If present, page type is detected only when this query param exists. */\n queryParam?: string;\n /** DOM selector — if an element matching this exists, rule matches. */\n selector?: string;\n}\n\n/** Default rules covering common Turkish e-commerce URL patterns. */\nconst DEFAULT_RULES: PageDetectionRule[] = [\n {\n pageType: 'home',\n urlPatterns: ['^/$', '^/index\\\\.html?$', '^/anasayfa$'],\n },\n {\n pageType: 'search',\n urlPatterns: ['/arama', '/search', '/ara\\\\?'],\n queryParam: 'q',\n },\n {\n pageType: 'cart',\n urlPatterns: ['/sepet', '/cart', '/basket', '/sepetim'],\n },\n {\n pageType: 'plp',\n urlPatterns: ['/kategori/', '/category/', '/c/', '/koleksiyon/', '/collection/'],\n },\n {\n pageType: 'pdp',\n urlPatterns: ['/urun/', '/product/', '/p/', '/-p-', '/-pm-'],\n },\n];\n\n/**\n * Detects page type from the current URL and optional DOM signals.\n *\n * @param rules - Custom rules (defaults to common Turkish e-commerce patterns).\n * @param url - URL to analyze (defaults to window.location).\n * @returns Detected page type, or 'other' if no rule matches.\n */\nexport function detectPageType(rules?: PageDetectionRule[], url?: URL): DetectablePageType {\n const loc = url ?? (typeof window !== 'undefined' ? new URL(window.location.href) : null);\n if (!loc) return 'other';\n\n const effectiveRules = rules ?? DEFAULT_RULES;\n const pathname = loc.pathname;\n\n for (const rule of effectiveRules) {\n // Check URL patterns\n if (rule.urlPatterns) {\n const urlMatch = rule.urlPatterns.some((pattern) => {\n try {\n return new RegExp(pattern, 'i').test(pathname);\n } catch {\n return false;\n }\n });\n if (!urlMatch) continue;\n }\n\n // Check query param requirement\n if (rule.queryParam && !loc.searchParams.has(rule.queryParam)) {\n continue;\n }\n\n // Check DOM selector\n if (rule.selector && typeof document !== 'undefined') {\n if (!document.querySelector(rule.selector)) continue;\n }\n\n return rule.pageType;\n }\n\n return 'other';\n}\n\n/**\n * Attempts to extract a product SKU from the URL path.\n * Looks for common patterns like `/p/SKU`, `/urun/SKU`, `/-p-SKU`.\n */\nexport function extractSkuFromUrl(url?: URL): string | undefined {\n const loc = url ?? (typeof window !== 'undefined' ? new URL(window.location.href) : null);\n if (!loc) return undefined;\n\n const pathname = loc.pathname;\n\n // Pattern: /p/SKU or /urun/SKU or /product/SKU\n const segmentMatch = pathname.match(/\\/(?:p|urun|product)\\/([^/?#]+)/i);\n if (segmentMatch?.[1]) return segmentMatch[1];\n\n // Pattern: -p-SKU at end of path (Trendyol style)\n const suffixMatch = pathname.match(/-p-(\\d+)/i);\n if (suffixMatch?.[1]) return suffixMatch[1];\n\n return undefined;\n}\n\n/**\n * Auto-detects page context from URL and DOM signals.\n * Use as a fallback when the host page doesn't set pageContext explicitly.\n */\nexport function autoDetectPageContext(rules?: PageDetectionRule[]): Partial<PageContext> {\n const pageType = detectPageType(rules);\n const result: Partial<PageContext> = { pageType };\n\n if (pageType === 'pdp') {\n const sku = extractSkuFromUrl();\n if (sku) result.sku = sku;\n }\n\n if (typeof window !== 'undefined') {\n result.url = window.location.href;\n }\n\n return result;\n}\n"],"names":["DEFAULT_ANALYTICS_CONFIG","DEFAULT_AUTH","AnalyticsClient","config","input","envelope","normalizeAnalyticsInput","batch","body","endpoint","resolveAnalyticsEndpoint","events","payload","hasSendBeacon","blob","headers","createAnalyticsClient","middlewareUrl","baseUrl","normalizeMiddlewareUrl","normalizedEndpoint","BASE_WIDGET_THEME","withBaseTheme","overrides","DEFAULT_CUSTOMIZATION_LOCALE","createAccountIdentity","createFloatingChatConfig","createPdpQnaConfig","createPdpSimRelConfig","createDefaultAnalyticsConfig","isValidSelector","selector","preflightDiagnostics","options","warnings","mounts","mountEntries","widget","idempotencyKey","cspBlocked","cspListener","e","w","parseConfig","raw","result","safeParseAccountRuntimeConfig","messages","i","mapConfigToOverlayOptions","hostActions","initialContext","initGengageClient","errors","overlayOptions","controller","initOverlayWidgets","resolver","listener","ctx","originalDestroy","DEFAULT_RULES","detectPageType","rules","url","loc","effectiveRules","pathname","rule","pattern","extractSkuFromUrl","segmentMatch","suffixMatch","autoDetectPageContext","pageType","sku"],"mappings":"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"}
package/dist/common.js CHANGED
@@ -1,8 +1,8 @@
1
- import { a0 as h } from "./schemas-Fiaobs4L.js";
2
- import { B as z, a1 as W, a as H, C as G, a2 as j, b as K, R as V, a3 as Q, a4 as J, c as X, a5 as Y, a6 as Z, j as ee, k as te, a7 as ae, a8 as ne, T as oe, m as ie, Q as se, a9 as re, q as ce, p as de, aa as le, ab as ue, r as he, Z as fe, v as ge, ac as me, X as pe, h as ye, l as ve, ad as we, g as Te, U as be, ae as Ee, w as Se, af as ke, $ as Ce, ag as Ie, ah as Ue } from "./schemas-Fiaobs4L.js";
3
- import { i as f, s as g } from "./index-BsvmfVa1.js";
4
- import { A as _e, a as xe, U as Pe, b as Le, c as Re, d as qe, e as De, f as Be, g as Oe, h as Fe, j as Ne, p as Me } from "./index-BsvmfVa1.js";
5
- import { V as ze, i as We, r as He } from "./index-D5UPIXIA.js";
1
+ import { a0 as h } from "./schemas-5lXjLjwW.js";
2
+ import { B as z, a1 as W, a as G, C as H, a2 as K, b as j, R as V, a3 as J, a4 as Q, c as X, a5 as Y, a6 as Z, j as ee, k as te, a7 as ae, a8 as ne, a9 as oe, aa as ie, T as se, m as re, Q as ce, ab as de, q as le, p as ue, ac as he, ad as fe, r as ge, Z as me, v as pe, ae as ye, X as ve, h as we, l as Te, af as be, g as Ee, U as Se, ag as ke, w as Ce, ah as Ie, $ as Ue, ai as Ae, aj as _e } from "./schemas-5lXjLjwW.js";
3
+ import { i as f, s as g } from "./index-DJUtLUPL.js";
4
+ import { A as Pe, a as Le, U as Re, b as qe, c as De, d as Be, e as Oe, f as Ne, g as Fe, h as Me, j as $e, p as ze } from "./index-DJUtLUPL.js";
5
+ import { V as Ge, i as He, r as Ke } from "./index-BXXXyQzR.js";
6
6
  import "./qna.js";
7
7
  import "./simrel.js";
8
8
  const m = {
@@ -130,29 +130,31 @@ function l() {
130
130
  return typeof navigator < "u" && typeof navigator.sendBeacon == "function";
131
131
  }
132
132
  const w = {
133
- primaryColor: "#000000",
133
+ /* ── Editorial Commerce Framework ────────────────────────────────────── */
134
+ /* Primary: signature red; never use pure black for text — use on_surface */
135
+ primaryColor: "#b7102a",
134
136
  primaryForeground: "#ffffff",
135
- backgroundColor: "#ffffff",
136
- foregroundColor: "#222222",
137
- borderRadius: "8px",
138
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
137
+ backgroundColor: "#f8f9fa",
138
+ foregroundColor: "#191c1d",
139
+ borderRadius: "0.75rem",
140
+ fontFamily: '"Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
139
141
  fontSize: "14px",
140
142
  zIndex: "1000",
141
143
  "--glov-chatbot-width": "420px",
142
144
  "--glov-left-spacing": "260px",
143
145
  "--chatbot-padding": "16px",
144
- "--root-wrapper-background-color": "#F2F2F2",
145
- "--root-wrapper-border-color": "#E5E5E5",
146
+ "--root-wrapper-background-color": "#f8f9fa",
147
+ "--root-wrapper-border-color": "#edeeef",
146
148
  "--gengage-chat-width": "400px",
147
- "--gengage-chat-shell-radius": "12px",
149
+ "--gengage-chat-shell-radius": "1rem",
148
150
  "--gengage-chat-header-height": "60px",
149
151
  "--gengage-chat-conversation-width": "396px",
150
152
  "--gengage-chat-panel-min-width": "320px",
151
153
  "--gengage-chat-panel-max-width": "860px",
152
154
  "--gengage-chat-input-height": "48px",
153
155
  "--gengage-qna-pill-radius": "999px",
154
- "--gengage-qna-input-radius": "14px",
155
- "--gengage-simrel-card-radius": "14px"
156
+ "--gengage-qna-input-radius": "0.75rem",
157
+ "--gengage-simrel-card-radius": "0.75rem"
156
158
  };
157
159
  function L(e) {
158
160
  return { ...w, ...e };
@@ -289,7 +291,7 @@ function S(e, t, a) {
289
291
  enabled: e.widgets.simrel.enabled
290
292
  }, e.mounts.simrel !== void 0 && (n.simrel.mountTarget = e.mounts.simrel), t?.onAddToCart !== void 0 && (n.onAddToCart = t.onAddToCart), t?.onProductNavigate !== void 0 && (n.onProductNavigate = t.onProductNavigate), t?.onScriptCall !== void 0 && (n.onScriptCall = t.onScriptCall), n;
291
293
  }
292
- async function F(e) {
294
+ async function N(e) {
293
295
  const t = E(e.runtimeConfig);
294
296
  if (e.preflight !== !1) {
295
297
  const o = b(t);
@@ -358,7 +360,7 @@ function I(e) {
358
360
  const i = a.match(/-p-(\d+)/i);
359
361
  if (i?.[1]) return i[1];
360
362
  }
361
- function N(e) {
363
+ function F(e) {
362
364
  const t = C(e), a = { pageType: t };
363
365
  if (t === "pdp") {
364
366
  const n = I();
@@ -367,78 +369,80 @@ function N(e) {
367
369
  return typeof window < "u" && (a.url = window.location.href), a;
368
370
  }
369
371
  export {
370
- _e as AccountRuntimeConfigSchema,
371
- xe as AnalyticsAuthModeSchema,
372
+ Pe as AccountRuntimeConfigSchema,
373
+ Le as AnalyticsAuthModeSchema,
372
374
  y as AnalyticsClient,
373
375
  w as BASE_WIDGET_THEME,
374
376
  z as BaseWidget,
375
377
  u as DEFAULT_CUSTOMIZATION_LOCALE,
376
378
  W as DEFAULT_WIDGET_THEME_TOKENS,
377
- Pe as UnknownActionPolicySchema,
378
- ze as VoiceInput,
379
- H as adaptBackendEvent,
380
- Le as applyNativeSession,
381
- N as autoDetectPageContext,
382
- G as basketAddEvent,
383
- j as bootstrapSession,
384
- K as buildChatEndpointUrl,
385
- Re as buildOverlayIdempotencyKey,
379
+ Re as UnknownActionPolicySchema,
380
+ Ge as VoiceInput,
381
+ G as adaptBackendEvent,
382
+ qe as applyNativeSession,
383
+ F as autoDetectPageContext,
384
+ H as basketAddEvent,
385
+ K as bootstrapSession,
386
+ j as buildChatEndpointUrl,
387
+ De as buildOverlayIdempotencyKey,
386
388
  V as chatHistorySnapshotEvent,
387
- Q as checkoutCompleteEvent,
388
- J as checkoutStartEvent,
389
+ J as checkoutCompleteEvent,
390
+ Q as checkoutStartEvent,
389
391
  X as consumeStream,
390
392
  R as createAccountIdentity,
391
393
  P as createAnalyticsClient,
392
- qe as createDefaultAccountRuntimeConfig,
394
+ Be as createDefaultAccountRuntimeConfig,
393
395
  O as createDefaultAnalyticsConfig,
394
396
  q as createFloatingChatConfig,
395
- De as createNativeWebViewBridge,
397
+ Oe as createNativeWebViewBridge,
396
398
  D as createPdpQnaConfig,
397
399
  B as createPdpSimRelConfig,
398
400
  Y as defaultUnknownUISpecRenderer,
399
- Be as destroyOverlayWidgets,
400
- Oe as detectNativeEnvironment,
401
+ Ne as destroyOverlayWidgets,
402
+ Fe as detectNativeEnvironment,
401
403
  C as detectPageType,
402
404
  Z as dismissGlobalErrorToast,
403
405
  ee as dispatch,
404
406
  I as extractSkuFromUrl,
405
407
  te as getGlobalErrorMessage,
406
- Fe as getOverlayWidgets,
407
- ae as getWindowPageContext,
408
- F as initGengageClient,
409
- Ne as initNativeOverlayWidgets,
408
+ Me as getOverlayWidgets,
409
+ ae as getSuggestedSearchKeywords,
410
+ ne as getSuggestedSearchKeywordsText,
411
+ oe as getWindowPageContext,
412
+ N as initGengageClient,
413
+ $e as initNativeOverlayWidgets,
410
414
  f as initOverlayWidgets,
411
- We as isVoiceInputSupported,
412
- ne as listen,
413
- oe as llmUsageEvent,
414
- ie as mergeUISpecRegistry,
415
- se as meteringIncrementEvent,
416
- re as meteringSummaryEvent,
415
+ He as isVoiceInputSupported,
416
+ ie as listen,
417
+ se as llmUsageEvent,
418
+ re as mergeUISpecRegistry,
419
+ ce as meteringIncrementEvent,
420
+ de as meteringSummaryEvent,
417
421
  h as normalizeMiddlewareUrl,
418
- ce as normalizeProductGroupingsResponse,
419
- de as normalizeSimilarProductsResponse,
420
- Me as parseAccountRuntimeConfig,
422
+ le as normalizeProductGroupingsResponse,
423
+ ue as normalizeSimilarProductsResponse,
424
+ ze as parseAccountRuntimeConfig,
421
425
  b as preflightDiagnostics,
422
- le as productToNormalized,
423
- ue as registerGlobalErrorToastListener,
424
- he as renderUISpecWithRegistry,
425
- fe as resolveSession,
426
- He as routeStreamAction,
426
+ he as productToNormalized,
427
+ fe as registerGlobalErrorToastListener,
428
+ ge as renderUISpecWithRegistry,
429
+ me as resolveSession,
430
+ Ke as routeStreamAction,
427
431
  g as safeParseAccountRuntimeConfig,
428
- ge as sanitizeHtml,
429
- me as showGlobalErrorToast,
430
- pe as streamChunkEvent,
431
- ye as streamDoneEvent,
432
- ve as streamErrorEvent,
433
- we as streamPost,
434
- Te as streamStartEvent,
435
- be as streamUiSpecEvent,
436
- Ee as updatePageContext,
437
- Se as widgetHistorySnapshotEvent,
438
- ke as wireGADataLayer,
439
- Ce as wireQNAToChat,
440
- Ie as wireSimilarToChat,
432
+ pe as sanitizeHtml,
433
+ ye as showGlobalErrorToast,
434
+ ve as streamChunkEvent,
435
+ we as streamDoneEvent,
436
+ Te as streamErrorEvent,
437
+ be as streamPost,
438
+ Ee as streamStartEvent,
439
+ Se as streamUiSpecEvent,
440
+ ke as updatePageContext,
441
+ Ce as widgetHistorySnapshotEvent,
442
+ Ie as wireGADataLayer,
443
+ Ue as wireQNAToChat,
444
+ Ae as wireSimilarToChat,
441
445
  L as withBaseTheme,
442
- Ue as withDefaultWidgetTheme
446
+ _e as withDefaultWidgetTheme
443
447
  };
444
448
  //# sourceMappingURL=common.js.map