@picked/client 0.0.1-dev.1765227621508 → 0.0.1-dev.1765246229329

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var T=Object.defineProperty;var V=(t,e,r)=>e in t?T(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var y=(t,e,r)=>V(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),S=require("@withease/factories"),F=require("../experience-instance-DjjpHk0t.cjs"),I=require("../logger-BsmHUUw1.cjs"),k=require("../storage-YlR83AWP.cjs"),N=require("../id-BKIWbSTy.cjs"),z=require("../object-BbFTsGh3.cjs"),w=require("../supports-YvpQZxbh.cjs"),U=f.createDomain("experience"),_=S.createFactory(({client:t,experience:e})=>{const r=U.store(e),n=f.createApi(r,{merge(l,h){return{...l,...h.experience}}}),i=r.map(l=>({name:l.name,decisionLogic:l.condition??l.decide,targetSelectors:l.targets,initializeOpenLogic:e.initializeOpen})),u=t.components.listStore.map(l=>l.find(h=>h.name===`experience:${e.id}`)||l.find(h=>h.name==="experience"),{skipVoid:!1}),s=r.map(l=>({steps:l.steps,nodes:l.nodes,edges:l.edges,conditionals:l.conditionals})),o=e.actions??[];return{id:e.id,configStore:i,treeStore:s,componentStore:u,actions:o,merge:n.merge}});function q(t){return S.invoke(_,t)}const K=S.createFactory(({client:t})=>{const e=U.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.id]:o}}});function n(s){const o=e.getState()[s.id];if(o){o.merge({experience:s,strategy:"override"});return}const l=q({client:t,experience:s});r.register(l)}const i=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getById:u,listStore:i}});function H(t){return S.invoke(K,t)}const W=(t,e)=>{e.register(t)},L=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=F.getTargetElements(r,e.id);n.forEach(({elements:u})=>u.forEach(s=>F.tagTargetElement(s,e.id))),F.createAppHosts(n,e.id).forEach(u=>{t.experienceInstances.spawn(e,u)})},B=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await G(t,e)&&L(t,e)}))},G=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return F.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&F.isRulesLogic(r)?await F.evaluateRuleLogic(t,r)===!0:!0},Y=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const u=r[n]??{};r[n]=Object.freeze({...u,...i})}},J=f.createDomain("component"),Q=S.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function X(t){return S.invoke(Q,t)}const Z=S.createFactory(({client:t})=>{const e=J.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const h=X({client:t,name:s,component:o});r.register(h)}const i=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function ee(t){return S.invoke(Z,t)}const j=(t,e,r)=>{r.register(t,e)},te=f.createDomain("framework"),re=S.createFactory(({client:t})=>{const e=te.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const i=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function se(t){return S.invoke(re,t)}const ne=(t,e)=>{e.register(t.name,t)},oe=6e3,ie=k.createStorageKey("last_ping","global"),ae=t=>`${t}/api/v1/ping`,ce=async t=>{try{const e=Date.now(),r=k.localStore.get(ie);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<oe)return!0;const i=ae(t.apiUrl),u={projectId:t.projectId,path:window.location.pathname},s=JSON.stringify(u),o={"Content-Type":"application/json"},l=document.getElementById("picked_script"),h=l==null?void 0:l.dataset.verceltoken;h&&(o["x-vercel-protection-bypass"]=h);const d=(await fetch(i,{method:"POST",headers:o,body:s})).ok;return d&&r.set(e),d}catch(e){return I.logger("error",e),!1}};function ue(t){const e=typeof window<"u",r={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(r)}const le=f.createDomain("predicate"),de=S.createFactory(({client:t})=>{const e=le.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:{name:o.name,predicate:o.predicate}}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:o}))}const i=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:i}});function pe(t){return S.invoke(de,t)}const ge=(t,e,r)=>{r.register(t,e)},$=f.createDomain("feature"),fe=S.createFactory(({client:t})=>{const e=$.store({}),r=$.store([]),n=f.createApi(e,{register(d,c){return{...d,[c.id]:c.feature}}});function i(d,c){e.getState()[d]&&I.logger("warn",`Feature '${d}' already registered. Registering again will override the previous registration.`);const p={id:d,feature:{...c,id:d}};n.register(Object.freeze({id:d,feature:p}))}const u=f.createEffect(async({id:d,key:c,storage:a="local"})=>{const p=k.createStorageKey(`feature:${d}:${c}`,"global"),g=(a==="session"?k.sessionStore:k.localStore).get(p).boolean();return g===null?null:{id:d,key:c,bucket:g,storage:a}}),s=f.createEffect(d=>{if(!d)return null;const c=k.createStorageKey(`feature:${d.id}:${d.key}`,"global");(d.storage==="session"?k.sessionStore:k.localStore).set(c,d.bucket)}),o=new Map,l=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:d,resolvedFeaturesStore:c},{id:a,decide:p,key:m})=>{const g=c.find(A=>A.id===a&&A.key===m);if(g)return g;const v=d[a];if(!v)throw new Error(`Feature with id '${a}' not found`);const x=o.get(`${a}:${m}`);if(x!==void 0){const A=await x;return{id:v.id,bucket:A,key:m,storage:v.feature.storage}}const P=p();o.set(`${a}:${m}`,P);const E=await P;return{id:v.id,bucket:E,key:m,storage:v.feature.storage}}});f.sample({clock:n.register,fn:d=>{const{id:c,feature:a}=d;return{id:c,key:a.feature.key,storage:a.feature.storage}},target:u}),f.sample({source:e,clock:l.doneData,fn:(d,c)=>{var v;const{id:a,bucket:p,storage:m}=c,g=(v=d[a])==null?void 0:v.feature.key;return g?{key:g,id:a,bucket:p,storage:m}:null},target:s});const h=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:d,resolvedFeaturesStore:c})=>Object.values(d).map(a=>{const p=c.find(m=>m.id===a.id&&m.key===a.feature.key);return p?{id:a.id,name:a.feature.name,key:a.feature.key,getBucket:()=>({id:a.id,bucket:p.bucket}),isResolved:!0}:{id:a.id,name:a.feature.name,key:a.feature.key,getBucket:async()=>await l(a.feature),isResolved:!1}}));f.sample({clock:l.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:d},{id:c,key:a})=>!d.some(m=>m.id===c&&m.key===a),fn:(d,c)=>c,target:t.eventBus.prepend(d=>({type:"feature_decide",feature:d}))}),f.sample({clock:[u.doneData,l.doneData],source:r,fn:(d,c)=>!c||d.some(p=>p.id===c.id&&p.key===c.key)?d:[...d,c],target:r});function b(d){return e.map(c=>c[d],{skipVoid:!1})}return{register:i,getByName:b,listStore:h}});function me(t){return S.invoke(fe,t)}const ye=(t,e,r)=>{r.register(t,e)},R=f.createDomain("history");function C(t,e){return{id:N.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const he=S.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),r=R.event(),n=R.event(),i=R.event();t.on(e,(s,o)=>({entries:[...s.entries,C(o.experienceId,o.node)]})),t.on(r,(s,o)=>({entries:[...s.entries.slice(0,-1),C(o.experienceId,o.node)]})),t.on(i,(s,o)=>o);function u(s,o){const l={lastStepIndex:-1,secondLastStepIndex:-1};for(let h=s.length-1;h>=0;h--){const b=s[h],d=b==null?void 0:b.node;if(!(!d||!F.isStepNode(d))&&!(o&&(b==null?void 0:b.experienceId)!==o))if(l.lastStepIndex===-1)l.lastStepIndex=h;else{l.secondLastStepIndex=h;break}}return l}return t.on(n,(s,o)=>{const{secondLastStepIndex:l}=u(s.entries,o.experienceId),h=l!==-1?s.entries.slice(0,l+1):s.entries;return{...s,entries:h}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(s=>s.entries)}});function Se(){return S.invoke(he)}const ve=()=>f.createEvent(),ke=f.createDomain("field"),we=S.createFactory(()=>{const t=ke.store({}),e=f.createApi(t,{register(s,o){return{...s,[o.field.id]:o.field}}});function r(s){e.register({field:s})}const n=t.map(s=>Object.values(s));function i(s){return t.map(o=>o[s]||null)}function u(s){return t.map(o=>Object.values(o).find(l=>l.name===s)||null)}return{register:r,getById:i,listStore:n,getByName:u}});function Fe(){return S.invoke(we)}const be=(t,e)=>{e.register(t)},Ie=f.createDomain("action"),xe=S.createFactory(()=>{const t=Ie.store({}),e=f.createApi(t,{register(u,s){return{...u,[s.name]:{name:s.name,action:s.action}}}});function r(u,s){e.register({name:u,action:s})}const n=t.map(u=>Object.values(u));function i(u){return t.map(s=>s[u],{skipVoid:!1})}return{register:r,getByName:i,listStore:n}});function Ee(){return S.invoke(xe)}const Re=(t,e,r)=>{r.register(t,e)};function O(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Pe=f.createDomain("response"),Ae=S.createFactory(({client:t})=>{const e=Pe.store({}),r=f.createEvent(),n=f.createEvent(),i=f.createApi(e,{register(c,a){return{...c,[a.fieldId]:a.response}},registerBatch(c,a){return{...c,...a}},clear(c,a){const{[a]:p,...m}=c;return m},clearAll(){return{}}});function u(c,a){i.register({fieldId:c,response:a})}async function s(c){const a=[];return await Promise.allSettled(Object.entries(c).map(async([p,m])=>{let g=m;const v=t.fields.getById(p).getState();if(!v){a.push({fieldId:p,userMessage:`Field '${p}' not found`,systemMessage:`No field with ID '${p}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:g});return}if(v.multiple&&(typeof g=="string"||typeof g=="number"||typeof g=="boolean")&&(g=[g]),v.validation&&!z.isEmpty(v.validation)&&!O(g)){const x=await F.evaluateRuleLogic(t,v.validation,{$input:g});if(typeof x=="string"){a.push({fieldId:p,userMessage:x,systemMessage:`Field validation resulted in an error: ${x}.`,value:g});return}if(x===!1){a.push({fieldId:p,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:g});return}}if(v.required&&O(g)){a.push({fieldId:p,userMessage:"This field is required",systemMessage:"Field is required.",value:g});return}if(!v.multiple&&Array.isArray(g)&&g.length>1){a.push({fieldId:p,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:g});return}if(v.options){const x=v.options.map(E=>E.value),P=Array.isArray(g)?g:[g];Array.isArray(g)&&(P.every(E=>x.includes(E))||a.push({fieldId:p,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${x.join(", ")}`,value:g}))}})),{responsesToCommit:c,validationErrors:a}}async function o(c){const{responsesToCommit:a,validationErrors:p}=await s(c);return p.length?{errors:p}:(i.registerBatch(a),{errors:[]})}const l=e.map(c=>c),h=e.map(c=>Object.keys(c).map(p=>({fieldId:p,value:c[p]})));function b(c){const a=t.fields.getById(c),p=e.map(m=>m[c]||null);return f.combine({f:a,r:p},({f:m,r:g})=>g||(m!=null&&m.defaultValue?m.defaultValue:null))}function d(c){const a=t.fields.getByName(c);return f.combine({f:a,s:e},({f:p,s:m})=>{const g=p&&m[p.id]||null;return g||(p!=null&&p.defaultValue?p.defaultValue:null)})}return f.sample({clock:r,target:i.clearAll}),f.sample({clock:n,target:i.clear}),{register:u,clearAll:r,clear:n,commit:o,getResponsesToCommit:s,listStore:h,getAllStore:l,getByFieldId:b,getByFieldName:d}});function De(t){return S.invoke(Ae,t)}const Be=()=>"0.0.1-dev.1765227621508";function je(){if(w.supportsDocument()){const t=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of t)if(e!=null&&e.dataset.api)return e.dataset.api}return"https://api.picked.app"}function $e(){if(!w.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&r.add(i);for(const i of r){const u=i.replace("picked-","");e[u]=t.getAll(i)}const n=k.createStorageKey("s");if(r.size>0)k.sessionStore.set(n,e);else{const i=k.sessionStore.get(n);if(i)return i.json()||{}}return e}function Ce(){if(w.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),r=Math.random().toString(36).substring(2,15),n=Math.random().toString(36).substring(2,15);return`${t}-${e}-${r}-${n}`}const Oe=k.createStorageKey("session","global"),Ue=()=>{const t=k.localStore.get(Oe);let e;t.isSet()&&(e=t.json());const r=i=>t.set({id:i.id,isUser:i.isUser}),n={id:(e==null?void 0:e.id)??Ce(),isUser:(e==null?void 0:e.isUser)??void 0,setIsUser(i){this.isUser=i,r(this)}};return r(n),n},Le=()=>w.supportsLocalStorage()?Ue():null;class D{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",ve());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"precondition");y(this,"condition");y(this,"searchParams",$e());y(this,"history",Se());y(this,"components",ee({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",H({client:this}));y(this,"frameworks",se({client:this}));y(this,"predicates",pe({client:this}));y(this,"features",me({client:this}));y(this,"responses",De({client:this}));y(this,"fields",Fe());y(this,"actions",Ee());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||je(),this.session=Le(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:"load",version:Be()}),I.logger("info","Picked client initialized.")}start(){ce(this),(async()=>{if(!w.supportsDocument())return;let r;typeof this.precondition>"u"?r=!0:typeof this.precondition=="boolean"?r=this.precondition:r=await F.evaluateRuleLogic(this,this.precondition)===!0;let n;r&&(this.condition===void 0?n=!0:typeof this.condition=="boolean"?n=this.condition:n=await F.evaluateRuleLogic(this,this.condition)===!0);const i=r&&n===!0;if(typeof n=="boolean"&&this.session){const u=n;this.session.setIsUser(u),this.eventBus({type:"user_decide",value:u})}this.eventBus({type:"initialize"}),document.body&&i&&B(this),await F.domInteractive(),i&&B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session})})()}registerFramework(e){ne(e,this.frameworks)}registerComponent(e,r){j(e,r,this.components)}registerPlugin(e){Y(this,e,this.plugins)}registerFeature(e,r){ye(e,r,this.features)}registerPredicate(e,r){ge(e,r,this.predicates)}registerField(e){be(e,this.fields)}registerAction(e,r){Re(e,r,this.actions)}registerExperience(e){e.component&&j(`experience:${e.id}`,e.component,this.components),W(e,this.experiences)}getStateSnapshot(){return ue(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){I.logger("warn",`Experience with id '${e}' not found.`);return}L(this,r)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(r=>{if(Array.isArray(r)){r.forEach(i=>{this.registerPlugin(i)});return}const n=typeof r=="function"?r():r;if(Array.isArray(n)){n.forEach(i=>this.registerPlugin(i));return}this.registerPlugin(n)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const i=typeof n=="function"?n():n;this.registerFeature(r,i)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,i]=r.split(":");if(!n||!i)return;let u=i;u==="true"&&(u=!0),u==="false"&&(u=!1),this.registerFeature(n,{key:`${u}`,name:n,decide:()=>u,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){I.logger("warn",`Predicate "${r}" is not a function.`);return}this.registerPredicate(r,n)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){I.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}}y(D,"logger",I.logger);function M(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Me(t){return t.some(e=>e.condition||M(e))}async function Te(t,e){return e.length===0||!Me(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!M(n))return n;const s=(await Promise.all(n.options.map(async l=>l.condition?await F.evaluateRuleLogic(t,l.condition)?l:null:l))).filter(l=>l!==null);return s.length===n.options.length?n:s.length===0?null:{...n,options:s}}))).filter(n=>n!==null)}const Ve=t=>{const e=new D(t);return w.bindClient(e),e};exports.evaluateRuleLogic=F.evaluateRuleLogic;exports.isPickedRoot=F.isPickedRoot;exports.createStorageKey=k.createStorageKey;exports.localStore=k.localStore;exports.sessionStore=k.sessionStore;exports.subscribe=k.subscribe;exports.supportsCookies=w.supportsCookies;exports.supportsCryptoRandomUUID=w.supportsCryptoRandomUUID;exports.supportsDocument=w.supportsDocument;exports.supportsHistory=w.supportsHistory;exports.supportsIntersectionObserver=w.supportsIntersectionObserver;exports.supportsLocalStorage=w.supportsLocalStorage;exports.supportsLocation=w.supportsLocation;exports.supportsSessionStorage=w.supportsSessionStorage;exports.supportsShadowRoot=w.supportsShadowRoot;exports.supportsWebComponents=w.supportsWebComponents;exports.supportsWindow=w.supportsWindow;exports.Picked=D;exports.createClient=Ve;exports.getStepFields=Te;
1
+ "use strict";var m=Object.defineProperty;var y=(i,e,t)=>e in i?m(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var n=(i,e,t)=>y(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../user-session-CRVgPCug.cjs"),l=require("../logger-BsmHUUw1.cjs"),u=require("../experience-instance-DjjpHk0t.cjs"),S=require("effector"),a=require("../supports-YvpQZxbh.cjs"),p=require("../storage-YlR83AWP.cjs"),w=(i,e,t)=>{const s=e.name,o=e.setup(i);if(o){const c=t[s]??{};t[s]=Object.freeze({...c,...o})}};function v(i){const e=typeof window<"u",t={client:i,responses:i.responses.listStore.getState(),fields:i.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(t)}const I=()=>S.createEvent(),P=()=>"0.0.1-dev.1765246229329";function x(){if(a.supportsDocument()){const i=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of i)if(e!=null&&e.dataset.api)return e.dataset.api}return"https://api.picked.app"}function k(){if(!a.supportsWindow())return{};const i=new URLSearchParams(window.location.search),e={},t=new Set;for(const[o]of i.entries())o.startsWith("picked-")&&t.add(o);for(const o of t){const c=o.replace("picked-","");e[c]=i.getAll(o)}const s=p.createStorageKey("s");if(t.size>0)p.sessionStore.set(s,e);else{const o=p.sessionStore.get(s);if(o)return o.json()||{}}return e}class f{constructor(e){n(this,"options");n(this,"isReady",!1);n(this,"project");n(this,"plugins",{});n(this,"eventBus",I());n(this,"organizationId");n(this,"projectId");n(this,"apiUrl");n(this,"session");n(this,"precondition");n(this,"condition");n(this,"searchParams",k());n(this,"history",r.createHistory());n(this,"components",r.createComponentIndex({client:this}));n(this,"experienceInstances",u.createExperienceInstanceIndex({client:this}));n(this,"experiences",r.createExperienceIndex({client:this}));n(this,"frameworks",r.createFrameworkIndex({client:this}));n(this,"predicates",r.createPredicateIndex({client:this}));n(this,"features",r.createFeatureIndex({client:this}));n(this,"responses",r.createResponseIndex({client:this}));n(this,"fields",r.createFieldIndex());n(this,"actions",r.createActionIndex());l.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||x(),this.session=r.initialiseSession(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:"load",version:P()}),l.logger("info","Picked client initialized.")}start(){r.ping(this),(async()=>{if(!a.supportsDocument())return;let t;typeof this.precondition>"u"?t=!0:typeof this.precondition=="boolean"?t=this.precondition:t=await u.evaluateRuleLogic(this,this.precondition)===!0;let s;t&&(this.condition===void 0?s=!0:typeof this.condition=="boolean"?s=this.condition:s=await u.evaluateRuleLogic(this,this.condition)===!0);const o=t&&s===!0;if(typeof s=="boolean"&&this.session){const c=s;this.session.setIsUser(c),this.eventBus({type:"user_decide",value:c})}this.eventBus({type:"initialize"}),document.body&&o&&r.initialiseExperiences(this),await u.domInteractive(),o&&r.initialiseExperiences(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session})})()}registerFramework(e){r.setupFramework(e,this.frameworks)}registerComponent(e,t){r.setupComponent(e,t,this.components)}registerPlugin(e){w(this,e,this.plugins)}registerFeature(e,t){r.setupFeature(e,t,this.features)}registerPredicate(e,t){r.setupPredicate(e,t,this.predicates)}registerField(e){r.setupField(e,this.fields)}registerAction(e,t){r.setupAction(e,t,this.actions)}registerExperience(e){e.component&&r.setupComponent(`experience:${e.id}`,e.component,this.components),r.setupExperience(e,this.experiences)}getStateSnapshot(){return v(this)}async launchExperienceById(e){const t=this.experiences.getById(e).getState();if(!t){l.logger("warn",`Experience with id '${e}' not found.`);return}r.initialiseExperience(this,t)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(t=>{if(Array.isArray(t)){t.forEach(o=>{this.registerPlugin(o)});return}const s=typeof t=="function"?t():t;if(Array.isArray(s)){s.forEach(o=>this.registerPlugin(o));return}this.registerPlugin(s)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([t,s])=>{const o=typeof s=="function"?s():s;this.registerFeature(t,o)}),this.searchParams.feature&&this.searchParams.feature.forEach(t=>{try{const[s,o]=t.split(":");if(!s||!o)return;let c=o;c==="true"&&(c=!0),c==="false"&&(c=!1),this.registerFeature(s,{key:`${c}`,name:s,decide:()=>c,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([t,s])=>{if(typeof s!="function"){l.logger("warn",`Predicate "${t}" is not a function.`);return}this.registerPredicate(t,s)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([t,s])=>{if(typeof s!="function"){l.logger("warn",`Action "${t}" is not a function.`);return}this.registerAction(t,s)})}getPluginConfig(e){return this.plugins[e]??{}}}n(f,"logger",l.logger);function g(i){var e;return((e=i.options)==null?void 0:e.some(t=>"condition"in t))??!1}function E(i){return i.some(e=>e.condition||g(e))}async function b(i,e){return e.length===0||!E(e)?e:(await Promise.all(e.map(async s=>{if(!(s.condition?await u.evaluateRuleLogic(i,s.condition):!0))return null;if(!s.options||!g(s))return s;const h=(await Promise.all(s.options.map(async d=>d.condition?await u.evaluateRuleLogic(i,d.condition)?d:null:d))).filter(d=>d!==null);return h.length===s.options.length?s:h.length===0?null:{...s,options:h}}))).filter(s=>s!==null)}const R=i=>{const e=new f(i);return a.bindClient(e),e};exports.evaluateRuleLogic=u.evaluateRuleLogic;exports.isPickedRoot=u.isPickedRoot;exports.supportsCookies=a.supportsCookies;exports.supportsCryptoRandomUUID=a.supportsCryptoRandomUUID;exports.supportsDocument=a.supportsDocument;exports.supportsHistory=a.supportsHistory;exports.supportsIntersectionObserver=a.supportsIntersectionObserver;exports.supportsLocalStorage=a.supportsLocalStorage;exports.supportsLocation=a.supportsLocation;exports.supportsSessionStorage=a.supportsSessionStorage;exports.supportsShadowRoot=a.supportsShadowRoot;exports.supportsWebComponents=a.supportsWebComponents;exports.supportsWindow=a.supportsWindow;exports.createStorageKey=p.createStorageKey;exports.localStore=p.localStore;exports.sessionStore=p.sessionStore;exports.subscribe=p.subscribe;exports.Picked=f;exports.createClient=R;exports.getStepFields=b;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("effector");require("../../../user-session-CRVgPCug.cjs");const S=require("../../../supports-YvpQZxbh.cjs");require("../../../experience-instance-DjjpHk0t.cjs");const g="development";function x(e){if(!S.supportsWindow())return;const t=[];globalThis.dataLayer=globalThis.dataLayer??t,globalThis.dataLayer.push(e)}const E=()=>sessionStorage.getItem("cvly_env");function b(e){const t=e?"true":"false";document.cookie=`picked-user=${t}; path=/; max-age=31536000; samesite=none; secure`}function D(e){document.cookie=`picked-id=${e}; path=/; max-age=31536000; samesite=none; secure`}const F=(e,t)=>e.filter(c=>!!(t==null?void 0:t.fieldIds.includes(c.fieldId)));function L(e){return e.isResolved}const T=e=>e.flatMap(t=>{if(!L(t))return[];const{id:c,key:o,name:u}=t,{bucket:p}=t.getBucket();return[{name:u,key:o,feature:c,bucket:p}]}),B=e=>({id:e.experienceId,title:e.configStore.getState().name}),h=e=>{if("experience"in e&&e.experience){const{experience:t}=e;return{id:t.id,title:t.configStore.getState().name}}if("experienceInstance"in e&&e.experienceInstance){const{experienceInstance:t}=e;return B(t)}},y=s.createEvent(),q=({controlFeatureName:e="convincely-enabled",eventMappingOverride:t}={})=>({name:"data-layer-plugin",setup:c=>{if(!S.supportsWindow())return;const{organizationId:o,projectId:u}=c;c.eventBus.watch(i=>{i.type==="user_decide"&&b(i.value),i.type==="session"&&D(i.id)});const p=s.attach({source:{responses:c.responses.listStore,features:c.features.listStore},effect:async({responses:i,features:d},n)=>{var a;const{type:r}=n,v=h(n),k=E(),f="step"in n?F(i,n.step):void 0,m={event:"picked_event",picked_action:t?t[r]:r,picked_app:{organizationId:o,projectId:u},picked_feature_list:T(d),picked_environment:g,picked_step:"step"in n?n.step:void 0,picked_form:"form"in n?n.form:void 0,picked_exception:"exception"in n?(a=n.exception.reason)==null?void 0:a[0]:void 0,picked_experience:v,picked_responses:f,picked_cvly_env:k,picked_value:"value"in n?n.value:void 0,picked_item:void 0};return x(m)}}),I=new Set(["experience_open","experience_close","experience_initialize","initialize","step_enter","step_submit","experience_interaction"]),l=s.createStore(!1),_=s.createEvent(),P=s.attach({source:{features:c.features.listStore,decision:l},effect:async({features:i,decision:d},n)=>{if(d)return null;const r=i.find(a=>a.id===e);if(!r||!L(r))return null;_();const{bucket:v}=r.getBucket(),k=h(n),f=E();return x({event:"picked_event",picked_action:"picked_decision",picked_app:{organizationId:o,projectId:u},picked_feature_list:void 0,picked_environment:g,picked_value:v,picked_step:void 0,picked_form:void 0,picked_experience:k,picked_responses:void 0,picked_cvly_env:f})}});s.sample({clock:y,target:c.eventBus}),s.split({source:c.eventBus,match:{isPickedDecisionEvent:i=>i.type==="feature_decide",isInEventList:i=>I.has(i.type)},cases:{isPickedDecisionEvent:P,isInEventList:p}}),s.sample({clock:_,fn:()=>!0,target:l})}});exports.dataLayerPlugin=q;exports.pushToDataLayerEvent=y;