New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@saasquatch/microsite-router

Package Overview
Dependencies
Maintainers
10
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@saasquatch/microsite-router - npm Package Compare versions

Comparing version 1.0.3-0 to 1.0.3-1

2

dist/bundle.js

@@ -1,1 +0,1 @@

function e(e){this.message=e}e.prototype=new Error,e.prototype.name="InvalidCharacterError";var t="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(t){var n=String(t).replace(/=+$/,"");if(n.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,r,i=0,a=0,s="";r=n.charAt(a++);~r&&(o=i%4?64*o+r:r,i++%4)?s+=String.fromCharCode(255&o>>(-2*i&6)):0)r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(r);return s};function n(e){var n=e.replace(/-/g,"+").replace(/_/g,"/");switch(n.length%4){case 0:break;case 2:n+="==";break;case 3:n+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(t(e).replace(/(.)/g,(function(e,t){var n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n="0"+n),"%"+n})))}(n)}catch(e){return t(n)}}function o(e){this.message=e}function r(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function i(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}o.prototype=new Error,o.prototype.name="InvalidTokenError";var a=function(){function e(e){var t=this,n=this;this._status="Initial",this.onChange=function(e){n.options.onChange&&n.options.onChange(e)},this.onConnect=function(e){try{return t.status="Connected",t.options.onChange&&t.options.onChange(e),Promise.resolve(new Promise((function(e){t.resolvePromise=e})))}catch(e){return Promise.reject(e)}},this.onDisconnect=function(){n.status="Connecting",n.start()},this.options=e}var t=e.prototype;return t.start=function(){var e=this,t=0;this.status="Connecting";var n=function(){return e.status},o=c(this.options.attempts)||10,r=function(){if("Connected"!==n()){var r=new CustomEvent(e.options.contextName,{bubbles:!0,cancelable:!0,composed:!0,detail:{onConnect:e.onConnect,onChange:e.onChange,onDisconnect:e.onDisconnect}});c(e.options.element).dispatchEvent(r),"Connected"!==n()?++t>=o&&(e._interval&&clearInterval(e._interval),e.status="Timeout"):"Connected"===n()&&e._interval&&clearInterval(e._interval)}};return(c(this.options.pollingMs)||100)>0&&o>1&&(this._interval=setInterval(r,c(this.options.pollingMs)||100)),r(),this},t.stop=function(){return this._interval&&clearInterval(this._interval),this.resolvePromise&&this.resolvePromise(),this.status="Initial",this},i(e,[{key:"status",set:function(e){this._status=e,this.options.onStatus&&this.options.onStatus(e)},get:function(){return this._status}}]),e}(),s=function(){function e(e){var t=this;this.__listeners=[],this.connectListener=function(e){try{e.stopPropagation(),t.__listeners=[].concat(t.__listeners,[e.detail]);var n=function(n,o){try{var r=Promise.resolve(e.detail.onConnect(t.__current)).then((function(){}))}catch(e){return o(!0,e)}return r&&r.then?r.then(o.bind(null,!1),o.bind(null,!0)):o(!1,r)}(0,(function(n,o){var r,i;if(t.__listeners=(i=(r=t.__listeners).indexOf(e.detail),r.slice(0,i).concat(r.slice(i+1,r.length))),n)throw o;return o}));return Promise.resolve(n&&n.then?n.then((function(){})):void 0)}catch(e){return Promise.reject(e)}},this.options=e,this.__current=c(e.initialState)}var t=e.prototype;return t.start=function(){return c(this.options.element).addEventListener(this.options.contextName,this.connectListener),this},t.stop=function(){return c(this.options.element).removeEventListener(this.options.contextName,this.connectListener),this.__listeners.map((function(e){e.onDisconnect()})),this.__listeners=[],this},i(e,[{key:"context",set:function(e){this.__current=e,this.__listeners.forEach((function(t){return t.onChange(e)}))},get:function(){return c(this.__current)}},{key:"listeners",get:function(){return Object.freeze([].concat(this.__listeners))}}]),e}();function c(e){return"function"==typeof typeof e?e():e}var l=Object.defineProperty,u=Object.defineProperties,d=Object.getOwnPropertyDescriptors,h=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,p=Object.prototype.propertyIsEnumerable,f=(e,t,n)=>t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,g=(e,t)=>{for(var n in t||(t={}))w.call(t,n)&&f(e,n,t[n]);if(h)for(var n of h(t))p.call(t,n)&&f(e,n,t[n]);return e},y=(e,t)=>u(e,d(t));function m(){var e,t;return window.SquatchAndroid?{type:"SquatchAndroid",android:window.SquatchAndroid,widgetIdent:window.widgetIdent}:window.SquatchPortal?{type:"SquatchPortal",env:window.SquatchPortal}:window.SquatchAdmin?{type:"SquatchAdmin",adminSDK:window.SquatchAdmin}:window.widgetIdent&&"demo"!==(null==(e=window.widgetIdent)?void 0:e.env)?{type:"SquatchJS2",api:null==(t=window.frameElement)?void 0:t.squatchJsApi,widgetIdent:window.widgetIdent}:{type:"None"}}function v(){const e=m();switch(e.type){case"SquatchAndroid":case"SquatchJS2":return e.widgetIdent.tenantAlias;case"SquatchAdmin":case"None":return"demo";case"SquatchPortal":return e.env.tenantAlias}}function S(){var e;const t=m();switch(t.type){case"SquatchAndroid":case"SquatchJS2":return t.widgetIdent.appDomain;case"SquatchPortal":return(null==(e=t.env)?void 0:e.appDomain)||"https://app.referralsaasquatch.com";case"SquatchAdmin":case"None":return"https://app.referralsaasquatch.com"}}var b=(()=>{var e;try{return null==(e=null==window?void 0:window.localStorage)?void 0:e.getItem("debug")}catch(e){return!1}})();function q(e,...t){b&&console.debug(`sq:environment:${e}`,...t)}var I=(...e)=>q("history",...e);function _(e){if("string"==typeof e)return e;const t=new URL(e.pathname,window.origin);return e.search&&(t.search=e.search),e.hash&&(t.hash=e.hash),t}function x(){if("SquatchPortal"===m().type){let e=function(e){const t=window.history[e];return function(...n){const o=t.apply(window.history,n),r=new Event(e);return window.dispatchEvent(r),o}};return window.history.pushState=e("pushState"),window.history.replaceState=e("replaceState"),new class{constructor(){this.listeners=new Set,window.addEventListener("popstate",this.notify.bind(this)),window.addEventListener("pushState",this.notify.bind(this)),window.addEventListener("replaceState",this.notify.bind(this))}listen(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}notify(){I("notifying listeners of route change",this.location),this.listeners&&this.listeners.forEach((e=>e()))}get location(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash,state:window.history.state}}back(){this.go(-1)}forward(){this.go(1)}go(e){window.history.go(e)}push(e,t){const n=_(e);window.history.pushState(t,"",n)}replace(e,t){const n=_(e);window.history.replaceState(t,"",n)}}}return new class{constructor(){this.history=[{pathname:"/",search:"",hash:""}],this.index=0,this.listeners=new Set}listen(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}current(){return this.history[this.index]}get state(){return this.current().state}notify(){I("notifying listeners of route change",this.location),this.listeners.forEach((e=>e()))}get location(){return this.history[this.index]}back(){this.go(-1)}forward(){this.go(1)}go(e){this.index+=e,this.index<0&&(this.index=0),this.index>=this.history.length&&(this.index=this.history.length-1),this.notify()}push(e,t){let n;n="string"==typeof e?{pathname:e,search:this.history[this.index].search,hash:this.history[this.index].hash,state:t}:y(g({},e),{state:t}),this.index++,this.history.splice(this.index,this.history.length,n),this.notify()}replace(e,t){this.history[this.index]="string"==typeof e?{pathname:e,search:"",hash:"",state:t}:y(g({},e),{state:t}),this.notify()}}}function P(){return window.squatchHistory=window.squatchHistory||x(),window.squatchHistory}var C=new class{get location(){return P().location}listen(e){return P().listen(e)}back(){P().back()}forward(){P().forward()}go(e){P().go(e)}push(e,t){P().push(e,t)}replace(e,t){P().replace(e,t)}};function E(e){if(e&&/^[a-z]{2}_(?:[A-Z]{2}|[0-9]{3})$/.test(e))return e}function $(){var e;let t=window.squatchLocale;if(!t){((...e)=>{q("sq:locale",...e)})("Creating locale context provider");const n=(null==(e=window.widgetIdent)?void 0:e.locale)??E(navigator.language.replaceAll("-","_"));t=new s({element:document.documentElement,initialState:n,contextName:"sq:locale"}).start(),window.squatchLocale=t}return t}function k(){var e;return null==(e=window.squatchLocale)?void 0:e.context}var N=(...e)=>q("sq:locale",...e);var L=(...e)=>q("sq:locale",...e),A=new a({contextName:"sq:user-identity",element:(()=>{const e="__environment_context_listener";let t=document.getElementById(e);return t||(t=document.createElement("div"),t.id=e,document.documentElement.appendChild(t)),t})(),onChange:async e=>{var t;const n=$(),o=(null==(t=window.widgetIdent)?void 0:t.locale)??E(navigator.language.replaceAll("-","_"));let r;if(e){L("User context changed, refetching locale");const e=await async function(){var e;N("Fetching locale from GraphQL for current user");try{const t=await fetch(`${S()}/api/v1/${v()}/graphql`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${null==(e=U())?void 0:e.jwt}`},body:JSON.stringify({query:"\n query {\n viewer {\n ... on User {\n locale\n }\n }\n }\n"})});if(!t.ok)throw new Error("Failed to fetch locale");const n=await t.json();if(n.errors)throw new Error(JSON.stringify(n.errors,null,2));return n.data.viewer.locale||void 0}catch(e){return void N("Failed to fetch locale for current user",e.message)}}();n.context!==e&&(L(`New value fetched from GraphQL [${e}]`),r=e||o)}else r=o;L(`Setting locale context to [${r}]`),n.context=r}});function O(){let e=window.squatchUserIdentity;return e||(((...e)=>{q("sq:user-identity",...e)})("Creating user context provider"),e=new s({element:document.documentElement,initialState:R(),contextName:"sq:user-identity"}).start(),window.squatchUserIdentity=e,L("Starting user context listener for locale updates"),A.start()),e}function j(e){if(e)try{const t=function(e,t){if("string"!=typeof e)throw new o("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(n(e.split(".")[r]))}catch(e){throw new o("Invalid token specified: "+e.message)}}(e),r=t.exp;let i,a;if(function(e){return e.sub&&/.*:.*@.*:users/.test(e.sub)}(t)){const e=t.sub.match(/(.*):(.*)@(.*):users/);(null==e?void 0:e[1])&&(a=atob(e[1])),(null==e?void 0:e[2])&&(i=atob(e[2]))}else(function(e){return e.user&&e.user.id&&e.user.accountId})(t)&&(a=t.user.accountId,i=t.user.id);if(!i||!a)return;if(r&&Date.now()>=1e3*r)return;return{id:i,accountId:a,jwt:e}}catch(e){return}}function R(){const e=m();switch(e.type){case"SquatchAndroid":case"SquatchJS2":return{id:e.widgetIdent.userId,accountId:e.widgetIdent.accountId,jwt:e.widgetIdent.token};case"SquatchPortal":const t=new URLSearchParams(document.location.search);if(t.has("jwt"))return j(t.get("jwt"));const n=localStorage.getItem("sq:user-identity");if(!n)return;try{const e=JSON.parse(n),t=j(e.jwt);return t?g(g({},e),t):void 0}catch(e){return}case"SquatchAdmin":case"None":return}}function U(){var e;return null==(e=window.squatchUserIdentity)?void 0:e.context}const J=localStorage.getItem("debug");function T(e,...t){J&&console.debug(`sq:microsite:${e}`,...t)}const M={};let D=[];function H(e){var t;const n=[];let o=document.body;D.length>0&&(D[D.length-1].element.innerHTML=""),[...e.layouts].reverse().forEach(((e,t)=>{var r;if((null===(r=D[t])||void 0===r?void 0:r.key)===e.key)T("render",`reusing element for layout [${e.key}]`),o=D[t].element,n.push({key:e.key,element:o});else{D.splice(t).forEach((e=>{T("render",`removing element for layout [${e.key}]`),e.element.remove()}));const r=document.createElement("div");r.style.display="contents",r.id=e.key,r.attachShadow({mode:"open"}),r.shadowRoot.innerHTML=e.values.html,o.appendChild(r),o=r,n.push({key:e.key,element:r}),T("render",`created element for layout [${e.key}]`)}})),o.innerHTML=e.page.values.html,document.title=e.page.values.title,function(e){const t=document.head.querySelector('meta[name="description"]');if(t)t.content=e;else{const t=document.createElement("meta");t.name="description",t.content=e,document.head.append(t)}}(null!==(t=e.page.values.description)&&void 0!==t?t:""),D=n}var F;!function(e){e[e.Render=0]="Render",e[e.Redirect=1]="Redirect",e[e.NotAllowed=2]="NotAllowed"}(F||(F={}));async function B(e=C.location.pathname){var t;const n=await async function(e,t){const n=`${e}${t?`_${t}`:""}`;if(M[n])return T("fetchPage",`avoiding GraphQL call in lieu of cache for [${e}]`),M[n];try{const n=await fetch(`${S()}/api/v1/${v()}/graphql`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({operationName:"RenderMicrositePage",query:"\n query RenderMicrositePage($urlPath: String!, $locale: RSLocale) {\n renderMicrositePage(urlPath: $urlPath, locale: $locale) {\n micrositePageConfig {\n urlPath\n values\n allowedUsers\n disallowedUrlPath\n }\n micrositeLayoutConfigs {\n key\n values\n }\n }\n }\n",variables:{urlPath:e,locale:t}})});if(!n.ok)throw new Error("Failed to fetch page");const o=await n.json();if(o.errors)throw new Error(JSON.stringify(o.errors,null,2));const r=o.data,i={page:r.renderMicrositePage.micrositePageConfig,layouts:r.renderMicrositePage.micrositeLayoutConfigs};return M[e]=i,i}catch(e){throw document.body.innerHTML=`\n <div style="padding: 12px;">\n <h3>Sorry, something went wrong</h3>\n <pre style="padding: 12px; font-family: monospace; font-size: 12px;">${e.message}</pre>\n </div>\n `,e}}(e,k()),o=n.page.allowedUsers,r=n.page.disallowedUrlPath,i=U(),a=(null==i?void 0:i.jwt)?(null===(t=i.managedIdentity)||void 0===t?void 0:t.emailVerified)?"VERIFIED":"UNVERIFIED":"PUBLIC";let s=F.Render;a!=o&&(s=r?F.Redirect:"PUBLIC"===o?F.Render:F.NotAllowed);let c=`pathname[${e}] userType[${a}] allowedUsers[${o}]`;switch(s){case F.Render:T("router",`${c} user is allowed, rendering the page`),H(n);break;case F.Redirect:T("router",`${c} redirecting to ${r}`),C.push(r);break;case F.NotAllowed:T("router",`${c} user is not allowed, rendering an error page`),document.body.innerHTML='\n <div style="padding: 12px;">\n <h3>Not allowed.</h3>\n </div>\n'}}const z=(()=>{const e="__context_listener";let t=document.getElementById(e);return t||(t=document.createElement("div"),t.id=e,document.documentElement.appendChild(t)),t})(),G=new a({contextName:"sq:user-identity",element:z,onChange:e=>{T("user-context",`old[${JSON.stringify(U())}] new[${JSON.stringify(e)}]`)},onStatus:e=>{T("user-context",e)}}),Q=new a({contextName:"sq:locale",element:z,onChange:e=>{e&&(T("locale-context",`old[${k()}] new[${e}]`),B())},onStatus:e=>{T("locale-context",e)}});window.addEventListener("load",(function(){O(),$(),G.start(),Q.start(),C.listen(B),B()}));
function e(e){this.message=e}e.prototype=new Error,e.prototype.name="InvalidCharacterError";var t="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(t){var n=String(t).replace(/=+$/,"");if(n.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,r,i=0,a=0,s="";r=n.charAt(a++);~r&&(o=i%4?64*o+r:r,i++%4)?s+=String.fromCharCode(255&o>>(-2*i&6)):0)r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(r);return s};function n(e){var n=e.replace(/-/g,"+").replace(/_/g,"/");switch(n.length%4){case 0:break;case 2:n+="==";break;case 3:n+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(t(e).replace(/(.)/g,(function(e,t){var n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n="0"+n),"%"+n})))}(n)}catch(e){return t(n)}}function o(e){this.message=e}function r(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function i(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}o.prototype=new Error,o.prototype.name="InvalidTokenError";var a=function(){function e(e){var t=this,n=this;this._status="Initial",this.onChange=function(e){n.options.onChange&&n.options.onChange(e)},this.onConnect=function(e){try{return t.status="Connected",t.options.onChange&&t.options.onChange(e),Promise.resolve(new Promise((function(e){t.resolvePromise=e})))}catch(e){return Promise.reject(e)}},this.onDisconnect=function(){n.status="Connecting",n.start()},this.options=e}var t=e.prototype;return t.start=function(){var e=this,t=0;this.status="Connecting";var n=function(){return e.status},o=c(this.options.attempts)||10,r=function(){if("Connected"!==n()){var r=new CustomEvent(e.options.contextName,{bubbles:!0,cancelable:!0,composed:!0,detail:{onConnect:e.onConnect,onChange:e.onChange,onDisconnect:e.onDisconnect}});c(e.options.element).dispatchEvent(r),"Connected"!==n()?++t>=o&&(e._interval&&clearInterval(e._interval),e.status="Timeout"):"Connected"===n()&&e._interval&&clearInterval(e._interval)}};return(c(this.options.pollingMs)||100)>0&&o>1&&(this._interval=setInterval(r,c(this.options.pollingMs)||100)),r(),this},t.stop=function(){return this._interval&&clearInterval(this._interval),this.resolvePromise&&this.resolvePromise(),this.status="Initial",this},i(e,[{key:"status",set:function(e){this._status=e,this.options.onStatus&&this.options.onStatus(e)},get:function(){return this._status}}]),e}(),s=function(){function e(e){var t=this;this.__listeners=[],this.connectListener=function(e){try{e.stopPropagation(),t.__listeners=[].concat(t.__listeners,[e.detail]);var n=function(n,o){try{var r=Promise.resolve(e.detail.onConnect(t.__current)).then((function(){}))}catch(e){return o(!0,e)}return r&&r.then?r.then(o.bind(null,!1),o.bind(null,!0)):o(!1,r)}(0,(function(n,o){var r,i;if(t.__listeners=(i=(r=t.__listeners).indexOf(e.detail),r.slice(0,i).concat(r.slice(i+1,r.length))),n)throw o;return o}));return Promise.resolve(n&&n.then?n.then((function(){})):void 0)}catch(e){return Promise.reject(e)}},this.options=e,this.__current=c(e.initialState)}var t=e.prototype;return t.start=function(){return c(this.options.element).addEventListener(this.options.contextName,this.connectListener),this},t.stop=function(){return c(this.options.element).removeEventListener(this.options.contextName,this.connectListener),this.__listeners.map((function(e){e.onDisconnect()})),this.__listeners=[],this},i(e,[{key:"context",set:function(e){this.__current=e,this.__listeners.forEach((function(t){return t.onChange(e)}))},get:function(){return c(this.__current)}},{key:"listeners",get:function(){return Object.freeze([].concat(this.__listeners))}}]),e}();function c(e){return"function"==typeof typeof e?e():e}var l=Object.defineProperty,u=Object.defineProperties,d=Object.getOwnPropertyDescriptors,h=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,p=Object.prototype.propertyIsEnumerable,f=(e,t,n)=>t in e?l(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,g=(e,t)=>{for(var n in t||(t={}))w.call(t,n)&&f(e,n,t[n]);if(h)for(var n of h(t))p.call(t,n)&&f(e,n,t[n]);return e},y=(e,t)=>u(e,d(t));function m(){var e,t;return window.SquatchAndroid?{type:"SquatchAndroid",android:window.SquatchAndroid,widgetIdent:window.widgetIdent}:window.SquatchPortal?{type:"SquatchPortal",env:window.SquatchPortal}:window.SquatchAdmin?{type:"SquatchAdmin",adminSDK:window.SquatchAdmin}:window.widgetIdent&&"demo"!==(null==(e=window.widgetIdent)?void 0:e.env)?{type:"SquatchJS2",api:null==(t=window.frameElement)?void 0:t.squatchJsApi,widgetIdent:window.widgetIdent}:{type:"None"}}function v(){const e=m();switch(e.type){case"SquatchAndroid":case"SquatchJS2":return e.widgetIdent.tenantAlias;case"SquatchAdmin":case"None":return"demo";case"SquatchPortal":return e.env.tenantAlias}}function S(){var e;const t=m();switch(t.type){case"SquatchAndroid":case"SquatchJS2":return t.widgetIdent.appDomain;case"SquatchPortal":return(null==(e=t.env)?void 0:e.appDomain)||"https://app.referralsaasquatch.com";case"SquatchAdmin":case"None":return"https://app.referralsaasquatch.com"}}var b=(()=>{var e;try{return null==(e=null==window?void 0:window.localStorage)?void 0:e.getItem("debug")}catch(e){return!1}})();function q(e,...t){b&&console.debug(`sq:environment:${e}`,...t)}var I=(...e)=>q("history",...e);function _(e){if("string"==typeof e)return e;const t=new URL(e.pathname,window.origin);return e.search&&(t.search=e.search),e.hash&&(t.hash=e.hash),t}function x(){if("SquatchPortal"===m().type){let e=function(e){const t=window.history[e];return function(...n){const o=t.apply(window.history,n),r=new Event(e);return window.dispatchEvent(r),o}};return window.history.pushState=e("pushState"),window.history.replaceState=e("replaceState"),new class{constructor(){this.listeners=new Set,window.addEventListener("popstate",this.notify.bind(this)),window.addEventListener("pushState",this.notify.bind(this)),window.addEventListener("replaceState",this.notify.bind(this))}listen(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}notify(){I("notifying listeners of route change",this.location),this.listeners&&this.listeners.forEach((e=>e()))}get location(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash,state:window.history.state}}back(){this.go(-1)}forward(){this.go(1)}go(e){window.history.go(e)}push(e,t){const n=_(e);window.history.pushState(t,"",n)}replace(e,t){const n=_(e);window.history.replaceState(t,"",n)}}}return new class{constructor(){this.history=[{pathname:"/",search:"",hash:""}],this.index=0,this.listeners=new Set}listen(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}current(){return this.history[this.index]}get state(){return this.current().state}notify(){I("notifying listeners of route change",this.location),this.listeners.forEach((e=>e()))}get location(){return this.history[this.index]}back(){this.go(-1)}forward(){this.go(1)}go(e){this.index+=e,this.index<0&&(this.index=0),this.index>=this.history.length&&(this.index=this.history.length-1),this.notify()}push(e,t){let n;n="string"==typeof e?{pathname:e,search:this.history[this.index].search,hash:this.history[this.index].hash,state:t}:y(g({},e),{state:t}),this.index++,this.history.splice(this.index,this.history.length,n),this.notify()}replace(e,t){this.history[this.index]="string"==typeof e?{pathname:e,search:"",hash:"",state:t}:y(g({},e),{state:t}),this.notify()}}}function P(){return window.squatchHistory=window.squatchHistory||x(),window.squatchHistory}var C=new class{get location(){return P().location}listen(e){return P().listen(e)}back(){P().back()}forward(){P().forward()}go(e){P().go(e)}push(e,t){P().push(e,t)}replace(e,t){P().replace(e,t)}};function E(e){if(e&&/^[a-z]{2}_(?:[A-Z]{2}|[0-9]{3})$/.test(e))return e}function $(){var e;let t=window.squatchLocale;if(!t){((...e)=>{q("sq:locale",...e)})("Creating locale context provider");const n=(null==(e=window.widgetIdent)?void 0:e.locale)??E(navigator.language.replaceAll("-","_"));t=new s({element:document.documentElement,initialState:n,contextName:"sq:locale"}).start(),window.squatchLocale=t}return t}function k(){var e;return null==(e=window.squatchLocale)?void 0:e.context}var N=(...e)=>q("sq:locale",...e);var L=(...e)=>q("sq:locale",...e),A=new a({contextName:"sq:user-identity",element:(()=>{const e="__environment_context_listener";let t=document.getElementById(e);return t||(t=document.createElement("div"),t.id=e,document.documentElement.appendChild(t)),t})(),onChange:async e=>{var t;const n=$(),o=(null==(t=window.widgetIdent)?void 0:t.locale)??E(navigator.language.replaceAll("-","_"));let r;if(e){L("User context changed, refetching locale");const e=await async function(){var e;N("Fetching locale from GraphQL for current user");try{const t=await fetch(`${S()}/api/v1/${v()}/graphql`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${null==(e=U())?void 0:e.jwt}`},body:JSON.stringify({query:"\n query {\n viewer {\n ... on User {\n locale\n }\n }\n }\n"})});if(!t.ok)throw new Error("Failed to fetch locale");const n=await t.json();if(n.errors)throw new Error(JSON.stringify(n.errors,null,2));return n.data.viewer.locale||void 0}catch(e){return void N("Failed to fetch locale for current user",e.message)}}();n.context!==e&&(L(`New value fetched from GraphQL [${e}]`),r=e||o)}else r=o;L(`Setting locale context to [${r}]`),n.context=r}});function O(){let e=window.squatchUserIdentity;return e||(((...e)=>{q("sq:user-identity",...e)})("Creating user context provider"),e=new s({element:document.documentElement,initialState:R(),contextName:"sq:user-identity"}).start(),window.squatchUserIdentity=e,L("Starting user context listener for locale updates"),A.start()),e}function j(e){if(e)try{const t=function(e,t){if("string"!=typeof e)throw new o("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(n(e.split(".")[r]))}catch(e){throw new o("Invalid token specified: "+e.message)}}(e),r=t.exp;let i,a;if(function(e){return e.sub&&/.*:.*@.*:users/.test(e.sub)}(t)){const e=t.sub.match(/(.*):(.*)@(.*):users/);(null==e?void 0:e[1])&&(a=atob(e[1])),(null==e?void 0:e[2])&&(i=atob(e[2]))}else(function(e){return e.user&&e.user.id&&e.user.accountId})(t)&&(a=t.user.accountId,i=t.user.id);if(!i||!a)return;if(r&&Date.now()>=1e3*r)return;return{id:i,accountId:a,jwt:e}}catch(e){return}}function R(){const e=m();switch(e.type){case"SquatchAndroid":case"SquatchJS2":return{id:e.widgetIdent.userId,accountId:e.widgetIdent.accountId,jwt:e.widgetIdent.token};case"SquatchPortal":const t=new URLSearchParams(document.location.search);if(t.has("jwt"))return j(t.get("jwt"));const n=localStorage.getItem("sq:user-identity");if(!n)return;try{const e=JSON.parse(n),t=j(e.jwt);return t?g(g({},e),t):void 0}catch(e){return}case"SquatchAdmin":case"None":return}}function U(){var e;return null==(e=window.squatchUserIdentity)?void 0:e.context}const J=localStorage.getItem("debug");function T(e,...t){J&&console.debug(`sq:microsite:${e}`,...t)}const M={};let D=[];function H(e){var t;const n=[];let o=document.body;D.length>0&&(D[D.length-1].element.innerHTML=""),[...e.layouts].reverse().forEach(((e,t)=>{var r;if((null===(r=D[t])||void 0===r?void 0:r.key)===e.key)T("render",`reusing element for layout [${e.key}]`),o=D[t].element,n.push({key:e.key,element:o});else{D.splice(t).forEach((e=>{T("render",`removing element for layout [${e.key}]`),e.element.remove()}));const r=document.createElement("div");r.style.display="contents",r.id=e.key,r.attachShadow({mode:"open"}),r.shadowRoot.innerHTML=e.values.html,o.appendChild(r),o=r,n.push({key:e.key,element:r}),T("render",`created element for layout [${e.key}]`)}})),o.innerHTML=e.page.values.html,document.title=e.page.values.title,function(e){const t=document.head.querySelector('meta[name="description"]');if(t)t.content=e;else{const t=document.createElement("meta");t.name="description",t.content=e,document.head.append(t)}}(null!==(t=e.page.values.description)&&void 0!==t?t:""),D=n}var F;!function(e){e[e.Render=0]="Render",e[e.Redirect=1]="Redirect",e[e.NotAllowed=2]="NotAllowed"}(F||(F={}));async function B(e=C.location.pathname){var t;const n=await async function(e,t){const n=`${e}${t?`_${t}`:""}`;if(M[n])return T("fetchPage",`avoiding GraphQL call in lieu of cache for [${e}]`),M[n];try{const n=await fetch(`${S()}/api/v1/${v()}/graphql`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({operationName:"RenderMicrositePage",query:"\n query RenderMicrositePage($urlPath: String!, $locale: RSLocale) {\n renderMicrositePage(urlPath: $urlPath, locale: $locale) {\n micrositePageConfig {\n urlPath\n values\n allowedUsers\n disallowedUrlPath\n }\n micrositeLayoutConfigs {\n key\n values\n }\n }\n }\n",variables:{urlPath:e,locale:t}})});if(!n.ok)throw new Error("Failed to fetch page");const o=await n.json();if(o.errors)throw new Error(JSON.stringify(o.errors,null,2));const r=o.data,i={page:r.renderMicrositePage.micrositePageConfig,layouts:r.renderMicrositePage.micrositeLayoutConfigs};return M[e]=i,i}catch(e){throw document.body.innerHTML=`\n <div style="padding: 12px;">\n <h3>Sorry, something went wrong</h3>\n <pre style="padding: 12px; font-family: monospace; font-size: 12px;">${e.message}</pre>\n </div>\n `,e}}(e,k()),o=n.page.allowedUsers,r=n.page.disallowedUrlPath,i=U(),a=(null==i?void 0:i.jwt)?(null===(t=i.managedIdentity)||void 0===t?void 0:t.emailVerified)?"VERIFIED":"UNVERIFIED":"PUBLIC";let s=F.Render;a!=o&&(s=r?F.Redirect:"PUBLIC"===o?F.Render:F.NotAllowed);let c=`pathname[${e}] userType[${a}] allowedUsers[${o}]`;switch(s){case F.Render:T("router",`${c} user is allowed, rendering the page`),H(n);break;case F.Redirect:T("router",`${c} redirecting to ${r}`),C.push(r);break;case F.NotAllowed:T("router",`${c} user is not allowed, rendering an error page`),document.body.innerHTML='\n <div style="padding: 12px;">\n <h3>Not allowed.</h3>\n </div>\n'}}const z=(()=>{const e="__context_listener";let t=document.getElementById(e);return t||(t=document.createElement("div"),t.id=e,document.documentElement.appendChild(t)),t})(),G=new a({contextName:"sq:user-identity",element:z,onChange:e=>{T("user-context",`old[${JSON.stringify(U())}] new[${JSON.stringify(e)}]`)},onStatus:e=>{T("user-context",e)}}),Q=new a({contextName:"sq:locale",element:z,onChange:e=>{e&&(T("locale-context",`old[${k()}] new[${e}]`),D=[],B())},onStatus:e=>{T("locale-context",e)}});window.addEventListener("load",(function(){O(),$(),G.start(),Q.start(),C.listen(B),B()}));
{
"name": "@saasquatch/microsite-router",
"version": "1.0.3-0",
"version": "1.0.3-1",
"description": "SaaSquatch microsite client-side router and hierarchical layout renderer.",

@@ -5,0 +5,0 @@ "author": "ReferralSaaSquatch.com, Inc.",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc