@frigade/react 1.35.8 → 1.35.9

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/lib/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import wt,{createContext as _p,useEffect as $o,useState as Ie}from"react";import{ThemeProvider as Hp}from"styled-components";import bt,{useContext as xp,useEffect as Lo,useState as fr}from"react";import{useCallback as ht,useContext as Wl,useEffect as _l}from"react";import Yo,{useMemo as Dr}from"react";var Lr="1.35.8 ";var Ne="NOT_STARTED_STEP",q="COMPLETED_FLOW",xo="ABORTED_FLOW",xt="STARTED_FLOW",$e="NOT_STARTED_FLOW",Me="COMPLETED_STEP",ho="STARTED_STEP";function We(){let{publicApiKey:e,userId:t,apiUrl:o}=Yo.useContext(K);return{config:Dr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Lr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Dr(()=>`${o}/v1/public/`,[o])}}var Bl="frigade-last-call-at-",El="frigade-last-call-data-";function It(){let{shouldGracefullyDegrade:e,readonly:t}=Yo.useContext(K);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return Nt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Nt();let r=Bl+o,n=El+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),c=window.localStorage.getItem(n);if(p&&c&&c==i.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Nt()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return Nt(p)}return s?s.ok?s:Nt(s.statusText):Nt()}}function Nt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ot(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Yo.useContext(K);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as Ml,useState as $r}from"react";import{useContext as Nl,useEffect as Il,useState as Ol}from"react";import Ll from"swr";import{useContext as Al}from"react";function we(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=Al(K);function n(d,x=!1){return e[d]??x}function s(d,x){t(b=>({...b,[d]:x}))}function p(d){t(x=>{let{[d]:b,...w}=x;return{...w}})}function c(d){r.includes(d)||i(x=>[...x,d])}function a(d){return r.includes(d)}function g(d){return Object.entries(e).some(([x,b])=>b&&x!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:g,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import Dl from"swr/immutable";var $l="unknown";function ve(){let{config:e,apiUrl:t}=We(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=Nl(K),{resetOpenFlowState:c}=we(),[a,g]=Ol(!1),d={data:n.map(F=>({flowId:F.id,flowState:q,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},x=F=>fetch(F,e).then(k=>{if(k.ok)return k.json();throw new Error("Failed to fetch user flow states")}).catch(k=>(console.log(`Error fetching ${F}: ${k}. Will gracefully degrade and hide Frigade`),s(!0),d)),b=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:w,isLoading:v,mutate:f,error:E}=p?Dl(b,x):Ll(b,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),S=w==null?void 0:w.data;Il(()=>{!a&&!v&&S&&g(!0)},[S,a,v]);async function y(F){if(S&&!p){let k=S.find(O=>O.flowId===F);k&&k.flowState!==q&&(k.flowState=q),await f(Promise.resolve({...w,data:S}),{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1})}}async function A(F,k,O){if(S){let N=S.find(I=>I.flowId===F);N&&(N.stepStates[k]=O,N.flowState=xt),await f(Promise.resolve({...w,data:S}),{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1})}}async function C(F,k,O){if(S){let N=S.find(I=>I.flowId===F);N&&(N.lastStepId=k,N.stepStates[k]=O,N.flowState=xt),await f({...w,data:S},{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1})}}async function m(F){if(S){let k=S.find(O=>O.flowId===F);k&&k.flowState!==$e&&(k.flowState=$e,k.lastStepId=$l,Object.keys(k.stepStates).forEach(O=>{k.stepStates[O].actionType=Ne,k.stepStates[O].createdAt=new Date().toISOString()}),await f({...w,data:S},{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1}),c(F))}}async function B(F,k){if(S){let O=S.find(N=>N.flowId===F);O&&O.stepStates[k]!==Ne&&(O.stepStates[k]=Ne),await f({...w,data:S},{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:S,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:y,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:A,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:C,error:E}}function Xt(){let{config:e,apiUrl:t}=We(),{userFlowStatesData:o,mutateUserFlowState:i}=ve(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Ml(K),[c,a]=$r(new Set),[g,d]=$r(new Set),x=It();function b(f){let E=JSON.stringify(f);if(c.has(E))return null;c.add(E),a(c),g.add(f),d(g);let S=s==null?void 0:s.find(y=>y.flowSlug===f.flowSlug&&y.stepId===f.stepId&&y.actionType===f.actionType&&y.createdAt===f.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:E}).then(y=>{y.status!==200&&y.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...r,f])):S||p(A=>[...A??[],f])})}async function w(f){f.foreignUserId&&(f.actionType===xt||f.actionType===$e?await b(f):f.actionType===q?await b(f):f.actionType===ho?await b(f):f.actionType===Me?await b(f):f.actionType===xo?await b(f):f.actionType===Ne&&await b(f))}function v(){let f=[];return o==null||o.forEach(E=>{if(E&&E.stepStates&&Object.keys(E.stepStates).length!==0)for(let S in E.stepStates){let y=E.stepStates[S];f.push({foreignUserId:E.foreignUserId,flowSlug:E.flowId,stepId:y.stepId,actionType:y.actionType,data:{},createdAt:new Date(y.createdAt),blocked:y.blocked,hidden:y.hidden})}}),[...f,...s]}return{addResponse:w,setFlowResponses:p,getFlowResponses:v}}import Hl from"swr";var Ul=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Mr=e=>{let t=Ul.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=zl(i,"'","");n.startsWith("flow_")&&(o=n)}),o},zl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Y(){let{config:e,apiUrl:t}=We(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:g,setShouldGracefullyDegrade:d,readonly:x}=Wl(K),b={data:[]},{verifySDKInitiated:w}=Ot(),{addResponse:v,getFlowResponses:f}=Xt(),E=u=>fetch(u,e).then(h=>h.ok?h.json():(console.log(`Error fetching ${u} (${h.status}): ${h.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),b)).catch(h=>(console.log(`Error fetching ${u}: ${h}. Will gracefully degrade and hide Frigade`),d(!0),b)),{mutateUserFlowState:S,userFlowStatesData:y,isLoadingUserFlowStateData:A,optimisticallyMarkFlowCompleted:C,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:B,optimisticallyMarkStepNotStarted:F,optimisticallyMarkStepStarted:k}=ve(),{data:O,error:N,isLoading:I}=Hl(n?`${t}flows${x?"?readonly=true":""}`:null,E,{keepPreviousData:!0});_l(()=>{if(N){console.error(N);return}O&&O.data&&i(O.data)},[O,N]);function $(u){if(I)return null;let h=o.find(P=>P.slug===u);return!h&&o.length>0&&!A&&!I?(console.log(`Flow with slug ${u} not found`),null):(h==null?void 0:h.active)===!1?null:h}function D(u){var W;if(!$(u))return[];let h=$(u).data;return h?(h=ee(h),(((W=JSON.parse(h))==null?void 0:W.data)??[]).map(M=>{let De=se(M);return{handleSecondaryButtonClick:()=>{M.skippable===!0&&j(u,M.id,{skipped:!0})},...M,complete:ge(u,M.id)===Me||De>=1,blocked:re(u,M.id),hidden:L(u,M.id),handlePrimaryButtonClick:()=>{(!M.completionCriteria&&(M.autoMarkCompleted||M.autoMarkCompleted===void 0)||M.completionCriteria&&M.autoMarkCompleted===!0)&&j(u,M.id)},progress:De}}).filter(M=>M.hidden!==!0)):[]}function ee(u){return u.replaceAll(/\${(.*?)}/g,(h,P)=>s[P]===void 0?"":String(s[P]).replace(/[\u00A0-\u9999<>\&]/g,function(W){return"&#"+W.charCodeAt(0)+";"}).replaceAll(/[\\]/g,"\\\\").replaceAll(/[\"]/g,'\\"').replaceAll(/[\/]/g,"\\/").replaceAll(/[\b]/g,"\\b").replaceAll(/[\f]/g,"\\f").replaceAll(/[\n]/g,"\\n").replaceAll(/[\r]/g,"\\r").replaceAll(/[\t]/g,"\\t"))}function U(u){if(!$(u))return[];let h=$(u).data;return h?(h=ee(h),JSON.parse(h)??{}):[]}function te(u,h){p(P=>({...P,[u]:h}))}function fe(u){!A&&!I&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(h=>{te(h,u[h])})}let X=ht(async(u,h,P)=>{if(!w())return;let W={foreignUserId:r,flowSlug:u,stepId:h,actionType:ho,data:P??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await k(u,h,W),v(W))},[r,y]),H=ht(async(u,h,P)=>{if(!w())return;let W={foreignUserId:r,flowSlug:u,stepId:h,actionType:Ne,data:P??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await F(u,h),v(W))},[r,y]),j=ht(async(u,h,P)=>{if(!w())return;let W={foreignUserId:r,flowSlug:u,stepId:h,actionType:Me,data:P??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await B(u,h,W),v(W))},[r,y]),Ce=ht(async(u,h)=>{if(!w()||pe(u)===$e)return;let P={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:$e,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),J(P)&&v(P)},[r,y]),Ae=ht(async(u,h)=>{if(!w())return;let P={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xt,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};J(P)&&v(P)},[r,y]),be=ht(async(u,h)=>{if(!w())return;let P={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:q,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};J(P)&&(await C(u),v(P))},[r,y]),me=ht(async(u,h)=>{if(!w())return;let P={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xo,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};J(P)&&(await C(u),v(P))},[r,y]);function J(u){var h;if(!y&&u.actionType===Ne)return!1;if(y){let P=y.find(W=>W.flowId===u.flowSlug);if(u.actionType===Ne&&(!(P!=null&&P.stepStates[u.stepId])||P.stepStates[u.stepId].actionType===Ne)||P&&((h=P.stepStates[u.stepId])==null?void 0:h.actionType)===u.actionType||P&&P.flowState===q&&u.actionType===q)return!1}return!0}function ge(u,h){let P=V(u,h);return A?null:P?P.actionType:Ne}function re(u,h){let P=V(u,h);return P?P.blocked:!1}function L(u,h){let P=V(u,h);return P?P.hidden:!1}function V(u,h){if(A)return null;let P=y==null?void 0:y.find(W=>W.flowId===u);return!P||!P.stepStates[h]?null:P.stepStates[h]??null}function G(u){var P;if(A||!y)return null;if(pe(u)===$e)return D(u)[0]??null;let h=(P=y.find(W=>W.flowId===u))==null?void 0:P.lastStepId;return h?D(u).find(W=>W.id===h):null}function ne(u){let h=G(u);if(!h)return 0;let P=D(u).findIndex(W=>W.id===h.id)??0;return ge(u,h.id)===Me&&P<D(u).length-1?P+1:P}function se(u){if(!u.completionCriteria)return;let h=Mr(u.completionCriteria);if(h===null)return;let P=qe(h),W=Le(h);return W===0?void 0:P/W}function pe(u){let h=y==null?void 0:y.find(P=>P.flowId===u);return h?h.flowState:null}function qe(u){let h=D(u);return h.length===0?0:h.filter(W=>ge(u,W.id)===Me).length}function Le(u){return D(u).length}function Et(u){let h=o.find(P=>P.slug===u);return h?JSON.parse(h.data):null}function ft(u){if(x)return!1;if(A)return!0;if(u!=null&&u.targetingLogic&&y){let h=y.find(P=>P.flowId===u.slug);if(h)return h.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function At(u){return!ft($(u))}function gt(){r&&S()}return{getFlow:$,getFlowData:Et,isLoading:A||I,getStepStatus:ge,getFlowSteps:D,getCurrentStepIndex:ne,markStepStarted:X,markStepCompleted:j,markFlowNotStarted:Ce,markFlowStarted:Ae,markFlowCompleted:be,markFlowAborted:me,markStepNotStarted:H,getFlowStatus:pe,getNumberOfStepsCompleted:qe,getNumberOfSteps:Le,targetingLogicShouldHideFlow:ft,setCustomVariable:te,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:se,getFlowMetadata:U,isStepBlocked:re,isStepHidden:L,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:At,refresh:gt}}import{useCallback as Ur,useContext as jl,useEffect as Vl}from"react";var Lt="guest_";function Jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=jl(K),{config:n,apiUrl:s}=We(),{mutateUserFlowState:p}=ve(),c=It(),{verifySDKInitiated:a}=Ot();Vl(()=>{if(e&&!t){if(e.startsWith(Lt))return;let x=`frigade-user-registered-${e}`;localStorage.getItem(x)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(x,"true"))}},[e,r,t]);let g=Ur(async x=>{if(!a())return;let b={foreignId:e,properties:x};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(b)}),i(w=>({...w,...x})),p()},[e,n,r,p]),d=Ur(async(x,b)=>{if(!a())return;let v={foreignId:e,events:[{event:x,properties:b}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:g,trackEventForUser:d}}import{v4 as hp}from"uuid";import Ve,{useEffect as mp,useState as up}from"react";import Ue,{useEffect as Rl}from"react";import So from"styled-components";import Gl from"react";import Kl from"styled-components";var zr="fr-",Qt="cfr-";function l(e,t){let o=`${zr}${e}`;if(!t)return o;if(t.styleOverrides&&t.styleOverrides[e]){if(typeof t.styleOverrides[e]=="string")return o+" "+t.styleOverrides[e];if(typeof t.styleOverrides[e]=="object")return o+" "+Qt+e}return o}function T(e){if(!e.className||e.className.indexOf(Qt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(zr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Xo(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Ye(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Xo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function xe(...e){return e.filter(Boolean).join(" ")}function Zt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var ql=Kl.div`
2
+ import wt,{createContext as _p,useEffect as $o,useState as Ie}from"react";import{ThemeProvider as Hp}from"styled-components";import bt,{useContext as xp,useEffect as Lo,useState as fr}from"react";import{useCallback as ht,useContext as Wl,useEffect as _l}from"react";import Yo,{useMemo as Dr}from"react";var Lr="1.35.9 ";var Ne="NOT_STARTED_STEP",q="COMPLETED_FLOW",xo="ABORTED_FLOW",xt="STARTED_FLOW",$e="NOT_STARTED_FLOW",Me="COMPLETED_STEP",ho="STARTED_STEP";function We(){let{publicApiKey:e,userId:t,apiUrl:o}=Yo.useContext(K);return{config:Dr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Lr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Dr(()=>`${o}/v1/public/`,[o])}}var Bl="frigade-last-call-at-",El="frigade-last-call-data-";function It(){let{shouldGracefullyDegrade:e,readonly:t}=Yo.useContext(K);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return Nt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Nt();let r=Bl+o,n=El+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),c=window.localStorage.getItem(n);if(p&&c&&c==i.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Nt()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return Nt(p)}return s?s.ok?s:Nt(s.statusText):Nt()}}function Nt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ot(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Yo.useContext(K);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as Ml,useState as $r}from"react";import{useContext as Nl,useEffect as Il,useState as Ol}from"react";import Ll from"swr";import{useContext as Al}from"react";function we(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=Al(K);function n(d,x=!1){return e[d]??x}function s(d,x){t(b=>({...b,[d]:x}))}function p(d){t(x=>{let{[d]:b,...w}=x;return{...w}})}function c(d){r.includes(d)||i(x=>[...x,d])}function a(d){return r.includes(d)}function g(d){return Object.entries(e).some(([x,b])=>b&&x!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:g,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import Dl from"swr/immutable";var $l="unknown";function ve(){let{config:e,apiUrl:t}=We(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=Nl(K),{resetOpenFlowState:c}=we(),[a,g]=Ol(!1),d={data:n.map(F=>({flowId:F.id,flowState:q,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},x=F=>fetch(F,e).then(k=>{if(k.ok)return k.json();throw new Error("Failed to fetch user flow states")}).catch(k=>(console.log(`Error fetching ${F}: ${k}. Will gracefully degrade and hide Frigade`),s(!0),d)),b=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:w,isLoading:v,mutate:f,error:E}=p?Dl(b,x):Ll(b,x,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),S=w==null?void 0:w.data;Il(()=>{!a&&!v&&S&&g(!0)},[S,a,v]);async function y(F){if(S&&!p){let k=S.find(O=>O.flowId===F);k&&k.flowState!==q&&(k.flowState=q),await f(Promise.resolve({...w,data:S}),{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1})}}async function A(F,k,O){if(S){let N=S.find(I=>I.flowId===F);N&&(N.stepStates[k]=O,N.flowState=xt),await f(Promise.resolve({...w,data:S}),{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1})}}async function C(F,k,O){if(S){let N=S.find(I=>I.flowId===F);N&&(N.lastStepId=k,N.stepStates[k]=O,N.flowState=xt),await f({...w,data:S},{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1})}}async function m(F){if(S){let k=S.find(O=>O.flowId===F);k&&k.flowState!==$e&&(k.flowState=$e,k.lastStepId=$l,Object.keys(k.stepStates).forEach(O=>{k.stepStates[O].actionType=Ne,k.stepStates[O].createdAt=new Date().toISOString()}),await f({...w,data:S},{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1}),c(F))}}async function B(F,k){if(S){let O=S.find(N=>N.flowId===F);O&&O.stepStates[k]!==Ne&&(O.stepStates[k]=Ne),await f({...w,data:S},{optimisticData:{...w,data:S},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:S,isLoadingUserFlowStateData:!a,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:y,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:A,optimisticallyMarkStepNotStarted:B,optimisticallyMarkStepStarted:C,error:E}}function Xt(){let{config:e,apiUrl:t}=We(),{userFlowStatesData:o,mutateUserFlowState:i}=ve(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=Ml(K),[c,a]=$r(new Set),[g,d]=$r(new Set),x=It();function b(f){let E=JSON.stringify(f);if(c.has(E))return null;c.add(E),a(c),g.add(f),d(g);let S=s==null?void 0:s.find(y=>y.flowSlug===f.flowSlug&&y.stepId===f.stepId&&y.actionType===f.actionType&&y.createdAt===f.createdAt);return x(`${t}flowResponses`,{...e,method:"POST",body:E}).then(y=>{y.status!==200&&y.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...r,f])):S||p(A=>[...A??[],f])})}async function w(f){f.foreignUserId&&(f.actionType===xt||f.actionType===$e?await b(f):f.actionType===q?await b(f):f.actionType===ho?await b(f):f.actionType===Me?await b(f):f.actionType===xo?await b(f):f.actionType===Ne&&await b(f))}function v(){let f=[];return o==null||o.forEach(E=>{if(E&&E.stepStates&&Object.keys(E.stepStates).length!==0)for(let S in E.stepStates){let y=E.stepStates[S];f.push({foreignUserId:E.foreignUserId,flowSlug:E.flowId,stepId:y.stepId,actionType:y.actionType,data:{},createdAt:new Date(y.createdAt),blocked:y.blocked,hidden:y.hidden})}}),[...f,...s]}return{addResponse:w,setFlowResponses:p,getFlowResponses:v}}import Hl from"swr";var Ul=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Mr=e=>{let t=Ul.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=zl(i,"'","");n.startsWith("flow_")&&(o=n)}),o},zl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Y(){let{config:e,apiUrl:t}=We(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:g,setShouldGracefullyDegrade:d,readonly:x}=Wl(K),b={data:[]},{verifySDKInitiated:w}=Ot(),{addResponse:v,getFlowResponses:f}=Xt(),E=u=>fetch(u,e).then(h=>h.ok?h.json():(console.log(`Error fetching ${u} (${h.status}): ${h.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),b)).catch(h=>(console.log(`Error fetching ${u}: ${h}. Will gracefully degrade and hide Frigade`),d(!0),b)),{mutateUserFlowState:S,userFlowStatesData:y,isLoadingUserFlowStateData:A,optimisticallyMarkFlowCompleted:C,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:B,optimisticallyMarkStepNotStarted:F,optimisticallyMarkStepStarted:k}=ve(),{data:O,error:N,isLoading:I}=Hl(n?`${t}flows${x?"?readonly=true":""}`:null,E,{keepPreviousData:!0});_l(()=>{if(N){console.error(N);return}O&&O.data&&i(O.data)},[O,N]);function $(u){if(I)return null;let h=o.find(P=>P.slug===u);return!h&&o.length>0&&!A&&!I?(console.log(`Flow with slug ${u} not found`),null):(h==null?void 0:h.active)===!1?null:h}function D(u){var W;if(!$(u))return[];let h=$(u).data;return h?(h=ee(h),(((W=JSON.parse(h))==null?void 0:W.data)??[]).map(M=>{let De=se(M);return{handleSecondaryButtonClick:()=>{M.skippable===!0&&j(u,M.id,{skipped:!0})},...M,complete:ge(u,M.id)===Me||De>=1,blocked:re(u,M.id),hidden:L(u,M.id),handlePrimaryButtonClick:()=>{(!M.completionCriteria&&(M.autoMarkCompleted||M.autoMarkCompleted===void 0)||M.completionCriteria&&M.autoMarkCompleted===!0)&&j(u,M.id)},progress:De}}).filter(M=>M.hidden!==!0)):[]}function ee(u){return u.replaceAll(/\${(.*?)}/g,(h,P)=>s[P]===void 0?"":String(s[P]).replace(/[\u00A0-\u9999<>\&]/g,function(W){return"&#"+W.charCodeAt(0)+";"}).replaceAll(/[\\]/g,"\\\\").replaceAll(/[\"]/g,'\\"').replaceAll(/[\/]/g,"\\/").replaceAll(/[\b]/g,"\\b").replaceAll(/[\f]/g,"\\f").replaceAll(/[\n]/g,"\\n").replaceAll(/[\r]/g,"\\r").replaceAll(/[\t]/g,"\\t"))}function U(u){if(!$(u))return[];let h=$(u).data;return h?(h=ee(h),JSON.parse(h)??{}):[]}function te(u,h){p(P=>({...P,[u]:h}))}function fe(u){!A&&!I&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(h=>{te(h,u[h])})}let X=ht(async(u,h,P)=>{if(!w())return;let W={foreignUserId:r,flowSlug:u,stepId:h,actionType:ho,data:P??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await k(u,h,W),v(W))},[r,y]),H=ht(async(u,h,P)=>{if(!w())return;let W={foreignUserId:r,flowSlug:u,stepId:h,actionType:Ne,data:P??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await F(u,h),v(W))},[r,y]),j=ht(async(u,h,P)=>{if(!w())return;let W={foreignUserId:r,flowSlug:u,stepId:h,actionType:Me,data:P??{},createdAt:new Date,blocked:!1,hidden:!1};J(W)&&(await B(u,h,W),v(W))},[r,y]),Ce=ht(async(u,h)=>{if(!w()||pe(u)===$e)return;let P={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:$e,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),J(P)&&v(P)},[r,y]),Ae=ht(async(u,h)=>{if(!w())return;let P={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xt,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};J(P)&&v(P)},[r,y]),be=ht(async(u,h)=>{if(!w())return;let P={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:q,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};J(P)&&(await C(u),v(P))},[r,y]),me=ht(async(u,h)=>{if(!w())return;let P={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xo,data:h??{},createdAt:new Date,blocked:!1,hidden:!1};J(P)&&(await C(u),v(P))},[r,y]);function J(u){var h;if(!y&&u.actionType===Ne)return!1;if(y){let P=y.find(W=>W.flowId===u.flowSlug);if(u.actionType===Ne&&(!(P!=null&&P.stepStates[u.stepId])||P.stepStates[u.stepId].actionType===Ne)||P&&((h=P.stepStates[u.stepId])==null?void 0:h.actionType)===u.actionType||P&&P.flowState===q&&u.actionType===q)return!1}return!0}function ge(u,h){let P=V(u,h);return A?null:P?P.actionType:Ne}function re(u,h){let P=V(u,h);return P?P.blocked:!1}function L(u,h){let P=V(u,h);return P?P.hidden:!1}function V(u,h){if(A)return null;let P=y==null?void 0:y.find(W=>W.flowId===u);return!P||!P.stepStates[h]?null:P.stepStates[h]??null}function G(u){var P;if(A||!y)return null;if(pe(u)===$e)return D(u)[0]??null;let h=(P=y.find(W=>W.flowId===u))==null?void 0:P.lastStepId;return h?D(u).find(W=>W.id===h):null}function ne(u){let h=G(u);if(!h)return 0;let P=D(u).findIndex(W=>W.id===h.id)??0;return ge(u,h.id)===Me&&P<D(u).length-1?P+1:P}function se(u){if(!u.completionCriteria)return;let h=Mr(u.completionCriteria);if(h===null)return;let P=qe(h),W=Le(h);return W===0?void 0:P/W}function pe(u){let h=y==null?void 0:y.find(P=>P.flowId===u);return h?h.flowState:null}function qe(u){let h=D(u);return h.length===0?0:h.filter(W=>ge(u,W.id)===Me).length}function Le(u){return D(u).length}function Et(u){let h=o.find(P=>P.slug===u);return h?JSON.parse(h.data):null}function ft(u){if(x)return!1;if(A)return!0;if(u!=null&&u.targetingLogic&&y){let h=y.find(P=>P.flowId===u.slug);if(h)return h.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function At(u){return!ft($(u))}function gt(){r&&S()}return{getFlow:$,getFlowData:Et,isLoading:A||I,getStepStatus:ge,getFlowSteps:D,getCurrentStepIndex:ne,markStepStarted:X,markStepCompleted:j,markFlowNotStarted:Ce,markFlowStarted:Ae,markFlowCompleted:be,markFlowAborted:me,markStepNotStarted:H,getFlowStatus:pe,getNumberOfStepsCompleted:qe,getNumberOfSteps:Le,targetingLogicShouldHideFlow:ft,setCustomVariable:te,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:se,getFlowMetadata:U,isStepBlocked:re,isStepHidden:L,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:At,refresh:gt}}import{useCallback as Ur,useContext as jl,useEffect as Vl}from"react";var Lt="guest_";function Jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=jl(K),{config:n,apiUrl:s}=We(),{mutateUserFlowState:p}=ve(),c=It(),{verifySDKInitiated:a}=Ot();Vl(()=>{if(e&&!t){if(e.startsWith(Lt))return;let x=`frigade-user-registered-${e}`;localStorage.getItem(x)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(x,"true"))}},[e,r,t]);let g=Ur(async x=>{if(!a())return;let b={foreignId:e,properties:x};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(b)}),i(w=>({...w,...x})),p()},[e,n,r,p]),d=Ur(async(x,b)=>{if(!a())return;let v={foreignId:e,events:[{event:x,properties:b}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(v)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:g,trackEventForUser:d}}import{v4 as hp}from"uuid";import Ve,{useEffect as mp,useState as up}from"react";import Ue,{useEffect as Rl}from"react";import So from"styled-components";import Gl from"react";import Kl from"styled-components";var zr="fr-",Qt="cfr-";function l(e,t){let o=`${zr}${e}`;if(!t)return o;if(t.styleOverrides&&t.styleOverrides[e]){if(typeof t.styleOverrides[e]=="string")return o+" "+t.styleOverrides[e];if(typeof t.styleOverrides[e]=="object")return o+" "+Qt+e}return o}function T(e){if(!e.className||e.className.indexOf(Qt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(zr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Xo(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Ye(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Xo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function xe(...e){return e.filter(Boolean).join(" ")}function Zt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var ql=Kl.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;