@saasquatch/squatch-js 2.8.3-0 → 2.8.3-2

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/squatch.js CHANGED
@@ -1,4 +1,4 @@
1
- (function(u,g){typeof exports=="object"&&typeof module<"u"?g(exports):(u=typeof globalThis<"u"?globalThis:u||self,g(u.squatch={}))})(this,function(u){"use strict";var Ke=Object.defineProperty;var Ze=(u,g,C)=>g in u?Ke(u,g,{enumerable:!0,configurable:!0,writable:!0,value:C}):u[g]=C;var l=(u,g,C)=>Ze(u,typeof g!="symbol"?g+"":g,C);var pe;let g=null;function C(o){const e=o.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");g=new RegExp(`^${e}$`)}function fe(){g=null}function k(o){return(...t)=>{g&&g.test(o)&&console.log(`[${o}]`,...t)}}/*! js-cookie v3.0.5 | MIT */function L(o){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var n in e)o[n]=e[n]}return o}var we={read:function(o){return o[0]==='"'&&(o=o.slice(1,-1)),o.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(o){return encodeURIComponent(o).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function X(o,t){function e(i,s,a){if(!(typeof document>"u")){a=L({},t,a),typeof a.expires=="number"&&(a.expires=new Date(Date.now()+a.expires*864e5)),a.expires&&(a.expires=a.expires.toUTCString()),i=encodeURIComponent(i).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var r="";for(var d in a)a[d]&&(r+="; "+d,a[d]!==!0&&(r+="="+a[d].split(";")[0]));return document.cookie=i+"="+o.write(s,i)+r}}function n(i){if(!(typeof document>"u"||arguments.length&&!i)){for(var s=document.cookie?document.cookie.split("; "):[],a={},r=0;r<s.length;r++){var d=s[r].split("="),c=d.slice(1).join("=");try{var h=decodeURIComponent(d[0]);if(a[h]=o.read(c,h),i===h)break}catch{}}return i?a[i]:a}}return Object.create({set:e,get:n,remove:function(i,s){e(i,"",L({},s,{expires:-1}))},withAttributes:function(i){return X(this.converter,L({},this.attributes,i))},withConverter:function(i){return X(L({},this.converter,i),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(o)}})}var O=X(we,{path:"/"});const A="https://app.referralsaasquatch.com",Q="https://fast.ssqt.io/npm",j="squatch",Y="impact";function T(o){if(typeof o!="object")throw new Error("config must be an object");const t=window.squatchTenant,e=K(),n={tenantAlias:(o==null?void 0:o.tenantAlias)||t,domain:(o==null?void 0:o.domain)||(e==null?void 0:e.domain),npmCdn:(o==null?void 0:o.npmCdn)||(e==null?void 0:e.npmCdn),debug:(o==null?void 0:o.debug)||(e==null?void 0:e.debug)};if(typeof n.tenantAlias!="string")throw new Error("tenantAlias not provided");const i=n.tenantAlias,s=typeof n.domain=="string"&&n.domain||A,a=typeof n.debug=="boolean"&&n.debug||!1,r=typeof n.npmCdn=="string"&&n.npmCdn||Q;return{tenantAlias:i,domain:s,debug:a,npmCdn:r}}function I(o){return typeof o=="object"&&!Array.isArray(o)&&o!==null}function ye(o){if(o&&/^[a-z]{2}_(?:[A-Z]{2}|[0-9]{3})$/.test(o))return o}function ie(o){if(!I(o))throw new Error("Widget properties must be an object");if(!(o!=null&&o.user))throw new Error("Required properties missing.");return o}function oe(o){if(!I(o))throw new Error("Widget properties must be an object");return o}function W(){return window.impactToken||window.squatchToken}function K(){return window.impactConfig||window.squatchConfig}async function ve(o,t,e,n){const i=n||W(),s={Accept:"application/json","Content-Type":"application/json",...i?{Authorization:`Bearer ${i}`}:{},"X-SaaSquatch-Referrer":window?window.location.href:""};try{const a=await fetch(o,{method:"POST",body:JSON.stringify({query:t,variables:e}),headers:s});if(!a.ok)throw new Error(await a.text());return await a.json()}catch(a){throw a}}async function be(o,t=""){const e={Accept:"application/json","Content-Type":"application/json"},n=t||W();n&&(e["X-SaaSquatch-User-Token"]=n);try{const i=await fetch(o,{method:"GET",credentials:"include",headers:e}),s=await i.text();if(!i.ok)throw new Error(s);return s&&JSON.parse(s)}catch(i){throw i}}async function Z(o,t,e){const n={Accept:"application/json","Content-Type":"application/json"},i=e||W();i&&(n["X-SaaSquatch-User-Token"]=i);try{const s=await fetch(o,{method:"POST",body:t,headers:n}),a=await s.text();if(!s.ok)throw new Error(a);return a&&JSON.parse(a)}catch(s){throw s}}async function ke(o,t,e){const n={Accept:"application/json","Content-Type":"application/json","X-SaaSquatch-Referrer":window?window.location.href:""},i=e||W();i&&(n["X-SaaSquatch-User-Token"]=i);try{const s=await fetch(o,{headers:n,method:"PUT",credentials:"include",body:t}),a=await s.text();if(!s.ok)throw new Error(a);return a&&JSON.parse(a)}catch(s){throw s}}const Ee=`
1
+ (function(u,m){typeof exports=="object"&&typeof module<"u"?m(exports):(u=typeof globalThis<"u"?globalThis:u||self,m(u.squatch={}))})(this,function(u){"use strict";var ot=Object.defineProperty;var st=(u,m,A)=>m in u?ot(u,m,{enumerable:!0,configurable:!0,writable:!0,value:A}):u[m]=A;var l=(u,m,A)=>st(u,typeof m!="symbol"?m+"":m,A);var ge;let m=null;function A(o){const e=o.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");m=new RegExp(`^${e}$`)}function be(){m=null}function E(o){const t=(...e)=>{m&&m.test(o)&&console.log(`[${o}]`,...e)};return Object.defineProperty(t,"enabled",{get(){return!!(m&&m.test(o))}}),t}/*! js-cookie v3.0.5 | MIT */function O(o){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var n in e)o[n]=e[n]}return o}var Ee={read:function(o){return o[0]==='"'&&(o=o.slice(1,-1)),o.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(o){return encodeURIComponent(o).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function Q(o,t){function e(i,s,r){if(!(typeof document>"u")){r=O({},t,r),typeof r.expires=="number"&&(r.expires=new Date(Date.now()+r.expires*864e5)),r.expires&&(r.expires=r.expires.toUTCString()),i=encodeURIComponent(i).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var a="";for(var d in r)r[d]&&(a+="; "+d,r[d]!==!0&&(a+="="+r[d].split(";")[0]));return document.cookie=i+"="+o.write(s,i)+a}}function n(i){if(!(typeof document>"u"||arguments.length&&!i)){for(var s=document.cookie?document.cookie.split("; "):[],r={},a=0;a<s.length;a++){var d=s[a].split("="),c=d.slice(1).join("=");try{var h=decodeURIComponent(d[0]);if(r[h]=o.read(c,h),i===h)break}catch{}}return i?r[i]:r}}return Object.create({set:e,get:n,remove:function(i,s){e(i,"",O({},s,{expires:-1}))},withAttributes:function(i){return Q(this.converter,O({},this.attributes,i))},withConverter:function(i){return Q(O({},this.converter,i),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(o)}})}var j=Q(Ee,{path:"/"});const I="https://app.referralsaasquatch.com",Y="https://fast.ssqt.io/npm",D="squatch",K="impact";function W(o){if(typeof o!="object")throw new Error("config must be an object");const t=window.squatchTenant,e=Z(),n={tenantAlias:(o==null?void 0:o.tenantAlias)||t,domain:(o==null?void 0:o.domain)||(e==null?void 0:e.domain),npmCdn:(o==null?void 0:o.npmCdn)||(e==null?void 0:e.npmCdn),debug:(o==null?void 0:o.debug)||(e==null?void 0:e.debug)};if(typeof n.tenantAlias!="string")throw new Error("tenantAlias not provided");const i=n.tenantAlias,s=typeof n.domain=="string"&&n.domain||I,r=typeof n.debug=="boolean"&&n.debug||!1,a=typeof n.npmCdn=="string"&&n.npmCdn||Y;return{tenantAlias:i,domain:s,debug:r,npmCdn:a}}function _(o){return typeof o=="object"&&!Array.isArray(o)&&o!==null}function xe(o){if(o&&/^[a-z]{2}_(?:[A-Z]{2}|[0-9]{3})$/.test(o))return o}function oe(o){if(!_(o))throw new Error("Widget properties must be an object");if(!(o!=null&&o.user))throw new Error("Required properties missing.");return o}function se(o){if(!_(o))throw new Error("Widget properties must be an object");return o}function $(){return window.impactToken||window.squatchToken}function Z(){return window.impactConfig||window.squatchConfig}async function Ce(o,t,e,n){const i=n||$(),s={Accept:"application/json","Content-Type":"application/json",...i?{Authorization:`Bearer ${i}`}:{},"X-SaaSquatch-Referrer":window?window.location.href:""};try{const r=await fetch(o,{method:"POST",body:JSON.stringify({query:t,variables:e}),headers:s});if(!r.ok)throw new Error(await r.text());return await r.json()}catch(r){throw r}}async function Ae(o,t=""){const e={Accept:"application/json","Content-Type":"application/json"},n=t||$();n&&(e["X-SaaSquatch-User-Token"]=n);try{const i=await fetch(o,{method:"GET",credentials:"include",headers:e}),s=await i.text();if(!i.ok)throw new Error(s);return s&&JSON.parse(s)}catch(i){throw i}}async function ee(o,t,e){const n={Accept:"application/json","Content-Type":"application/json"},i=e||$();i&&(n["X-SaaSquatch-User-Token"]=i);try{const s=await fetch(o,{method:"POST",body:t,headers:n}),r=await s.text();if(!s.ok)throw new Error(r);return r&&JSON.parse(r)}catch(s){throw s}}async function Ie(o,t,e){const n={Accept:"application/json","Content-Type":"application/json","X-SaaSquatch-Referrer":window?window.location.href:""},i=e||$();i&&(n["X-SaaSquatch-User-Token"]=i);try{const s=await fetch(o,{headers:n,method:"PUT",credentials:"include",body:t}),r=await s.text();if(!s.ok)throw new Error(r);return r&&JSON.parse(r)}catch(s){throw s}}const _e=`
2
2
  query renderWidget ($user: UserIdInput, $engagementMedium: UserEngagementMedium, $widgetType: WidgetType, $locale: RSLocale) {
3
3
  renderWidget(user: $user, engagementMedium: $engagementMedium, widgetType: $widgetType, locale: $locale) {
4
4
  template
@@ -12,66 +12,10 @@
12
12
  }
13
13
  }
14
14
  }
15
- `;class D{constructor(t){l(this,"tenantAlias");l(this,"domain");l(this,"npmCdn");l(this,"referralCookie",this.squatchReferralCookie);const n=T(t);this.tenantAlias=n.tenantAlias,this.domain=n.domain,this.npmCdn=n.npmCdn}upsertUser(t){const n=ie(t),{widgetType:i,engagementMedium:s="POPUP",jwt:a,locale:r,user:d}=n,c=encodeURIComponent(this.tenantAlias),h=d.accountId?encodeURIComponent(d.accountId):null,p=d.id?encodeURIComponent(d.id):null,m=xe({widgetType:i,engagementMedium:s,locale:r}),f=`/api/v1/${c}/widget/account/${h}/user/${p}/upsert${m}`,w=this.domain+f,b=(O||window.Cookies).get("_saasquatch");return b&&(d.cookies=b),ke(w,JSON.stringify(d),a)}render(t){const n=oe(t),{widgetType:i,engagementMedium:s="POPUP",jwt:a,user:r}=n,d=encodeURIComponent(this.tenantAlias),c=r!=null&&r.accountId?encodeURIComponent(r.accountId):null,h=r!=null&&r.id?encodeURIComponent(r.id):null,p=n.locale??ye(navigator.language.replace(/\-/g,"_")),m=`/api/v1/${d}/graphql`,f=this.domain+m;return new Promise(async(w,b)=>{var M;try{const E=await ve(f,Ee,{user:h&&c?{id:h,accountId:c}:null,engagementMedium:s,widgetType:i,locale:p},a);w((M=E==null?void 0:E.data)==null?void 0:M.renderWidget)}catch(E){b(E)}})}async squatchReferralCookie(){const t=encodeURIComponent(this.tenantAlias),e=(O||window.Cookies).get("_saasquatch")||"",n=e?`?cookies=${encodeURIComponent(e)}`:"",i=`${this.domain}/a/${t}/widgets/squatchcookiejson${n}`,s=await be(i);return Promise.resolve({...s,encodedCookie:e})}}function xe({widgetType:o,engagementMedium:t,locale:e}){const n=new URLSearchParams;return n.append("engagementMedium",t),o&&n.append("widgetType",o),e&&n.append("locale",e),`?${n.toString()}`}/*!
15
+ `;class N{constructor(t){l(this,"tenantAlias");l(this,"domain");l(this,"npmCdn");l(this,"referralCookie",this.squatchReferralCookie);const n=W(t);this.tenantAlias=n.tenantAlias,this.domain=n.domain,this.npmCdn=n.npmCdn}upsertUser(t){const n=oe(t),{widgetType:i,engagementMedium:s="POPUP",jwt:r,locale:a,user:d}=n,c=encodeURIComponent(this.tenantAlias),h=d.accountId?encodeURIComponent(d.accountId):null,p=d.id?encodeURIComponent(d.id):null,g=Te({widgetType:i,engagementMedium:s,locale:a}),w=`/api/v1/${c}/widget/account/${h}/user/${p}/upsert${g}`,f=this.domain+w,b=(j||window.Cookies).get("_saasquatch");return b&&(d.cookies=b),Ie(f,JSON.stringify(d),r)}render(t){const n=se(t),{widgetType:i,engagementMedium:s="POPUP",jwt:r,user:a}=n,d=encodeURIComponent(this.tenantAlias),c=a!=null&&a.accountId?encodeURIComponent(a.accountId):null,h=a!=null&&a.id?encodeURIComponent(a.id):null,p=n.locale??xe(navigator.language.replace(/\-/g,"_")),g=`/api/v1/${d}/graphql`,w=this.domain+g;return new Promise(async(f,b)=>{var x;try{const y=await Ce(w,_e,{user:h&&c?{id:h,accountId:c}:null,engagementMedium:s,widgetType:i,locale:p},r);f((x=y==null?void 0:y.data)==null?void 0:x.renderWidget)}catch(y){b(y)}})}async squatchReferralCookie(){const t=encodeURIComponent(this.tenantAlias),e=(j||window.Cookies).get("_saasquatch")||"",n=e?`?cookies=${encodeURIComponent(e)}`:"",i=`${this.domain}/a/${t}/widgets/squatchcookiejson${n}`,s=await Ae(i);return Promise.resolve({...s,encodedCookie:e})}}function Te({widgetType:o,engagementMedium:t,locale:e}){const n=new URLSearchParams;return n.append("engagementMedium",t),o&&n.append("widgetType",o),e&&n.append("locale",e),`?${n.toString()}`}/*!
16
16
  * domready (c) Dustin Diaz 2014 - License MIT
17
17
  *
18
- */function ee(o,t){let e=[],n,i=o,s=i.documentElement.doScroll,a="DOMContentLoaded",r=(s?/^loaded|^c/:/^loaded|^i|^c/).test(i.readyState);return r||i.addEventListener(a,n=()=>{for(i.removeEventListener(a,n),r=!0;n=e.shift();)n()}),r?setTimeout(t,0):e.push(t)}function N({value:o,unit:t}){switch(t){case"px":return`${o}px`;case"%":return`${o}%`;default:return`${o}px`}}class se{constructor(t){l(this,"domain");var i;const n=Ce(t);this.domain=(n==null?void 0:n.domain)||((i=K())==null?void 0:i.domain)||A}pushAnalyticsLoadEvent(t){if(!t.externalUserId||!t.externalAccountId)return;const e=encodeURIComponent(t.tenantAlias),n=encodeURIComponent(t.externalAccountId),i=encodeURIComponent(t.externalUserId),s=encodeURIComponent(t.engagementMedium),a=t.programId?`&programId=${encodeURIComponent(t.programId)}`:"",r=`/a/${e}/widgets/analytics/loaded?externalAccountId=${n}&externalUserId=${i}&engagementMedium=${s}${a}`,d=this.domain+r;return Z(d,JSON.stringify({}))}pushAnalyticsShareClickedEvent(t){const e=encodeURIComponent(t.tenantAlias),n=encodeURIComponent(t.externalAccountId),i=encodeURIComponent(t.externalUserId),s=encodeURIComponent(t.engagementMedium),a=encodeURIComponent(t.shareMedium),r=`/a/${e}/widgets/analytics/shared?externalAccountId=${n}&externalUserId=${i}&engagementMedium=${s}&shareMedium=${a}`,d=this.domain+r;return Z(d,JSON.stringify({}))}}function Ce(o){if(!I(o))throw new Error("'options' should be an object");return o}const y=k("squatch-js:widget");class ae{constructor(t){l(this,"type");l(this,"content");l(this,"analyticsApi");l(this,"widgetApi");l(this,"context");l(this,"npmCdn");l(this,"container");l(this,"loadEventListener",null);var e;y("widget initializing ..."),this.content=t.content==="error"?this._error(t.rsCode):t.content,this.type=t.type,this.widgetApi=t.api,this.npmCdn=t.npmCdn,this.analyticsApi=new se({domain:t.domain}),this.context=t.context,this.container=((e=t.context)==null?void 0:e.container)||t.container}_findElement(){let t;if(typeof this.container=="string"?(t=document.querySelector(this.container),y("loading widget with selector",t)):this.container instanceof HTMLElement?(t=this.container,y("loading widget with container",t)):this.container?(t=null,y("container must be an HTMLElement or string",this.container)):(t=document.querySelector("#squatchembed")||document.querySelector(".squatchembed")||document.querySelector("#impactembed")||document.querySelector(".impactembed"),y("loading widget with default selector",t)),!(t instanceof HTMLElement))throw new Error(`element with selector '${this.container||"#squatchembed, .squatchembed, #impactembed, or .impactembed"}' not found.'`);return t}_createFrame(t){const e=document.createElement("iframe");return e.squatchJsApi=this,e.id="squatchFrame",e.width="100%",e.src="about:blank",e.scrolling="no",e.setAttribute("style","border: 0; background-color: none; width: 1px; min-width: 100%;"),t!=null&&t.minWidth&&(e.style.minWidth=t.minWidth),t!=null&&t.maxWidth&&(e.style.maxWidth=t.maxWidth),(t!=null&&t.maxWidth||t!=null&&t.minWidth)&&(e.style.width="100%"),t!=null&&t.initialHeight&&(e.height=t.initialHeight),e}_findFrame(){const t=this.container?this._findElement():document.body;return(t.shadowRoot||t).querySelector("iframe#squatchFrame")}_detachLoadEventListener(t){this.loadEventListener&&(t.removeEventListener("sq:user-registration",this.loadEventListener),this.loadEventListener=null)}_attachLoadEventListener(t,e){this.loadEventListener===null&&(this.loadEventListener=n=>{this._loadEvent({...e,userId:n.detail.userId,accountId:n.detail.accountId})},t.addEventListener("sq:user-registration",this.loadEventListener))}_loadEvent(t){var n;if(!t)return;if(!I(t))throw new Error("Widget Load event identity property is not an object");let e;if("programId"in t){if(!t.tenantAlias||!t.accountId||!t.userId||!t.engagementMedium)throw new Error("Widget Load event missing required properties");e={tenantAlias:t.tenantAlias,externalAccountId:t.accountId,externalUserId:t.userId,engagementMedium:t.engagementMedium,programId:t.programId}}else{const{analytics:i,mode:s}=t;e={tenantAlias:i.attributes.tenant,externalAccountId:i.attributes.accountId,externalUserId:i.attributes.userId,engagementMedium:s.widgetMode}}(n=this.analyticsApi.pushAnalyticsLoadEvent(e))==null||n.then(i=>{y(`${e.engagementMedium} loaded event recorded.`)}).catch(i=>{y(`ERROR: pushAnalyticsLoadEvent() ${i}`)})}_shareEvent(t,e){t&&this.analyticsApi.pushAnalyticsShareClickedEvent({tenantAlias:t.analytics.attributes.tenant,externalAccountId:t.analytics.attributes.accountId,externalUserId:t.analytics.attributes.userId,engagementMedium:t.mode.widgetMode,shareMedium:e}).then(n=>{y(`${t.mode.widgetMode} share ${e} event recorded. ${n}`)}).catch(n=>{y(`ERROR: pushAnalyticsShareClickedEvent() ${n}`)})}_error(t,e="modal",n=""){return`<!DOCTYPE html>
19
- <!--[if IE 7]><html class="ie7 oldie" lang="en"><![endif]-->
20
- <!--[if IE 8]><html class="ie8 oldie" lang="en"><![endif]-->
21
- <!--[if gt IE 8]><!--><html lang="en"><!--<![endif]-->
22
- <head>
23
- <link rel="stylesheet" media="all" href="https://fast.ssqt.io/assets/css/widget/errorpage.css">
24
- <style>
25
- ${n}
26
- </style>
27
- </head>
28
- <body>
29
-
30
- <div class="squatch-container ${e}" style="width:100%">
31
- <div class="errorheader">
32
- <button type="button" class="close" onclick="window.frameElement.squatchJsApi.close();">&times;</button>
33
- <p class="errortitle">Error</p>
34
- </div>
35
- <div class="errorbody">
36
- <div class="sadface"><img src="https://fast.ssqt.io/assets/images/face.png"></div>
37
- <h4>Our referral program is temporarily unavailable.</h4><br>
38
- <p>Please reload the page or check back later.</p>
39
- <p>If the persists please contact our support team.</p>
40
- <br>
41
- <br>
42
- <div class="right-align errtxt">
43
- Error Code: ${t}
44
- </div>
45
- </div>
46
- </div>
47
- </body>
48
- </html>`}async _findInnerContainer(t){const{contentWindow:e}=t;if(!e)throw new Error("Squatch.js frame inner frame is empty");const n=e.document;function i(){const a=n.getElementsByTagName("sqh-global-container"),r=n.getElementsByClassName("squatch-container");return a.length>0?a[0]:r.length>0?r[0]:null}let s=null;for(let a=0;a<5&&(s=i(),!s);a++)await Ae(100);return s||n.body}reload({email:t,firstName:e,lastName:n},i){const s=this._findFrame();if(!s)throw new Error("Could not find widget iframe");const a=s.contentWindow,r=this.context.engagementMedium||"POPUP";if(!a)throw new Error("Frame needs a content window");let d;if(this.context.type==="upsert"){if(!this.context.user)throw new Error("Can't reload without user ids");let c={email:t||null,firstName:e||null,lastName:n||null,id:this.context.user.id,accountId:this.context.user.accountId};d=this.widgetApi.upsertUser({user:c,engagementMedium:r,widgetType:this.type,jwt:i})}else if(this.context.type==="passwordless")d=this.widgetApi.render({user:void 0,engagementMedium:r,widgetType:this.type,jwt:void 0});else throw new Error("can't reload an error widget");d.then(({template:c})=>{c&&(this.content=c,this.__deprecated__register(s,{email:t,engagementMedium:r},()=>{this.load(),r==="POPUP"&&this.open()}))}).catch(({message:c})=>{y(`${c}`)})}__deprecated__register(t,e,n){const s=t.contentWindow.document,a=s.createElement("button"),r=s.getElementsByClassName("squatch-register")[0];if(r){a.className="btn btn-primary",a.id="show-stats-btn",a.textContent=this.type==="REFERRER_WIDGET"?"Show Stats":"Show Reward";const d=e.engagementMedium==="POPUP"?"margin-top: 10px; max-width: 130px; width: 100%;":"margin-top: 10px;";a.setAttribute("style",d),a.onclick=n,r.style.paddingTop="30px",r.innerHTML=`<p><strong>${e.email}</strong><br>Has been successfully registered</p>`,r.appendChild(a)}}}function Ae(o){return new Promise(t=>{setTimeout(t,o)})}const _=k("squatch-js:EMBEDwidget");class q extends ae{constructor(e,n){super(e);l(this,"show",this.open);l(this,"hide",this.close);n&&(this.container=n)}async load(){var m,f,w,b,M,E,ge;const e=(f=(m=this.context.widgetConfig)==null?void 0:m.values)==null?void 0:f.brandingConfig,n=e==null?void 0:e.loadingHeight,i=(w=e==null?void 0:e.widgetSize)==null?void 0:w.embeddedWidgets,s=i!=null&&i.maxWidth?N(i.maxWidth):"",a=i!=null&&i.minWidth?N(i.minWidth):"",r=this._createFrame({minWidth:a,maxWidth:s,initialHeight:n}),d=this._findElement();(b=this.context)!=null&&b.container&&(d.style.visibility="hidden",d.style.height="0",d.style["overflow-y"]="hidden"),this.container?d.shadowRoot?((M=d.shadowRoot.lastChild)==null?void 0:M.nodeName)==="IFRAME"?d.shadowRoot.replaceChild(r,d.shadowRoot.lastChild):d.shadowRoot.appendChild(r):d.firstChild?d.replaceChild(r,d.firstChild):d.appendChild(r):(!d.firstChild||d.firstChild.nodeName==="#text")&&d.appendChild(r);const{contentWindow:c}=r;if(!c)throw new Error("Frame needs a content window");const h=c.document;h.open();const p=this.widgetApi.domain;h.write(`
49
- ${(E=e==null?void 0:e.main)!=null&&E.brandFont?`
50
- <link rel="preconnect" href="https://fast${p==="https://staging.referralsaasquatch.com"&&"-staging"}.ssqt.io">
51
- <link rel="preconnect" href="https://fonts.gstatic.com">
52
- <link rel="preconnect" href="https://fonts.googleapis.com">
53
- <link rel="preload" href="https://fonts.googleapis.com/css2?family=${encodeURIComponent((ge=e==null?void 0:e.main)==null?void 0:ge.brandFont)}" as="style">`:""}
54
- <link rel="dns-prefetch" href="https://res.cloudinary.com">
55
- <link rel="preconnect" href="https://res.cloudinary.com" crossorigin>
56
- <style data-styles>
57
- html { visibility:hidden;}
58
- </style>
59
- ${this.content}
60
-
61
- `),h.close(),ee(h,async()=>{const me=c.squatch||c.widgetIdent;r.height=n||h.body.scrollHeight;const Ge=new ResizeObserver(Xe=>{for(const Qe of Xe){const{height:Ye}=Qe.contentRect;r.height=Ye}}),Ve=await this._findInnerContainer(r);Ge.observe(Ve),this._shouldFireLoadEvent()?(this._loadEvent(me),_("loaded")):h&&this._attachLoadEventListener(h,me)})}open(){const e=this._findFrame();if(!e)return _("no target element to open");if(!e.contentWindow)return _("Frame needs a content window");const n=this._findElement();n.style.visibility="unset",n.style.height="auto",n.style["overflow-y"]="auto",e.contentWindow.document.dispatchEvent(new CustomEvent("sq:refresh"));const i=e.contentWindow.squatch||e.contentWindow.widgetIdent;if(this.context.user)this._loadEvent(i),_("loaded");else{if(!e.contentDocument)return;this._attachLoadEventListener(e.contentDocument,i)}}close(){const e=this._findFrame();if(!e)return _("no target element to close");e.contentDocument&&this._detachLoadEventListener(e.contentDocument);const n=this._findElement();n.style.visibility="hidden",n.style.height="0",n.style["overflow-y"]="hidden",_("Embed widget closed")}_error(e,n="embed",i=""){return super._error(e,n,i)}_shouldFireLoadEvent(){const e=!this.container,n=this.container instanceof HTMLElement&&(this.container.tagName.startsWith("SQUATCH-")||this.container.tagName.startsWith("IMPACT-"));return!!this.context.user&&(e||n)}}const $=k("squatch-js:POPUPwidget");let F=0;class R extends ae{constructor(e,n=".squatchpop"){super(e);l(this,"trigger");l(this,"id");l(this,"show",this.open);l(this,"hide",this.close);this.trigger=n,this.container?this.id="squatchModal":(this.id=F===0?"squatchModal":`squatchModal__${F}`,F=F+1),document.head.insertAdjacentHTML("beforeend",`<style>#${this.id}::-webkit-scrollbar { display: none; }</style>`)}_initialiseCTA(){if(!this.trigger)return;let e;try{e=document.querySelector(this.trigger)||document.querySelector(".impactpop"),this.trigger&&!e&&$("No element found with trigger selector",this.trigger)}catch{$("Not a valid selector",this.trigger)}e&&(e.onclick=()=>{this.open()})}_createPopupDialog(e){var d;const n=document.createElement("dialog"),i=(d=e==null?void 0:e.widgetSize)==null?void 0:d.popupWidgets,s=i!=null&&i.minWidth?N(i.minWidth):"auto",a=i!=null&&i.maxWidth?N(i.maxWidth):"500px";n.id=this.id,n.setAttribute("style",`width: 100%; min-width: ${s}; max-width: ${a}; border: none; padding: 0;`);const r=c=>{c.stopPropagation(),c.target===n&&n.close()};return n.addEventListener("click",r),n}async load(){var p,m,f,w,b;const e=(m=(p=this.context.widgetConfig)==null?void 0:p.values)==null?void 0:m.brandingConfig,n=e==null?void 0:e.loadingHeight,i=this._createFrame({initialHeight:n});this._initialiseCTA();const s=this.container?this._findElement():document.body,a=s.shadowRoot||s,r=this._createPopupDialog(e);r.appendChild(i),((f=a.lastChild)==null?void 0:f.nodeName)==="DIALOG"?a.replaceChild(r,a.lastChild):a.appendChild(r);const{contentWindow:d}=i;if(!d)throw new Error("Frame needs a content window");const c=d.document;c.open();const h=this.widgetApi.domain;c.write(`
62
- ${(w=e==null?void 0:e.main)!=null&&w.brandFont?`
63
- <link rel="preconnect" href="https://fast${h==="https://staging.referralsaasquatch.com"&&"-staging"}.ssqt.io">
64
- <link rel="preconnect" href="https://fonts.gstatic.com">
65
- <link rel="preconnect" href="https://fonts.googleapis.com">
66
- <link rel="preload" href="https://fonts.googleapis.com/css2?family=${encodeURIComponent((b=e==null?void 0:e.main)==null?void 0:b.brandFont)}" as="style">`:""}
67
- <link rel="dns-prefetch" href="https://res.cloudinary.com">
68
- <link rel="preconnect" href="https://res.cloudinary.com" crossorigin>
69
- <style data-styles>
70
- html { visibility:hidden;}
71
- </style>
72
- ${this.content}
73
-
74
- `),c.close(),$("Popup template loaded into iframe"),await this._setupResizeHandler(i,n)}async _setupResizeHandler(e,n){const{contentWindow:i}=e;if(!i)throw new Error("Frame needs a content window");const s=i.document;ee(s,async()=>{s.body.style.overflowY="hidden",e.height=n||s.body.offsetHeight,new ResizeObserver(r=>{for(const d of r){const{top:c,bottom:h}=d.contentRect,p=h+c;e.height=p+"",d.target.style=""}}).observe(await this._findInnerContainer(e))})}open(){const e=this.container?this._findElement():document.body,i=(e.shadowRoot||e).querySelector(`#${this.id}`);if(!i)throw new Error("Could not determine container div");i.showModal();const s=this._findFrame();if(!s)throw new Error("Could not find iframe");const{contentWindow:a}=s;if(!a)throw new Error("Squatch.js has an empty iframe");const r=a.document;ee(r,()=>{var c;const d=a.squatch||a.widgetIdent;(c=s.contentDocument)==null||c.dispatchEvent(new CustomEvent("sq:refresh")),this.context.user?(this._loadEvent(d),$("Popup opened")):this._attachLoadEventListener(r,d)})}close(){const e=this._findFrame();e!=null&&e.contentDocument&&this._detachLoadEventListener(e.contentDocument);const n=this.container?this._findElement():document.body,s=(n.shadowRoot||n).querySelector(`#${this.id}`);if(!s)throw new Error("Could not determine container div");s.close(),$("Popup closed")}_clickedOutside({target:e}){}_error(e,n="modal",i=""){return super._error(e,n,i||"body { margin: 0; } .modal { box-shadow: none; border: 0; }")}}const v=k("squatch-js:widgets");class U{constructor(t){l(this,"api");l(this,"tenantAlias");l(this,"domain");l(this,"npmCdn");const e=T(t);this.tenantAlias=e.tenantAlias,this.domain=e.domain,this.npmCdn=e.npmCdn,this.api=new D(e)}async upsertUser(t){const n=ie(t);try{const i=await this.api.upsertUser(n);return{widget:this._renderWidget(i,n,{type:"upsert",user:n.user,engagementMedium:t.engagementMedium,container:t.container,trigger:t.trigger,widgetConfig:{values:{brandingConfig:i==null?void 0:i.brandingConfig}}}),user:i.user}}catch(i){throw v(i),i.apiErrorCode&&this._renderErrorWidget(i,t.engagementMedium),new Error(i)}}async render(t){const n=oe(t);try{const i=await this.api.render(n);return{widget:this._renderWidget(i,n,{type:"passwordless",engagementMedium:n.engagementMedium,container:n.container,trigger:n.trigger,widgetConfig:i==null?void 0:i.widgetConfig}),user:i.user}}catch(i){throw i.apiErrorCode&&this._renderErrorWidget(i,n.engagementMedium),new Error(i)}}async autofill(t){const e=t;if(typeof e=="function"){try{const s=await this.api.squatchReferralCookie();e(s)}catch(s){throw v("Autofill error",s),new Error(s)}return}if(typeof e!="string")throw new Error("Autofill accepts a string or function");let n=document.querySelectorAll(e),i;if(n.length>0)i=n[0];else throw v("Element id/class or function missing"),new Error("Element id/class or function missing");try{const s=await this.api.squatchReferralCookie();i.value=s.codes[0]}catch(s){throw new Error(s)}}_renderWidget(t,e,n){var d;if(v("Rendering Widget..."),!t)throw new Error("Unable to get a response");let i,s=!!e.displayOnLoad;const a=t.jsOptions||{},r={content:t.template,type:e.widgetType||((d=a.widget)==null?void 0:d.defaultWidgetType),api:this.api,domain:this.domain,npmCdn:this.npmCdn,context:n};return a.widgetUrlMappings&&a.widgetUrlMappings.forEach(c=>{var h,p;U._matchesUrl(c.url)&&(c.widgetType!=="CONVERSION_WIDGET"||(p=(h=t.user)==null?void 0:h.referredBy)!=null&&p.code?(s=c.displayOnLoad,v(`Display ${c.widgetType} on ${c.url}`)):v(`Don't display ${c.widgetType} when no referral on widget rule match ${c.url}`))}),a.fuelTankAutofillUrls&&(v("We found a fuel tank autofill!"),a.fuelTankAutofillUrls.forEach(({url:c,formSelector:h})=>{var p,m,f;if(U._matchesUrl(c)&&(v("Fuel Tank URL matches"),(m=(p=t.user)==null?void 0:p.referredBy)!=null&&m.code)){const w=document.querySelector(h);w?w.value=((f=t.user.referredBy.referredReward)==null?void 0:f.fuelTankCode)||"":v(new Error(`Element with id/class ${h} was not found.`))}})),e.engagementMedium==="EMBED"?i=this._renderEmbedWidget(r):(i=this._renderPopupWidget(r),s&&i.open()),i}_renderPopupWidget(t){const e=new R(t,t.context.trigger);return e.load(),e}_renderEmbedWidget(t){const e=new q(t,t.context.container);return e.load(),e}_renderErrorWidget(t,e="POPUP"){const{apiErrorCode:n,rsCode:i,message:s}=t;v(new Error(`${n} (${i}) ${s}`));const a={content:"error",rsCode:i,api:this.api,domain:this.domain,npmCdn:this.npmCdn,type:"ERROR_WIDGET",context:{type:"error"}};let r;e==="EMBED"?(r=new q(a),r.load()):e==="POPUP"&&(r=new R(a),r.load())}static _matchesUrl(t){return!!window.location.href.match(new RegExp(t))}}class Ie{constructor(t){l(this,"tenantAlias");l(this,"domain");const n=T(t);this.tenantAlias=n.tenantAlias,this.domain=n.domain}track(t,e){const n=t,i=e,s=_e(n),{jwt:a}=Te(i),r=encodeURIComponent(this.tenantAlias),d=encodeURIComponent(s.userId),c=encodeURIComponent(s.accountId),h=`/api/v1/${r}/open/account/${c}/user/${d}/events`,p=this.domain+h;return Z(p,JSON.stringify(s),a)}}function _e(o){if(!I(o))throw new Error("tracking parameter must be an object");if(!(o!=null&&o.accountId))throw new Error("accountId field is required");if(!(o!=null&&o.events))throw new Error("events field is required");if(!(o!=null&&o.userId))throw new Error("userId field is required");const t=o;if(!Array.isArray(t.events))throw new Error("'events' should be an array");return t}function Te(o){if(!I(o))throw new Error("'options' should be an object");return o}function We(){var i;const o=window[Y]?Y:j,t=((i=window["_"+o])==null?void 0:i.ready)||[],e=window.impactOnReady||window.squatchOnReady,n=[...t,e].filter(s=>!!s);setTimeout(()=>{window[j]&&(window[Y]=window[j],n.forEach(s=>s()),window[j]._auto(),window["_"+o]=void 0,delete window["_"+o])},0)}const x=k("squatch-js"),re=o=>typeof o=="object"&&!Array.isArray(o),de=(o,t)=>{const e=i=>re(t[i])&&o.hasOwnProperty(i)&&re(o[i]),n=Object.getOwnPropertyNames(t).map(i=>({[i]:e(i)?de(o[i],t[i]):t[i]})).reduce((i,s)=>({...i,...s}),{});return{...o,...n}};function H(o){const t=atob(o.replace(/_/g,"/").replace(/-/g,"+")),e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return new TextDecoder("utf8").decode(e)}function ce(o){const t=new TextEncoder().encode(o),e=Array.from(t,n=>String.fromCodePoint(n)).join("");return btoa(e).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function qe(){var o,t,e="weird_get_top_level_domain=cookie",n=document.location.hostname.split(".");for(o=n.length-1;o>=0;o--)if(t=n.slice(o).join("."),document.cookie=e+";domain=."+t+";",document.cookie.indexOf(e)>-1)return document.cookie=e.split("=")[0]+"=;domain=."+t+";expires=Thu, 01 Jan 1970 00:00:01 GMT;",t}function $e(){const o=window.location.search,e=new URLSearchParams(o).get("_saasquatch")||"";if(e){let n="",i="",s="";try{n=JSON.parse(H(e))}catch(a){x("Unable to decode params",a);return}try{i=JSON.parse(H(O.get("_saasquatch"))),x("existing cookie",i)}catch(a){x("Unable to retrieve cookie",a)}try{const a=qe();if(x("domain retrieved:",a),i){const r=de(i,n);s=ce(JSON.stringify(r)),x("cookie to store:",r)}else s=ce(JSON.stringify(n)),x("cookie to store:",n);O.set("_saasquatch",s,{expires:365,secure:!1,sameSite:"Lax",domain:a,path:"/"})}catch(a){x("Unable to set cookie",a)}}}const J=k("squatch-js");function Re(){var p;const o=window.location.search,e=new URLSearchParams(o).get("_saasquatchExtra")||"";if(!e){J("No _saasquatchExtra param");return}const n=T({tenantAlias:"UNKNOWN"});if(!n.domain){J("domain must be provided in config to use _saasquatchExtra");return}let i;try{i=JSON.parse(H(e))}catch{J("Unable to decode _saasquatchExtra config");return}function s(m){return m.replace(/^https?:\/\//,"")}const a=s(n.domain),r=Object.keys((i==null?void 0:i[a])||{})[0],d=(p=i==null?void 0:i[a])==null?void 0:p[r];if(!d){J("_saasquatchExtra did not have an expected structure");return}const{autoPopupWidgetType:c,...h}=d;return{widgetConfig:{widgetType:c,displayOnLoad:!0,...h},squatchConfig:{...n,tenantAlias:r}}}const Ue=k("squatch-js:decodeUserJwt");function Pe(o){var t;try{const e=o.split(".")[1];if(e===void 0)return null;const n=H(e);return(t=JSON.parse(n))==null?void 0:t.user}catch(e){return Ue(e),null}}const le=k("squatch-js:DeclarativeWidget");class he extends HTMLElement{constructor(){super();l(this,"config");l(this,"token");l(this,"tenant");l(this,"widgetType");l(this,"locale");l(this,"widgetApi");l(this,"analyticsApi");l(this,"widgetInstance");l(this,"type");l(this,"container");l(this,"element");l(this,"loaded");l(this,"_setWidget",(e,n)=>{var s;const i={api:this.widgetApi,content:e.template,context:{type:n.type,user:n.user,container:this.container||void 0,engagementMedium:this.type,widgetConfig:e.widgetConfig},type:this.widgetType,domain:((s=this.config)==null?void 0:s.domain)||A,npmCdn:Q,container:this};if(this.type==="EMBED")return new q(i);{const a=this.firstChild?null:void 0;return new R(i,a)}});l(this,"setErrorWidget",e=>{var i;const n={api:this.widgetApi,content:"error",context:{type:"error",container:this.container||void 0},type:"ERROR_WIDGET",domain:((i=this.config)==null?void 0:i.domain)||A,npmCdn:Q,container:this};if(this.type==="EMBED")return new q(n);{const s=this.firstChild?null:void 0;return new R(n,s)}});l(this,"reload",this.renderWidget);l(this,"show",this.open);l(this,"hide",this.close);this.attachShadow({mode:"open"}).innerHTML="<style>:host { display: block; }</style><slot></slot>",this.config=K(),this.token=W(),this.tenant=window.squatchTenant,this.container=this}_setupApis(e){var n,i;if(!this.tenant)throw new Error("tenantAlias not provided");this.widgetApi=new D({tenantAlias:(e==null?void 0:e.tenantAlias)||this.tenant,domain:(e==null?void 0:e.domain)||((n=this.config)==null?void 0:n.domain)||A}),this.analyticsApi=new se({domain:(e==null?void 0:e.domain)||((i=this.config)==null?void 0:i.domain)||A})}getWidgetType(e){return e&&(e.includes("websiteReferralWidget")||e.includes("friendWidget"))?"instant-access":"verified-access"}async renderPasswordlessVariant(){return this._setupApis(),le("Rendering as an Instant Access widget"),await this.widgetApi.render({engagementMedium:this.type,widgetType:this.widgetType,locale:this.locale}).then(e=>this._setWidget(e,{type:"passwordless"})).catch(this.setErrorWidget)}async renderUserUpsertVariant(){this._setupApis();const e=Pe(this.token);return e?(le("Rendering as a Verified widget"),await this.widgetApi.upsertUser({user:e,locale:this.locale,engagementMedium:this.type,widgetType:this.widgetType,jwt:this.token}),await this.widgetApi.render({locale:this.locale,engagementMedium:this.type,widgetType:this.widgetType}).then(i=>this._setWidget(i,{type:"upsert",user:e})).catch(this.setErrorWidget)):this.setErrorWidget(Error("No user object in token."))}async getWidgetInstance(){let e;if(this.widgetType=this.getAttribute("widget")||void 0,this.locale=this.getAttribute("locale")||this.locale,!this.widgetType)throw new Error("No widget has been specified");return this.token?e=await this.renderUserUpsertVariant():e=await this.renderPasswordlessVariant(),this.widgetInstance=e,this.widgetInstance&&this.dispatchEvent(new CustomEvent("sq:widget-loaded")),e}async renderWidget(){await this.getWidgetInstance(),await this.widgetInstance.load()}open(){if(!this.widgetInstance)throw new Error("Widget has not loaded yet");this.widgetInstance.open()}close(){if(!this.widgetInstance)throw new Error("Widget has not loaded yet");this.widgetInstance.close()}static get observedAttributes(){return["widget","locale"]}attributeChangedCallback(e,n,i){if(!(n===i||!this.loaded))switch(e){case"locale":case"widget":this.connectedCallback();break}}async connectedCallback(){this.loaded=!0,this.container=this.getAttribute("container"),this.widgetType=this.getAttribute("widget")||void 0;const e=this.getWidgetType(this.widgetType),{getSkeleton:n}=await Promise.resolve().then(()=>ze),i=n({height:"100%",type:e}),s=document.createElement("div");s.id="loading-skeleton",s.innerHTML=i;const a=this.shadowRoot||this.attachShadow({mode:"open"});if(this.type==="POPUP"){const d=a.getElementById("#squatchModal");d&&(d.innerHTML="",d.appendChild(s))}else a.innerHTML="",a.appendChild(s);await this.renderWidget();const r=a.getElementById("loading-skeleton");r&&r.remove(),this.getAttribute("open")!==null&&this.open()}}class te extends he{constructor(){super(),this.type="EMBED",this.loaded=!1}}class ne extends he{constructor(){super(),this.type="POPUP",this.loaded=!1,this.addEventListener("click",t=>{t.stopPropagation(),this.open()})}}class Se extends te{}class Me extends ne{}class Le extends te{}class Oe extends ne{}window.customElements.get("squatch-embed")||window.customElements.define("squatch-embed",Se),window.customElements.get("impact-embed")||window.customElements.define("impact-embed",Le),window.customElements.get("squatch-popup")||window.customElements.define("squatch-popup",Me),window.customElements.get("impact-popup")||window.customElements.define("impact-popup",Oe);function je(){console.log("Having trouble using Squatch.js? Go to https://docs.referralsaasquatch.com/developer/ for tutorials, references and error codes.")}const P=k("squatch-js");let B=null,z=null,G=null;function De(){return B||S({}),B}function V(){return z||S({}),z}function Ne(){return G||S({}),G}function Fe(o){var t;return(t=V())==null?void 0:t.render(o)}function He(){var t;const o=Re();if(o){const{squatchConfig:e,widgetConfig:n}=o;return S(e),(t=V())==null?void 0:t.render(n)}}function S(o){const e=T(o);e.tenantAlias.match("^test")||e.debug?C("squatch-js*"):fe(),P("initializing ..."),B=new D(e),z=new U(e),G=new Ie(e),P("Widget API instance",B),P("Widgets instance",z),P("Events API instance",G)}function Je(o){o()}function Be(o){V().autofill(o)}function ue(){$e()}typeof document<"u"&&!window.SaaSquatchDoNotAutoDrop&&ue(),(pe=window.squatch)!=null&&pe.init&&P("Squatchjs is being loaded more than once. This may lead to multiple load events being sent, duplicated widgets, and inaccurate analytics."),typeof document<"u"&&We();const ze=Object.freeze(Object.defineProperty({__proto__:null,getSkeleton:({type:o="verified-access",height:t="500px",skeletonBackgroundColor:e="#e0e0e0",skeletonShimmerColor:n="#f5f5f5"})=>`
18
+ */function te(o,t){let e=[],n,i=o,s=i.documentElement.doScroll,r="DOMContentLoaded",a=(s?/^loaded|^c/:/^loaded|^i|^c/).test(i.readyState);return a||i.addEventListener(r,n=()=>{for(i.removeEventListener(r,n),a=!0;n=e.shift();)n()}),a?setTimeout(t,0):e.push(t)}function F({value:o,unit:t}){switch(t){case"px":return`${o}px`;case"%":return`${o}%`;default:return`${o}px`}}class re{constructor(t){l(this,"domain");var i;const n=We(t);this.domain=(n==null?void 0:n.domain)||((i=Z())==null?void 0:i.domain)||I}pushAnalyticsLoadEvent(t){if(!t.externalUserId||!t.externalAccountId)return;const e=encodeURIComponent(t.tenantAlias),n=encodeURIComponent(t.externalAccountId),i=encodeURIComponent(t.externalUserId),s=encodeURIComponent(t.engagementMedium),r=t.programId?`&programId=${encodeURIComponent(t.programId)}`:"",a=`/a/${e}/widgets/analytics/loaded?externalAccountId=${n}&externalUserId=${i}&engagementMedium=${s}${r}`,d=this.domain+a;return ee(d,JSON.stringify({}))}pushAnalyticsShareClickedEvent(t){const e=encodeURIComponent(t.tenantAlias),n=encodeURIComponent(t.externalAccountId),i=encodeURIComponent(t.externalUserId),s=encodeURIComponent(t.engagementMedium),r=encodeURIComponent(t.shareMedium),a=`/a/${e}/widgets/analytics/shared?externalAccountId=${n}&externalUserId=${i}&engagementMedium=${s}&shareMedium=${r}`,d=this.domain+a;return ee(d,JSON.stringify({}))}}function We(o){if(!_(o))throw new Error("'options' should be an object");return o}const ae=({type:o="verified-access",height:t="500px"})=>{const e="#e0e0e0";return`
75
19
  <style>
76
20
  * {
77
21
  box-sizing: border-box;
@@ -97,7 +41,7 @@
97
41
  background: linear-gradient(
98
42
  90deg,
99
43
  ${e} 25%,
100
- ${n} 50%,
44
+ #f5f5f5 50%,
101
45
  ${e} 75%
102
46
  );
103
47
  background-size: 200% 100%;
@@ -319,5 +263,70 @@
319
263
  </div>
320
264
  `}
321
265
  </div>
322
- `},Symbol.toStringTag,{value:"Module"}));u.DeclarativeEmbedWidget=te,u.DeclarativePopupWidget=ne,u.EmbedWidget=q,u.PopupWidget=R,u.WidgetApi=D,u.Widgets=U,u._auto=He,u.api=De,u.autofill=Be,u.events=Ne,u.help=je,u.init=S,u.pushCookie=ue,u.ready=Je,u.widget=Fe,u.widgets=V,Object.defineProperty(u,Symbol.toStringTag,{value:"Module"})});
266
+ `},$e=Object.freeze(Object.defineProperty({__proto__:null,getSkeleton:ae},Symbol.toStringTag,{value:"Module"})),v=E("squatch-js:widget");class de{constructor(t){l(this,"type");l(this,"content");l(this,"analyticsApi");l(this,"widgetApi");l(this,"context");l(this,"npmCdn");l(this,"container");l(this,"loadEventListener",null);var e;v("widget initializing ..."),this.content=t.content==="error"?this._error(t.rsCode):t.content,this.type=t.type,this.widgetApi=t.api,this.npmCdn=t.npmCdn,this.analyticsApi=new re({domain:t.domain}),this.context=t.context,this.container=((e=t.context)==null?void 0:e.container)||t.container}_findElement(){let t;if(typeof this.container=="string"?(t=document.querySelector(this.container),v("loading widget with selector",t)):this.container instanceof HTMLElement?(t=this.container,v("loading widget with container",t)):this.container?(t=null,v("container must be an HTMLElement or string",this.container)):(t=document.querySelector("#squatchembed")||document.querySelector(".squatchembed")||document.querySelector("#impactembed")||document.querySelector(".impactembed"),v("loading widget with default selector",t)),!(t instanceof HTMLElement))throw new Error(`element with selector '${this.container||"#squatchembed, .squatchembed, #impactembed, or .impactembed"}' not found.'`);return t}_createFrame(t){const e=document.createElement("iframe");return e.squatchJsApi=this,e.id="squatchFrame",e.width="100%",e.src="about:blank",e.scrolling="no",e.setAttribute("style","border: 0; background-color: none; width: 1px; min-width: 100%; display: block;"),t!=null&&t.minWidth&&(e.style.minWidth=t.minWidth),t!=null&&t.maxWidth&&(e.style.maxWidth=t.maxWidth),(t!=null&&t.maxWidth||t!=null&&t.minWidth)&&(e.style.width="100%"),t!=null&&t.initialHeight&&(e.height=String(t.initialHeight)),e}_findFrame(){const t=this.container?this._findElement():document.body;return(t.shadowRoot||t).querySelector("iframe#squatchFrame")}_detachLoadEventListener(t){this.loadEventListener&&(t.removeEventListener("sq:user-registration",this.loadEventListener),this.loadEventListener=null)}_attachLoadEventListener(t,e){this.loadEventListener===null&&(this.loadEventListener=n=>{this._loadEvent({...e,userId:n.detail.userId,accountId:n.detail.accountId})},t.addEventListener("sq:user-registration",this.loadEventListener))}_loadEvent(t){var n;if(!t)return;if(!_(t))throw new Error("Widget Load event identity property is not an object");let e;if("programId"in t){if(!t.tenantAlias||!t.accountId||!t.userId||!t.engagementMedium)throw new Error("Widget Load event missing required properties");e={tenantAlias:t.tenantAlias,externalAccountId:t.accountId,externalUserId:t.userId,engagementMedium:t.engagementMedium,programId:t.programId}}else{const{analytics:i,mode:s}=t;e={tenantAlias:i.attributes.tenant,externalAccountId:i.attributes.accountId,externalUserId:i.attributes.userId,engagementMedium:s.widgetMode}}(n=this.analyticsApi.pushAnalyticsLoadEvent(e))==null||n.then(i=>{v(`${e.engagementMedium} loaded event recorded.`)}).catch(i=>{v(`ERROR: pushAnalyticsLoadEvent() ${i}`)})}_shareEvent(t,e){t&&this.analyticsApi.pushAnalyticsShareClickedEvent({tenantAlias:t.analytics.attributes.tenant,externalAccountId:t.analytics.attributes.accountId,externalUserId:t.analytics.attributes.userId,engagementMedium:t.mode.widgetMode,shareMedium:e}).then(n=>{v(`${t.mode.widgetMode} share ${e} event recorded. ${n}`)}).catch(n=>{v(`ERROR: pushAnalyticsShareClickedEvent() ${n}`)})}_error(t,e="modal",n=""){return`<!DOCTYPE html>
267
+ <!--[if IE 7]><html class="ie7 oldie" lang="en"><![endif]-->
268
+ <!--[if IE 8]><html class="ie8 oldie" lang="en"><![endif]-->
269
+ <!--[if gt IE 8]><!--><html lang="en"><!--<![endif]-->
270
+ <head>
271
+ <link rel="stylesheet" media="all" href="https://fast.ssqt.io/assets/css/widget/errorpage.css">
272
+ <style>
273
+ ${n}
274
+ </style>
275
+ </head>
276
+ <body>
277
+
278
+ <div class="squatch-container ${e}" style="width:100%">
279
+ <div class="errorheader">
280
+ <button type="button" class="close" onclick="window.frameElement.squatchJsApi.close();">&times;</button>
281
+ <p class="errortitle">Error</p>
282
+ </div>
283
+ <div class="errorbody">
284
+ <div class="sadface"><img src="https://fast.ssqt.io/assets/images/face.png"></div>
285
+ <h4>Our referral program is temporarily unavailable.</h4><br>
286
+ <p>Please reload the page or check back later.</p>
287
+ <p>If the persists please contact our support team.</p>
288
+ <br>
289
+ <br>
290
+ <div class="right-align errtxt">
291
+ Error Code: ${t}
292
+ </div>
293
+ </div>
294
+ </div>
295
+ </body>
296
+ </html>`}async _findInnerContainer(t){const{contentWindow:e}=t;if(!e)throw new Error("Squatch.js frame inner frame is empty");const n=e.document;function i(){const r=n.getElementsByTagName("sqh-global-container"),a=n.getElementsByClassName("squatch-container");return r.length>0?r[0]:a.length>0?a[0]:null}let s=null;for(let r=0;r<5&&(s=i(),!s);r++)await qe(100);return s||n.body}_getSkeletonPreloadHTML(t,e){if(!t)return"";const n=this.context.type==="passwordless"?"instant-access":"verified-access",i=ae({type:n,height:"100%"});return`
297
+ <div id="sq-preload" style="visibility: visible; position: absolute; top: 0; left: 0; width: 100%; z-index: 9999; background: ${e||"white"};">
298
+ ${i}
299
+ </div>
300
+ <script>(${Se.toString()})()<\/script>
301
+ `}reload({email:t,firstName:e,lastName:n},i){const s=this._findFrame();if(!s)throw new Error("Could not find widget iframe");const r=s.contentWindow,a=this.context.engagementMedium||"POPUP";if(!r)throw new Error("Frame needs a content window");let d;if(this.context.type==="upsert"){if(!this.context.user)throw new Error("Can't reload without user ids");let c={email:t||null,firstName:e||null,lastName:n||null,id:this.context.user.id,accountId:this.context.user.accountId};d=this.widgetApi.upsertUser({user:c,engagementMedium:a,widgetType:this.type,jwt:i})}else if(this.context.type==="passwordless")d=this.widgetApi.render({user:void 0,engagementMedium:a,widgetType:this.type,jwt:void 0});else throw new Error("can't reload an error widget");d.then(({template:c})=>{c&&(this.content=c,this.__deprecated__register(s,{email:t,engagementMedium:a},()=>{this.load(),a==="POPUP"&&this.open()}))}).catch(({message:c})=>{v(`${c}`)})}__deprecated__register(t,e,n){const s=t.contentWindow.document,r=s.createElement("button"),a=s.getElementsByClassName("squatch-register")[0];if(a){r.className="btn btn-primary",r.id="show-stats-btn",r.textContent=this.type==="REFERRER_WIDGET"?"Show Stats":"Show Reward";const d=e.engagementMedium==="POPUP"?"margin-top: 10px; max-width: 130px; width: 100%;":"margin-top: 10px;";r.setAttribute("style",d),r.onclick=n,a.style.paddingTop="30px",a.innerHTML=`<p><strong>${e.email}</strong><br>Has been successfully registered</p>`,a.appendChild(r)}}}function qe(o){return new Promise(t=>{setTimeout(t,o)})}function Se(){var o=setTimeout(t,1e4);function t(){var n=document.getElementById("sq-preload");n&&n.remove(),clearTimeout(o)}function e(){var n=new Set;if(document.querySelectorAll("*").forEach(function(i){i.tagName.includes("-")&&n.add(i.tagName.toLowerCase())}),!n.size)return t();Promise.all(Array.from(n).map(function(i){return customElements.whenDefined(i)})).then(function(){requestAnimationFrame(function(){requestAnimationFrame(t)})})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e):setTimeout(e,0)}const T=E("squatch-js:EMBEDwidget");class q extends de{constructor(e,n){super(e);l(this,"show",this.open);l(this,"hide",this.close);n&&(this.container=n)}async load(){var f,b,x,y,L,fe,we,ye,ve;const e=(b=(f=this.context.widgetConfig)==null?void 0:f.values)==null?void 0:b.brandingConfig,n=(x=this.content)==null?void 0:x.includes("mint-components"),i=(e==null?void 0:e.loadingHeight)||500,s=(y=e==null?void 0:e.widgetSize)==null?void 0:y.embeddedWidgets,r=s!=null&&s.maxWidth?F(s.maxWidth):"",a=s!=null&&s.minWidth?F(s.minWidth):"",d=this._createFrame({minWidth:a,maxWidth:r,initialHeight:i}),c=this._findElement();(L=this.context)!=null&&L.container&&(c.style.visibility="hidden",c.style.height="0",c.style["overflow-y"]="hidden"),this.container?c.shadowRoot?((fe=c.shadowRoot.lastChild)==null?void 0:fe.nodeName)==="IFRAME"?c.shadowRoot.replaceChild(d,c.shadowRoot.lastChild):c.shadowRoot.appendChild(d):c.firstChild?c.replaceChild(d,c.firstChild):c.appendChild(d):(!c.firstChild||c.firstChild.nodeName==="#text")&&c.appendChild(d);const{contentWindow:h}=d;if(!h)throw new Error("Frame needs a content window");const p=h.document;p.open();const w=this.widgetApi.domain==="https://staging.referralsaasquatch.com"?"-staging":"";p.write(`
302
+ ${(we=e==null?void 0:e.main)!=null&&we.brandFont?`
303
+ <link rel="preconnect" href="https://fast${w}.ssqt.io">
304
+ <link rel="preconnect" href="https://fonts.gstatic.com">
305
+ <link rel="preconnect" href="https://fonts.googleapis.com">
306
+ <link rel="preload" href="https://fonts.googleapis.com/css2?family=${encodeURIComponent((ye=e==null?void 0:e.main)==null?void 0:ye.brandFont)}" as="style">`:""}
307
+ <link rel="dns-prefetch" href="https://res.cloudinary.com">
308
+ <link rel="preconnect" href="https://res.cloudinary.com" crossorigin>
309
+ ${n?`
310
+ <style data-styles>
311
+ html { visibility: hidden; }
312
+ </style>`:""}
313
+ ${this._getSkeletonPreloadHTML(n,(ve=e==null?void 0:e.color)==null?void 0:ve.backgroundColor)}
314
+ ${this.content}
315
+ <script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>
316
+ `),p.close(),te(p,async()=>{const ke=h.squatch||h.widgetIdent;d.height=i;const Ze=new h.ResizeObserver(tt=>{for(const nt of tt){const{height:it}=nt.contentRect;d.height=it}}),et=await this._findInnerContainer(d);Ze.observe(et),this._shouldFireLoadEvent()?(this._loadEvent(ke),T("loaded")):p&&this._attachLoadEventListener(p,ke)})}open(){const e=this._findFrame();if(!e)return T("no target element to open");if(!e.contentWindow)return T("Frame needs a content window");const n=this._findElement();n.style.visibility="unset",n.style.height="auto",n.style["overflow-y"]="auto",e.contentWindow.document.dispatchEvent(new CustomEvent("sq:refresh"));const i=e.contentWindow.squatch||e.contentWindow.widgetIdent;if(this.context.user)this._loadEvent(i),T("loaded");else{if(!e.contentDocument)return;this._attachLoadEventListener(e.contentDocument,i)}}close(){const e=this._findFrame();if(!e)return T("no target element to close");e.contentDocument&&this._detachLoadEventListener(e.contentDocument);const n=this._findElement();n.style.visibility="hidden",n.style.height="0",n.style["overflow-y"]="hidden",T("Embed widget closed")}_error(e,n="embed",i=""){return super._error(e,n,i)}_shouldFireLoadEvent(){const e=!this.container,n=this.container instanceof HTMLElement&&(this.container.tagName.startsWith("SQUATCH-")||this.container.tagName.startsWith("IMPACT-"));return!!this.context.user&&(e||n)}}const S=E("squatch-js:POPUPwidget");let H=0;class P extends de{constructor(e,n=".squatchpop"){super(e);l(this,"trigger");l(this,"id");l(this,"show",this.open);l(this,"hide",this.close);this.trigger=n,this.container?this.id="squatchModal":(this.id=H===0?"squatchModal":`squatchModal__${H}`,H=H+1),document.head.insertAdjacentHTML("beforeend",`<style>#${this.id}::-webkit-scrollbar { display: none; }</style>`)}_initialiseCTA(){if(!this.trigger)return;let e;try{e=document.querySelector(this.trigger)||document.querySelector(".impactpop"),this.trigger&&!e&&S("No element found with trigger selector",this.trigger)}catch{S("Not a valid selector",this.trigger)}e&&(e.onclick=()=>{this.open()})}_createPopupDialog(e){var d;const n=document.createElement("dialog"),i=(d=e==null?void 0:e.widgetSize)==null?void 0:d.popupWidgets,s=i!=null&&i.minWidth?F(i.minWidth):"auto",r=i!=null&&i.maxWidth?F(i.maxWidth):"500px";n.id=this.id,n.setAttribute("style",`width: 100%; min-width: ${s}; max-width: ${r}; border: none; padding: 0;`);const a=c=>{c.stopPropagation(),c.target===n&&n.close()};return n.addEventListener("click",a),n}async load(){var g,w,f,b,x,y,L;const e=(w=(g=this.context.widgetConfig)==null?void 0:g.values)==null?void 0:w.brandingConfig,n=(e==null?void 0:e.loadingHeight)||500,i=(f=this.content)==null?void 0:f.includes("mint-components"),s=this._createFrame();s.style.height=n+"px",this._initialiseCTA();const r=this.container?this._findElement():document.body,a=(r==null?void 0:r.shadowRoot)||r,d=this._createPopupDialog(e);d.appendChild(s),((b=a.lastChild)==null?void 0:b.nodeName)==="DIALOG"?a.replaceChild(d,a.lastChild):a.appendChild(d);const{contentWindow:c}=s;if(!c)throw new Error("Frame needs a content window");const h=c.document;h.open();const p=this.widgetApi.domain;h.write(`
317
+ ${(x=e==null?void 0:e.main)!=null&&x.brandFont?`
318
+ <link rel="preconnect" href="https://fast${p==="https://staging.referralsaasquatch.com"?"-staging":""}.ssqt.io">
319
+ <link rel="preconnect" href="https://fonts.gstatic.com">
320
+ <link rel="preconnect" href="https://fonts.googleapis.com">
321
+ <link rel="preload" href="https://fonts.googleapis.com/css2?family=${encodeURIComponent((y=e==null?void 0:e.main)==null?void 0:y.brandFont)}" as="style">`:""}
322
+ <link rel="dns-prefetch" href="https://res.cloudinary.com">
323
+ <link rel="preconnect" href="https://res.cloudinary.com" crossorigin>
324
+ ${i?`
325
+ <style data-styles>
326
+ html { visibility: hidden; }
327
+ </style>`:""}
328
+ ${this._getSkeletonPreloadHTML(i,(L=e==null?void 0:e.color)==null?void 0:L.backgroundColor)}
329
+ ${this.content}
330
+ <script src="${this.npmCdn}/resize-observer-polyfill@1.5.x"><\/script>
331
+ `),h.close(),S("Popup template loaded into iframe"),await this._setupResizeHandler(s)}async _setupResizeHandler(e){const{contentWindow:n}=e;if(!n)throw new Error("Frame needs a content window");const i=n.document;te(i,async()=>{i.body.style.overflowY="hidden";let s=!0;new n.ResizeObserver(a=>{for(const d of a){const{top:c,bottom:h}=d.contentRect,p=h+c;p<=0||(s?(s=!1,e.style.height="0",e.height=i.body.scrollHeight+"",e.style.height=""):e.height=p+"",d.target.style="")}}).observe(await this._findInnerContainer(e))})}open(){const e=this.container?this._findElement():document.body,i=(e.shadowRoot||e).querySelector(`#${this.id}`);if(!i)throw new Error("Could not determine container div");i.showModal();const s=this._findFrame();if(!s)throw new Error("Could not find iframe");const{contentWindow:r}=s;if(!r)throw new Error("Squatch.js has an empty iframe");const a=r.document;te(a,()=>{var c;const d=r.squatch||r.widgetIdent;(c=s.contentDocument)==null||c.dispatchEvent(new CustomEvent("sq:refresh")),this.context.user?(this._loadEvent(d),S("Popup opened")):this._attachLoadEventListener(a,d)})}close(){const e=this._findFrame();e!=null&&e.contentDocument&&this._detachLoadEventListener(e.contentDocument);const n=this.container?this._findElement():document.body,s=(n.shadowRoot||n).querySelector(`#${this.id}`);if(!s)throw new Error("Could not determine container div");s.close(),S("Popup closed")}_clickedOutside({target:e}){}_error(e,n="modal",i=""){return super._error(e,n,i||"body { margin: 0; } .modal { box-shadow: none; border: 0; }")}}const k=E("squatch-js:widgets");class R{constructor(t){l(this,"api");l(this,"tenantAlias");l(this,"domain");l(this,"npmCdn");const e=W(t);this.tenantAlias=e.tenantAlias,this.domain=e.domain,this.npmCdn=e.npmCdn,this.api=new N(e)}async upsertUser(t){const n=oe(t);try{const i=await this.api.upsertUser(n);return{widget:this._renderWidget(i,n,{type:"upsert",user:n.user,engagementMedium:t.engagementMedium,container:t.container,trigger:t.trigger,widgetConfig:{values:{brandingConfig:i==null?void 0:i.brandingConfig}}}),user:i.user}}catch(i){throw k(i),i.apiErrorCode&&this._renderErrorWidget(i,t.engagementMedium),new Error(i)}}async render(t){const n=se(t);try{const i=await this.api.render(n);return{widget:this._renderWidget(i,n,{type:"passwordless",engagementMedium:n.engagementMedium,container:n.container,trigger:n.trigger,widgetConfig:i==null?void 0:i.widgetConfig}),user:i.user}}catch(i){throw i.apiErrorCode&&this._renderErrorWidget(i,n.engagementMedium),new Error(i)}}async autofill(t){const e=t;if(typeof e=="function"){try{const s=await this.api.squatchReferralCookie();e(s)}catch(s){throw k("Autofill error",s),new Error(s)}return}if(typeof e!="string")throw new Error("Autofill accepts a string or function");let n=document.querySelectorAll(e),i;if(n.length>0)i=n[0];else throw k("Element id/class or function missing"),new Error("Element id/class or function missing");try{const s=await this.api.squatchReferralCookie();i.value=s.codes[0]}catch(s){throw new Error(s)}}_renderWidget(t,e,n){var d;if(k("Rendering Widget..."),!t)throw new Error("Unable to get a response");let i,s=!!e.displayOnLoad;const r=t.jsOptions||{},a={content:t.template,type:e.widgetType||((d=r.widget)==null?void 0:d.defaultWidgetType),api:this.api,domain:this.domain,npmCdn:this.npmCdn,context:n};return r.widgetUrlMappings&&r.widgetUrlMappings.forEach(c=>{var h,p;R._matchesUrl(c.url)&&(c.widgetType!=="CONVERSION_WIDGET"||(p=(h=t.user)==null?void 0:h.referredBy)!=null&&p.code?(s=c.displayOnLoad,k(`Display ${c.widgetType} on ${c.url}`)):k(`Don't display ${c.widgetType} when no referral on widget rule match ${c.url}`))}),r.fuelTankAutofillUrls&&(k("We found a fuel tank autofill!"),r.fuelTankAutofillUrls.forEach(({url:c,formSelector:h})=>{var p,g,w;if(R._matchesUrl(c)&&(k("Fuel Tank URL matches"),(g=(p=t.user)==null?void 0:p.referredBy)!=null&&g.code)){const f=document.querySelector(h);f?f.value=((w=t.user.referredBy.referredReward)==null?void 0:w.fuelTankCode)||"":k(new Error(`Element with id/class ${h} was not found.`))}})),e.engagementMedium==="EMBED"?i=this._renderEmbedWidget(a):(i=this._renderPopupWidget(a),s&&i.open()),i}_renderPopupWidget(t){const e=new P(t,t.context.trigger);return e.load(),e}_renderEmbedWidget(t){const e=new q(t,t.context.container);return e.load(),e}_renderErrorWidget(t,e="POPUP"){const{apiErrorCode:n,rsCode:i,message:s}=t;k(new Error(`${n} (${i}) ${s}`));const r={content:"error",rsCode:i,api:this.api,domain:this.domain,npmCdn:this.npmCdn,type:"ERROR_WIDGET",context:{type:"error"}};let a;e==="EMBED"?(a=new q(r),a.load()):e==="POPUP"&&(a=new P(r),a.load())}static _matchesUrl(t){return!!window.location.href.match(new RegExp(t))}}class Pe{constructor(t){l(this,"tenantAlias");l(this,"domain");const n=W(t);this.tenantAlias=n.tenantAlias,this.domain=n.domain}track(t,e){const n=t,i=e,s=Re(n),{jwt:r}=Ue(i),a=encodeURIComponent(this.tenantAlias),d=encodeURIComponent(s.userId),c=encodeURIComponent(s.accountId),h=`/api/v1/${a}/open/account/${c}/user/${d}/events`,p=this.domain+h;return ee(p,JSON.stringify(s),r)}}function Re(o){if(!_(o))throw new Error("tracking parameter must be an object");if(!(o!=null&&o.accountId))throw new Error("accountId field is required");if(!(o!=null&&o.events))throw new Error("events field is required");if(!(o!=null&&o.userId))throw new Error("userId field is required");const t=o;if(!Array.isArray(t.events))throw new Error("'events' should be an array");return t}function Ue(o){if(!_(o))throw new Error("'options' should be an object");return o}function Me(){var i;const o=window[K]?K:D,t=((i=window["_"+o])==null?void 0:i.ready)||[],e=window.impactOnReady||window.squatchOnReady,n=[...t,e].filter(s=>!!s);setTimeout(()=>{window[D]&&(window[K]=window[D],n.forEach(s=>s()),window[D]._auto(),window["_"+o]=void 0,delete window["_"+o])},0)}const C=E("squatch-js"),ce=o=>typeof o=="object"&&!Array.isArray(o),le=(o,t)=>{const e=i=>ce(t[i])&&o.hasOwnProperty(i)&&ce(o[i]),n=Object.getOwnPropertyNames(t).map(i=>({[i]:e(i)?le(o[i],t[i]):t[i]})).reduce((i,s)=>({...i,...s}),{});return{...o,...n}};function B(o){const t=atob(o.replace(/_/g,"/").replace(/-/g,"+")),e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return new TextDecoder("utf8").decode(e)}function he(o){const t=new TextEncoder().encode(o),e=Array.from(t,n=>String.fromCodePoint(n)).join("");return btoa(e).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function Le(){var o,t,e="weird_get_top_level_domain=cookie",n=document.location.hostname.split(".");for(o=n.length-1;o>=0;o--)if(t=n.slice(o).join("."),document.cookie=e+";domain=."+t+";",document.cookie.indexOf(e)>-1)return document.cookie=e.split("=")[0]+"=;domain=."+t+";expires=Thu, 01 Jan 1970 00:00:01 GMT;",t}function Oe(){const o=window.location.search,e=new URLSearchParams(o).get("_saasquatch")||"";if(e){let n="",i="",s="";try{n=JSON.parse(B(e))}catch(r){C("Unable to decode params",r);return}try{i=JSON.parse(B(j.get("_saasquatch"))),C("existing cookie",i)}catch(r){C("Unable to retrieve cookie",r)}try{const r=Le();if(C("domain retrieved:",r),i){const a=le(i,n);s=he(JSON.stringify(a)),C("cookie to store:",a)}else s=he(JSON.stringify(n)),C("cookie to store:",n);j.set("_saasquatch",s,{expires:365,secure:!1,sameSite:"Lax",domain:r,path:"/"})}catch(r){C("Unable to set cookie",r)}}}const J=E("squatch-js");function je(){var p;const o=window.location.search,e=new URLSearchParams(o).get("_saasquatchExtra")||"";if(!e){J("No _saasquatchExtra param");return}const n=W({tenantAlias:"UNKNOWN"});if(!n.domain){J("domain must be provided in config to use _saasquatchExtra");return}let i;try{i=JSON.parse(B(e))}catch{J("Unable to decode _saasquatchExtra config");return}function s(g){return g.replace(/^https?:\/\//,"")}const r=s(n.domain),a=Object.keys((i==null?void 0:i[r])||{})[0],d=(p=i==null?void 0:i[r])==null?void 0:p[a];if(!d){J("_saasquatchExtra did not have an expected structure");return}const{autoPopupWidgetType:c,...h}=d;return{widgetConfig:{widgetType:c,displayOnLoad:!0,...h},squatchConfig:{...n,tenantAlias:a}}}const De=E("squatch-js:decodeUserJwt");function Ne(o){var t;try{const e=o.split(".")[1];if(e===void 0)return null;const n=B(e);return(t=JSON.parse(n))==null?void 0:t.user}catch(e){return De(e),null}}const ue=E("squatch-js:DeclarativeWidget");class pe extends HTMLElement{constructor(){super();l(this,"config");l(this,"token");l(this,"tenant");l(this,"widgetType");l(this,"locale");l(this,"widgetApi");l(this,"analyticsApi");l(this,"widgetInstance");l(this,"type");l(this,"container");l(this,"element");l(this,"loaded");l(this,"_setWidget",(e,n)=>{var s;const i={api:this.widgetApi,content:e.template,context:{type:n.type,user:n.user,container:this.container||void 0,engagementMedium:this.type,widgetConfig:e.widgetConfig},type:this.widgetType,domain:((s=this.config)==null?void 0:s.domain)||I,npmCdn:Y,container:this};if(this.type==="EMBED")return new q(i);{const r=this.firstChild?null:void 0;return new P(i,r)}});l(this,"setErrorWidget",e=>{var i;const n={api:this.widgetApi,content:"error",context:{type:"error",container:this.container||void 0},type:"ERROR_WIDGET",domain:((i=this.config)==null?void 0:i.domain)||I,npmCdn:Y,container:this};if(this.type==="EMBED")return new q(n);{const s=this.firstChild?null:void 0;return new P(n,s)}});l(this,"reload",this.renderWidget);l(this,"show",this.open);l(this,"hide",this.close);this.attachShadow({mode:"open"}).innerHTML="<style>:host { display: block; }</style><slot></slot>",this.config=Z(),this.token=$(),this.tenant=window.squatchTenant,this.container=this}_setupApis(e){var n,i;if(!this.tenant)throw new Error("tenantAlias not provided");this.widgetApi=new N({tenantAlias:(e==null?void 0:e.tenantAlias)||this.tenant,domain:(e==null?void 0:e.domain)||((n=this.config)==null?void 0:n.domain)||I}),this.analyticsApi=new re({domain:(e==null?void 0:e.domain)||((i=this.config)==null?void 0:i.domain)||I})}getWidgetType(e){return e&&(e.includes("websiteReferralWidget")||e.includes("friendWidget"))?"instant-access":"verified-access"}async renderPasswordlessVariant(){return this._setupApis(),ue("Rendering as an Instant Access widget"),await this.widgetApi.render({engagementMedium:this.type,widgetType:this.widgetType,locale:this.locale}).then(e=>this._setWidget(e,{type:"passwordless"})).catch(this.setErrorWidget)}async renderUserUpsertVariant(){this._setupApis();const e=Ne(this.token);return e?(ue("Rendering as a Verified widget"),await this.widgetApi.upsertUser({user:e,locale:this.locale,engagementMedium:this.type,widgetType:this.widgetType,jwt:this.token}),await this.widgetApi.render({locale:this.locale,engagementMedium:this.type,widgetType:this.widgetType}).then(i=>this._setWidget(i,{type:"upsert",user:e})).catch(this.setErrorWidget)):this.setErrorWidget(Error("No user object in token."))}async getWidgetInstance(){let e;if(this.widgetType=this.getAttribute("widget")||void 0,this.locale=this.getAttribute("locale")||this.locale,!this.widgetType)throw new Error("No widget has been specified");return this.token?e=await this.renderUserUpsertVariant():e=await this.renderPasswordlessVariant(),this.widgetInstance=e,this.widgetInstance&&this.dispatchEvent(new CustomEvent("sq:widget-loaded")),e}async renderWidget(){await this.getWidgetInstance(),await this.widgetInstance.load()}open(){if(!this.widgetInstance)throw new Error("Widget has not loaded yet");this.widgetInstance.open()}close(){if(!this.widgetInstance)throw new Error("Widget has not loaded yet");this.widgetInstance.close()}static get observedAttributes(){return["widget","locale"]}attributeChangedCallback(e,n,i){if(!(n===i||!this.loaded))switch(e){case"locale":case"widget":this.connectedCallback();break}}async connectedCallback(){this.loaded=!0,this.container=this.getAttribute("container"),this.widgetType=this.getAttribute("widget")||void 0;const e=this.getWidgetType(this.widgetType),{getSkeleton:n}=await Promise.resolve().then(()=>$e),i=n({height:"100%",type:e}),s=document.createElement("div");s.id="loading-skeleton",s.innerHTML=i;const r=this.shadowRoot||this.attachShadow({mode:"open"});if(this.type==="POPUP"){const d=r.getElementById("#squatchModal");d&&(d.innerHTML="",d.appendChild(s))}else r.innerHTML="",r.appendChild(s);await this.renderWidget();const a=r.getElementById("loading-skeleton");a&&a.remove(),this.getAttribute("open")!==null&&this.open()}}class ne extends pe{constructor(){super(),this.type="EMBED",this.loaded=!1}}class ie extends pe{constructor(){super(),this.type="POPUP",this.loaded=!1,this.addEventListener("click",t=>{t.stopPropagation(),this.open()})}}class Fe extends ne{}class He extends ie{}class Be extends ne{}class Je extends ie{}window.customElements.get("squatch-embed")||window.customElements.define("squatch-embed",Fe),window.customElements.get("impact-embed")||window.customElements.define("impact-embed",Be),window.customElements.get("squatch-popup")||window.customElements.define("squatch-popup",He),window.customElements.get("impact-popup")||window.customElements.define("impact-popup",Je);function ze(){console.log("Having trouble using Squatch.js? Go to https://docs.referralsaasquatch.com/developer/ for tutorials, references and error codes.")}const U=E("squatch-js");let z=null,G=null,V=null;function Ge(){return z||M({}),z}function X(){return G||M({}),G}function Ve(){return V||M({}),V}function Xe(o){var t;return(t=X())==null?void 0:t.render(o)}function Qe(){var t;const o=je();if(o){const{squatchConfig:e,widgetConfig:n}=o;return M(e),(t=X())==null?void 0:t.render(n)}}function M(o){const e=W(o);e.tenantAlias.match("^test")||e.debug?A("squatch-js*"):be(),U("initializing ..."),z=new N(e),G=new R(e),V=new Pe(e),U("Widget API instance",z),U("Widgets instance",G),U("Events API instance",V)}function Ye(o){o()}function Ke(o){X().autofill(o)}function me(){Oe()}typeof document<"u"&&!window.SaaSquatchDoNotAutoDrop&&me(),(ge=window.squatch)!=null&&ge.init&&U("Squatchjs is being loaded more than once. This may lead to multiple load events being sent, duplicated widgets, and inaccurate analytics."),typeof document<"u"&&Me(),u.DeclarativeEmbedWidget=ne,u.DeclarativePopupWidget=ie,u.EmbedWidget=q,u.PopupWidget=P,u.WidgetApi=N,u.Widgets=R,u._auto=Qe,u.api=Ge,u.autofill=Ke,u.events=Ve,u.help=ze,u.init=M,u.pushCookie=me,u.ready=Ye,u.widget=Xe,u.widgets=X,Object.defineProperty(u,Symbol.toStringTag,{value:"Module"})});
323
332
  //# sourceMappingURL=squatch.js.map