@coxwave/tap-sdk 0.0.11 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,24 +1,3 @@
1
-
2
- // Auto-injected CSS
3
- (function() {
4
- if (typeof document !== 'undefined') {
5
- const style = document.createElement('style');
6
- style.id = 'tap-sdk-styles';
7
- style.textContent = "@keyframes _16e62km0{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes _16e62km1{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(30px);display:none}}._16e62km2{opacity:0;transform:translateY(30px);transition:opacity .4s ease,transform .4s ease;pointer-events:none;display:none}._16e62km3{animation:_16e62km0 .4s ease forwards;pointer-events:auto}._16e62km4{animation:_16e62km1 .4s ease forwards;pointer-events:none}._16e62km5{border:none!important}@keyframes wtjce00{0%{opacity:1;pointer-events:auto}50%{opacity:1}to{opacity:0}}.wtjce01{pointer-events:none;opacity:0;display:flex;position:absolute;width:max-content;top:calc(100% + 5px);right:0;flex-direction:column;justify-content:center;align-items:flex-end;padding-top:2px;cursor:pointer;z-index:999;transition:opacity .3s ease}.wtjce02{pointer-events:auto;animation:wtjce00 18s forwards}.wtjce03{opacity:0;pointer-events:none;animation:none}.wtjce04{display:flex;justify-content:flex-end;border-radius:var(--Radius-radiusSM, 8px);width:max-content;gap:5px}.wtjce05{display:flex;padding:8px 12px 6px;justify-content:flex-end;align-items:center;border-radius:var(--Radius-radiusSM, 8px);max-width:340px}.wtjce06{background-color:#171b1f}.wtjce07{background-color:#fa6b4b}.wtjce08{color:#fff;text-align:right;font-family:Pretendard;font-size:14px;font-style:normal;font-weight:400;line-height:20px;white-space:pre-wrap;word-break:keep-all;overflow-wrap:break-word}.wtjce09{display:flex;padding:0 23px;align-items:flex-start;gap:10px}.wtjce0a{width:15px}.wtjce0b{color:#171b1f}.wtjce0c{color:#fa6b4b}.wtjce0d{cursor:pointer;justify-content:center;align-items:center;width:20px;height:20px;border-radius:100px;z-index:999;transition:all .2s ease}.wtjce0d:hover{width:63px;left:-72px}.wtjce04:hover .wtjce0d{display:flex}.wtjce0e,.wtjce0f{display:none;background-color:#171b1f}.wtjce0g{color:#fff}.wtjce0d:hover .wtjce0g{display:none}.wtjce0h{color:#fff;text-align:center;font-family:Pretendard;font-size:12px;font-style:normal;font-weight:400;line-height:20px;display:none}.wtjce0d:hover .wtjce0h{display:block}._1mnmljf0{width:100%;min-width:max-content;table-layout:auto;border-collapse:separate;border-spacing:0;border:.4px solid rgba(118,118,128,.12);border-radius:8px;overflow:auto;background-color:#fff;cursor:pointer}._1mnmljf1{border:.4px solid rgba(118,118,128,.12);padding:10px;background-color:#f2f2f2;text-align:left;font-family:Pretendard;color:#090909;font-size:12px;font-weight:500;white-space:normal;overflow-wrap:break-word;word-break:break-word}._1mnmljf2{border:.4px solid rgba(118,118,128,.12);padding:10px;color:#090909;font-family:Pretendard;font-size:12px;font-weight:400;width:fit-content;max-width:400px;white-space:normal;overflow-wrap:break-word;word-break:break-word}._1mnmljf3{position:relative;background-color:#fafafa;border-radius:8px;padding:8px;overflow-y:auto}._1mnmljf4{display:flex;align-items:center;justify-content:space-between;padding-bottom:4px}._1mnmljf5{color:#4a5568;padding:2px 6px;font-size:12px;border-radius:4px;z-index:10;font-family:Pretendard}._1mnmljf6{z-index:10;cursor:pointer;display:flex;align-items:center;width:max-content;color:#4a5568;padding:2px 6px;font-size:12px;border:none;font-family:Pretendard}._1mnmljf7{white-space:nowrap}._1mnmljf8{display:flex;width:12px;height:12px;margin-bottom:4px;color:#4a5568;flex-shrink:0}._1mnmljf9{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#0006;z-index:10000002}._1mnmljfa{position:fixed;display:flex;flex-direction:column;width:max-content;max-width:calc(100vw - 100px);overflow:auto;background:#fff;padding:20px;border:1px solid #ccc;box-shadow:0 4px 20px #0003;z-index:10000003;border-radius:8px}\n/*# sourceMappingURL=index.css.map */";
8
- if (!document.getElementById('tap-sdk-styles')) {
9
- document.head.appendChild(style);
10
- }
11
- }
12
- })();
13
-
14
- var je=Object.defineProperty;var Y=i=>{throw TypeError(i)};var De=(i,e,t)=>e in i?je(i,e,{enumerable:true,configurable:true,writable:true,value:t}):i[e]=t;var o=(i,e,t)=>De(i,typeof e!="symbol"?e+"":e,t),Oe=(i,e,t)=>e.has(i)||Y("Cannot "+t);var w=(i,e,t)=>e.has(i)?Y("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,t);var m=(i,e,t)=>(Oe(i,e,"access private method"),t);var Q="_16e62km2",E="_16e62km4";var L="_16e62km3";var d=class d{constructor(){o(this,"$container",null);o(this,"containerIdCounter",0);if(d.instance)return d.instance;this.$container=null,d.instance=this;}static resetInstance(){d.instance&&(d.instance.forceRemove(),d.instance=null);}get element(){return this.$container??void 0}createContainer({customContainer:e}){this.forceRemove(),this.containerIdCounter++;let t=`cw-tap-container-${this.containerIdCounter}-${Date.now()}`;return this.$container=document.createElement("div"),this.$container.id=t,this.$container.className=Q,this.updateStyles(e),document.body.appendChild(this.$container),this.$container}forceRemove(){this.$container&&(this.$container.remove(),this.$container=null),document.querySelectorAll("[id^='cw-tap-container']").forEach(t=>{t.remove();});}updateStyles(e){if(!this.$container){e?this.createContainer({customContainer:e}):this.createContainer({});return}let t={top:e?.position?.top??"50px",right:e?.position?.right??"24px",left:e?.position?.left??"unset",bottom:e?.position?.bottom??"unset",width:e?.width??"340px",height:e?.height??"calc(100% - 116px)",overflow:"hidden",backgroundColor:"transparent",borderRadius:e?.borderRadius??"16px",boxShadow:`
15
- rgba(255, 255, 255, 0.12) 0px 0px 2px 0px inset,
16
- rgba(0, 0, 0, 0.05) 0px 0px 2px 1px,
17
- rgba(0, 0, 0, 0.3) 0px 12px 60px
18
- `,willChange:"transform, opacity, width, max-height, max-width"};this.$container.style.cssText="",this.$container.style.setProperty("position","fixed","important"),this.$container.style.setProperty("z-index","10000001","important"),this.$container.style.setProperty("top",t.top,"important"),this.$container.style.setProperty("right",t.right,"important"),this.$container.style.setProperty("left",t.left,"important"),this.$container.style.setProperty("bottom",t.bottom,"important"),this.$container.style.setProperty("width",t.width,"important"),this.$container.style.setProperty("height",t.height,"important"),this.$container.style.setProperty("overflow",t.overflow,"important"),this.$container.style.setProperty("background-color",t.backgroundColor,"important"),this.$container.style.setProperty("border-radius",t.borderRadius,"important"),this.$container.style.setProperty("box-shadow",t.boxShadow,"important"),this.$container.style.setProperty("will-change",t.willChange,"important"),this.$container.offsetHeight;}getBoundingClientRect(){return this.$container?this.$container.getBoundingClientRect():null}getComputedStyles(){if(!this.$container)return null;let e=window.getComputedStyle(this.$container);console.log("[Container] Raw computed styles:",{width:e.width,height:e.height,borderRadius:e.borderRadius,top:e.top,right:e.right,left:e.left,bottom:e.bottom});let t=(r,s)=>r&&r!=="auto"?r:s,n={width:t(e.width,"340px"),height:"calc(100vh - 116px)",borderRadius:t(e.borderRadius,"16px"),position:{top:t(e.top,"50px"),right:t(e.right,"24px"),left:e.left==="auto"?"unset":e.left,bottom:e.bottom==="auto"?"unset":e.bottom}};return console.log("[Container] Processed computed styles:",n),n}toggleVisibility(e){if(!this.$container)return;this.$container.classList.remove(L,E),this.$container.style.display="block";let t=()=>{this.$container&&(this.$container.classList.contains(E)&&(this.$container.style.display="none"),this.$container.removeEventListener("animationend",t));};this.$container.addEventListener("animationend",t),requestAnimationFrame(()=>{this.$container?.classList.add(e?L:E);});}removeContainer(){this.forceRemove();}resizeContainer(e,t){if(!this.$container)return;let n=t?.width??"340px",r=parseInt(n,10),s=r/3*10-r,u=e?`${r+s}px`:`${r}px`;this.$container.style.width=u;}setDynamicSize(e,t){this.$container&&(this.$container.style.transition="width 0.3s ease, height 0.3s ease",this.$container.style.width=e,this.$container.style.height=t);}animateResize(e,t,n=300){this.$container&&(this.$container.style.transition=`width ${n}ms ease, height ${n}ms ease`,this.$container.style.width=e,this.$container.style.height=t);}setResponsiveMode(e){if(!this.$container)return;let t={compact:{width:"280px",height:"calc(100% - 200px)"},normal:{width:"340px",height:"calc(100% - 116px)"},expanded:{width:"480px",height:"calc(100% - 80px)"}},{width:n,height:r}=t[e];this.animateResize(n,r,400);}};o(d,"instance",null);var z=d,N=z;var R=class{constructor(){o(this,"buttonElement");}create(e){let t=document.getElementById(e);if(!t)throw new Error(`Element with id '${e}' not found`);return t.style.setProperty("position","relative","important"),t.style.setProperty("z-index","10000001","important"),this.buttonElement=t,this.buttonElement}onClick(e){if(!this.buttonElement)throw new Error("not initialized");this.buttonElement.addEventListener("click",e);}},ee=R;var te="wtjce01",q={default:"wtjce0b wtjce0a","call-to-action":"wtjce0c wtjce0a"},ne="wtjce0a",re="wtjce09",B={default:"wtjce0e wtjce0d","call-to-action":"wtjce0f wtjce0d"},ie="wtjce0d",se="wtjce0h",ue="wtjce0g",H="wtjce03",oe="wtjce08",G={default:"wtjce06 wtjce05","call-to-action":"wtjce07 wtjce05"},ae="wtjce05",F="wtjce02",le="wtjce04";var f,ce,pe,fe,he,ye,V=class{constructor(){w(this,f);o(this,"container");o(this,"alarmTimeout");o(this,"alarmCornerSVG");o(this,"textContainer");o(this,"circleElement");o(this,"textInTextContainer");o(this,"messageInfo");}render({rootElement:e}){this.container=document.createElement("div"),this.container.id="alarm-container",this.container.className=te,this.container.addEventListener("click",n=>{n.stopPropagation();}),e.appendChild(this.container),m(this,f,ce).call(this,this.container);let t=m(this,f,pe).call(this,this.container);m(this,f,he).call(this,t),m(this,f,fe).call(this,t);}fadeIn(e){e.type==="default"||e.type==="hourSpent"?(this.textContainer.className=G.default,this.alarmCornerSVG.setAttribute("class",q.default),this.circleElement.className=B.default):(this.textContainer.className=G["call-to-action"],this.alarmCornerSVG.setAttribute("class",q["call-to-action"]),this.circleElement.className=B["call-to-action"]),this.messageInfo=e,this.textInTextContainer.textContent=e.message,this.toggleVisibility(true),this.alarmTimeout=setTimeout(()=>{this.toggleVisibility(false);},18*1e3);}onAlarmClick(e){this.container.addEventListener("click",()=>{this.toggleVisibility(false),e(this.messageInfo);});}toggleVisibility(e){this.container.classList.remove(F,H),requestAnimationFrame(()=>{this.container?.classList.add(e?F:H);});}remove(){this.container&&this.toggleVisibility(false),this.alarmTimeout&&clearTimeout(this.alarmTimeout);}};f=new WeakSet,ce=function(e){let t=document.createElement("div");t.className=re,e.appendChild(t);let n=document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("width","11"),n.setAttribute("height","8"),n.setAttribute("viewBox","0 0 11 8"),n.setAttribute("fill","currentColor"),n.setAttribute("class",ne);let r=document.createElementNS("http://www.w3.org/2000/svg","path");r.setAttribute("d","M5.5 0L11.1292 8.25H-0.129165L5.5 0Z"),r.setAttribute("fill","currentColor"),n.appendChild(r),this.alarmCornerSVG=n,t.appendChild(n);},pe=function(e){let t=document.createElement("div");return t.className=le,e.appendChild(t),t},fe=function(e){this.textContainer=document.createElement("div"),this.textContainer.className=ae,e.appendChild(this.textContainer),this.textInTextContainer=document.createElement("span"),this.textInTextContainer.className=oe,this.textContainer.appendChild(this.textInTextContainer);},he=function(e){let t=document.createElement("div");t.className=ie,e.appendChild(t),t.addEventListener("click",r=>{r.stopPropagation(),this.remove();});let n=document.createElement("span");n.className=se,t.appendChild(n),n.textContent="\uC54C\uB9BC \uB044\uAE30",m(this,f,ye).call(this,t),this.circleElement=t;},ye=function(e){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("width","10"),t.setAttribute("height","10"),t.setAttribute("viewBox","0 0 14 14"),t.setAttribute("fill","none"),t.setAttribute("class",ue);let n=document.createElementNS("http://www.w3.org/2000/svg","path");n.setAttribute("d","M1 1L13 13M13 1L1 13"),n.setAttribute("stroke","currentColor"),n.setAttribute("stroke-width","2"),n.setAttribute("stroke-linecap","round"),t.appendChild(n),e.appendChild(t);};var me=V;var U;function de(i){return {lang:i?.lang??U?.lang,message:i?.message,abortEarly:i?.abortEarly??U?.abortEarly,abortPipeEarly:i?.abortPipeEarly??U?.abortPipeEarly}}var Le;function ze(i){return Le?.get(i)}var Ne;function Re(i){return Ne?.get(i)}var qe;function Be(i,e){return qe?.get(i)?.get(e)}function ve(i){let e=typeof i;return e==="string"?`"${i}"`:e==="number"||e==="bigint"||e==="boolean"?`${i}`:e==="object"||e==="function"?(i&&Object.getPrototypeOf(i)?.constructor?.name)??"null":e}function k(i,e,t,n,r){let s=r&&"input"in r?r.input:t.value,u=r?.expected??i.expects??null,a=r?.received??ve(s),l={kind:i.kind,type:i.type,input:s,expected:u,received:a,message:`Invalid ${e}: ${u?`Expected ${u} but r`:"R"}eceived ${a}`,requirement:i.requirement,path:r?.path,issues:r?.issues,lang:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},p=i.kind==="schema",c=r?.message??i.message??Be(i.reference,l.lang)??(p?Re(l.lang):null)??n.message??ze(l.lang);c!==void 0&&(l.message=typeof c=="function"?c(l):c),p&&(t.typed=false),t.issues?t.issues.push(l):t.issues=[l];}function x(i){return {version:1,vendor:"valibot",validate(e){return i["~run"]({value:e},de())}}}function He(i,e){return Object.hasOwn(i,e)&&e!=="__proto__"&&e!=="prototype"&&e!=="constructor"}function Ge(i,e,t){return typeof i.fallback=="function"?i.fallback(e,t):i.fallback}function Fe(i,e,t){return typeof i.default=="function"?i.default(e,t):i.default}function X(){return {kind:"schema",type:"any",reference:X,expects:"any",async:false,get"~standard"(){return x(this)},"~run"(i){return i.typed=true,i}}}function _(i,e){return {kind:"schema",type:"literal",reference:_,expects:ve(i),async:false,literal:i,message:e,get"~standard"(){return x(this)},"~run"(t,n){return t.value===this.literal?t.typed=true:k(this,"type",t,n),t}}}function I(i,e){return {kind:"schema",type:"object",reference:I,expects:"Object",async:false,entries:i,message:e,get"~standard"(){return x(this)},"~run"(t,n){let r=t.value;if(r&&typeof r=="object"){t.typed=true,t.value={};for(let s in this.entries){let u=this.entries[s];if(s in r||(u.type==="exact_optional"||u.type==="optional"||u.type==="nullish")&&u.default!==void 0){let a=s in r?r[s]:Fe(u),l=u["~run"]({value:a},n);if(l.issues){let p={type:"object",origin:"value",input:r,key:s,value:a};for(let c of l.issues)c.path?c.path.unshift(p):c.path=[p],t.issues?.push(c);if(t.issues||(t.issues=l.issues),n.abortEarly){t.typed=false;break}}l.typed||(t.typed=false),t.value[s]=l.value;}else if(u.fallback!==void 0)t.value[s]=Ge(u);else if(u.type!=="exact_optional"&&u.type!=="optional"&&u.type!=="nullish"&&(k(this,"key",t,n,{input:void 0,expected:`"${s}"`,path:[{type:"object",origin:"key",input:r,key:s,value:r[s]}]}),n.abortEarly))break}}else k(this,"type",t,n);return t}}}function W(i,e,t){return {kind:"schema",type:"record",reference:W,expects:"Object",async:false,key:i,value:e,message:t,get"~standard"(){return x(this)},"~run"(n,r){let s=n.value;if(s&&typeof s=="object"){n.typed=true,n.value={};for(let u in s)if(He(s,u)){let a=s[u],l=this.key["~run"]({value:u},r);if(l.issues){let c={type:"object",origin:"key",input:s,key:u,value:a};for(let h of l.issues)h.path=[c],n.issues?.push(h);if(n.issues||(n.issues=l.issues),r.abortEarly){n.typed=false;break}}let p=this.value["~run"]({value:a},r);if(p.issues){let c={type:"object",origin:"value",input:s,key:u,value:a};for(let h of p.issues)h.path?h.path.unshift(c):h.path=[c],n.issues?.push(h);if(n.issues||(n.issues=p.issues),r.abortEarly){n.typed=false;break}}(!l.typed||!p.typed)&&(n.typed=false),l.typed&&(n.value[l.value]=p.value);}}else k(this,"type",n,r);return n}}}function C(i){return {kind:"schema",type:"string",reference:C,expects:"string",async:false,message:i,get"~standard"(){return x(this)},"~run"(e,t){return typeof e.value=="string"?e.typed=true:k(this,"type",e,t),e}}}function ge(i,e,t){let n=i["~run"]({value:e},de(t));return {typed:n.typed,success:!n.issues,output:n.value,issues:n.issues}}var ke="chat:init",Ve="chat:initiated";var xe=I({type:_(Ve),gaId:C()});I({type:_("GA_EVENT"),payload:W(C(),X())});var T=class{constructor(){o(this,"listeners",new Map);o(this,"unifiedMessageHandler",null);}on(e,t){let n=s=>{if(this.isValidOrigin(s))try{let u=s.data,a=typeof u=="string"?JSON.parse(u):u,{type:l}=a;l===e&&t(a);}catch(u){console.warn("Messenger: Failed to parse message data",u);}},r=this.listeners.get(e)||[];return r.push(n),this.listeners.set(e,r),this.unifiedMessageHandler||(this.unifiedMessageHandler=s=>{this.listeners.forEach(u=>u.forEach(a=>a(s)));},window.addEventListener("message",this.unifiedMessageHandler)),()=>{this.unifiedMessageHandler&&(window.removeEventListener("message",this.unifiedMessageHandler),this.unifiedMessageHandler=null);}}removeListener(e){this.listeners.delete(e);}removeAllListeners(){this.listeners.clear(),this.unifiedMessageHandler&&(window.removeEventListener("message",this.unifiedMessageHandler),this.unifiedMessageHandler=null);}postMessage(e){try{let t=this.getMessageTarget();return t?(t.postMessage(e,this.getTargetOrigin()),!0):(console.warn("Messenger: Message target not available"),!1)}catch(t){return console.error("Messenger: postMessage failed",t),false}}};var v=class extends Error{constructor(t,n,r){super(`Handshake failed: ${t}${n?` - ${n}`:""}`);this.reason=t;this.details=n;this.originalError=r;this.name="HandshakeError";}},$=class{constructor(e,t,n){this.getTargetWindow=e;this.getTargetOrigin=t;this.isValidOrigin=n;o(this,"abortController",null);o(this,"messageListener",null);}async execute(e,t={}){let{timeout:n=1e4,maxRetries:r=10,retryInterval:s=500}=t;return this.cancel(),this.abortController=new AbortController,new Promise((u,a)=>{let l=0,p,c=()=>{p&&clearTimeout(p),this.messageListener&&(window.removeEventListener("message",this.messageListener),this.messageListener=null);},h=()=>{c(),a(new v("TIMEOUT","Handshake was cancelled"));};this.abortController?.signal.addEventListener("abort",h),this.messageListener=y=>{if(this.isValidOrigin(y))try{let g=y.data,Me=typeof g=="string"?JSON.parse(g):g,Z=ge(xe,Me);if(Z.success){c(),this.abortController=null,u(Z.output);return}}catch{}},window.addEventListener("message",this.messageListener),p=setTimeout(()=>{c(),this.abortController=null,a(new v("TIMEOUT",`No valid response received within ${n}ms`));},n);let J=()=>{if(!this.abortController?.signal.aborted)try{let y=this.getTargetWindow(),g=this.getTargetOrigin();if(!y)throw new v("NO_TARGET_WINDOW","Target iframe window is not available");y.postMessage(e,g),l++,l<r&&setTimeout(()=>{this.abortController?.signal.aborted||J();},s);}catch(y){c(),this.abortController=null,y instanceof v?a(y):a(new v("MESSAGE_SEND_FAILED","Failed to send handshake message",y));}};J();})}cancel(){this.abortController&&(this.abortController.abort(),this.abortController=null),this.messageListener&&(window.removeEventListener("message",this.messageListener),this.messageListener=null);}isActive(){return this.abortController!==null&&!this.abortController.signal.aborted}};var b,we,Ee,M=class M extends T{constructor({hostOrigin:t,apiKey:n,eventLogger:r}){super();w(this,b);o(this,"hostOrigin");o(this,"apiKey");o(this,"iframe");o(this,"eventLogger");o(this,"postToTap",t=>{if(!this.iframe)return console.error("TapIframeBridge: iframe not found - ensure createIframeChat() was called first"),console.error("Failed to send message:",t),(t.type==="chat:open"||t.type==="chat:close")&&console.error("Chat cannot be opened/closed - iframe is not initialized"),this.eventLogger?.log({action:"iframe_message_failed",category:"error",label:t.type,customParams:{reason:"iframe_not_initialized"}}),false;let n=super.postMessage(t);return this.eventLogger?.log({action:"iframe_message_sent",category:"communication",label:t.type,customParams:{success:n}}),n});o(this,"listenToTap",super.on);this.hostOrigin=t,this.apiKey=n,this.eventLogger=r;}isValidOrigin(t){return true}getMessageTarget(){return this.iframe?.contentWindow||null}getTargetOrigin(){if(!this.iframe?.src)return "*";try{return new URL(this.iframe.src).origin}catch{return "*"}}renderIframe(t){return new Promise(n=>{this.iframe&&(this.iframe.remove(),this.iframe=null),this.iframe=document.createElement("iframe"),this.iframe.style.setProperty("display","flex","important"),this.iframe.style.setProperty("border","none","important"),this.iframe.src=m(this,b,we).call(this),this.iframe.style.width="100%",this.iframe.style.height="100%",this.iframe.onload=()=>{n(this.iframe);},t?.appendChild(this.iframe);})}hasIframe(){return this.iframe!==null&&this.iframe!==void 0}async ensureIframe(t){return this.hasIframe()?this.iframe:this.renderIframe(t)}removeIframe(){this.iframe?.remove(),this.iframe=null,this.removeAllListeners();}async performHandshake(t,n=M.defaultHandshakeOptions){if(!this.iframe)throw new Error("TapIframeBridge: iframe not available for handshake");this.eventLogger?.log({action:"handshake_started",category:"communication",customParams:{iframeSrc:this.iframe.src,targetOrigin:this.getTargetOrigin(),messageTargetAvailable:!!this.getMessageTarget()}});let r=new $(()=>this.getMessageTarget(),()=>this.getTargetOrigin(),a=>this.isValidOrigin(a)),s={type:ke,hostOrigin:this.hostOrigin,apiKey:this.apiKey,chatApiParams:{...t.course,clipPlayHead:t.course.clipPlayHead??0},apiUrl:m(this,b,Ee).call(this)||""};this.eventLogger?.log({action:"handshake_message_sending",category:"communication",customParams:{messageType:s.type,hostOrigin:s.hostOrigin,hasApiKey:!!s.apiKey,apiUrl:s.apiUrl,chatApiParams:s.chatApiParams}});let u=Date.now();try{let a=await r.execute(s,n);return this.eventLogger?.log({action:"iframe_handshake",category:"system",label:"success",value:Date.now()-u,customParams:{apiUrl:s.apiUrl,targetOrigin:this.getTargetOrigin()}}),a}catch(a){throw console.error("[TapIframeBridge] Handshake failed:",a),this.eventLogger?.log({action:"iframe_handshake",category:"error",label:"failed",value:Date.now()-u,customParams:{error:a instanceof Error?a.message:"Unknown error",apiUrl:s.apiUrl}}),a instanceof Error?new Error(`TapIframeBridge handshake failed: ${a.message}`):a}}};b=new WeakSet,we=function(){if(typeof window>"u"||typeof localStorage>"u")throw new Error("TapIframeBridge: window or localStorage is not defined");try{let t=localStorage.getItem("tap-url-storage");if(t){let n=JSON.parse(t);this.eventLogger?.log({action:"custom_tap_url_found",category:"configuration",customParams:{stored:n}});let r=n?.state?.tapUrl;if(r)return this.eventLogger?.log({action:"custom_tap_url_used",category:"configuration",customParams:{customTapUrl:r}}),`${r}/chat`}}catch{}return "https://edutap-ai.vercel.app/chat"},Ee=function(){if(!(typeof window>"u"||typeof localStorage>"u"))try{let t=localStorage.getItem("tap-api-url-storage");return t?JSON.parse(t)?.state?.apiUrl:void 0}catch{return}},o(M,"defaultHandshakeOptions",{retryInterval:500,maxRetries:3,timeout:3e4});var A=M;var j=class{constructor(e){this.iframeBridge=e;}seekTimeline({clipId:e,clipPlayHead:t}){this.iframeBridge.postToTap({type:"timeline:seek",clipId:e,clipPlayHead:t});}onTimelineSeek(e){this.iframeBridge.listenToTap("timeline:seek",t=>e(t.clipPlayHead,t.clipId));}onChatOpened(e){this.iframeBridge.listenToTap("chat:opened",e);}onChatClosed(e){this.iframeBridge.listenToTap("chat:closed",e);}onChatInitiated(e){this.iframeBridge.listenToTap("chat:initiated",e);}onAlarmFadeIn(e){this.iframeBridge.listenToTap("alarm:fadeIn",t=>{e(t.messageInfo);});}onPopUpOpen(e){this.iframeBridge.listenToTap("popUp:open",t=>{e(t.popUpInfo);});}onPdfOpen(e){this.iframeBridge.listenToTap("pdf:open",e);}onPdfClose(e){this.iframeBridge.listenToTap("pdf:close",e);}};var Ue="G-27C0E436HL",D=class{constructor(e=Ue){this.gaId=e;this.gaId&&typeof window<"u"&&this.initializeGA(this.gaId);}initializeGA(e){if(document.querySelector(`script[src*="googletagmanager.com/gtag/js?id=${e}"]`))return;let t=document.createElement("script");if(t.async=true,t.src=`https://www.googletagmanager.com/gtag/js?id=${e}`,document.head.appendChild(t),typeof window.gtag!="function"){let n=document.createElement("script");n.innerHTML=`
19
- window.dataLayer = window.dataLayer || [];
20
- function gtag(){dataLayer.push(arguments);}
21
- gtag('js', new Date());
22
- gtag('config', '${e}');
23
- `,document.head.appendChild(n);}}handle(e){typeof window.gtag=="function"?window.gtag("event",e.action,{event_category:e.category,event_label:e.label,value:e.value,...e.customParams}):this.gaId&&console.warn("[GAMiddleware] gtag not available, event queued:",e);}},O=class{constructor(e=false){this.enabled=e;}handle(e){this.enabled&&console.log("[TapSDK Event]",e);}},P=class{constructor(){o(this,"middlewares",[]);}addMiddleware(e){this.middlewares.push(e);}removeMiddleware(e){let t=this.middlewares.indexOf(e);t>-1&&this.middlewares.splice(t,1);}log(e){this.middlewares.forEach(t=>{try{t.handle(e);}catch(n){console.warn("[EventLogger] Middleware error:",n);}});}logChatAction(e,t){this.log({action:`chat_${e}`,category:"engagement",customParams:{timestamp:Date.now(),...t}});}logButtonClick(e,t,n){let r={action:`${e}_button_clicked`,category:"user_interaction",customParams:{timestamp:Date.now(),...n}};t!==void 0&&(r.label=t),this.log(r);}logSDKInitialization(e,t,n){let r=Date.now()-t,s={action:"sdk_initialization",category:"system",label:e?"success":"failure",value:r,customParams:{timestamp:Date.now(),...n&&{error:n}}};this.log(s);}};var _e="_1mnmljf6",Ie="_1mnmljf7",Ce="_1mnmljf8";var Te="_1mnmljf9";var $e="_1mnmljfa";var S=15;function We({htmlString:i,callback:e,containerRect:t}){let n=document.createElement("div");n.className=Te;let r=document.createElement("div");if(r.className=$e,t){let c=t.left-S;r.style.top=`${t.top}px`,r.style.left="unset",r.style.bottom="unset",c<S?(r.style.left=`${t.right+S}px`,r.style.right="unset"):r.style.right=`${window.innerWidth-c}px`;}else r.style.top="50px",r.style.right=`${S+340+24}px`,r.style.left="unset",r.style.bottom="unset";r.style.maxHeight="calc(100vh - 116px)";let s=document.createElement("div");s.innerHTML=i,n.addEventListener("click",()=>{document.body.removeChild(n),document.body.removeChild(r),e();}),r.addEventListener("click",c=>{c.stopPropagation();}),r.appendChild(s),document.body.appendChild(n),document.body.appendChild(r);let u=document.querySelector(`.${_e}`),a=document.querySelector(".cw-plugin-code-block"),l=document.querySelector(`.${Ce}`),p=document.querySelector(`.${Ie}`);u&&a&&l&&p&&u.addEventListener("click",()=>{navigator.clipboard.writeText(a.textContent??""),l.style.display="none",p.textContent="\uBCF5\uC0AC\uB428",setTimeout(()=>{p.textContent="\uBCF5\uC0AC",l.style.display="inline";},1e3);});}var Ae=We;var K=class{constructor({apiKey:e}){o(this,"apiKey");o(this,"iframeBridge");o(this,"events");o(this,"eventLogger");o(this,"container");o(this,"button");o(this,"alarm");o(this,"containerVisible");o(this,"isPdfOpen");o(this,"_isInitialized",false);this.apiKey=e,this.eventLogger=new P,this.setupEventLogger(),this.iframeBridge=new A({hostOrigin:window.location.origin,apiKey:this.apiKey,eventLogger:this.eventLogger}),this.events=new j(this.iframeBridge),this.button=new ee,this.alarm=new me,this.container=new N,this.containerVisible="closed",this.isPdfOpen=false;}get isOpen(){return this.containerVisible==="open"}get isInitialized(){return this._isInitialized}async init({buttonId:e,course:t,container:n}){if(this._isInitialized){this.eventLogger.log({action:"sdk_already_initialized",category:"warning",customParams:{timestamp:Date.now()}});return}let r=Date.now();try{await this.validateEnvironment(),await this.setupContainer(n),await Promise.all([this.setupButton(e),this.iframeBridge.ensureIframe(this.container.element)]),this.setupEventListeners(n),await this.iframeBridge.performHandshake({course:t,...n&&{container:n}}),this._isInitialized=!0,this.eventLogger.logSDKInitialization(!0,r);}catch(s){let u=s instanceof Error?s.message:"Unknown error";throw this.eventLogger.logSDKInitialization(false,r,u),s}}destroy(){if(!this._isInitialized){this.eventLogger.log({action:"sdk_destroy_not_initialized",category:"warning",customParams:{timestamp:Date.now()}});return}N.resetInstance(),this.alarm.remove(),this.iframeBridge.removeIframe(),this.containerVisible="closed",this._isInitialized=false;}setupEventLogger(){if(typeof window>"u"||typeof localStorage>"u")return;localStorage.getItem("tap-environment")==="local"?this.eventLogger.addMiddleware(new O(true)):this.eventLogger.addMiddleware(new D);}toggleChatOpen(){let e=this.containerVisible==="open"?"chat:close":"chat:open";try{this.iframeBridge.postToTap({type:e})||this.eventLogger.log({action:"chat_message_send_failed",category:"error",label:e,customParams:{timestamp:Date.now()}});}catch(t){this.eventLogger.log({action:"chat_message_send_error",category:"error",customParams:{messageType:e,error:t instanceof Error?t.message:"Unknown error",timestamp:Date.now()}});}}async validateEnvironment(){if(typeof window>"u"||typeof document>"u")throw new Error("Not running in client environment: window is not defined")}async setupContainer(e){if(this.container.element)this.updateContainerStyles(e);else if(!this.container.createContainer({...e&&{customContainer:e}}))throw new Error("Failed to create container")}updateContainerStyles(e){e&&this.container.updateStyles(e);}async setupButton(e){let t=this.button.create(e);this.button.onClick(async()=>{await this.iframeBridge.ensureIframe(this.container.element);let n=this.containerVisible==="open"?"open":"closed";this.eventLogger.logButtonClick("toggle",n),this.toggleChatOpen();}),this.alarm.render({rootElement:t}),this.alarm.onAlarmClick(n=>{this.eventLogger.logButtonClick("alarm"),this.iframeBridge.postToTap({type:"chat:open",isAlarm:true}),this.iframeBridge.postToTap({type:"alarm:click",messageInfo:n});});}setupEventListeners(e){this.iframeBridge.listenToTap("chat:opened",()=>{this.containerVisible="open",this.container.toggleVisibility(this.containerVisible==="open"),this.alarm.remove(),this.eventLogger.logChatAction("opened");}),this.iframeBridge.listenToTap("chat:closed",()=>{this.containerVisible="closed",this.container.toggleVisibility(false),this.eventLogger.logChatAction("closed");}),this.iframeBridge.listenToTap("alarm:fadeIn",t=>{this.containerVisible!=="open"&&this.alarm.fadeIn(t.messageInfo);}),this.iframeBridge.listenToTap("popUp:open",t=>{let n=this.container.getBoundingClientRect();Ae({htmlString:t.popUpInfo.html,callback:()=>this.iframeBridge.postToTap({type:"popUp:close"}),containerRect:n});}),this.iframeBridge.listenToTap("pdf:open",()=>{this.isPdfOpen=true,this.container.resizeContainer(this.isPdfOpen,e),this.iframeBridge.postToTap({type:"pdf:enlarged"});}),this.iframeBridge.listenToTap("pdf:close",()=>{this.isPdfOpen=false,this.container.resizeContainer(this.isPdfOpen,e),this.iframeBridge.postToTap({type:"pdf:shrinked"});});}updateStyles(e){if(!this._isInitialized){console.warn("SDK not initialized. Call init() first.");return}this.updateContainerStyles(e);}setContainerSize(e,t){if(!this._isInitialized){console.warn("SDK not initialized. Call init() first.");return}this.container.setDynamicSize(e,t);}animateContainerResize(e,t,n){if(!this._isInitialized){console.warn("SDK not initialized. Call init() first.");return}this.container.animateResize(e,t,n);}setResponsiveMode(e){if(!this._isInitialized){console.warn("SDK not initialized. Call init() first.");return}this.container.setResponsiveMode(e);}async initChat(e){return this.init(e)}postChatInfo({clipId:e,clipPlayHead:t}){this.events.seekTimeline({clipId:e,clipPlayHead:t});}getTimelineInfo({callback:e}){this.events.onTimelineSeek(e);}},Kt=K;export{Kt as default};//# sourceMappingURL=index.mjs.map
1
+ var p=Object.defineProperty;var l=(i,e,n)=>e in i?p(i,e,{enumerable:true,configurable:true,writable:true,value:n}):i[e]=n;var t=(i,e,n)=>l(i,typeof e!="symbol"?e+"":e,n);var s="https://files.edutap.ai/tap-sdk/loader.js";function c(){if(window.__TAP_SDK_LOADER_LOADED__&&window.TapSDK)return Promise.resolve();if(window.__TAP_SDK_LOADER_LOADING__)return window.__TAP_SDK_LOADER_LOADING__;let i=new Promise((e,n)=>{if(typeof document>"u"){n(new Error("TapSDK requires browser environment (document is undefined)"));return}let o=document.createElement("script");o.src=s,o.async=true,o.onload=()=>{let a=()=>{window.TapSDK?(window.__TAP_SDK_LOADER_LOADED__=true,window.__TAP_SDK_LOADER_LOADING__=void 0,e()):setTimeout(a,50);};a();},o.onerror=()=>{window.__TAP_SDK_LOADER_LOADING__=void 0,n(new Error(`Failed to load TapSDK CDN loader: ${s}`));};let d=document.querySelector(`script[src="${s}"]`);d?(d.addEventListener("load",()=>{let a=()=>{window.TapSDK?e():setTimeout(a,50);};a();}),d.addEventListener("error",()=>n(new Error(`Failed to load TapSDK CDN loader: ${s}`)))):document.head.appendChild(o);});return window.__TAP_SDK_LOADER_LOADING__=i,i}var r=class{constructor(e){t(this,"config");t(this,"sdkInstance");t(this,"loadPromise");this.config=e,this.loadPromise=this.loadAndInitialize();}async loadAndInitialize(){if(await c(),!window.TapSDK)throw new Error("TapSDK not available after loading CDN loader");this.sdkInstance=new window.TapSDK(this.config);}async ensureLoaded(){if(await this.loadPromise,!this.sdkInstance)throw new Error("TapSDK instance not initialized");return this.sdkInstance}get events(){return {seekTimeline:e=>{this.ensureLoaded().then(n=>n.events.seekTimeline(e));},onTimelineSeek:e=>{this.ensureLoaded().then(n=>n.events.onTimelineSeek(e));},onChatInitiated:e=>{this.ensureLoaded().then(n=>n.events.onChatInitiated(e));},onChatOpened:e=>{this.ensureLoaded().then(n=>n.events.onChatOpened(e));},onChatClosed:e=>{this.ensureLoaded().then(n=>n.events.onChatClosed(e));},onAlarmFadeIn:e=>{this.ensureLoaded().then(n=>n.events.onAlarmFadeIn(e));},onPopUpOpen:e=>{this.ensureLoaded().then(n=>n.events.onPopUpOpen(e));},onPdfOpen:e=>{this.ensureLoaded().then(n=>n.events.onPdfOpen(e));},onPdfClose:e=>{this.ensureLoaded().then(n=>n.events.onPdfClose(e));}}}get isOpen(){return this.sdkInstance?.isOpen??false}get isInitialized(){return this.sdkInstance?.isInitialized??false}async init(e){return (await this.ensureLoaded()).init(e)}destroy(){this.sdkInstance&&this.sdkInstance.destroy();}async initChat(e){return (await this.ensureLoaded()).initChat(e)}async postChatInfo(e){return (await this.ensureLoaded()).postChatInfo(e)}async getTimelineInfo(e){return (await this.ensureLoaded()).getTimelineInfo(e)}},D=r;
2
+ export{r as TapSDK,D as default};//# sourceMappingURL=index.mjs.map
24
3
  //# sourceMappingURL=index.mjs.map