(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):false?false(["exports"],factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,factory(global.squatch={}))})(this,(function(exports2){"use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:true,configurable:true,writable:true,value:value}):obj[key]=value;var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!=="symbol"?key+"":key,value);var _a;function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x["default"]:x}var browser={exports:{}};var ms;var hasRequiredMs;function requireMs(){if(hasRequiredMs)return ms;hasRequiredMs=1;var s=1e3;var m=s*60;var h=m*60;var d=h*24;var w=d*7;var y=d*365.25;ms=function(val,options){options=options||{};var type=typeof val;if(type==="string"&&val.length>0){return parse(val)}else if(type==="number"&&isFinite(val)){return options.long?fmtLong(val):fmtShort(val)}throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(val))};function parse(str){str=String(str);if(str.length>100){return}var match=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);if(!match){return}var n=parseFloat(match[1]);var type=(match[2]||"ms").toLowerCase();switch(type){case"years":case"year":case"yrs":case"yr":case"y":return n*y;case"weeks":case"week":case"w":return n*w;case"days":case"day":case"d":return n*d;case"hours":case"hour":case"hrs":case"hr":case"h":return n*h;case"minutes":case"minute":case"mins":case"min":case"m":return n*m;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return void 0}}function fmtShort(ms2){var msAbs=Math.abs(ms2);if(msAbs>=d){return Math.round(ms2/d)+"d"}if(msAbs>=h){return Math.round(ms2/h)+"h"}if(msAbs>=m){return Math.round(ms2/m)+"m"}if(msAbs>=s){return Math.round(ms2/s)+"s"}return ms2+"ms"}function fmtLong(ms2){var msAbs=Math.abs(ms2);if(msAbs>=d){return plural(ms2,msAbs,d,"day")}if(msAbs>=h){return plural(ms2,msAbs,h,"hour")}if(msAbs>=m){return plural(ms2,msAbs,m,"minute")}if(msAbs>=s){return plural(ms2,msAbs,s,"second")}return ms2+" ms"}function plural(ms2,msAbs,n,name){var isPlural=msAbs>=n*1.5;return Math.round(ms2/n)+" "+name+(isPlural?"s":"")}return ms}var common;var hasRequiredCommon;function requireCommon(){if(hasRequiredCommon)return common;hasRequiredCommon=1;function setup(env){createDebug.debug=createDebug;createDebug.default=createDebug;createDebug.coerce=coerce;createDebug.disable=disable;createDebug.enable=enable;createDebug.enabled=enabled;createDebug.humanize=requireMs();Object.keys(env).forEach((function(key){createDebug[key]=env[key]}));createDebug.instances=[];createDebug.names=[];createDebug.skips=[];createDebug.formatters={};function selectColor(namespace){var hash=0;for(var i=0;i=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function formatArgs(args){args[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+args[0]+(this.useColors?"%c ":" ")+"+"+module2.exports.humanize(this.diff);if(!this.useColors){return}var c="color: "+this.color;args.splice(1,0,c,"color: inherit");var index=0;var lastC=0;args[0].replace(/%[a-zA-Z%]/g,(function(match){if(match==="%%"){return}index++;if(match==="%c"){lastC=index}}));args.splice(lastC,0,c)}function log(){var _console;return(typeof console==="undefined"?"undefined":_typeof(console))==="object"&&console.log&&(_console=console).log.apply(_console,arguments)}function save(namespaces){try{if(namespaces){exports3.storage.setItem("debug",namespaces)}else{exports3.storage.removeItem("debug")}}catch(error){}}function load(){var r;try{r=exports3.storage.getItem("debug")}catch(error){}if(!r&&typeof process!=="undefined"&&"env"in process){r=process.env.DEBUG}return r}function localstorage(){try{return localStorage}catch(error){}}module2.exports=requireCommon()(exports3);var formatters=module2.exports.formatters;formatters.j=function(v){try{return JSON.stringify(v)}catch(error){return"[UnexpectedJSONParseError]: "+error.message}}})(browser,browser.exports);return browser.exports}var browserExports=requireBrowser();const debug=getDefaultExportFromCjs(browserExports); /*! js-cookie v3.0.5 | MIT */function assign(target){for(var i=1;i{var _a2;try{const res=await doQuery(url,RENDER_WIDGET_QUERY,{user:userId&&accountId?{id:userId,accountId:accountId}:null,engagementMedium:engagementMedium,widgetType:widgetType,locale:locale},jwt);resolve((_a2=res==null?void 0:res.data)==null?void 0:_a2.renderWidget)}catch(e){reject(e)}}))}async squatchReferralCookie(){const tenantAlias=encodeURIComponent(this.tenantAlias);const _saasquatch=(api$1||window.Cookies).get("_saasquatch")||"";const cookie=_saasquatch?`?cookies=${encodeURIComponent(_saasquatch)}`:``;const url=`${this.domain}/a/${tenantAlias}/widgets/squatchcookiejson${cookie}`;const response=await doGet(url);return Promise.resolve({...response,encodedCookie:_saasquatch})}}function _buildParams({widgetType:widgetType,engagementMedium:engagementMedium,locale:locale}){const queryParams=new URLSearchParams;queryParams.append("engagementMedium",engagementMedium);if(widgetType)queryParams.append("widgetType",widgetType);if(locale)queryParams.append("locale",locale);return`?${queryParams.toString()}`} /*! * domready (c) Dustin Diaz 2014 - License MIT * */function domready(targetDoc,fn){let fns=[];let listener;let doc=targetDoc;let hack=doc.documentElement.doScroll;let domContentLoaded="DOMContentLoaded";let loaded=(hack?/^loaded|^c/:/^loaded|^i|^c/).test(doc.readyState);if(!loaded)doc.addEventListener(domContentLoaded,listener=()=>{doc.removeEventListener(domContentLoaded,listener);loaded=true;while(listener=fns.shift())listener()});return loaded?setTimeout(fn,0):fns.push(fn)}function formatWidth({value:value,unit:unit}){switch(unit){case"px":return`${value}px`;case"%":return`${value}%`;default:return`${value}px`}}class AnalyticsApi{constructor(config){__publicField(this,"domain");var _a2;const raw=config;const clean=_validateAnalyticsConfig(raw);this.domain=(clean==null?void 0:clean["domain"])||((_a2=getConfig())==null?void 0:_a2.domain)||DEFAULT_DOMAIN}pushAnalyticsLoadEvent(params){if(!params.externalUserId||!params.externalAccountId)return;const tenantAlias=encodeURIComponent(params.tenantAlias);const accountId=encodeURIComponent(params.externalAccountId);const userId=encodeURIComponent(params.externalUserId);const engagementMedium=encodeURIComponent(params.engagementMedium);const programId=params.programId?`&programId=${encodeURIComponent(params.programId)}`:``;const path=`/a/${tenantAlias}/widgets/analytics/loaded?externalAccountId=${accountId}&externalUserId=${userId}&engagementMedium=${engagementMedium}${programId}`;const url=this.domain+path;return doPost(url,JSON.stringify({}))}pushAnalyticsShareClickedEvent(params){const tenantAlias=encodeURIComponent(params.tenantAlias);const accountId=encodeURIComponent(params.externalAccountId);const userId=encodeURIComponent(params.externalUserId);const engagementMedium=encodeURIComponent(params.engagementMedium);const shareMedium=encodeURIComponent(params.shareMedium);const path=`/a/${tenantAlias}/widgets/analytics/shared?externalAccountId=${accountId}&externalUserId=${userId}&engagementMedium=${engagementMedium}&shareMedium=${shareMedium}`;const url=this.domain+path;return doPost(url,JSON.stringify({}))}}function _validateAnalyticsConfig(raw){if(!isObject$1(raw))throw new Error("'options' should be an object");return raw}const _log$8=browserExports.debug("squatch-js:widget");class Widget{constructor(params){__publicField(this,"type");__publicField(this,"content");__publicField(this,"analyticsApi");__publicField(this,"widgetApi");__publicField(this,"context");__publicField(this,"npmCdn");__publicField(this,"container");__publicField(this,"loadEventListener",null);var _a2;_log$8("widget initializing ...");this.content=params.content==="error"?this._error(params.rsCode):params.content;this.type=params.type;this.widgetApi=params.api;this.npmCdn=params.npmCdn;this.analyticsApi=new AnalyticsApi({domain:params.domain});this.context=params.context;this.container=((_a2=params.context)==null?void 0:_a2.container)||params.container}_findElement(){let element;if(typeof this.container==="string"){element=document.querySelector(this.container);_log$8("loading widget with selector",element)}else if(this.container instanceof HTMLElement){element=this.container;_log$8("loading widget with container",element)}else if(this.container){element=null;_log$8("container must be an HTMLElement or string",this.container)}else{element=document.querySelector("#squatchembed")||document.querySelector(".squatchembed")||document.querySelector("#impactembed")||document.querySelector(".impactembed");_log$8("loading widget with default selector",element)}if(!(element instanceof HTMLElement))throw new Error(`element with selector '${this.container||"#squatchembed, .squatchembed, #impactembed, or .impactembed"}' not found.'`);return element}_createFrame(options){const frame=document.createElement("iframe");frame["squatchJsApi"]=this;frame.id="squatchFrame";frame.width="100%";frame.src="about:blank";frame.scrolling="no";frame.setAttribute("style","border: 0; background-color: none; width: 1px; min-width: 100%;");if(options==null?void 0:options.minWidth)frame.style.minWidth=options.minWidth;if(options==null?void 0:options.maxWidth)frame.style.maxWidth=options.maxWidth;if((options==null?void 0:options.maxWidth)||(options==null?void 0:options.minWidth)){frame.style.width="100%"}return frame}_findFrame(){const element=this.container?this._findElement():document.body;const parent=element.shadowRoot||element;return parent.querySelector("iframe#squatchFrame")}_detachLoadEventListener(frameDoc){if(this.loadEventListener){frameDoc.removeEventListener("sq:user-registration",this.loadEventListener);this.loadEventListener=null}}_attachLoadEventListener(frameDoc,sqh){if(this.loadEventListener===null){this.loadEventListener=e=>{this._loadEvent({...sqh,userId:e.detail.userId,accountId:e.detail.accountId})};frameDoc.addEventListener("sq:user-registration",this.loadEventListener)}}_loadEvent(sqh){var _a2;if(!sqh)return;if(!isObject$1(sqh)){throw new Error("Widget Load event identity property is not an object")}let params;if("programId"in sqh){if(!sqh.tenantAlias||!sqh.accountId||!sqh.userId||!sqh.engagementMedium)throw new Error("Widget Load event missing required properties");params={tenantAlias:sqh.tenantAlias,externalAccountId:sqh.accountId,externalUserId:sqh.userId,engagementMedium:sqh.engagementMedium,programId:sqh.programId}}else{const{analytics:analytics,mode:mode}=sqh;params={tenantAlias:analytics.attributes.tenant,externalAccountId:analytics.attributes.accountId,externalUserId:analytics.attributes.userId,engagementMedium:mode.widgetMode}}(_a2=this.analyticsApi.pushAnalyticsLoadEvent(params))==null?void 0:_a2.then((response=>{_log$8(`${params.engagementMedium} loaded event recorded.`)})).catch((ex=>{_log$8(`ERROR: pushAnalyticsLoadEvent() ${ex}`)}))}_shareEvent(sqh,medium){if(sqh){this.analyticsApi.pushAnalyticsShareClickedEvent({tenantAlias:sqh.analytics.attributes.tenant,externalAccountId:sqh.analytics.attributes.accountId,externalUserId:sqh.analytics.attributes.userId,engagementMedium:sqh.mode.widgetMode,shareMedium:medium}).then((response=>{_log$8(`${sqh.mode.widgetMode} share ${medium} event recorded. ${response}`)})).catch((ex=>{_log$8(`ERROR: pushAnalyticsShareClickedEvent() ${ex}`)}))}}_error(rs,mode="modal",style=""){const errorTemplate=`\n \x3c!--[if IE 7]>\x3c!--\x3e\x3c!--\n \n \n \n \n\n
\n
\n \n

Error

\n
\n
\n
\n

Our referral program is temporarily unavailable.


\n

Please reload the page or check back later.

\n

If the persists please contact our support team.

\n
\n
\n
\n Error Code: ${rs}\n
\n
\n
\n \n `;return errorTemplate}async _findInnerContainer(frame){const{contentWindow:contentWindow}=frame;if(!contentWindow)throw new Error("Squatch.js frame inner frame is empty");const frameDoc=contentWindow.document;function search(){const containers=frameDoc.getElementsByTagName("sqh-global-container");const legacyContainers=frameDoc.getElementsByClassName("squatch-container");const fallback=containers.length>0?containers[0]:legacyContainers.length>0?legacyContainers[0]:null;return fallback}let found=null;for(let i=0;i<5;i++){found=search();if(found)break;await delay(100)}if(!found){return frameDoc.body}return found}reload({email:email,firstName:firstName,lastName:lastName},jwt){const frame=this._findFrame();if(!frame)throw new Error("Could not find widget iframe");const frameWindow=frame.contentWindow;const engagementMedium=this.context.engagementMedium||"POPUP";if(!frameWindow){throw new Error("Frame needs a content window")}let response;if(this.context.type==="upsert"){if(!this.context.user)throw new Error("Can't reload without user ids");let userObj={email:email||null,firstName:firstName||null,lastName:lastName||null,id:this.context.user.id,accountId:this.context.user.accountId};response=this.widgetApi.upsertUser({user:userObj,engagementMedium:engagementMedium,widgetType:this.type,jwt:jwt})}else if(this.context.type==="passwordless"){response=this.widgetApi.render({user:void 0,engagementMedium:engagementMedium,widgetType:this.type,jwt:void 0})}else{throw new Error("can't reload an error widget")}response.then((({template:template})=>{if(template){this.content=template;this.__deprecated__register(frame,{email:email,engagementMedium:engagementMedium},(()=>{this.load();engagementMedium==="POPUP"&&this.open()}))}})).catch((({message:message})=>{_log$8(`${message}`)}))}__deprecated__register(frame,params,onClick){const frameWindow=frame.contentWindow;const frameDoc=frameWindow.document;const showStatsBtn=frameDoc.createElement("button");const registerForm=frameDoc.getElementsByClassName("squatch-register")[0];if(registerForm){showStatsBtn.className="btn btn-primary";showStatsBtn.id="show-stats-btn";showStatsBtn.textContent=this.type==="REFERRER_WIDGET"?"Show Stats":"Show Reward";const widgetStyle=params.engagementMedium==="POPUP"?"margin-top: 10px; max-width: 130px; width: 100%;":"margin-top: 10px;";showStatsBtn.setAttribute("style",widgetStyle);showStatsBtn.onclick=onClick;registerForm.style.paddingTop="30px";registerForm.innerHTML=`

${params.email}
Has been successfully registered

`;registerForm.appendChild(showStatsBtn)}}}function delay(duration){return new Promise((resolve=>{setTimeout(resolve,duration)}))}const _log$7=browserExports.debug("squatch-js:EMBEDwidget");class EmbedWidget extends Widget{constructor(params,container){super(params);__publicField(this,"show",this.open);__publicField(this,"hide",this.close);if(container)this.container=container}async load(){var _a2,_b,_c,_d,_e;const brandingConfig=(_b=(_a2=this.context.widgetConfig)==null?void 0:_a2.values)==null?void 0:_b.brandingConfig;const sizes=(_c=brandingConfig==null?void 0:brandingConfig.widgetSize)==null?void 0:_c.embeddedWidgets;const maxWidth=(sizes==null?void 0:sizes.maxWidth)?formatWidth(sizes.maxWidth):"";const minWidth=(sizes==null?void 0:sizes.minWidth)?formatWidth(sizes.minWidth):"";const frame=this._createFrame({minWidth:minWidth,maxWidth:maxWidth});const element=this._findElement();if((_d=this.context)==null?void 0:_d.container){element.style.visibility="hidden";element.style.height="0";element.style["overflow-y"]="hidden"}if(this.container){if(element.shadowRoot){if(((_e=element.shadowRoot.lastChild)==null?void 0:_e.nodeName)==="IFRAME"){element.shadowRoot.replaceChild(frame,element.shadowRoot.lastChild)}else{element.shadowRoot.appendChild(frame)}}else if(element.firstChild){element.replaceChild(frame,element.firstChild)}else{element.appendChild(frame)}}else if(!element.firstChild||element.firstChild.nodeName==="#text"){element.appendChild(frame)}const{contentWindow:contentWindow}=frame;if(!contentWindow){throw new Error("Frame needs a content window")}const frameDoc=contentWindow.document;frameDoc.open();frameDoc.write(this.content);frameDoc.write(`