@picked/client 0.0.99-next.2 → 0.0.99

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.
@@ -1,5 +1,5 @@
1
1
  import "./logger-DMN6TxJJ.js";
2
- import { o as e } from "./preview-unavailable-qVCLxakS.js";
2
+ import { o as e } from "./preview-unavailable-D3dVa7V4.js";
3
3
  import { createClientHeaders as t, fetchExperienceContent as n, fetchProject as r } from "@picked/delivery-api-client";
4
4
  //#region src/data-source/api.ts
5
5
  function i(n) {
@@ -1 +1 @@
1
- require("./logger-CSTvAyyB.cjs");const e=require("./preview-unavailable-DMo_ztFb.cjs");let t=require("@picked/delivery-api-client");function n(n){return{...n,headers:{...(0,t.createClientHeaders)(`sdk`,e.o()),...n?.headers},onWarn:(e,t)=>{}}}async function r(e,r,i){return(0,t.fetchProject)(e,r,n(i))}async function i(e,r,i,a){return(0,t.fetchExperienceContent)(e,r,i,n(a))}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}});
1
+ require("./logger-CSTvAyyB.cjs");const e=require("./preview-unavailable-DfP5lMRZ.cjs");let t=require("@picked/delivery-api-client");function n(n){return{...n,headers:{...(0,t.createClientHeaders)(`sdk`,e.o()),...n?.headers},onWarn:(e,t)=>{}}}async function r(e,r,i){return(0,t.fetchProject)(e,r,n(i))}async function i(e,r,i,a){return(0,t.fetchExperienceContent)(e,r,i,n(a))}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}});
package/dist/cjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../object-CIkt7Fkr.cjs"),t=require("../rules-logic-VUbvWqdi.cjs"),n=require("../logger-CSTvAyyB.cjs"),r=require("../supports-DBzjGaWD.cjs"),i=require("../dom-DlLH3FxV.cjs"),a=require("../experience-instance-C9WV52iQ.cjs"),o=require("./logic-engine.js"),s=require("../storage-DUw9UJ2h.cjs"),c=require("../preview-unavailable-DMo_ztFb.cjs"),l=require("../id-Js-62re-.cjs"),u=require("../inert-script-report-ijRHPtcY.cjs");let d=require("effector"),f=require("@withease/factories");var p=(0,d.createDomain)(`experience`),m=(0,f.createFactory)(({client:e,experience:n})=>{let r=p.store(n),o=(0,d.createApi)(r,{merge(e,t){return{...e,...t.experience}}}),s=r.map(e=>({name:e.name,decisionLogic:e.condition,targetSelectors:e.targets,initializeOpenLogic:e.initializeOpen})),c=(0,d.combine)(r,e.components.listStore,(e,t)=>(e.componentName?t.find(t=>t.name===e.componentName):void 0)||t.find(t=>t.name===`experience:${e.id}`)||t.find(e=>e.name===`experience`),{skipVoid:!1}),l=(0,d.combine)(r,e.steps.indexStore,e.conditions.indexStore,(e,t,n)=>{let r=e.nodes.filter(a.d).map(e=>t[e.stepId]).filter(e=>e!==void 0),i=e.nodes.filter(a.u).map(e=>n[e.conditionId]).filter(e=>e!==void 0);return{steps:r,nodes:e.nodes,edges:e.edges,conditions:i}}),u=r.map(e=>a.l(e.nodes,e.edges)),f=n.actions??[],m,h=(0,d.attach)({source:s,effect:(t,r)=>{let a=i.i(t.targetSelectors,n.id);a.forEach(({elements:e})=>e.forEach(e=>i.s(e,n.id))),i.t(a,n.id,n.key).forEach(t=>{r?e.experienceInstances.spawn(m,t,r):e.experienceInstances.spawn(m,t)})}}),g=(0,d.combine)({preconditionPassed:e.preconditionPassedStore,isUser:e.session.store.map(e=>e.isUser,{skipVoid:!1}),config:s}),_=(0,d.attach)({source:g,effect:async({preconditionPassed:r,isUser:a,config:o})=>{if(!r||!a)return!1;let{decisionLogic:s,targetSelectors:c}=o;return c.length===0||i.i(c,n.id).length<1?!1:s===void 0||!t.n(s)||await t.t(e,s)===!0}}),v=(0,d.createEffect)(async()=>{if(!e.contentLoader)return!0;try{await e.contentLoader({id:n.id,key:n.key})}catch{`${n.id}`}return!0}),y=(0,d.createEvent)(),b=(0,d.createEvent)(),x=p.createStore(void 0,{skipVoid:!1}).on(y,(e,t)=>t).on(b,(e,t)=>t);return(0,d.sample)({clock:y,target:_}),(0,d.sample)({clock:_.doneData,source:x,filter:(e,t)=>t,fn:e=>e,target:h}),(0,d.sample)({clock:_.doneData,filter:Boolean,target:v}),(0,d.sample)({clock:b,source:x,fn:e=>e,target:h}),(0,d.sample)({clock:b,target:v}),m={id:n.id,key:n.key,name:n.name,configStore:s,treeStore:l,nodeTreeStore:u,componentStore:c,actions:f,merge:o.merge,initialiseFx:h,shouldInitialiseFx:_,initialiseRequested:y,initialiseDirectly:b,prepareExperienceContentFx:v},m});function h(e){return(0,f.invoke)(m,e)}var g=(0,f.createFactory)(({client:e})=>{let t=p.store({}),n=(0,d.createApi)(t,{register(e,t){return{...e,[t.id]:t}}}),r=(0,d.createEvent)(),i=(0,d.createEffect)(t=>{n.register(h({client:e,experience:t}))});(0,d.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]!==void 0,fn:(e,t)=>({existing:e[t.id],experience:t})}).watch(({existing:e,experience:t})=>{e?.merge({experience:t,strategy:`override`})}),(0,d.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]===void 0,fn:(e,t)=>t,target:i});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}function s(e){return t.map(t=>Object.values(t).find(t=>t.key===e)??t[e],{skipVoid:!1})}let c=(0,d.attach)({source:t,effect:(e,t)=>{let n=`key`in t?Object.values(e).find(e=>e.key===t.key):e[t.id];if(!n){`key`in t?`${t.key}`:`${t.id}`;return}let{options:r}=t;r?.bypassCondition?n.initialiseDirectly(r):n.initialiseRequested(r)}});return{register:r,get:o,getById:o,getByKey:s,launch:c,open:(0,d.attach)({source:{experiences:t,instances:e.experienceInstances.listStore},effect:async({experiences:e,instances:t},n)=>{let r=`key`in n?Object.values(e).find(e=>e.key===n.key):e[n.id],i=t.filter(e=>e.experienceId===r?.id);if(i.length>0){for(let e of i)e.open();return}let a=`key`in n?{key:n.key,options:{...n.options,initialiseOpen:!0}}:{id:n.id,options:{...n.options,initialiseOpen:!0}};await c(a)}}),listStore:a,initialiseExperiencesFx:(0,d.attach)({source:a,effect:e=>{for(let t of e)t.initialiseRequested(void 0)}})}});function _(e){return(0,f.invoke)(g,e)}var v=async e=>{await e.experiences.initialiseExperiencesFx()};function y(e){return(0,d.createEffect)(async()=>{await e()})}var b=(e,t,n)=>{let r=t.name,i=t.setup(e),a=n[r]??{};n[r]=Object.freeze({...a,...i})},x=(0,d.createDomain)(`component`),S=(0,f.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function C(e){return(0,f.invoke)(S,e)}var w=(0,f.createFactory)(({client:e})=>{let t=x.store({}),r=(0,d.createApi)(t,{register(e,t){return{...e,[t.name]:t}}}),i=(0,d.createEvent)();(0,d.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Component '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,d.sample)({clock:i,fn:({name:t,component:n})=>C({client:e,name:t,component:n}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function T(e){return(0,f.invoke)(w,e)}var E=(e,t,n)=>{n.register({name:e,component:t})},D=(0,d.createDomain)(`framework`),O=(0,f.createFactory)(e=>{let t=D.store({}),r=(0,d.createApi)(t,{register(e,t){return{...e,[t.name]:t.framework}}}),i=(0,d.createEvent)();(0,d.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Framework '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,d.sample)({clock:i,target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function k(e){return(0,f.invoke)(O,e)}var A=(e,t)=>{t.register({name:e.name,framework:e})},j=(0,f.createFactory)(({client:e})=>{let t=`window`in globalThis,n={location:t?globalThis.location:void 0,document:t?globalThis.document:void 0,sessionStorage:t?globalThis.sessionStorage:void 0,localStorage:t?globalThis.localStorage:void 0};return(0,d.combine)(e.responses.listStore,e.fields.listStore,(t,r)=>Object.freeze({client:e,responses:t,fields:r,...n}))});function ee(e){return(0,f.invoke)(j,e)}function M(e,t,n){return new Proxy(Object.create(null),{get(r,i){if(typeof i!=`string`)return;let a=e.find(e=>e.key===i);if(a!==void 0)return async()=>!n.has(i)&&await o.apply(a.logic,{...t,conditions:M(e,t,new Set(n).add(i))})===!0}})}function N(e,t=[],n=new WeakSet){if(e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return!0;if(typeof e!=`object`||t.includes(e))return!1;if(n.has(e))return!0;let r=Object.getPrototypeOf(e);if(!Array.isArray(e)&&r!==Object.prototype&&r!==null)return!1;let i=[...t,e];return Object.values(e).every(e=>N(e,i,n))?(n.add(e),!0):!1}var te=(0,f.createFactory)(({client:e})=>(0,d.attach)({source:{stateSnapshot:e.stateSnapshotStore,predicates:e.predicates.listStore,actions:e.actions.listStore,features:e.features.listStore,responses:e.responses.getAllStore,conditions:e.conditions.listStore},effect:async({stateSnapshot:e,predicates:t,actions:n,features:r,responses:i,conditions:a},{rule:s,context:c})=>{let l=t.reduce((t,n)=>(t[n.name]=async(...t)=>await n.predicate({...e,args:t}),t),{}),u=n.reduce((t,n)=>(t[n.key]=async(...t)=>{let r=await n.action({...e,args:t},null);return N(r)?r:void 0},t),{}),d=r.reduce((e,t)=>(e[t.id]=async()=>{let{bucket:e}=await t.getBucket();return e},e),{}),f={responses:i,location:typeof e.location==`object`?{hash:e.location.hash,host:e.location.host,hostname:e.location.hostname,href:e.location.href,origin:e.location.origin,pathname:e.location.pathname,port:e.location.port,protocol:e.location.protocol,search:e.location.search}:void 0,predicates:l,actions:u,features:d,...c},p={...f,conditions:M(a,f,new Set)};return await o.apply(s,p)}}));function ne(e){return(0,f.invoke)(te,e)}var P=(0,d.createDomain)(`lifecycle`),re=(0,f.createFactory)(({client:e})=>{let n=P.store(!1),a=(0,d.createStore)(void 0,{skipVoid:!1,domain:P}),o=(0,d.createStore)(void 0,{skipVoid:!1,domain:P}),s=P.store(`idle`),c=P.store([]),l=(0,d.createStore)(void 0,{skipVoid:!1,domain:P}),u=(0,d.createStore)(void 0,{skipVoid:!1,domain:P}),f=(0,d.createEvent)(),p=(0,d.createEvent)(),m=(0,d.createEvent)(),h=(0,d.createEvent)(),g=(0,d.createEvent)(),_=(0,d.createEvent)();c.on(h,(e,t)=>[...e,t]),l.on(g,(e,t)=>t),u.on(_,(e,t)=>t),n.on(p,()=>!0);let y=(0,d.createEffect)(async()=>{await i.r()}),b=(0,d.createEffect)(async()=>{await v(e)}),x=(0,d.attach)({effect:b}),S=(0,d.attach)({source:c,effect:async e=>{for(let t of e)await t()}}),C=(0,d.attach)({source:l,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),w=(0,d.attach)({source:u,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),T=(0,d.sample)({clock:f,source:s,filter:e=>e===`idle`&&r.i(),fn:()=>void 0});(0,d.sample)({clock:T,fn:()=>`starting`,target:s}),T.watch(e.performance.markBegin),p.watch(e.performance.measure),(0,d.sample)({clock:T,target:S}),(0,d.sample)({clock:T,target:y}),(0,d.sample)({clock:S.done,target:C}),(0,d.sample)({clock:C.doneData,target:a}),(0,d.sample)({clock:w.doneData,target:o}),(0,d.sample)({clock:C.doneData,filter:e=>e,target:w}),(0,d.sample)({clock:w.doneData,target:e.session.setIsUser}),(0,d.sample)({clock:w.doneData,fn:e=>({type:`user_decide`,value:e}),target:e.eventBus}),(0,d.sample)({clock:C.doneData,filter:e=>!e,fn:()=>void 0,target:m}),(0,d.sample)({clock:w.doneData,fn:()=>void 0,target:m}),(0,d.sample)({clock:m,fn:()=>({type:`initialize`}),target:e.eventBus});let E=(0,d.createStore)(!1).on(y.done,()=>!0),D=(0,d.createStore)(!1).on(m,()=>!0),O=(0,d.createStore)(!1).on(x.done,()=>!0),k=(0,d.combine)(a,o,(e,t)=>e===!0&&t===!0);(0,d.sample)({clock:m,source:k,filter:e=>e,fn:()=>void 0,target:b});let A=(0,d.combine)(E,D,k,(e,t,n)=>e&&t&&n);(0,d.sample)({clock:A,filter:e=>e,fn:()=>void 0,target:x});let j=(0,d.combine)(E,D,k,O,(e,t,n,r)=>e&&t&&(!n||r));return(0,d.sample)({clock:j,filter:e=>e,fn:()=>void 0,target:p}),(0,d.sample)({clock:p,fn:()=>`ready`,target:s}),(0,d.sample)({clock:p,fn:()=>({type:`ready`}),target:e.eventBus}),(0,d.sample)({clock:p,source:e.session.store,fn:({id:e,isUser:t,identifiers:n})=>({type:`session`,id:e,isUser:t,identifiers:n}),target:e.eventBus}),(0,d.sample)({clock:[S.fail,C.fail,w.fail,b.fail,x.fail,y.fail],fn:()=>`failed`,target:s}),{start:f,readyStore:n,preconditionPassedStore:a,conditionPassedStore:o,lifecycleStageStore:s,registerPluginStartHook:h,setPrecondition:g,setCondition:_}});function ie(e){return(0,f.invoke)(re,e)}var ae=(0,d.createDomain)(`predicate`),oe=(0,f.createFactory)(({client:e})=>{let t=ae.store({}),r=(0,d.createApi)(t,{register(e,t){return{...e,[t.name]:{name:t.name,predicate:t.predicate}}}}),i=(0,d.createEvent)();(0,d.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Predicate '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,d.sample)({clock:i,fn:({name:e,predicate:t})=>Object.freeze({name:e,predicate:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.predicate,{skipVoid:!1})}function s(t){let n=(0,d.createStore)(()=>void 0,{skipVoid:!1}),r=(0,d.attach)({source:{predicate:o(t),snapshot:e.stateSnapshotStore},effect:({predicate:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n})}});return(0,d.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,d.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:i,getByName:o,listStore:a,getEvokablePredicate:s}});function se(e){return(0,f.invoke)(oe,e)}var ce=(e,t,n)=>{n.register({name:e,predicate:t})},F=(0,d.createDomain)(`history`);function I(e,t){return{id:l.t(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}var le=(0,f.createFactory)(()=>{let e=F.store({entries:[]}),t=F.event(),n=F.event(),r=F.event(),i=F.event();e.on(t,(e,t)=>({entries:[...e.entries,I(t.experienceId,t.node)]})),e.on(n,(e,t)=>({entries:[...e.entries.slice(0,-1),I(t.experienceId,t.node)]})),e.on(i,(e,t)=>t);function o(e,t){let n={lastStepIndex:-1,secondLastStepIndex:-1};for(let r=e.length-1;r>=0;r--){let i=e[r],o=i?.node;if(!(!o||!a.d(o))&&!(t&&i.experienceId!==t))if(n.lastStepIndex===-1)n.lastStepIndex=r;else{n.secondLastStepIndex=r;break}}return n}return e.on(r,(e,t)=>{let{secondLastStepIndex:n}=o(e.entries,t.experienceId),r=n===-1?e.entries:e.entries.slice(0,n+1);return{...e,entries:r}}),{push:t,replace:n,back:r,restore:i,entriesStore:e.map(e=>e.entries)}});function ue(){return(0,f.invoke)(le)}var de=0,fe=e=>{let t=(0,d.createStore)([]);return t.on(e,(e,t)=>[...e,{id:de++,at:new Date,payload:t}]),t};function L(e){let{doNotTrackValue:t,doNotStoreValue:n}=e??{},r=e?.trackValue??t===!1,i=e?.storeValue??n===!1;return{trackValue:r,storeValue:i,doNotTrackValue:!r,doNotStoreValue:!i}}var pe=(0,d.createDomain)(`field`),me=(0,f.createFactory)(()=>{let e=pe.store({}),t=(0,d.createApi)(e,{register(e,t){let n=Object.assign({},t.field,{policies:L(t.field.policies)});return{...e,[n.id]:n}},updateByKey(e,t){let n=Object.values(e).find(e=>e.key===t.fieldKey);if(!n)return e;let r=Object.assign({},n,t.updates);return{...e,[n.id]:Object.assign({},r,{policies:L(r.policies)})}}});function n(e){t.register({field:e})}let r={};e.watch(e=>{r=e});function i(e,n){let i=Object.values(r).find(t=>t.key===e)?.key;i&&t.updateByKey({fieldKey:i,updates:n})}let a=e.map(e=>Object.values(e));function o(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function s(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}function c(t){return e.map(e=>Object.values(e).find(e=>e.name===t)??null,{skipVoid:!1})}return{register:n,update:i,getById:o,getByKey:s,listStore:a,getByName:c}});function he(){return(0,f.invoke)(me)}var ge=(0,d.createDomain)(`step`),_e=(0,f.createFactory)(()=>{let e=ge.store({}),t=(0,d.createApi)(e,{register(e,t){return{...e,[t.step.id]:t.step}}});function n(e){t.register({step:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function ve(){return(0,f.invoke)(_e)}function ye(e,t){t.register(e)}var be=(0,d.createDomain)(`content`),xe=(0,f.createFactory)(()=>{let e=be.store({}),t=(0,d.createApi)(e,{register(e,t){return{...e,[t.content.id]:t.content}},patch(e,t){let n=e[t.id];if(!n)return e;let r=t.apply(n.data);return r===n.data?e:{...e,[t.id]:{...n,data:r}}}});function n(e){t.register({content:e})}function r(e,n){t.patch({id:e,apply:n})}let i=e.map(e=>Object.values(e));function a(t){return e.map(e=>e[t]??null,{skipVoid:!1})}return{register:n,patch:r,getById:a,listStore:i,indexStore:e}});function Se(){return(0,f.invoke)(xe)}function Ce(e,t){t.register(e)}var we=(0,d.createDomain)(`action`),R={status:`idle`,response:void 0,error:void 0},Te={...R,status:`running`},z={};function B(e){let t=new WeakMap,n=(e,n)=>t.get(n?.experience??z)?.get(e);return Object.assign((r,i)=>{let a=n(r,i);if(a===void 0){let n=i?.experience??z;a=e(r,i),t.set(n,(t.get(n)??new Map).set(r,a))}return a},{find:n})}function Ee(e){return e.status===`succeeded`?{status:`succeeded`,response:e.response,error:void 0}:{status:`failed`,response:void 0,error:e.error}}var De=(0,f.createFactory)(({client:e})=>{let t=we.store({}),r=(0,d.createApi)(t,{register(e,t){return{...e,[t.key]:{key:t.key,action:t.action,published:t.published===!0}}},unregister(e,t){return Object.hasOwn(e,t)?Object.fromEntries(Object.entries(e).filter(([e])=>e!==t)):e}}),i=(0,d.createEvent)(),a=r.unregister;(0,d.sample)({clock:i,source:t,filter:(e,{key:t,published:n})=>{let r=e[t];return r!==void 0&&!(n&&r.published)},fn:(e,{key:t})=>`Action '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,d.sample)({clock:i,fn:({key:e,action:t,published:n})=>Object.freeze({key:e,action:t,published:n}),target:r.register});let o=t.map(e=>Object.values(e));function s(e){return t.map(t=>t[e]?.action,{skipVoid:!1})}function c(n,r,i){let a=r?{experience:r.experience}:null;return(...r)=>{let o=t.getState()[n]?.action;return o?.({...i??e.stateSnapshotStore.getState(),args:r},a)}}let l=new WeakMap,u=[];function f(e,t,n){let r=e?.experience??z,i=l.get(r)??{region:!e||u.includes(e.experience)?(0,d.createNode)():null,builders:[],unlinkers:[]};l.set(r,i),i.builders.push(t),i.unlinkers.push(n),i.region&&(0,d.withRegion)(i.region,t)}e.experienceInstances.listStore.watch(e=>{for(let t of u){let n=l.get(t);if(n?.region&&!e.includes(t)){(0,d.clearNode)(n.region),n.region=null;for(let e of n.unlinkers)e()}}for(let t of e){let e=l.get(t);if(e&&!e.region){let t=(0,d.createNode)();e.region=t;for(let n of e.builders)(0,d.withRegion)(t,n)}}u=e});let p=B((t,n)=>{let r=(0,d.createEvent)(),i=(0,d.createStore)(c(t,n),{skipVoid:!1}).on(r,(e,t)=>t);return f(n,()=>{let i=(0,d.combine)(s(t),e.stateSnapshotStore,(e,r)=>c(t,n,r));(0,d.sample)({clock:i,target:r}),r(i.getState())},()=>{r(c(t,n))}),i});async function m(n,r={}){let i=t.getState()[n]?.action;if(!i)throw Error(`Action '${n}' is not registered`);let a=r.experience?{experience:r.experience}:null,o=e.stateSnapshotStore.getState(),s=r.args??[],c=Oe(r.signal,r.timeoutMs);return c?(c.throwIfAborted(),new Promise((e,t)=>{let n=()=>{t(c.reason)};c.addEventListener(`abort`,n,{once:!0}),Promise.resolve().then(()=>i({...o,args:s,signal:c},a)).then(e,t).finally(()=>{c.removeEventListener(`abort`,n)})})):i({...o,args:s},a)}let h=B((e,t)=>{let n=(0,d.createEvent)(),r=(0,d.createEvent)(),i=0,a=async(...a)=>{i+=1;let o=i;n();let s;try{s={status:`succeeded`,response:await m(e,{...t,args:a})}}catch(e){s={status:`failed`,error:e}}return o===i&&r(s),s},o=n=>Object.assign(c(e,t),{...n,run:a});return(0,d.createStore)(o(R)).on(n,()=>o(Te)).on(r,(e,t)=>o(Ee(t)))}),g=B((n,r)=>{let i=p(n,r),a=(0,d.createStore)(void 0,{skipVoid:!1}),o=0,s=!1,l=!1,u=()=>[t.getState()[n]?.action,e.stateSnapshotStore.getState()],f=[],m=(0,d.createEffect)(async e=>{o+=1;let t=o;if(f=u(),b(n))return s||(s=!0,`${n}`),{evaluation:t,value:void 0};try{return{evaluation:t,value:await e()}}catch{return`${n}`,{evaluation:t,value:void 0}}});(0,d.sample)({clock:m.doneData,filter:({evaluation:e})=>e===o,fn:({value:e})=>e,target:a}),(0,d.sample)({clock:i,filter:()=>!l&&u().some((e,t)=>e!==f[t]),target:m});let h=()=>{l||(l=!0,queueMicrotask(()=>{l=!1,m(c(n,r))}))};return h(),{result:a,refresh:h,isQueued:()=>l}});function _(e,t){return g(e,t).result}function v(e,t){g.find(e,t)?.refresh()}function y(e,t){return g.find(e,t)?.isQueued()===!0}function b(e){return t.getState()[e]?.published===!0}return{register:i,unregister:a,getByKey:s,listStore:o,getEvokableAction:p,getActionBinding:h,getActionResult:_,refreshActionResult:v,isActionResultQueued:y,run:m,isPublished:b}});function Oe(e,t){let n=t===void 0?void 0:AbortSignal.timeout(t);return e&&n?AbortSignal.any([e,n]):e??n}function ke(e){return(0,f.invoke)(De,e)}var Ae=(e,t,n)=>{n.register({key:e,action:t})};function V(e,t,n,r){return{fieldKey:e.key,userMessage:n,systemMessage:r,value:t}}function H(e){return e===null||e===``||Array.isArray(e)&&!e.length}function je(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null}function U(e){try{return JSON.stringify(e),!0}catch{return!1}}function Me(e,t){return t.find(t=>t.key===e)??null}function Ne(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function Pe(e,t){if(e.type!==`object`||H(t))return null;if(e.multiple){if(!Array.isArray(t))return V(e,t,`This field expects multiple values`,`Field expects an array of objects.`);for(let n of t){if(typeof n!=`object`||!n)return V(e,t,`This field expects object values`,`Field expects an array of objects, but received non-object value.`);if(!U(n))return V(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}return null}return Array.isArray(t)?V(e,t,`This field expects a single value`,`Field expects a single object, not an array.`):typeof t!=`object`||!t?V(e,t,`This field expects an object value`,`Field expects an object value.`):U(t)?null:V(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}function Fe(e,t){if(H(t)||!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=new Set(e.options.map(e=>JSON.stringify(e.value)));return n.every(e=>r.has(JSON.stringify(e)))?null:V(e,t,`This field expects a valid option`,`Field expects a valid option from the defined choices.`)}let r=e.options.map(e=>e.value);return n.every(e=>!je(e)||e===null?!1:r.includes(e))?null:V(e,t,`This field expects a valid option`,`Field expects a valid option. Valid options are: ${r.join(`, `)}`)}async function Ie(t,n,r,i){if(n.validation&&!e.t(n.validation)&&!H(r)){let e=i?{$input:r,responses:i}:{$input:r},a=await t(n.validation,e);if(typeof a==`string`)return V(n,r,a,`Field validation resulted in an error: ${a}.`);if(a===!1)return V(n,r,`This field is invalid`,`Field validation resulted in an unspecified error.`)}return n.required&&H(r)?V(n,r,`This field is required`,`Field is required.`):!n.multiple&&Array.isArray(r)&&r.length>1?V(n,r,`This field expects a single response`,`Field expects a single response.`):null}var Le=(0,d.createDomain)(`response`),Re=(0,f.createFactory)(({client:e})=>{let n=Le.store({}),r=(0,d.createEvent)(),i=(0,d.createEvent)(),a=(0,d.createApi)(n,{register(e,t){return{...e,[t.fieldKey]:t.response}},registerBatch(e,t){return{...e,...t}},clear(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))},clearAll(){return{}}});function o(e,t){if(typeof e==`string`){if(t===void 0)throw Error(`Response is required when registering a single field`);a.register({fieldKey:e,response:t})}else a.registerBatch(e)}let s=(n,r)=>t.t(e,n,r),c=(0,d.attach)({source:{allFields:e.fields.listStore,existingResponses:n},effect:async({allFields:e,existingResponses:t},n)=>{let r=[],i={},a={...t,...n},o=Object.entries(n),c=await Promise.allSettled(o.map(async([t,n])=>{let o=Me(t,e);if(!o){r.push({fieldKey:t,userMessage:`Field '${t}' not found`,systemMessage:`No field with key '${t}' exists. Available field keys are: ${e.map(e=>e.key).join(`,`)}.`,value:n});return}let c=Ne(o,n),l=await Ie(s,o,c,a);if(l){r.push(l);return}let u=Pe(o,c);if(u){r.push(u);return}let d=Fe(o,c);if(d){r.push(d);return}i[o.key]=n}));for(let[e,t]of c.entries()){if(t.status!==`rejected`)continue;let n=o[e];if(!n)continue;let[i,a]=n,s=t.reason instanceof Error?t.reason.message:String(t.reason);r.push({fieldKey:i,userMessage:`An unexpected error occurred validating this field`,systemMessage:`Validation threw for field '${i}': ${s}`,value:a})}return{responsesToCommit:i,validationErrors:r}}});async function l(e){return c(e)}let u=(0,d.attach)({source:n,effect:async(e,t)=>{let{responsesToCommit:n,validationErrors:r}=await c(t);return r.length?{errors:r}:(a.registerBatch(n),{errors:[]})}});async function f(e){return u(e)}let p=n.map(e=>e),m=n.map(e=>Object.entries(e).map(([e,t])=>({fieldKey:e,value:t})));function h(e){return(0,d.combine)({f:e,s:n},({f:e,s:t})=>{let n=e?t[e.key]??null:null;return n===null?e?.defaultValue!==void 0&&e.defaultValue!==null?e.defaultValue:null:n})}function g(t){return h(e.fields.getById(t))}function _(t){return h(e.fields.getByKey(t))}function v(t){return h(e.fields.getByName(t))}return(0,d.sample)({clock:r,target:a.clearAll}),(0,d.sample)({clock:i,target:a.clear}),{register:o,clearAll:r,clear:i,commit:f,getResponsesToCommit:l,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function ze(e){return(0,f.invoke)(Re,e)}var Be=(0,d.createDomain)(`condition`),Ve=(0,f.createFactory)(()=>{let e=Be.store({}),t=(0,d.createApi)(e,{register(e,t){return{...e,[t.condition.id]:t.condition}}});function n(e){t.register({condition:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function He(){return(0,f.invoke)(Ve)}function Ue(){if(r.i()){let e=[document.currentScript,document.getElementById(`picked_script`),document.getElementById(`picked`),document.getElementById(`cvly`),document.getElementById(`cvly-x`)];for(let t of e)if(t?.dataset.api)return t.dataset.api}return`https://api.picked.app`}var We=`picked:start:begin`,Ge=`picked:start`;function W(){try{return r.f()&&!!r.p.window&&`performance`in r.p}catch{return!1}}function Ke(){let e=null,t=null;return{markBegin:()=>{if(W())try{e=performance.mark(We).startTime}catch{}},measure:()=>{if(!(!W()||e===null))try{t=performance.measure(Ge,{start:e})}catch{}},get startMeasure(){return t}}}function qe(){let e=null;return{observeDeliveryAPIRequests:t=>{e=t},get deliveryAPIRequestObserver(){return e}}}var G=s.t(`session`,`global`);function Je(){return r.r()?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}`}function Ye(){if(!r.s())return null;let e=s.n.get(G);if(!e.isSet())return null;try{return e.json()}catch{return null}}var Xe=(0,f.createFactory)(()=>{let e=Ye(),t={id:e?.id??Je()};e?.isUser!==void 0&&(t.isUser=e.isUser),e?.identifiers&&Object.keys(e.identifiers).length>0&&(t.identifiers=e.identifiers);let n=(0,d.createStore)(t),i=(0,d.createApi)(n,{setIsUser:(e,t)=>({...e,isUser:t}),setIdentifier:(e,{key:t,value:n})=>({...e,identifiers:{...e.identifiers??{},[t]:n}}),removeIdentifier:(e,t)=>{let n=e.identifiers;if(!n||!(t in n))return e;let r={};for(let[e,i]of Object.entries(n))e!==t&&(r[e]=i);let i={id:e.id};return e.isUser!==void 0&&(i.isUser=e.isUser),Object.keys(r).length>0&&(i.identifiers=r),i}}),a=(0,d.attach)({source:n,effect:e=>{if(r.s())try{s.n.get(G).set(e)}catch{}}});return(0,d.sample)({source:n,target:a}),{store:n,setIsUser:i.setIsUser,setIdentifier:i.setIdentifier,removeIdentifier:i.removeIdentifier}});function Ze(){return(0,f.invoke)(Xe,void 0)}function K(){if(r.f())return globalThis.window.pickedConfig}function Qe(){if(r.f())return K()?.projectId}function $e(){if(!r.i())return;let e=document.getElementById(`picked_script`)||document.querySelector(`script#picked`)||document.getElementById(`cvly`);if(e)return e.dataset.projectid||e.getAttribute(`project-id`)||void 0}function et(e){if(e.projectId)return e.projectId;let t=Qe();if(t)return t;let n=$e();if(n)return n;throw Error(`projectId is required. You can provide it via one of:
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../object-CIkt7Fkr.cjs"),t=require("../rules-logic-VUbvWqdi.cjs"),n=require("../logger-CSTvAyyB.cjs"),r=require("../supports-DBzjGaWD.cjs"),i=require("../dom-DlLH3FxV.cjs"),a=require("../experience-instance-C9WV52iQ.cjs"),o=require("./logic-engine.js"),s=require("../storage-DUw9UJ2h.cjs"),c=require("../preview-unavailable-DfP5lMRZ.cjs"),l=require("../id-Js-62re-.cjs"),u=require("../inert-script-report-ijRHPtcY.cjs");let d=require("effector"),f=require("@withease/factories");var p=(0,d.createDomain)(`experience`),m=(0,f.createFactory)(({client:e,experience:n})=>{let r=p.store(n),o=(0,d.createApi)(r,{merge(e,t){return{...e,...t.experience}}}),s=r.map(e=>({name:e.name,decisionLogic:e.condition,targetSelectors:e.targets,initializeOpenLogic:e.initializeOpen})),c=(0,d.combine)(r,e.components.listStore,(e,t)=>(e.componentName?t.find(t=>t.name===e.componentName):void 0)||t.find(t=>t.name===`experience:${e.id}`)||t.find(e=>e.name===`experience`),{skipVoid:!1}),l=(0,d.combine)(r,e.steps.indexStore,e.conditions.indexStore,(e,t,n)=>{let r=e.nodes.filter(a.d).map(e=>t[e.stepId]).filter(e=>e!==void 0),i=e.nodes.filter(a.u).map(e=>n[e.conditionId]).filter(e=>e!==void 0);return{steps:r,nodes:e.nodes,edges:e.edges,conditions:i}}),u=r.map(e=>a.l(e.nodes,e.edges)),f=n.actions??[],m,h=(0,d.attach)({source:s,effect:(t,r)=>{let a=i.i(t.targetSelectors,n.id);a.forEach(({elements:e})=>e.forEach(e=>i.s(e,n.id))),i.t(a,n.id,n.key).forEach(t=>{r?e.experienceInstances.spawn(m,t,r):e.experienceInstances.spawn(m,t)})}}),g=(0,d.combine)({preconditionPassed:e.preconditionPassedStore,isUser:e.session.store.map(e=>e.isUser,{skipVoid:!1}),config:s}),_=(0,d.attach)({source:g,effect:async({preconditionPassed:r,isUser:a,config:o})=>{if(!r||!a)return!1;let{decisionLogic:s,targetSelectors:c}=o;return c.length===0||i.i(c,n.id).length<1?!1:s===void 0||!t.n(s)||await t.t(e,s)===!0}}),v=(0,d.createEffect)(async()=>{if(!e.contentLoader)return!0;try{await e.contentLoader({id:n.id,key:n.key})}catch{`${n.id}`}return!0}),y=(0,d.createEvent)(),b=(0,d.createEvent)(),x=p.createStore(void 0,{skipVoid:!1}).on(y,(e,t)=>t).on(b,(e,t)=>t);return(0,d.sample)({clock:y,target:_}),(0,d.sample)({clock:_.doneData,source:x,filter:(e,t)=>t,fn:e=>e,target:h}),(0,d.sample)({clock:_.doneData,filter:Boolean,target:v}),(0,d.sample)({clock:b,source:x,fn:e=>e,target:h}),(0,d.sample)({clock:b,target:v}),m={id:n.id,key:n.key,name:n.name,configStore:s,treeStore:l,nodeTreeStore:u,componentStore:c,actions:f,merge:o.merge,initialiseFx:h,shouldInitialiseFx:_,initialiseRequested:y,initialiseDirectly:b,prepareExperienceContentFx:v},m});function h(e){return(0,f.invoke)(m,e)}var g=(0,f.createFactory)(({client:e})=>{let t=p.store({}),n=(0,d.createApi)(t,{register(e,t){return{...e,[t.id]:t}}}),r=(0,d.createEvent)(),i=(0,d.createEffect)(t=>{n.register(h({client:e,experience:t}))});(0,d.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]!==void 0,fn:(e,t)=>({existing:e[t.id],experience:t})}).watch(({existing:e,experience:t})=>{e?.merge({experience:t,strategy:`override`})}),(0,d.sample)({clock:r,source:t,filter:(e,t)=>e[t.id]===void 0,fn:(e,t)=>t,target:i});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}function s(e){return t.map(t=>Object.values(t).find(t=>t.key===e)??t[e],{skipVoid:!1})}let c=(0,d.attach)({source:t,effect:(e,t)=>{let n=`key`in t?Object.values(e).find(e=>e.key===t.key):e[t.id];if(!n){`key`in t?`${t.key}`:`${t.id}`;return}let{options:r}=t;r?.bypassCondition?n.initialiseDirectly(r):n.initialiseRequested(r)}});return{register:r,get:o,getById:o,getByKey:s,launch:c,open:(0,d.attach)({source:{experiences:t,instances:e.experienceInstances.listStore},effect:async({experiences:e,instances:t},n)=>{let r=`key`in n?Object.values(e).find(e=>e.key===n.key):e[n.id],i=t.filter(e=>e.experienceId===r?.id);if(i.length>0){for(let e of i)e.open();return}let a=`key`in n?{key:n.key,options:{...n.options,initialiseOpen:!0}}:{id:n.id,options:{...n.options,initialiseOpen:!0}};await c(a)}}),listStore:a,initialiseExperiencesFx:(0,d.attach)({source:a,effect:e=>{for(let t of e)t.initialiseRequested(void 0)}})}});function _(e){return(0,f.invoke)(g,e)}var v=async e=>{await e.experiences.initialiseExperiencesFx()};function y(e){return(0,d.createEffect)(async()=>{await e()})}var b=(e,t,n)=>{let r=t.name,i=t.setup(e),a=n[r]??{};n[r]=Object.freeze({...a,...i})},x=(0,d.createDomain)(`component`),S=(0,f.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function C(e){return(0,f.invoke)(S,e)}var w=(0,f.createFactory)(({client:e})=>{let t=x.store({}),r=(0,d.createApi)(t,{register(e,t){return{...e,[t.name]:t}}}),i=(0,d.createEvent)();(0,d.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Component '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,d.sample)({clock:i,fn:({name:t,component:n})=>C({client:e,name:t,component:n}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function T(e){return(0,f.invoke)(w,e)}var E=(e,t,n)=>{n.register({name:e,component:t})},D=(0,d.createDomain)(`framework`),O=(0,f.createFactory)(e=>{let t=D.store({}),r=(0,d.createApi)(t,{register(e,t){return{...e,[t.name]:t.framework}}}),i=(0,d.createEvent)();(0,d.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Framework '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,d.sample)({clock:i,target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:i,getByName:o,listStore:a}});function k(e){return(0,f.invoke)(O,e)}var A=(e,t)=>{t.register({name:e.name,framework:e})},j=(0,f.createFactory)(({client:e})=>{let t=`window`in globalThis,n={location:t?globalThis.location:void 0,document:t?globalThis.document:void 0,sessionStorage:t?globalThis.sessionStorage:void 0,localStorage:t?globalThis.localStorage:void 0};return(0,d.combine)(e.responses.listStore,e.fields.listStore,(t,r)=>Object.freeze({client:e,responses:t,fields:r,...n}))});function ee(e){return(0,f.invoke)(j,e)}function M(e,t,n){return new Proxy(Object.create(null),{get(r,i){if(typeof i!=`string`)return;let a=e.find(e=>e.key===i);if(a!==void 0)return async()=>!n.has(i)&&await o.apply(a.logic,{...t,conditions:M(e,t,new Set(n).add(i))})===!0}})}function N(e,t=[],n=new WeakSet){if(e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return!0;if(typeof e!=`object`||t.includes(e))return!1;if(n.has(e))return!0;let r=Object.getPrototypeOf(e);if(!Array.isArray(e)&&r!==Object.prototype&&r!==null)return!1;let i=[...t,e];return Object.values(e).every(e=>N(e,i,n))?(n.add(e),!0):!1}var te=(0,f.createFactory)(({client:e})=>(0,d.attach)({source:{stateSnapshot:e.stateSnapshotStore,predicates:e.predicates.listStore,actions:e.actions.listStore,features:e.features.listStore,responses:e.responses.getAllStore,conditions:e.conditions.listStore},effect:async({stateSnapshot:e,predicates:t,actions:n,features:r,responses:i,conditions:a},{rule:s,context:c})=>{let l=t.reduce((t,n)=>(t[n.name]=async(...t)=>await n.predicate({...e,args:t}),t),{}),u=n.reduce((t,n)=>(t[n.key]=async(...t)=>{let r=await n.action({...e,args:t},null);return N(r)?r:void 0},t),{}),d=r.reduce((e,t)=>(e[t.id]=async()=>{let{bucket:e}=await t.getBucket();return e},e),{}),f={responses:i,location:typeof e.location==`object`?{hash:e.location.hash,host:e.location.host,hostname:e.location.hostname,href:e.location.href,origin:e.location.origin,pathname:e.location.pathname,port:e.location.port,protocol:e.location.protocol,search:e.location.search}:void 0,predicates:l,actions:u,features:d,...c},p={...f,conditions:M(a,f,new Set)};return await o.apply(s,p)}}));function ne(e){return(0,f.invoke)(te,e)}var P=(0,d.createDomain)(`lifecycle`),re=(0,f.createFactory)(({client:e})=>{let n=P.store(!1),a=(0,d.createStore)(void 0,{skipVoid:!1,domain:P}),o=(0,d.createStore)(void 0,{skipVoid:!1,domain:P}),s=P.store(`idle`),c=P.store([]),l=(0,d.createStore)(void 0,{skipVoid:!1,domain:P}),u=(0,d.createStore)(void 0,{skipVoid:!1,domain:P}),f=(0,d.createEvent)(),p=(0,d.createEvent)(),m=(0,d.createEvent)(),h=(0,d.createEvent)(),g=(0,d.createEvent)(),_=(0,d.createEvent)();c.on(h,(e,t)=>[...e,t]),l.on(g,(e,t)=>t),u.on(_,(e,t)=>t),n.on(p,()=>!0);let y=(0,d.createEffect)(async()=>{await i.r()}),b=(0,d.createEffect)(async()=>{await v(e)}),x=(0,d.attach)({effect:b}),S=(0,d.attach)({source:c,effect:async e=>{for(let t of e)await t()}}),C=(0,d.attach)({source:l,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),w=(0,d.attach)({source:u,effect:async n=>n===void 0?!0:typeof n==`boolean`?n:await t.t(e,n)===!0}),T=(0,d.sample)({clock:f,source:s,filter:e=>e===`idle`&&r.i(),fn:()=>void 0});(0,d.sample)({clock:T,fn:()=>`starting`,target:s}),T.watch(e.performance.markBegin),p.watch(e.performance.measure),(0,d.sample)({clock:T,target:S}),(0,d.sample)({clock:T,target:y}),(0,d.sample)({clock:S.done,target:C}),(0,d.sample)({clock:C.doneData,target:a}),(0,d.sample)({clock:w.doneData,target:o}),(0,d.sample)({clock:C.doneData,filter:e=>e,target:w}),(0,d.sample)({clock:w.doneData,target:e.session.setIsUser}),(0,d.sample)({clock:w.doneData,fn:e=>({type:`user_decide`,value:e}),target:e.eventBus}),(0,d.sample)({clock:C.doneData,filter:e=>!e,fn:()=>void 0,target:m}),(0,d.sample)({clock:w.doneData,fn:()=>void 0,target:m}),(0,d.sample)({clock:m,fn:()=>({type:`initialize`}),target:e.eventBus});let E=(0,d.createStore)(!1).on(y.done,()=>!0),D=(0,d.createStore)(!1).on(m,()=>!0),O=(0,d.createStore)(!1).on(x.done,()=>!0),k=(0,d.combine)(a,o,(e,t)=>e===!0&&t===!0);(0,d.sample)({clock:m,source:k,filter:e=>e,fn:()=>void 0,target:b});let A=(0,d.combine)(E,D,k,(e,t,n)=>e&&t&&n);(0,d.sample)({clock:A,filter:e=>e,fn:()=>void 0,target:x});let j=(0,d.combine)(E,D,k,O,(e,t,n,r)=>e&&t&&(!n||r));return(0,d.sample)({clock:j,filter:e=>e,fn:()=>void 0,target:p}),(0,d.sample)({clock:p,fn:()=>`ready`,target:s}),(0,d.sample)({clock:p,fn:()=>({type:`ready`}),target:e.eventBus}),(0,d.sample)({clock:p,source:e.session.store,fn:({id:e,isUser:t,identifiers:n})=>({type:`session`,id:e,isUser:t,identifiers:n}),target:e.eventBus}),(0,d.sample)({clock:[S.fail,C.fail,w.fail,b.fail,x.fail,y.fail],fn:()=>`failed`,target:s}),{start:f,readyStore:n,preconditionPassedStore:a,conditionPassedStore:o,lifecycleStageStore:s,registerPluginStartHook:h,setPrecondition:g,setCondition:_}});function ie(e){return(0,f.invoke)(re,e)}var ae=(0,d.createDomain)(`predicate`),oe=(0,f.createFactory)(({client:e})=>{let t=ae.store({}),r=(0,d.createApi)(t,{register(e,t){return{...e,[t.name]:{name:t.name,predicate:t.predicate}}}}),i=(0,d.createEvent)();(0,d.sample)({clock:i,source:t,filter:(e,{name:t})=>e[t]!==void 0,fn:(e,{name:t})=>`Predicate '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,d.sample)({clock:i,fn:({name:e,predicate:t})=>Object.freeze({name:e,predicate:t}),target:r.register});let a=t.map(e=>Object.values(e));function o(e){return t.map(t=>t[e]?.predicate,{skipVoid:!1})}function s(t){let n=(0,d.createStore)(()=>void 0,{skipVoid:!1}),r=(0,d.attach)({source:{predicate:o(t),snapshot:e.stateSnapshotStore},effect:({predicate:e,snapshot:t})=>{if(e)return(...n)=>e({...t,args:n})}});return(0,d.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,d.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:i,getByName:o,listStore:a,getEvokablePredicate:s}});function se(e){return(0,f.invoke)(oe,e)}var ce=(e,t,n)=>{n.register({name:e,predicate:t})},F=(0,d.createDomain)(`history`);function I(e,t){return{id:l.t(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}var le=(0,f.createFactory)(()=>{let e=F.store({entries:[]}),t=F.event(),n=F.event(),r=F.event(),i=F.event();e.on(t,(e,t)=>({entries:[...e.entries,I(t.experienceId,t.node)]})),e.on(n,(e,t)=>({entries:[...e.entries.slice(0,-1),I(t.experienceId,t.node)]})),e.on(i,(e,t)=>t);function o(e,t){let n={lastStepIndex:-1,secondLastStepIndex:-1};for(let r=e.length-1;r>=0;r--){let i=e[r],o=i?.node;if(!(!o||!a.d(o))&&!(t&&i.experienceId!==t))if(n.lastStepIndex===-1)n.lastStepIndex=r;else{n.secondLastStepIndex=r;break}}return n}return e.on(r,(e,t)=>{let{secondLastStepIndex:n}=o(e.entries,t.experienceId),r=n===-1?e.entries:e.entries.slice(0,n+1);return{...e,entries:r}}),{push:t,replace:n,back:r,restore:i,entriesStore:e.map(e=>e.entries)}});function ue(){return(0,f.invoke)(le)}var de=0,fe=e=>{let t=(0,d.createStore)([]);return t.on(e,(e,t)=>[...e,{id:de++,at:new Date,payload:t}]),t};function L(e){let{doNotTrackValue:t,doNotStoreValue:n}=e??{},r=e?.trackValue??t===!1,i=e?.storeValue??n===!1;return{trackValue:r,storeValue:i,doNotTrackValue:!r,doNotStoreValue:!i}}var pe=(0,d.createDomain)(`field`),me=(0,f.createFactory)(()=>{let e=pe.store({}),t=(0,d.createApi)(e,{register(e,t){let n=Object.assign({},t.field,{policies:L(t.field.policies)});return{...e,[n.id]:n}},updateByKey(e,t){let n=Object.values(e).find(e=>e.key===t.fieldKey);if(!n)return e;let r=Object.assign({},n,t.updates);return{...e,[n.id]:Object.assign({},r,{policies:L(r.policies)})}}});function n(e){t.register({field:e})}let r={};e.watch(e=>{r=e});function i(e,n){let i=Object.values(r).find(t=>t.key===e)?.key;i&&t.updateByKey({fieldKey:i,updates:n})}let a=e.map(e=>Object.values(e));function o(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function s(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}function c(t){return e.map(e=>Object.values(e).find(e=>e.name===t)??null,{skipVoid:!1})}return{register:n,update:i,getById:o,getByKey:s,listStore:a,getByName:c}});function he(){return(0,f.invoke)(me)}var ge=(0,d.createDomain)(`step`),_e=(0,f.createFactory)(()=>{let e=ge.store({}),t=(0,d.createApi)(e,{register(e,t){return{...e,[t.step.id]:t.step}}});function n(e){t.register({step:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function ve(){return(0,f.invoke)(_e)}function ye(e,t){t.register(e)}var be=(0,d.createDomain)(`content`),xe=(0,f.createFactory)(()=>{let e=be.store({}),t=(0,d.createApi)(e,{register(e,t){return{...e,[t.content.id]:t.content}},patch(e,t){let n=e[t.id];if(!n)return e;let r=t.apply(n.data);return r===n.data?e:{...e,[t.id]:{...n,data:r}}}});function n(e){t.register({content:e})}function r(e,n){t.patch({id:e,apply:n})}let i=e.map(e=>Object.values(e));function a(t){return e.map(e=>e[t]??null,{skipVoid:!1})}return{register:n,patch:r,getById:a,listStore:i,indexStore:e}});function Se(){return(0,f.invoke)(xe)}function Ce(e,t){t.register(e)}var we=(0,d.createDomain)(`action`),R={status:`idle`,response:void 0,error:void 0},Te={...R,status:`running`},z={};function B(e){let t=new WeakMap,n=(e,n)=>t.get(n?.experience??z)?.get(e);return Object.assign((r,i)=>{let a=n(r,i);if(a===void 0){let n=i?.experience??z;a=e(r,i),t.set(n,(t.get(n)??new Map).set(r,a))}return a},{find:n})}function Ee(e){return e.status===`succeeded`?{status:`succeeded`,response:e.response,error:void 0}:{status:`failed`,response:void 0,error:e.error}}var De=(0,f.createFactory)(({client:e})=>{let t=we.store({}),r=(0,d.createApi)(t,{register(e,t){return{...e,[t.key]:{key:t.key,action:t.action,published:t.published===!0}}},unregister(e,t){return Object.hasOwn(e,t)?Object.fromEntries(Object.entries(e).filter(([e])=>e!==t)):e}}),i=(0,d.createEvent)(),a=r.unregister;(0,d.sample)({clock:i,source:t,filter:(e,{key:t,published:n})=>{let r=e[t];return r!==void 0&&!(n&&r.published)},fn:(e,{key:t})=>`Action '${t}' already registered. Registering again will override the previous registration.`}).watch(e=>n.t(`warn`,e)),(0,d.sample)({clock:i,fn:({key:e,action:t,published:n})=>Object.freeze({key:e,action:t,published:n}),target:r.register});let o=t.map(e=>Object.values(e));function s(e){return t.map(t=>t[e]?.action,{skipVoid:!1})}function c(n,r,i){let a=r?{experience:r.experience}:null;return(...r)=>{let o=t.getState()[n]?.action;return o?.({...i??e.stateSnapshotStore.getState(),args:r},a)}}let l=new WeakMap,u=[];function f(e,t,n){let r=e?.experience??z,i=l.get(r)??{region:!e||u.includes(e.experience)?(0,d.createNode)():null,builders:[],unlinkers:[]};l.set(r,i),i.builders.push(t),i.unlinkers.push(n),i.region&&(0,d.withRegion)(i.region,t)}e.experienceInstances.listStore.watch(e=>{for(let t of u){let n=l.get(t);if(n?.region&&!e.includes(t)){(0,d.clearNode)(n.region),n.region=null;for(let e of n.unlinkers)e()}}for(let t of e){let e=l.get(t);if(e&&!e.region){let t=(0,d.createNode)();e.region=t;for(let n of e.builders)(0,d.withRegion)(t,n)}}u=e});let p=B((t,n)=>{let r=(0,d.createEvent)(),i=(0,d.createStore)(c(t,n),{skipVoid:!1}).on(r,(e,t)=>t);return f(n,()=>{let i=(0,d.combine)(s(t),e.stateSnapshotStore,(e,r)=>c(t,n,r));(0,d.sample)({clock:i,target:r}),r(i.getState())},()=>{r(c(t,n))}),i});async function m(n,r={}){let i=t.getState()[n]?.action;if(!i)throw Error(`Action '${n}' is not registered`);let a=r.experience?{experience:r.experience}:null,o=e.stateSnapshotStore.getState(),s=r.args??[],c=Oe(r.signal,r.timeoutMs);return c?(c.throwIfAborted(),new Promise((e,t)=>{let n=()=>{t(c.reason)};c.addEventListener(`abort`,n,{once:!0}),Promise.resolve().then(()=>i({...o,args:s,signal:c},a)).then(e,t).finally(()=>{c.removeEventListener(`abort`,n)})})):i({...o,args:s},a)}let h=B((e,t)=>{let n=(0,d.createEvent)(),r=(0,d.createEvent)(),i=0,a=async(...a)=>{i+=1;let o=i;n();let s;try{s={status:`succeeded`,response:await m(e,{...t,args:a})}}catch(e){s={status:`failed`,error:e}}return o===i&&r(s),s},o=n=>Object.assign(c(e,t),{...n,run:a});return(0,d.createStore)(o(R)).on(n,()=>o(Te)).on(r,(e,t)=>o(Ee(t)))}),g=B((n,r)=>{let i=p(n,r),a=(0,d.createStore)(void 0,{skipVoid:!1}),o=0,s=!1,l=!1,u=()=>[t.getState()[n]?.action,e.stateSnapshotStore.getState()],f=[],m=(0,d.createEffect)(async e=>{o+=1;let t=o;if(f=u(),b(n))return s||(s=!0,`${n}`),{evaluation:t,value:void 0};try{return{evaluation:t,value:await e()}}catch{return`${n}`,{evaluation:t,value:void 0}}});(0,d.sample)({clock:m.doneData,filter:({evaluation:e})=>e===o,fn:({value:e})=>e,target:a}),(0,d.sample)({clock:i,filter:()=>!l&&u().some((e,t)=>e!==f[t]),target:m});let h=()=>{l||(l=!0,queueMicrotask(()=>{l=!1,m(c(n,r))}))};return h(),{result:a,refresh:h,isQueued:()=>l}});function _(e,t){return g(e,t).result}function v(e,t){g.find(e,t)?.refresh()}function y(e,t){return g.find(e,t)?.isQueued()===!0}function b(e){return t.getState()[e]?.published===!0}return{register:i,unregister:a,getByKey:s,listStore:o,getEvokableAction:p,getActionBinding:h,getActionResult:_,refreshActionResult:v,isActionResultQueued:y,run:m,isPublished:b}});function Oe(e,t){let n=t===void 0?void 0:AbortSignal.timeout(t);return e&&n?AbortSignal.any([e,n]):e??n}function ke(e){return(0,f.invoke)(De,e)}var Ae=(e,t,n)=>{n.register({key:e,action:t})};function V(e,t,n,r){return{fieldKey:e.key,userMessage:n,systemMessage:r,value:t}}function H(e){return e===null||e===``||Array.isArray(e)&&!e.length}function je(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null}function U(e){try{return JSON.stringify(e),!0}catch{return!1}}function Me(e,t){return t.find(t=>t.key===e)??null}function Ne(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function Pe(e,t){if(e.type!==`object`||H(t))return null;if(e.multiple){if(!Array.isArray(t))return V(e,t,`This field expects multiple values`,`Field expects an array of objects.`);for(let n of t){if(typeof n!=`object`||!n)return V(e,t,`This field expects object values`,`Field expects an array of objects, but received non-object value.`);if(!U(n))return V(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}return null}return Array.isArray(t)?V(e,t,`This field expects a single value`,`Field expects a single object, not an array.`):typeof t!=`object`||!t?V(e,t,`This field expects an object value`,`Field expects an object value.`):U(t)?null:V(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}function Fe(e,t){if(H(t)||!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=new Set(e.options.map(e=>JSON.stringify(e.value)));return n.every(e=>r.has(JSON.stringify(e)))?null:V(e,t,`This field expects a valid option`,`Field expects a valid option from the defined choices.`)}let r=e.options.map(e=>e.value);return n.every(e=>!je(e)||e===null?!1:r.includes(e))?null:V(e,t,`This field expects a valid option`,`Field expects a valid option. Valid options are: ${r.join(`, `)}`)}async function Ie(t,n,r,i){if(n.validation&&!e.t(n.validation)&&!H(r)){let e=i?{$input:r,responses:i}:{$input:r},a=await t(n.validation,e);if(typeof a==`string`)return V(n,r,a,`Field validation resulted in an error: ${a}.`);if(a===!1)return V(n,r,`This field is invalid`,`Field validation resulted in an unspecified error.`)}return n.required&&H(r)?V(n,r,`This field is required`,`Field is required.`):!n.multiple&&Array.isArray(r)&&r.length>1?V(n,r,`This field expects a single response`,`Field expects a single response.`):null}var Le=(0,d.createDomain)(`response`),Re=(0,f.createFactory)(({client:e})=>{let n=Le.store({}),r=(0,d.createEvent)(),i=(0,d.createEvent)(),a=(0,d.createApi)(n,{register(e,t){return{...e,[t.fieldKey]:t.response}},registerBatch(e,t){return{...e,...t}},clear(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))},clearAll(){return{}}});function o(e,t){if(typeof e==`string`){if(t===void 0)throw Error(`Response is required when registering a single field`);a.register({fieldKey:e,response:t})}else a.registerBatch(e)}let s=(n,r)=>t.t(e,n,r),c=(0,d.attach)({source:{allFields:e.fields.listStore,existingResponses:n},effect:async({allFields:e,existingResponses:t},n)=>{let r=[],i={},a={...t,...n},o=Object.entries(n),c=await Promise.allSettled(o.map(async([t,n])=>{let o=Me(t,e);if(!o){r.push({fieldKey:t,userMessage:`Field '${t}' not found`,systemMessage:`No field with key '${t}' exists. Available field keys are: ${e.map(e=>e.key).join(`,`)}.`,value:n});return}let c=Ne(o,n),l=await Ie(s,o,c,a);if(l){r.push(l);return}let u=Pe(o,c);if(u){r.push(u);return}let d=Fe(o,c);if(d){r.push(d);return}i[o.key]=n}));for(let[e,t]of c.entries()){if(t.status!==`rejected`)continue;let n=o[e];if(!n)continue;let[i,a]=n,s=t.reason instanceof Error?t.reason.message:String(t.reason);r.push({fieldKey:i,userMessage:`An unexpected error occurred validating this field`,systemMessage:`Validation threw for field '${i}': ${s}`,value:a})}return{responsesToCommit:i,validationErrors:r}}});async function l(e){return c(e)}let u=(0,d.attach)({source:n,effect:async(e,t)=>{let{responsesToCommit:n,validationErrors:r}=await c(t);return r.length?{errors:r}:(a.registerBatch(n),{errors:[]})}});async function f(e){return u(e)}let p=n.map(e=>e),m=n.map(e=>Object.entries(e).map(([e,t])=>({fieldKey:e,value:t})));function h(e){return(0,d.combine)({f:e,s:n},({f:e,s:t})=>{let n=e?t[e.key]??null:null;return n===null?e?.defaultValue!==void 0&&e.defaultValue!==null?e.defaultValue:null:n})}function g(t){return h(e.fields.getById(t))}function _(t){return h(e.fields.getByKey(t))}function v(t){return h(e.fields.getByName(t))}return(0,d.sample)({clock:r,target:a.clearAll}),(0,d.sample)({clock:i,target:a.clear}),{register:o,clearAll:r,clear:i,commit:f,getResponsesToCommit:l,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function ze(e){return(0,f.invoke)(Re,e)}var Be=(0,d.createDomain)(`condition`),Ve=(0,f.createFactory)(()=>{let e=Be.store({}),t=(0,d.createApi)(e,{register(e,t){return{...e,[t.condition.id]:t.condition}}});function n(e){t.register({condition:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function He(){return(0,f.invoke)(Ve)}function Ue(){if(r.i()){let e=[document.currentScript,document.getElementById(`picked_script`),document.getElementById(`picked`),document.getElementById(`cvly`),document.getElementById(`cvly-x`)];for(let t of e)if(t?.dataset.api)return t.dataset.api}return`https://api.picked.app`}var We=`picked:start:begin`,Ge=`picked:start`;function W(){try{return r.f()&&!!r.p.window&&`performance`in r.p}catch{return!1}}function Ke(){let e=null,t=null;return{markBegin:()=>{if(W())try{e=performance.mark(We).startTime}catch{}},measure:()=>{if(!(!W()||e===null))try{t=performance.measure(Ge,{start:e})}catch{}},get startMeasure(){return t}}}function qe(){let e=null;return{observeDeliveryAPIRequests:t=>{e=t},get deliveryAPIRequestObserver(){return e}}}var G=s.t(`session`,`global`);function Je(){return r.r()?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}`}function Ye(){if(!r.s())return null;let e=s.n.get(G);if(!e.isSet())return null;try{return e.json()}catch{return null}}var Xe=(0,f.createFactory)(()=>{let e=Ye(),t={id:e?.id??Je()};e?.isUser!==void 0&&(t.isUser=e.isUser),e?.identifiers&&Object.keys(e.identifiers).length>0&&(t.identifiers=e.identifiers);let n=(0,d.createStore)(t),i=(0,d.createApi)(n,{setIsUser:(e,t)=>({...e,isUser:t}),setIdentifier:(e,{key:t,value:n})=>({...e,identifiers:{...e.identifiers??{},[t]:n}}),removeIdentifier:(e,t)=>{let n=e.identifiers;if(!n||!(t in n))return e;let r={};for(let[e,i]of Object.entries(n))e!==t&&(r[e]=i);let i={id:e.id};return e.isUser!==void 0&&(i.isUser=e.isUser),Object.keys(r).length>0&&(i.identifiers=r),i}}),a=(0,d.attach)({source:n,effect:e=>{if(r.s())try{s.n.get(G).set(e)}catch{}}});return(0,d.sample)({source:n,target:a}),{store:n,setIsUser:i.setIsUser,setIdentifier:i.setIdentifier,removeIdentifier:i.removeIdentifier}});function Ze(){return(0,f.invoke)(Xe,void 0)}function K(){if(r.f())return globalThis.window.pickedConfig}function Qe(){if(r.f())return K()?.projectId}function $e(){if(!r.i())return;let e=document.getElementById(`picked_script`)||document.querySelector(`script#picked`)||document.getElementById(`cvly`);if(e)return e.dataset.projectid||e.getAttribute(`project-id`)||void 0}function et(e){if(e.projectId)return e.projectId;let t=Qe();if(t)return t;let n=$e();if(n)return n;throw Error(`projectId is required. You can provide it via one of:
2
2
  (1) createClient({ projectId }) options;
