@frigade/react 1.32.83 → 1.32.84

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 ht,{createContext as Wa,useEffect as To,useState as Ae}from"react";import{ThemeProvider as Ha}from"styled-components";import gt,{useContext as _a,useEffect as wo,useState as tr}from"react";import{useCallback as mt,useContext as ll,useEffect as al}from"react";import Do,{useMemo as Sr}from"react";var Cr="1.32.83 ";var Ee="NOT_STARTED_STEP",X="COMPLETED_FLOW",no="ABORTED_FLOW",ct="STARTED_FLOW",Ie="NOT_STARTED_FLOW",Ne="COMPLETED_STEP",so="STARTED_STEP";function Me(){let{publicApiKey:e,userId:t,apiUrl:o}=Do.useContext(G);return{config:Sr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Cr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Sr(()=>`${o}/v1/public/`,[o])}}var Xs="frigade-last-call-at-",Qs="frigade-last-call-data-";function Tt(){let{shouldGracefullyDegrade:e,readonly:t}=Do.useContext(G);return async(o,n)=>{if(t&&(n.method==="POST"||n.method==="PUT"||n.method==="DELETE"))return wt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),wt();let r=Xs+o,i=Qs+o;if(window&&window.localStorage&&n&&n.body&&n.method==="POST"){let p=window.localStorage.getItem(r),d=window.localStorage.getItem(i);if(p&&d&&d==n.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return wt()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(i,n.body)}let s;try{s=await fetch(o,n)}catch(p){return wt(p)}return s?s.ok?s:wt(s.statusText):wt()}}function wt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ft(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Do.useContext(G);function o(){if(t){console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize");return}e||console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider")}return{verifySDKInitiated:o}}import{useContext as il,useState as yr}from"react";import{useContext as Rs,useEffect as el,useState as tl}from"react";import ol from"swr";import{useContext as Zs}from"react";function Fe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:n,completedFlowsToKeepOpenDuringSession:r}=Zs(G);function i(c,h=!1){return e[c]??h}function s(c,h){t(f=>({...f,[c]:h}))}function p(c){t(h=>{let{[c]:f,...v}=h;return{...v}})}function d(c){r.includes(c)||n(h=>[...h,c])}function a(c){return r.includes(c)}function S(c){return Object.entries(e).some(([h,f])=>f&&h!=c)||o}return{getOpenFlowState:i,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:S,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var rl="unknown";function Be(){let{config:e,apiUrl:t}=Me(),{publicApiKey:o,userId:n,organizationId:r,flows:i,setShouldGracefullyDegrade:s,readonly:p}=Rs(G),{resetOpenFlowState:d}=Fe(),[a,S]=tl(!1),c={data:i.map(x=>({flowId:x.id,flowState:X,lastStepId:null,userId:n,foreignUserId:n,stepStates:{},shouldTrigger:!1}))},h=x=>fetch(x,e).then(g=>{if(g.ok)return g.json();throw new Error("Failed to fetch user flow states")}).catch(g=>(console.log(`Error fetching ${x}: ${g}. Will gracefully degrade and hide Frigade`),s(!0),c)),{data:f,isLoading:v,mutate:F,error:C}=ol(o&&i&&n?`${t}userFlowStates?foreignUserId=${encodeURIComponent(n)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,h,{revalidateOnFocus:p!==!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>c,onLoadingSlow:()=>c}),y=f==null?void 0:f.data;el(()=>{!a&&!v&&y&&S(!0)},[y,a,v]);async function T(x){if(y&&!p){let g=y.find(I=>I.flowId===x);g&&g.flowState!==X&&(g.flowState=X),await F(Promise.resolve({...f,data:y}),{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1})}}async function k(x,g,I){if(y){let D=y.find(z=>z.flowId===x);D&&(D.stepStates[g]=I,D.flowState=ct),await F(Promise.resolve({...f,data:y}),{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1})}}async function A(x,g,I){if(y){let D=y.find(z=>z.flowId===x);D&&(D.lastStepId=g,D.stepStates[g]=I,D.flowState=ct),await F({...f,data:y},{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1})}}async function b(x){if(y){let g=y.find(I=>I.flowId===x);g&&g.flowState!==Ie&&(g.flowState=Ie,g.lastStepId=rl,Object.keys(g.stepStates).forEach(I=>{g.stepStates[I].actionType=Ee,g.stepStates[I].createdAt=new Date().toISOString()}),await F({...f,data:y},{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1}),d(x))}}async function m(x,g){if(y){let I=y.find(D=>D.flowId===x);I&&I.stepStates[g]!==Ee&&(I.stepStates[g]=Ee),await F({...f,data:y},{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:y,isLoadingUserFlowStateData:!a,mutateUserFlowState:F,optimisticallyMarkFlowCompleted:T,optimisticallyMarkFlowNotStarted:b,optimisticallyMarkStepCompleted:k,optimisticallyMarkStepNotStarted:m,optimisticallyMarkStepStarted:A,error:C}}function Wt(){let{config:e,apiUrl:t}=Me(),{userFlowStatesData:o,mutateUserFlowState:n}=Be(),{failedFlowResponses:r,setFailedFlowResponses:i,flowResponses:s,setFlowResponses:p}=il(G),[d,a]=yr(new Set),[S,c]=yr(new Set),h=Tt();function f(C){let y=JSON.stringify(C);if(d.has(y))return null;d.add(y),a(d),S.add(C),c(S);let T=s==null?void 0:s.find(k=>k.flowSlug===C.flowSlug&&k.stepId===C.stepId&&k.actionType===C.actionType&&k.createdAt===C.createdAt);return h(`${t}flowResponses`,{...e,method:"POST",body:y}).then(k=>{k.status!==200&&k.status!==201?(console.log("Failed to send flow response for step "+C.stepId+". Will retry again later."),i([...r,C])):T||p(A=>[...A??[],C])})}async function v(C){C.foreignUserId&&(C.actionType===ct||C.actionType===Ie?await f(C):C.actionType===X?await f(C):C.actionType===so?await f(C):C.actionType===Ne?await f(C):C.actionType===no?await f(C):C.actionType===Ee&&await f(C))}function F(){let C=[];return o==null||o.forEach(y=>{if(y&&y.stepStates&&Object.keys(y.stepStates).length!==0)for(let T in y.stepStates){let k=y.stepStates[T];C.push({foreignUserId:y.foreignUserId,flowSlug:y.flowId,stepId:k.stepId,actionType:k.actionType,data:{},createdAt:new Date(k.createdAt),blocked:k.blocked,hidden:k.hidden})}}),[...C,...s]}return{addResponse:v,setFlowResponses:p,getFlowResponses:F}}import pl from"swr";var nl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,br=e=>{let t=nl.exec(e);if(t===null)return null;let o=null;return t.forEach((n,r)=>{let i=sl(n,"'","");i.startsWith("flow_")&&(o=i)}),o},sl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Q(){let{config:e,apiUrl:t}=Me(),{flows:o,setFlows:n,userId:r,publicApiKey:i,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,setFlowResponses:S,setShouldGracefullyDegrade:c,readonly:h}=ll(G),f={data:[]},{verifySDKInitiated:v}=Ft(),{addResponse:F,getFlowResponses:C}=Wt(),y=u=>fetch(u,e).then(w=>w.ok?w.json():(console.log(`Error fetching ${u} (${w.status}): ${w.statusText}. .Will gracefully degrade and hide Frigade`),c(!0),f)).catch(w=>(console.log(`Error fetching ${u}: ${w}. Will gracefully degrade and hide Frigade`),c(!0),f)),{userFlowStatesData:T,isLoadingUserFlowStateData:k,optimisticallyMarkFlowCompleted:A,optimisticallyMarkFlowNotStarted:b,optimisticallyMarkStepCompleted:m,optimisticallyMarkStepNotStarted:x,optimisticallyMarkStepStarted:g}=Be(),{data:I,error:D,isLoading:z}=pl(i?`${t}flows`:null,y,{keepPreviousData:!0});al(()=>{if(D){console.error(D);return}I&&I.data&&n(I.data)},[I,D]);function N(u){if(z)return null;let w=o.find(E=>E.slug===u);return!w&&o.length>0&&!k&&!z?(console.log(`Flow with slug ${u} not found`),null):(w==null?void 0:w.active)===!1?null:w}function M(u){var B;if(!N(u))return[];let w=N(u).data;return w?(w=H(w),(((B=JSON.parse(w))==null?void 0:B.data)??[]).map(J=>{let dt=je(J);return{handleSecondaryButtonClick:()=>{J.skippable===!0&&ge(u,J.id,{skipped:!0})},...J,complete:ae(u,J.id)===Ne||dt>=1,blocked:_(u,J.id),hidden:O(u,J.id),handlePrimaryButtonClick:()=>{(!J.completionCriteria&&(J.autoMarkCompleted||J.autoMarkCompleted===void 0)||J.completionCriteria&&J.autoMarkCompleted===!0)&&ge(u,J.id)},progress:dt}}).filter(J=>J.hidden!==!0)):[]}function H(u){return u.replaceAll(/\${(.*?)}/g,(w,E)=>s[E]===void 0?"":String(s[E]).replace(/[\u00A0-\u9999<>\&]/g,function(B){return"&#"+B.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 L(u){if(!N(u))return[];let w=N(u).data;return w?(w=H(w),JSON.parse(w)??{}):[]}function ne(u,w){p(E=>({...E,[u]:w}))}function fe(u){!k&&!z&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(w=>{ne(w,u[w])})}let Y=mt(async(u,w,E)=>{v();let B={foreignUserId:r,flowSlug:u,stepId:w,actionType:so,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};K(B)&&(await g(u,w,B),F(B))},[r,T]),V=mt(async(u,w,E)=>{v();let B={foreignUserId:r,flowSlug:u,stepId:w,actionType:Ee,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};K(B)&&(await x(u,w),F(B))},[r,T]),ge=mt(async(u,w,E)=>{v();let B={foreignUserId:r,flowSlug:u,stepId:w,actionType:Ne,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};K(B)&&(await m(u,w,B),F(B))},[r,T]),ee=mt(async(u,w)=>{if(v(),De(u)===Ie)return;let E={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Ie,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};await b(u),K(E)&&F(E)},[r,T]),q=mt(async(u,w)=>{v();let E={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:ct,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};K(E)&&F(E)},[r,T]),he=mt(async(u,w)=>{v();let E={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:X,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};K(E)&&(await A(u),F(E))},[r,T]),Te=mt(async(u,w)=>{v();let E={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:no,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};K(E)&&(await A(u),F(E))},[r,T]);function K(u){var w;if(!T&&u.actionType===Ee)return!1;if(T){let E=T.find(B=>B.flowId===u.flowSlug);if(u.actionType===Ee&&(!(E!=null&&E.stepStates[u.stepId])||E.stepStates[u.stepId].actionType===Ee)||E&&((w=E.stepStates[u.stepId])==null?void 0:w.actionType)===u.actionType||E&&E.flowState===X&&u.actionType===X)return!1}return!0}function ae(u,w){let E=te(u,w);return k?null:E?E.actionType:Ee}function _(u,w){let E=te(u,w);return E?E.blocked:!1}function O(u,w){let E=te(u,w);return E?E.hidden:!1}function te(u,w){if(k)return null;let E=T==null?void 0:T.find(B=>B.flowId===u);return!E||!E.stepStates[w]?null:E.stepStates[w]??null}function j(u){var E;if(k||!T)return null;if(De(u)===Ie)return M(u)[0]??null;let w=(E=T.find(B=>B.flowId===u))==null?void 0:E.lastStepId;return w?M(u).find(B=>B.id===w):null}function oe(u){let w=j(u);if(!w)return 0;let E=M(u).findIndex(B=>B.id===w.id)??0;return ae(u,w.id)===Ne&&E<M(u).length-1?E+1:E}function je(u){if(!u.completionCriteria)return;let w=br(u.completionCriteria);if(w===null)return;let E=pt(w),B=W(w);return B===0?void 0:E/B}function De(u){let w=T==null?void 0:T.find(E=>E.flowId===u);return w?w.flowState:null}function pt(u){let w=M(u);return w.length===0?0:w.filter(B=>ae(u,B.id)===Ne).length}function W(u){return M(u).length}function ve(u){return JSON.parse(o.find(w=>w.slug===u).data)}function $e(u){if(h)return!1;if(k)return!0;if(u!=null&&u.targetingLogic&&T){let w=T.find(E=>E.flowId===u.slug);if(w)return w.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function Oo(u){return!$e(N(u))}return{getFlow:N,getFlowData:ve,isLoading:k||z,getStepStatus:ae,getFlowSteps:M,getCurrentStepIndex:oe,markStepStarted:Y,markStepCompleted:ge,markFlowNotStarted:ee,markFlowStarted:q,markFlowCompleted:he,markFlowAborted:Te,markStepNotStarted:V,getFlowStatus:De,getNumberOfStepsCompleted:pt,getNumberOfSteps:W,targetingLogicShouldHideFlow:$e,setCustomVariable:ne,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:je,getFlowMetadata:L,isStepBlocked:_,isStepHidden:O,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,isFlowAvailableToUser:Oo}}import{useCallback as wr,useContext as dl,useEffect as cl}from"react";var kt="guest_";function Ht(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:n,shouldGracefullyDegrade:r}=dl(G),{config:i,apiUrl:s}=Me(),{mutateUserFlowState:p}=Be(),d=Tt(),{verifySDKInitiated:a}=Ft();cl(()=>{if(e&&!t){if(e.startsWith(kt))return;let h=`frigade-user-registered-${e}`;localStorage.getItem(h)||(d(`${s}users`,{...i,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(h,"true"))}},[e,r,t]);let S=wr(async h=>{a();let f={foreignId:e,properties:h};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(f)}),n(v=>({...v,...h})),p()},[e,i,r,p]),c=wr(async(h,f)=>{a();let F={foreignId:e,events:[{event:h,properties:f}]};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(F)}),p()},[e,i,p]);return{userId:e,setUserId:o,addPropertiesToUser:S,trackEventForUser:c}}import{v4 as za}from"uuid";import _e,{useEffect as Da,useState as $a}from"react";import Le,{useEffect as Cl}from"react";import po from"styled-components";import ml from"react";import ul from"styled-components";var Tr="fr-",Vt="cfr-";function l(e,t){let o=`${Tr}${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+" "+Vt+e}return o}function P(e){if(!e.className||e.className.indexOf(Vt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Tr)?"":`:not(${o.map(n=>`.${n}`).join(", ")})`}function $o(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Ge(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${$o(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ce(...e){return e.filter(Boolean).join(" ")}function jt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var fl=ul.div`
2
+ import ht,{createContext as Wa,useEffect as To,useState as Ae}from"react";import{ThemeProvider as Ha}from"styled-components";import gt,{useContext as _a,useEffect as wo,useState as tr}from"react";import{useCallback as mt,useContext as ll,useEffect as al}from"react";import Do,{useMemo as Sr}from"react";var Cr="1.32.84 ";var Ee="NOT_STARTED_STEP",X="COMPLETED_FLOW",no="ABORTED_FLOW",ct="STARTED_FLOW",Ie="NOT_STARTED_FLOW",Ne="COMPLETED_STEP",so="STARTED_STEP";function Me(){let{publicApiKey:e,userId:t,apiUrl:o}=Do.useContext(G);return{config:Sr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Cr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Sr(()=>`${o}/v1/public/`,[o])}}var Xs="frigade-last-call-at-",Qs="frigade-last-call-data-";function Tt(){let{shouldGracefullyDegrade:e,readonly:t}=Do.useContext(G);return async(o,n)=>{if(t&&(n.method==="POST"||n.method==="PUT"||n.method==="DELETE"))return wt();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),wt();let r=Xs+o,i=Qs+o;if(window&&window.localStorage&&n&&n.body&&n.method==="POST"){let p=window.localStorage.getItem(r),d=window.localStorage.getItem(i);if(p&&d&&d==n.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return wt()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(i,n.body)}let s;try{s=await fetch(o,n)}catch(p){return wt(p)}return s?s.ok?s:wt(s.statusText):wt()}}function wt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ft(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Do.useContext(G);function o(){if(t){console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize");return}e||console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider")}return{verifySDKInitiated:o}}import{useContext as il,useState as yr}from"react";import{useContext as Rs,useEffect as el,useState as tl}from"react";import ol from"swr";import{useContext as Zs}from"react";function Fe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:n,completedFlowsToKeepOpenDuringSession:r}=Zs(G);function i(c,h=!1){return e[c]??h}function s(c,h){t(f=>({...f,[c]:h}))}function p(c){t(h=>{let{[c]:f,...v}=h;return{...v}})}function d(c){r.includes(c)||n(h=>[...h,c])}function a(c){return r.includes(c)}function S(c){return Object.entries(e).some(([h,f])=>f&&h!=c)||o}return{getOpenFlowState:i,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:S,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var rl="unknown";function Be(){let{config:e,apiUrl:t}=Me(),{publicApiKey:o,userId:n,organizationId:r,flows:i,setShouldGracefullyDegrade:s,readonly:p}=Rs(G),{resetOpenFlowState:d}=Fe(),[a,S]=tl(!1),c={data:i.map(x=>({flowId:x.id,flowState:X,lastStepId:null,userId:n,foreignUserId:n,stepStates:{},shouldTrigger:!1}))},h=x=>fetch(x,e).then(g=>{if(g.ok)return g.json();throw new Error("Failed to fetch user flow states")}).catch(g=>(console.log(`Error fetching ${x}: ${g}. Will gracefully degrade and hide Frigade`),s(!0),c)),{data:f,isLoading:v,mutate:F,error:C}=ol(o&&i&&n?`${t}userFlowStates?foreignUserId=${encodeURIComponent(n)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,h,{revalidateOnFocus:p!==!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>c,onLoadingSlow:()=>c}),y=f==null?void 0:f.data;el(()=>{!a&&!v&&y&&S(!0)},[y,a,v]);async function T(x){if(y&&!p){let g=y.find(I=>I.flowId===x);g&&g.flowState!==X&&(g.flowState=X),await F(Promise.resolve({...f,data:y}),{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1})}}async function k(x,g,I){if(y){let D=y.find(z=>z.flowId===x);D&&(D.stepStates[g]=I,D.flowState=ct),await F(Promise.resolve({...f,data:y}),{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1})}}async function A(x,g,I){if(y){let D=y.find(z=>z.flowId===x);D&&(D.lastStepId=g,D.stepStates[g]=I,D.flowState=ct),await F({...f,data:y},{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1})}}async function b(x){if(y){let g=y.find(I=>I.flowId===x);g&&g.flowState!==Ie&&(g.flowState=Ie,g.lastStepId=rl,Object.keys(g.stepStates).forEach(I=>{g.stepStates[I].actionType=Ee,g.stepStates[I].createdAt=new Date().toISOString()}),await F({...f,data:y},{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1}),d(x))}}async function m(x,g){if(y){let I=y.find(D=>D.flowId===x);I&&I.stepStates[g]!==Ee&&(I.stepStates[g]=Ee),await F({...f,data:y},{optimisticData:{...f,data:y},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:y,isLoadingUserFlowStateData:!a,mutateUserFlowState:F,optimisticallyMarkFlowCompleted:T,optimisticallyMarkFlowNotStarted:b,optimisticallyMarkStepCompleted:k,optimisticallyMarkStepNotStarted:m,optimisticallyMarkStepStarted:A,error:C}}function Wt(){let{config:e,apiUrl:t}=Me(),{userFlowStatesData:o,mutateUserFlowState:n}=Be(),{failedFlowResponses:r,setFailedFlowResponses:i,flowResponses:s,setFlowResponses:p}=il(G),[d,a]=yr(new Set),[S,c]=yr(new Set),h=Tt();function f(C){let y=JSON.stringify(C);if(d.has(y))return null;d.add(y),a(d),S.add(C),c(S);let T=s==null?void 0:s.find(k=>k.flowSlug===C.flowSlug&&k.stepId===C.stepId&&k.actionType===C.actionType&&k.createdAt===C.createdAt);return h(`${t}flowResponses`,{...e,method:"POST",body:y}).then(k=>{k.status!==200&&k.status!==201?(console.log("Failed to send flow response for step "+C.stepId+". Will retry again later."),i([...r,C])):T||p(A=>[...A??[],C])})}async function v(C){C.foreignUserId&&(C.actionType===ct||C.actionType===Ie?await f(C):C.actionType===X?await f(C):C.actionType===so?await f(C):C.actionType===Ne?await f(C):C.actionType===no?await f(C):C.actionType===Ee&&await f(C))}function F(){let C=[];return o==null||o.forEach(y=>{if(y&&y.stepStates&&Object.keys(y.stepStates).length!==0)for(let T in y.stepStates){let k=y.stepStates[T];C.push({foreignUserId:y.foreignUserId,flowSlug:y.flowId,stepId:k.stepId,actionType:k.actionType,data:{},createdAt:new Date(k.createdAt),blocked:k.blocked,hidden:k.hidden})}}),[...C,...s]}return{addResponse:v,setFlowResponses:p,getFlowResponses:F}}import pl from"swr";var nl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,br=e=>{let t=nl.exec(e);if(t===null)return null;let o=null;return t.forEach((n,r)=>{let i=sl(n,"'","");i.startsWith("flow_")&&(o=i)}),o},sl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Q(){let{config:e,apiUrl:t}=Me(),{flows:o,setFlows:n,userId:r,publicApiKey:i,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,setFlowResponses:S,setShouldGracefullyDegrade:c,readonly:h}=ll(G),f={data:[]},{verifySDKInitiated:v}=Ft(),{addResponse:F,getFlowResponses:C}=Wt(),y=u=>fetch(u,e).then(w=>w.ok?w.json():(console.log(`Error fetching ${u} (${w.status}): ${w.statusText}. .Will gracefully degrade and hide Frigade`),c(!0),f)).catch(w=>(console.log(`Error fetching ${u}: ${w}. Will gracefully degrade and hide Frigade`),c(!0),f)),{userFlowStatesData:T,isLoadingUserFlowStateData:k,optimisticallyMarkFlowCompleted:A,optimisticallyMarkFlowNotStarted:b,optimisticallyMarkStepCompleted:m,optimisticallyMarkStepNotStarted:x,optimisticallyMarkStepStarted:g}=Be(),{data:I,error:D,isLoading:z}=pl(i?`${t}flows${h?"?readonly=true":""}`:null,y,{keepPreviousData:!0});al(()=>{if(D){console.error(D);return}I&&I.data&&n(I.data)},[I,D]);function N(u){if(z)return null;let w=o.find(E=>E.slug===u);return!w&&o.length>0&&!k&&!z?(console.log(`Flow with slug ${u} not found`),null):(w==null?void 0:w.active)===!1?null:w}function M(u){var B;if(!N(u))return[];let w=N(u).data;return w?(w=H(w),(((B=JSON.parse(w))==null?void 0:B.data)??[]).map(J=>{let dt=je(J);return{handleSecondaryButtonClick:()=>{J.skippable===!0&&ge(u,J.id,{skipped:!0})},...J,complete:ae(u,J.id)===Ne||dt>=1,blocked:_(u,J.id),hidden:O(u,J.id),handlePrimaryButtonClick:()=>{(!J.completionCriteria&&(J.autoMarkCompleted||J.autoMarkCompleted===void 0)||J.completionCriteria&&J.autoMarkCompleted===!0)&&ge(u,J.id)},progress:dt}}).filter(J=>J.hidden!==!0)):[]}function H(u){return u.replaceAll(/\${(.*?)}/g,(w,E)=>s[E]===void 0?"":String(s[E]).replace(/[\u00A0-\u9999<>\&]/g,function(B){return"&#"+B.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 L(u){if(!N(u))return[];let w=N(u).data;return w?(w=H(w),JSON.parse(w)??{}):[]}function ne(u,w){p(E=>({...E,[u]:w}))}function fe(u){!k&&!z&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(w=>{ne(w,u[w])})}let Y=mt(async(u,w,E)=>{v();let B={foreignUserId:r,flowSlug:u,stepId:w,actionType:so,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};K(B)&&(await g(u,w,B),F(B))},[r,T]),V=mt(async(u,w,E)=>{v();let B={foreignUserId:r,flowSlug:u,stepId:w,actionType:Ee,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};K(B)&&(await x(u,w),F(B))},[r,T]),ge=mt(async(u,w,E)=>{v();let B={foreignUserId:r,flowSlug:u,stepId:w,actionType:Ne,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};K(B)&&(await m(u,w,B),F(B))},[r,T]),ee=mt(async(u,w)=>{if(v(),De(u)===Ie)return;let E={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Ie,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};await b(u),K(E)&&F(E)},[r,T]),q=mt(async(u,w)=>{v();let E={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:ct,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};K(E)&&F(E)},[r,T]),he=mt(async(u,w)=>{v();let E={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:X,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};K(E)&&(await A(u),F(E))},[r,T]),Te=mt(async(u,w)=>{v();let E={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:no,data:w??{},createdAt:new Date,blocked:!1,hidden:!1};K(E)&&(await A(u),F(E))},[r,T]);function K(u){var w;if(!T&&u.actionType===Ee)return!1;if(T){let E=T.find(B=>B.flowId===u.flowSlug);if(u.actionType===Ee&&(!(E!=null&&E.stepStates[u.stepId])||E.stepStates[u.stepId].actionType===Ee)||E&&((w=E.stepStates[u.stepId])==null?void 0:w.actionType)===u.actionType||E&&E.flowState===X&&u.actionType===X)return!1}return!0}function ae(u,w){let E=te(u,w);return k?null:E?E.actionType:Ee}function _(u,w){let E=te(u,w);return E?E.blocked:!1}function O(u,w){let E=te(u,w);return E?E.hidden:!1}function te(u,w){if(k)return null;let E=T==null?void 0:T.find(B=>B.flowId===u);return!E||!E.stepStates[w]?null:E.stepStates[w]??null}function j(u){var E;if(k||!T)return null;if(De(u)===Ie)return M(u)[0]??null;let w=(E=T.find(B=>B.flowId===u))==null?void 0:E.lastStepId;return w?M(u).find(B=>B.id===w):null}function oe(u){let w=j(u);if(!w)return 0;let E=M(u).findIndex(B=>B.id===w.id)??0;return ae(u,w.id)===Ne&&E<M(u).length-1?E+1:E}function je(u){if(!u.completionCriteria)return;let w=br(u.completionCriteria);if(w===null)return;let E=pt(w),B=W(w);return B===0?void 0:E/B}function De(u){let w=T==null?void 0:T.find(E=>E.flowId===u);return w?w.flowState:null}function pt(u){let w=M(u);return w.length===0?0:w.filter(B=>ae(u,B.id)===Ne).length}function W(u){return M(u).length}function ve(u){return JSON.parse(o.find(w=>w.slug===u).data)}function $e(u){if(h)return!1;if(k)return!0;if(u!=null&&u.targetingLogic&&T){let w=T.find(E=>E.flowId===u.slug);if(w)return w.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function Oo(u){return!$e(N(u))}return{getFlow:N,getFlowData:ve,isLoading:k||z,getStepStatus:ae,getFlowSteps:M,getCurrentStepIndex:oe,markStepStarted:Y,markStepCompleted:ge,markFlowNotStarted:ee,markFlowStarted:q,markFlowCompleted:he,markFlowAborted:Te,markStepNotStarted:V,getFlowStatus:De,getNumberOfStepsCompleted:pt,getNumberOfSteps:W,targetingLogicShouldHideFlow:$e,setCustomVariable:ne,updateCustomVariables:fe,customVariables:s,getStepOptionalProgress:je,getFlowMetadata:L,isStepBlocked:_,isStepHidden:O,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,isFlowAvailableToUser:Oo}}import{useCallback as wr,useContext as dl,useEffect as cl}from"react";var kt="guest_";function Ht(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:n,shouldGracefullyDegrade:r}=dl(G),{config:i,apiUrl:s}=Me(),{mutateUserFlowState:p}=Be(),d=Tt(),{verifySDKInitiated:a}=Ft();cl(()=>{if(e&&!t){if(e.startsWith(kt))return;let h=`frigade-user-registered-${e}`;localStorage.getItem(h)||(d(`${s}users`,{...i,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(h,"true"))}},[e,r,t]);let S=wr(async h=>{a();let f={foreignId:e,properties:h};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(f)}),n(v=>({...v,...h})),p()},[e,i,r,p]),c=wr(async(h,f)=>{a();let F={foreignId:e,events:[{event:h,properties:f}]};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(F)}),p()},[e,i,p]);return{userId:e,setUserId:o,addPropertiesToUser:S,trackEventForUser:c}}import{v4 as za}from"uuid";import _e,{useEffect as Da,useState as $a}from"react";import Le,{useEffect as Cl}from"react";import po from"styled-components";import ml from"react";import ul from"styled-components";var Tr="fr-",Vt="cfr-";function l(e,t){let o=`${Tr}${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+" "+Vt+e}return o}function P(e){if(!e.className||e.className.indexOf(Vt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Tr)?"":`:not(${o.map(n=>`.${n}`).join(", ")})`}function $o(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Ge(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${$o(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ce(...e){return e.filter(Boolean).join(" ")}function jt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var fl=ul.div`
3
3
  display: flex;
4
4
  justify-content: center;
5
5
  position: fixed;