@aikaara/chat-sdk 1.5.10 → 1.5.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AikaaraLinkButton-JBlryxQu.mjs → AikaaraLinkButton-BZq6kBxa.mjs} +1 -1
- package/dist/{AikaaraLinkButton-D8fSaZEy.cjs → AikaaraLinkButton-Cp7TQbxn.cjs} +1 -1
- package/dist/{AikaaraPaymentLink-CL4O6gbc.mjs → AikaaraPaymentLink-ZYn2r5t-.mjs} +1 -1
- package/dist/AikaaraPaymentLink-mK1C7vwW.cjs +1 -0
- package/dist/{MountTenant-JKJpnHQ4.cjs → MountTenant-DRu2dD2_.cjs} +2 -2
- package/dist/{MountTenant-BK9Zg0Gy.mjs → MountTenant-DkABujlz.mjs} +2 -2
- package/dist/cdn/aikaara-chat.iife.js +1 -1
- package/dist/headless.cjs +1 -1
- package/dist/headless.mjs +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +2 -2
- package/dist/ui.cjs +1 -1
- package/dist/ui.mjs +1 -1
- package/package.json +1 -1
- package/dist/AikaaraPaymentLink-D_SZ081m.cjs +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./MountTenant-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./MountTenant-DRu2dD2_.cjs");class l extends HTMLElement{shadow;payload=null;constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}connectedCallback(){this.render()}setPayload(e){this.payload=e,this.render()}render(){const e=this.payload;this.shadow.innerHTML=`
|
|
2
2
|
<style>
|
|
3
3
|
:host { display: block; margin-top: 8px; }
|
|
4
4
|
button {
|
|
@@ -38,7 +38,7 @@ class w extends HTMLElement {
|
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
if (!e || !r?.keyId) {
|
|
41
|
-
I(n.url, n.name || "Pay"), this.dispatchEvent(
|
|
41
|
+
n.openLinkInNewTab ? window.open(n.url, "_blank", "noopener,noreferrer") : I(n.url, n.name || "Pay"), this.dispatchEvent(
|
|
42
42
|
new CustomEvent("template-action", {
|
|
43
43
|
detail: {
|
|
44
44
|
text: n.name || "link-click",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w="https://checkout.razorpay.com/v1/checkout.js";let m=null;function y(){return window}class k extends HTMLElement{shadow;payloadData=[];message="";paidIdx={};constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}setPayload(t,n){this.payloadData=Array.isArray(t)?t:[],this.message=n??"",this.render()}render(){const t=this.payloadData.filter(e=>!!e&&typeof e=="object"&&e.type==="link"&&typeof e.url=="string"),n=t.map((e,s)=>{const o=e.name||"Open link",r=!!this.paidIdx[s];return`<button class="link${r?" paid":""}" data-i="${s}" type="button"${r?" disabled":""}><span class="lbl">${g(r?"Paid":o)}</span>`+(r?'<svg class="icon" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 8.5 L7 12 L13 5"/></svg>':'<svg class="icon" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M5 11 L11 5 M6 5 H11 V10"/></svg>')+"</button>"}).join("");this.shadow.innerHTML="<style>:host { display:block; margin:6px 0; font-family:inherit; }.bubble { padding:12px 16px; border-radius:14px; background:var(--aikaara-bot-bubble-bg, #d8e5f5); color:var(--aikaara-bot-bubble-text, #1a2845); font-size:14px; line-height:1.55; margin-bottom:10px; }.links { display:flex; flex-direction:column; gap:8px; }.link { display:inline-flex; align-items:center; justify-content:center; gap:8px; padding:11px 22px; border:1.5px solid var(--aikaara-primary, #1849a9); background:var(--aikaara-primary, #1849a9); color:var(--aikaara-primary-contrast, #fff); border-radius:24px; font-size:14px; font-weight:600; cursor:pointer; font-family:inherit; text-decoration:none; transition: filter 120ms; width:150px; align-self:flex-start; }.link:hover:not(:disabled) { filter: brightness(0.94); }.link.paid, .link:disabled { background:#e7f5ec; color:#0e7c3a; border-color:#0e7c3a; cursor:default; }.icon { width:13px; height:13px; }</style>"+(this.message?`<div class="bubble">${this.message}</div>`:"")+`<div class="links">${n}</div>`,this.shadow.querySelectorAll(".link").forEach(e=>{e.addEventListener("click",()=>{if(e.disabled)return;const s=Number(e.dataset.i||0),o=t[s];o&&this.handleClick(s,o)})})}handleClick(t,n){const e=b(n),s=y().__aikaara_descriptor__,o=s?.partnerPayment,r=s?.razorpay;if(e&&o?.paymentLinkUrl){this.openPartnerPaymentLink(t,e,n,o);return}if(!e||!r?.keyId){n.openLinkInNewTab?window.open(n.url,"_blank","noopener,noreferrer"):I(n.url,n.name||"Pay"),this.dispatchEvent(new CustomEvent("template-action",{detail:{text:n.name||"link-click",attributes:{action:{type:"link",url:n.url,orderId:e||n.orderId,openedIn:"modal"}}},bubbles:!0,composed:!0}));return}_(r.preferredBanksUrl,e,r.preferredBanksMethod,r.preferredBanksHeaders).catch(c=>(console.warn("[payment_link] preferred-banks fetch failed; continuing with default UI",c),[])).then(c=>P().then(()=>this.openRazorpay(t,e,r,c))).catch(c=>{console.error("[payment_link] Razorpay launch failed",c)})}openPartnerPaymentLink(t,n,e,s){v(n,s).then(o=>{if(!o){f("Failed to generate payment link, please try again later");return}const r=(o.paymentStatus??"").toLowerCase();if(r==="paid"||r==="success"||r==="completed"){this.paidIdx[t]=!0,this.render(),f("Payment already completed");return}const c=o.vendorPaymentLink;if(!c){f("Failed to generate payment link, please try again later");return}const l=navigator.userAgent.toLowerCase();if(l.includes("iphone")||l.includes("ipad")||l.includes("ipod")){window.location.href=c;return}const d=x(c);if(!d){window.open(c,"_blank"),f("Allow popups for the best payment experience");return}this.dispatchEvent(new CustomEvent("template-action",{detail:{text:e.name||"link-click",attributes:{action:{type:"partner-payment",url:c,orderId:n,openedIn:"popup"}}},bubbles:!0,composed:!0})),C(d,s.checkoutOrigin,{onSuccess:()=>{this.paidIdx[t]=!0,this.render()},onError:p=>{f(p||"Payment failed, please try again")},onClose:()=>{}})}).catch(o=>{console.error("[payment_link] partner payment link fetch failed",o),f("Failed to generate payment link, please try again later")})}openRazorpay(t,n,e,s){const o=y(),r=o.__aikaara_runtime__?.identity??{},c={key:e.keyId,order_id:n,name:e.name||o.__aikaara_descriptor__?.title||"Payment",prefill:{},handler:()=>{this.paidIdx[t]=!0,this.render()},modal:{ondismiss:()=>{}}};typeof r.mobile=="string"?c.prefill.contact=r.mobile:typeof r.phone=="string"&&(c.prefill.contact=r.phone),typeof r.email=="string"&&(c.prefill.email=r.email),typeof r.name=="string"?c.prefill.name=r.name:typeof r.userName=="string"&&(c.prefill.name=r.userName),Array.isArray(s)&&s.length&&(c.config={display:{blocks:{utib:{name:"Pay Using Preferred Netbanking",instruments:[{method:"netbanking",banks:s}]}},sequence:["block.utib","netbanking","card","upi"],preferences:{show_default_blocks:!0}}});const l=o.Razorpay;if(typeof l!="function")throw new Error("Razorpay Checkout script not available");const i=new l(c);i.on("payment.failed",d=>{console.warn("[payment_link] payment.failed",d?.error)}),i.open()}}function g(a){return String(a??"").replace(/[&<>]/g,t=>t==="&"?"&":t==="<"?"<":">")}function b(a){if(typeof a.orderId=="string"&&a.orderId)return a.orderId;try{const t=new URL(a.url,window.location.origin),n=t.searchParams.get("orderId")||t.searchParams.get("order_id");if(n)return n;if(t.hash&&t.hash.length>1){const e=new URLSearchParams(t.hash.replace(/^#/,"")),s=e.get("orderId")||e.get("order_id");if(s)return s}}catch{}return null}function P(){return typeof y().Razorpay=="function"?Promise.resolve():m||(m=new Promise((a,t)=>{const n=document.querySelector('script[data-aikaara-razorpay="1"]');if(n){n.addEventListener("load",()=>a()),n.addEventListener("error",()=>t(new Error("checkout.js failed to load")));return}const e=document.createElement("script");e.src=w,e.async=!0,e.dataset.aikaaraRazorpay="1",e.onload=()=>a(),e.onerror=()=>{m=null,t(new Error("checkout.js failed to load"))},document.head.appendChild(e)}),m)}function _(a,t,n,e){if(!a)return Promise.resolve([]);const s=String(n||"GET").toUpperCase()==="POST"?"POST":"GET",o=a.includes("{orderId}")?a.replace("{orderId}",encodeURIComponent(t)):a+(a.includes("?")?"&":"?")+"orderId="+encodeURIComponent(t),r=y().__aikaara_runtime__??{};return(typeof r.getSessionToken=="function"?r.getSessionToken():typeof r.getChatJwt=="function"?r.getChatJwt():Promise.resolve(null)).then(l=>{const i={Accept:"application/json",...e??{}};l&&(i.Authorization=`Bearer ${l}`);const d={method:s,headers:i,credentials:"omit"};return s==="POST"&&(i["Content-Type"]="application/json",d.body=JSON.stringify({orderId:t})),fetch(o,d)}).then(l=>{if(!l.ok)throw new Error(`preferred-banks ${l.status}`);return l.json()}).then(l=>{const i=l,d=i?.data&&typeof i.data=="object"&&!Array.isArray(i.data)?i.data:null;return(Array.isArray(l)?l:Array.isArray(i?.banks)?i.banks:Array.isArray(i?.data)?i.data:Array.isArray(d?.preferredPaymentBank)?d.preferredPaymentBank:Array.isArray(d?.banks)?d.banks:[]).map(u=>{if(typeof u=="string")return u;if(u&&typeof u=="object"){const h=u;return h.code||h.bankCode||h.bank_code||null}return null}).filter(u=>!!u)})}async function v(a,t){const n=String(t.method||"GET").toUpperCase()==="POST"?"POST":"GET",e=t.paymentLinkUrl,s=e.includes("{orderId}")?e.replace("{orderId}",encodeURIComponent(a)):e+(e.includes("?")?"&":"?")+"orderId="+encodeURIComponent(a),o=y().__aikaara_runtime__??{},r=typeof o.getSessionToken=="function"?await o.getSessionToken():typeof o.getChatJwt=="function"?await o.getChatJwt():null,c={Accept:"application/json",...t.headers??{}};r&&(c.Authorization=`Bearer ${r}`);const l={method:n,headers:c,credentials:"omit"};n==="POST"&&(c["Content-Type"]="application/json",l.body=JSON.stringify({orderId:a}));const i=await fetch(s,l);if(!i.ok)throw new Error(`partner-payment-link ${i.status}`);const p=(await i.json())?.data;return!p||typeof p.vendorPaymentLink!="string"?null:{vendorPaymentLink:p.vendorPaymentLink,paymentStatus:p.paymentStatus??""}}function x(a){const e=window.screenX+Math.round((window.outerWidth-520)/2),s=window.screenY+Math.round((window.outerHeight-680)/2);return window.open(a,"taxbuddy_payment",`width=520,height=680,left=${e},top=${s},scrollbars=yes,resizable=yes`)}function C(a,t,n){let e=!1;function s(){clearInterval(c),window.removeEventListener("message",r)}function o(l){e||(e=!0,s(),l())}function r(l){if(t&&l.origin!==t)return;const i=l.data;if(!(!i||typeof i!="object")){if(i.type==="payment-completed"&&i.success===!0){o(()=>n.onSuccess());return}i.type==="payment-error"&&i.success===!1&&o(()=>n.onError(i.error??"Payment failed"))}}const c=setInterval(()=>{a.closed&&o(()=>n.onClose())},500);window.addEventListener("message",r)}function f(a){try{const t=document.querySelector("aikaara-error-banner");if(t&&typeof t.show=="function"){t.show(a);return}}catch{}console.warn("[payment_link]",a)}function I(a,t){if(!a)return;let n=document.querySelector("aikaara-link-modal");n||(n=document.createElement("aikaara-link-modal"),document.body.appendChild(n)),typeof n.show=="function"?n.show(a,t):window.open(a,"_blank","noopener,noreferrer")}function S(){typeof customElements>"u"||customElements.get("aikaara-template-payment-link")||customElements.define("aikaara-template-payment-link",k)}exports.AikaaraPaymentLink=k;exports.registerAikaaraPaymentLink=S;
|
|
@@ -743,7 +743,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
743
743
|
<span class="message"></span>
|
|
744
744
|
<button class="dismiss">Dismiss</button>
|
|
745
745
|
</div>
|
|
746
|
-
`,this.container=this.shadow.querySelector(".banner"),this.shadow.querySelector(".dismiss")?.addEventListener("click",()=>this.hide())}show(e,t){const r=this.container.querySelector(".message");r&&(r.textContent=e),this.container.classList.add("visible"),this.dismissTimer&&clearTimeout(this.dismissTimer),t&&(this.dismissTimer=setTimeout(()=>this.hide(),t))}hide(){this.container.classList.remove("visible"),this.dismissTimer&&(clearTimeout(this.dismissTimer),this.dismissTimer=null)}}const un=new Map;function lc(o){const e=un.get(o);if(e)return e;const t=new Promise((r,i)=>{const n=document.querySelector(`script[data-aikaara-src="${CSS.escape(o)}"]`);if(n){n.dataset.aikaaraReady==="1"?r():(n.addEventListener("load",()=>r(),{once:!0}),n.addEventListener("error",()=>i(new Error(`Failed to load ${o}`)),{once:!0}));return}const s=document.createElement("script");s.src=o,s.async=!0,s.crossOrigin="anonymous",s.dataset.aikaaraSrc=o,s.addEventListener("load",()=>{s.dataset.aikaaraReady="1",r()},{once:!0}),s.addEventListener("error",()=>{un.delete(o),i(new Error(`Failed to load ${o}`))},{once:!0}),document.head.appendChild(s)});return un.set(o,t),t}function cf(o,e=5e3){return new Promise((t,r)=>{const i=setTimeout(()=>r(new Error(`Custom element <${o}> not registered within ${e}ms`)),e);customElements.whenDefined(o).then(()=>{clearTimeout(i),t()})})}const uf={"aikaara-template-payment-link":()=>Promise.resolve().then(()=>require("./AikaaraPaymentLink-
|
|
746
|
+
`,this.container=this.shadow.querySelector(".banner"),this.shadow.querySelector(".dismiss")?.addEventListener("click",()=>this.hide())}show(e,t){const r=this.container.querySelector(".message");r&&(r.textContent=e),this.container.classList.add("visible"),this.dismissTimer&&clearTimeout(this.dismissTimer),t&&(this.dismissTimer=setTimeout(()=>this.hide(),t))}hide(){this.container.classList.remove("visible"),this.dismissTimer&&(clearTimeout(this.dismissTimer),this.dismissTimer=null)}}const un=new Map;function lc(o){const e=un.get(o);if(e)return e;const t=new Promise((r,i)=>{const n=document.querySelector(`script[data-aikaara-src="${CSS.escape(o)}"]`);if(n){n.dataset.aikaaraReady==="1"?r():(n.addEventListener("load",()=>r(),{once:!0}),n.addEventListener("error",()=>i(new Error(`Failed to load ${o}`)),{once:!0}));return}const s=document.createElement("script");s.src=o,s.async=!0,s.crossOrigin="anonymous",s.dataset.aikaaraSrc=o,s.addEventListener("load",()=>{s.dataset.aikaaraReady="1",r()},{once:!0}),s.addEventListener("error",()=>{un.delete(o),i(new Error(`Failed to load ${o}`))},{once:!0}),document.head.appendChild(s)});return un.set(o,t),t}function cf(o,e=5e3){return new Promise((t,r)=>{const i=setTimeout(()=>r(new Error(`Custom element <${o}> not registered within ${e}ms`)),e);customElements.whenDefined(o).then(()=>{clearTimeout(i),t()})})}const uf={"aikaara-template-payment-link":()=>Promise.resolve().then(()=>require("./AikaaraPaymentLink-mK1C7vwW.cjs")).then(({registerAikaaraPaymentLink:o})=>o())};function df(o){const e=`template:${o}`,t=window.__aikaara_descriptor__?.components?.[e];return t&&t.kind==="iife-element"?{render:t.tag,scriptUrl:t.scriptUrl,props:t.props}:window.__aikaara_descriptor__?.templates?.[o]}class cc extends HTMLElement{shadow;payloadData=null;innerMessage="";renderGen=0;_consumedValues=null;static get observedAttributes(){return["content-type","template-id","message-id"]}constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}connectedCallback(){this.render(),this.addEventListener("template-action",e=>{const t=e.detail,r=this.getAttribute("message-id");if(r&&t?.attributes?.action){const i=pf(t.attributes.action);if(Object.keys(i).length>0)try{localStorage.setItem(`aikaara_form:${r}`,JSON.stringify(i))}catch{}}this.dataset.consumed="true",this._applyConsumedToChildren()})}attributeChangedCallback(){this.render()}setPayload(e,t){this.payloadData=e,t!==void 0&&(this.innerMessage=t),this.render()}setConsumedValues(e){this._consumedValues=e,this._applyConsumedToChildren()}_applyConsumedToChildren(){let e=this._consumedValues;if(!e){const r=this.getAttribute("message-id");if(r)try{const i=localStorage.getItem(`aikaara_form:${r}`);i&&(e=JSON.parse(i))}catch{}}if(e){const r=e;this.querySelectorAll("aikaara-option-list").forEach(i=>{const n=i,s=n.getName?.();s&&r[s]?.length&&n.setPreSelected?.(r[s])})}this.querySelectorAll("aikaara-submit-action, aikaara-modal-action, aikaara-link-button").forEach(r=>{r.style.display="none"});const t=new Set(["aikaara-option-list","aikaara-submit-action","aikaara-modal-action","aikaara-link-button"]);this.querySelectorAll("*").forEach(r=>{if(t.has(r.tagName.toLowerCase()))return;e&&r.setConsumedValues?.(e),r.dataset.consumed="true"})}render(){const e=this.getAttribute("content-type")??"",t=this.getAttribute("template-id")??"";for(this.renderGen+=1,this.shadow.innerHTML=`
|
|
747
747
|
<style>
|
|
748
748
|
:host { display: block; }
|
|
749
749
|
::slotted(*) { display: block; }
|
|
@@ -757,7 +757,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
757
757
|
}
|
|
758
758
|
</style>
|
|
759
759
|
<slot></slot>
|
|
760
|
-
`;this.firstChild;)this.removeChild(this.firstChild);if(!e)return;const r=t?df(t):void 0,i=r?.render??(t?`aikaara-template-${t}`:`aikaara-template-${e}`),n=uf[i];if(n&&!customElements.get(i)?n().then(()=>this.render()).catch(s=>console.warn(`[aikaara-template-renderer] native template ${i} failed to load`,s)):r?.scriptUrl&&!customElements.get(i)&&lc(r.scriptUrl).then(()=>cf(i)).then(()=>this.render()).catch(s=>console.warn(`[aikaara-template-renderer] failed to lazy-load ${r.scriptUrl}`,s)),customElements.get(i)){const s=document.createElement(i);if(r?.props){for(const[a,l]of Object.entries(r.props))if(typeof s[a]=="function")try{s[a](l)}catch(c){console.warn(`[aikaara-template-renderer] props.${a} threw on <${i}>`,c)}}s.setPayload?.(this.payloadData,this.innerMessage),this.appendChild(s),this.dataset.consumed==="true"&&(this._consumedValues&&Object.keys(this._consumedValues).length>0&&s.setConsumedValues?.(this._consumedValues),s.dataset.consumed="true");return}if(Array.isArray(this.payloadData)){const s=this.payloadData;if(s.length>0&&s.every(l=>l&&typeof l=="object"&&!Array.isArray(l)&&!("type"in l)&&!("data"in l)&&typeof l.message=="string")){const l=document.createElement("aikaara-option-list");l.setPayload({name:"quick-reply",type:"button",options:s.map(c=>{const u=typeof c.title=="string"?c.title:"",d=c.message;return{label:u||d,value:d}})}),this.appendChild(l);return}for(const l of s)this.mountField(l)}else if(this.payloadData&&typeof this.payloadData=="object"){const s=this.payloadData;typeof s.message=="string"&&(s.okLabel||s.action||s.ok)&&this.mountModal(s)}this.dataset.consumed==="true"&&this._applyConsumedToChildren()}mountField(e){if(!e||typeof e!="object")return;const t=e.type??e.data?.type;if(t==="link"){this.mountLinkButton(e);return}const r=e.data;if(r){if(t==="text"){const i=document.createElement("aikaara-text-input");i.setPayload(r),this.appendChild(i);return}if(t==="checkbox"||t==="radio"||t==="button"){const i=document.createElement("aikaara-option-list");i.setPayload({name:r.name??"",title:r.title,options:r.options??[],type:t}),this.appendChild(i);return}if(t==="submit"){const i=document.createElement("aikaara-submit-action"),n=this.getAttribute("message-id")??void 0;i.setPayload({name:r.name??"Submit",action:r.action??{message:r.name??"Submit"},messageId:n}),this.appendChild(i);return}t==="modal"&&this.mountModal({message:r.message??"",okLabel:r.okLabel,cancelLabel:r.cancelLabel,action:r.action})}}mountLinkButton(e){const t=this.renderGen;Promise.resolve().then(()=>require("./AikaaraLinkButton-
|
|
760
|
+
`;this.firstChild;)this.removeChild(this.firstChild);if(!e)return;const r=t?df(t):void 0,i=r?.render??(t?`aikaara-template-${t}`:`aikaara-template-${e}`),n=uf[i];if(n&&!customElements.get(i)?n().then(()=>this.render()).catch(s=>console.warn(`[aikaara-template-renderer] native template ${i} failed to load`,s)):r?.scriptUrl&&!customElements.get(i)&&lc(r.scriptUrl).then(()=>cf(i)).then(()=>this.render()).catch(s=>console.warn(`[aikaara-template-renderer] failed to lazy-load ${r.scriptUrl}`,s)),customElements.get(i)){const s=document.createElement(i);if(r?.props){for(const[a,l]of Object.entries(r.props))if(typeof s[a]=="function")try{s[a](l)}catch(c){console.warn(`[aikaara-template-renderer] props.${a} threw on <${i}>`,c)}}s.setPayload?.(this.payloadData,this.innerMessage),this.appendChild(s),this.dataset.consumed==="true"&&(this._consumedValues&&Object.keys(this._consumedValues).length>0&&s.setConsumedValues?.(this._consumedValues),s.dataset.consumed="true");return}if(Array.isArray(this.payloadData)){const s=this.payloadData;if(s.length>0&&s.every(l=>l&&typeof l=="object"&&!Array.isArray(l)&&!("type"in l)&&!("data"in l)&&typeof l.message=="string")){const l=document.createElement("aikaara-option-list");l.setPayload({name:"quick-reply",type:"button",options:s.map(c=>{const u=typeof c.title=="string"?c.title:"",d=c.message;return{label:u||d,value:d}})}),this.appendChild(l);return}for(const l of s)this.mountField(l)}else if(this.payloadData&&typeof this.payloadData=="object"){const s=this.payloadData;typeof s.message=="string"&&(s.okLabel||s.action||s.ok)&&this.mountModal(s)}this.dataset.consumed==="true"&&this._applyConsumedToChildren()}mountField(e){if(!e||typeof e!="object")return;const t=e.type??e.data?.type;if(t==="link"){this.mountLinkButton(e);return}const r=e.data;if(r){if(t==="text"){const i=document.createElement("aikaara-text-input");i.setPayload(r),this.appendChild(i);return}if(t==="checkbox"||t==="radio"||t==="button"){const i=document.createElement("aikaara-option-list");i.setPayload({name:r.name??"",title:r.title,options:r.options??[],type:t}),this.appendChild(i);return}if(t==="submit"){const i=document.createElement("aikaara-submit-action"),n=this.getAttribute("message-id")??void 0;i.setPayload({name:r.name??"Submit",action:r.action??{message:r.name??"Submit"},messageId:n}),this.appendChild(i);return}t==="modal"&&this.mountModal({message:r.message??"",okLabel:r.okLabel,cancelLabel:r.cancelLabel,action:r.action})}}mountLinkButton(e){const t=this.renderGen;Promise.resolve().then(()=>require("./AikaaraLinkButton-Cp7TQbxn.cjs")).then(({registerAikaaraLinkButton:r,AikaaraLinkButton:i})=>{if(t!==this.renderGen)return;r();const n=document.createElement("aikaara-link-button");n.setPayload({name:e.name??"Open",url:e.url??"",openLinkInNewTab:e.openLinkInNewTab,orderId:e.orderId,extra:ff(e),messageId:this.getAttribute("message-id")??void 0}),this.appendChild(n)})}mountModal(e){const t=document.createElement("aikaara-modal-action");t.setPayload(e),this.appendChild(t)}}const hf=new Set(["type","url","name","openLinkInNewTab","orderId"]);function ff(o){const e={};for(const[t,r]of Object.entries(o))hf.has(t)||(e[t]=r);return e}function pf(o){const e=new Set(["message_id","formAction","requestType","serviceType"]),t={};for(const[r,i]of Object.entries(o))e.has(r)||(Array.isArray(i)&&i.every(n=>typeof n=="string")?t[r]=i:typeof i=="string"&&(t[r]=[i]));return t}class uc extends HTMLElement{shadow;static get observedAttributes(){return["text","subtext"]}constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}connectedCallback(){this.render()}attributeChangedCallback(){this.render()}render(){const e=this.getAttribute("text")??this.textContent??"",t=this.getAttribute("subtext")??"";this.shadow.innerHTML=`
|
|
761
761
|
<style>
|
|
762
762
|
:host {
|
|
763
763
|
display: flex;
|
|
@@ -15201,7 +15201,7 @@ function Hh(o, e = 5e3) {
|
|
|
15201
15201
|
});
|
|
15202
15202
|
}
|
|
15203
15203
|
const Wh = {
|
|
15204
|
-
"aikaara-template-payment-link": () => import("./AikaaraPaymentLink-
|
|
15204
|
+
"aikaara-template-payment-link": () => import("./AikaaraPaymentLink-ZYn2r5t-.mjs").then(({ registerAikaaraPaymentLink: o }) => o())
|
|
15205
15205
|
};
|
|
15206
15206
|
function zh(o) {
|
|
15207
15207
|
const e = `template:${o}`, t = window.__aikaara_descriptor__?.components?.[e];
|
|
@@ -15395,7 +15395,7 @@ class Vh extends HTMLElement {
|
|
|
15395
15395
|
*/
|
|
15396
15396
|
mountLinkButton(e) {
|
|
15397
15397
|
const t = this.renderGen;
|
|
15398
|
-
import("./AikaaraLinkButton-
|
|
15398
|
+
import("./AikaaraLinkButton-BZq6kBxa.mjs").then(({ registerAikaaraLinkButton: r, AikaaraLinkButton: i }) => {
|
|
15399
15399
|
if (t !== this.renderGen) return;
|
|
15400
15400
|
r();
|
|
15401
15401
|
const n = document.createElement("aikaara-link-button");
|
|
@@ -1596,7 +1596,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
1596
1596
|
}
|
|
1597
1597
|
.save-btn:hover { filter: brightness(1.07); }
|
|
1598
1598
|
.save-btn:active { filter: brightness(0.95); }
|
|
1599
|
-
`}}function Ct(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Qe(i){return i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function Ro(){const i=[["aikaara-chat-widget",Dl],["aikaara-chat-bubble",Fl],["aikaara-chat-header",$l],["aikaara-message-list",Wl],["aikaara-message-bubble",Kl],["aikaara-chat-input",Yl],["aikaara-typing-indicator",Jl],["aikaara-streaming-message",Ql],["aikaara-error-banner",Xl],["aikaara-template-renderer",Qh],["aikaara-system-pill",tf],["aikaara-option-list",rf],["aikaara-submit-action",nf],["aikaara-modal-action",sf],["aikaara-text-input",af],["aikaara-chat",lf],["aikaara-link-modal",cf],["aikaara-compare-plans",hf],["aikaara-smart-edit-modal",ff],["aikaara-schema-form",gf]];for(const[e,t]of i)customElements.get(e)||customElements.define(e,t)}Ro();function rn(i,e,t=""){if(!e)return t;const r=e.split(".");let s=i;for(const n of r)if(s&&typeof s=="object"&&n in s)s=s[n];else return t;return typeof s=="string"?s:t}function nc(i){try{const e=i.split(".")[1];if(!e)return 0;const t=JSON.parse(atob(e.replace(/-/g,"+").replace(/_/g,"/")));return typeof t.exp=="number"?t.exp*1e3:0}catch{return 0}}async function Jt(i){return typeof i=="function"?await i():i}class ic{constructor(e,t){this.descriptor=e,this.sessionToken=t}cache=null;inflight=null;reset(){this.cache=null,this.inflight=null}prime(e,t={}){if(!e)return;const r=nc(e)||Date.now()+3600*1e3;this.cache={token:e,requestId:t.requestId??this.cache?.requestId??"",fullName:t.fullName??this.cache?.fullName??"",userId:t.userId??this.cache?.userId??"",expiresAt:r}}async get(){const e=this.descriptor.expiryBufferMs??6e4,t=Date.now();return this.cache&&this.cache.expiresAt>t+e?this.cache:this.inflight?this.inflight:(this.inflight=this.fetchOnce().finally(()=>{this.inflight=null}),this.inflight)}async fetchOnce(){const e=await Jt(this.sessionToken),t=this.descriptor.authHeader??"Authorization",r=this.descriptor.authHeaderTemplate??"Bearer {token}",s={accept:"application/json",...this.descriptor.headers??{},[t]:r.replace("{token}",e)},n=this.descriptor.method??"POST",o={method:n,headers:s};n==="POST"&&(s["content-type"]="application/json",o.body=JSON.stringify(this.descriptor.body??{}));const a=await fetch(this.descriptor.endpoint,o);if(!a.ok){const w=await a.text().catch(()=>"");throw new Error(`Session auth failed: ${a.status} ${w.slice(0,200)}`)}const l=await a.json().catch(()=>({})),c=rn(l,this.descriptor.tokenPath??"data.token"),u=this.descriptor.tokenStripPrefix,d=u?c.replace(new RegExp(`^${u}`,"i"),"").trim():c;if(!d)throw new Error("Session auth response missing token");const p=rn(l,this.descriptor.requestIdPath??"data.requestId"),g=this.cache?.requestId||p||"",f=rn(l,this.descriptor.fullNamePath??"data.fullName"),y=rn(l,this.descriptor.userPath??"data.userId"),b=nc(d)||Date.now()+3600*1e3;return this.cache={token:d,requestId:g,fullName:f,userId:y,expiresAt:b},this.cache}}async function oc(i){const e={};for(const t of i.spec){const r=await yf(t,i.providers);if(r!==void 0&&r!=="")e[t.name]=r;else{if(t.required)throw new Error(`[aikaara-chat-sdk] SSO credential "${t.name}" is required but ${t.source}`+(t.key?`[${t.key}]`:"")+" returned no value");t.default!==void 0&&(e[t.name]=t.default)}}return e}async function yf(i,e){const t=i.key??i.name;switch(i.source){case"cookie":return bf(t);case"localStorage":return nn(()=>window.localStorage.getItem(t)??void 0);case"sessionStorage":return nn(()=>window.sessionStorage.getItem(t)??void 0);case"url_param":return nn(()=>new URL(window.location.href).searchParams.get(t)??void 0);case"header_meta":return nn(()=>document.querySelector(`meta[name="${vf(t)}"]`)?.content??void 0);case"callback":{const r=e?.[i.name];if(!r)return;const s=await r();return typeof s=="string"?s:void 0}default:return}}function bf(i){if(typeof document>"u")return;const e=encodeURIComponent(i),t=document.cookie?document.cookie.split("; "):[];for(const r of t){const s=r.indexOf("=");if(s===-1)continue;const n=r.slice(0,s);if(n===i||n===e)try{return decodeURIComponent(r.slice(s+1))}catch{return r.slice(s+1)}}}function nn(i){try{return i()}catch{return}}function vf(i){return i.replace(/["\\]/g,"\\$&")}const wf=1800;class sc{constructor(e){this.opts=e,this.cache=this.loadCache()}cache=null;inflight=null;reset(){this.cache=null,this.inflight=null,this.clearCache()}async get(e=!1){if(!e){const t=this.cache;if(t&&(!t.expiresAt||t.expiresAt>Date.now()))return t}return this.inflight?this.inflight:(this.inflight=this.exchange().finally(()=>{this.inflight=null}),this.inflight)}async exchange(){if(!this.opts.descriptor.collect||this.opts.descriptor.collect.length===0)throw new Error("[aikaara-chat-sdk] SsoExchangeAdapter.exchange() requires descriptor.sso.collect; v2 partner-token flow should be handled by TokenDiscoveryReader instead.");const e=await oc({spec:this.opts.descriptor.collect,providers:this.opts.providers}),t=JSON.stringify({credentials:e}),r={accept:"application/json","content-type":"application/json",...this.opts.descriptor.headers??{}};this.opts.descriptor.apiKey&&(r["X-Api-Key"]=this.opts.descriptor.apiKey);const s=this.opts.descriptor.exchangeEndpoint||this.opts.exchangeUrl;if(!s)throw new Error("[aikaara-chat-sdk] SSO exchange URL not resolved — set descriptor.sso.exchangeEndpoint or pass `exchangeUrl` (mountFromSlug derives it from configBase + slug).");const n=await fetch(s,{method:"POST",headers:r,body:t});if(!n.ok){const d=await n.text().catch(()=>"");throw new Error(`SSO exchange failed: ${n.status} ${d.slice(0,240)}`)}const a=(await n.json().catch(()=>({}))).user??{},l=String(a.ext_uid??a.extUid??""),c=String(a.token??a.user_token??a.userToken??"");if(!l)throw new Error("SSO exchange response missing user.ext_uid");if(!c)throw new Error("SSO exchange response missing user.token");const u={id:a.id,extUid:l,userToken:c,email:typeof a.email=="string"?a.email:void 0,displayName:typeof a.display_name=="string"?a.display_name:typeof a.displayName=="string"?a.displayName:void 0,properties:a.properties&&typeof a.properties=="object"?a.properties:void 0,expiresAt:this.computeExpiry()};return this.cache=u,this.persistCache(u),u}computeExpiry(){const e=this.opts.descriptor.cacheTtlSec??wf;if(!(!this.opts.descriptor.cacheKey||e<=0))return Date.now()+e*1e3}loadCache(){const e=this.opts.descriptor.cacheKey;if(!e)return null;try{const t=window.localStorage.getItem(e);if(!t)return null;const r=JSON.parse(t);return r.expiresAt&&r.expiresAt<Date.now()?(window.localStorage.removeItem(e),null):r}catch{return null}}persistCache(e){const t=this.opts.descriptor.cacheKey;if(t)try{window.localStorage.setItem(t,JSON.stringify(e))}catch{}}clearCache(){const e=this.opts.descriptor.cacheKey;if(e)try{window.localStorage.removeItem(e)}catch{}}}const kf=3e4,_f=2e3,Sf=100;async function ac(i){const{descriptor:e}=i,t=e.tokenSourceConfig??{};switch(e.tokenSource){case"init":{if(!i.initToken)throw new Xe("init","No init token supplied to Aikaara.init({token})");return{token:i.initToken,source:"init"}}case"query":{const r=typeof t.key=="string"&&t.key?t.key:"token",s=xf(r);if(!s)throw new Xe("query",`?${r}= not present`);return{token:s,source:"query"}}case"hash":{const r=typeof t.key=="string"&&t.key?t.key:"token",s=Ef(r);if(!s)throw new Xe("hash",`#${r}= not present`);return{token:s,source:"hash"}}case"postmsg":{const r=typeof t.type=="string"?t.type:"",s=typeof t.key=="string"&&t.key?t.key:"token",n=Pf(typeof t.origins=="string"?t.origins:""),o=typeof t.timeoutMs=="number"&&t.timeoutMs>0?t.timeoutMs:kf;return{token:await Cf({type:r,key:s,origins:n,timeoutMs:o}),source:"postmsg"}}case"cookie":{const r=typeof t.name=="string"&&t.name?t.name:"";if(!r)throw new Xe("cookie","cookie.name not configured");const s=Af(r);if(!s)throw new Xe("cookie",`cookie "${r}" not set`);return{token:s,source:"cookie"}}case"storage":{const r=t.store==="session"?"session":"local",s=typeof t.key=="string"&&t.key?t.key:"",n=typeof t.path=="string"?t.path:"";if(!s)throw new Xe("storage","storage.key not configured");const o=If(r,s,n);if(!o)throw new Xe("storage",`${r}Storage["${s}"] not set`);return{token:o,source:"storage"}}case"global":{const r=typeof t.path=="string"?t.path:"";if(!r)throw new Xe("global","global.path not configured");const s=typeof t.timeoutMs=="number"&&t.timeoutMs>0?t.timeoutMs:_f,n=typeof t.intervalMs=="number"&&t.intervalMs>0?t.intervalMs:Sf,o=await Tf(r,s,n);if(!o)throw new Xe("global",`window.${r} not present`);return{token:o,source:"global"}}default:{const r=e.tokenSource;throw new Xe("unknown",`Unknown tokenSource ${JSON.stringify(r)}`)}}}class lc{constructor(e){this.opts=e}cached=null;get descriptor(){return this.opts.descriptor}async get(){if(this.cached)return this.cached;const e=await ac(this.opts);return this.cached=e,e}async refresh(){return this.opts.descriptor.tokenSource==="init"?this.cached?this.cached:this.get():(this.cached=null,this.get())}}class Xe extends Error{constructor(e,t){super(`[aikaara-chat-sdk] token-discovery (${e}): ${t}`),this.source=e,this.name="TokenDiscoveryError"}}function xf(i){if(!(typeof window>"u"))try{const e=window.location.search.slice(1);for(const t of e.split("&")){const r=t.indexOf("=");if(r!==-1&&decodeURIComponent(t.slice(0,r))===i)return decodeURIComponent(t.slice(r+1))}return}catch{return}}function Ef(i){if(!(typeof window>"u"))try{const e=window.location.hash.replace(/^#/,"");return new URLSearchParams(e).get(i)??void 0}catch{return}}function Af(i){if(typeof document>"u")return;const e=encodeURIComponent(i),t=document.cookie?document.cookie.split("; "):[];for(const r of t){const s=r.indexOf("=");if(s===-1)continue;const n=r.slice(0,s);if(n===i||n===e)try{return decodeURIComponent(r.slice(s+1))}catch{return r.slice(s+1)}}}function If(i,e,t){if(!(typeof window>"u"))try{const s=(i==="session"?window.sessionStorage:window.localStorage).getItem(e);if(s==null)return;if(!t)return s;let n;try{n=JSON.parse(s)}catch{return s}const o=cc(n,t);return typeof o=="string"?o:void 0}catch{return}}async function Tf(i,e,t){if(typeof window>"u")return;const r=Date.now()+e;for(;Date.now()<r;){const s=cc(window,i);if(typeof s=="string"&&s.length>0)return s;if(typeof s=="function")try{const n=s();if(typeof n=="string"&&n.length>0)return n}catch{}await new Promise(n=>setTimeout(n,t))}}function Cf(i){return new Promise((e,t)=>{if(typeof window>"u"){t(new Xe("postmsg","no window"));return}const r=()=>{window.removeEventListener("message",n),clearTimeout(s)},s=setTimeout(()=>{r(),t(new Xe("postmsg",`timeout after ${i.timeoutMs}ms`))},i.timeoutMs),n=o=>{if(i.origins.length>0&&!i.origins.includes(o.origin))return;const a=o.data;if(!a||typeof a!="object")return;const l=a;if(i.type&&l.type!==i.type)return;const c=l[i.key];typeof c=="string"&&c.length>0&&(r(),e(c))};window.addEventListener("message",n)})}function Pf(i){return i?i.split(/[,\s]+/).map(e=>e.trim()).filter(Boolean):[]}function cc(i,e){if(!e)return i;const t=e.split(".").filter(Boolean);let r=i;for(const s of t)if(r&&typeof r=="object"&&s in r)r=r[s];else return;return r}function Of(){const i=typeof crypto<"u"?crypto:null;if(i?.randomUUID)return i.randomUUID();if(i?.getRandomValues){const e=new Uint8Array(16);i.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;const t=[...e].map(r=>r.toString(16).padStart(2,"0")).join("");return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}const Mf="aikaara_chat:requestId";function No(i,e,t){const r=`${Mf}:${i}:${e}`;return t?`${r}:${t}`:r}function uc(i,e,t){try{return localStorage.getItem(No(i,e,t))}catch{return null}}function Lf(i,e,t,r){try{localStorage.setItem(No(i,e,r),t)}catch{}}function Rf(i,e,t){try{localStorage.removeItem(No(i,e,t))}catch{}}async function jo(i,e,t="before-chat"){const r=i.filter(u=>(u.trigger??"before-chat")===t);console.log("[aikaara-chat-sdk] preflight running",r.length,"steps",`(trigger=${t})`);const s={userId:e.userId,projectId:e.projectId,slug:e.slug};if(e.identity)for(const[u,d]of Object.entries(e.identity))typeof d=="string"&&(s[u]=d);typeof e.serviceType=="string"&&(s.serviceType=e.serviceType),typeof e.userType=="string"&&(s.userType=e.userType);const n=u=>u.replace(/\{(\w+)\}/g,(d,p)=>p in s?s[p]:""),o=u=>{if(typeof u=="string")return n(u);if(Array.isArray(u))return u.map(o);if(u&&typeof u=="object"){const d={};for(const[p,g]of Object.entries(u))d[p]=o(g);return d}return u},a=await Jt(e.sessionToken),l={},c=[800,1500,3e3,5e3,8e3];for(let u=0;u<r.length;u++){const d=r[u],p=n(d.url),g=d.method??(d.body?"POST":"GET"),f={accept:"application/json",...d.headers??{}};if((d.authHeader??"session")==="session"){const S=d.authHeaderTemplate??"Bearer {token}";f.authorization=S.replace("{token}",a)}const y={method:g,headers:f};d.body&&(f["content-type"]="application/json",y.body=JSON.stringify(o(d.body)));let b=0,w="",m=0,k=null;for(;;)try{const S=await fetch(p,y);if(S.ok){k=S;break}if(b=S.status,w=await S.text().catch(()=>""),m<c.length&&jf(b,w)){const x=c[m++];console.warn(`[aikaara-chat-sdk] preflight #${u} ${g} ${p} → ${b} (transient). Retry #${m} in ${x}ms.`),await new Promise(E=>setTimeout(E,x));continue}const v=`Preflight #${u} ${g} ${p} → ${b} ${w.slice(0,200)}`;if(d.soft){console.warn("[aikaara-chat-sdk]",v);break}throw new Error(v)}catch(S){if(m<c.length){const v=c[m++];console.warn(`[aikaara-chat-sdk] preflight #${u} threw, retry #${m} in ${v}ms`,S),await new Promise(x=>setTimeout(x,v));continue}if(d.soft){console.warn(`[aikaara-chat-sdk] preflight #${u} soft-failed:`,S);break}throw S}if(k&&d.capture&&d.capture.as)try{const S=await k.clone().text();let v=S;try{v=JSON.parse(S)}catch{}if(d.capture.path)for(const x of d.capture.path.split("."))if(v&&typeof v=="object"&&x in v)v=v[x];else{v=void 0;break}if(typeof v=="string"&&v.length>0){let x=v;d.capture.stripPrefix&&x.startsWith(d.capture.stripPrefix)&&(x=x.slice(d.capture.stripPrefix.length)),l[d.capture.as]=x,s[d.capture.as]=x,console.log(`[aikaara-chat-sdk] preflight #${u} captured ${d.capture.as} (${x.slice(0,24)}…)`)}}catch(S){console.warn(`[aikaara-chat-sdk] preflight #${u} capture failed`,S)}}return{captured:l}}async function Nf(i){const e=i.steps??[];return e.some(r=>r.trigger==="on-method-select")?(await jo(e,{sessionToken:i.sessionToken,userId:i.userId,projectId:i.projectId??"",slug:i.slug??"",identity:i.identity,serviceType:i.serviceType,userType:i.userType},"on-method-select")).captured:{}}function jf(i,e){if(i===503||i===504||i===502)return!0;if(i===401||i===403)return e.trim().length===0;if(i===500){const t=e.toLowerCase();return t.includes("customernew")||t.includes("is null")||t.includes("not yet ready")}return!1}async function dc(i,e){const t=await fetch(i,{method:"GET",headers:{accept:"application/json",...e??{}}});if(!t.ok){const s=await t.text().catch(()=>"");throw new Error(`Widget config fetch failed: ${t.status} ${t.statusText} ${s.slice(0,200)}`)}const r=await t.json();if(r&&typeof r=="object"){if("config"in r)return r.config;if("data"in r)return r.data}return r}function hc(i,e){return i.replace("{projectId}",e).replace("{uuid}",Of().replace(/-/g,""))}function fc(i){const e=i._preload;if(!Array.isArray(e)||e.length===0)return;const t=Array.from(new Set(e.map(r=>r&&typeof r=="object"?r.scriptUrl:null).filter(r=>typeof r=="string"&&r.length>0)));t.length!==0&&Promise.allSettled(t.map(r=>Zl(r)))}async function pc(i){const e={...i.config??(i.configUrl?await dc(i.configUrl,i.configHeaders):{}),...i.overrides??{}};fc(e);const t=e.transport??"tiledesk",r=e.tiledesk;if((t==="tiledesk"||t==="dual")&&!r)throw new Error("mount: descriptor.tiledesk is required for tiledesk/dual transport");const s=r?.projectId??"",n=i.identity.userId,o=i.conversationScope||void 0,a=i.forceNewConversation?null:uc(n,s,o),l=r?.requestIdTemplate??"support-group-{projectId}-{uuid}",c=i.conversationId??a??hc(l,s);(i.conversationId||!a||i.forceNewConversation)&&s&&Lf(n,s,c,o);const u=await i.tokenProvider(),d=i.tokenProvider,p=i.historyTokenProvider??d,g=r?{mqttEndpoint:r.mqttEndpoint,jwtToken:u,userId:n,userName:i.identity.userName,projectId:r.projectId,appId:r.appId,mqttUsername:r.mqttUsername,protocolId:r.protocolId,protocolVersion:r.protocolVersion,keepAliveSec:r.keepAliveSec,connectTimeoutMs:r.connectTimeoutMs,maxReconnectAttempts:r.maxReconnectAttempts,reconnectMaxDelayMs:r.reconnectMaxDelayMs,wildcardSubscribe:r.wildcardSubscribe,enablePresence:r.enablePresence,autoInitiateOnEmpty:r.autoInitiateOnEmpty,chatInitiatedAttributes:r.chatInitiatedAttributes,messageDefaults:{...r.messageDefaults,...i.identity.departmentId?{departmentId:i.identity.departmentId}:r.messageDefaults?.departmentId?{departmentId:r.messageDefaults.departmentId}:{}},fileTemplate:r.fileTemplate,topicTemplates:r.topicTemplates,debug:r.debug,senderFullname:i.identity.senderFullname??i.identity.userName,tokenProvider:d}:void 0,f=i.uploadAdapter??(e.uploadEndpoint?xo({endpoint:e.uploadEndpoint,fieldName:e.uploadFieldName,extraFields:e.uploadExtraFields}):void 0),y=i.historyAdapter??(e.historyApiBase?Rl({apiBase:e.historyApiBase,pageSize:e.historyPageSize??200,pathTemplate:e.historyPathTemplate,extraHeaders:e.historyHeaders,getToken:p}):void 0),b={transport:t,baseUrl:"",userToken:i.userToken??n,conversationId:c,display:e.display??"embed",position:e.position,primaryColor:e.theme?.primary??e.primaryColor,title:e.title,subtitle:e.subtitle,avatarUrl:e.avatarUrl,width:e.width,height:e.height,borderRadius:e.theme?.radius??e.borderRadius,fontFamily:e.theme?.font??e.fontFamily,themeTokens:e.theme,linkHandlers:e.linkHandlers,getLinkBearer:i.getLinkBearer,welcomeMessage:e.welcomeMessage,placeholder:e.placeholder,showTimestamps:e.showTimestamps,persistConversation:e.persistConversation,showHeader:e.showHeader,hideSystemMessages:e.hideSystemMessages,timestampFormat:e.timestampFormat,input:e.input,templateLayout:e.templateLayout,chatActions:e.chatActions,tiledesk:g,tiledeskIdentity:{userId:n,userName:i.identity.userName,departmentId:i.identity.departmentId,senderFullname:i.identity.senderFullname??i.identity.userName},templateActionAttributes:e.templateActionAttributes,uploadAdapter:f,historyAdapter:y,onError:i.onError,onMessage:i.onMessage},w=document.createElement("aikaara-chat-widget");return w.configure(b),b.title&&w.setAttribute("title",b.title),b.primaryColor&&w.setAttribute("primary-color",b.primaryColor),b.display&&w.setAttribute("display",b.display),b.display==="embed"&&(w.style.cssText="display:flex;flex-direction:column;width:100%;height:100%;min-height:0;--aikaara-close-btn-display:none;"),i.container.appendChild(w),{widget:w,requestId:c,config:b,destroy(){w.remove()}}}function Uf(i){if(typeof i!="string")return i;const e=document.querySelector(i);if(!e)throw new Error(`mountFromSlug: container "${i}" not found`);return e}async function mc(i){const e=(i.configBase??"https://api.aikaara.com").replace(/\/$/,""),t=`${e}/api/v1/widget_configs/${encodeURIComponent(i.slug)}`;let r=null;try{r=await dc(t,i.configHeaders)}catch(I){if(!i.fallbackConfig)throw I;console.warn(`[aikaara-chat-sdk] Widget config fetch failed for slug "${i.slug}" — using fallbackConfig.`,I)}const s={...i.fallbackConfig??{},...r??{},...i.overrides??{}};if(fc(s),s.templates&&Object.keys(s.templates).length>0){s.components={...s.components??{}};for(const[I,O]of Object.entries(s.templates)){const C=`template:${I}`;s.components[C]||!O?.scriptUrl||!O?.render||(s.components[C]={kind:"iife-element",scriptUrl:O.scriptUrl,tag:O.render,...O.props?{props:O.props}:{}})}}const n=window;if(n.__aikaara_descriptor__={...n.__aikaara_descriptor__??{},templates:s.templates,components:s.components,razorpay:s.razorpay,title:s.title,cloud:s.cloud??n.__aikaara_descriptor__?.cloud,upload:s.upload??n.__aikaara_descriptor__?.upload,themeSource:s.themeSource??n.__aikaara_descriptor__?.themeSource,api:s.api,auth:s.auth},!s.auth)throw new Error(`mountFromSlug: widget_configs/${i.slug} descriptor must include "auth" block`);let o=null,a=i.user.id,l=i.user.name,c="",u=i.user.token,d=null;const p=await Jt(i.user.token).catch(()=>""),g=typeof p=="string"&&p.length>0;if(!g&&s.sso?.tokenSource){d=new lc({descriptor:{provider:s.sso.provider,flow:s.sso.flow,skipLogin:s.sso.skipLogin,autoRefresh:s.sso.autoRefresh,tokenSource:s.sso.tokenSource,tokenSourceConfig:s.sso.tokenSourceConfig,fallback:s.sso.fallback,map:s.sso.map},initToken:i.user.partnerToken});const I=await d.get();u=async()=>(await d.get()).token,i.user.identity&&!i.user.identity.partnerToken&&(i.user.identity.partnerToken=I.token)}else if(!g&&s.sso&&s.sso.collect&&s.sso.collect.length>0){const I=`${e}/api/v1/projects/by-slug/${encodeURIComponent(i.slug)}/sso_exchange`;o=await new sc({descriptor:s.sso,providers:i.user.credentialProviders,exchangeUrl:I}).get(),a=o.extUid||a,l=l??o.displayName,c=o.userToken}let f="",y="";if(s.preflight&&s.preflight.length){const I=await jo(s.preflight,{sessionToken:u,userId:a,projectId:s.tiledesk?.projectId??"",slug:i.slug,identity:i.user.identity});if(I.captured.sessionToken){f=I.captured.sessionToken;const O=f;u=()=>O}I.captured.userId&&(a=I.captured.userId),I.captured.requestId&&(y=I.captured.requestId)}const b=new ic(s.auth,u);if(f){const I=s.tiledesk?.projectId??"",O=I?uc(a,I):null,C=s.tiledesk?.requestIdTemplate??"support-group-{projectId}-{uuid}",j=O??(I?hc(C,I):"");b.prime(f,{requestId:j,fullName:l})}const w=await b.get();a=a||w.userId;const m=w.fullName||l||a;window.__aikaara_runtime__={getChatJwt:async()=>(await b.get()).token,getSessionToken:()=>Jt(i.user.token),identity:i.user.identity,slug:i.slug,configBase:e};const k=d&&s.sso?.autoRefresh?async()=>{try{return await d.refresh(),b.reset(),(await b.get()).token}catch(I){return console.warn("[aikaara-chat-sdk] partner auto-refresh failed",I),null}}:null,S=s.upload,v=async()=>`Bearer ${S&&"tokenSource"in S&&S.tokenSource==="chat"?(await b.get()).token:await Jt(i.user.token)}`,x=i.hooks?.upload??(S&&S.mode==="presigned-3step"?Ll({...S,authHeader:v}):S&&S.mode==="direct"?xo({endpoint:S.endpoint,fieldName:S.fieldName,extraFields:S.extraFields,headers:async()=>({authorization:await v()})}):void 0),E=await pc({container:Uf(i.container),config:s,userToken:c||void 0,identity:{userId:a,userName:m,departmentId:i.user.departmentId,senderFullname:m},tokenProvider:async()=>(await b.get()).token,historyTokenProvider:async()=>(await b.get()).token,uploadAdapter:x,historyAdapter:i.hooks?.history,conversationId:w.requestId||y||void 0,conversationScope:i.conversationScope,onError:i.hooks?.onError,onMessage:i.hooks?.onMessage,getLinkBearer:async I=>I==="none"?null:I==="chat"?(await b.get()).token:Jt(i.user.token)});return Object.assign(E,{fullName:m,requestId:w.requestId,descriptor:s,async refreshAuth(){b.reset(),await b.get()},async refreshPartnerAuth(){return k?k():null},async runMethodSelectPreflight(I){const O=s.preflight;return!O||!O.length?{}:O.some(j=>j.trigger==="on-method-select")?(await jo(O,{sessionToken:u,userId:a,projectId:s.tiledesk?.projectId??"",slug:i.slug,identity:{...i.user.identity??{},...I?.identity??{}},serviceType:I?.serviceType,userType:I?.userType},"on-method-select")).captured:{}}})}function Bf(i){Ro();const e=document.createElement("aikaara-chat-widget"),t={baseUrl:"base-url",userToken:"user-token",apiKey:"api-key",title:"title",subtitle:"subtitle",theme:"theme",primaryColor:"primary-color",position:"position",width:"width",height:"height",placeholder:"placeholder",welcomeMessage:"welcome-message",avatarUrl:"avatar-url"};for(const[r,s]of Object.entries(t)){const n=i[r];n!=null&&e.setAttribute(s,String(n))}return e.configure(i),document.body.appendChild(e),e}function Df(){const i=document.querySelector("aikaara-chat-widget");i&&i.remove()}const Ff="https://checkout.razorpay.com/v1/checkout.js";let ur=null;function dr(){return window}class gc extends HTMLElement{shadow;payloadData=[];message="";paidIdx={};constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}setPayload(e,t){this.payloadData=Array.isArray(e)?e:[],this.message=t??"",this.render()}render(){const e=this.payloadData.filter(r=>!!r&&typeof r=="object"&&r.type==="link"&&typeof r.url=="string"),t=e.map((r,s)=>{const n=r.name||"Open link",o=!!this.paidIdx[s];return`<button class="link${o?" paid":""}" data-i="${s}" type="button"${o?" disabled":""}><span class="lbl">${$f(o?"Paid":n)}</span>`+(o?'<svg class="icon" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 8.5 L7 12 L13 5"/></svg>':'<svg class="icon" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M5 11 L11 5 M6 5 H11 V10"/></svg>')+"</button>"}).join("");this.shadow.innerHTML="<style>:host { display:block; margin:6px 0; font-family:inherit; }.bubble { padding:12px 16px; border-radius:14px; background:var(--aikaara-bot-bubble-bg, #d8e5f5); color:var(--aikaara-bot-bubble-text, #1a2845); font-size:14px; line-height:1.55; margin-bottom:10px; }.links { display:flex; flex-direction:column; gap:8px; }.link { display:inline-flex; align-items:center; justify-content:center; gap:8px; padding:11px 22px; border:1.5px solid var(--aikaara-primary, #1849a9); background:var(--aikaara-primary, #1849a9); color:var(--aikaara-primary-contrast, #fff); border-radius:24px; font-size:14px; font-weight:600; cursor:pointer; font-family:inherit; text-decoration:none; transition: filter 120ms; width:150px; align-self:flex-start; }.link:hover:not(:disabled) { filter: brightness(0.94); }.link.paid, .link:disabled { background:#e7f5ec; color:#0e7c3a; border-color:#0e7c3a; cursor:default; }.icon { width:13px; height:13px; }</style>"+(this.message?`<div class="bubble">${this.message}</div>`:"")+`<div class="links">${t}</div>`,this.shadow.querySelectorAll(".link").forEach(r=>{r.addEventListener("click",()=>{if(r.disabled)return;const s=Number(r.dataset.i||0),n=e[s];n&&this.handleClick(s,n)})})}handleClick(e,t){const r=qf(t),s=dr().__aikaara_descriptor__,n=s?.partnerPayment,o=s?.razorpay;if(r&&n?.paymentLinkUrl){this.openPartnerPaymentLink(e,r,t,n);return}if(!r||!o?.keyId){Gf(t.url,t.name||"Pay"),this.dispatchEvent(new CustomEvent("template-action",{detail:{text:t.name||"link-click",attributes:{action:{type:"link",url:t.url,orderId:r||t.orderId,openedIn:"modal"}}},bubbles:!0,composed:!0}));return}Wf(o.preferredBanksUrl,r,o.preferredBanksMethod,o.preferredBanksHeaders).catch(a=>(console.warn("[payment_link] preferred-banks fetch failed; continuing with default UI",a),[])).then(a=>Hf().then(()=>this.openRazorpay(e,r,o,a))).catch(a=>{console.error("[payment_link] Razorpay launch failed",a)})}openPartnerPaymentLink(e,t,r,s){zf(t,s).then(n=>{if(!n){Qt("Failed to generate payment link, please try again later");return}const o=(n.paymentStatus??"").toLowerCase();if(o==="paid"||o==="success"||o==="completed"){this.paidIdx[e]=!0,this.render(),Qt("Payment already completed");return}const a=n.vendorPaymentLink;if(!a){Qt("Failed to generate payment link, please try again later");return}const l=navigator.userAgent.toLowerCase();if(l.includes("iphone")||l.includes("ipad")||l.includes("ipod")){window.location.href=a;return}const u=Vf(a);if(!u){window.open(a,"_blank"),Qt("Allow popups for the best payment experience");return}this.dispatchEvent(new CustomEvent("template-action",{detail:{text:r.name||"link-click",attributes:{action:{type:"partner-payment",url:a,orderId:t,openedIn:"popup"}}},bubbles:!0,composed:!0})),Kf(u,s.checkoutOrigin,{onSuccess:()=>{this.paidIdx[e]=!0,this.render()},onError:d=>{Qt(d||"Payment failed, please try again")},onClose:()=>{}})}).catch(n=>{console.error("[payment_link] partner payment link fetch failed",n),Qt("Failed to generate payment link, please try again later")})}openRazorpay(e,t,r,s){const n=dr(),o=n.__aikaara_runtime__?.identity??{},a={key:r.keyId,order_id:t,name:r.name||n.__aikaara_descriptor__?.title||"Payment",prefill:{},handler:()=>{this.paidIdx[e]=!0,this.render()},modal:{ondismiss:()=>{}}};typeof o.mobile=="string"?a.prefill.contact=o.mobile:typeof o.phone=="string"&&(a.prefill.contact=o.phone),typeof o.email=="string"&&(a.prefill.email=o.email),typeof o.name=="string"?a.prefill.name=o.name:typeof o.userName=="string"&&(a.prefill.name=o.userName),Array.isArray(s)&&s.length&&(a.config={display:{blocks:{utib:{name:"Pay Using Preferred Netbanking",instruments:[{method:"netbanking",banks:s}]}},sequence:["block.utib","netbanking","card","upi"],preferences:{show_default_blocks:!0}}});const l=n.Razorpay;if(typeof l!="function")throw new Error("Razorpay Checkout script not available");const c=new l(a);c.on("payment.failed",u=>{console.warn("[payment_link] payment.failed",u?.error)}),c.open()}}function $f(i){return String(i??"").replace(/[&<>]/g,e=>e==="&"?"&":e==="<"?"<":">")}function qf(i){if(typeof i.orderId=="string"&&i.orderId)return i.orderId;try{const e=new URL(i.url,window.location.origin),t=e.searchParams.get("orderId")||e.searchParams.get("order_id");if(t)return t;if(e.hash&&e.hash.length>1){const r=new URLSearchParams(e.hash.replace(/^#/,"")),s=r.get("orderId")||r.get("order_id");if(s)return s}}catch{}return null}function Hf(){return typeof dr().Razorpay=="function"?Promise.resolve():ur||(ur=new Promise((i,e)=>{const t=document.querySelector('script[data-aikaara-razorpay="1"]');if(t){t.addEventListener("load",()=>i()),t.addEventListener("error",()=>e(new Error("checkout.js failed to load")));return}const r=document.createElement("script");r.src=Ff,r.async=!0,r.dataset.aikaaraRazorpay="1",r.onload=()=>i(),r.onerror=()=>{ur=null,e(new Error("checkout.js failed to load"))},document.head.appendChild(r)}),ur)}function Wf(i,e,t,r){if(!i)return Promise.resolve([]);const s=String(t||"GET").toUpperCase()==="POST"?"POST":"GET",n=i.includes("{orderId}")?i.replace("{orderId}",encodeURIComponent(e)):i+(i.includes("?")?"&":"?")+"orderId="+encodeURIComponent(e),o=dr().__aikaara_runtime__??{};return(typeof o.getSessionToken=="function"?o.getSessionToken():typeof o.getChatJwt=="function"?o.getChatJwt():Promise.resolve(null)).then(l=>{const c={Accept:"application/json",...r??{}};l&&(c.Authorization=`Bearer ${l}`);const u={method:s,headers:c,credentials:"omit"};return s==="POST"&&(c["Content-Type"]="application/json",u.body=JSON.stringify({orderId:e})),fetch(n,u)}).then(l=>{if(!l.ok)throw new Error(`preferred-banks ${l.status}`);return l.json()}).then(l=>{const c=l,u=c?.data&&typeof c.data=="object"&&!Array.isArray(c.data)?c.data:null;return(Array.isArray(l)?l:Array.isArray(c?.banks)?c.banks:Array.isArray(c?.data)?c.data:Array.isArray(u?.preferredPaymentBank)?u.preferredPaymentBank:Array.isArray(u?.banks)?u.banks:[]).map(p=>{if(typeof p=="string")return p;if(p&&typeof p=="object"){const g=p;return g.code||g.bankCode||g.bank_code||null}return null}).filter(p=>!!p)})}async function zf(i,e){const t=String(e.method||"GET").toUpperCase()==="POST"?"POST":"GET",r=e.paymentLinkUrl,s=r.includes("{orderId}")?r.replace("{orderId}",encodeURIComponent(i)):r+(r.includes("?")?"&":"?")+"orderId="+encodeURIComponent(i),n=dr().__aikaara_runtime__??{},o=typeof n.getSessionToken=="function"?await n.getSessionToken():typeof n.getChatJwt=="function"?await n.getChatJwt():null,a={Accept:"application/json",...e.headers??{}};o&&(a.Authorization=`Bearer ${o}`);const l={method:t,headers:a,credentials:"omit"};t==="POST"&&(a["Content-Type"]="application/json",l.body=JSON.stringify({orderId:i}));const c=await fetch(s,l);if(!c.ok)throw new Error(`partner-payment-link ${c.status}`);const d=(await c.json())?.data;return!d||typeof d.vendorPaymentLink!="string"?null:{vendorPaymentLink:d.vendorPaymentLink,paymentStatus:d.paymentStatus??""}}function Vf(i){const r=window.screenX+Math.round((window.outerWidth-520)/2),s=window.screenY+Math.round((window.outerHeight-680)/2);return window.open(i,"taxbuddy_payment",`width=520,height=680,left=${r},top=${s},scrollbars=yes,resizable=yes`)}function Kf(i,e,t){let r=!1;function s(){clearInterval(a),window.removeEventListener("message",o)}function n(l){r||(r=!0,s(),l())}function o(l){if(e&&l.origin!==e)return;const c=l.data;if(!(!c||typeof c!="object")){if(c.type==="payment-completed"&&c.success===!0){n(()=>t.onSuccess());return}c.type==="payment-error"&&c.success===!1&&n(()=>t.onError(c.error??"Payment failed"))}}const a=setInterval(()=>{i.closed&&n(()=>t.onClose())},500);window.addEventListener("message",o)}function Qt(i){try{const e=document.querySelector("aikaara-error-banner");if(e&&typeof e.show=="function"){e.show(i);return}}catch{}console.warn("[payment_link]",i)}function Gf(i,e){if(!i)return;let t=document.querySelector("aikaara-link-modal");t||(t=document.createElement("aikaara-link-modal"),document.body.appendChild(t)),typeof t.show=="function"?t.show(i,e):window.open(i,"_blank","noopener,noreferrer")}function Yf(){typeof customElements>"u"||customElements.get("aikaara-template-payment-link")||customElements.define("aikaara-template-payment-link",gc)}const Jf=Object.freeze(Object.defineProperty({__proto__:null,AikaaraPaymentLink:gc,registerAikaaraPaymentLink:Yf},Symbol.toStringTag,{value:"Module"}));class yc extends HTMLElement{shadow;payload=null;constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}connectedCallback(){this.render()}setPayload(e){this.payload=e,this.render()}render(){const e=this.payload;this.shadow.innerHTML=`
|
|
1599
|
+
`}}function Ct(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Qe(i){return i.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function Ro(){const i=[["aikaara-chat-widget",Dl],["aikaara-chat-bubble",Fl],["aikaara-chat-header",$l],["aikaara-message-list",Wl],["aikaara-message-bubble",Kl],["aikaara-chat-input",Yl],["aikaara-typing-indicator",Jl],["aikaara-streaming-message",Ql],["aikaara-error-banner",Xl],["aikaara-template-renderer",Qh],["aikaara-system-pill",tf],["aikaara-option-list",rf],["aikaara-submit-action",nf],["aikaara-modal-action",sf],["aikaara-text-input",af],["aikaara-chat",lf],["aikaara-link-modal",cf],["aikaara-compare-plans",hf],["aikaara-smart-edit-modal",ff],["aikaara-schema-form",gf]];for(const[e,t]of i)customElements.get(e)||customElements.define(e,t)}Ro();function rn(i,e,t=""){if(!e)return t;const r=e.split(".");let s=i;for(const n of r)if(s&&typeof s=="object"&&n in s)s=s[n];else return t;return typeof s=="string"?s:t}function nc(i){try{const e=i.split(".")[1];if(!e)return 0;const t=JSON.parse(atob(e.replace(/-/g,"+").replace(/_/g,"/")));return typeof t.exp=="number"?t.exp*1e3:0}catch{return 0}}async function Jt(i){return typeof i=="function"?await i():i}class ic{constructor(e,t){this.descriptor=e,this.sessionToken=t}cache=null;inflight=null;reset(){this.cache=null,this.inflight=null}prime(e,t={}){if(!e)return;const r=nc(e)||Date.now()+3600*1e3;this.cache={token:e,requestId:t.requestId??this.cache?.requestId??"",fullName:t.fullName??this.cache?.fullName??"",userId:t.userId??this.cache?.userId??"",expiresAt:r}}async get(){const e=this.descriptor.expiryBufferMs??6e4,t=Date.now();return this.cache&&this.cache.expiresAt>t+e?this.cache:this.inflight?this.inflight:(this.inflight=this.fetchOnce().finally(()=>{this.inflight=null}),this.inflight)}async fetchOnce(){const e=await Jt(this.sessionToken),t=this.descriptor.authHeader??"Authorization",r=this.descriptor.authHeaderTemplate??"Bearer {token}",s={accept:"application/json",...this.descriptor.headers??{},[t]:r.replace("{token}",e)},n=this.descriptor.method??"POST",o={method:n,headers:s};n==="POST"&&(s["content-type"]="application/json",o.body=JSON.stringify(this.descriptor.body??{}));const a=await fetch(this.descriptor.endpoint,o);if(!a.ok){const w=await a.text().catch(()=>"");throw new Error(`Session auth failed: ${a.status} ${w.slice(0,200)}`)}const l=await a.json().catch(()=>({})),c=rn(l,this.descriptor.tokenPath??"data.token"),u=this.descriptor.tokenStripPrefix,d=u?c.replace(new RegExp(`^${u}`,"i"),"").trim():c;if(!d)throw new Error("Session auth response missing token");const p=rn(l,this.descriptor.requestIdPath??"data.requestId"),g=this.cache?.requestId||p||"",f=rn(l,this.descriptor.fullNamePath??"data.fullName"),y=rn(l,this.descriptor.userPath??"data.userId"),b=nc(d)||Date.now()+3600*1e3;return this.cache={token:d,requestId:g,fullName:f,userId:y,expiresAt:b},this.cache}}async function oc(i){const e={};for(const t of i.spec){const r=await yf(t,i.providers);if(r!==void 0&&r!=="")e[t.name]=r;else{if(t.required)throw new Error(`[aikaara-chat-sdk] SSO credential "${t.name}" is required but ${t.source}`+(t.key?`[${t.key}]`:"")+" returned no value");t.default!==void 0&&(e[t.name]=t.default)}}return e}async function yf(i,e){const t=i.key??i.name;switch(i.source){case"cookie":return bf(t);case"localStorage":return nn(()=>window.localStorage.getItem(t)??void 0);case"sessionStorage":return nn(()=>window.sessionStorage.getItem(t)??void 0);case"url_param":return nn(()=>new URL(window.location.href).searchParams.get(t)??void 0);case"header_meta":return nn(()=>document.querySelector(`meta[name="${vf(t)}"]`)?.content??void 0);case"callback":{const r=e?.[i.name];if(!r)return;const s=await r();return typeof s=="string"?s:void 0}default:return}}function bf(i){if(typeof document>"u")return;const e=encodeURIComponent(i),t=document.cookie?document.cookie.split("; "):[];for(const r of t){const s=r.indexOf("=");if(s===-1)continue;const n=r.slice(0,s);if(n===i||n===e)try{return decodeURIComponent(r.slice(s+1))}catch{return r.slice(s+1)}}}function nn(i){try{return i()}catch{return}}function vf(i){return i.replace(/["\\]/g,"\\$&")}const wf=1800;class sc{constructor(e){this.opts=e,this.cache=this.loadCache()}cache=null;inflight=null;reset(){this.cache=null,this.inflight=null,this.clearCache()}async get(e=!1){if(!e){const t=this.cache;if(t&&(!t.expiresAt||t.expiresAt>Date.now()))return t}return this.inflight?this.inflight:(this.inflight=this.exchange().finally(()=>{this.inflight=null}),this.inflight)}async exchange(){if(!this.opts.descriptor.collect||this.opts.descriptor.collect.length===0)throw new Error("[aikaara-chat-sdk] SsoExchangeAdapter.exchange() requires descriptor.sso.collect; v2 partner-token flow should be handled by TokenDiscoveryReader instead.");const e=await oc({spec:this.opts.descriptor.collect,providers:this.opts.providers}),t=JSON.stringify({credentials:e}),r={accept:"application/json","content-type":"application/json",...this.opts.descriptor.headers??{}};this.opts.descriptor.apiKey&&(r["X-Api-Key"]=this.opts.descriptor.apiKey);const s=this.opts.descriptor.exchangeEndpoint||this.opts.exchangeUrl;if(!s)throw new Error("[aikaara-chat-sdk] SSO exchange URL not resolved — set descriptor.sso.exchangeEndpoint or pass `exchangeUrl` (mountFromSlug derives it from configBase + slug).");const n=await fetch(s,{method:"POST",headers:r,body:t});if(!n.ok){const d=await n.text().catch(()=>"");throw new Error(`SSO exchange failed: ${n.status} ${d.slice(0,240)}`)}const a=(await n.json().catch(()=>({}))).user??{},l=String(a.ext_uid??a.extUid??""),c=String(a.token??a.user_token??a.userToken??"");if(!l)throw new Error("SSO exchange response missing user.ext_uid");if(!c)throw new Error("SSO exchange response missing user.token");const u={id:a.id,extUid:l,userToken:c,email:typeof a.email=="string"?a.email:void 0,displayName:typeof a.display_name=="string"?a.display_name:typeof a.displayName=="string"?a.displayName:void 0,properties:a.properties&&typeof a.properties=="object"?a.properties:void 0,expiresAt:this.computeExpiry()};return this.cache=u,this.persistCache(u),u}computeExpiry(){const e=this.opts.descriptor.cacheTtlSec??wf;if(!(!this.opts.descriptor.cacheKey||e<=0))return Date.now()+e*1e3}loadCache(){const e=this.opts.descriptor.cacheKey;if(!e)return null;try{const t=window.localStorage.getItem(e);if(!t)return null;const r=JSON.parse(t);return r.expiresAt&&r.expiresAt<Date.now()?(window.localStorage.removeItem(e),null):r}catch{return null}}persistCache(e){const t=this.opts.descriptor.cacheKey;if(t)try{window.localStorage.setItem(t,JSON.stringify(e))}catch{}}clearCache(){const e=this.opts.descriptor.cacheKey;if(e)try{window.localStorage.removeItem(e)}catch{}}}const kf=3e4,_f=2e3,Sf=100;async function ac(i){const{descriptor:e}=i,t=e.tokenSourceConfig??{};switch(e.tokenSource){case"init":{if(!i.initToken)throw new Xe("init","No init token supplied to Aikaara.init({token})");return{token:i.initToken,source:"init"}}case"query":{const r=typeof t.key=="string"&&t.key?t.key:"token",s=xf(r);if(!s)throw new Xe("query",`?${r}= not present`);return{token:s,source:"query"}}case"hash":{const r=typeof t.key=="string"&&t.key?t.key:"token",s=Ef(r);if(!s)throw new Xe("hash",`#${r}= not present`);return{token:s,source:"hash"}}case"postmsg":{const r=typeof t.type=="string"?t.type:"",s=typeof t.key=="string"&&t.key?t.key:"token",n=Pf(typeof t.origins=="string"?t.origins:""),o=typeof t.timeoutMs=="number"&&t.timeoutMs>0?t.timeoutMs:kf;return{token:await Cf({type:r,key:s,origins:n,timeoutMs:o}),source:"postmsg"}}case"cookie":{const r=typeof t.name=="string"&&t.name?t.name:"";if(!r)throw new Xe("cookie","cookie.name not configured");const s=Af(r);if(!s)throw new Xe("cookie",`cookie "${r}" not set`);return{token:s,source:"cookie"}}case"storage":{const r=t.store==="session"?"session":"local",s=typeof t.key=="string"&&t.key?t.key:"",n=typeof t.path=="string"?t.path:"";if(!s)throw new Xe("storage","storage.key not configured");const o=If(r,s,n);if(!o)throw new Xe("storage",`${r}Storage["${s}"] not set`);return{token:o,source:"storage"}}case"global":{const r=typeof t.path=="string"?t.path:"";if(!r)throw new Xe("global","global.path not configured");const s=typeof t.timeoutMs=="number"&&t.timeoutMs>0?t.timeoutMs:_f,n=typeof t.intervalMs=="number"&&t.intervalMs>0?t.intervalMs:Sf,o=await Tf(r,s,n);if(!o)throw new Xe("global",`window.${r} not present`);return{token:o,source:"global"}}default:{const r=e.tokenSource;throw new Xe("unknown",`Unknown tokenSource ${JSON.stringify(r)}`)}}}class lc{constructor(e){this.opts=e}cached=null;get descriptor(){return this.opts.descriptor}async get(){if(this.cached)return this.cached;const e=await ac(this.opts);return this.cached=e,e}async refresh(){return this.opts.descriptor.tokenSource==="init"?this.cached?this.cached:this.get():(this.cached=null,this.get())}}class Xe extends Error{constructor(e,t){super(`[aikaara-chat-sdk] token-discovery (${e}): ${t}`),this.source=e,this.name="TokenDiscoveryError"}}function xf(i){if(!(typeof window>"u"))try{const e=window.location.search.slice(1);for(const t of e.split("&")){const r=t.indexOf("=");if(r!==-1&&decodeURIComponent(t.slice(0,r))===i)return decodeURIComponent(t.slice(r+1))}return}catch{return}}function Ef(i){if(!(typeof window>"u"))try{const e=window.location.hash.replace(/^#/,"");return new URLSearchParams(e).get(i)??void 0}catch{return}}function Af(i){if(typeof document>"u")return;const e=encodeURIComponent(i),t=document.cookie?document.cookie.split("; "):[];for(const r of t){const s=r.indexOf("=");if(s===-1)continue;const n=r.slice(0,s);if(n===i||n===e)try{return decodeURIComponent(r.slice(s+1))}catch{return r.slice(s+1)}}}function If(i,e,t){if(!(typeof window>"u"))try{const s=(i==="session"?window.sessionStorage:window.localStorage).getItem(e);if(s==null)return;if(!t)return s;let n;try{n=JSON.parse(s)}catch{return s}const o=cc(n,t);return typeof o=="string"?o:void 0}catch{return}}async function Tf(i,e,t){if(typeof window>"u")return;const r=Date.now()+e;for(;Date.now()<r;){const s=cc(window,i);if(typeof s=="string"&&s.length>0)return s;if(typeof s=="function")try{const n=s();if(typeof n=="string"&&n.length>0)return n}catch{}await new Promise(n=>setTimeout(n,t))}}function Cf(i){return new Promise((e,t)=>{if(typeof window>"u"){t(new Xe("postmsg","no window"));return}const r=()=>{window.removeEventListener("message",n),clearTimeout(s)},s=setTimeout(()=>{r(),t(new Xe("postmsg",`timeout after ${i.timeoutMs}ms`))},i.timeoutMs),n=o=>{if(i.origins.length>0&&!i.origins.includes(o.origin))return;const a=o.data;if(!a||typeof a!="object")return;const l=a;if(i.type&&l.type!==i.type)return;const c=l[i.key];typeof c=="string"&&c.length>0&&(r(),e(c))};window.addEventListener("message",n)})}function Pf(i){return i?i.split(/[,\s]+/).map(e=>e.trim()).filter(Boolean):[]}function cc(i,e){if(!e)return i;const t=e.split(".").filter(Boolean);let r=i;for(const s of t)if(r&&typeof r=="object"&&s in r)r=r[s];else return;return r}function Of(){const i=typeof crypto<"u"?crypto:null;if(i?.randomUUID)return i.randomUUID();if(i?.getRandomValues){const e=new Uint8Array(16);i.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;const t=[...e].map(r=>r.toString(16).padStart(2,"0")).join("");return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}const Mf="aikaara_chat:requestId";function No(i,e,t){const r=`${Mf}:${i}:${e}`;return t?`${r}:${t}`:r}function uc(i,e,t){try{return localStorage.getItem(No(i,e,t))}catch{return null}}function Lf(i,e,t,r){try{localStorage.setItem(No(i,e,r),t)}catch{}}function Rf(i,e,t){try{localStorage.removeItem(No(i,e,t))}catch{}}async function jo(i,e,t="before-chat"){const r=i.filter(u=>(u.trigger??"before-chat")===t);console.log("[aikaara-chat-sdk] preflight running",r.length,"steps",`(trigger=${t})`);const s={userId:e.userId,projectId:e.projectId,slug:e.slug};if(e.identity)for(const[u,d]of Object.entries(e.identity))typeof d=="string"&&(s[u]=d);typeof e.serviceType=="string"&&(s.serviceType=e.serviceType),typeof e.userType=="string"&&(s.userType=e.userType);const n=u=>u.replace(/\{(\w+)\}/g,(d,p)=>p in s?s[p]:""),o=u=>{if(typeof u=="string")return n(u);if(Array.isArray(u))return u.map(o);if(u&&typeof u=="object"){const d={};for(const[p,g]of Object.entries(u))d[p]=o(g);return d}return u},a=await Jt(e.sessionToken),l={},c=[800,1500,3e3,5e3,8e3];for(let u=0;u<r.length;u++){const d=r[u],p=n(d.url),g=d.method??(d.body?"POST":"GET"),f={accept:"application/json",...d.headers??{}};if((d.authHeader??"session")==="session"){const S=d.authHeaderTemplate??"Bearer {token}";f.authorization=S.replace("{token}",a)}const y={method:g,headers:f};d.body&&(f["content-type"]="application/json",y.body=JSON.stringify(o(d.body)));let b=0,w="",m=0,k=null;for(;;)try{const S=await fetch(p,y);if(S.ok){k=S;break}if(b=S.status,w=await S.text().catch(()=>""),m<c.length&&jf(b,w)){const x=c[m++];console.warn(`[aikaara-chat-sdk] preflight #${u} ${g} ${p} → ${b} (transient). Retry #${m} in ${x}ms.`),await new Promise(E=>setTimeout(E,x));continue}const v=`Preflight #${u} ${g} ${p} → ${b} ${w.slice(0,200)}`;if(d.soft){console.warn("[aikaara-chat-sdk]",v);break}throw new Error(v)}catch(S){if(m<c.length){const v=c[m++];console.warn(`[aikaara-chat-sdk] preflight #${u} threw, retry #${m} in ${v}ms`,S),await new Promise(x=>setTimeout(x,v));continue}if(d.soft){console.warn(`[aikaara-chat-sdk] preflight #${u} soft-failed:`,S);break}throw S}if(k&&d.capture&&d.capture.as)try{const S=await k.clone().text();let v=S;try{v=JSON.parse(S)}catch{}if(d.capture.path)for(const x of d.capture.path.split("."))if(v&&typeof v=="object"&&x in v)v=v[x];else{v=void 0;break}if(typeof v=="string"&&v.length>0){let x=v;d.capture.stripPrefix&&x.startsWith(d.capture.stripPrefix)&&(x=x.slice(d.capture.stripPrefix.length)),l[d.capture.as]=x,s[d.capture.as]=x,console.log(`[aikaara-chat-sdk] preflight #${u} captured ${d.capture.as} (${x.slice(0,24)}…)`)}}catch(S){console.warn(`[aikaara-chat-sdk] preflight #${u} capture failed`,S)}}return{captured:l}}async function Nf(i){const e=i.steps??[];return e.some(r=>r.trigger==="on-method-select")?(await jo(e,{sessionToken:i.sessionToken,userId:i.userId,projectId:i.projectId??"",slug:i.slug??"",identity:i.identity,serviceType:i.serviceType,userType:i.userType},"on-method-select")).captured:{}}function jf(i,e){if(i===503||i===504||i===502)return!0;if(i===401||i===403)return e.trim().length===0;if(i===500){const t=e.toLowerCase();return t.includes("customernew")||t.includes("is null")||t.includes("not yet ready")}return!1}async function dc(i,e){const t=await fetch(i,{method:"GET",headers:{accept:"application/json",...e??{}}});if(!t.ok){const s=await t.text().catch(()=>"");throw new Error(`Widget config fetch failed: ${t.status} ${t.statusText} ${s.slice(0,200)}`)}const r=await t.json();if(r&&typeof r=="object"){if("config"in r)return r.config;if("data"in r)return r.data}return r}function hc(i,e){return i.replace("{projectId}",e).replace("{uuid}",Of().replace(/-/g,""))}function fc(i){const e=i._preload;if(!Array.isArray(e)||e.length===0)return;const t=Array.from(new Set(e.map(r=>r&&typeof r=="object"?r.scriptUrl:null).filter(r=>typeof r=="string"&&r.length>0)));t.length!==0&&Promise.allSettled(t.map(r=>Zl(r)))}async function pc(i){const e={...i.config??(i.configUrl?await dc(i.configUrl,i.configHeaders):{}),...i.overrides??{}};fc(e);const t=e.transport??"tiledesk",r=e.tiledesk;if((t==="tiledesk"||t==="dual")&&!r)throw new Error("mount: descriptor.tiledesk is required for tiledesk/dual transport");const s=r?.projectId??"",n=i.identity.userId,o=i.conversationScope||void 0,a=i.forceNewConversation?null:uc(n,s,o),l=r?.requestIdTemplate??"support-group-{projectId}-{uuid}",c=i.conversationId??a??hc(l,s);(i.conversationId||!a||i.forceNewConversation)&&s&&Lf(n,s,c,o);const u=await i.tokenProvider(),d=i.tokenProvider,p=i.historyTokenProvider??d,g=r?{mqttEndpoint:r.mqttEndpoint,jwtToken:u,userId:n,userName:i.identity.userName,projectId:r.projectId,appId:r.appId,mqttUsername:r.mqttUsername,protocolId:r.protocolId,protocolVersion:r.protocolVersion,keepAliveSec:r.keepAliveSec,connectTimeoutMs:r.connectTimeoutMs,maxReconnectAttempts:r.maxReconnectAttempts,reconnectMaxDelayMs:r.reconnectMaxDelayMs,wildcardSubscribe:r.wildcardSubscribe,enablePresence:r.enablePresence,autoInitiateOnEmpty:r.autoInitiateOnEmpty,chatInitiatedAttributes:r.chatInitiatedAttributes,messageDefaults:{...r.messageDefaults,...i.identity.departmentId?{departmentId:i.identity.departmentId}:r.messageDefaults?.departmentId?{departmentId:r.messageDefaults.departmentId}:{}},fileTemplate:r.fileTemplate,topicTemplates:r.topicTemplates,debug:r.debug,senderFullname:i.identity.senderFullname??i.identity.userName,tokenProvider:d}:void 0,f=i.uploadAdapter??(e.uploadEndpoint?xo({endpoint:e.uploadEndpoint,fieldName:e.uploadFieldName,extraFields:e.uploadExtraFields}):void 0),y=i.historyAdapter??(e.historyApiBase?Rl({apiBase:e.historyApiBase,pageSize:e.historyPageSize??200,pathTemplate:e.historyPathTemplate,extraHeaders:e.historyHeaders,getToken:p}):void 0),b={transport:t,baseUrl:"",userToken:i.userToken??n,conversationId:c,display:e.display??"embed",position:e.position,primaryColor:e.theme?.primary??e.primaryColor,title:e.title,subtitle:e.subtitle,avatarUrl:e.avatarUrl,width:e.width,height:e.height,borderRadius:e.theme?.radius??e.borderRadius,fontFamily:e.theme?.font??e.fontFamily,themeTokens:e.theme,linkHandlers:e.linkHandlers,getLinkBearer:i.getLinkBearer,welcomeMessage:e.welcomeMessage,placeholder:e.placeholder,showTimestamps:e.showTimestamps,persistConversation:e.persistConversation,showHeader:e.showHeader,hideSystemMessages:e.hideSystemMessages,timestampFormat:e.timestampFormat,input:e.input,templateLayout:e.templateLayout,chatActions:e.chatActions,tiledesk:g,tiledeskIdentity:{userId:n,userName:i.identity.userName,departmentId:i.identity.departmentId,senderFullname:i.identity.senderFullname??i.identity.userName},templateActionAttributes:e.templateActionAttributes,uploadAdapter:f,historyAdapter:y,onError:i.onError,onMessage:i.onMessage},w=document.createElement("aikaara-chat-widget");return w.configure(b),b.title&&w.setAttribute("title",b.title),b.primaryColor&&w.setAttribute("primary-color",b.primaryColor),b.display&&w.setAttribute("display",b.display),b.display==="embed"&&(w.style.cssText="display:flex;flex-direction:column;width:100%;height:100%;min-height:0;--aikaara-close-btn-display:none;"),i.container.appendChild(w),{widget:w,requestId:c,config:b,destroy(){w.remove()}}}function Uf(i){if(typeof i!="string")return i;const e=document.querySelector(i);if(!e)throw new Error(`mountFromSlug: container "${i}" not found`);return e}async function mc(i){const e=(i.configBase??"https://api.aikaara.com").replace(/\/$/,""),t=`${e}/api/v1/widget_configs/${encodeURIComponent(i.slug)}`;let r=null;try{r=await dc(t,i.configHeaders)}catch(I){if(!i.fallbackConfig)throw I;console.warn(`[aikaara-chat-sdk] Widget config fetch failed for slug "${i.slug}" — using fallbackConfig.`,I)}const s={...i.fallbackConfig??{},...r??{},...i.overrides??{}};if(fc(s),s.templates&&Object.keys(s.templates).length>0){s.components={...s.components??{}};for(const[I,O]of Object.entries(s.templates)){const C=`template:${I}`;s.components[C]||!O?.scriptUrl||!O?.render||(s.components[C]={kind:"iife-element",scriptUrl:O.scriptUrl,tag:O.render,...O.props?{props:O.props}:{}})}}const n=window;if(n.__aikaara_descriptor__={...n.__aikaara_descriptor__??{},templates:s.templates,components:s.components,razorpay:s.razorpay,title:s.title,cloud:s.cloud??n.__aikaara_descriptor__?.cloud,upload:s.upload??n.__aikaara_descriptor__?.upload,themeSource:s.themeSource??n.__aikaara_descriptor__?.themeSource,api:s.api,auth:s.auth},!s.auth)throw new Error(`mountFromSlug: widget_configs/${i.slug} descriptor must include "auth" block`);let o=null,a=i.user.id,l=i.user.name,c="",u=i.user.token,d=null;const p=await Jt(i.user.token).catch(()=>""),g=typeof p=="string"&&p.length>0;if(!g&&s.sso?.tokenSource){d=new lc({descriptor:{provider:s.sso.provider,flow:s.sso.flow,skipLogin:s.sso.skipLogin,autoRefresh:s.sso.autoRefresh,tokenSource:s.sso.tokenSource,tokenSourceConfig:s.sso.tokenSourceConfig,fallback:s.sso.fallback,map:s.sso.map},initToken:i.user.partnerToken});const I=await d.get();u=async()=>(await d.get()).token,i.user.identity&&!i.user.identity.partnerToken&&(i.user.identity.partnerToken=I.token)}else if(!g&&s.sso&&s.sso.collect&&s.sso.collect.length>0){const I=`${e}/api/v1/projects/by-slug/${encodeURIComponent(i.slug)}/sso_exchange`;o=await new sc({descriptor:s.sso,providers:i.user.credentialProviders,exchangeUrl:I}).get(),a=o.extUid||a,l=l??o.displayName,c=o.userToken}let f="",y="";if(s.preflight&&s.preflight.length){const I=await jo(s.preflight,{sessionToken:u,userId:a,projectId:s.tiledesk?.projectId??"",slug:i.slug,identity:i.user.identity});if(I.captured.sessionToken){f=I.captured.sessionToken;const O=f;u=()=>O}I.captured.userId&&(a=I.captured.userId),I.captured.requestId&&(y=I.captured.requestId)}const b=new ic(s.auth,u);if(f){const I=s.tiledesk?.projectId??"",O=I?uc(a,I):null,C=s.tiledesk?.requestIdTemplate??"support-group-{projectId}-{uuid}",j=O??(I?hc(C,I):"");b.prime(f,{requestId:j,fullName:l})}const w=await b.get();a=a||w.userId;const m=w.fullName||l||a;window.__aikaara_runtime__={getChatJwt:async()=>(await b.get()).token,getSessionToken:()=>Jt(i.user.token),identity:i.user.identity,slug:i.slug,configBase:e};const k=d&&s.sso?.autoRefresh?async()=>{try{return await d.refresh(),b.reset(),(await b.get()).token}catch(I){return console.warn("[aikaara-chat-sdk] partner auto-refresh failed",I),null}}:null,S=s.upload,v=async()=>`Bearer ${S&&"tokenSource"in S&&S.tokenSource==="chat"?(await b.get()).token:await Jt(i.user.token)}`,x=i.hooks?.upload??(S&&S.mode==="presigned-3step"?Ll({...S,authHeader:v}):S&&S.mode==="direct"?xo({endpoint:S.endpoint,fieldName:S.fieldName,extraFields:S.extraFields,headers:async()=>({authorization:await v()})}):void 0),E=await pc({container:Uf(i.container),config:s,userToken:c||void 0,identity:{userId:a,userName:m,departmentId:i.user.departmentId,senderFullname:m},tokenProvider:async()=>(await b.get()).token,historyTokenProvider:async()=>(await b.get()).token,uploadAdapter:x,historyAdapter:i.hooks?.history,conversationId:w.requestId||y||void 0,conversationScope:i.conversationScope,onError:i.hooks?.onError,onMessage:i.hooks?.onMessage,getLinkBearer:async I=>I==="none"?null:I==="chat"?(await b.get()).token:Jt(i.user.token)});return Object.assign(E,{fullName:m,requestId:w.requestId,descriptor:s,async refreshAuth(){b.reset(),await b.get()},async refreshPartnerAuth(){return k?k():null},async runMethodSelectPreflight(I){const O=s.preflight;return!O||!O.length?{}:O.some(j=>j.trigger==="on-method-select")?(await jo(O,{sessionToken:u,userId:a,projectId:s.tiledesk?.projectId??"",slug:i.slug,identity:{...i.user.identity??{},...I?.identity??{}},serviceType:I?.serviceType,userType:I?.userType},"on-method-select")).captured:{}}})}function Bf(i){Ro();const e=document.createElement("aikaara-chat-widget"),t={baseUrl:"base-url",userToken:"user-token",apiKey:"api-key",title:"title",subtitle:"subtitle",theme:"theme",primaryColor:"primary-color",position:"position",width:"width",height:"height",placeholder:"placeholder",welcomeMessage:"welcome-message",avatarUrl:"avatar-url"};for(const[r,s]of Object.entries(t)){const n=i[r];n!=null&&e.setAttribute(s,String(n))}return e.configure(i),document.body.appendChild(e),e}function Df(){const i=document.querySelector("aikaara-chat-widget");i&&i.remove()}const Ff="https://checkout.razorpay.com/v1/checkout.js";let ur=null;function dr(){return window}class gc extends HTMLElement{shadow;payloadData=[];message="";paidIdx={};constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}setPayload(e,t){this.payloadData=Array.isArray(e)?e:[],this.message=t??"",this.render()}render(){const e=this.payloadData.filter(r=>!!r&&typeof r=="object"&&r.type==="link"&&typeof r.url=="string"),t=e.map((r,s)=>{const n=r.name||"Open link",o=!!this.paidIdx[s];return`<button class="link${o?" paid":""}" data-i="${s}" type="button"${o?" disabled":""}><span class="lbl">${$f(o?"Paid":n)}</span>`+(o?'<svg class="icon" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 8.5 L7 12 L13 5"/></svg>':'<svg class="icon" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M5 11 L11 5 M6 5 H11 V10"/></svg>')+"</button>"}).join("");this.shadow.innerHTML="<style>:host { display:block; margin:6px 0; font-family:inherit; }.bubble { padding:12px 16px; border-radius:14px; background:var(--aikaara-bot-bubble-bg, #d8e5f5); color:var(--aikaara-bot-bubble-text, #1a2845); font-size:14px; line-height:1.55; margin-bottom:10px; }.links { display:flex; flex-direction:column; gap:8px; }.link { display:inline-flex; align-items:center; justify-content:center; gap:8px; padding:11px 22px; border:1.5px solid var(--aikaara-primary, #1849a9); background:var(--aikaara-primary, #1849a9); color:var(--aikaara-primary-contrast, #fff); border-radius:24px; font-size:14px; font-weight:600; cursor:pointer; font-family:inherit; text-decoration:none; transition: filter 120ms; width:150px; align-self:flex-start; }.link:hover:not(:disabled) { filter: brightness(0.94); }.link.paid, .link:disabled { background:#e7f5ec; color:#0e7c3a; border-color:#0e7c3a; cursor:default; }.icon { width:13px; height:13px; }</style>"+(this.message?`<div class="bubble">${this.message}</div>`:"")+`<div class="links">${t}</div>`,this.shadow.querySelectorAll(".link").forEach(r=>{r.addEventListener("click",()=>{if(r.disabled)return;const s=Number(r.dataset.i||0),n=e[s];n&&this.handleClick(s,n)})})}handleClick(e,t){const r=qf(t),s=dr().__aikaara_descriptor__,n=s?.partnerPayment,o=s?.razorpay;if(r&&n?.paymentLinkUrl){this.openPartnerPaymentLink(e,r,t,n);return}if(!r||!o?.keyId){t.openLinkInNewTab?window.open(t.url,"_blank","noopener,noreferrer"):Gf(t.url,t.name||"Pay"),this.dispatchEvent(new CustomEvent("template-action",{detail:{text:t.name||"link-click",attributes:{action:{type:"link",url:t.url,orderId:r||t.orderId,openedIn:"modal"}}},bubbles:!0,composed:!0}));return}Wf(o.preferredBanksUrl,r,o.preferredBanksMethod,o.preferredBanksHeaders).catch(a=>(console.warn("[payment_link] preferred-banks fetch failed; continuing with default UI",a),[])).then(a=>Hf().then(()=>this.openRazorpay(e,r,o,a))).catch(a=>{console.error("[payment_link] Razorpay launch failed",a)})}openPartnerPaymentLink(e,t,r,s){zf(t,s).then(n=>{if(!n){Qt("Failed to generate payment link, please try again later");return}const o=(n.paymentStatus??"").toLowerCase();if(o==="paid"||o==="success"||o==="completed"){this.paidIdx[e]=!0,this.render(),Qt("Payment already completed");return}const a=n.vendorPaymentLink;if(!a){Qt("Failed to generate payment link, please try again later");return}const l=navigator.userAgent.toLowerCase();if(l.includes("iphone")||l.includes("ipad")||l.includes("ipod")){window.location.href=a;return}const u=Vf(a);if(!u){window.open(a,"_blank"),Qt("Allow popups for the best payment experience");return}this.dispatchEvent(new CustomEvent("template-action",{detail:{text:r.name||"link-click",attributes:{action:{type:"partner-payment",url:a,orderId:t,openedIn:"popup"}}},bubbles:!0,composed:!0})),Kf(u,s.checkoutOrigin,{onSuccess:()=>{this.paidIdx[e]=!0,this.render()},onError:d=>{Qt(d||"Payment failed, please try again")},onClose:()=>{}})}).catch(n=>{console.error("[payment_link] partner payment link fetch failed",n),Qt("Failed to generate payment link, please try again later")})}openRazorpay(e,t,r,s){const n=dr(),o=n.__aikaara_runtime__?.identity??{},a={key:r.keyId,order_id:t,name:r.name||n.__aikaara_descriptor__?.title||"Payment",prefill:{},handler:()=>{this.paidIdx[e]=!0,this.render()},modal:{ondismiss:()=>{}}};typeof o.mobile=="string"?a.prefill.contact=o.mobile:typeof o.phone=="string"&&(a.prefill.contact=o.phone),typeof o.email=="string"&&(a.prefill.email=o.email),typeof o.name=="string"?a.prefill.name=o.name:typeof o.userName=="string"&&(a.prefill.name=o.userName),Array.isArray(s)&&s.length&&(a.config={display:{blocks:{utib:{name:"Pay Using Preferred Netbanking",instruments:[{method:"netbanking",banks:s}]}},sequence:["block.utib","netbanking","card","upi"],preferences:{show_default_blocks:!0}}});const l=n.Razorpay;if(typeof l!="function")throw new Error("Razorpay Checkout script not available");const c=new l(a);c.on("payment.failed",u=>{console.warn("[payment_link] payment.failed",u?.error)}),c.open()}}function $f(i){return String(i??"").replace(/[&<>]/g,e=>e==="&"?"&":e==="<"?"<":">")}function qf(i){if(typeof i.orderId=="string"&&i.orderId)return i.orderId;try{const e=new URL(i.url,window.location.origin),t=e.searchParams.get("orderId")||e.searchParams.get("order_id");if(t)return t;if(e.hash&&e.hash.length>1){const r=new URLSearchParams(e.hash.replace(/^#/,"")),s=r.get("orderId")||r.get("order_id");if(s)return s}}catch{}return null}function Hf(){return typeof dr().Razorpay=="function"?Promise.resolve():ur||(ur=new Promise((i,e)=>{const t=document.querySelector('script[data-aikaara-razorpay="1"]');if(t){t.addEventListener("load",()=>i()),t.addEventListener("error",()=>e(new Error("checkout.js failed to load")));return}const r=document.createElement("script");r.src=Ff,r.async=!0,r.dataset.aikaaraRazorpay="1",r.onload=()=>i(),r.onerror=()=>{ur=null,e(new Error("checkout.js failed to load"))},document.head.appendChild(r)}),ur)}function Wf(i,e,t,r){if(!i)return Promise.resolve([]);const s=String(t||"GET").toUpperCase()==="POST"?"POST":"GET",n=i.includes("{orderId}")?i.replace("{orderId}",encodeURIComponent(e)):i+(i.includes("?")?"&":"?")+"orderId="+encodeURIComponent(e),o=dr().__aikaara_runtime__??{};return(typeof o.getSessionToken=="function"?o.getSessionToken():typeof o.getChatJwt=="function"?o.getChatJwt():Promise.resolve(null)).then(l=>{const c={Accept:"application/json",...r??{}};l&&(c.Authorization=`Bearer ${l}`);const u={method:s,headers:c,credentials:"omit"};return s==="POST"&&(c["Content-Type"]="application/json",u.body=JSON.stringify({orderId:e})),fetch(n,u)}).then(l=>{if(!l.ok)throw new Error(`preferred-banks ${l.status}`);return l.json()}).then(l=>{const c=l,u=c?.data&&typeof c.data=="object"&&!Array.isArray(c.data)?c.data:null;return(Array.isArray(l)?l:Array.isArray(c?.banks)?c.banks:Array.isArray(c?.data)?c.data:Array.isArray(u?.preferredPaymentBank)?u.preferredPaymentBank:Array.isArray(u?.banks)?u.banks:[]).map(p=>{if(typeof p=="string")return p;if(p&&typeof p=="object"){const g=p;return g.code||g.bankCode||g.bank_code||null}return null}).filter(p=>!!p)})}async function zf(i,e){const t=String(e.method||"GET").toUpperCase()==="POST"?"POST":"GET",r=e.paymentLinkUrl,s=r.includes("{orderId}")?r.replace("{orderId}",encodeURIComponent(i)):r+(r.includes("?")?"&":"?")+"orderId="+encodeURIComponent(i),n=dr().__aikaara_runtime__??{},o=typeof n.getSessionToken=="function"?await n.getSessionToken():typeof n.getChatJwt=="function"?await n.getChatJwt():null,a={Accept:"application/json",...e.headers??{}};o&&(a.Authorization=`Bearer ${o}`);const l={method:t,headers:a,credentials:"omit"};t==="POST"&&(a["Content-Type"]="application/json",l.body=JSON.stringify({orderId:i}));const c=await fetch(s,l);if(!c.ok)throw new Error(`partner-payment-link ${c.status}`);const d=(await c.json())?.data;return!d||typeof d.vendorPaymentLink!="string"?null:{vendorPaymentLink:d.vendorPaymentLink,paymentStatus:d.paymentStatus??""}}function Vf(i){const r=window.screenX+Math.round((window.outerWidth-520)/2),s=window.screenY+Math.round((window.outerHeight-680)/2);return window.open(i,"taxbuddy_payment",`width=520,height=680,left=${r},top=${s},scrollbars=yes,resizable=yes`)}function Kf(i,e,t){let r=!1;function s(){clearInterval(a),window.removeEventListener("message",o)}function n(l){r||(r=!0,s(),l())}function o(l){if(e&&l.origin!==e)return;const c=l.data;if(!(!c||typeof c!="object")){if(c.type==="payment-completed"&&c.success===!0){n(()=>t.onSuccess());return}c.type==="payment-error"&&c.success===!1&&n(()=>t.onError(c.error??"Payment failed"))}}const a=setInterval(()=>{i.closed&&n(()=>t.onClose())},500);window.addEventListener("message",o)}function Qt(i){try{const e=document.querySelector("aikaara-error-banner");if(e&&typeof e.show=="function"){e.show(i);return}}catch{}console.warn("[payment_link]",i)}function Gf(i,e){if(!i)return;let t=document.querySelector("aikaara-link-modal");t||(t=document.createElement("aikaara-link-modal"),document.body.appendChild(t)),typeof t.show=="function"?t.show(i,e):window.open(i,"_blank","noopener,noreferrer")}function Yf(){typeof customElements>"u"||customElements.get("aikaara-template-payment-link")||customElements.define("aikaara-template-payment-link",gc)}const Jf=Object.freeze(Object.defineProperty({__proto__:null,AikaaraPaymentLink:gc,registerAikaaraPaymentLink:Yf},Symbol.toStringTag,{value:"Module"}));class yc extends HTMLElement{shadow;payload=null;constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}connectedCallback(){this.render()}setPayload(e){this.payload=e,this.render()}render(){const e=this.payload;this.shadow.innerHTML=`
|
|
1600
1600
|
<style>
|
|
1601
1601
|
:host { display: block; margin-top: 8px; }
|
|
1602
1602
|
button {
|
package/dist/headless.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./MountTenant-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./MountTenant-DRu2dD2_.cjs");class s extends e.EventEmitter{registration=null;pendingEdits=[];constructor(t){super(),this.setupListeners(t)}registerForm(t){this.registration=t;const i=this.pendingEdits.filter(r=>r.entity_type===t.entityType&&String(r.entity_id)===String(t.entityId));if(i.length>0){for(const r of i)t.onFieldUpdate(r.fields),this.emit("edit:applied",{entityType:r.entity_type,entityId:r.entity_id,fields:r.fields});this.pendingEdits=this.pendingEdits.filter(r=>!(r.entity_type===t.entityType&&String(r.entity_id)===String(t.entityId)))}}unregisterForm(t,i){this.registration?.entityType===t&&String(this.registration?.entityId)===String(i)&&(this.registration=null)}get currentForm(){return this.registration}pushFieldUpdates(t,i,r){this.registration&&this.registration.entityType===t&&String(this.registration.entityId)===String(i)?(this.registration.onFieldUpdate(r),this.emit("edit:applied",{entityType:t,entityId:i,fields:r})):(this.pendingEdits.push({action:"edit_entity",entity_type:t,entity_id:i,fields:r}),this.emit("edit:pending",{entityType:t,entityId:i,fields:r}))}async requestSave(){if(!this.registration)return{success:!1,error:"No form registered"};try{return await this.registration.onSave(),this.emit("save:success",{entityType:this.registration.entityType,entityId:this.registration.entityId}),{success:!0}}catch(t){const i=t instanceof Error?t.message:"Save failed";return this.emit("save:error",{entityType:this.registration.entityType,entityId:this.registration.entityId,error:i}),{success:!1,error:i}}}async requestTest(t){if(!this.registration?.onTest)return{success:!1,error:"Current form does not support testing"};try{return await this.registration.onTest(t),{success:!0}}catch(i){return{success:!1,error:i instanceof Error?i.message:"Test failed"}}}setupListeners(t){t.on("action:edit_entity",i=>{this.pushFieldUpdates(i.entity_type,i.entity_id,i.fields)}),t.on("action:save_entity",i=>{this.requestSave()}),t.on("action:test_tool",i=>{this.emit("test:triggered",{toolId:i.tool_id,parameters:i.parameters}),this.requestTest(i.parameters)})}}exports.ActionCableClient=e.ActionCableClient;exports.AikaaraChatClient=e.AikaaraChatClient;exports.ApiClient=e.ApiClient;exports.ChannelSubscription=e.ChannelSubscription;exports.ConnectionManager=e.ConnectionManager;exports.ConversationManager=e.ConversationManager;exports.EventEmitter=e.EventEmitter;exports.MessageStore=e.MessageStore;exports.SessionAuthAdapter=e.SessionAuthAdapter;exports.SsoExchangeAdapter=e.SsoExchangeAdapter;exports.TiledeskTransport=e.TiledeskTransport;exports.TokenDiscoveryError=e.TokenDiscoveryError;exports.TokenDiscoveryReader=e.TokenDiscoveryReader;exports.clearPersistedConversationId=e.clearPersistedConversationId;exports.collectSsoCredentials=e.collectSsoCredentials;exports.createFetchUploadAdapter=e.createFetchUploadAdapter;exports.createPresigned3StepUploadAdapter=e.createPresigned3StepUploadAdapter;exports.createTiledeskHistoryAdapter=e.createTiledeskHistoryAdapter;exports.discoverToken=e.discoverToken;exports.extractTiledeskFileEnvelope=e.extractTiledeskFileEnvelope;exports.inferTiledeskRole=e.inferTiledeskRole;exports.isTiledeskSelfEcho=e.isTiledeskSelfEcho;exports.mountFromSlug=e.mountFromSlug;exports.mountTenantWidget=e.mount;exports.parseTiledeskTemplate=e.parseTiledeskTemplate;exports.runMethodSelectPreflight=e.runMethodSelectPreflight;exports.FormBridge=s;
|
package/dist/headless.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as s } from "./MountTenant-
|
|
2
|
-
import { A as p, b as l, k as g, C as c, l as h, m as y, M as u, S as m, n as f, T, o as S, p as _, q as v, s as E, t as C, u as F, v as k, w as A, x as I, y as x, z as U, B as q, D as M, F as b, G as w } from "./MountTenant-
|
|
1
|
+
import { E as s } from "./MountTenant-DkABujlz.mjs";
|
|
2
|
+
import { A as p, b as l, k as g, C as c, l as h, m as y, M as u, S as m, n as f, T, o as S, p as _, q as v, s as E, t as C, u as F, v as k, w as A, x as I, y as x, z as U, B as q, D as M, F as b, G as w } from "./MountTenant-DkABujlz.mjs";
|
|
3
3
|
class a extends s {
|
|
4
4
|
registration = null;
|
|
5
5
|
pendingEdits = [];
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./MountTenant-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./MountTenant-DRu2dD2_.cjs"),s=require("./headless.cjs");function l(a){e.registerComponents();const t=document.createElement("aikaara-chat-widget"),i={baseUrl:"base-url",userToken:"user-token",apiKey:"api-key",title:"title",subtitle:"subtitle",theme:"theme",primaryColor:"primary-color",position:"position",width:"width",height:"height",placeholder:"placeholder",welcomeMessage:"welcome-message",avatarUrl:"avatar-url"};for(const[o,n]of Object.entries(i)){const r=a[o];r!=null&&t.setAttribute(n,String(r))}return t.configure(a),document.body.appendChild(t),t}function d(){const a=document.querySelector("aikaara-chat-widget");a&&a.remove()}exports.ActionCableClient=e.ActionCableClient;exports.AikaaraChatBubble=e.AikaaraChatBubble;exports.AikaaraChatClient=e.AikaaraChatClient;exports.AikaaraChatHeader=e.AikaaraChatHeader;exports.AikaaraChatInput=e.AikaaraChatInput;exports.AikaaraChatWidget=e.AikaaraChatWidget;exports.AikaaraErrorBanner=e.AikaaraErrorBanner;exports.AikaaraMessageBubble=e.AikaaraMessageBubble;exports.AikaaraMessageList=e.AikaaraMessageList;exports.AikaaraStreamingMessage=e.AikaaraStreamingMessage;exports.AikaaraTypingIndicator=e.AikaaraTypingIndicator;exports.ApiClient=e.ApiClient;exports.ChannelSubscription=e.ChannelSubscription;exports.ConnectionManager=e.ConnectionManager;exports.ConversationManager=e.ConversationManager;exports.EventEmitter=e.EventEmitter;exports.MessageStore=e.MessageStore;exports.SessionAuthAdapter=e.SessionAuthAdapter;exports.SsoExchangeAdapter=e.SsoExchangeAdapter;exports.TiledeskTransport=e.TiledeskTransport;exports.TokenDiscoveryError=e.TokenDiscoveryError;exports.TokenDiscoveryReader=e.TokenDiscoveryReader;exports.clearPersistedConversationId=e.clearPersistedConversationId;exports.collectSsoCredentials=e.collectSsoCredentials;exports.createFetchUploadAdapter=e.createFetchUploadAdapter;exports.createPresigned3StepUploadAdapter=e.createPresigned3StepUploadAdapter;exports.createTiledeskHistoryAdapter=e.createTiledeskHistoryAdapter;exports.discoverToken=e.discoverToken;exports.extractTiledeskFileEnvelope=e.extractTiledeskFileEnvelope;exports.inferTiledeskRole=e.inferTiledeskRole;exports.isTiledeskSelfEcho=e.isTiledeskSelfEcho;exports.mountFromSlug=e.mountFromSlug;exports.mountTenantWidget=e.mount;exports.parseTiledeskTemplate=e.parseTiledeskTemplate;exports.registerComponents=e.registerComponents;exports.runMethodSelectPreflight=e.runMethodSelectPreflight;exports.FormBridge=s.FormBridge;exports.mount=l;exports.unmount=d;
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as o } from "./MountTenant-
|
|
2
|
-
import { A as u, a as m, b as g, c as h, d as k, e as A, f as C, g as T, h as b, i as f, j as v, k as S, C as y, l as M, m as w, E, M as x, S as B, n as F, T as U, o as D, p as I, q as P, s as j, t as q, u as H, v as R, w as W, x as z, y as G, z as K, B as L, D as O, F as J, G as N } from "./MountTenant-
|
|
1
|
+
import { r as o } from "./MountTenant-DkABujlz.mjs";
|
|
2
|
+
import { A as u, a as m, b as g, c as h, d as k, e as A, f as C, g as T, h as b, i as f, j as v, k as S, C as y, l as M, m as w, E, M as x, S as B, n as F, T as U, o as D, p as I, q as P, s as j, t as q, u as H, v as R, w as W, x as z, y as G, z as K, B as L, D as O, F as J, G as N } from "./MountTenant-DkABujlz.mjs";
|
|
3
3
|
import { FormBridge as V } from "./headless.mjs";
|
|
4
4
|
function l(e) {
|
|
5
5
|
o();
|
package/dist/ui.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./MountTenant-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./MountTenant-DRu2dD2_.cjs");exports.AikaaraChat=a.AikaaraChat;exports.AikaaraChatBubble=a.AikaaraChatBubble;exports.AikaaraChatHeader=a.AikaaraChatHeader;exports.AikaaraChatInput=a.AikaaraChatInput;exports.AikaaraChatWidget=a.AikaaraChatWidget;exports.AikaaraComparePlans=a.AikaaraComparePlans;exports.AikaaraErrorBanner=a.AikaaraErrorBanner;exports.AikaaraLinkModal=a.AikaaraLinkModal;exports.AikaaraMessageBubble=a.AikaaraMessageBubble;exports.AikaaraMessageList=a.AikaaraMessageList;exports.AikaaraModalAction=a.AikaaraModalAction;exports.AikaaraOptionList=a.AikaaraOptionList;exports.AikaaraSchemaForm=a.AikaaraSchemaForm;exports.AikaaraSmartEditModal=a.AikaaraSmartEditModal;exports.AikaaraStreamingMessage=a.AikaaraStreamingMessage;exports.AikaaraSubmitAction=a.AikaaraSubmitAction;exports.AikaaraSystemPill=a.AikaaraSystemPill;exports.AikaaraTemplateRenderer=a.AikaaraTemplateRenderer;exports.AikaaraTextInput=a.AikaaraTextInput;exports.AikaaraTypingIndicator=a.AikaaraTypingIndicator;exports.registerComponents=a.registerComponents;
|
package/dist/ui.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { I as i, a as s, c as e, d as t, e as A, J as k, f as n, K as o, g as m, h as d, L as l, N as g, O as p, P as h, i as C, Q as M, R as b, U as c, V as u, j as S, r as I } from "./MountTenant-
|
|
1
|
+
import { I as i, a as s, c as e, d as t, e as A, J as k, f as n, K as o, g as m, h as d, L as l, N as g, O as p, P as h, i as C, Q as M, R as b, U as c, V as u, j as S, r as I } from "./MountTenant-DkABujlz.mjs";
|
|
2
2
|
export {
|
|
3
3
|
i as AikaaraChat,
|
|
4
4
|
s as AikaaraChatBubble,
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g="https://checkout.razorpay.com/v1/checkout.js";let m=null;function y(){return window}class k extends HTMLElement{shadow;payloadData=[];message="";paidIdx={};constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}setPayload(t,n){this.payloadData=Array.isArray(t)?t:[],this.message=n??"",this.render()}render(){const t=this.payloadData.filter(e=>!!e&&typeof e=="object"&&e.type==="link"&&typeof e.url=="string"),n=t.map((e,s)=>{const o=e.name||"Open link",r=!!this.paidIdx[s];return`<button class="link${r?" paid":""}" data-i="${s}" type="button"${r?" disabled":""}><span class="lbl">${w(r?"Paid":o)}</span>`+(r?'<svg class="icon" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 8.5 L7 12 L13 5"/></svg>':'<svg class="icon" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M5 11 L11 5 M6 5 H11 V10"/></svg>')+"</button>"}).join("");this.shadow.innerHTML="<style>:host { display:block; margin:6px 0; font-family:inherit; }.bubble { padding:12px 16px; border-radius:14px; background:var(--aikaara-bot-bubble-bg, #d8e5f5); color:var(--aikaara-bot-bubble-text, #1a2845); font-size:14px; line-height:1.55; margin-bottom:10px; }.links { display:flex; flex-direction:column; gap:8px; }.link { display:inline-flex; align-items:center; justify-content:center; gap:8px; padding:11px 22px; border:1.5px solid var(--aikaara-primary, #1849a9); background:var(--aikaara-primary, #1849a9); color:var(--aikaara-primary-contrast, #fff); border-radius:24px; font-size:14px; font-weight:600; cursor:pointer; font-family:inherit; text-decoration:none; transition: filter 120ms; width:150px; align-self:flex-start; }.link:hover:not(:disabled) { filter: brightness(0.94); }.link.paid, .link:disabled { background:#e7f5ec; color:#0e7c3a; border-color:#0e7c3a; cursor:default; }.icon { width:13px; height:13px; }</style>"+(this.message?`<div class="bubble">${this.message}</div>`:"")+`<div class="links">${n}</div>`,this.shadow.querySelectorAll(".link").forEach(e=>{e.addEventListener("click",()=>{if(e.disabled)return;const s=Number(e.dataset.i||0),o=t[s];o&&this.handleClick(s,o)})})}handleClick(t,n){const e=b(n),s=y().__aikaara_descriptor__,o=s?.partnerPayment,r=s?.razorpay;if(e&&o?.paymentLinkUrl){this.openPartnerPaymentLink(t,e,n,o);return}if(!e||!r?.keyId){S(n.url,n.name||"Pay"),this.dispatchEvent(new CustomEvent("template-action",{detail:{text:n.name||"link-click",attributes:{action:{type:"link",url:n.url,orderId:e||n.orderId,openedIn:"modal"}}},bubbles:!0,composed:!0}));return}_(r.preferredBanksUrl,e,r.preferredBanksMethod,r.preferredBanksHeaders).catch(c=>(console.warn("[payment_link] preferred-banks fetch failed; continuing with default UI",c),[])).then(c=>P().then(()=>this.openRazorpay(t,e,r,c))).catch(c=>{console.error("[payment_link] Razorpay launch failed",c)})}openPartnerPaymentLink(t,n,e,s){v(n,s).then(o=>{if(!o){f("Failed to generate payment link, please try again later");return}const r=(o.paymentStatus??"").toLowerCase();if(r==="paid"||r==="success"||r==="completed"){this.paidIdx[t]=!0,this.render(),f("Payment already completed");return}const c=o.vendorPaymentLink;if(!c){f("Failed to generate payment link, please try again later");return}const l=navigator.userAgent.toLowerCase();if(l.includes("iphone")||l.includes("ipad")||l.includes("ipod")){window.location.href=c;return}const d=x(c);if(!d){window.open(c,"_blank"),f("Allow popups for the best payment experience");return}this.dispatchEvent(new CustomEvent("template-action",{detail:{text:e.name||"link-click",attributes:{action:{type:"partner-payment",url:c,orderId:n,openedIn:"popup"}}},bubbles:!0,composed:!0})),C(d,s.checkoutOrigin,{onSuccess:()=>{this.paidIdx[t]=!0,this.render()},onError:p=>{f(p||"Payment failed, please try again")},onClose:()=>{}})}).catch(o=>{console.error("[payment_link] partner payment link fetch failed",o),f("Failed to generate payment link, please try again later")})}openRazorpay(t,n,e,s){const o=y(),r=o.__aikaara_runtime__?.identity??{},c={key:e.keyId,order_id:n,name:e.name||o.__aikaara_descriptor__?.title||"Payment",prefill:{},handler:()=>{this.paidIdx[t]=!0,this.render()},modal:{ondismiss:()=>{}}};typeof r.mobile=="string"?c.prefill.contact=r.mobile:typeof r.phone=="string"&&(c.prefill.contact=r.phone),typeof r.email=="string"&&(c.prefill.email=r.email),typeof r.name=="string"?c.prefill.name=r.name:typeof r.userName=="string"&&(c.prefill.name=r.userName),Array.isArray(s)&&s.length&&(c.config={display:{blocks:{utib:{name:"Pay Using Preferred Netbanking",instruments:[{method:"netbanking",banks:s}]}},sequence:["block.utib","netbanking","card","upi"],preferences:{show_default_blocks:!0}}});const l=o.Razorpay;if(typeof l!="function")throw new Error("Razorpay Checkout script not available");const i=new l(c);i.on("payment.failed",d=>{console.warn("[payment_link] payment.failed",d?.error)}),i.open()}}function w(a){return String(a??"").replace(/[&<>]/g,t=>t==="&"?"&":t==="<"?"<":">")}function b(a){if(typeof a.orderId=="string"&&a.orderId)return a.orderId;try{const t=new URL(a.url,window.location.origin),n=t.searchParams.get("orderId")||t.searchParams.get("order_id");if(n)return n;if(t.hash&&t.hash.length>1){const e=new URLSearchParams(t.hash.replace(/^#/,"")),s=e.get("orderId")||e.get("order_id");if(s)return s}}catch{}return null}function P(){return typeof y().Razorpay=="function"?Promise.resolve():m||(m=new Promise((a,t)=>{const n=document.querySelector('script[data-aikaara-razorpay="1"]');if(n){n.addEventListener("load",()=>a()),n.addEventListener("error",()=>t(new Error("checkout.js failed to load")));return}const e=document.createElement("script");e.src=g,e.async=!0,e.dataset.aikaaraRazorpay="1",e.onload=()=>a(),e.onerror=()=>{m=null,t(new Error("checkout.js failed to load"))},document.head.appendChild(e)}),m)}function _(a,t,n,e){if(!a)return Promise.resolve([]);const s=String(n||"GET").toUpperCase()==="POST"?"POST":"GET",o=a.includes("{orderId}")?a.replace("{orderId}",encodeURIComponent(t)):a+(a.includes("?")?"&":"?")+"orderId="+encodeURIComponent(t),r=y().__aikaara_runtime__??{};return(typeof r.getSessionToken=="function"?r.getSessionToken():typeof r.getChatJwt=="function"?r.getChatJwt():Promise.resolve(null)).then(l=>{const i={Accept:"application/json",...e??{}};l&&(i.Authorization=`Bearer ${l}`);const d={method:s,headers:i,credentials:"omit"};return s==="POST"&&(i["Content-Type"]="application/json",d.body=JSON.stringify({orderId:t})),fetch(o,d)}).then(l=>{if(!l.ok)throw new Error(`preferred-banks ${l.status}`);return l.json()}).then(l=>{const i=l,d=i?.data&&typeof i.data=="object"&&!Array.isArray(i.data)?i.data:null;return(Array.isArray(l)?l:Array.isArray(i?.banks)?i.banks:Array.isArray(i?.data)?i.data:Array.isArray(d?.preferredPaymentBank)?d.preferredPaymentBank:Array.isArray(d?.banks)?d.banks:[]).map(u=>{if(typeof u=="string")return u;if(u&&typeof u=="object"){const h=u;return h.code||h.bankCode||h.bank_code||null}return null}).filter(u=>!!u)})}async function v(a,t){const n=String(t.method||"GET").toUpperCase()==="POST"?"POST":"GET",e=t.paymentLinkUrl,s=e.includes("{orderId}")?e.replace("{orderId}",encodeURIComponent(a)):e+(e.includes("?")?"&":"?")+"orderId="+encodeURIComponent(a),o=y().__aikaara_runtime__??{},r=typeof o.getSessionToken=="function"?await o.getSessionToken():typeof o.getChatJwt=="function"?await o.getChatJwt():null,c={Accept:"application/json",...t.headers??{}};r&&(c.Authorization=`Bearer ${r}`);const l={method:n,headers:c,credentials:"omit"};n==="POST"&&(c["Content-Type"]="application/json",l.body=JSON.stringify({orderId:a}));const i=await fetch(s,l);if(!i.ok)throw new Error(`partner-payment-link ${i.status}`);const p=(await i.json())?.data;return!p||typeof p.vendorPaymentLink!="string"?null:{vendorPaymentLink:p.vendorPaymentLink,paymentStatus:p.paymentStatus??""}}function x(a){const e=window.screenX+Math.round((window.outerWidth-520)/2),s=window.screenY+Math.round((window.outerHeight-680)/2);return window.open(a,"taxbuddy_payment",`width=520,height=680,left=${e},top=${s},scrollbars=yes,resizable=yes`)}function C(a,t,n){let e=!1;function s(){clearInterval(c),window.removeEventListener("message",r)}function o(l){e||(e=!0,s(),l())}function r(l){if(t&&l.origin!==t)return;const i=l.data;if(!(!i||typeof i!="object")){if(i.type==="payment-completed"&&i.success===!0){o(()=>n.onSuccess());return}i.type==="payment-error"&&i.success===!1&&o(()=>n.onError(i.error??"Payment failed"))}}const c=setInterval(()=>{a.closed&&o(()=>n.onClose())},500);window.addEventListener("message",r)}function f(a){try{const t=document.querySelector("aikaara-error-banner");if(t&&typeof t.show=="function"){t.show(a);return}}catch{}console.warn("[payment_link]",a)}function S(a,t){if(!a)return;let n=document.querySelector("aikaara-link-modal");n||(n=document.createElement("aikaara-link-modal"),document.body.appendChild(n)),typeof n.show=="function"?n.show(a,t):window.open(a,"_blank","noopener,noreferrer")}function I(){typeof customElements>"u"||customElements.get("aikaara-template-payment-link")||customElements.define("aikaara-template-payment-link",k)}exports.AikaaraPaymentLink=k;exports.registerAikaaraPaymentLink=I;
|