3
3
  (2) window.pickedConfig = { projectId };
4
- (3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes a data-projectid (or project-id) attribute.`)}function q(e){return e==null||e===``||Number.isNaN(e)}var tt={default:(e,t)=>q(e)?String(t??``):String(e),append:(e,t)=>t&&!q(e)?`${e} ${t}`:e,prepend:(e,t)=>t&&!q(e)?`${t} ${e}`:e,upper:e=>typeof e==`string`?e.toUpperCase():e,lower:e=>typeof e==`string`?e.toLowerCase():e,capitalize:e=>typeof e==`string`?e.charAt(0).toUpperCase()+e.slice(1):e,list:e=>{if(!e||typeof e!=`object`)return e;let t=new Intl.ListFormat(`en`,{style:`long`,type:`conjunction`});if(Array.isArray(e))return t.format(e.map(String));if(e instanceof Map){let n=Array.from(e.entries()).map(([e,t])=>`${e}: ${t}`);return t.format(n)}return e instanceof Set?t.format(Array.from(e).map(String)):e}};function nt(e){return typeof e==`object`&&!!e}function rt(e,t){let n=t;for(let t of e.split(`.`))if(nt(n)&&t in n)n=n[t];else return;return typeof n==`function`?n():n}function it(e,t){let n=e.split(`|`).map(e=>e.trim()),r=rt(n.shift()??``,t);for(let e of n){let[t,...n]=e.split(`:`),i=t?.trim()??``,a=n.join(`:`).trim().replaceAll(/(?:^['"]|['"]$)/g,``),o=tt[i];o&&(r=o(r,a))}return q(r)?``:typeof r==`object`?JSON.stringify(r):String(r)}function at(e,t){let n=``,r=0;for(;r<e.length;)if(e[r]===`{`&&e[r+1]===`{`){r+=2;let i=``;for(;r<e.length;){if(e[r]===`}`&&e[r+1]===`}`){r+=2;break}i+=e[r++]}n+=it(i.trim(),t)}else n+=e[r++];return n}var J=class{static logger=n.t;options;dataSource=null;seededVersionId=null;versionSkew=null;previewUnavailable=!1;contentLoader;previewEmbedderOrigins=null;plugins={};telemetry=qe();dataProviders=new Map;eventBus=(0,d.createEvent)();events;projectId;apiUrl;dashboardUrl;documentationSiteUrl;session=Ze();performance=Ke();searchParams=c.a();history=ue();components=T({client:this});experienceInstances=a.n({client:this});experiences=_({client:this});frameworks=k({client:this});predicates=se({client:this});features=c.s({client:this});conditions=He();fields=he();responses=ze({client:this});steps=ve();contents=Se();actions=ke({client:this});conditionResults=a.r();stateSnapshotStore=ee({client:this});evaluateRuleLogicFx=ne({client:this});start;readyStore;preconditionPassedStore;conditionPassedStore;lifecycleStageStore;lifecycle=ie({client:this});renderStringFx=(0,d.attach)({source:this.responses.listStore,effect:(e,{template:t,context:n})=>{let r={};for(let t of e)r[t.fieldKey]=t.value;return at(t,{...n,responses:r})}});constructor(e){this.events=fe(this.eventBus),this.projectId=et(e),this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Ue(),this.dashboardUrl=e.dashboardUrl??`https://dashboard.picked.app`,this.documentationSiteUrl=e.documentationSiteUrl??`https://docs.picked.app`,this.start=this.lifecycle.start,this.readyStore=this.lifecycle.readyStore,this.preconditionPassedStore=this.lifecycle.preconditionPassedStore,this.conditionPassedStore=this.lifecycle.conditionPassedStore,this.lifecycleStageStore=this.lifecycle.lifecycleStageStore,this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.setupFields(),this.setupComponents(),this.lifecycle.setPrecondition(e.precondition),this.lifecycle.setCondition(e.condition),this.eventBus({type:`load`,version:c.o()}),this.maybeStartPreviewChannel()}dataProviderFor(e){let t=e??``,n=this.dataProviders.get(t);if(n)return n;let r=Promise.resolve().then(()=>require("../provider-1FDPHLt7.cjs")).then(t=>t.createPickedDataProvider({apiUrl:this.apiUrl,projectId:this.projectId,getRequestObserver:()=>this.telemetry.deliveryAPIRequestObserver,...e!==void 0&&{previewToken:e}}));return this.dataProviders.set(t,r),r}async getProjectConfig(e){let t=await this.dataProviderFor(e?.previewToken),n=await t.getProjectConfig();if(this.dataSource=t.meta.manifest,n===null&&t.meta.previewUnavailable)throw new c.t(this.projectId);if(n===null)throw Error(`Picked could not resolve the configuration for project "${this.projectId}" from ${this.apiUrl}.`);return n}async getExperienceContent(e,t){return(await this.dataProviderFor(t?.previewToken)).getContent(e,t?.signal===void 0?void 0:{signal:t.signal})}maybeStartPreviewChannel(){c.r()&&Promise.resolve().then(()=>require("../preview-channel-Cx0e6fye.cjs")).then(e=>e.initPreviewChannel(this)).catch(()=>void 0)}registerFramework=e=>{A(e,this.frameworks)};registerComponent=(e,t)=>{E(e,t,this.components)};registerPlugin=e=>{b(this,e,this.plugins);let t=this.plugins[e.name];t?.onStart&&this.lifecycle.registerPluginStartHook(t.onStart)};registerFeature=(e,t)=>{c.l(e,t,this.features)};registerPredicate=(e,t)=>{ce(e,t,this.predicates)};registerCondition=e=>{this.conditions.register(e)};registerField=e=>{this.fields.register(e)};registerStep=e=>{ye(e,this.steps)};registerContent=e=>{Ce(e,this.contents)};patchContent=(e,t)=>{this.contents.patch(e,t)};registerAction=(e,t)=>{Ae(e,t,this.actions)};registerExperience=e=>{e.component&&E(`experience:${e.id}`,e.component,this.components),this.experiences.register(e)};launchExperienceById=async(e,t)=>{this.experiences.launch({id:e,options:t})};launchExperienceByKey=async(e,t)=>{this.experiences.launch({key:e,options:t})};openExperienceById=async e=>{this.experiences.open({id:e})};openExperienceByKey=async e=>{this.experiences.open({key:e})};setupPlugins(){this.options.plugins?.forEach(e=>{if(Array.isArray(e)){e.forEach(e=>{this.registerPlugin(e)});return}let t=typeof e==`function`?e():e;if(Array.isArray(t)){t.forEach(e=>this.registerPlugin(e));return}this.registerPlugin(t)})}setupFeatures(){let e=this.options.features;e&&Object.entries(e).forEach(([e,t])=>{let n=typeof t==`function`?t():t;this.registerFeature(e,n)}),this.searchParams.feature&&this.searchParams.feature.forEach(e=>{try{let t=c.c(e);if(!t)return;let{id:n,bucket:r}=t;this.registerFeature(n,{key:`${r}`,name:n,enabled:!0,decide:()=>r,storage:`session`})}catch{}})}setupPredicates(){let e=this.options.predicates;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerPredicate(e,t)})}setupActions(){let e=this.options.actions;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerAction(e,t)})}setupFields(){let e=this.options.fields;e&&Object.entries(e).forEach(([e,t])=>{let n=typeof t==`function`?t():t;this.registerField({...n,key:n.key??e})})}setupComponents(){let e=this.options.components;e&&Object.entries(e).forEach(([e,t])=>{this.registerComponent(e,t)})}getPluginConfig=e=>this.plugins[e]??{}},ot=`application/picked-javascript`,st=`application/picked-module`,ct=`data-picked-hydrated`;async function Y(e){if(!(`document`in globalThis))return;let t=`application/picked-module`,n=`data-picked-hydrated`;function r(e){try{Function(e.textContent)}catch(t){return t instanceof SyntaxError&&(console.error(`[picked] Skipped a rehydrated inline script that failed to parse.`,t),e.setAttribute(n,``),!0)}return!1}function i(e,t){let r=document.createElement(`script`);for(let t of Array.from(e.attributes))t.name!==`type`&&r.setAttribute(t.name,t.value);t&&r.setAttribute(`type`,t),r.setAttribute(n,``),e.src?r.async=!1:r.textContent=e.textContent;let i=e.src?new Promise(e=>{r.addEventListener(`load`,()=>e(),{once:!0}),r.addEventListener(`error`,()=>e(),{once:!0})}):null;return e.src?e.replaceWith(r):(globalThis.__pickedEmbedScriptRoot=e.getRootNode(),e.replaceWith(r),globalThis.__pickedEmbedScriptRoot=null),i}let a=Array.from(e.querySelectorAll(`script[type="application/picked-javascript"]:not([${n}]), script[type="${t}"]:not([${n}])`)).filter(e=>e instanceof HTMLScriptElement);for(let e of a){if(!e.isConnected)continue;let n=e.getAttribute(`type`)===t?`module`:null;if(!e.src&&n===null&&r(e))continue;let a=i(e,n);a&&await a}}function lt(){return`<script>(${Y.toString()})(document)<\/script>`}function ut(e){return typeof e==`object`&&!!e&&`id`in e&&typeof e.id==`string`&&`content`in e&&(typeof e.content==`string`||e.content===null)}function dt(e){return{$$type:`lazy-component`,load:e}}function ft(e){return typeof e==`object`&&!!e&&`$$type`in e&&e.$$type===`lazy-component`}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&`contentEntryId`in e&&typeof e.contentEntryId==`string`}function Z(e){return X(e)?e.contentEntryId:null}function Q(e){let t=Array.isArray(e)?e:[e],n=[];for(let e of t)X(e)&&n.push(e.contentEntryId);return n}function pt(e,t){return t===null?null:e[t]??null}function $(e,t){let n=[];for(let r of t){let t=e[r];t!==void 0&&n.push(t)}return n}function mt(e,t){if(d.is.store(t))return(0,d.combine)(t,e.indexStore,(e,t)=>pt(t,Z(e)));let n=Z(t);return e.indexStore.map(e=>pt(e,n),{skipVoid:!1})}function ht(e,t){if(d.is.store(t))return(0,d.combine)(t,e.indexStore,(e,t)=>$(t,Q(e)));let n=Q(t);return e.indexStore.map(e=>$(e,n),{skipVoid:!1})}var gt=e=>{let t=new J(e);return r.m(t),t};function _t(e){return typeof e.data==`object`}function vt(e){return e.map(e=>!e||!_t(e)?null:e,{skipVoid:!1})}function yt(e,t){return e.contentModelKey===t}exports.PICKED_HYDRATED_ATTR=ct,exports.PICKED_MODULE_SCRIPT_TYPE=st,exports.PICKED_SCRIPT_TYPE=ot,exports.PREVIEW_TOKEN_PARAM=c.n,exports.Picked=J,exports.PreviewUnavailableError=c.t,exports.buildRehydrateBootstrap=lt,exports.createClient=gt,exports.createPluginEffect=y,exports.createStorageKey=s.t,exports.deriveReference=mt,exports.deriveReferences=ht,exports.evaluateRuleLogic=t.t,exports.getPickedConfig=K,exports.isContentOfModel=yt,exports.isContentReference=X,exports.isHtmlAssetValue=ut,exports.isInsideIframe=r.t,exports.isLazyLoader=ft,exports.isPickedRoot=i.a,exports.isPreviewSession=c.r,exports.lazyComponent=dt,exports.localStore=s.n,exports.onInertScriptSubtrees=u.t,exports.readReferenceId=Z,exports.readReferenceIds=Q,exports.rehydrateScripts=Y,exports.reportInertScriptSubtrees=u.n,exports.resetInertScriptReport=u.r,exports.sessionStore=s.r,exports.subscribe=s.i,exports.supportsCookies=r.n,exports.supportsCryptoRandomUUID=r.r,exports.supportsDocument=r.i,exports.supportsHistory=r.a,exports.supportsIntersectionObserver=r.o,exports.supportsLocalStorage=r.s,exports.supportsLocation=r.c,exports.supportsSessionStorage=r.l,exports.supportsShadowRoot=r.u,exports.supportsWebComponents=r.d,exports.supportsWindow=r.f,exports.toTypedContentStore=vt;
4
+ (3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes a data-projectid (or project-id) attribute.`)}function q(e){return e==null||e===``||Number.isNaN(e)}var tt={default:(e,t)=>q(e)?String(t??``):String(e),append:(e,t)=>t&&!q(e)?`${e} ${t}`:e,prepend:(e,t)=>t&&!q(e)?`${t} ${e}`:e,upper:e=>typeof e==`string`?e.toUpperCase():e,lower:e=>typeof e==`string`?e.toLowerCase():e,capitalize:e=>typeof e==`string`?e.charAt(0).toUpperCase()+e.slice(1):e,list:e=>{if(!e||typeof e!=`object`)return e;let t=new Intl.ListFormat(`en`,{style:`long`,type:`conjunction`});if(Array.isArray(e))return t.format(e.map(String));if(e instanceof Map){let n=Array.from(e.entries()).map(([e,t])=>`${e}: ${t}`);return t.format(n)}return e instanceof Set?t.format(Array.from(e).map(String)):e}};function nt(e){return typeof e==`object`&&!!e}function rt(e,t){let n=t;for(let t of e.split(`.`))if(nt(n)&&t in n)n=n[t];else return;return typeof n==`function`?n():n}function it(e,t){let n=e.split(`|`).map(e=>e.trim()),r=rt(n.shift()??``,t);for(let e of n){let[t,...n]=e.split(`:`),i=t?.trim()??``,a=n.join(`:`).trim().replaceAll(/(?:^['"]|['"]$)/g,``),o=tt[i];o&&(r=o(r,a))}return q(r)?``:typeof r==`object`?JSON.stringify(r):String(r)}function at(e,t){let n=``,r=0;for(;r<e.length;)if(e[r]===`{`&&e[r+1]===`{`){r+=2;let i=``;for(;r<e.length;){if(e[r]===`}`&&e[r+1]===`}`){r+=2;break}i+=e[r++]}n+=it(i.trim(),t)}else n+=e[r++];return n}var J=class{static logger=n.t;options;dataSource=null;seededVersionId=null;versionSkew=null;previewUnavailable=!1;contentLoader;previewEmbedderOrigins=null;plugins={};telemetry=qe();dataProviders=new Map;eventBus=(0,d.createEvent)();events;projectId;apiUrl;dashboardUrl;documentationSiteUrl;session=Ze();performance=Ke();searchParams=c.a();history=ue();components=T({client:this});experienceInstances=a.n({client:this});experiences=_({client:this});frameworks=k({client:this});predicates=se({client:this});features=c.s({client:this});conditions=He();fields=he();responses=ze({client:this});steps=ve();contents=Se();actions=ke({client:this});conditionResults=a.r();stateSnapshotStore=ee({client:this});evaluateRuleLogicFx=ne({client:this});start;readyStore;preconditionPassedStore;conditionPassedStore;lifecycleStageStore;lifecycle=ie({client:this});renderStringFx=(0,d.attach)({source:this.responses.listStore,effect:(e,{template:t,context:n})=>{let r={};for(let t of e)r[t.fieldKey]=t.value;return at(t,{...n,responses:r})}});constructor(e){this.events=fe(this.eventBus),this.projectId=et(e),this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Ue(),this.dashboardUrl=e.dashboardUrl??`https://dashboard.picked.app`,this.documentationSiteUrl=e.documentationSiteUrl??`https://docs.picked.app`,this.start=this.lifecycle.start,this.readyStore=this.lifecycle.readyStore,this.preconditionPassedStore=this.lifecycle.preconditionPassedStore,this.conditionPassedStore=this.lifecycle.conditionPassedStore,this.lifecycleStageStore=this.lifecycle.lifecycleStageStore,this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.setupFields(),this.setupComponents(),this.lifecycle.setPrecondition(e.precondition),this.lifecycle.setCondition(e.condition),this.eventBus({type:`load`,version:c.o()}),this.maybeStartPreviewChannel()}dataProviderFor(e){let t=e??``,n=this.dataProviders.get(t);if(n)return n;let r=Promise.resolve().then(()=>require("../provider-DZkjI5RB.cjs")).then(t=>t.createPickedDataProvider({apiUrl:this.apiUrl,projectId:this.projectId,getRequestObserver:()=>this.telemetry.deliveryAPIRequestObserver,...e!==void 0&&{previewToken:e}}));return this.dataProviders.set(t,r),r}async getProjectConfig(e){let t=await this.dataProviderFor(e?.previewToken),n=await t.getProjectConfig();if(this.dataSource=t.meta.manifest,n===null&&t.meta.previewUnavailable)throw new c.t(this.projectId);if(n===null)throw Error(`Picked could not resolve the configuration for project "${this.projectId}" from ${this.apiUrl}.`);return n}async getExperienceContent(e,t){return(await this.dataProviderFor(t?.previewToken)).getContent(e,t?.signal===void 0?void 0:{signal:t.signal})}maybeStartPreviewChannel(){c.r()&&Promise.resolve().then(()=>require("../preview-channel-Cx0e6fye.cjs")).then(e=>e.initPreviewChannel(this)).catch(()=>void 0)}registerFramework=e=>{A(e,this.frameworks)};registerComponent=(e,t)=>{E(e,t,this.components)};registerPlugin=e=>{b(this,e,this.plugins);let t=this.plugins[e.name];t?.onStart&&this.lifecycle.registerPluginStartHook(t.onStart)};registerFeature=(e,t)=>{c.l(e,t,this.features)};registerPredicate=(e,t)=>{ce(e,t,this.predicates)};registerCondition=e=>{this.conditions.register(e)};registerField=e=>{this.fields.register(e)};registerStep=e=>{ye(e,this.steps)};registerContent=e=>{Ce(e,this.contents)};patchContent=(e,t)=>{this.contents.patch(e,t)};registerAction=(e,t)=>{Ae(e,t,this.actions)};registerExperience=e=>{e.component&&E(`experience:${e.id}`,e.component,this.components),this.experiences.register(e)};launchExperienceById=async(e,t)=>{this.experiences.launch({id:e,options:t})};launchExperienceByKey=async(e,t)=>{this.experiences.launch({key:e,options:t})};openExperienceById=async e=>{this.experiences.open({id:e})};openExperienceByKey=async e=>{this.experiences.open({key:e})};setupPlugins(){this.options.plugins?.forEach(e=>{if(Array.isArray(e)){e.forEach(e=>{this.registerPlugin(e)});return}let t=typeof e==`function`?e():e;if(Array.isArray(t)){t.forEach(e=>this.registerPlugin(e));return}this.registerPlugin(t)})}setupFeatures(){let e=this.options.features;e&&Object.entries(e).forEach(([e,t])=>{let n=typeof t==`function`?t():t;this.registerFeature(e,n)}),this.searchParams.feature&&this.searchParams.feature.forEach(e=>{try{let t=c.c(e);if(!t)return;let{id:n,bucket:r}=t;this.registerFeature(n,{key:`${r}`,name:n,enabled:!0,decide:()=>r,storage:`session`})}catch{}})}setupPredicates(){let e=this.options.predicates;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerPredicate(e,t)})}setupActions(){let e=this.options.actions;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerAction(e,t)})}setupFields(){let e=this.options.fields;e&&Object.entries(e).forEach(([e,t])=>{let n=typeof t==`function`?t():t;this.registerField({...n,key:n.key??e})})}setupComponents(){let e=this.options.components;e&&Object.entries(e).forEach(([e,t])=>{this.registerComponent(e,t)})}getPluginConfig=e=>this.plugins[e]??{}},ot=`application/picked-javascript`,st=`application/picked-module`,ct=`data-picked-hydrated`;async function Y(e){if(!(`document`in globalThis))return;let t=`application/picked-module`,n=`data-picked-hydrated`;function r(e){try{Function(e.textContent)}catch(t){return t instanceof SyntaxError&&(console.error(`[picked] Skipped a rehydrated inline script that failed to parse.`,t),e.setAttribute(n,``),!0)}return!1}function i(e,t){let r=document.createElement(`script`);for(let t of Array.from(e.attributes))t.name!==`type`&&r.setAttribute(t.name,t.value);t&&r.setAttribute(`type`,t),r.setAttribute(n,``),e.src?r.async=!1:r.textContent=e.textContent;let i=e.src?new Promise(e=>{r.addEventListener(`load`,()=>e(),{once:!0}),r.addEventListener(`error`,()=>e(),{once:!0})}):null;return e.src?e.replaceWith(r):(globalThis.__pickedEmbedScriptRoot=e.getRootNode(),e.replaceWith(r),globalThis.__pickedEmbedScriptRoot=null),i}let a=Array.from(e.querySelectorAll(`script[type="application/picked-javascript"]:not([${n}]), script[type="${t}"]:not([${n}])`)).filter(e=>e instanceof HTMLScriptElement);for(let e of a){if(!e.isConnected)continue;let n=e.getAttribute(`type`)===t?`module`:null;if(!e.src&&n===null&&r(e))continue;let a=i(e,n);a&&await a}}function lt(){return`<script>(${Y.toString()})(document)<\/script>`}function ut(e){return typeof e==`object`&&!!e&&`id`in e&&typeof e.id==`string`&&`content`in e&&(typeof e.content==`string`||e.content===null)}function dt(e){return{$$type:`lazy-component`,load:e}}function ft(e){return typeof e==`object`&&!!e&&`$$type`in e&&e.$$type===`lazy-component`}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&`contentEntryId`in e&&typeof e.contentEntryId==`string`}function Z(e){return X(e)?e.contentEntryId:null}function Q(e){let t=Array.isArray(e)?e:[e],n=[];for(let e of t)X(e)&&n.push(e.contentEntryId);return n}function pt(e,t){return t===null?null:e[t]??null}function $(e,t){let n=[];for(let r of t){let t=e[r];t!==void 0&&n.push(t)}return n}function mt(e,t){if(d.is.store(t))return(0,d.combine)(t,e.indexStore,(e,t)=>pt(t,Z(e)));let n=Z(t);return e.indexStore.map(e=>pt(e,n),{skipVoid:!1})}function ht(e,t){if(d.is.store(t))return(0,d.combine)(t,e.indexStore,(e,t)=>$(t,Q(e)));let n=Q(t);return e.indexStore.map(e=>$(e,n),{skipVoid:!1})}var gt=e=>{let t=new J(e);return r.m(t),t};function _t(e){return typeof e.data==`object`}function vt(e){return e.map(e=>!e||!_t(e)?null:e,{skipVoid:!1})}function yt(e,t){return e.contentModelKey===t}exports.PICKED_HYDRATED_ATTR=ct,exports.PICKED_MODULE_SCRIPT_TYPE=st,exports.PICKED_SCRIPT_TYPE=ot,exports.PREVIEW_TOKEN_PARAM=c.n,exports.Picked=J,exports.PreviewUnavailableError=c.t,exports.buildRehydrateBootstrap=lt,exports.createClient=gt,exports.createPluginEffect=y,exports.createStorageKey=s.t,exports.deriveReference=mt,exports.deriveReferences=ht,exports.evaluateRuleLogic=t.t,exports.getPickedConfig=K,exports.isContentOfModel=yt,exports.isContentReference=X,exports.isHtmlAssetValue=ut,exports.isInsideIframe=r.t,exports.isLazyLoader=ft,exports.isPickedRoot=i.a,exports.isPreviewSession=c.r,exports.lazyComponent=dt,exports.localStore=s.n,exports.onInertScriptSubtrees=u.t,exports.readReferenceId=Z,exports.readReferenceIds=Q,exports.rehydrateScripts=Y,exports.reportInertScriptSubtrees=u.n,exports.resetInertScriptReport=u.r,exports.sessionStore=s.r,exports.subscribe=s.i,exports.supportsCookies=r.n,exports.supportsCryptoRandomUUID=r.r,exports.supportsDocument=r.i,exports.supportsHistory=r.a,exports.supportsIntersectionObserver=r.o,exports.supportsLocalStorage=r.s,exports.supportsLocation=r.c,exports.supportsSessionStorage=r.l,exports.supportsShadowRoot=r.u,exports.supportsWebComponents=r.d,exports.supportsWindow=r.f,exports.toTypedContentStore=vt;
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../plugin-B2XAOdGd.cjs"),t=require("../../../api-CLXVSK5i.cjs"),n=require("../../../registry-C1t8l3t9.cjs");let r=require("@picked/delivery-api-client");Object.defineProperty(exports,"ActionResponseTimeoutError",{enumerable:!0,get:function(){return r.ActionResponseTimeoutError}}),Object.defineProperty(exports,"ActionRunFailedError",{enumerable:!0,get:function(){return r.ActionRunFailedError}}),Object.defineProperty(exports,"createClientHeaders",{enumerable:!0,get:function(){return r.createClientHeaders}}),exports.dynamicExperiencesPlugin=e.t,exports.fetchExperienceContent=t.t,exports.fetchProject=t.n,Object.defineProperty(exports,"fetchSchema",{enumerable:!0,get:function(){return r.fetchSchema}}),exports.registerPickedBundle=n.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../plugin-BkrRDpQi.cjs"),t=require("../../../api-BiOs35O-.cjs"),n=require("../../../registry-C1t8l3t9.cjs");let r=require("@picked/delivery-api-client");Object.defineProperty(exports,"ActionResponseTimeoutError",{enumerable:!0,get:function(){return r.ActionResponseTimeoutError}}),Object.defineProperty(exports,"ActionRunFailedError",{enumerable:!0,get:function(){return r.ActionRunFailedError}}),Object.defineProperty(exports,"createClientHeaders",{enumerable:!0,get:function(){return r.createClientHeaders}}),exports.dynamicExperiencesPlugin=e.t,exports.fetchExperienceContent=t.t,exports.fetchProject=t.n,Object.defineProperty(exports,"fetchSchema",{enumerable:!0,get:function(){return r.fetchSchema}}),exports.registerPickedBundle=n.n;
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../experience-instance-C9WV52iQ.cjs"),t=require("../../preview-unavailable-DMo_ztFb.cjs"),n=require("../../plugin-B2XAOdGd.cjs");let r=require("effector");var i=1e4;function a(e){if(e?.location!==void 0)return{location:e.location}}function o(t,n){return t.nodes.filter(e.d).some(e=>n.get(e.stepId)===!0)}async function s(r,s={}){let c=s.previewToken===void 0?void 0:{previewToken:s.previewToken},l=await r.getProjectConfig(c).catch(e=>{if(!(e instanceof t.t))throw e;return c=void 0,r.getProjectConfig()}),u=r.session.store.getState().id;r.conditionResults.reset(),n.n(r,l,{isPreview:!1,sessionId:u});let d=a(s.attributes),f=s.timeoutMs??i,p=new Map(l.steps.map(e=>[e.id,e.layoutContentId!==void 0&&e.layoutContentId!==null])),m=Object.fromEntries(l.conditions.map(e=>[e.key,e])),h=l.experiences.filter(t=>!e.c(t.condition,m)),g=(await Promise.all(h.map(async t=>({experience:t,active:await e.o(r,{condition:t.condition},{context:d})})))).filter(e=>e.active).map(e=>e.experience),_=await Promise.all(g.filter(e=>o(e,p)).map(e=>r.getExperienceContent({id:e.id,key:e.key},{...c,signal:AbortSignal.timeout(f)}))),v=new Map;for(let e of _)if(e)for(let t of[...e.references??[],...e.content])v.set(t.id,t);return{versionId:l.versionId,projectConfig:l,content:Array.from(v.values()),conditionResults:r.conditionResults.store.getState()}}function c(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:t=>e(t),reject:e=>t(e)}}function l(t,n){let{promise:i,resolve:a}=c(),o=(0,r.createEvent)(),s=(0,r.createEvent)(),l=(0,r.createEvent)(),u=(0,r.createEvent)(),d=(0,r.createEvent)(),f=t.experiences.listStore.map(n=>n.map(n=>e.t({client:t,experience:n}))),p=(0,r.createStore)({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=(0,r.createEffect)(async e=>{let n=(0,r.attach)({source:e.experience.componentStore,effect:async(n,r)=>{let i=e.availableRenderers[r];return n&&i?.isValidComponent(n.component)?{rendered:await i.render(n.component,t,e.experience),rendererIndex:r}:null}}),i=e.startRendererIndex??0;for(let t=i;t<e.availableRenderers.length;t++){let e=await n(t);if(e)return e}return null}),h=(0,r.createEffect)(async({experience:e,availableRenderers:t,startRendererIndex:n=0})=>e?m({experience:e,availableRenderers:t,startRendererIndex:n}):null);p.on(l,(e,t)=>({...e,renderedExperiences:[...e.renderedExperiences,t],currentExperienceIndex:e.currentExperienceIndex+1})).on(d,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(u,e=>({...e,isComplete:!0})).reset(o),(0,r.sample)({clock:o,target:s}),(0,r.sample)({clock:s,source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex<e.length&&!t.isComplete,fn:({experiences:e,state:t})=>({experience:e[t.currentExperienceIndex],availableRenderers:n,startRendererIndex:0}),target:h}),(0,r.sample)({clock:h.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),(0,r.sample)({clock:l,target:s}),(0,r.sample)({clock:h.doneData,filter:e=>e===null,target:d}),(0,r.sample)({clock:d,target:s}),(0,r.sample)({clock:[s,d,l],source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex>=e.length,target:u});let g=(0,r.attach)({source:p,effect:e=>{e.isComplete&&a(e.renderedExperiences)}});return(0,r.sample)({clock:u,target:g}),o(),i}exports.createExperienceInstance=e.t,exports.evaluateConditionMemo=e.i,exports.hashRule=e.a,exports.isExperienceActive=e.o,exports.registerProjectConfig=n.n,exports.render=l,exports.ruleReferencesAction=e.s,exports.ruleReferencesActionDeep=e.c,exports.serialize=s;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../experience-instance-C9WV52iQ.cjs"),t=require("../../preview-unavailable-DfP5lMRZ.cjs"),n=require("../../plugin-BkrRDpQi.cjs");let r=require("effector");var i=1e4;function a(e){if(e?.location!==void 0)return{location:e.location}}function o(t,n){return t.nodes.filter(e.d).some(e=>n.get(e.stepId)===!0)}async function s(r,s={}){let c=s.previewToken===void 0?void 0:{previewToken:s.previewToken},l=await r.getProjectConfig(c).catch(e=>{if(!(e instanceof t.t))throw e;return c=void 0,r.getProjectConfig()}),u=r.session.store.getState().id;r.conditionResults.reset(),n.n(r,l,{isPreview:!1,sessionId:u});let d=a(s.attributes),f=s.timeoutMs??i,p=new Map(l.steps.map(e=>[e.id,e.layoutContentId!==void 0&&e.layoutContentId!==null])),m=Object.fromEntries(l.conditions.map(e=>[e.key,e])),h=l.experiences.filter(t=>!e.c(t.condition,m)),g=(await Promise.all(h.map(async t=>({experience:t,active:await e.o(r,{condition:t.condition},{context:d})})))).filter(e=>e.active).map(e=>e.experience),_=await Promise.all(g.filter(e=>o(e,p)).map(e=>r.getExperienceContent({id:e.id,key:e.key},{...c,signal:AbortSignal.timeout(f)}))),v=new Map;for(let e of _)if(e)for(let t of[...e.references??[],...e.content])v.set(t.id,t);return{versionId:l.versionId,projectConfig:l,content:Array.from(v.values()),conditionResults:r.conditionResults.store.getState()}}function c(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:t=>e(t),reject:e=>t(e)}}function l(t,n){let{promise:i,resolve:a}=c(),o=(0,r.createEvent)(),s=(0,r.createEvent)(),l=(0,r.createEvent)(),u=(0,r.createEvent)(),d=(0,r.createEvent)(),f=t.experiences.listStore.map(n=>n.map(n=>e.t({client:t,experience:n}))),p=(0,r.createStore)({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=(0,r.createEffect)(async e=>{let n=(0,r.attach)({source:e.experience.componentStore,effect:async(n,r)=>{let i=e.availableRenderers[r];return n&&i?.isValidComponent(n.component)?{rendered:await i.render(n.component,t,e.experience),rendererIndex:r}:null}}),i=e.startRendererIndex??0;for(let t=i;t<e.availableRenderers.length;t++){let e=await n(t);if(e)return e}return null}),h=(0,r.createEffect)(async({experience:e,availableRenderers:t,startRendererIndex:n=0})=>e?m({experience:e,availableRenderers:t,startRendererIndex:n}):null);p.on(l,(e,t)=>({...e,renderedExperiences:[...e.renderedExperiences,t],currentExperienceIndex:e.currentExperienceIndex+1})).on(d,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(u,e=>({...e,isComplete:!0})).reset(o),(0,r.sample)({clock:o,target:s}),(0,r.sample)({clock:s,source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex<e.length&&!t.isComplete,fn:({experiences:e,state:t})=>({experience:e[t.currentExperienceIndex],availableRenderers:n,startRendererIndex:0}),target:h}),(0,r.sample)({clock:h.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),(0,r.sample)({clock:l,target:s}),(0,r.sample)({clock:h.doneData,filter:e=>e===null,target:d}),(0,r.sample)({clock:d,target:s}),(0,r.sample)({clock:[s,d,l],source:{experiences:f,state:p},filter:({experiences:e,state:t})=>t.currentExperienceIndex>=e.length,target:u});let g=(0,r.attach)({source:p,effect:e=>{e.isComplete&&a(e.renderedExperiences)}});return(0,r.sample)({clock:u,target:g}),o(),i}exports.createExperienceInstance=e.t,exports.evaluateConditionMemo=e.i,exports.hashRule=e.a,exports.isExperienceActive=e.o,exports.registerProjectConfig=n.n,exports.render=l,exports.ruleReferencesAction=e.s,exports.ruleReferencesActionDeep=e.c,exports.serialize=s;
@@ -5,9 +5,9 @@ layout: docs
5
5
 
6
6
  # Labels
7
7
 
8
- A label is a name and a value on a lead. A workflow sets and removes the labels of a lead
9
- with tool nodes. A label can expire, a write can be conditional, and a node can increment a
10
- `number` label.
8
+ A label is a name and a value on a lead, a project or a workflow run. A workflow sets and
9
+ removes labels with tool nodes. A label can expire, a write can be conditional, and a node
10
+ can increment a `number` label.
11
11
 
12
12
  ## Name, type and value
13
13
 
@@ -18,32 +18,82 @@ with tool nodes. A label can expire, a write can be conditional, and a node can
18
18
  | Type | `text`, `number`, `boolean` or `json`. It tells how to read the value. |
19
19
  | Value | Text. A `number` label holds a number, a `boolean` label holds `true` or `false`, and a `json` label holds a JSON document. |
20
20
 
21
- A lead has one label for each namespace and key.
21
+ The lead, the project or the run that has a label is the owner of the label. An owner has
22
+ one label for each namespace and key.
23
+
24
+ ## Owners
25
+
26
+ | Owner | Where the labels stay | Scope to read the labels | Scope to set and remove the labels |
27
+ | ------------ | ------------------------------------------------------------------------------------------------------------ | ---------------------------- | ---------------------------------- |
28
+ | Lead | Until you delete the lead. Picked deletes the labels of a lead with the lead. | `ORGANIZATION_LEADS_READ` | `ORGANIZATION_LEADS_UPDATE` |
29
+ | Project | Picked keeps the labels when you delete the project. These labels hold data for all the runs of the project. | `ORGANIZATION_PROJECTS_READ` | `ORGANIZATION_PROJECTS_UPDATE` |
30
+ | Workflow run | With the run. Picked does not delete a run. | `ORGANIZATION_PROJECTS_READ` | `ORGANIZATION_PROJECTS_UPDATE` |
31
+
32
+ A run reads, sets and removes its own labels without a scope.
33
+
34
+ ## Visitor data in project and run labels
35
+
36
+ The labels of a project and of a run stay after Picked deletes a lead. Picked does not delete
37
+ visitor data in a project label or a run label with the lead. Visitor data is, for example, an
38
+ email address, a phone number or a visitor ID.
39
+
40
+ A project label or a run label can have the `sha256` hash of a visitor identifier as its key.
41
+ With a hash, a workflow can hold a label for one visitor across runs. Use `expiresIn` to set
42
+ how long the label stays. Refer to [Example: one run at a time for each visitor](#example-one-run-at-a-time-for-each-visitor).
22
43
 
23
44
  ## Tools
24
45
 
25
- | Tool | Name in the editor | Output |
26
- | -------------------- | ---------------------- | ---------------------------------- |
27
- | `set_lead_labels` | **Set lead labels** | `lead` and `count` |
28
- | `remove_lead_labels` | **Remove lead labels** | `lead` and `removed` |
29
- | `create_lead` | **Create lead** | `lead`, `created` and `labelCount` |
46
+ | Tool | Name in the editor | Owner | Output | Scopes |
47
+ | ----------------------- | ------------------------- | ------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------- |
48
+ | `set_lead_labels` | **Set lead labels** | The lead in its `lead` argument | `lead` and `count` | `ORGANIZATION_LEADS_UPDATE` and `ORGANIZATION_LEADS_READ` |
49
+ | `remove_lead_labels` | **Remove lead labels** | The lead in its `lead` argument | `lead` and `removed` | `ORGANIZATION_LEADS_UPDATE` and `ORGANIZATION_LEADS_READ` |
50
+ | `create_lead` | **Create lead** | The lead that it makes | `lead`, `created` and `labelCount` | `ORGANIZATION_LEADS_CREATE`, `ORGANIZATION_LEADS_READ` and `ORGANIZATION_LEADS_UPDATE` |
51
+ | `set_project_labels` | **Set project labels** | The project of the run | `project` and `count` | `ORGANIZATION_PROJECTS_UPDATE` and `ORGANIZATION_PROJECTS_READ` |
52
+ | `remove_project_labels` | **Remove project labels** | The project of the run | `project` and `removed` | `ORGANIZATION_PROJECTS_UPDATE` and `ORGANIZATION_PROJECTS_READ` |
53
+ | `get_project` | **Get project** | The project of the run | `project` | `ORGANIZATION_PROJECTS_READ` |
54
+ | `set_run_labels` | **Set run labels** | The run | `run` and `count` | None |
55
+ | `remove_run_labels` | **Remove run labels** | The run | `run` and `removed` | None |
56
+ | `get_run` | **Get run** | The run | `run` | None |
57
+
58
+ **Set project labels**, **Remove project labels**, **Set run labels**, **Remove run labels**,
59
+ **Get project** and **Get run** have no argument for the owner.
60
+
61
+ The `lead`, `project` and `run` outputs hold the labels of the owner at the time that a later
62
+ node reads them, as `labels.<namespace>.<key>`:
63
+
64
+ | Output | Fields |
65
+ | --------- | ------------------------- |
66
+ | `lead` | The lead, and `labels` |
67
+ | `project` | `id`, `name` and `labels` |
68
+ | `run` | `id` and `labels` |
30
69
 
31
- The `lead` output holds the labels of the lead at the time that a later node reads it.
70
+ For example, `{{ nodes.project.project.labels.cms.sent_today }}` reads the label
71
+ `cms.sent_today` of the project.
72
+
73
+ When Picked refuses the labels of a node, or cannot find the owner, the node fails with the
74
+ code `tool_failed`. Its reason is the error code in lowercase, such as `label_write_invalid`,
75
+ `value_invalid_for_type` or `owner_not_found`. An edge on the error exit of the node can
76
+ continue the run. Refer to the [workflow runs reference](/reference/dashboard/workflow-runs#run-status).
77
+
78
+ ## Labels in a test run
79
+
80
+ For the run tools in a test run, refer to
81
+ [What runs](/reference/dashboard/workflow-test-runs#what-runs).
32
82
 
33
83
  ## A row that sets a label
34
84
 
35
- The `labels` argument of **Set lead labels** and **Create lead** is a list of rows. Each row
36
- sets one label.
85
+ The `labels` argument of **Set lead labels**, **Set project labels**, **Set run labels** and
86
+ **Create lead** is a list of rows. Each row sets one label.
37
87
 
38
- | Field | Type | Default | Description |
39
- | -------------- | ----------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
40
- | `namespace` | Text | — | The namespace of the label. |
41
- | `key` | Text | — | The key of the label. |
42
- | `type` | Text | `number` with `increment`, else `text` | The type of the label. |
43
- | `value` | Text | — | The value of the label. |
44
- | `increment` | Number | — | An amount to add to the value of a `number` label. Refer to [Increments](#increments). |
45
- | `expiresIn` | Number | No expiry | The number of seconds until the label expires, from 1 to 31536000. Refer to [Expiry](#expiry). |
46
- | `onlyIfAbsent` | `true` or `false` | `false` | When `true`, the row sets the label only when the lead does not have it. Refer to [Conditional rows](#conditional-rows). |
88
+ | Field | Type | Default | Description |
89
+ | -------------- | ----------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
90
+ | `namespace` | Text | — | The namespace of the label. |
91
+ | `key` | Text | — | The key of the label. |
92
+ | `type` | Text | `number` with `increment`, else `text` | The type of the label. |
93
+ | `value` | Text | — | The value of the label. |
94
+ | `increment` | Number | — | An amount to add to the value of a `number` label. Refer to [Increments](#increments). |
95
+ | `expiresIn` | Number | No expiry | The number of seconds until the label expires, from 1 to 31536000. Refer to [Expiry](#expiry). |
96
+ | `onlyIfAbsent` | `true` or `false` | `false` | When `true`, the row sets the label only when the owner does not have it. Refer to [Conditional rows](#conditional-rows). |
47
97
 
48
98
  A row has `value` or `increment`. It cannot have both. When you save a workflow, Picked
49
99
  refuses a row that has both, or neither.
@@ -84,11 +134,11 @@ it shows no rows. **Replace with rows** removes the template after you confirm i
84
134
  A label with `expiresIn` expires that number of seconds after the node sets it. Picked does
85
135
  not show an expired label:
86
136
 
87
- - The `lead` output of a tool does not have it.
137
+ - The `lead`, `project` or `run` output of a tool does not have it.
88
138
  - A lead search clause does not match it. A negative clause, such as `-cms.status:*`, matches
89
139
  the lead.
90
140
  - A lead sorts as if it does not have the label.
91
- - The lead page does not show it.
141
+ - The pages of the dashboard do not show it.
92
142
 
93
143
  A row that sets an expired label makes a new label, with a new ID. The task records it as
94
144
  created.
@@ -98,11 +148,11 @@ record an operation.
98
148
 
99
149
  ## Conditional rows
100
150
 
101
- A row with `onlyIfAbsent: true` sets its label only when the lead does not have a label with
151
+ A row with `onlyIfAbsent: true` sets its label only when the owner does not have a label with
102
152
  its namespace and key. An expired label does not count. Picked does the check and the write in
103
153
  one step. When two nodes set the same absent label at the same time, only one of them sets it.
104
154
 
105
- When the lead has the label already:
155
+ When the owner has the label already:
106
156
 
107
157
  | The label has | Result |
108
158
  | --------------------------------- | ------------------------------------------------------------------------------------- |
@@ -117,17 +167,17 @@ A row with `increment` cannot have `onlyIfAbsent`.
117
167
 
118
168
  ## Atomic writes
119
169
 
120
- **Set lead labels** has an `atomic` argument. In the workflow editor, it is the **Atomic**
121
- checkbox. When it is `true`, the node takes all of its labels or none of them. If one
122
- conditional row does not take its label, the node sets no label, records no operation, and
123
- gives a `count` of 0.
170
+ **Set lead labels**, **Set project labels** and **Set run labels** have an `atomic`
171
+ argument. In the workflow editor, it is the **Atomic** checkbox. When it is `true`, the node
172
+ takes all of its labels or none of them. If one conditional row does not take its label, the
173
+ node sets no label, records no operation, and gives a `count` of 0.
124
174
 
125
175
  Two nodes with `atomic` can run at the same time. If both nodes set the same label with
126
176
  `onlyIfAbsent` and a value unique to each node, one node at most takes its labels.
127
177
 
128
178
  ## Increments
129
179
 
130
- A row with `increment` adds that amount to the value of a `number` label. When the lead does
180
+ A row with `increment` adds that amount to the value of a `number` label. When the owner does
131
181
  not have the label, or the label expired, the value starts at 0. When many nodes add to the
132
182
  same label at the same time, the label counts each amount.
133
183
 
@@ -142,7 +192,8 @@ When Picked starts a node again after it added its amount, the node adds the amo
142
192
 
143
193
  ## A row that removes a label
144
194
 
145
- The `labels` argument of **Remove lead labels** is a list of rows. Each row removes one label.
195
+ The `labels` argument of **Remove lead labels**, **Remove project labels** and **Remove run
196
+ labels** is a list of rows. Each row removes one label.
146
197
 
147
198
  | Field | Type | Default | Description |
148
199
  | ----------- | ---- | --------- | ------------------------------------------------------------------------------------------------- |
@@ -157,7 +208,7 @@ run holds it.
157
208
  In the workflow editor, **Only while its value is** sets `ifValue`. It accepts text or a
158
209
  template. When the field is empty, the row has no `ifValue`.
159
210
 
160
- A row that names a label that the lead does not have removes nothing. An expired label counts
211
+ A row that names a label that the owner does not have removes nothing. An expired label counts
161
212
  as no label.
162
213
 
163
214
  ## Count and removed
@@ -197,9 +248,46 @@ only while the run holds it:
197
248
  }
198
249
  ```
199
250
 
251
+ ## Example: one run at a time for each visitor
252
+
253
+ This **Set project labels** node holds a label for the visitor of the run for one hour,
254
+ unless a different run holds it. The key is the `sha256` hash of the visitor ID, and the label
255
+ expires. Refer to [the rule for visitor data](#visitor-data-in-project-and-run-labels).
256
+
257
+ ```json
258
+ {
259
+ "labels": [
260
+ {
261
+ "namespace": "cms-lock-visitor",
262
+ "key": "{{ trigger.action.userId | default: run.id | sha256 }}",
263
+ "value": "{{ run.id }}",
264
+ "onlyIfAbsent": true,
265
+ "expiresIn": 3600
266
+ }
267
+ ]
268
+ }
269
+ ```
270
+
271
+ When `count` is 1, the run holds the label. This **Remove project labels** node removes the
272
+ label only while the run holds it:
273
+
274
+ ```json
275
+ {
276
+ "labels": [
277
+ {
278
+ "namespace": "cms-lock-visitor",
279
+ "key": "{{ trigger.action.userId | default: run.id | sha256 }}",
280
+ "ifValue": "{{ run.id }}"
281
+ }
282
+ ]
283
+ }
284
+ ```
285
+
200
286
  ## Related
201
287
 
202
288
  - [Workflow runs](/reference/dashboard/workflow-runs) — the error exit of a node, and the
203
289
  operations that a task records.
290
+ - [Workflow templates](/reference/dashboard/workflow-templates) — the `sha256` filter and the
291
+ `run.id` variable.
204
292
  - [Lead search](/reference/dashboard/lead-search) — clauses on labels.
205
293
  - [Glossary](/reference/glossary) — label, namespace and label type.
@@ -34,10 +34,12 @@ continues on that edge only when the tool itself fails:
34
34
  - An External API call fails. Refer to the [External APIs reference](/reference/dashboard/external-apis#errors).
35
35
  - Another tool refuses the request. For example, a label value is not a number for a
36
36
  `number` label, or the lead does not exist. The tool also refuses a row with `increment`
37
- on a label that is not a `number` label. Refer to the [Labels reference](/reference/dashboard/labels).
37
+ on a label that is not a `number` label. It refuses some project labels and run labels
38
+ with a key in the format of a hash. Refer to the [Labels reference](/reference/dashboard/labels).
38
39
 
39
40
  When the tool refuses the request, the error record has the code `tool_failed` and a
40
- reason from the tool, for example `value_invalid_for_type` or `not_found`.
41
+ reason from the tool, for example `value_invalid_for_type`, `label_write_invalid` or
42
+ `owner_not_found`.
41
43
 
42
44
  Other failures stop the run, with or without an edge on the error exit:
43
45
 
@@ -40,12 +40,14 @@ A required field must have a value before the test run starts.
40
40
 
41
41
  ## What runs
42
42
 
43
- | Node | In a test run |
44
- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
45
- | Tool that reads, such as **Search leads** or an **External API** `GET` or `HEAD` | Runs. |
46
- | Tool that writes, such as **Create lead**, **Set lead labels** or an **External API** `POST` | Does not run. The result shows the input that it would send. |
47
- | Condition | Runs, and shows the branch that it took. |
48
- | Wait | Does not wait. |
43
+ | Node | In a test run |
44
+ | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
45
+ | Tool that reads, such as **Search leads** or an **External API** `GET` or `HEAD` | Runs. |
46
+ | Tool that writes, such as **Create lead**, **Set lead labels** or an **External API** `POST` | Does not run. The result shows the input that it would send. |
47
+ | **Set run labels** and **Remove run labels** | Do not run, because Picked does not keep a test run. The result shows the input that they would send. |
48
+ | **Get run** | Runs, and gives the ID of the test run, which starts with `test_`, and no labels. |
49
+ | Condition | Runs, and shows the branch that it took. |
50
+ | Wait | Does not wait. |
49
51
 
50
52
  A later node that reads the output of a skipped node gets no value.
51
53
 
@@ -98,7 +98,8 @@ documentation uses, and it names the others.
98
98
  | --- | --- |
99
99
  | **Lead** | One set of answers that a visitor gave to a flow. It belongs to the project, and it stays after you publish a new version. |
100
100
  | **Response** | One answer in a lead, held under the key of the field that asked for it. |
101
- | **Label** | A name and a value that you or a workflow puts on a lead. It sits outside the answers, and it stays when you change your fields. A label can expire. Refer to [Labels](/reference/dashboard/labels). |
101
+ | **Label** | A name and a value that you or a workflow puts on a lead, a project or a workflow run. A label on a lead sits outside the answers, and it stays when you change your fields. A label can expire. Refer to [Labels](/reference/dashboard/labels). |
102
+ | **Label owner** | The lead, the project or the workflow run that has a label. The owner sets the scopes that read and write the label. |
102
103
  | **Namespace** | The first part of the name of a label, which groups related keys, such as `details` in `details.phone`. |
103
104
  | **Label type** | How to read the value of a label: text, number, boolean, or JSON. |
104
105
  | **Visit** | The events one visitor made in one session. The API calls it `session`. |
package/dist/esm/index.js CHANGED
@@ -6,7 +6,7 @@ import { a as v, i as y, r as ee, s as b, t as x } from "../dom-BqcToNL0.js";
6
6
  import { d as S, l as C, n as w, r as T, u as E } from "../experience-instance-4KUBH8Gb.js";
7
7
  import { apply as D } from "./logic-engine.js";
8
8
  import { i as te, n as O, r as ne, t as re } from "../storage-1MW3-_As.js";
9
- import { a as ie, c as ae, l as oe, n as se, o as ce, r as le, s as ue, t as de } from "../preview-unavailable-qVCLxakS.js";
9
+ import { a as ie, c as ae, l as oe, n as se, o as ce, r as le, s as ue, t as de } from "../preview-unavailable-D3dVa7V4.js";
10
10
  import { t as fe } from "../id-Bo4RBeOs.js";
11
11
  import { n as pe, r as me, t as he } from "../inert-script-report-B_bMPRzp.js";
12
12
  import { attach as k, clearNode as ge, combine as A, createApi as j, createDomain as M, createEffect as N, createEvent as P, createNode as _e, createStore as F, is as ve, sample as I, withRegion as ye } from "effector";
@@ -1547,7 +1547,7 @@ var Yt = class {
1547
1547
  dataProviderFor(e) {
1548
1548
  let t = e ?? "", n = this.dataProviders.get(t);
1549
1549
  if (n) return n;
1550
- let r = import("../provider-DFgW10fF.js").then((t) => t.createPickedDataProvider({
1550
+ let r = import("../provider-C1yXoFHR.js").then((t) => t.createPickedDataProvider({
1551
1551
  apiUrl: this.apiUrl,
1552
1552
  projectId: this.projectId,
1553
1553
  getRequestObserver: () => this.telemetry.deliveryAPIRequestObserver,
@@ -1,5 +1,5 @@
1
- import { t as e } from "../../../plugin-DNJLHaUr.js";
2
- import { n as t, t as n } from "../../../api-BKy0J83d.js";
1
+ import { t as e } from "../../../plugin-CdS2faun.js";
2
+ import { n as t, t as n } from "../../../api-BL8eCYKD.js";
3
3
  import { n as r } from "../../../registry-CXZv0uLg.js";
4
4
  import { ActionResponseTimeoutError as i, ActionRunFailedError as a, createClientHeaders as o, fetchSchema as s } from "@picked/delivery-api-client";
5
5
  export { i as ActionResponseTimeoutError, a as ActionRunFailedError, o as createClientHeaders, e as dynamicExperiencesPlugin, n as fetchExperienceContent, t as fetchProject, s as fetchSchema, r as registerPickedBundle };
@@ -1,6 +1,6 @@
1
1
  import { a as e, c as t, d as n, i as r, o as i, s as a, t as o } from "../../experience-instance-4KUBH8Gb.js";
2
- import { t as s } from "../../preview-unavailable-qVCLxakS.js";
3
- import { n as c } from "../../plugin-DNJLHaUr.js";
2
+ import { t as s } from "../../preview-unavailable-D3dVa7V4.js";
3
+ import { n as c } from "../../plugin-CdS2faun.js";
4
4
  import { attach as l, createEffect as u, createEvent as d, createStore as f, sample as p } from "effector";
5
5
  //#region src/server/serialize.ts
6
6
  var m = 1e4;
@@ -1 +1 @@
1
- require("./logger-CSTvAyyB.cjs");const e=require("./preview-unavailable-DMo_ztFb.cjs");require("./api-CLXVSK5i.cjs");let t=require("effector"),n=require("@picked/delivery-api-client");function r(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return t>>>0}function i(e){let t=e;return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}function a(e,t){return i(r(`${e}:${t}`))%100}function o(e,t){return t<=0?!1:t>=100||e<t}var s=4294967296;function c(e,t,n){return(i(r(`${e}:${t}:${n}`))+.5)/s}function l(e,t,n){return n.weight<=0?0:n.weight/-Math.log(c(e,t,n.key))}function u(e,t,n){let r=null,i=0;for(let a of n){let n=l(e,t,a);n<=0||(n>i||n===i&&r!==null&&a.key<r.key)&&(i=n,r=a)}return r}function d(e,t){if(Array.isArray(t.conditions))for(let n of t.conditions)e.registerCondition(n)}function f(e,t){e.registerExperience({id:t.id,key:t.key,name:t.name,targets:t.targets,nodes:t.nodes,edges:t.edges,condition:t.condition,initializeOpen:t.initializeOpen,componentName:t.componentName})}function p(e){return typeof e!=`object`||!e?!1:`id`in e&&`key`in e&&`type`in e&&`name`in e}function m(e,t){if(Array.isArray(t.fields))for(let n of t.fields)p(n)&&e.registerField(n)}function h(e,t){if(!Array.isArray(t.steps))return;let n=new Map(t.fields.map(e=>[e.id,e.key]));for(let r of t.steps){let t=[];for(let e of r.fieldIds??[]){let i=n.get(e);if(i===void 0){`${r.key}${e}`;continue}t.push(i)}let i=r.layoutContentId?e.contents.getById(r.layoutContentId):null;e.registerStep({id:r.id,key:r.key,name:r.name,fieldKeys:t,layoutName:r.layoutName,...r.layoutContentId!==void 0&&{layoutContentId:r.layoutContentId,layoutContentStore:i}})}}function g(e,t){if(Array.isArray(t.experiences))for(let n of t.experiences)f(e,n)}function _(e,t,n){E(e,t,n.isPreview,n.sessionId),d(e,t),m(e,t),h(e,t),b(e,t),g(e,t)}var v=25e3,y=3e4;function b(e,t){if(!Array.isArray(t.actions))return;let n=new Map(t.fields.map(e=>[e.id,e.key])),r=new Set(t.actions.map(e=>e.key)),i=new Set;for(let t of e.actions.listStore.getState())t.published?r.has(t.key)||e.actions.unregister(t.key):i.add(t.key);for(let r of t.actions){if(i.has(r.key)){`${r.key}`;continue}let a=[];for(let e of r.fieldIds??[]){let t=n.get(e);if(t===void 0){`${r.key}${e}`;continue}a.push(t)}let o={key:r.key,fieldKeys:a,versionId:t.versionId};e.actions.register({key:r.key,action:async t=>x(e,o,t),published:!0})}}async function x(e,t,r){let i=Date.now()+y,a={};for(let e of t.fieldKeys){let t=r.responses.find(t=>t.fieldKey===e);t?.value!==void 0&&(a[e]=t.value)}let o=e.session.store.getState().id,s=S(e),c=r.signal,l=await(0,n.runAction)(e.apiUrl,{key:t.key,projectId:e.projectId,session:{id:o},responses:a,versionId:t.versionId},{timeoutMs:Math.min(v,i-Date.now()),...c?{signal:c}:{},...s===void 0?{}:{previewToken:s}});if(l.status===`succeeded`)return l.response;if(l.status===`no_response`)return;if(l.workflowRunId===null)throw Error(`Action '${t.key}' is pending with no run to wait on`);let u=await(0,n.waitForActionResponse)(e.apiUrl,{workflowRunId:l.workflowRunId,projectId:e.projectId,sessionId:o},{timeoutMs:Math.max(1,i-Date.now()),...c?{signal:c}:{}});return u.status===`succeeded`?u.response:void 0}function S(t){let n=t.searchParams[e.n];if(n&&n.length>0)return n[0]}function C(t,n){return t.getProjectConfig(n===void 0?void 0:{previewToken:n}).catch(t=>t instanceof e.t?t:null)}async function w(t){let n=S(t),r=await C(t,n);if(!(r instanceof e.t))return{config:r,previewToken:n};e.i(t.searchParams,e.n),t.previewUnavailable=!0,`${r.message}`;let i=await C(t,void 0);return{config:i instanceof e.t?null:i,previewToken:void 0}}function T(t){let n=new Map,r=t.searchParams.feature;if(!r)return n;for(let t of r){let r=e.c(t);r&&n.set(r.id,r.bucket)}return n}function E(e,t,n,r){let i=T(e);for(let a of t.features){let t=i.get(a.id);if(t!==void 0){D(e,a,t);continue}O(e,a,n,r)}}function D(e,t,n){e.registerFeature(t.id,{key:`${n}`,name:t.name,enabled:!0,weight:t.weight,...t.valueType!==void 0&&{valueType:t.valueType},...t.variants!==void 0&&{variants:t.variants},storage:`session`,decide:()=>n})}function O(e,t,n,r){let i=t.id,s=t.variants;e.registerFeature(i,{key:`v${t.version}`,name:t.name,enabled:t.enabled,weight:t.weight,storage:n?`session`:`local`,valueType:t.valueType,variants:s,decide:()=>t.valueType===`text`?!s||s.length===0?(`${i}`,!1):u(r,i,s)?.value??!1:o(a(r,i),t.weight)})}function k(e,t){for(let n of[...t.references??[],...t.content])e.registerContent({id:n.id,contentModelKey:n.contentModelKey,data:n.data})}function A(e,t){let n=new Map;return(r,i)=>{let a=n.get(r.id);if(a)return a;let o=(async()=>{try{let n=await t(r,i);return n&&k(e,n),n}finally{n.delete(r.id)}})();return n.set(r.id,o),o}}function j(e,t){let n=new Set(t&&Array.isArray(t.experiences)?t.experiences.map(e=>e.id):[]);return(t,r)=>n.has(t.id)?e(t,r):Promise.resolve(null)}function M(){return{name:`dynamic-experiences`,setup:e=>({onStart:(0,t.attach)({source:e.session.store.map(e=>e.id),effect:async t=>{let{config:n,previewToken:r}=await w(e),i=r!==void 0,a=r===void 0?void 0:{previewToken:r};if(e.contentLoader=A(e,j(t=>e.getExperienceContent(t,a),n)),!n)return;let o=e.seededVersionId;if(o!==null&&o!==n.versionId){e.versionSkew={seeded:o,resolved:n.versionId},`${n.versionId}${o}`;return}e.previewEmbedderOrigins=n.previewEmbedderOrigins??null,_(e,n,{isPreview:i,sessionId:t})}})})}}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return M}});
1
+ require("./logger-CSTvAyyB.cjs");const e=require("./preview-unavailable-DfP5lMRZ.cjs");require("./api-BiOs35O-.cjs");let t=require("effector"),n=require("@picked/delivery-api-client");function r(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return t>>>0}function i(e){let t=e;return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}function a(e,t){return i(r(`${e}:${t}`))%100}function o(e,t){return t<=0?!1:t>=100||e<t}var s=4294967296;function c(e,t,n){return(i(r(`${e}:${t}:${n}`))+.5)/s}function l(e,t,n){return n.weight<=0?0:n.weight/-Math.log(c(e,t,n.key))}function u(e,t,n){let r=null,i=0;for(let a of n){let n=l(e,t,a);n<=0||(n>i||n===i&&r!==null&&a.key<r.key)&&(i=n,r=a)}return r}function d(e,t){if(Array.isArray(t.conditions))for(let n of t.conditions)e.registerCondition(n)}function f(e,t){e.registerExperience({id:t.id,key:t.key,name:t.name,targets:t.targets,nodes:t.nodes,edges:t.edges,condition:t.condition,initializeOpen:t.initializeOpen,componentName:t.componentName})}function p(e){return typeof e!=`object`||!e?!1:`id`in e&&`key`in e&&`type`in e&&`name`in e}function m(e,t){if(Array.isArray(t.fields))for(let n of t.fields)p(n)&&e.registerField(n)}function h(e,t){if(!Array.isArray(t.steps))return;let n=new Map(t.fields.map(e=>[e.id,e.key]));for(let r of t.steps){let t=[];for(let e of r.fieldIds??[]){let i=n.get(e);if(i===void 0){`${r.key}${e}`;continue}t.push(i)}let i=r.layoutContentId?e.contents.getById(r.layoutContentId):null;e.registerStep({id:r.id,key:r.key,name:r.name,fieldKeys:t,layoutName:r.layoutName,...r.layoutContentId!==void 0&&{layoutContentId:r.layoutContentId,layoutContentStore:i}})}}function g(e,t){if(Array.isArray(t.experiences))for(let n of t.experiences)f(e,n)}function _(e,t,n){E(e,t,n.isPreview,n.sessionId),d(e,t),m(e,t),h(e,t),b(e,t),g(e,t)}var v=25e3,y=3e4;function b(e,t){if(!Array.isArray(t.actions))return;let n=new Map(t.fields.map(e=>[e.id,e.key])),r=new Set(t.actions.map(e=>e.key)),i=new Set;for(let t of e.actions.listStore.getState())t.published?r.has(t.key)||e.actions.unregister(t.key):i.add(t.key);for(let r of t.actions){if(i.has(r.key)){`${r.key}`;continue}let a=[];for(let e of r.fieldIds??[]){let t=n.get(e);if(t===void 0){`${r.key}${e}`;continue}a.push(t)}let o={key:r.key,fieldKeys:a,versionId:t.versionId};e.actions.register({key:r.key,action:async t=>x(e,o,t),published:!0})}}async function x(e,t,r){let i=Date.now()+y,a={};for(let e of t.fieldKeys){let t=r.responses.find(t=>t.fieldKey===e);t?.value!==void 0&&(a[e]=t.value)}let o=e.session.store.getState().id,s=S(e),c=r.signal,l=await(0,n.runAction)(e.apiUrl,{key:t.key,projectId:e.projectId,session:{id:o},responses:a,versionId:t.versionId},{timeoutMs:Math.min(v,i-Date.now()),...c?{signal:c}:{},...s===void 0?{}:{previewToken:s}});if(l.status===`succeeded`)return l.response;if(l.status===`no_response`)return;if(l.workflowRunId===null)throw Error(`Action '${t.key}' is pending with no run to wait on`);let u=await(0,n.waitForActionResponse)(e.apiUrl,{workflowRunId:l.workflowRunId,projectId:e.projectId,sessionId:o},{timeoutMs:Math.max(1,i-Date.now()),...c?{signal:c}:{}});return u.status===`succeeded`?u.response:void 0}function S(t){let n=t.searchParams[e.n];if(n&&n.length>0)return n[0]}function C(t,n){return t.getProjectConfig(n===void 0?void 0:{previewToken:n}).catch(t=>t instanceof e.t?t:null)}async function w(t){let n=S(t),r=await C(t,n);if(!(r instanceof e.t))return{config:r,previewToken:n};e.i(t.searchParams,e.n),t.previewUnavailable=!0,`${r.message}`;let i=await C(t,void 0);return{config:i instanceof e.t?null:i,previewToken:void 0}}function T(t){let n=new Map,r=t.searchParams.feature;if(!r)return n;for(let t of r){let r=e.c(t);r&&n.set(r.id,r.bucket)}return n}function E(e,t,n,r){let i=T(e);for(let a of t.features){let t=i.get(a.id);if(t!==void 0){D(e,a,t);continue}O(e,a,n,r)}}function D(e,t,n){e.registerFeature(t.id,{key:`${n}`,name:t.name,enabled:!0,weight:t.weight,...t.valueType!==void 0&&{valueType:t.valueType},...t.variants!==void 0&&{variants:t.variants},storage:`session`,decide:()=>n})}function O(e,t,n,r){let i=t.id,s=t.variants;e.registerFeature(i,{key:`v${t.version}`,name:t.name,enabled:t.enabled,weight:t.weight,storage:n?`session`:`local`,valueType:t.valueType,variants:s,decide:()=>t.valueType===`text`?!s||s.length===0?(`${i}`,!1):u(r,i,s)?.value??!1:o(a(r,i),t.weight)})}function k(e,t){for(let n of[...t.references??[],...t.content])e.registerContent({id:n.id,contentModelKey:n.contentModelKey,data:n.data})}function A(e,t){let n=new Map;return(r,i)=>{let a=n.get(r.id);if(a)return a;let o=(async()=>{try{let n=await t(r,i);return n&&k(e,n),n}finally{n.delete(r.id)}})();return n.set(r.id,o),o}}function j(e,t){let n=new Set(t&&Array.isArray(t.experiences)?t.experiences.map(e=>e.id):[]);return(t,r)=>n.has(t.id)?e(t,r):Promise.resolve(null)}function M(){return{name:`dynamic-experiences`,setup:e=>({onStart:(0,t.attach)({source:e.session.store.map(e=>e.id),effect:async t=>{let{config:n,previewToken:r}=await w(e),i=r!==void 0,a=r===void 0?void 0:{previewToken:r};if(e.contentLoader=A(e,j(t=>e.getExperienceContent(t,a),n)),!n)return;let o=e.seededVersionId;if(o!==null&&o!==n.versionId){e.versionSkew={seeded:o,resolved:n.versionId},`${n.versionId}${o}`;return}e.previewEmbedderOrigins=n.previewEmbedderOrigins??null,_(e,n,{isPreview:i,sessionId:t})}})})}}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return M}});
@@ -1,6 +1,6 @@
1
1
  import "./logger-DMN6TxJJ.js";
2
- import { c as e, i as t, n, t as r } from "./preview-unavailable-qVCLxakS.js";
3
- import "./api-BKy0J83d.js";
2
+ import { c as e, i as t, n, t as r } from "./preview-unavailable-D3dVa7V4.js";
3
+ import "./api-BL8eCYKD.js";
4
4
  import { attach as i } from "effector";
5
5
  import { runAction as a, waitForActionResponse as o } from "@picked/delivery-api-client";
6
6
  //#region src/plugins/dynamic-experiences/hash.ts
@@ -252,7 +252,7 @@ var S = (e, t, n) => {
252
252
  id: e,
253
253
  feature: t
254
254
  });
255
- }, C = () => "0.0.99-next.2";
255
+ }, C = () => "0.0.99";
256
256
  //#endregion
257
257
  //#region src/utils/search-params.ts
258
258
  function w() {
@@ -1 +1 @@
1
- const e=require("./logger-CSTvAyyB.cjs"),t=require("./supports-DBzjGaWD.cjs"),n=require("./storage-DUw9UJ2h.cjs");let r=require("effector"),i=require("@withease/factories");var a=(0,r.createDomain)(`feature`);function o(e){return e?.enabled===!1}function s(e){return e===`true`||e!==`false`&&e}function c(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.substring(0,t),r=e.substring(t+1);return r.length===0?null:{id:n,bucket:s(r)}}var l=(0,i.createFactory)(({client:t})=>{let i=a.store({}),c=a.store([]),l=(0,r.createApi)(i,{register(e,t){return{...e,[t.id]:t.feature}}}),u=(0,r.createEvent)();(0,r.sample)({clock:u,source:i,filter:(e,{id:t})=>e[t]!==void 0,fn:(e,{id:t})=>`Feature '${t}' already registered. Registering again will override the previous registration.`}).watch(t=>e.t(`warn`,t)),(0,r.sample)({clock:u,fn:({id:e,feature:t})=>Object.freeze({id:e,feature:{id:e,feature:{...t,id:e}}}),target:l.register});let d=(0,r.createEffect)(async({id:e,key:t,storage:r=`local`,enabled:i})=>{if(i===!1)return null;let a=n.t(`feature:${e}:${t}`,`global`),o=(r===`session`?n.r:n.n).get(a).text();return o?{id:e,key:t,bucket:s(o),storage:r}:null}),f=(0,r.createEffect)(e=>{if(!e)return null;let t=n.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?n.r:n.n).set(t,e.bucket)}),p=new Map,m=(0,r.attach)({source:{allFeaturesStore:i,resolvedFeaturesStore:c},effect:async({allFeaturesStore:e,resolvedFeaturesStore:t},{id:n,decide:r,key:i})=>{let a=t.find(e=>e.id===n&&e.key===i);if(a)return a;let s=e[n];if(!s)throw Error(`Feature with id '${n}' not found`);if(o(s.feature))return{id:s.id,bucket:!1,key:i,storage:s.feature.storage};let c=p.get(`${n}:${i}`);if(c!==void 0){let e=await c;return{id:s.id,bucket:e,key:i,storage:s.feature.storage}}let l=r();p.set(`${n}:${i}`,l);let u=await l;return{id:s.id,bucket:u,key:i,storage:s.feature.storage}}});(0,r.sample)({clock:l.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage,enabled:n.feature.enabled}},target:d}),(0,r.sample)({source:i,clock:m.doneData,filter:(e,t)=>!o(e[t.id]?.feature),fn:(e,t)=>{let{id:n,bucket:r,storage:i}=t,a=e[n]?.feature.key;return a?{key:a,id:n,bucket:r,storage:i}:null},target:f});let h=(0,r.combine)({allFeaturesStore:i,resolvedFeaturesStore:c}).map(({allFeaturesStore:e,resolvedFeaturesStore:t})=>Object.values(e).map(e=>{let n=t.find(t=>t.id===e.id&&t.key===e.feature.key);return n?{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,valueType:e.feature.valueType,variants:e.feature.variants,getBucket:()=>({id:e.id,bucket:n.bucket}),isResolved:!0}:{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,valueType:e.feature.valueType,variants:e.feature.variants,getBucket:async()=>await m(e.feature),isResolved:!1}}));(0,r.sample)({clock:m.doneData,source:{resolvedFeatures:c,allFeatures:i},filter:({resolvedFeatures:e,allFeatures:t},{id:n,key:r})=>!o(t[n]?.feature)&&!e.some(e=>e.id===n&&e.key===r),fn:(e,t)=>t,target:t.eventBus.prepend(e=>({type:`feature_decide`,feature:e}))}),(0,r.sample)({clock:[d.doneData,m.doneData],source:{resolvedFeatures:c,allFeatures:i},fn:({resolvedFeatures:e,allFeatures:t},n)=>!n||o(t[n.id]?.feature)||e.some(e=>e.id===n.id&&e.key===n.key)?e:[...e,n],target:c});function g(e){return h.map(t=>t.find(t=>t.id===e),{skipVoid:!1})}let _=new Map,v=new Map,y=new Map;function b(e){let t=_.get(e);if(t)return t;let n=g(e);return _.set(e,n),n}function x(e){return i.map(t=>t[e],{skipVoid:!1})}function S(e){let t=(0,r.createStore)(async()=>void 0,{skipVoid:!1}),n=b(e),i=(0,r.attach)({source:n,effect:async e=>{if(e)return async()=>(await e.getBucket()).bucket}});return(0,r.sample)({clock:n,target:i}),(0,r.sample)({clock:i.doneData,filter:e=>e!==void 0,target:t}),i(),t}function C(e){let t=v.get(e);if(t)return t;let n=S(e);return v.set(e,n),n}function w(e){let t=C(e),n=(0,r.createStore)(void 0,{skipVoid:!1}),i=(0,r.attach)({source:t,mapParams:(e,t)=>t,effect:(0,r.createEffect)(async e=>await e())});return(0,r.sample)({clock:i.doneData,fn:t=>{if(t!==void 0)return{id:e,bucket:t}},target:n}),(0,r.sample)({clock:t,target:i}),i(),n}function T(e){let t=y.get(e);if(t)return t;let n=w(e);return y.set(e,n),n}return{register:u,getById:b,getByName:x,listStore:h,getEvokableFeature:C,getFeatureResult:T}});function u(e){return(0,i.invoke)(l,e)}var d=(e,t,n)=>{n.register({id:e,feature:t})},f=()=>`0.0.99-next.2`;function p(){if(!t.f())return{};let e=new URLSearchParams(window.location.search),r={},i=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&i.add(t);for(let t of i){let n=t.replace(`picked-`,``);r[n]=e.getAll(t)}let a=n.t(`s`);if(i.size>0)n.r.set(a,r);else{let e=n.r.get(a);if(e)return e.json()||{}}return r}function m(e,r){if(delete e[r],!t.f())return;let i=n.t(`s`),a=n.r.get(i).json();if(!a)return;let o=Object.fromEntries(Object.entries(a).filter(([e])=>e!==r));if(Object.keys(o).length===0){n.r.remove(i);return}n.r.set(i,o)}var h=`preview-token`;function g(){return!t.f()||!t.t()?!1:!!p()[h]?.[0]}var _=class extends Error{constructor(e){super(`The preview workspace for project "${e}" no longer exists; its published configuration is still available.`),this.name=`PreviewUnavailableError`}};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return _}});
1
+ const e=require("./logger-CSTvAyyB.cjs"),t=require("./supports-DBzjGaWD.cjs"),n=require("./storage-DUw9UJ2h.cjs");let r=require("effector"),i=require("@withease/factories");var a=(0,r.createDomain)(`feature`);function o(e){return e?.enabled===!1}function s(e){return e===`true`||e!==`false`&&e}function c(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.substring(0,t),r=e.substring(t+1);return r.length===0?null:{id:n,bucket:s(r)}}var l=(0,i.createFactory)(({client:t})=>{let i=a.store({}),c=a.store([]),l=(0,r.createApi)(i,{register(e,t){return{...e,[t.id]:t.feature}}}),u=(0,r.createEvent)();(0,r.sample)({clock:u,source:i,filter:(e,{id:t})=>e[t]!==void 0,fn:(e,{id:t})=>`Feature '${t}' already registered. Registering again will override the previous registration.`}).watch(t=>e.t(`warn`,t)),(0,r.sample)({clock:u,fn:({id:e,feature:t})=>Object.freeze({id:e,feature:{id:e,feature:{...t,id:e}}}),target:l.register});let d=(0,r.createEffect)(async({id:e,key:t,storage:r=`local`,enabled:i})=>{if(i===!1)return null;let a=n.t(`feature:${e}:${t}`,`global`),o=(r===`session`?n.r:n.n).get(a).text();return o?{id:e,key:t,bucket:s(o),storage:r}:null}),f=(0,r.createEffect)(e=>{if(!e)return null;let t=n.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?n.r:n.n).set(t,e.bucket)}),p=new Map,m=(0,r.attach)({source:{allFeaturesStore:i,resolvedFeaturesStore:c},effect:async({allFeaturesStore:e,resolvedFeaturesStore:t},{id:n,decide:r,key:i})=>{let a=t.find(e=>e.id===n&&e.key===i);if(a)return a;let s=e[n];if(!s)throw Error(`Feature with id '${n}' not found`);if(o(s.feature))return{id:s.id,bucket:!1,key:i,storage:s.feature.storage};let c=p.get(`${n}:${i}`);if(c!==void 0){let e=await c;return{id:s.id,bucket:e,key:i,storage:s.feature.storage}}let l=r();p.set(`${n}:${i}`,l);let u=await l;return{id:s.id,bucket:u,key:i,storage:s.feature.storage}}});(0,r.sample)({clock:l.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage,enabled:n.feature.enabled}},target:d}),(0,r.sample)({source:i,clock:m.doneData,filter:(e,t)=>!o(e[t.id]?.feature),fn:(e,t)=>{let{id:n,bucket:r,storage:i}=t,a=e[n]?.feature.key;return a?{key:a,id:n,bucket:r,storage:i}:null},target:f});let h=(0,r.combine)({allFeaturesStore:i,resolvedFeaturesStore:c}).map(({allFeaturesStore:e,resolvedFeaturesStore:t})=>Object.values(e).map(e=>{let n=t.find(t=>t.id===e.id&&t.key===e.feature.key);return n?{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,valueType:e.feature.valueType,variants:e.feature.variants,getBucket:()=>({id:e.id,bucket:n.bucket}),isResolved:!0}:{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,valueType:e.feature.valueType,variants:e.feature.variants,getBucket:async()=>await m(e.feature),isResolved:!1}}));(0,r.sample)({clock:m.doneData,source:{resolvedFeatures:c,allFeatures:i},filter:({resolvedFeatures:e,allFeatures:t},{id:n,key:r})=>!o(t[n]?.feature)&&!e.some(e=>e.id===n&&e.key===r),fn:(e,t)=>t,target:t.eventBus.prepend(e=>({type:`feature_decide`,feature:e}))}),(0,r.sample)({clock:[d.doneData,m.doneData],source:{resolvedFeatures:c,allFeatures:i},fn:({resolvedFeatures:e,allFeatures:t},n)=>!n||o(t[n.id]?.feature)||e.some(e=>e.id===n.id&&e.key===n.key)?e:[...e,n],target:c});function g(e){return h.map(t=>t.find(t=>t.id===e),{skipVoid:!1})}let _=new Map,v=new Map,y=new Map;function b(e){let t=_.get(e);if(t)return t;let n=g(e);return _.set(e,n),n}function x(e){return i.map(t=>t[e],{skipVoid:!1})}function S(e){let t=(0,r.createStore)(async()=>void 0,{skipVoid:!1}),n=b(e),i=(0,r.attach)({source:n,effect:async e=>{if(e)return async()=>(await e.getBucket()).bucket}});return(0,r.sample)({clock:n,target:i}),(0,r.sample)({clock:i.doneData,filter:e=>e!==void 0,target:t}),i(),t}function C(e){let t=v.get(e);if(t)return t;let n=S(e);return v.set(e,n),n}function w(e){let t=C(e),n=(0,r.createStore)(void 0,{skipVoid:!1}),i=(0,r.attach)({source:t,mapParams:(e,t)=>t,effect:(0,r.createEffect)(async e=>await e())});return(0,r.sample)({clock:i.doneData,fn:t=>{if(t!==void 0)return{id:e,bucket:t}},target:n}),(0,r.sample)({clock:t,target:i}),i(),n}function T(e){let t=y.get(e);if(t)return t;let n=w(e);return y.set(e,n),n}return{register:u,getById:b,getByName:x,listStore:h,getEvokableFeature:C,getFeatureResult:T}});function u(e){return(0,i.invoke)(l,e)}var d=(e,t,n)=>{n.register({id:e,feature:t})},f=()=>`0.0.99`;function p(){if(!t.f())return{};let e=new URLSearchParams(window.location.search),r={},i=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&i.add(t);for(let t of i){let n=t.replace(`picked-`,``);r[n]=e.getAll(t)}let a=n.t(`s`);if(i.size>0)n.r.set(a,r);else{let e=n.r.get(a);if(e)return e.json()||{}}return r}function m(e,r){if(delete e[r],!t.f())return;let i=n.t(`s`),a=n.r.get(i).json();if(!a)return;let o=Object.fromEntries(Object.entries(a).filter(([e])=>e!==r));if(Object.keys(o).length===0){n.r.remove(i);return}n.r.set(i,o)}var h=`preview-token`;function g(){return!t.f()||!t.t()?!1:!!p()[h]?.[0]}var _=class extends Error{constructor(e){super(`The preview workspace for project "${e}" no longer exists; its published configuration is still available.`),this.name=`PreviewUnavailableError`}};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return _}});
@@ -1,5 +1,5 @@
1
1
  import "./logger-DMN6TxJJ.js";
2
- import { n as e, t } from "./api-BKy0J83d.js";
2
+ import { n as e, t } from "./api-BL8eCYKD.js";
3
3
  import { r as n, t as r } from "./registry-CXZv0uLg.js";
4
4
  //#region src/data-source/request-observer.ts
5
5
  function i(e, t) {
@@ -1 +1 @@
1
- require("./logger-CSTvAyyB.cjs");const e=require("./api-CLXVSK5i.cjs"),t=require("./registry-C1t8l3t9.cjs");function n(e,t){try{return e?.onRequest(t)??{}}catch{return{}}}function r(e,t,n){try{e.onSettled?.(t,n)}catch{}}async function i(e,t,i){let a=n(e?.(),t),o;try{let e=await i(a.headers,e=>{o=e});return r(a,e!==null,o),e}catch(e){throw r(a,!1,o),e}}var a=`bundle`,o=`api`;async function s(){try{let e=await import(`virtual:picked/data`);return t.r(e)?e:null}catch{return null}}function c(e){if(e===void 0||t.r(e))return e}function l(n){let{apiUrl:r,projectId:l,previewToken:u,signal:d,getRequestObserver:f}=n,p=!!u,m=p?o:n.mode,h=c(p?void 0:n.bundle),g=p?void 0:n.projectConfig,_=n.getContent,v={mode:m??o,manifest:null,previewUnavailable:!1},y,b,x=new Map;function S(){if(m===o)return Promise.resolve(null);if(h)return Promise.resolve(h);let e=t.t();return e?Promise.resolve(e):(y??=s(),y)}function C(e){v.mode=e?a:o,v.manifest=e?e.manifestMetadata:null}async function w(){if(g)return C(await S()),g;let t=await S();return C(t),t?t.projectConfig:m===a?null:i(f,`project-config`,(t,n)=>e.n(r,l,{...u!==void 0&&{previewToken:u},...d!==void 0&&{signal:d},...t!==void 0&&{headers:t},onResponse:e=>{v.previewUnavailable=p&&e===404,n?.(e)}}))}async function T(t,n){let o=u===void 0?void 0:{previewToken:u};if(_)return _(t,o);let s=await S();if(C(s),s)try{return await s.experienceContent(t,o)}catch{return`${t.id}`,null}if(m===a)return null;let c=n??d;return i(f,`experience-content`,(n,i)=>e.t(r,l,t.id,{...u!==void 0&&{previewToken:u},...c!==void 0&&{signal:c},...n!==void 0&&{headers:n},...i!==void 0&&{onResponse:i}}))}return{meta:v,getProjectConfig:()=>(b??=w(),b),getContent:(e,t)=>{let n=x.get(e.id);if(n)return n;let r=T(e,t?.signal).finally(()=>{x.delete(e.id)});return x.set(e.id,r),r}}}exports.createPickedDataProvider=l;
1
+ require("./logger-CSTvAyyB.cjs");const e=require("./api-BiOs35O-.cjs"),t=require("./registry-C1t8l3t9.cjs");function n(e,t){try{return e?.onRequest(t)??{}}catch{return{}}}function r(e,t,n){try{e.onSettled?.(t,n)}catch{}}async function i(e,t,i){let a=n(e?.(),t),o;try{let e=await i(a.headers,e=>{o=e});return r(a,e!==null,o),e}catch(e){throw r(a,!1,o),e}}var a=`bundle`,o=`api`;async function s(){try{let e=await import(`virtual:picked/data`);return t.r(e)?e:null}catch{return null}}function c(e){if(e===void 0||t.r(e))return e}function l(n){let{apiUrl:r,projectId:l,previewToken:u,signal:d,getRequestObserver:f}=n,p=!!u,m=p?o:n.mode,h=c(p?void 0:n.bundle),g=p?void 0:n.projectConfig,_=n.getContent,v={mode:m??o,manifest:null,previewUnavailable:!1},y,b,x=new Map;function S(){if(m===o)return Promise.resolve(null);if(h)return Promise.resolve(h);let e=t.t();return e?Promise.resolve(e):(y??=s(),y)}function C(e){v.mode=e?a:o,v.manifest=e?e.manifestMetadata:null}async function w(){if(g)return C(await S()),g;let t=await S();return C(t),t?t.projectConfig:m===a?null:i(f,`project-config`,(t,n)=>e.n(r,l,{...u!==void 0&&{previewToken:u},...d!==void 0&&{signal:d},...t!==void 0&&{headers:t},onResponse:e=>{v.previewUnavailable=p&&e===404,n?.(e)}}))}async function T(t,n){let o=u===void 0?void 0:{previewToken:u};if(_)return _(t,o);let s=await S();if(C(s),s)try{return await s.experienceContent(t,o)}catch{return`${t.id}`,null}if(m===a)return null;let c=n??d;return i(f,`experience-content`,(n,i)=>e.t(r,l,t.id,{...u!==void 0&&{previewToken:u},...c!==void 0&&{signal:c},...n!==void 0&&{headers:n},...i!==void 0&&{onResponse:i}}))}return{meta:v,getProjectConfig:()=>(b??=w(),b),getContent:(e,t)=>{let n=x.get(e.id);if(n)return n;let r=T(e,t?.signal).finally(()=>{x.delete(e.id)});return x.set(e.id,r),r}}}exports.createPickedDataProvider=l;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.99-next.2",
3
+ "version": "0.0.99",
4
4
  "dependencies": {
5
- "@picked/delivery-api-client": "0.0.99-next.2",
5
+ "@picked/delivery-api-client": "0.0.99",
6
6
  "@withease/factories": "^1.0.5",
7
- "@picked/telemetry": "0.0.99-next.2"
7
+ "@picked/telemetry": "0.0.99"
8
8
  },
9
9
  "devDependencies": {
10
10
  "@repo/eslint-config": "workspace:*",