@onlive.ai/flow-client 0.1.80 → 0.1.209
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/client.service.cjs +2 -2
- package/client/client.service.d.cts +28 -2
- package/client/client.service.d.ts +28 -2
- package/client/client.service.js +2 -2
- package/client/client.service.spec.cjs +2 -2
- package/client/client.service.spec.js +2 -2
- package/client/client.types.cjs +2 -2
- package/client/client.types.d.cts +4747 -1005
- package/client/client.types.d.ts +4747 -1005
- package/client/client.types.js +2 -2
- package/flow.types.cjs +2 -2
- package/flow.types.d.cts +21 -21
- package/flow.types.d.ts +21 -21
- package/flow.types.js +2 -2
- package/index.cjs +2 -2
- package/index.d.cts +2 -2
- package/index.d.ts +2 -2
- package/index.js +2 -2
- package/package.json +10 -10
- package/schema-generator.cjs +3 -3
- package/schema-generator.js +3 -3
- package/tracking/tracking.service.cjs +2 -2
- package/tracking/tracking.service.d.cts +24 -0
- package/tracking/tracking.service.d.ts +24 -0
- package/tracking/tracking.service.js +2 -2
- package/tracking/tracking.types.cjs +1 -1
- package/tracking/tracking.types.d.cts +648 -20
- package/tracking/tracking.types.d.ts +648 -20
- package/tracking/tracking.types.js +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/flow-client v0.1.
|
|
2
|
-
"use strict";var m=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var F=(i,o,e)=>o in i?m(i,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[o]=e;var U=(i,o)=>{for(var e in o)m(i,e,{get:o[e],enumerable:!0})},V=(i,o,e,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of R(o))!C.call(i,r)&&r!==e&&m(i,r,{get:()=>o[r],enumerable:!(n=z(o,r))||n.enumerable});return i};var G=i=>V(m({},"__esModule",{value:!0}),i);var l=(i,o,e)=>F(i,typeof o!="symbol"?o+"":o,e);var ot={};U(ot,{FlowClient:()=>v,default:()=>tt});module.exports=G(ot);var L=require("@onlive.ai/common-121/utils/merge.js");var s=require("@onlive.ai/tracker"),_=require("@onlive.ai/common-121/utils/merge.js"),E=require("@onlive.ai/common-121/utils/browser-preferences.js");var a=require("zod"),d="flow_form",j="onlive-analytics-event",u=a.z.object({enabled:a.z.boolean().default(!1).optional(),data:a.z.custom().optional(),removeExtraneousValues:a.z.boolean().default(!0).optional(),allowBotTraffic:a.z.boolean().default(!1).optional(),adapters:a.z.array(a.z.string()).default([]).optional(),apiUrl:a.z.string().url().optional(),emitters:a.z.object({windowEvent:a.z.boolean().optional(),dataLayer:a.z.boolean().optional(),windowPostMessage:a.z.boolean().optional()}).optional()});var x=class{constructor(o,e,n,r){l(this,"options");l(this,"tracker");l(this,"eventListeners",[]);this.options=u.parse(n),this.tracker=new s.Tracker({apiUrl:this.options.apiUrl,removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:r}),this.tracker.setBase((0,_.merge)({},{organization_id:o,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:s.Session.id,interaction_id:s.Session.interactionId,extra:{flow_id:e}},this.options.data)),window.addEventListener(j,({detail:c})=>this.emit(c.event,c.data))}getTracker(){return this.tracker}preferences(){return{...(0,E.browserPreferences)(),interactionId:s.Session.interactionId,guestId:s.Session.id}}analyzeRequest(o,e){"currentStepId"in o&&(o.actionId&&this.tracker.send("element_click",{element_label:o.actionId,element_type:"button",form_name:Object.keys(e.fields||{}).length?d:void 0,step_name:o.currentStepId}),e.fields&&this.tracker.send("form_submit",{form_name:d,form_data:e.fields,step_name:o.currentStepId}))}analyzeResponse(o,e){this.tracker.setBase({form_name:d,step_name:e.step.id,step_initial:!("currentStepId"in o)||void 0,step_final:e.step.isFinal,...e.step.result?.tracking}),"currentStepId"in o&&(e.step.result?.pipelines&&e.step.result.pipelines.forEach(n=>{this.tracker.send("task_success",{task_name:n.name,task_data:n.data})}),e.step.error&&this.tracker.send("form_error",{form_error:e.step.error.code})),this.tracker.send("impression",{impression_type:"step"})}send(o,e){this.tracker.send(o,e)}setData(o){this.tracker.setBase(o)}onEvent(o){this.eventListeners.push(o)}emit(o,e){this.eventListeners.forEach(n=>n({event:o,data:e}))}},I=x;var f=require("@onlive.ai/calendar"),t=require("zod");var k={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},w=t.z.string().nonempty(),S=t.z.object({baseUrl:t.z.string().url().nonempty(),flowId:t.z.string().length(24).nonempty(),organizationId:t.z.string().uuid().nonempty(),lang:t.z.string().length(2).nonempty(),tracking:u.optional(),devMode:t.z.boolean().default(!1).optional()}),h=t.z.object({state:t.z.record(t.z.string(),t.z.any()).optional(),fields:t.z.record(t.z.string(),t.z.any()).optional()}),A=t.z.object({currentStepId:t.z.string().nonempty(),actionId:t.z.string().nonempty()}),D=t.z.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),M=t.z.object({name:t.z.string(),value:t.z.string().optional(),icon:t.z.string().optional(),type:t.z.enum(["url","email","phone"]).optional()}),$=t.z.object({lat:t.z.number().min(-90).max(90),lng:t.z.number().min(-180).max(180),meta:t.z.record(t.z.string(),t.z.any()).optional(),properties:t.z.record(t.z.string(),M).optional()}),q=t.z.object({datetime:t.z.string().datetime(),meta:t.z.record(t.z.string(),t.z.any()).optional()}),y=t.z.union([t.z.string(),t.z.number(),t.z.boolean(),$,q]),b=t.z.object({content:t.z.object({icon:t.z.string().optional(),url:t.z.string().url().optional(),width:t.z.string().optional(),height:t.z.string().optional(),scale:t.z.number().optional()}).optional(),background:t.z.string().optional(),glyph:t.z.object({color:t.z.string().optional(),url:t.z.string().url().optional(),icon:t.z.string().optional()}).optional(),borderColor:t.z.string().optional(),scale:t.z.number().optional()}),g=t.z.custom(i=>/^\d{4}-\d{2}-\d{2}$/.test(i),{message:"Date must be in 'YYYY-MM-DD' format"}),p=t.z.object({text:t.z.string().optional(),icon:t.z.string().optional()}),O=t.z.object({fieldName:t.z.string().nonempty(),value:y.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),B=t.z.object({and:t.z.array(O).optional(),or:t.z.array(O).optional()}),N=t.z.array(t.z.union([O,B])),W=t.z.object({src:t.z.string().url(),preload:t.z.boolean().optional(),name:t.z.string().nonempty(),function:t.z.string().nonempty(),params:t.z.record(t.z.string(),t.z.any()).optional()}),Y=t.z.object({name:t.z.enum(["organization_call","close_panel","retry_first_step","retry_next_step"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),T=t.z.object({id:t.z.string().nonempty(),type:t.z.enum(["submit","navigate","link","back","dispatcher","script"]),label:t.z.string().nonempty(),variant:t.z.enum(["primary","secondary","success","danger","warning","info"]),position:t.z.enum(["top","bottom"]).optional(),url:t.z.string().url().optional(),loadingBehavior:t.z.enum(["none","spinner","disabled"]).optional(),prefix:p.optional(),suffix:p.optional(),scripts:W.array().optional(),events:Y.array().optional()}),K=t.z.object({message:t.z.string().optional(),icon:t.z.string().optional(),position:t.z.enum(["top","bottom"]).optional(),kind:t.z.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:t.z.array(T).optional()}),H=t.z.object({name:t.z.string().nonempty(),label:t.z.string().optional(),value:t.z.union([y,t.z.array(y)]).optional(),type:D,component:t.z.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar"]).optional(),disabled:t.z.boolean().optional(),readonly:t.z.boolean().optional(),multiple:t.z.boolean().optional(),placeholder:t.z.string().optional(),options:t.z.array(t.z.object({id:t.z.string().optional(),label:t.z.string().nonempty(),value:y.optional(),image:t.z.string().url().optional(),description:t.z.string().optional(),disabled:t.z.boolean().optional(),attributes:t.z.record(t.z.string(),t.z.any()).optional(),actions:t.z.array(T).optional(),dependsOn:N.optional()})).optional(),required:t.z.boolean().optional(),configuration:t.z.object({generic:t.z.object({error:t.z.object({loading:K.optional(),validation:t.z.object({icon:t.z.string().optional(),showOn:t.z.enum(["input","blur"]).optional()}).optional()})}).optional(),input:t.z.object({min:t.z.number().optional(),max:t.z.number().optional(),step:t.z.number().optional(),pattern:t.z.string().refine(i=>{try{return new RegExp(i),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:t.z.number().optional(),maxLength:t.z.number().optional(),exactLength:t.z.number().optional(),prefix:t.z.object({default:p.optional(),success:p.optional(),error:p.optional()}).optional(),suffix:t.z.object({default:p.optional(),success:p.optional(),error:p.optional()}).optional(),clearable:t.z.boolean().optional(),floatingLabel:t.z.boolean().optional()}).optional(),textarea:t.z.object({minLength:t.z.number().optional(),maxLength:t.z.number().optional(),exactLength:t.z.number().optional(),rows:t.z.number().optional()}).optional(),checkbox:t.z.object({layout:t.z.enum(["horizontal","vertical"])}).optional(),rating:t.z.object({icons:t.z.array(t.z.string()).optional(),color:t.z.string().optional(),precision:t.z.number().optional()}).optional(),carousel:t.z.object({loop:t.z.boolean().optional(),mouseDragging:t.z.boolean().optional(),itemsPerPage:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),itemsPerMove:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),showArrows:t.z.boolean().optional(),showDots:t.z.boolean().optional(),autoplay:t.z.boolean().optional(),autoplaySpeed:t.z.number().optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional()}).optional(),grid:t.z.object({search:t.z.object({enabled:t.z.boolean().optional(),value:t.z.string().optional(),button:t.z.object({label:t.z.string().optional()}).optional(),placeholder:t.z.string().optional(),noResultsText:t.z.string().optional(),clearable:t.z.boolean().optional()}).optional(),itemsPerRow:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),itemsPerPage:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional()}).optional(),map:t.z.object({apiKey:t.z.string().optional(),region:t.z.string().length(2).optional(),center:t.z.object({lat:t.z.number().min(-90).max(90),lng:t.z.number().min(-180).max(180)}).optional(),showMap:t.z.enum(["always","on-search","never"]).optional(),zoom:t.z.object({initial:t.z.number().optional(),focus:t.z.number().optional(),max:t.z.number().optional(),min:t.z.number().optional()}).optional(),controls:t.z.object({fullscreen:t.z.boolean().optional(),mapType:t.z.boolean().optional(),zoom:t.z.boolean().optional(),rotate:t.z.boolean().optional(),scale:t.z.boolean().optional(),streetView:t.z.boolean().optional()}).optional(),initialLocations:t.z.number().optional(),maxLocations:t.z.number().optional(),distanceUnit:t.z.enum(["km","mi"]).optional(),distanceFormat:t.z.enum(["short","long"]).optional(),options:t.z.object({show:t.z.enum(["always","on-search","never"]).optional(),component:t.z.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:t.z.string().optional(),detailsLabel:t.z.string().optional()}).optional(),search:t.z.object({enabled:t.z.boolean().optional(),value:t.z.string().optional(),button:t.z.object({label:t.z.string().optional(),position:t.z.enum(["inside","outside"]).optional()}).optional(),placeholder:t.z.string().optional(),noResultsText:t.z.string().optional(),autocomplete:t.z.boolean().optional(),clearable:t.z.boolean().optional(),mode:t.z.enum(["address","postcode"]).default("postcode").optional(),locationButton:t.z.object({icon:t.z.string().optional(),position:t.z.enum(["left","right"]).optional()}).optional(),prefix:t.z.object({default:p.optional()}).optional(),suffix:t.z.object({default:p.optional()}).optional()}).optional(),distanceRange:t.z.object({initial:t.z.number().optional(),min:t.z.number().optional(),max:t.z.number().optional(),step:t.z.number().optional()}).optional(),mapRegion:t.z.object({strokeColor:t.z.string().optional(),fillColor:t.z.string().optional(),fillOpacity:t.z.number().optional()}).optional(),locationPin:b.optional(),markerPin:t.z.object({default:b.optional(),hover:b.optional(),selected:b.optional()}).optional(),infoWindow:t.z.object({button:t.z.object({label:t.z.string(),action:t.z.string()}).optional()}).optional(),ordering:t.z.object({orderBy:t.z.enum(["distance","title","id"]).optional(),orderDir:t.z.enum(["asc","desc"]).optional(),preferences:t.z.array(t.z.object({ids:t.z.string().array(),filters:t.z.object({postcodes:t.z.string().array().optional()}).optional()}))}).optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional(),forcePolyfills:t.z.boolean().optional()}).optional(),calendar:t.z.object({current:t.z.object({month:t.z.number().min(0).max(11).optional(),year:t.z.number().optional()}).optional(),range:t.z.object({min:g.optional(),max:g.optional(),enabled:t.z.array(g).optional(),disabled:t.z.array(g).optional()}).optional(),time:t.z.object({label:t.z.string().optional(),format:t.z.enum(["12h","24h"]).optional(),component:t.z.enum(["carousel","list"]).optional()}).optional(),api:t.z.object({url:t.z.string().url().nonempty(),organizationId:t.z.string().nonempty(),availability:t.z.object({filters:f.GetAvailabilityFilters,options:f.GetAvailabilityOptions.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:N.optional(),dependentBehavior:t.z.enum(["hidden","disabled"]).optional(),customError:t.z.object({required:t.z.string().optional(),invalid:t.z.string().optional(),minLength:t.z.string().optional(),maxLength:t.z.string().optional(),minValue:t.z.string().optional(),maxValue:t.z.string().optional(),mismatch:t.z.string().optional()}).optional()}),J=t.z.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),Z=t.z.object({type:t.z.enum(["redirect"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),X=t.z.object({id:t.z.string().nonempty(),title:t.z.string().optional(),description:t.z.string().optional(),stageId:t.z.string().optional(),state:t.z.record(t.z.string(),t.z.any()).optional(),fields:t.z.array(H).optional(),actions:t.z.array(T).optional(),result:t.z.object({postActions:t.z.array(Z).optional(),pipelines:t.z.array(t.z.object({name:t.z.string(),data:t.z.object({})})).optional(),tracking:t.z.record(t.z.string(),t.z.any()).optional()}).optional(),error:t.z.object({code:J,message:t.z.string().optional(),icon:t.z.string().optional(),position:t.z.enum(["top","bottom"]).optional(),fields:t.z.array(t.z.object({name:t.z.string(),type:D,value:t.z.any(),error:t.z.string()})).optional()}).optional(),isFinal:t.z.boolean().optional()}),Q=t.z.object({id:t.z.string().length(24).nonempty(),organizationId:t.z.string().uuid().nonempty(),updatedAt:t.z.string().datetime().nonempty(),stages:t.z.array(t.z.object({id:t.z.string().nonempty(),name:t.z.string().nonempty()}))}),dt=t.z.object({status:t.z.enum(["ok","error"]),step:X,flow:Q}),ut=t.z.enum(["track"]);var P=require("@onlive.ai/common-121/utils/browser-preferences.js");var v=class{constructor(o){l(this,"baseURL");l(this,"headers");l(this,"flowId");l(this,"tracking");let e=(0,L.merge)({},k,S.parse(o));this.flowId=e.flowId,this.baseURL=e.baseUrl,this.headers=new Headers({"Content-Type":"application/json","X-Onlive-Organization-Id":e.organizationId,"X-Lang":e.lang}),e.tracking?.enabled&&(this.tracking=new I(e.organizationId,e.flowId,e.tracking,!!e.devMode))}async request(o,e={}){let n=await fetch(`${this.baseURL}/${o}`,{...e,headers:this.headers});if(!n?.ok)throw new Error(`HTTP error! status: ${n?.status||"unknown"}`);return n.json()}async firstStep(o={}){this.tracking?.analyzeRequest({},o);let e=this.tracking?this.tracking?.preferences():(0,P.browserPreferences)(),n=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(h.parse({...o,state:{preferences:e,...o.state}}))});return this.tracking?.analyzeResponse({},n),n}async getStep(o,e={}){this.tracking?.analyzeRequest({stepId:o},e);let n=this.tracking?.preferences(),r=await this.request(`flow/${this.flowId}/steps/${w.parse(o)}`,{method:"POST",body:JSON.stringify(h.parse({...e,state:{preferences:n,...e.state}}))});return this.tracking?.analyzeResponse({stepId:o},r),r}async nextStep(o,e={}){this.tracking?.analyzeRequest(o,e);let{currentStepId:n,actionId:r}=A.parse(o),c=await this.request(`flow/${this.flowId}/steps/${n}/action/${r}`,{method:"POST",body:JSON.stringify(h.parse(e))});return this.tracking?.analyzeResponse(o,c),c}},tt=v;0&&(module.exports={FlowClient});
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.209 | © 2026 Onlive.ai */
|
|
2
|
+
"use strict";var m=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var G=(a,o,e)=>o in a?m(a,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[o]=e;var U=(a,o)=>{for(var e in o)m(a,e,{get:o[e],enumerable:!0})},V=(a,o,e,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of C(o))!M.call(a,i)&&i!==e&&m(a,i,{get:()=>o[i],enumerable:!(n=F(o,i))||n.enumerable});return a};var q=a=>V(m({},"__esModule",{value:!0}),a);var p=(a,o,e)=>G(a,typeof o!="symbol"?o+"":o,e);var nt={};U(nt,{FlowClient:()=>v,default:()=>et});module.exports=q(nt);var P=require("@onlive.ai/common-121/utils/browser-preferences.js"),z=require("@onlive.ai/common-121/utils/merge.js");var O=require("@onlive.ai/common-121/utils/browser-preferences.js"),I=require("@onlive.ai/common-121/utils/merge.js"),c=require("@onlive.ai/tracker");var r=require("zod"),d="flow_form",k="onlive-analytics-event",u=r.z.object({enabled:r.z.boolean().default(!1).optional(),data:r.z.custom().optional(),removeExtraneousValues:r.z.boolean().default(!0).optional(),allowBotTraffic:r.z.boolean().default(!1).optional(),adapters:r.z.array(r.z.string()).default([]).optional(),apiUrl:r.z.string().url().optional(),emitters:r.z.object({windowEvent:r.z.boolean().optional(),dataLayer:r.z.boolean().optional(),windowPostMessage:r.z.boolean().optional()}).optional()});var T=class{constructor(o,e,n,i){p(this,"taskSuccessMappers",{create_i_event_registration:o=>({task_name:"ievent_registration",task_data:this.getRecord(o.fields)})});p(this,"options");p(this,"tracker");p(this,"eventListeners",[]);this.options=u.parse(n),this.tracker=new c.Tracker({apiUrl:this.options.apiUrl||"",removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:i}),this.tracker.setBase((0,I.merge)({},{organization_id:o,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:c.Session.id,interaction_id:c.Session.interactionId,extra:{flow_id:e}},this.options.data)),window.addEventListener(k,({detail:l})=>l?.event&&l?.data&&this.emit(l.event,l.data))}getTracker(){return this.tracker}preferences(){return{...(0,O.browserPreferences)(),interactionId:c.Session.interactionId,guestId:c.Session.id}}analyzeRequest(o,e){"currentStepId"in o&&(o.actionId&&this.tracker.send("element_click",{element_label:o.actionId,element_type:"button",form_name:Object.keys(e.fields||{}).length?d:void 0}),e.fields&&Object.keys(e.fields).length&&this.tracker.send("form_submit",{form_name:d,form_data:e.fields}))}analyzeResponse(o,e){this.tracker.setBase({form_name:d,step_name:e.step.id,step_number:e.step.number,step_initial:!("currentStepId"in o)||void 0,step_final:e.step.isFinal,...e.step.result?.tracking}),"currentStepId"in o&&(e.step.result?.pipelines&&e.step.result.pipelines.forEach(n=>{let i=this.mapTaskSuccessPipeline({name:n.name,data:this.getRecord(n.data)});this.tracker.send("task_success",{task_name:i.task_name,task_data:i.task_data})}),e.step.error&&this.tracker.send("form_error",{form_error:e.step.error.code})),this.tracker.send("impression",{impression_type:"step"})}send(o,e){this.tracker.send(o,e)}setData(o){this.tracker.setBase(o)}onEvent(o){this.eventListeners.push(o)}emit(o,e){this.eventListeners.forEach(n=>n({event:o,data:e}))}mapTaskSuccessPipeline(o){let e=this.taskSuccessMappers[o.name];return e?e(o.data):{task_name:o.name,task_data:o.data}}getRecord(o){return!o||typeof o!="object"||Array.isArray(o)?{}:o}},j=T;var f=require("@onlive.ai/calendar"),h=require("@onlive.ai/calendar/client/client.types.js"),t=require("zod");var S=(n=>(n.DARK="DARK",n.FOLLOW_SYSTEM="FOLLOW_SYSTEM",n.LIGHT="LIGHT",n))(S||{}),A={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},D=t.z.string().nonempty(),N=t.z.object({baseUrl:t.z.string().url().nonempty(),flowId:t.z.string().length(24).nonempty(),organizationId:t.z.string().uuid().nonempty(),lang:t.z.string().length(2).nonempty(),tracking:u.optional(),devMode:t.z.boolean().default(!1).optional()}),x=t.z.object({state:t.z.record(t.z.string(),t.z.any()).optional(),fields:t.z.record(t.z.string(),t.z.any()).optional()}),L=t.z.object({currentStepId:t.z.string().nonempty(),actionId:t.z.string().nonempty()}),R=t.z.enum(["text","boolean","number","first_name","last_name","name","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),$=t.z.object({name:t.z.string().optional(),value:t.z.string().optional(),icon:t.z.string().optional(),type:t.z.enum(["url","email","phone"]).optional()}),Y=t.z.object({lat:t.z.number().min(-90).max(90),lng:t.z.number().min(-180).max(180),meta:t.z.record(t.z.string(),t.z.any()).optional(),properties:t.z.record(t.z.string(),$).optional()}),B=t.z.object({datetime:t.z.string().datetime(),meta:t.z.record(t.z.string(),t.z.any()).optional()}),y=t.z.union([t.z.string(),t.z.number(),t.z.boolean(),Y,B]),g=t.z.object({content:t.z.object({icon:t.z.string().optional(),url:t.z.string().url().optional(),width:t.z.string().optional(),height:t.z.string().optional(),scale:t.z.number().optional()}).optional(),background:t.z.string().optional(),glyph:t.z.object({color:t.z.string().optional(),url:t.z.string().url().optional(),icon:t.z.string().optional()}).optional(),borderColor:t.z.string().optional(),scale:t.z.number().optional()}),b=t.z.custom(a=>typeof a=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(a),{message:"Date must be in 'YYYY-MM-DD' format"}),s=t.z.object({text:t.z.string().optional(),icon:t.z.string().optional()}),_=t.z.object({fieldName:t.z.string().nonempty(),value:y.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),W=t.z.object({and:t.z.array(_).optional(),or:t.z.array(_).optional()}),w=t.z.array(t.z.union([_,W])),K=t.z.object({src:t.z.string().url(),preload:t.z.boolean().optional(),name:t.z.string().nonempty(),function:t.z.string().nonempty(),params:t.z.array(t.z.record(t.z.string(),t.z.any())).optional()}),H=t.z.object({name:t.z.enum(["organization_call","close_panel","retry_first_step","retry_next_step","organization_chat"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),E=t.z.object({id:t.z.string().nonempty(),type:t.z.enum(["submit","navigate","link","back","dispatcher","script"]),label:t.z.string().nonempty(),variant:t.z.enum(["primary","secondary","success","danger","warning","info"]),position:t.z.enum(["top","bottom"]).optional(),url:t.z.string().url().optional(),target:t.z.enum(["_self","_blank","_parent","_top"]).optional(),loadingBehavior:t.z.enum(["none","spinner","disabled"]).optional(),prefix:s.optional(),suffix:s.optional(),scripts:K.array().optional(),events:H.array().optional()}),J=t.z.object({message:t.z.string().optional(),icon:t.z.string().optional(),position:t.z.enum(["top","bottom"]).optional(),kind:t.z.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:t.z.array(E).optional()}),Z=t.z.object({name:t.z.string().nonempty(),label:t.z.string().optional(),value:t.z.union([y,t.z.array(y)]).optional(),type:R,component:t.z.enum(["input","phone_input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar","stripe_payment"]).optional(),disabled:t.z.boolean().optional(),readonly:t.z.boolean().optional(),multiple:t.z.boolean().optional(),placeholder:t.z.string().optional(),options:t.z.array(t.z.object({id:t.z.string().optional(),label:t.z.string().nonempty(),value:y.optional(),image:t.z.string().url().optional(),description:t.z.string().optional(),disabled:t.z.boolean().optional(),attributes:t.z.record(t.z.string(),t.z.any()).optional(),actions:t.z.array(E).optional(),dependsOn:w.optional()})).optional(),required:t.z.boolean().optional(),configuration:t.z.object({generic:t.z.object({error:t.z.object({loading:J.optional(),validation:t.z.object({icon:t.z.string().optional(),showOn:t.z.enum(["input","blur"]).optional()}).optional()})}).optional(),input:t.z.object({min:t.z.number().optional(),max:t.z.number().optional(),step:t.z.number().optional(),pattern:t.z.string().refine(a=>{try{return new RegExp(a),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:t.z.number().optional(),maxLength:t.z.number().optional(),exactLength:t.z.number().optional(),prefix:t.z.object({default:s.optional(),success:s.optional(),error:s.optional()}).optional(),suffix:t.z.object({default:s.optional(),success:s.optional(),error:s.optional()}).optional(),clearable:t.z.boolean().optional(),floatingLabel:t.z.boolean().optional()}).optional(),phoneInput:t.z.object({includePrefixValue:t.z.boolean().optional(),showFlag:t.z.boolean().optional(),showCode:t.z.boolean().optional(),prefixLabel:t.z.string().optional(),lockedPrefix:t.z.boolean().optional(),countries:t.z.array(t.z.string()).optional(),defaultPrefix:t.z.string().optional(),autoDetectCountry:t.z.boolean().optional()}).optional(),textarea:t.z.object({minLength:t.z.number().optional(),maxLength:t.z.number().optional(),exactLength:t.z.number().optional(),rows:t.z.number().optional()}).optional(),checkbox:t.z.object({layout:t.z.enum(["horizontal","vertical"])}).optional(),rating:t.z.object({icons:t.z.array(t.z.string()).optional(),color:t.z.string().optional(),precision:t.z.number().optional()}).optional(),carousel:t.z.object({loop:t.z.boolean().optional(),mouseDragging:t.z.boolean().optional(),itemsPerPage:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),itemsPerMove:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),showArrows:t.z.boolean().optional(),showDots:t.z.boolean().optional(),autoplay:t.z.boolean().optional(),autoplaySpeed:t.z.number().optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional()}).optional(),grid:t.z.object({search:t.z.object({enabled:t.z.boolean().optional(),value:t.z.string().optional(),button:t.z.object({label:t.z.string().optional()}).optional(),placeholder:t.z.string().optional(),noResultsText:t.z.string().optional(),clearable:t.z.boolean().optional()}).optional(),itemsPerRow:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),itemsPerPage:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional()}).optional(),map:t.z.object({apiKey:t.z.string().optional(),mapId:t.z.string().optional(),region:t.z.string().length(2).optional(),colorScheme:t.z.nativeEnum(S).optional(),center:t.z.object({lat:t.z.number().min(-90).max(90),lng:t.z.number().min(-180).max(180)}).optional(),showMap:t.z.enum(["always","on-search","never"]).optional(),zoom:t.z.object({initial:t.z.number().optional(),focus:t.z.number().optional(),max:t.z.number().optional(),min:t.z.number().optional()}).optional(),controls:t.z.object({fullscreen:t.z.boolean().optional(),mapType:t.z.boolean().optional(),zoom:t.z.boolean().optional(),rotate:t.z.boolean().optional(),scale:t.z.boolean().optional(),streetView:t.z.boolean().optional()}).optional(),initialLocations:t.z.number().optional(),maxLocations:t.z.number().optional(),distanceUnit:t.z.enum(["km","mi"]).optional(),distanceFormat:t.z.enum(["short","long"]).optional(),distanceDecimals:t.z.number().optional(),options:t.z.object({show:t.z.enum(["always","on-search","never"]).optional(),component:t.z.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:t.z.string().optional(),detailsLabel:t.z.string().optional()}).optional(),search:t.z.object({enabled:t.z.boolean().optional(),value:t.z.string().optional(),button:t.z.object({label:t.z.string().optional(),position:t.z.enum(["inside","outside"]).optional()}).optional(),placeholder:t.z.string().optional(),noResultsText:t.z.string().optional(),autocomplete:t.z.boolean().optional(),clearable:t.z.boolean().optional(),mode:t.z.enum(["address","postcode"]).default("postcode").optional(),locationButton:t.z.object({icon:t.z.string().optional(),position:t.z.enum(["left","right"]).optional()}).optional(),prefix:t.z.object({default:s.optional()}).optional(),suffix:t.z.object({default:s.optional()}).optional()}).optional(),distanceRange:t.z.object({initial:t.z.number().optional(),min:t.z.number().optional(),max:t.z.number().optional(),step:t.z.number().optional()}).optional(),mapRegion:t.z.object({strokeColor:t.z.string().optional(),fillColor:t.z.string().optional(),fillOpacity:t.z.number().optional()}).optional(),locationPin:g.optional(),markerPin:t.z.object({default:g.optional(),hover:g.optional(),selected:g.optional()}).optional(),infoWindow:t.z.object({button:t.z.object({label:t.z.string(),action:t.z.string()}).optional()}).optional(),ordering:t.z.object({orderBy:t.z.enum(["distance","title","id"]).optional(),orderDir:t.z.enum(["asc","desc"]).optional(),preferences:t.z.array(t.z.object({ids:t.z.string().array(),filters:t.z.object({postcodes:t.z.string().array().optional()}).optional()}))}).optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional(),forcePolyfills:t.z.boolean().optional()}).optional(),calendar:t.z.object({current:t.z.object({month:t.z.number().min(0).max(11).optional(),year:t.z.number().optional()}).optional(),range:t.z.object({min:b.optional(),max:b.optional(),enabled:t.z.array(b).optional(),disabled:t.z.array(b).optional()}).optional(),time:t.z.object({label:t.z.string().optional(),format:t.z.enum(["12h","24h"]).optional(),component:t.z.enum(["carousel","list"]).optional()}).optional(),api:t.z.object({version:t.z.string().optional(),url:t.z.string().url().nonempty(),organizationId:t.z.string().nonempty(),availability:t.z.object({filters:f.GetAvailabilityFilters,options:f.GetAvailabilityOptions.optional()}).optional(),slots:t.z.object({filters:h.GetSlotFilters,options:h.GetSlotOptions.optional()}).optional()}).optional()}).optional(),stripe:t.z.object({publishableKey:t.z.string().nonempty(),mode:t.z.enum(["payment","setup"]).default("payment").optional(),createPaymentIntentEndpoint:t.z.string().url().optional(),createSetupIntentEndpoint:t.z.string().url().optional(),clientSecret:t.z.string().optional(),paymentIntentId:t.z.string().optional(),setupIntentId:t.z.string().optional(),amount:t.z.number().optional(),currency:t.z.string().default("usd").optional(),connectedAccountId:t.z.string().optional(),returnUrl:t.z.string().url().optional(),headers:t.z.record(t.z.string(),t.z.string()).optional(),paymentIntentParams:t.z.record(t.z.string(),t.z.unknown()).optional(),appearance:t.z.object({theme:t.z.enum(["stripe","night","flat"]).optional(),variables:t.z.record(t.z.string(),t.z.string()).optional(),rules:t.z.record(t.z.string(),t.z.record(t.z.string(),t.z.string())).optional()}).optional(),layout:t.z.enum(["tabs","accordion","auto"]).optional(),elementOptions:t.z.record(t.z.string(),t.z.unknown()).optional(),terms:t.z.object({card:t.z.enum(["auto","always","never"]).optional()}).optional(),customTermsText:t.z.string().optional(),openDialogButtonText:t.z.string().optional(),confirmButtonText:t.z.string().optional(),cancelButtonText:t.z.string().optional(),authorizedText:t.z.string().optional(),successMessage:t.z.string().optional(),setupSuccessMessage:t.z.string().optional(),infoText:t.z.string().optional(),amountLabel:t.z.string().optional(),loadingElementText:t.z.string().optional(),showAmount:t.z.boolean().optional(),dialogTitle:t.z.string().optional(),autoOpenDialog:t.z.boolean().optional(),actionId:t.z.string().optional()}).optional()}).optional(),dependsOn:w.optional(),dependentBehavior:t.z.enum(["hidden","disabled"]).optional(),customError:t.z.object({required:t.z.string().optional(),invalid:t.z.string().optional(),minLength:t.z.string().optional(),maxLength:t.z.string().optional(),minValue:t.z.string().optional(),maxValue:t.z.string().optional(),mismatch:t.z.string().optional()}).optional()}),X=t.z.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),Q=t.z.object({type:t.z.enum(["redirect"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),tt=t.z.object({id:t.z.string().nonempty(),number:t.z.number().optional(),title:t.z.string().optional(),description:t.z.string().optional(),stageId:t.z.string().optional(),state:t.z.record(t.z.string(),t.z.any()).optional(),fields:t.z.array(Z).optional(),actions:t.z.array(E).optional(),result:t.z.object({postActions:t.z.array(Q).optional(),pipelines:t.z.array(t.z.object({name:t.z.string(),data:t.z.object({})})).optional(),tracking:t.z.record(t.z.string(),t.z.any()).optional()}).optional(),error:t.z.object({code:X,message:t.z.string().optional(),icon:t.z.string().optional(),position:t.z.enum(["top","bottom"]).optional(),fields:t.z.array(t.z.object({name:t.z.string(),type:R,value:t.z.any(),error:t.z.string()})).optional()}).optional(),isFinal:t.z.boolean().optional()}),ot=t.z.object({id:t.z.string().length(24).nonempty(),organizationId:t.z.string().uuid().nonempty(),updatedAt:t.z.string().datetime().nonempty(),stages:t.z.array(t.z.object({id:t.z.string().nonempty(),name:t.z.string().nonempty()}))}),ct=t.z.object({status:t.z.enum(["ok","error"]),step:tt,flow:ot}),mt=t.z.enum(["track"]);var v=class{constructor(o){p(this,"baseURL");p(this,"headers");p(this,"flowId");p(this,"tracking");p(this,"IMMEDIATE_RETRIES",2);p(this,"RETRY_DELAY_MS",3e3);let e=(0,z.merge)({},A,N.parse(o));this.flowId=e.flowId,this.baseURL=e.baseUrl,this.headers=new Headers({"Content-Type":"application/json","X-Onlive-Organization-Id":e.organizationId,"X-Lang":e.lang}),e.tracking?.enabled&&(this.tracking=new j(e.organizationId,e.flowId,e.tracking,!!e.devMode))}delay(o){return new Promise(e=>setTimeout(e,o))}async request(o,e={}){let n=null;for(let i=0;i<=this.IMMEDIATE_RETRIES;i++)try{return await this.executeRequest(o,e)}catch(l){n=l instanceof Error?l:new Error(String(l))}try{return await this.delay(this.RETRY_DELAY_MS),await this.executeRequest(o,e)}catch(i){throw n??(i instanceof Error?i:new Error(String(i)))}}async executeRequest(o,e){let n=await fetch(`${this.baseURL}/${o}`,{...e,headers:this.headers});if(!n?.ok)throw new Error(`HTTP error! status: ${n?.status||"unknown"}`);return n.json()}async firstStep(o={}){this.tracking?.analyzeRequest({},o);let e=this.tracking?this.tracking?.preferences():(0,P.browserPreferences)(),n=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(x.parse({...o,state:{preferences:e,...o.state}}))});return this.tracking?.analyzeResponse({},n),n}async getStep(o,e={}){this.tracking?.analyzeRequest({stepId:o},e);let n=this.tracking?.preferences(),i=await this.request(`flow/${this.flowId}/steps/${D.parse(o)}`,{method:"POST",body:JSON.stringify(x.parse({...e,state:{preferences:n,...e.state}}))});return this.tracking?.analyzeResponse({stepId:o},i),i}async nextStep(o,e={}){this.tracking?.analyzeRequest(o,e);let{currentStepId:n,actionId:i}=L.parse(o),l=await this.request(`flow/${this.flowId}/steps/${n}/action/${i}`,{method:"POST",body:JSON.stringify(x.parse(e))});return this.tracking?.analyzeResponse(o,l),l}},et=v;0&&(module.exports={FlowClient});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import '@onlive.ai/tracker';
|
|
2
|
-
import TrackingService from '../tracking/tracking.service.cjs';
|
|
2
|
+
import { TrackingService } from '../tracking/tracking.service.cjs';
|
|
3
3
|
import { ClientOptions, GetStepOptions, FlowContext, GetStepTrigger } from './client.types.cjs';
|
|
4
4
|
import '../tracking/tracking.types.cjs';
|
|
5
5
|
import 'zod';
|
|
@@ -31,16 +31,42 @@ declare class FlowClient {
|
|
|
31
31
|
* @param _options - Configuration options for the client
|
|
32
32
|
*/
|
|
33
33
|
constructor(_options: ClientOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Maximum number of immediate retry attempts before applying a delay.
|
|
36
|
+
*/
|
|
37
|
+
private readonly IMMEDIATE_RETRIES;
|
|
38
|
+
/**
|
|
39
|
+
* Delay in milliseconds before the final retry attempt.
|
|
40
|
+
*/
|
|
41
|
+
private readonly RETRY_DELAY_MS;
|
|
42
|
+
/**
|
|
43
|
+
* Delays execution for a specified number of milliseconds.
|
|
44
|
+
*
|
|
45
|
+
* @param {number} ms - The number of milliseconds to delay.
|
|
46
|
+
* @returns {Promise<void>} A promise that resolves after the specified delay.
|
|
47
|
+
*/
|
|
48
|
+
private delay;
|
|
34
49
|
/**
|
|
35
50
|
* Sends an HTTP request to the specified path and returns the response as a JSON object.
|
|
51
|
+
* Implements a retry mechanism: up to 2 immediate retries, then 1 retry after 3 seconds.
|
|
36
52
|
*
|
|
37
53
|
* @template T - The expected response type.
|
|
38
54
|
* @param {string} path - The path to which the request is sent.
|
|
39
55
|
* @param {RequestInit} [options={}] - Optional configuration for the request.
|
|
40
56
|
* @returns {Promise<T>} - A promise that resolves to the response data.
|
|
41
|
-
* @throws {Error} - Throws an error if
|
|
57
|
+
* @throws {Error} - Throws an error if all retry attempts fail.
|
|
42
58
|
*/
|
|
43
59
|
private request;
|
|
60
|
+
/**
|
|
61
|
+
* Executes a single HTTP request to the specified path.
|
|
62
|
+
*
|
|
63
|
+
* @template T - The expected response type.
|
|
64
|
+
* @param {string} path - The path to which the request is sent.
|
|
65
|
+
* @param {RequestInit} options - Configuration for the request.
|
|
66
|
+
* @returns {Promise<T>} - A promise that resolves to the response data.
|
|
67
|
+
* @throws {Error} - Throws an error if the response status is not ok.
|
|
68
|
+
*/
|
|
69
|
+
private executeRequest;
|
|
44
70
|
/**
|
|
45
71
|
* Initiates the first step of the flow process.
|
|
46
72
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import '@onlive.ai/tracker';
|
|
2
|
-
import TrackingService from '../tracking/tracking.service.js';
|
|
2
|
+
import { TrackingService } from '../tracking/tracking.service.js';
|
|
3
3
|
import { ClientOptions, GetStepOptions, FlowContext, GetStepTrigger } from './client.types.js';
|
|
4
4
|
import '../tracking/tracking.types.js';
|
|
5
5
|
import 'zod';
|
|
@@ -31,16 +31,42 @@ declare class FlowClient {
|
|
|
31
31
|
* @param _options - Configuration options for the client
|
|
32
32
|
*/
|
|
33
33
|
constructor(_options: ClientOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Maximum number of immediate retry attempts before applying a delay.
|
|
36
|
+
*/
|
|
37
|
+
private readonly IMMEDIATE_RETRIES;
|
|
38
|
+
/**
|
|
39
|
+
* Delay in milliseconds before the final retry attempt.
|
|
40
|
+
*/
|
|
41
|
+
private readonly RETRY_DELAY_MS;
|
|
42
|
+
/**
|
|
43
|
+
* Delays execution for a specified number of milliseconds.
|
|
44
|
+
*
|
|
45
|
+
* @param {number} ms - The number of milliseconds to delay.
|
|
46
|
+
* @returns {Promise<void>} A promise that resolves after the specified delay.
|
|
47
|
+
*/
|
|
48
|
+
private delay;
|
|
34
49
|
/**
|
|
35
50
|
* Sends an HTTP request to the specified path and returns the response as a JSON object.
|
|
51
|
+
* Implements a retry mechanism: up to 2 immediate retries, then 1 retry after 3 seconds.
|
|
36
52
|
*
|
|
37
53
|
* @template T - The expected response type.
|
|
38
54
|
* @param {string} path - The path to which the request is sent.
|
|
39
55
|
* @param {RequestInit} [options={}] - Optional configuration for the request.
|
|
40
56
|
* @returns {Promise<T>} - A promise that resolves to the response data.
|
|
41
|
-
* @throws {Error} - Throws an error if
|
|
57
|
+
* @throws {Error} - Throws an error if all retry attempts fail.
|
|
42
58
|
*/
|
|
43
59
|
private request;
|
|
60
|
+
/**
|
|
61
|
+
* Executes a single HTTP request to the specified path.
|
|
62
|
+
*
|
|
63
|
+
* @template T - The expected response type.
|
|
64
|
+
* @param {string} path - The path to which the request is sent.
|
|
65
|
+
* @param {RequestInit} options - Configuration for the request.
|
|
66
|
+
* @returns {Promise<T>} - A promise that resolves to the response data.
|
|
67
|
+
* @throws {Error} - Throws an error if the response status is not ok.
|
|
68
|
+
*/
|
|
69
|
+
private executeRequest;
|
|
44
70
|
/**
|
|
45
71
|
* Initiates the first step of the flow process.
|
|
46
72
|
*
|
package/client/client.service.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/flow-client v0.1.
|
|
2
|
-
var w=Object.defineProperty;var S=(a,e,o)=>e in a?w(a,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):a[e]=o;var p=(a,e,o)=>S(a,typeof e!="symbol"?e+"":e,o);import{merge as K}from"@onlive.ai/common-121/utils/merge.js";import{Session as d,Tracker as A}from"@onlive.ai/tracker";import{merge as D}from"@onlive.ai/common-121/utils/merge.js";import{browserPreferences as L}from"@onlive.ai/common-121/utils/browser-preferences.js";import{z as i}from"zod";var c="flow_form",O="onlive-analytics-event",m=i.object({enabled:i.boolean().default(!1).optional(),data:i.custom().optional(),removeExtraneousValues:i.boolean().default(!0).optional(),allowBotTraffic:i.boolean().default(!1).optional(),adapters:i.array(i.string()).default([]).optional(),apiUrl:i.string().url().optional(),emitters:i.object({windowEvent:i.boolean().optional(),dataLayer:i.boolean().optional(),windowPostMessage:i.boolean().optional()}).optional()});var f=class{constructor(e,o,n,l){p(this,"options");p(this,"tracker");p(this,"eventListeners",[]);this.options=m.parse(n),this.tracker=new A({apiUrl:this.options.apiUrl,removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:l}),this.tracker.setBase(D({},{organization_id:e,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:d.id,interaction_id:d.interactionId,extra:{flow_id:o}},this.options.data)),window.addEventListener(O,({detail:s})=>this.emit(s.event,s.data))}getTracker(){return this.tracker}preferences(){return{...L(),interactionId:d.interactionId,guestId:d.id}}analyzeRequest(e,o){"currentStepId"in e&&(e.actionId&&this.tracker.send("element_click",{element_label:e.actionId,element_type:"button",form_name:Object.keys(o.fields||{}).length?c:void 0,step_name:e.currentStepId}),o.fields&&this.tracker.send("form_submit",{form_name:c,form_data:o.fields,step_name:e.currentStepId}))}analyzeResponse(e,o){this.tracker.setBase({form_name:c,step_name:o.step.id,step_initial:!("currentStepId"in e)||void 0,step_final:o.step.isFinal,...o.step.result?.tracking}),"currentStepId"in e&&(o.step.result?.pipelines&&o.step.result.pipelines.forEach(n=>{this.tracker.send("task_success",{task_name:n.name,task_data:n.data})}),o.step.error&&this.tracker.send("form_error",{form_error:o.step.error.code})),this.tracker.send("impression",{impression_type:"step"})}send(e,o){this.tracker.send(e,o)}setData(e){this.tracker.setBase(e)}onEvent(e){this.eventListeners.push(e)}emit(e,o){this.eventListeners.forEach(n=>n({event:e,data:o}))}},T=f;import{GetAvailabilityFilters as P,GetAvailabilityOptions as z}from"@onlive.ai/calendar";import{z as t}from"zod";var _={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},E=t.string().nonempty(),I=t.object({baseUrl:t.string().url().nonempty(),flowId:t.string().length(24).nonempty(),organizationId:t.string().uuid().nonempty(),lang:t.string().length(2).nonempty(),tracking:m.optional(),devMode:t.boolean().default(!1).optional()}),y=t.object({state:t.record(t.string(),t.any()).optional(),fields:t.record(t.string(),t.any()).optional()}),N=t.object({currentStepId:t.string().nonempty(),actionId:t.string().nonempty()}),k=t.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),R=t.object({name:t.string(),value:t.string().optional(),icon:t.string().optional(),type:t.enum(["url","email","phone"]).optional()}),C=t.object({lat:t.number().min(-90).max(90),lng:t.number().min(-180).max(180),meta:t.record(t.string(),t.any()).optional(),properties:t.record(t.string(),R).optional()}),F=t.object({datetime:t.string().datetime(),meta:t.record(t.string(),t.any()).optional()}),g=t.union([t.string(),t.number(),t.boolean(),C,F]),u=t.object({content:t.object({icon:t.string().optional(),url:t.string().url().optional(),width:t.string().optional(),height:t.string().optional(),scale:t.number().optional()}).optional(),background:t.string().optional(),glyph:t.object({color:t.string().optional(),url:t.string().url().optional(),icon:t.string().optional()}).optional(),borderColor:t.string().optional(),scale:t.number().optional()}),b=t.custom(a=>/^\d{4}-\d{2}-\d{2}$/.test(a),{message:"Date must be in 'YYYY-MM-DD' format"}),r=t.object({text:t.string().optional(),icon:t.string().optional()}),h=t.object({fieldName:t.string().nonempty(),value:g.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),U=t.object({and:t.array(h).optional(),or:t.array(h).optional()}),j=t.array(t.union([h,U])),V=t.object({src:t.string().url(),preload:t.boolean().optional(),name:t.string().nonempty(),function:t.string().nonempty(),params:t.record(t.string(),t.any()).optional()}),G=t.object({name:t.enum(["organization_call","close_panel","retry_first_step","retry_next_step"]),params:t.record(t.string(),t.any()).optional()}),v=t.object({id:t.string().nonempty(),type:t.enum(["submit","navigate","link","back","dispatcher","script"]),label:t.string().nonempty(),variant:t.enum(["primary","secondary","success","danger","warning","info"]),position:t.enum(["top","bottom"]).optional(),url:t.string().url().optional(),loadingBehavior:t.enum(["none","spinner","disabled"]).optional(),prefix:r.optional(),suffix:r.optional(),scripts:V.array().optional(),events:G.array().optional()}),M=t.object({message:t.string().optional(),icon:t.string().optional(),position:t.enum(["top","bottom"]).optional(),kind:t.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:t.array(v).optional()}),$=t.object({name:t.string().nonempty(),label:t.string().optional(),value:t.union([g,t.array(g)]).optional(),type:k,component:t.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar"]).optional(),disabled:t.boolean().optional(),readonly:t.boolean().optional(),multiple:t.boolean().optional(),placeholder:t.string().optional(),options:t.array(t.object({id:t.string().optional(),label:t.string().nonempty(),value:g.optional(),image:t.string().url().optional(),description:t.string().optional(),disabled:t.boolean().optional(),attributes:t.record(t.string(),t.any()).optional(),actions:t.array(v).optional(),dependsOn:j.optional()})).optional(),required:t.boolean().optional(),configuration:t.object({generic:t.object({error:t.object({loading:M.optional(),validation:t.object({icon:t.string().optional(),showOn:t.enum(["input","blur"]).optional()}).optional()})}).optional(),input:t.object({min:t.number().optional(),max:t.number().optional(),step:t.number().optional(),pattern:t.string().refine(a=>{try{return new RegExp(a),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:t.number().optional(),maxLength:t.number().optional(),exactLength:t.number().optional(),prefix:t.object({default:r.optional(),success:r.optional(),error:r.optional()}).optional(),suffix:t.object({default:r.optional(),success:r.optional(),error:r.optional()}).optional(),clearable:t.boolean().optional(),floatingLabel:t.boolean().optional()}).optional(),textarea:t.object({minLength:t.number().optional(),maxLength:t.number().optional(),exactLength:t.number().optional(),rows:t.number().optional()}).optional(),checkbox:t.object({layout:t.enum(["horizontal","vertical"])}).optional(),rating:t.object({icons:t.array(t.string()).optional(),color:t.string().optional(),precision:t.number().optional()}).optional(),carousel:t.object({loop:t.boolean().optional(),mouseDragging:t.boolean().optional(),itemsPerPage:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),itemsPerMove:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),showArrows:t.boolean().optional(),showDots:t.boolean().optional(),autoplay:t.boolean().optional(),autoplaySpeed:t.number().optional(),clickableItems:t.object({actionId:t.string()}).optional()}).optional(),grid:t.object({search:t.object({enabled:t.boolean().optional(),value:t.string().optional(),button:t.object({label:t.string().optional()}).optional(),placeholder:t.string().optional(),noResultsText:t.string().optional(),clearable:t.boolean().optional()}).optional(),itemsPerRow:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),itemsPerPage:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),clickableItems:t.object({actionId:t.string()}).optional()}).optional(),map:t.object({apiKey:t.string().optional(),region:t.string().length(2).optional(),center:t.object({lat:t.number().min(-90).max(90),lng:t.number().min(-180).max(180)}).optional(),showMap:t.enum(["always","on-search","never"]).optional(),zoom:t.object({initial:t.number().optional(),focus:t.number().optional(),max:t.number().optional(),min:t.number().optional()}).optional(),controls:t.object({fullscreen:t.boolean().optional(),mapType:t.boolean().optional(),zoom:t.boolean().optional(),rotate:t.boolean().optional(),scale:t.boolean().optional(),streetView:t.boolean().optional()}).optional(),initialLocations:t.number().optional(),maxLocations:t.number().optional(),distanceUnit:t.enum(["km","mi"]).optional(),distanceFormat:t.enum(["short","long"]).optional(),options:t.object({show:t.enum(["always","on-search","never"]).optional(),component:t.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:t.string().optional(),detailsLabel:t.string().optional()}).optional(),search:t.object({enabled:t.boolean().optional(),value:t.string().optional(),button:t.object({label:t.string().optional(),position:t.enum(["inside","outside"]).optional()}).optional(),placeholder:t.string().optional(),noResultsText:t.string().optional(),autocomplete:t.boolean().optional(),clearable:t.boolean().optional(),mode:t.enum(["address","postcode"]).default("postcode").optional(),locationButton:t.object({icon:t.string().optional(),position:t.enum(["left","right"]).optional()}).optional(),prefix:t.object({default:r.optional()}).optional(),suffix:t.object({default:r.optional()}).optional()}).optional(),distanceRange:t.object({initial:t.number().optional(),min:t.number().optional(),max:t.number().optional(),step:t.number().optional()}).optional(),mapRegion:t.object({strokeColor:t.string().optional(),fillColor:t.string().optional(),fillOpacity:t.number().optional()}).optional(),locationPin:u.optional(),markerPin:t.object({default:u.optional(),hover:u.optional(),selected:u.optional()}).optional(),infoWindow:t.object({button:t.object({label:t.string(),action:t.string()}).optional()}).optional(),ordering:t.object({orderBy:t.enum(["distance","title","id"]).optional(),orderDir:t.enum(["asc","desc"]).optional(),preferences:t.array(t.object({ids:t.string().array(),filters:t.object({postcodes:t.string().array().optional()}).optional()}))}).optional(),clickableItems:t.object({actionId:t.string()}).optional(),forcePolyfills:t.boolean().optional()}).optional(),calendar:t.object({current:t.object({month:t.number().min(0).max(11).optional(),year:t.number().optional()}).optional(),range:t.object({min:b.optional(),max:b.optional(),enabled:t.array(b).optional(),disabled:t.array(b).optional()}).optional(),time:t.object({label:t.string().optional(),format:t.enum(["12h","24h"]).optional(),component:t.enum(["carousel","list"]).optional()}).optional(),api:t.object({url:t.string().url().nonempty(),organizationId:t.string().nonempty(),availability:t.object({filters:P,options:z.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:j.optional(),dependentBehavior:t.enum(["hidden","disabled"]).optional(),customError:t.object({required:t.string().optional(),invalid:t.string().optional(),minLength:t.string().optional(),maxLength:t.string().optional(),minValue:t.string().optional(),maxValue:t.string().optional(),mismatch:t.string().optional()}).optional()}),q=t.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),B=t.object({type:t.enum(["redirect"]),params:t.record(t.string(),t.any()).optional()}),W=t.object({id:t.string().nonempty(),title:t.string().optional(),description:t.string().optional(),stageId:t.string().optional(),state:t.record(t.string(),t.any()).optional(),fields:t.array($).optional(),actions:t.array(v).optional(),result:t.object({postActions:t.array(B).optional(),pipelines:t.array(t.object({name:t.string(),data:t.object({})})).optional(),tracking:t.record(t.string(),t.any()).optional()}).optional(),error:t.object({code:q,message:t.string().optional(),icon:t.string().optional(),position:t.enum(["top","bottom"]).optional(),fields:t.array(t.object({name:t.string(),type:k,value:t.any(),error:t.string()})).optional()}).optional(),isFinal:t.boolean().optional()}),Y=t.object({id:t.string().length(24).nonempty(),organizationId:t.string().uuid().nonempty(),updatedAt:t.string().datetime().nonempty(),stages:t.array(t.object({id:t.string().nonempty(),name:t.string().nonempty()}))}),dt=t.object({status:t.enum(["ok","error"]),step:W,flow:Y}),ut=t.enum(["track"]);import{browserPreferences as H}from"@onlive.ai/common-121/utils/browser-preferences.js";var x=class{constructor(e){p(this,"baseURL");p(this,"headers");p(this,"flowId");p(this,"tracking");let o=K({},_,I.parse(e));this.flowId=o.flowId,this.baseURL=o.baseUrl,this.headers=new Headers({"Content-Type":"application/json","X-Onlive-Organization-Id":o.organizationId,"X-Lang":o.lang}),o.tracking?.enabled&&(this.tracking=new T(o.organizationId,o.flowId,o.tracking,!!o.devMode))}async request(e,o={}){let n=await fetch(`${this.baseURL}/${e}`,{...o,headers:this.headers});if(!n?.ok)throw new Error(`HTTP error! status: ${n?.status||"unknown"}`);return n.json()}async firstStep(e={}){this.tracking?.analyzeRequest({},e);let o=this.tracking?this.tracking?.preferences():H(),n=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(y.parse({...e,state:{preferences:o,...e.state}}))});return this.tracking?.analyzeResponse({},n),n}async getStep(e,o={}){this.tracking?.analyzeRequest({stepId:e},o);let n=this.tracking?.preferences(),l=await this.request(`flow/${this.flowId}/steps/${E.parse(e)}`,{method:"POST",body:JSON.stringify(y.parse({...o,state:{preferences:n,...o.state}}))});return this.tracking?.analyzeResponse({stepId:e},l),l}async nextStep(e,o={}){this.tracking?.analyzeRequest(e,o);let{currentStepId:n,actionId:l}=N.parse(e),s=await this.request(`flow/${this.flowId}/steps/${n}/action/${l}`,{method:"POST",body:JSON.stringify(y.parse(o))});return this.tracking?.analyzeResponse(e,s),s}},xt=x;export{x as FlowClient,xt as default};
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.209 | © 2026 Onlive.ai */
|
|
2
|
+
var A=Object.defineProperty;var D=(a,o,e)=>o in a?A(a,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[o]=e;var r=(a,o,e)=>D(a,typeof o!="symbol"?o+"":o,e);import{browserPreferences as Z}from"@onlive.ai/common-121/utils/browser-preferences.js";import{merge as X}from"@onlive.ai/common-121/utils/merge.js";import{browserPreferences as N}from"@onlive.ai/common-121/utils/browser-preferences.js";import{merge as L}from"@onlive.ai/common-121/utils/merge.js";import{Session as d,Tracker as R}from"@onlive.ai/tracker";import{z as p}from"zod";var c="flow_form",T="onlive-analytics-event",m=p.object({enabled:p.boolean().default(!1).optional(),data:p.custom().optional(),removeExtraneousValues:p.boolean().default(!0).optional(),allowBotTraffic:p.boolean().default(!1).optional(),adapters:p.array(p.string()).default([]).optional(),apiUrl:p.string().url().optional(),emitters:p.object({windowEvent:p.boolean().optional(),dataLayer:p.boolean().optional(),windowPostMessage:p.boolean().optional()}).optional()});var f=class{constructor(o,e,n,i){r(this,"taskSuccessMappers",{create_i_event_registration:o=>({task_name:"ievent_registration",task_data:this.getRecord(o.fields)})});r(this,"options");r(this,"tracker");r(this,"eventListeners",[]);this.options=m.parse(n),this.tracker=new R({apiUrl:this.options.apiUrl||"",removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:i}),this.tracker.setBase(L({},{organization_id:o,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:d.id,interaction_id:d.interactionId,extra:{flow_id:e}},this.options.data)),window.addEventListener(T,({detail:l})=>l?.event&&l?.data&&this.emit(l.event,l.data))}getTracker(){return this.tracker}preferences(){return{...N(),interactionId:d.interactionId,guestId:d.id}}analyzeRequest(o,e){"currentStepId"in o&&(o.actionId&&this.tracker.send("element_click",{element_label:o.actionId,element_type:"button",form_name:Object.keys(e.fields||{}).length?c:void 0}),e.fields&&Object.keys(e.fields).length&&this.tracker.send("form_submit",{form_name:c,form_data:e.fields}))}analyzeResponse(o,e){this.tracker.setBase({form_name:c,step_name:e.step.id,step_number:e.step.number,step_initial:!("currentStepId"in o)||void 0,step_final:e.step.isFinal,...e.step.result?.tracking}),"currentStepId"in o&&(e.step.result?.pipelines&&e.step.result.pipelines.forEach(n=>{let i=this.mapTaskSuccessPipeline({name:n.name,data:this.getRecord(n.data)});this.tracker.send("task_success",{task_name:i.task_name,task_data:i.task_data})}),e.step.error&&this.tracker.send("form_error",{form_error:e.step.error.code})),this.tracker.send("impression",{impression_type:"step"})}send(o,e){this.tracker.send(o,e)}setData(o){this.tracker.setBase(o)}onEvent(o){this.eventListeners.push(o)}emit(o,e){this.eventListeners.forEach(n=>n({event:o,data:e}))}mapTaskSuccessPipeline(o){let e=this.taskSuccessMappers[o.name];return e?e(o.data):{task_name:o.name,task_data:o.data}}getRecord(o){return!o||typeof o!="object"||Array.isArray(o)?{}:o}},_=f;import{GetAvailabilityFilters as P,GetAvailabilityOptions as z}from"@onlive.ai/calendar";import{GetSlotFilters as F,GetSlotOptions as C}from"@onlive.ai/calendar/client/client.types.js";import{z as t}from"zod";var k=(n=>(n.DARK="DARK",n.FOLLOW_SYSTEM="FOLLOW_SYSTEM",n.LIGHT="LIGHT",n))(k||{}),O={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},I=t.string().nonempty(),j=t.object({baseUrl:t.string().url().nonempty(),flowId:t.string().length(24).nonempty(),organizationId:t.string().uuid().nonempty(),lang:t.string().length(2).nonempty(),tracking:m.optional(),devMode:t.boolean().default(!1).optional()}),y=t.object({state:t.record(t.string(),t.any()).optional(),fields:t.record(t.string(),t.any()).optional()}),w=t.object({currentStepId:t.string().nonempty(),actionId:t.string().nonempty()}),S=t.enum(["text","boolean","number","first_name","last_name","name","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),M=t.object({name:t.string().optional(),value:t.string().optional(),icon:t.string().optional(),type:t.enum(["url","email","phone"]).optional()}),G=t.object({lat:t.number().min(-90).max(90),lng:t.number().min(-180).max(180),meta:t.record(t.string(),t.any()).optional(),properties:t.record(t.string(),M).optional()}),U=t.object({datetime:t.string().datetime(),meta:t.record(t.string(),t.any()).optional()}),b=t.union([t.string(),t.number(),t.boolean(),G,U]),u=t.object({content:t.object({icon:t.string().optional(),url:t.string().url().optional(),width:t.string().optional(),height:t.string().optional(),scale:t.number().optional()}).optional(),background:t.string().optional(),glyph:t.object({color:t.string().optional(),url:t.string().url().optional(),icon:t.string().optional()}).optional(),borderColor:t.string().optional(),scale:t.number().optional()}),g=t.custom(a=>typeof a=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(a),{message:"Date must be in 'YYYY-MM-DD' format"}),s=t.object({text:t.string().optional(),icon:t.string().optional()}),h=t.object({fieldName:t.string().nonempty(),value:b.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),V=t.object({and:t.array(h).optional(),or:t.array(h).optional()}),E=t.array(t.union([h,V])),q=t.object({src:t.string().url(),preload:t.boolean().optional(),name:t.string().nonempty(),function:t.string().nonempty(),params:t.array(t.record(t.string(),t.any())).optional()}),$=t.object({name:t.enum(["organization_call","close_panel","retry_first_step","retry_next_step","organization_chat"]),params:t.record(t.string(),t.any()).optional()}),x=t.object({id:t.string().nonempty(),type:t.enum(["submit","navigate","link","back","dispatcher","script"]),label:t.string().nonempty(),variant:t.enum(["primary","secondary","success","danger","warning","info"]),position:t.enum(["top","bottom"]).optional(),url:t.string().url().optional(),target:t.enum(["_self","_blank","_parent","_top"]).optional(),loadingBehavior:t.enum(["none","spinner","disabled"]).optional(),prefix:s.optional(),suffix:s.optional(),scripts:q.array().optional(),events:$.array().optional()}),Y=t.object({message:t.string().optional(),icon:t.string().optional(),position:t.enum(["top","bottom"]).optional(),kind:t.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:t.array(x).optional()}),B=t.object({name:t.string().nonempty(),label:t.string().optional(),value:t.union([b,t.array(b)]).optional(),type:S,component:t.enum(["input","phone_input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar","stripe_payment"]).optional(),disabled:t.boolean().optional(),readonly:t.boolean().optional(),multiple:t.boolean().optional(),placeholder:t.string().optional(),options:t.array(t.object({id:t.string().optional(),label:t.string().nonempty(),value:b.optional(),image:t.string().url().optional(),description:t.string().optional(),disabled:t.boolean().optional(),attributes:t.record(t.string(),t.any()).optional(),actions:t.array(x).optional(),dependsOn:E.optional()})).optional(),required:t.boolean().optional(),configuration:t.object({generic:t.object({error:t.object({loading:Y.optional(),validation:t.object({icon:t.string().optional(),showOn:t.enum(["input","blur"]).optional()}).optional()})}).optional(),input:t.object({min:t.number().optional(),max:t.number().optional(),step:t.number().optional(),pattern:t.string().refine(a=>{try{return new RegExp(a),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:t.number().optional(),maxLength:t.number().optional(),exactLength:t.number().optional(),prefix:t.object({default:s.optional(),success:s.optional(),error:s.optional()}).optional(),suffix:t.object({default:s.optional(),success:s.optional(),error:s.optional()}).optional(),clearable:t.boolean().optional(),floatingLabel:t.boolean().optional()}).optional(),phoneInput:t.object({includePrefixValue:t.boolean().optional(),showFlag:t.boolean().optional(),showCode:t.boolean().optional(),prefixLabel:t.string().optional(),lockedPrefix:t.boolean().optional(),countries:t.array(t.string()).optional(),defaultPrefix:t.string().optional(),autoDetectCountry:t.boolean().optional()}).optional(),textarea:t.object({minLength:t.number().optional(),maxLength:t.number().optional(),exactLength:t.number().optional(),rows:t.number().optional()}).optional(),checkbox:t.object({layout:t.enum(["horizontal","vertical"])}).optional(),rating:t.object({icons:t.array(t.string()).optional(),color:t.string().optional(),precision:t.number().optional()}).optional(),carousel:t.object({loop:t.boolean().optional(),mouseDragging:t.boolean().optional(),itemsPerPage:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),itemsPerMove:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),showArrows:t.boolean().optional(),showDots:t.boolean().optional(),autoplay:t.boolean().optional(),autoplaySpeed:t.number().optional(),clickableItems:t.object({actionId:t.string()}).optional()}).optional(),grid:t.object({search:t.object({enabled:t.boolean().optional(),value:t.string().optional(),button:t.object({label:t.string().optional()}).optional(),placeholder:t.string().optional(),noResultsText:t.string().optional(),clearable:t.boolean().optional()}).optional(),itemsPerRow:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),itemsPerPage:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),clickableItems:t.object({actionId:t.string()}).optional()}).optional(),map:t.object({apiKey:t.string().optional(),mapId:t.string().optional(),region:t.string().length(2).optional(),colorScheme:t.nativeEnum(k).optional(),center:t.object({lat:t.number().min(-90).max(90),lng:t.number().min(-180).max(180)}).optional(),showMap:t.enum(["always","on-search","never"]).optional(),zoom:t.object({initial:t.number().optional(),focus:t.number().optional(),max:t.number().optional(),min:t.number().optional()}).optional(),controls:t.object({fullscreen:t.boolean().optional(),mapType:t.boolean().optional(),zoom:t.boolean().optional(),rotate:t.boolean().optional(),scale:t.boolean().optional(),streetView:t.boolean().optional()}).optional(),initialLocations:t.number().optional(),maxLocations:t.number().optional(),distanceUnit:t.enum(["km","mi"]).optional(),distanceFormat:t.enum(["short","long"]).optional(),distanceDecimals:t.number().optional(),options:t.object({show:t.enum(["always","on-search","never"]).optional(),component:t.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:t.string().optional(),detailsLabel:t.string().optional()}).optional(),search:t.object({enabled:t.boolean().optional(),value:t.string().optional(),button:t.object({label:t.string().optional(),position:t.enum(["inside","outside"]).optional()}).optional(),placeholder:t.string().optional(),noResultsText:t.string().optional(),autocomplete:t.boolean().optional(),clearable:t.boolean().optional(),mode:t.enum(["address","postcode"]).default("postcode").optional(),locationButton:t.object({icon:t.string().optional(),position:t.enum(["left","right"]).optional()}).optional(),prefix:t.object({default:s.optional()}).optional(),suffix:t.object({default:s.optional()}).optional()}).optional(),distanceRange:t.object({initial:t.number().optional(),min:t.number().optional(),max:t.number().optional(),step:t.number().optional()}).optional(),mapRegion:t.object({strokeColor:t.string().optional(),fillColor:t.string().optional(),fillOpacity:t.number().optional()}).optional(),locationPin:u.optional(),markerPin:t.object({default:u.optional(),hover:u.optional(),selected:u.optional()}).optional(),infoWindow:t.object({button:t.object({label:t.string(),action:t.string()}).optional()}).optional(),ordering:t.object({orderBy:t.enum(["distance","title","id"]).optional(),orderDir:t.enum(["asc","desc"]).optional(),preferences:t.array(t.object({ids:t.string().array(),filters:t.object({postcodes:t.string().array().optional()}).optional()}))}).optional(),clickableItems:t.object({actionId:t.string()}).optional(),forcePolyfills:t.boolean().optional()}).optional(),calendar:t.object({current:t.object({month:t.number().min(0).max(11).optional(),year:t.number().optional()}).optional(),range:t.object({min:g.optional(),max:g.optional(),enabled:t.array(g).optional(),disabled:t.array(g).optional()}).optional(),time:t.object({label:t.string().optional(),format:t.enum(["12h","24h"]).optional(),component:t.enum(["carousel","list"]).optional()}).optional(),api:t.object({version:t.string().optional(),url:t.string().url().nonempty(),organizationId:t.string().nonempty(),availability:t.object({filters:P,options:z.optional()}).optional(),slots:t.object({filters:F,options:C.optional()}).optional()}).optional()}).optional(),stripe:t.object({publishableKey:t.string().nonempty(),mode:t.enum(["payment","setup"]).default("payment").optional(),createPaymentIntentEndpoint:t.string().url().optional(),createSetupIntentEndpoint:t.string().url().optional(),clientSecret:t.string().optional(),paymentIntentId:t.string().optional(),setupIntentId:t.string().optional(),amount:t.number().optional(),currency:t.string().default("usd").optional(),connectedAccountId:t.string().optional(),returnUrl:t.string().url().optional(),headers:t.record(t.string(),t.string()).optional(),paymentIntentParams:t.record(t.string(),t.unknown()).optional(),appearance:t.object({theme:t.enum(["stripe","night","flat"]).optional(),variables:t.record(t.string(),t.string()).optional(),rules:t.record(t.string(),t.record(t.string(),t.string())).optional()}).optional(),layout:t.enum(["tabs","accordion","auto"]).optional(),elementOptions:t.record(t.string(),t.unknown()).optional(),terms:t.object({card:t.enum(["auto","always","never"]).optional()}).optional(),customTermsText:t.string().optional(),openDialogButtonText:t.string().optional(),confirmButtonText:t.string().optional(),cancelButtonText:t.string().optional(),authorizedText:t.string().optional(),successMessage:t.string().optional(),setupSuccessMessage:t.string().optional(),infoText:t.string().optional(),amountLabel:t.string().optional(),loadingElementText:t.string().optional(),showAmount:t.boolean().optional(),dialogTitle:t.string().optional(),autoOpenDialog:t.boolean().optional(),actionId:t.string().optional()}).optional()}).optional(),dependsOn:E.optional(),dependentBehavior:t.enum(["hidden","disabled"]).optional(),customError:t.object({required:t.string().optional(),invalid:t.string().optional(),minLength:t.string().optional(),maxLength:t.string().optional(),minValue:t.string().optional(),maxValue:t.string().optional(),mismatch:t.string().optional()}).optional()}),W=t.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),K=t.object({type:t.enum(["redirect"]),params:t.record(t.string(),t.any()).optional()}),H=t.object({id:t.string().nonempty(),number:t.number().optional(),title:t.string().optional(),description:t.string().optional(),stageId:t.string().optional(),state:t.record(t.string(),t.any()).optional(),fields:t.array(B).optional(),actions:t.array(x).optional(),result:t.object({postActions:t.array(K).optional(),pipelines:t.array(t.object({name:t.string(),data:t.object({})})).optional(),tracking:t.record(t.string(),t.any()).optional()}).optional(),error:t.object({code:W,message:t.string().optional(),icon:t.string().optional(),position:t.enum(["top","bottom"]).optional(),fields:t.array(t.object({name:t.string(),type:S,value:t.any(),error:t.string()})).optional()}).optional(),isFinal:t.boolean().optional()}),J=t.object({id:t.string().length(24).nonempty(),organizationId:t.string().uuid().nonempty(),updatedAt:t.string().datetime().nonempty(),stages:t.array(t.object({id:t.string().nonempty(),name:t.string().nonempty()}))}),dt=t.object({status:t.enum(["ok","error"]),step:H,flow:J}),ut=t.enum(["track"]);var v=class{constructor(o){r(this,"baseURL");r(this,"headers");r(this,"flowId");r(this,"tracking");r(this,"IMMEDIATE_RETRIES",2);r(this,"RETRY_DELAY_MS",3e3);let e=X({},O,j.parse(o));this.flowId=e.flowId,this.baseURL=e.baseUrl,this.headers=new Headers({"Content-Type":"application/json","X-Onlive-Organization-Id":e.organizationId,"X-Lang":e.lang}),e.tracking?.enabled&&(this.tracking=new _(e.organizationId,e.flowId,e.tracking,!!e.devMode))}delay(o){return new Promise(e=>setTimeout(e,o))}async request(o,e={}){let n=null;for(let i=0;i<=this.IMMEDIATE_RETRIES;i++)try{return await this.executeRequest(o,e)}catch(l){n=l instanceof Error?l:new Error(String(l))}try{return await this.delay(this.RETRY_DELAY_MS),await this.executeRequest(o,e)}catch(i){throw n??(i instanceof Error?i:new Error(String(i)))}}async executeRequest(o,e){let n=await fetch(`${this.baseURL}/${o}`,{...e,headers:this.headers});if(!n?.ok)throw new Error(`HTTP error! status: ${n?.status||"unknown"}`);return n.json()}async firstStep(o={}){this.tracking?.analyzeRequest({},o);let e=this.tracking?this.tracking?.preferences():Z(),n=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(y.parse({...o,state:{preferences:e,...o.state}}))});return this.tracking?.analyzeResponse({},n),n}async getStep(o,e={}){this.tracking?.analyzeRequest({stepId:o},e);let n=this.tracking?.preferences(),i=await this.request(`flow/${this.flowId}/steps/${I.parse(o)}`,{method:"POST",body:JSON.stringify(y.parse({...e,state:{preferences:n,...e.state}}))});return this.tracking?.analyzeResponse({stepId:o},i),i}async nextStep(o,e={}){this.tracking?.analyzeRequest(o,e);let{currentStepId:n,actionId:i}=w.parse(o),l=await this.request(`flow/${this.flowId}/steps/${n}/action/${i}`,{method:"POST",body:JSON.stringify(y.parse(e))});return this.tracking?.analyzeResponse(o,l),l}},xt=v;export{v as FlowClient,xt as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/flow-client v0.1.
|
|
2
|
-
"use strict";var V=Object.defineProperty;var $=(r,n,e)=>n in r?V(r,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[n]=e;var m=(r,n,e)=>$(r,typeof n!="symbol"?n+"":n,e);var o=require("vitest"),g=require("zod");var F=require("@onlive.ai/common-121/utils/merge.js");var b=require("@onlive.ai/tracker"),_=require("@onlive.ai/common-121/utils/merge.js"),N=require("@onlive.ai/common-121/utils/browser-preferences.js");var p=require("zod"),f="flow_form",E="onlive-analytics-event",y=p.z.object({enabled:p.z.boolean().default(!1).optional(),data:p.z.custom().optional(),removeExtraneousValues:p.z.boolean().default(!0).optional(),allowBotTraffic:p.z.boolean().default(!1).optional(),adapters:p.z.array(p.z.string()).default([]).optional(),apiUrl:p.z.string().url().optional(),emitters:p.z.object({windowEvent:p.z.boolean().optional(),dataLayer:p.z.boolean().optional(),windowPostMessage:p.z.boolean().optional()}).optional()});var I=class{constructor(n,e,a,s){m(this,"options");m(this,"tracker");m(this,"eventListeners",[]);this.options=y.parse(a),this.tracker=new b.Tracker({apiUrl:this.options.apiUrl,removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:s}),this.tracker.setBase((0,_.merge)({},{organization_id:n,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:b.Session.id,interaction_id:b.Session.interactionId,extra:{flow_id:e}},this.options.data)),window.addEventListener(E,({detail:d})=>this.emit(d.event,d.data))}getTracker(){return this.tracker}preferences(){return{...(0,N.browserPreferences)(),interactionId:b.Session.interactionId,guestId:b.Session.id}}analyzeRequest(n,e){"currentStepId"in n&&(n.actionId&&this.tracker.send("element_click",{element_label:n.actionId,element_type:"button",form_name:Object.keys(e.fields||{}).length?f:void 0,step_name:n.currentStepId}),e.fields&&this.tracker.send("form_submit",{form_name:f,form_data:e.fields,step_name:n.currentStepId}))}analyzeResponse(n,e){this.tracker.setBase({form_name:f,step_name:e.step.id,step_initial:!("currentStepId"in n)||void 0,step_final:e.step.isFinal,...e.step.result?.tracking}),"currentStepId"in n&&(e.step.result?.pipelines&&e.step.result.pipelines.forEach(a=>{this.tracker.send("task_success",{task_name:a.name,task_data:a.data})}),e.step.error&&this.tracker.send("form_error",{form_error:e.step.error.code})),this.tracker.send("impression",{impression_type:"step"})}send(n,e){this.tracker.send(n,e)}setData(n){this.tracker.setBase(n)}onEvent(n){this.eventListeners.push(n)}emit(n,e){this.eventListeners.forEach(a=>a({event:n,data:e}))}},A=I;var T=require("@onlive.ai/calendar"),t=require("zod");var D={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},L=t.z.string().nonempty(),z=t.z.object({baseUrl:t.z.string().url().nonempty(),flowId:t.z.string().length(24).nonempty(),organizationId:t.z.string().uuid().nonempty(),lang:t.z.string().length(2).nonempty(),tracking:y.optional(),devMode:t.z.boolean().default(!1).optional()}),O=t.z.object({state:t.z.record(t.z.string(),t.z.any()).optional(),fields:t.z.record(t.z.string(),t.z.any()).optional()}),C=t.z.object({currentStepId:t.z.string().nonempty(),actionId:t.z.string().nonempty()}),R=t.z.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),M=t.z.object({name:t.z.string(),value:t.z.string().optional(),icon:t.z.string().optional(),type:t.z.enum(["url","email","phone"]).optional()}),q=t.z.object({lat:t.z.number().min(-90).max(90),lng:t.z.number().min(-180).max(180),meta:t.z.record(t.z.string(),t.z.any()).optional(),properties:t.z.record(t.z.string(),M).optional()}),B=t.z.object({datetime:t.z.string().datetime(),meta:t.z.record(t.z.string(),t.z.any()).optional()}),w=t.z.union([t.z.string(),t.z.number(),t.z.boolean(),q,B]),h=t.z.object({content:t.z.object({icon:t.z.string().optional(),url:t.z.string().url().optional(),width:t.z.string().optional(),height:t.z.string().optional(),scale:t.z.number().optional()}).optional(),background:t.z.string().optional(),glyph:t.z.object({color:t.z.string().optional(),url:t.z.string().url().optional(),icon:t.z.string().optional()}).optional(),borderColor:t.z.string().optional(),scale:t.z.number().optional()}),v=t.z.custom(r=>/^\d{4}-\d{2}-\d{2}$/.test(r),{message:"Date must be in 'YYYY-MM-DD' format"}),c=t.z.object({text:t.z.string().optional(),icon:t.z.string().optional()}),S=t.z.object({fieldName:t.z.string().nonempty(),value:w.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),H=t.z.object({and:t.z.array(S).optional(),or:t.z.array(S).optional()}),P=t.z.array(t.z.union([S,H])),W=t.z.object({src:t.z.string().url(),preload:t.z.boolean().optional(),name:t.z.string().nonempty(),function:t.z.string().nonempty(),params:t.z.record(t.z.string(),t.z.any()).optional()}),Y=t.z.object({name:t.z.enum(["organization_call","close_panel","retry_first_step","retry_next_step"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),j=t.z.object({id:t.z.string().nonempty(),type:t.z.enum(["submit","navigate","link","back","dispatcher","script"]),label:t.z.string().nonempty(),variant:t.z.enum(["primary","secondary","success","danger","warning","info"]),position:t.z.enum(["top","bottom"]).optional(),url:t.z.string().url().optional(),loadingBehavior:t.z.enum(["none","spinner","disabled"]).optional(),prefix:c.optional(),suffix:c.optional(),scripts:W.array().optional(),events:Y.array().optional()}),K=t.z.object({message:t.z.string().optional(),icon:t.z.string().optional(),position:t.z.enum(["top","bottom"]).optional(),kind:t.z.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:t.z.array(j).optional()}),J=t.z.object({name:t.z.string().nonempty(),label:t.z.string().optional(),value:t.z.union([w,t.z.array(w)]).optional(),type:R,component:t.z.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar"]).optional(),disabled:t.z.boolean().optional(),readonly:t.z.boolean().optional(),multiple:t.z.boolean().optional(),placeholder:t.z.string().optional(),options:t.z.array(t.z.object({id:t.z.string().optional(),label:t.z.string().nonempty(),value:w.optional(),image:t.z.string().url().optional(),description:t.z.string().optional(),disabled:t.z.boolean().optional(),attributes:t.z.record(t.z.string(),t.z.any()).optional(),actions:t.z.array(j).optional(),dependsOn:P.optional()})).optional(),required:t.z.boolean().optional(),configuration:t.z.object({generic:t.z.object({error:t.z.object({loading:K.optional(),validation:t.z.object({icon:t.z.string().optional(),showOn:t.z.enum(["input","blur"]).optional()}).optional()})}).optional(),input:t.z.object({min:t.z.number().optional(),max:t.z.number().optional(),step:t.z.number().optional(),pattern:t.z.string().refine(r=>{try{return new RegExp(r),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:t.z.number().optional(),maxLength:t.z.number().optional(),exactLength:t.z.number().optional(),prefix:t.z.object({default:c.optional(),success:c.optional(),error:c.optional()}).optional(),suffix:t.z.object({default:c.optional(),success:c.optional(),error:c.optional()}).optional(),clearable:t.z.boolean().optional(),floatingLabel:t.z.boolean().optional()}).optional(),textarea:t.z.object({minLength:t.z.number().optional(),maxLength:t.z.number().optional(),exactLength:t.z.number().optional(),rows:t.z.number().optional()}).optional(),checkbox:t.z.object({layout:t.z.enum(["horizontal","vertical"])}).optional(),rating:t.z.object({icons:t.z.array(t.z.string()).optional(),color:t.z.string().optional(),precision:t.z.number().optional()}).optional(),carousel:t.z.object({loop:t.z.boolean().optional(),mouseDragging:t.z.boolean().optional(),itemsPerPage:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),itemsPerMove:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),showArrows:t.z.boolean().optional(),showDots:t.z.boolean().optional(),autoplay:t.z.boolean().optional(),autoplaySpeed:t.z.number().optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional()}).optional(),grid:t.z.object({search:t.z.object({enabled:t.z.boolean().optional(),value:t.z.string().optional(),button:t.z.object({label:t.z.string().optional()}).optional(),placeholder:t.z.string().optional(),noResultsText:t.z.string().optional(),clearable:t.z.boolean().optional()}).optional(),itemsPerRow:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),itemsPerPage:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional()}).optional(),map:t.z.object({apiKey:t.z.string().optional(),region:t.z.string().length(2).optional(),center:t.z.object({lat:t.z.number().min(-90).max(90),lng:t.z.number().min(-180).max(180)}).optional(),showMap:t.z.enum(["always","on-search","never"]).optional(),zoom:t.z.object({initial:t.z.number().optional(),focus:t.z.number().optional(),max:t.z.number().optional(),min:t.z.number().optional()}).optional(),controls:t.z.object({fullscreen:t.z.boolean().optional(),mapType:t.z.boolean().optional(),zoom:t.z.boolean().optional(),rotate:t.z.boolean().optional(),scale:t.z.boolean().optional(),streetView:t.z.boolean().optional()}).optional(),initialLocations:t.z.number().optional(),maxLocations:t.z.number().optional(),distanceUnit:t.z.enum(["km","mi"]).optional(),distanceFormat:t.z.enum(["short","long"]).optional(),options:t.z.object({show:t.z.enum(["always","on-search","never"]).optional(),component:t.z.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:t.z.string().optional(),detailsLabel:t.z.string().optional()}).optional(),search:t.z.object({enabled:t.z.boolean().optional(),value:t.z.string().optional(),button:t.z.object({label:t.z.string().optional(),position:t.z.enum(["inside","outside"]).optional()}).optional(),placeholder:t.z.string().optional(),noResultsText:t.z.string().optional(),autocomplete:t.z.boolean().optional(),clearable:t.z.boolean().optional(),mode:t.z.enum(["address","postcode"]).default("postcode").optional(),locationButton:t.z.object({icon:t.z.string().optional(),position:t.z.enum(["left","right"]).optional()}).optional(),prefix:t.z.object({default:c.optional()}).optional(),suffix:t.z.object({default:c.optional()}).optional()}).optional(),distanceRange:t.z.object({initial:t.z.number().optional(),min:t.z.number().optional(),max:t.z.number().optional(),step:t.z.number().optional()}).optional(),mapRegion:t.z.object({strokeColor:t.z.string().optional(),fillColor:t.z.string().optional(),fillOpacity:t.z.number().optional()}).optional(),locationPin:h.optional(),markerPin:t.z.object({default:h.optional(),hover:h.optional(),selected:h.optional()}).optional(),infoWindow:t.z.object({button:t.z.object({label:t.z.string(),action:t.z.string()}).optional()}).optional(),ordering:t.z.object({orderBy:t.z.enum(["distance","title","id"]).optional(),orderDir:t.z.enum(["asc","desc"]).optional(),preferences:t.z.array(t.z.object({ids:t.z.string().array(),filters:t.z.object({postcodes:t.z.string().array().optional()}).optional()}))}).optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional(),forcePolyfills:t.z.boolean().optional()}).optional(),calendar:t.z.object({current:t.z.object({month:t.z.number().min(0).max(11).optional(),year:t.z.number().optional()}).optional(),range:t.z.object({min:v.optional(),max:v.optional(),enabled:t.z.array(v).optional(),disabled:t.z.array(v).optional()}).optional(),time:t.z.object({label:t.z.string().optional(),format:t.z.enum(["12h","24h"]).optional(),component:t.z.enum(["carousel","list"]).optional()}).optional(),api:t.z.object({url:t.z.string().url().nonempty(),organizationId:t.z.string().nonempty(),availability:t.z.object({filters:T.GetAvailabilityFilters,options:T.GetAvailabilityOptions.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:P.optional(),dependentBehavior:t.z.enum(["hidden","disabled"]).optional(),customError:t.z.object({required:t.z.string().optional(),invalid:t.z.string().optional(),minLength:t.z.string().optional(),maxLength:t.z.string().optional(),minValue:t.z.string().optional(),maxValue:t.z.string().optional(),mismatch:t.z.string().optional()}).optional()}),Z=t.z.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),X=t.z.object({type:t.z.enum(["redirect"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),Q=t.z.object({id:t.z.string().nonempty(),title:t.z.string().optional(),description:t.z.string().optional(),stageId:t.z.string().optional(),state:t.z.record(t.z.string(),t.z.any()).optional(),fields:t.z.array(J).optional(),actions:t.z.array(j).optional(),result:t.z.object({postActions:t.z.array(X).optional(),pipelines:t.z.array(t.z.object({name:t.z.string(),data:t.z.object({})})).optional(),tracking:t.z.record(t.z.string(),t.z.any()).optional()}).optional(),error:t.z.object({code:Z,message:t.z.string().optional(),icon:t.z.string().optional(),position:t.z.enum(["top","bottom"]).optional(),fields:t.z.array(t.z.object({name:t.z.string(),type:R,value:t.z.any(),error:t.z.string()})).optional()}).optional(),isFinal:t.z.boolean().optional()}),tt=t.z.object({id:t.z.string().length(24).nonempty(),organizationId:t.z.string().uuid().nonempty(),updatedAt:t.z.string().datetime().nonempty(),stages:t.z.array(t.z.object({id:t.z.string().nonempty(),name:t.z.string().nonempty()}))}),dt=t.z.object({status:t.z.enum(["ok","error"]),step:Q,flow:tt}),mt=t.z.enum(["track"]);var U=require("@onlive.ai/common-121/utils/browser-preferences.js");var k=class{constructor(n){m(this,"baseURL");m(this,"headers");m(this,"flowId");m(this,"tracking");let e=(0,F.merge)({},D,z.parse(n));this.flowId=e.flowId,this.baseURL=e.baseUrl,this.headers=new Headers({"Content-Type":"application/json","X-Onlive-Organization-Id":e.organizationId,"X-Lang":e.lang}),e.tracking?.enabled&&(this.tracking=new A(e.organizationId,e.flowId,e.tracking,!!e.devMode))}async request(n,e={}){let a=await fetch(`${this.baseURL}/${n}`,{...e,headers:this.headers});if(!a?.ok)throw new Error(`HTTP error! status: ${a?.status||"unknown"}`);return a.json()}async firstStep(n={}){this.tracking?.analyzeRequest({},n);let e=this.tracking?this.tracking?.preferences():(0,U.browserPreferences)(),a=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(O.parse({...n,state:{preferences:e,...n.state}}))});return this.tracking?.analyzeResponse({},a),a}async getStep(n,e={}){this.tracking?.analyzeRequest({stepId:n},e);let a=this.tracking?.preferences(),s=await this.request(`flow/${this.flowId}/steps/${L.parse(n)}`,{method:"POST",body:JSON.stringify(O.parse({...e,state:{preferences:a,...e.state}}))});return this.tracking?.analyzeResponse({stepId:n},s),s}async nextStep(n,e={}){this.tracking?.analyzeRequest(n,e);let{currentStepId:a,actionId:s}=C.parse(n),d=await this.request(`flow/${this.flowId}/steps/${a}/action/${s}`,{method:"POST",body:JSON.stringify(O.parse(e))});return this.tracking?.analyzeResponse(n,d),d}},u=k;var G=require("@onlive.ai/common-121/utils/browser-preferences.js");(0,o.describe)("FlowClient",()=>{let r,n="123e4567-e89b-12d3-a456-426614174000",e="4f3d2a1b6c8e9f0d7a2b3c4d",a={baseUrl:"https://api.example.com",organizationId:n,flowId:e,lang:"en"},s={state:{someKey:"someValue"}},d={status:"ok",step:{id:"step-id"},flow:{id:e,updatedAt:"2021-01-01T00:00:00Z",organizationId:n,stages:[]}};(0,o.beforeEach)(()=>{o.vi.clearAllMocks(),global.fetch=o.vi.fn(),r=new u(a)}),(0,o.describe)("Constructor",()=>{(0,o.it)("should create instance with correct configuration",()=>{let i=new u(a);(0,o.expect)(i.baseURL).toBe(a.baseUrl),(0,o.expect)(i.headers.get("Content-Type")).toBe("application/json"),(0,o.expect)(i.headers.get("X-Onlive-Organization-Id")).toBe(a.organizationId)}),(0,o.it)("should throw error if baseUrl is invalid",()=>{let i={baseUrl:"invalid-url",organizationId:n,flowId:e,lang:"en"};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)}),(0,o.it)("should throw error if organizationId is missing",()=>{let i={baseUrl:"https://api.example.com",flowId:e,lang:"en"};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)}),(0,o.it)("should throw error if organizationId is not a valid UUID",()=>{let i={baseUrl:"https://api.example.com",organizationId:"invalid-uuid",flowId:e,lang:"en"};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)}),(0,o.it)("should throw error if lang is missing",()=>{let i={baseUrl:"https://api.example.com",organizationId:n,flowId:e};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)}),(0,o.it)("should throw error if lang length is not 2",()=>{let i={baseUrl:"https://api.example.com",organizationId:n,flowId:e,lang:"english"};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)})}),(0,o.describe)("firstStep",()=>{(0,o.it)("should make POST request to /flow/:flowId/first-step",async()=>{let i=d;global.fetch=o.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(i)});let l=await r.firstStep(s);(0,o.expect)(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/first-step`,o.expect.objectContaining({method:"POST",headers:o.expect.any(Headers),body:JSON.stringify({state:{preferences:(0,G.browserPreferences)(),...s.state}})})),(0,o.expect)(l).toEqual(i)}),(0,o.it)("should throw error if options are invalid",async()=>{let i={state:"invalid-state"};await(0,o.expect)(r.firstStep(i)).rejects.toThrow(Error)}),(0,o.it)("should handle HTTP error",async()=>{global.fetch=o.vi.fn().mockResolvedValue({ok:!1,status:500}),await(0,o.expect)(r.firstStep(s)).rejects.toThrow("HTTP error! status: 500")})}),(0,o.describe)("getStep",()=>{let i="step-123";(0,o.it)("should make POST request to /flow/:flowId/steps/:stepId",async()=>{let l=d;global.fetch=o.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(l)});let x=await r.getStep(i,s);(0,o.expect)(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/steps/${i}`,o.expect.objectContaining({method:"POST",headers:o.expect.any(Headers),body:JSON.stringify(s)})),(0,o.expect)(x).toEqual(l)}),(0,o.it)("should throw error if options are invalid",async()=>{let l={state:"invalid-state"};await(0,o.expect)(r.getStep(i,l)).rejects.toThrow(Error)}),(0,o.it)("should handle HTTP error",async()=>{global.fetch=o.vi.fn().mockResolvedValue({ok:!1,status:500}),await(0,o.expect)(r.getStep(i,s)).rejects.toThrow("HTTP error! status: 500")})}),(0,o.describe)("nextStep",()=>{let i={currentStepId:"step-123",actionId:"action-123"};(0,o.it)("should make POST request to /flow/:flowId/steps/:currentStepId/action/:actionId",async()=>{let l=d;global.fetch=o.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(l)});let x=await r.nextStep(i,s);(0,o.expect)(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/steps/${i.currentStepId}/action/${i.actionId}`,o.expect.objectContaining({method:"POST",headers:o.expect.any(Headers),body:JSON.stringify(s)})),(0,o.expect)(x).toEqual(l)}),(0,o.it)("should validate trigger",async()=>{let l={};await(0,o.expect)(r.nextStep(l,s)).rejects.toThrow(g.ZodError)}),(0,o.it)("should throw error if options are invalid",async()=>{let l={state:"invalid-state"};await(0,o.expect)(r.nextStep(i,l)).rejects.toThrow(g.ZodError)}),(0,o.it)("should handle HTTP error",async()=>{global.fetch=o.vi.fn().mockResolvedValue({ok:!1,status:500}),await(0,o.expect)(r.nextStep(i,s)).rejects.toThrow("HTTP error! status: 500")})})});
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.209 | © 2026 Onlive.ai */
|
|
2
|
+
"use strict";var $=Object.defineProperty;var q=(s,e,n)=>e in s?$(s,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[e]=n;var d=(s,e,n)=>q(s,typeof e!="symbol"?e+"":e,n);var V=require("@onlive.ai/common-121/utils/browser-preferences.js"),o=require("vitest"),g=require("zod");var M=require("@onlive.ai/common-121/utils/browser-preferences.js"),G=require("@onlive.ai/common-121/utils/merge.js");var P=require("@onlive.ai/common-121/utils/browser-preferences.js"),R=require("@onlive.ai/common-121/utils/merge.js"),b=require("@onlive.ai/tracker");var c=require("zod"),f="flow_form",j="onlive-analytics-event",y=c.z.object({enabled:c.z.boolean().default(!1).optional(),data:c.z.custom().optional(),removeExtraneousValues:c.z.boolean().default(!0).optional(),allowBotTraffic:c.z.boolean().default(!1).optional(),adapters:c.z.array(c.z.string()).default([]).optional(),apiUrl:c.z.string().url().optional(),emitters:c.z.object({windowEvent:c.z.boolean().optional(),dataLayer:c.z.boolean().optional(),windowPostMessage:c.z.boolean().optional()}).optional()});var k=class{constructor(e,n,a,r){d(this,"taskSuccessMappers",{create_i_event_registration:e=>({task_name:"ievent_registration",task_data:this.getRecord(e.fields)})});d(this,"options");d(this,"tracker");d(this,"eventListeners",[]);this.options=y.parse(a),this.tracker=new b.Tracker({apiUrl:this.options.apiUrl||"",removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:r}),this.tracker.setBase((0,R.merge)({},{organization_id:e,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:b.Session.id,interaction_id:b.Session.interactionId,extra:{flow_id:n}},this.options.data)),window.addEventListener(j,({detail:l})=>l?.event&&l?.data&&this.emit(l.event,l.data))}getTracker(){return this.tracker}preferences(){return{...(0,P.browserPreferences)(),interactionId:b.Session.interactionId,guestId:b.Session.id}}analyzeRequest(e,n){"currentStepId"in e&&(e.actionId&&this.tracker.send("element_click",{element_label:e.actionId,element_type:"button",form_name:Object.keys(n.fields||{}).length?f:void 0}),n.fields&&Object.keys(n.fields).length&&this.tracker.send("form_submit",{form_name:f,form_data:n.fields}))}analyzeResponse(e,n){this.tracker.setBase({form_name:f,step_name:n.step.id,step_number:n.step.number,step_initial:!("currentStepId"in e)||void 0,step_final:n.step.isFinal,...n.step.result?.tracking}),"currentStepId"in e&&(n.step.result?.pipelines&&n.step.result.pipelines.forEach(a=>{let r=this.mapTaskSuccessPipeline({name:a.name,data:this.getRecord(a.data)});this.tracker.send("task_success",{task_name:r.task_name,task_data:r.task_data})}),n.step.error&&this.tracker.send("form_error",{form_error:n.step.error.code})),this.tracker.send("impression",{impression_type:"step"})}send(e,n){this.tracker.send(e,n)}setData(e){this.tracker.setBase(e)}onEvent(e){this.eventListeners.push(e)}emit(e,n){this.eventListeners.forEach(a=>a({event:e,data:n}))}mapTaskSuccessPipeline(e){let n=this.taskSuccessMappers[e.name];return n?n(e.data):{task_name:e.name,task_data:e.data}}getRecord(e){return!e||typeof e!="object"||Array.isArray(e)?{}:e}},A=k;var T=require("@onlive.ai/calendar"),x=require("@onlive.ai/calendar/client/client.types.js"),t=require("zod");var D=(a=>(a.DARK="DARK",a.FOLLOW_SYSTEM="FOLLOW_SYSTEM",a.LIGHT="LIGHT",a))(D||{}),L={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},z=t.z.string().nonempty(),C=t.z.object({baseUrl:t.z.string().url().nonempty(),flowId:t.z.string().length(24).nonempty(),organizationId:t.z.string().uuid().nonempty(),lang:t.z.string().length(2).nonempty(),tracking:y.optional(),devMode:t.z.boolean().default(!1).optional()}),I=t.z.object({state:t.z.record(t.z.string(),t.z.any()).optional(),fields:t.z.record(t.z.string(),t.z.any()).optional()}),F=t.z.object({currentStepId:t.z.string().nonempty(),actionId:t.z.string().nonempty()}),U=t.z.enum(["text","boolean","number","first_name","last_name","name","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),B=t.z.object({name:t.z.string().optional(),value:t.z.string().optional(),icon:t.z.string().optional(),type:t.z.enum(["url","email","phone"]).optional()}),H=t.z.object({lat:t.z.number().min(-90).max(90),lng:t.z.number().min(-180).max(180),meta:t.z.record(t.z.string(),t.z.any()).optional(),properties:t.z.record(t.z.string(),B).optional()}),Y=t.z.object({datetime:t.z.string().datetime(),meta:t.z.record(t.z.string(),t.z.any()).optional()}),w=t.z.union([t.z.string(),t.z.number(),t.z.boolean(),H,Y]),h=t.z.object({content:t.z.object({icon:t.z.string().optional(),url:t.z.string().url().optional(),width:t.z.string().optional(),height:t.z.string().optional(),scale:t.z.number().optional()}).optional(),background:t.z.string().optional(),glyph:t.z.object({color:t.z.string().optional(),url:t.z.string().url().optional(),icon:t.z.string().optional()}).optional(),borderColor:t.z.string().optional(),scale:t.z.number().optional()}),v=t.z.custom(s=>typeof s=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(s),{message:"Date must be in 'YYYY-MM-DD' format"}),m=t.z.object({text:t.z.string().optional(),icon:t.z.string().optional()}),E=t.z.object({fieldName:t.z.string().nonempty(),value:w.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),W=t.z.object({and:t.z.array(E).optional(),or:t.z.array(E).optional()}),N=t.z.array(t.z.union([E,W])),K=t.z.object({src:t.z.string().url(),preload:t.z.boolean().optional(),name:t.z.string().nonempty(),function:t.z.string().nonempty(),params:t.z.array(t.z.record(t.z.string(),t.z.any())).optional()}),J=t.z.object({name:t.z.enum(["organization_call","close_panel","retry_first_step","retry_next_step","organization_chat"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),_=t.z.object({id:t.z.string().nonempty(),type:t.z.enum(["submit","navigate","link","back","dispatcher","script"]),label:t.z.string().nonempty(),variant:t.z.enum(["primary","secondary","success","danger","warning","info"]),position:t.z.enum(["top","bottom"]).optional(),url:t.z.string().url().optional(),target:t.z.enum(["_self","_blank","_parent","_top"]).optional(),loadingBehavior:t.z.enum(["none","spinner","disabled"]).optional(),prefix:m.optional(),suffix:m.optional(),scripts:K.array().optional(),events:J.array().optional()}),Z=t.z.object({message:t.z.string().optional(),icon:t.z.string().optional(),position:t.z.enum(["top","bottom"]).optional(),kind:t.z.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:t.z.array(_).optional()}),X=t.z.object({name:t.z.string().nonempty(),label:t.z.string().optional(),value:t.z.union([w,t.z.array(w)]).optional(),type:U,component:t.z.enum(["input","phone_input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar","stripe_payment"]).optional(),disabled:t.z.boolean().optional(),readonly:t.z.boolean().optional(),multiple:t.z.boolean().optional(),placeholder:t.z.string().optional(),options:t.z.array(t.z.object({id:t.z.string().optional(),label:t.z.string().nonempty(),value:w.optional(),image:t.z.string().url().optional(),description:t.z.string().optional(),disabled:t.z.boolean().optional(),attributes:t.z.record(t.z.string(),t.z.any()).optional(),actions:t.z.array(_).optional(),dependsOn:N.optional()})).optional(),required:t.z.boolean().optional(),configuration:t.z.object({generic:t.z.object({error:t.z.object({loading:Z.optional(),validation:t.z.object({icon:t.z.string().optional(),showOn:t.z.enum(["input","blur"]).optional()}).optional()})}).optional(),input:t.z.object({min:t.z.number().optional(),max:t.z.number().optional(),step:t.z.number().optional(),pattern:t.z.string().refine(s=>{try{return new RegExp(s),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:t.z.number().optional(),maxLength:t.z.number().optional(),exactLength:t.z.number().optional(),prefix:t.z.object({default:m.optional(),success:m.optional(),error:m.optional()}).optional(),suffix:t.z.object({default:m.optional(),success:m.optional(),error:m.optional()}).optional(),clearable:t.z.boolean().optional(),floatingLabel:t.z.boolean().optional()}).optional(),phoneInput:t.z.object({includePrefixValue:t.z.boolean().optional(),showFlag:t.z.boolean().optional(),showCode:t.z.boolean().optional(),prefixLabel:t.z.string().optional(),lockedPrefix:t.z.boolean().optional(),countries:t.z.array(t.z.string()).optional(),defaultPrefix:t.z.string().optional(),autoDetectCountry:t.z.boolean().optional()}).optional(),textarea:t.z.object({minLength:t.z.number().optional(),maxLength:t.z.number().optional(),exactLength:t.z.number().optional(),rows:t.z.number().optional()}).optional(),checkbox:t.z.object({layout:t.z.enum(["horizontal","vertical"])}).optional(),rating:t.z.object({icons:t.z.array(t.z.string()).optional(),color:t.z.string().optional(),precision:t.z.number().optional()}).optional(),carousel:t.z.object({loop:t.z.boolean().optional(),mouseDragging:t.z.boolean().optional(),itemsPerPage:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),itemsPerMove:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),showArrows:t.z.boolean().optional(),showDots:t.z.boolean().optional(),autoplay:t.z.boolean().optional(),autoplaySpeed:t.z.number().optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional()}).optional(),grid:t.z.object({search:t.z.object({enabled:t.z.boolean().optional(),value:t.z.string().optional(),button:t.z.object({label:t.z.string().optional()}).optional(),placeholder:t.z.string().optional(),noResultsText:t.z.string().optional(),clearable:t.z.boolean().optional()}).optional(),itemsPerRow:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),itemsPerPage:t.z.object({small:t.z.number(),medium:t.z.number().optional(),large:t.z.number().optional()}).optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional()}).optional(),map:t.z.object({apiKey:t.z.string().optional(),mapId:t.z.string().optional(),region:t.z.string().length(2).optional(),colorScheme:t.z.nativeEnum(D).optional(),center:t.z.object({lat:t.z.number().min(-90).max(90),lng:t.z.number().min(-180).max(180)}).optional(),showMap:t.z.enum(["always","on-search","never"]).optional(),zoom:t.z.object({initial:t.z.number().optional(),focus:t.z.number().optional(),max:t.z.number().optional(),min:t.z.number().optional()}).optional(),controls:t.z.object({fullscreen:t.z.boolean().optional(),mapType:t.z.boolean().optional(),zoom:t.z.boolean().optional(),rotate:t.z.boolean().optional(),scale:t.z.boolean().optional(),streetView:t.z.boolean().optional()}).optional(),initialLocations:t.z.number().optional(),maxLocations:t.z.number().optional(),distanceUnit:t.z.enum(["km","mi"]).optional(),distanceFormat:t.z.enum(["short","long"]).optional(),distanceDecimals:t.z.number().optional(),options:t.z.object({show:t.z.enum(["always","on-search","never"]).optional(),component:t.z.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:t.z.string().optional(),detailsLabel:t.z.string().optional()}).optional(),search:t.z.object({enabled:t.z.boolean().optional(),value:t.z.string().optional(),button:t.z.object({label:t.z.string().optional(),position:t.z.enum(["inside","outside"]).optional()}).optional(),placeholder:t.z.string().optional(),noResultsText:t.z.string().optional(),autocomplete:t.z.boolean().optional(),clearable:t.z.boolean().optional(),mode:t.z.enum(["address","postcode"]).default("postcode").optional(),locationButton:t.z.object({icon:t.z.string().optional(),position:t.z.enum(["left","right"]).optional()}).optional(),prefix:t.z.object({default:m.optional()}).optional(),suffix:t.z.object({default:m.optional()}).optional()}).optional(),distanceRange:t.z.object({initial:t.z.number().optional(),min:t.z.number().optional(),max:t.z.number().optional(),step:t.z.number().optional()}).optional(),mapRegion:t.z.object({strokeColor:t.z.string().optional(),fillColor:t.z.string().optional(),fillOpacity:t.z.number().optional()}).optional(),locationPin:h.optional(),markerPin:t.z.object({default:h.optional(),hover:h.optional(),selected:h.optional()}).optional(),infoWindow:t.z.object({button:t.z.object({label:t.z.string(),action:t.z.string()}).optional()}).optional(),ordering:t.z.object({orderBy:t.z.enum(["distance","title","id"]).optional(),orderDir:t.z.enum(["asc","desc"]).optional(),preferences:t.z.array(t.z.object({ids:t.z.string().array(),filters:t.z.object({postcodes:t.z.string().array().optional()}).optional()}))}).optional(),clickableItems:t.z.object({actionId:t.z.string()}).optional(),forcePolyfills:t.z.boolean().optional()}).optional(),calendar:t.z.object({current:t.z.object({month:t.z.number().min(0).max(11).optional(),year:t.z.number().optional()}).optional(),range:t.z.object({min:v.optional(),max:v.optional(),enabled:t.z.array(v).optional(),disabled:t.z.array(v).optional()}).optional(),time:t.z.object({label:t.z.string().optional(),format:t.z.enum(["12h","24h"]).optional(),component:t.z.enum(["carousel","list"]).optional()}).optional(),api:t.z.object({version:t.z.string().optional(),url:t.z.string().url().nonempty(),organizationId:t.z.string().nonempty(),availability:t.z.object({filters:T.GetAvailabilityFilters,options:T.GetAvailabilityOptions.optional()}).optional(),slots:t.z.object({filters:x.GetSlotFilters,options:x.GetSlotOptions.optional()}).optional()}).optional()}).optional(),stripe:t.z.object({publishableKey:t.z.string().nonempty(),mode:t.z.enum(["payment","setup"]).default("payment").optional(),createPaymentIntentEndpoint:t.z.string().url().optional(),createSetupIntentEndpoint:t.z.string().url().optional(),clientSecret:t.z.string().optional(),paymentIntentId:t.z.string().optional(),setupIntentId:t.z.string().optional(),amount:t.z.number().optional(),currency:t.z.string().default("usd").optional(),connectedAccountId:t.z.string().optional(),returnUrl:t.z.string().url().optional(),headers:t.z.record(t.z.string(),t.z.string()).optional(),paymentIntentParams:t.z.record(t.z.string(),t.z.unknown()).optional(),appearance:t.z.object({theme:t.z.enum(["stripe","night","flat"]).optional(),variables:t.z.record(t.z.string(),t.z.string()).optional(),rules:t.z.record(t.z.string(),t.z.record(t.z.string(),t.z.string())).optional()}).optional(),layout:t.z.enum(["tabs","accordion","auto"]).optional(),elementOptions:t.z.record(t.z.string(),t.z.unknown()).optional(),terms:t.z.object({card:t.z.enum(["auto","always","never"]).optional()}).optional(),customTermsText:t.z.string().optional(),openDialogButtonText:t.z.string().optional(),confirmButtonText:t.z.string().optional(),cancelButtonText:t.z.string().optional(),authorizedText:t.z.string().optional(),successMessage:t.z.string().optional(),setupSuccessMessage:t.z.string().optional(),infoText:t.z.string().optional(),amountLabel:t.z.string().optional(),loadingElementText:t.z.string().optional(),showAmount:t.z.boolean().optional(),dialogTitle:t.z.string().optional(),autoOpenDialog:t.z.boolean().optional(),actionId:t.z.string().optional()}).optional()}).optional(),dependsOn:N.optional(),dependentBehavior:t.z.enum(["hidden","disabled"]).optional(),customError:t.z.object({required:t.z.string().optional(),invalid:t.z.string().optional(),minLength:t.z.string().optional(),maxLength:t.z.string().optional(),minValue:t.z.string().optional(),maxValue:t.z.string().optional(),mismatch:t.z.string().optional()}).optional()}),Q=t.z.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),tt=t.z.object({type:t.z.enum(["redirect"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),ot=t.z.object({id:t.z.string().nonempty(),number:t.z.number().optional(),title:t.z.string().optional(),description:t.z.string().optional(),stageId:t.z.string().optional(),state:t.z.record(t.z.string(),t.z.any()).optional(),fields:t.z.array(X).optional(),actions:t.z.array(_).optional(),result:t.z.object({postActions:t.z.array(tt).optional(),pipelines:t.z.array(t.z.object({name:t.z.string(),data:t.z.object({})})).optional(),tracking:t.z.record(t.z.string(),t.z.any()).optional()}).optional(),error:t.z.object({code:Q,message:t.z.string().optional(),icon:t.z.string().optional(),position:t.z.enum(["top","bottom"]).optional(),fields:t.z.array(t.z.object({name:t.z.string(),type:U,value:t.z.any(),error:t.z.string()})).optional()}).optional(),isFinal:t.z.boolean().optional()}),et=t.z.object({id:t.z.string().length(24).nonempty(),organizationId:t.z.string().uuid().nonempty(),updatedAt:t.z.string().datetime().nonempty(),stages:t.z.array(t.z.object({id:t.z.string().nonempty(),name:t.z.string().nonempty()}))}),pt=t.z.object({status:t.z.enum(["ok","error"]),step:ot,flow:et}),ct=t.z.enum(["track"]);var S=class{constructor(e){d(this,"baseURL");d(this,"headers");d(this,"flowId");d(this,"tracking");d(this,"IMMEDIATE_RETRIES",2);d(this,"RETRY_DELAY_MS",3e3);let n=(0,G.merge)({},L,C.parse(e));this.flowId=n.flowId,this.baseURL=n.baseUrl,this.headers=new Headers({"Content-Type":"application/json","X-Onlive-Organization-Id":n.organizationId,"X-Lang":n.lang}),n.tracking?.enabled&&(this.tracking=new A(n.organizationId,n.flowId,n.tracking,!!n.devMode))}delay(e){return new Promise(n=>setTimeout(n,e))}async request(e,n={}){let a=null;for(let r=0;r<=this.IMMEDIATE_RETRIES;r++)try{return await this.executeRequest(e,n)}catch(l){a=l instanceof Error?l:new Error(String(l))}try{return await this.delay(this.RETRY_DELAY_MS),await this.executeRequest(e,n)}catch(r){throw a??(r instanceof Error?r:new Error(String(r)))}}async executeRequest(e,n){let a=await fetch(`${this.baseURL}/${e}`,{...n,headers:this.headers});if(!a?.ok)throw new Error(`HTTP error! status: ${a?.status||"unknown"}`);return a.json()}async firstStep(e={}){this.tracking?.analyzeRequest({},e);let n=this.tracking?this.tracking?.preferences():(0,M.browserPreferences)(),a=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(I.parse({...e,state:{preferences:n,...e.state}}))});return this.tracking?.analyzeResponse({},a),a}async getStep(e,n={}){this.tracking?.analyzeRequest({stepId:e},n);let a=this.tracking?.preferences(),r=await this.request(`flow/${this.flowId}/steps/${z.parse(e)}`,{method:"POST",body:JSON.stringify(I.parse({...n,state:{preferences:a,...n.state}}))});return this.tracking?.analyzeResponse({stepId:e},r),r}async nextStep(e,n={}){this.tracking?.analyzeRequest(e,n);let{currentStepId:a,actionId:r}=F.parse(e),l=await this.request(`flow/${this.flowId}/steps/${a}/action/${r}`,{method:"POST",body:JSON.stringify(I.parse(n))});return this.tracking?.analyzeResponse(e,l),l}},u=S;(0,o.describe)("FlowClient",()=>{let s,e="123e4567-e89b-12d3-a456-426614174000",n="4f3d2a1b6c8e9f0d7a2b3c4d",a={baseUrl:"https://api.example.com",organizationId:e,flowId:n,lang:"en"},r={state:{someKey:"someValue"}},l={status:"ok",step:{id:"step-id"},flow:{id:n,updatedAt:"2021-01-01T00:00:00Z",organizationId:e,stages:[]}};(0,o.beforeEach)(()=>{o.vi.clearAllMocks(),global.fetch=o.vi.fn(),Object.defineProperty(window,"matchMedia",{writable:!0,value:o.vi.fn().mockImplementation(i=>({matches:!1,media:i,onchange:null,addListener:o.vi.fn(),removeListener:o.vi.fn(),addEventListener:o.vi.fn(),removeEventListener:o.vi.fn(),dispatchEvent:o.vi.fn()}))}),s=new u(a)}),(0,o.describe)("Constructor",()=>{(0,o.it)("should create instance with correct configuration",()=>{let i=new u(a);(0,o.expect)(i.baseURL).toBe(a.baseUrl),(0,o.expect)(i.headers.get("Content-Type")).toBe("application/json"),(0,o.expect)(i.headers.get("X-Onlive-Organization-Id")).toBe(a.organizationId)}),(0,o.it)("should throw error if baseUrl is invalid",()=>{let i={baseUrl:"invalid-url",organizationId:e,flowId:n,lang:"en"};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)}),(0,o.it)("should throw error if organizationId is missing",()=>{let i={baseUrl:"https://api.example.com",flowId:n,lang:"en"};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)}),(0,o.it)("should throw error if organizationId is not a valid UUID",()=>{let i={baseUrl:"https://api.example.com",organizationId:"invalid-uuid",flowId:n,lang:"en"};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)}),(0,o.it)("should throw error if lang is missing",()=>{let i={baseUrl:"https://api.example.com",organizationId:e,flowId:n};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)}),(0,o.it)("should throw error if lang length is not 2",()=>{let i={baseUrl:"https://api.example.com",organizationId:e,flowId:n,lang:"english"};(0,o.expect)(()=>new u(i)).toThrow(g.ZodError)})}),(0,o.describe)("firstStep",()=>{(0,o.it)("should make POST request to /flow/:flowId/first-step",async()=>{let i=l;global.fetch=o.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(i)});let p=await s.firstStep(r);(0,o.expect)(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/first-step`,o.expect.objectContaining({method:"POST",headers:o.expect.any(Headers),body:JSON.stringify({state:{preferences:(0,V.browserPreferences)(),...r.state}})})),(0,o.expect)(p).toEqual(i)}),(0,o.it)("should throw error if options are invalid",async()=>{let i={state:"invalid-state"};await(0,o.expect)(s.firstStep(i)).rejects.toThrow(Error)}),(0,o.it)("should handle HTTP error",async()=>{global.fetch=o.vi.fn().mockResolvedValue({ok:!1,status:500}),await(0,o.expect)(s.firstStep(r)).rejects.toThrow("HTTP error! status: 500")})}),(0,o.describe)("getStep",()=>{let i="step-123";(0,o.it)("should make POST request to /flow/:flowId/steps/:stepId",async()=>{let p=l;global.fetch=o.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(p)});let O=await s.getStep(i,r);(0,o.expect)(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/steps/${i}`,o.expect.objectContaining({method:"POST",headers:o.expect.any(Headers),body:JSON.stringify(r)})),(0,o.expect)(O).toEqual(p)}),(0,o.it)("should throw error if options are invalid",async()=>{let p={state:"invalid-state"};await(0,o.expect)(s.getStep(i,p)).rejects.toThrow(Error)}),(0,o.it)("should handle HTTP error",async()=>{global.fetch=o.vi.fn().mockResolvedValue({ok:!1,status:500}),await(0,o.expect)(s.getStep(i,r)).rejects.toThrow("HTTP error! status: 500")})}),(0,o.describe)("nextStep",()=>{let i={currentStepId:"step-123",actionId:"action-123"};(0,o.it)("should make POST request to /flow/:flowId/steps/:currentStepId/action/:actionId",async()=>{let p=l;global.fetch=o.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(p)});let O=await s.nextStep(i,r);(0,o.expect)(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/steps/${i.currentStepId}/action/${i.actionId}`,o.expect.objectContaining({method:"POST",headers:o.expect.any(Headers),body:JSON.stringify(r)})),(0,o.expect)(O).toEqual(p)}),(0,o.it)("should validate trigger",async()=>{let p={};await(0,o.expect)(s.nextStep(p,r)).rejects.toThrow(g.ZodError)}),(0,o.it)("should throw error if options are invalid",async()=>{let p={state:"invalid-state"};await(0,o.expect)(s.nextStep(i,p)).rejects.toThrow(g.ZodError)}),(0,o.it)("should handle HTTP error",async()=>{global.fetch=o.vi.fn().mockResolvedValue({ok:!1,status:500}),await(0,o.expect)(s.nextStep(i,r)).rejects.toThrow("HTTP error! status: 500")})})});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/flow-client v0.1.
|
|
2
|
-
var F=Object.defineProperty;var U=(r,e,o)=>e in r?F(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o;var u=(r,e,o)=>U(r,typeof e!="symbol"?e+"":e,o);import{beforeEach as at,describe as y,expect as a,it as l,vi as b}from"vitest";import{ZodError as f}from"zod";import{merge as nt}from"@onlive.ai/common-121/utils/merge.js";import{Session as w,Tracker as G}from"@onlive.ai/tracker";import{merge as V}from"@onlive.ai/common-121/utils/merge.js";import{browserPreferences as $}from"@onlive.ai/common-121/utils/browser-preferences.js";import{z as c}from"zod";var h="flow_form",N="onlive-analytics-event",v=c.object({enabled:c.boolean().default(!1).optional(),data:c.custom().optional(),removeExtraneousValues:c.boolean().default(!0).optional(),allowBotTraffic:c.boolean().default(!1).optional(),adapters:c.array(c.string()).default([]).optional(),apiUrl:c.string().url().optional(),emitters:c.object({windowEvent:c.boolean().optional(),dataLayer:c.boolean().optional(),windowPostMessage:c.boolean().optional()}).optional()});var j=class{constructor(e,o,i,s){u(this,"options");u(this,"tracker");u(this,"eventListeners",[]);this.options=v.parse(i),this.tracker=new G({apiUrl:this.options.apiUrl,removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:s}),this.tracker.setBase(V({},{organization_id:e,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:w.id,interaction_id:w.interactionId,extra:{flow_id:o}},this.options.data)),window.addEventListener(N,({detail:m})=>this.emit(m.event,m.data))}getTracker(){return this.tracker}preferences(){return{...$(),interactionId:w.interactionId,guestId:w.id}}analyzeRequest(e,o){"currentStepId"in e&&(e.actionId&&this.tracker.send("element_click",{element_label:e.actionId,element_type:"button",form_name:Object.keys(o.fields||{}).length?h:void 0,step_name:e.currentStepId}),o.fields&&this.tracker.send("form_submit",{form_name:h,form_data:o.fields,step_name:e.currentStepId}))}analyzeResponse(e,o){this.tracker.setBase({form_name:h,step_name:o.step.id,step_initial:!("currentStepId"in e)||void 0,step_final:o.step.isFinal,...o.step.result?.tracking}),"currentStepId"in e&&(o.step.result?.pipelines&&o.step.result.pipelines.forEach(i=>{this.tracker.send("task_success",{task_name:i.name,task_data:i.data})}),o.step.error&&this.tracker.send("form_error",{form_error:o.step.error.code})),this.tracker.send("impression",{impression_type:"step"})}send(e,o){this.tracker.send(e,o)}setData(e){this.tracker.setBase(e)}onEvent(e){this.eventListeners.push(e)}emit(e,o){this.eventListeners.forEach(i=>i({event:e,data:o}))}},A=j;import{GetAvailabilityFilters as M,GetAvailabilityOptions as q}from"@onlive.ai/calendar";import{z as t}from"zod";var D={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},L=t.string().nonempty(),z=t.object({baseUrl:t.string().url().nonempty(),flowId:t.string().length(24).nonempty(),organizationId:t.string().uuid().nonempty(),lang:t.string().length(2).nonempty(),tracking:v.optional(),devMode:t.boolean().default(!1).optional()}),I=t.object({state:t.record(t.string(),t.any()).optional(),fields:t.record(t.string(),t.any()).optional()}),C=t.object({currentStepId:t.string().nonempty(),actionId:t.string().nonempty()}),R=t.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),B=t.object({name:t.string(),value:t.string().optional(),icon:t.string().optional(),type:t.enum(["url","email","phone"]).optional()}),H=t.object({lat:t.number().min(-90).max(90),lng:t.number().min(-180).max(180),meta:t.record(t.string(),t.any()).optional(),properties:t.record(t.string(),B).optional()}),W=t.object({datetime:t.string().datetime(),meta:t.record(t.string(),t.any()).optional()}),x=t.union([t.string(),t.number(),t.boolean(),H,W]),T=t.object({content:t.object({icon:t.string().optional(),url:t.string().url().optional(),width:t.string().optional(),height:t.string().optional(),scale:t.number().optional()}).optional(),background:t.string().optional(),glyph:t.object({color:t.string().optional(),url:t.string().url().optional(),icon:t.string().optional()}).optional(),borderColor:t.string().optional(),scale:t.number().optional()}),O=t.custom(r=>/^\d{4}-\d{2}-\d{2}$/.test(r),{message:"Date must be in 'YYYY-MM-DD' format"}),d=t.object({text:t.string().optional(),icon:t.string().optional()}),k=t.object({fieldName:t.string().nonempty(),value:x.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),Y=t.object({and:t.array(k).optional(),or:t.array(k).optional()}),P=t.array(t.union([k,Y])),K=t.object({src:t.string().url(),preload:t.boolean().optional(),name:t.string().nonempty(),function:t.string().nonempty(),params:t.record(t.string(),t.any()).optional()}),J=t.object({name:t.enum(["organization_call","close_panel","retry_first_step","retry_next_step"]),params:t.record(t.string(),t.any()).optional()}),E=t.object({id:t.string().nonempty(),type:t.enum(["submit","navigate","link","back","dispatcher","script"]),label:t.string().nonempty(),variant:t.enum(["primary","secondary","success","danger","warning","info"]),position:t.enum(["top","bottom"]).optional(),url:t.string().url().optional(),loadingBehavior:t.enum(["none","spinner","disabled"]).optional(),prefix:d.optional(),suffix:d.optional(),scripts:K.array().optional(),events:J.array().optional()}),Z=t.object({message:t.string().optional(),icon:t.string().optional(),position:t.enum(["top","bottom"]).optional(),kind:t.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:t.array(E).optional()}),X=t.object({name:t.string().nonempty(),label:t.string().optional(),value:t.union([x,t.array(x)]).optional(),type:R,component:t.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar"]).optional(),disabled:t.boolean().optional(),readonly:t.boolean().optional(),multiple:t.boolean().optional(),placeholder:t.string().optional(),options:t.array(t.object({id:t.string().optional(),label:t.string().nonempty(),value:x.optional(),image:t.string().url().optional(),description:t.string().optional(),disabled:t.boolean().optional(),attributes:t.record(t.string(),t.any()).optional(),actions:t.array(E).optional(),dependsOn:P.optional()})).optional(),required:t.boolean().optional(),configuration:t.object({generic:t.object({error:t.object({loading:Z.optional(),validation:t.object({icon:t.string().optional(),showOn:t.enum(["input","blur"]).optional()}).optional()})}).optional(),input:t.object({min:t.number().optional(),max:t.number().optional(),step:t.number().optional(),pattern:t.string().refine(r=>{try{return new RegExp(r),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:t.number().optional(),maxLength:t.number().optional(),exactLength:t.number().optional(),prefix:t.object({default:d.optional(),success:d.optional(),error:d.optional()}).optional(),suffix:t.object({default:d.optional(),success:d.optional(),error:d.optional()}).optional(),clearable:t.boolean().optional(),floatingLabel:t.boolean().optional()}).optional(),textarea:t.object({minLength:t.number().optional(),maxLength:t.number().optional(),exactLength:t.number().optional(),rows:t.number().optional()}).optional(),checkbox:t.object({layout:t.enum(["horizontal","vertical"])}).optional(),rating:t.object({icons:t.array(t.string()).optional(),color:t.string().optional(),precision:t.number().optional()}).optional(),carousel:t.object({loop:t.boolean().optional(),mouseDragging:t.boolean().optional(),itemsPerPage:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),itemsPerMove:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),showArrows:t.boolean().optional(),showDots:t.boolean().optional(),autoplay:t.boolean().optional(),autoplaySpeed:t.number().optional(),clickableItems:t.object({actionId:t.string()}).optional()}).optional(),grid:t.object({search:t.object({enabled:t.boolean().optional(),value:t.string().optional(),button:t.object({label:t.string().optional()}).optional(),placeholder:t.string().optional(),noResultsText:t.string().optional(),clearable:t.boolean().optional()}).optional(),itemsPerRow:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),itemsPerPage:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),clickableItems:t.object({actionId:t.string()}).optional()}).optional(),map:t.object({apiKey:t.string().optional(),region:t.string().length(2).optional(),center:t.object({lat:t.number().min(-90).max(90),lng:t.number().min(-180).max(180)}).optional(),showMap:t.enum(["always","on-search","never"]).optional(),zoom:t.object({initial:t.number().optional(),focus:t.number().optional(),max:t.number().optional(),min:t.number().optional()}).optional(),controls:t.object({fullscreen:t.boolean().optional(),mapType:t.boolean().optional(),zoom:t.boolean().optional(),rotate:t.boolean().optional(),scale:t.boolean().optional(),streetView:t.boolean().optional()}).optional(),initialLocations:t.number().optional(),maxLocations:t.number().optional(),distanceUnit:t.enum(["km","mi"]).optional(),distanceFormat:t.enum(["short","long"]).optional(),options:t.object({show:t.enum(["always","on-search","never"]).optional(),component:t.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:t.string().optional(),detailsLabel:t.string().optional()}).optional(),search:t.object({enabled:t.boolean().optional(),value:t.string().optional(),button:t.object({label:t.string().optional(),position:t.enum(["inside","outside"]).optional()}).optional(),placeholder:t.string().optional(),noResultsText:t.string().optional(),autocomplete:t.boolean().optional(),clearable:t.boolean().optional(),mode:t.enum(["address","postcode"]).default("postcode").optional(),locationButton:t.object({icon:t.string().optional(),position:t.enum(["left","right"]).optional()}).optional(),prefix:t.object({default:d.optional()}).optional(),suffix:t.object({default:d.optional()}).optional()}).optional(),distanceRange:t.object({initial:t.number().optional(),min:t.number().optional(),max:t.number().optional(),step:t.number().optional()}).optional(),mapRegion:t.object({strokeColor:t.string().optional(),fillColor:t.string().optional(),fillOpacity:t.number().optional()}).optional(),locationPin:T.optional(),markerPin:t.object({default:T.optional(),hover:T.optional(),selected:T.optional()}).optional(),infoWindow:t.object({button:t.object({label:t.string(),action:t.string()}).optional()}).optional(),ordering:t.object({orderBy:t.enum(["distance","title","id"]).optional(),orderDir:t.enum(["asc","desc"]).optional(),preferences:t.array(t.object({ids:t.string().array(),filters:t.object({postcodes:t.string().array().optional()}).optional()}))}).optional(),clickableItems:t.object({actionId:t.string()}).optional(),forcePolyfills:t.boolean().optional()}).optional(),calendar:t.object({current:t.object({month:t.number().min(0).max(11).optional(),year:t.number().optional()}).optional(),range:t.object({min:O.optional(),max:O.optional(),enabled:t.array(O).optional(),disabled:t.array(O).optional()}).optional(),time:t.object({label:t.string().optional(),format:t.enum(["12h","24h"]).optional(),component:t.enum(["carousel","list"]).optional()}).optional(),api:t.object({url:t.string().url().nonempty(),organizationId:t.string().nonempty(),availability:t.object({filters:M,options:q.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:P.optional(),dependentBehavior:t.enum(["hidden","disabled"]).optional(),customError:t.object({required:t.string().optional(),invalid:t.string().optional(),minLength:t.string().optional(),maxLength:t.string().optional(),minValue:t.string().optional(),maxValue:t.string().optional(),mismatch:t.string().optional()}).optional()}),Q=t.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),tt=t.object({type:t.enum(["redirect"]),params:t.record(t.string(),t.any()).optional()}),ot=t.object({id:t.string().nonempty(),title:t.string().optional(),description:t.string().optional(),stageId:t.string().optional(),state:t.record(t.string(),t.any()).optional(),fields:t.array(X).optional(),actions:t.array(E).optional(),result:t.object({postActions:t.array(tt).optional(),pipelines:t.array(t.object({name:t.string(),data:t.object({})})).optional(),tracking:t.record(t.string(),t.any()).optional()}).optional(),error:t.object({code:Q,message:t.string().optional(),icon:t.string().optional(),position:t.enum(["top","bottom"]).optional(),fields:t.array(t.object({name:t.string(),type:R,value:t.any(),error:t.string()})).optional()}).optional(),isFinal:t.boolean().optional()}),et=t.object({id:t.string().length(24).nonempty(),organizationId:t.string().uuid().nonempty(),updatedAt:t.string().datetime().nonempty(),stages:t.array(t.object({id:t.string().nonempty(),name:t.string().nonempty()}))}),xt=t.object({status:t.enum(["ok","error"]),step:ot,flow:et}),It=t.enum(["track"]);import{browserPreferences as it}from"@onlive.ai/common-121/utils/browser-preferences.js";var _=class{constructor(e){u(this,"baseURL");u(this,"headers");u(this,"flowId");u(this,"tracking");let o=nt({},D,z.parse(e));this.flowId=o.flowId,this.baseURL=o.baseUrl,this.headers=new Headers({"Content-Type":"application/json","X-Onlive-Organization-Id":o.organizationId,"X-Lang":o.lang}),o.tracking?.enabled&&(this.tracking=new A(o.organizationId,o.flowId,o.tracking,!!o.devMode))}async request(e,o={}){let i=await fetch(`${this.baseURL}/${e}`,{...o,headers:this.headers});if(!i?.ok)throw new Error(`HTTP error! status: ${i?.status||"unknown"}`);return i.json()}async firstStep(e={}){this.tracking?.analyzeRequest({},e);let o=this.tracking?this.tracking?.preferences():it(),i=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(I.parse({...e,state:{preferences:o,...e.state}}))});return this.tracking?.analyzeResponse({},i),i}async getStep(e,o={}){this.tracking?.analyzeRequest({stepId:e},o);let i=this.tracking?.preferences(),s=await this.request(`flow/${this.flowId}/steps/${L.parse(e)}`,{method:"POST",body:JSON.stringify(I.parse({...o,state:{preferences:i,...o.state}}))});return this.tracking?.analyzeResponse({stepId:e},s),s}async nextStep(e,o={}){this.tracking?.analyzeRequest(e,o);let{currentStepId:i,actionId:s}=C.parse(e),m=await this.request(`flow/${this.flowId}/steps/${i}/action/${s}`,{method:"POST",body:JSON.stringify(I.parse(o))});return this.tracking?.analyzeResponse(e,m),m}},g=_;import{browserPreferences as rt}from"@onlive.ai/common-121/utils/browser-preferences.js";y("FlowClient",()=>{let r,e="123e4567-e89b-12d3-a456-426614174000",o="4f3d2a1b6c8e9f0d7a2b3c4d",i={baseUrl:"https://api.example.com",organizationId:e,flowId:o,lang:"en"},s={state:{someKey:"someValue"}},m={status:"ok",step:{id:"step-id"},flow:{id:o,updatedAt:"2021-01-01T00:00:00Z",organizationId:e,stages:[]}};at(()=>{b.clearAllMocks(),global.fetch=b.fn(),r=new g(i)}),y("Constructor",()=>{l("should create instance with correct configuration",()=>{let n=new g(i);a(n.baseURL).toBe(i.baseUrl),a(n.headers.get("Content-Type")).toBe("application/json"),a(n.headers.get("X-Onlive-Organization-Id")).toBe(i.organizationId)}),l("should throw error if baseUrl is invalid",()=>{let n={baseUrl:"invalid-url",organizationId:e,flowId:o,lang:"en"};a(()=>new g(n)).toThrow(f)}),l("should throw error if organizationId is missing",()=>{let n={baseUrl:"https://api.example.com",flowId:o,lang:"en"};a(()=>new g(n)).toThrow(f)}),l("should throw error if organizationId is not a valid UUID",()=>{let n={baseUrl:"https://api.example.com",organizationId:"invalid-uuid",flowId:o,lang:"en"};a(()=>new g(n)).toThrow(f)}),l("should throw error if lang is missing",()=>{let n={baseUrl:"https://api.example.com",organizationId:e,flowId:o};a(()=>new g(n)).toThrow(f)}),l("should throw error if lang length is not 2",()=>{let n={baseUrl:"https://api.example.com",organizationId:e,flowId:o,lang:"english"};a(()=>new g(n)).toThrow(f)})}),y("firstStep",()=>{l("should make POST request to /flow/:flowId/first-step",async()=>{let n=m;global.fetch=b.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(n)});let p=await r.firstStep(s);a(global.fetch).toHaveBeenCalledWith(`${i.baseUrl}/flow/${i.flowId}/first-step`,a.objectContaining({method:"POST",headers:a.any(Headers),body:JSON.stringify({state:{preferences:rt(),...s.state}})})),a(p).toEqual(n)}),l("should throw error if options are invalid",async()=>{let n={state:"invalid-state"};await a(r.firstStep(n)).rejects.toThrow(Error)}),l("should handle HTTP error",async()=>{global.fetch=b.fn().mockResolvedValue({ok:!1,status:500}),await a(r.firstStep(s)).rejects.toThrow("HTTP error! status: 500")})}),y("getStep",()=>{let n="step-123";l("should make POST request to /flow/:flowId/steps/:stepId",async()=>{let p=m;global.fetch=b.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(p)});let S=await r.getStep(n,s);a(global.fetch).toHaveBeenCalledWith(`${i.baseUrl}/flow/${i.flowId}/steps/${n}`,a.objectContaining({method:"POST",headers:a.any(Headers),body:JSON.stringify(s)})),a(S).toEqual(p)}),l("should throw error if options are invalid",async()=>{let p={state:"invalid-state"};await a(r.getStep(n,p)).rejects.toThrow(Error)}),l("should handle HTTP error",async()=>{global.fetch=b.fn().mockResolvedValue({ok:!1,status:500}),await a(r.getStep(n,s)).rejects.toThrow("HTTP error! status: 500")})}),y("nextStep",()=>{let n={currentStepId:"step-123",actionId:"action-123"};l("should make POST request to /flow/:flowId/steps/:currentStepId/action/:actionId",async()=>{let p=m;global.fetch=b.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(p)});let S=await r.nextStep(n,s);a(global.fetch).toHaveBeenCalledWith(`${i.baseUrl}/flow/${i.flowId}/steps/${n.currentStepId}/action/${n.actionId}`,a.objectContaining({method:"POST",headers:a.any(Headers),body:JSON.stringify(s)})),a(S).toEqual(p)}),l("should validate trigger",async()=>{let p={};await a(r.nextStep(p,s)).rejects.toThrow(f)}),l("should throw error if options are invalid",async()=>{let p={state:"invalid-state"};await a(r.nextStep(n,p)).rejects.toThrow(f)}),l("should handle HTTP error",async()=>{global.fetch=b.fn().mockResolvedValue({ok:!1,status:500}),await a(r.nextStep(n,s)).rejects.toThrow("HTTP error! status: 500")})})});
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.209 | © 2026 Onlive.ai */
|
|
2
|
+
var U=Object.defineProperty;var M=(s,o,e)=>o in s?U(s,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[o]=e;var m=(s,o,e)=>M(s,typeof o!="symbol"?o+"":o,e);import{browserPreferences as lt}from"@onlive.ai/common-121/utils/browser-preferences.js";import{beforeEach as pt,describe as y,expect as r,it as l,vi as c}from"vitest";import{ZodError as f}from"zod";import{browserPreferences as rt}from"@onlive.ai/common-121/utils/browser-preferences.js";import{merge as st}from"@onlive.ai/common-121/utils/merge.js";import{browserPreferences as G}from"@onlive.ai/common-121/utils/browser-preferences.js";import{merge as V}from"@onlive.ai/common-121/utils/merge.js";import{Session as w,Tracker as $}from"@onlive.ai/tracker";import{z as u}from"zod";var h="flow_form",P="onlive-analytics-event",v=u.object({enabled:u.boolean().default(!1).optional(),data:u.custom().optional(),removeExtraneousValues:u.boolean().default(!0).optional(),allowBotTraffic:u.boolean().default(!1).optional(),adapters:u.array(u.string()).default([]).optional(),apiUrl:u.string().url().optional(),emitters:u.object({windowEvent:u.boolean().optional(),dataLayer:u.boolean().optional(),windowPostMessage:u.boolean().optional()}).optional()});var E=class{constructor(o,e,n,i){m(this,"taskSuccessMappers",{create_i_event_registration:o=>({task_name:"ievent_registration",task_data:this.getRecord(o.fields)})});m(this,"options");m(this,"tracker");m(this,"eventListeners",[]);this.options=v.parse(n),this.tracker=new $({apiUrl:this.options.apiUrl||"",removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:i}),this.tracker.setBase(V({},{organization_id:o,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:w.id,interaction_id:w.interactionId,extra:{flow_id:e}},this.options.data)),window.addEventListener(P,({detail:p})=>p?.event&&p?.data&&this.emit(p.event,p.data))}getTracker(){return this.tracker}preferences(){return{...G(),interactionId:w.interactionId,guestId:w.id}}analyzeRequest(o,e){"currentStepId"in o&&(o.actionId&&this.tracker.send("element_click",{element_label:o.actionId,element_type:"button",form_name:Object.keys(e.fields||{}).length?h:void 0}),e.fields&&Object.keys(e.fields).length&&this.tracker.send("form_submit",{form_name:h,form_data:e.fields}))}analyzeResponse(o,e){this.tracker.setBase({form_name:h,step_name:e.step.id,step_number:e.step.number,step_initial:!("currentStepId"in o)||void 0,step_final:e.step.isFinal,...e.step.result?.tracking}),"currentStepId"in o&&(e.step.result?.pipelines&&e.step.result.pipelines.forEach(n=>{let i=this.mapTaskSuccessPipeline({name:n.name,data:this.getRecord(n.data)});this.tracker.send("task_success",{task_name:i.task_name,task_data:i.task_data})}),e.step.error&&this.tracker.send("form_error",{form_error:e.step.error.code})),this.tracker.send("impression",{impression_type:"step"})}send(o,e){this.tracker.send(o,e)}setData(o){this.tracker.setBase(o)}onEvent(o){this.eventListeners.push(o)}emit(o,e){this.eventListeners.forEach(n=>n({event:o,data:e}))}mapTaskSuccessPipeline(o){let e=this.taskSuccessMappers[o.name];return e?e(o.data):{task_name:o.name,task_data:o.data}}getRecord(o){return!o||typeof o!="object"||Array.isArray(o)?{}:o}},R=E;import{GetAvailabilityFilters as q,GetAvailabilityOptions as B}from"@onlive.ai/calendar";import{GetSlotFilters as H,GetSlotOptions as Y}from"@onlive.ai/calendar/client/client.types.js";import{z as t}from"zod";var N=(n=>(n.DARK="DARK",n.FOLLOW_SYSTEM="FOLLOW_SYSTEM",n.LIGHT="LIGHT",n))(N||{}),D={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},L=t.string().nonempty(),z=t.object({baseUrl:t.string().url().nonempty(),flowId:t.string().length(24).nonempty(),organizationId:t.string().uuid().nonempty(),lang:t.string().length(2).nonempty(),tracking:v.optional(),devMode:t.boolean().default(!1).optional()}),O=t.object({state:t.record(t.string(),t.any()).optional(),fields:t.record(t.string(),t.any()).optional()}),C=t.object({currentStepId:t.string().nonempty(),actionId:t.string().nonempty()}),F=t.enum(["text","boolean","number","first_name","last_name","name","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),W=t.object({name:t.string().optional(),value:t.string().optional(),icon:t.string().optional(),type:t.enum(["url","email","phone"]).optional()}),K=t.object({lat:t.number().min(-90).max(90),lng:t.number().min(-180).max(180),meta:t.record(t.string(),t.any()).optional(),properties:t.record(t.string(),W).optional()}),J=t.object({datetime:t.string().datetime(),meta:t.record(t.string(),t.any()).optional()}),I=t.union([t.string(),t.number(),t.boolean(),K,J]),T=t.object({content:t.object({icon:t.string().optional(),url:t.string().url().optional(),width:t.string().optional(),height:t.string().optional(),scale:t.number().optional()}).optional(),background:t.string().optional(),glyph:t.object({color:t.string().optional(),url:t.string().url().optional(),icon:t.string().optional()}).optional(),borderColor:t.string().optional(),scale:t.number().optional()}),x=t.custom(s=>typeof s=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(s),{message:"Date must be in 'YYYY-MM-DD' format"}),g=t.object({text:t.string().optional(),icon:t.string().optional()}),_=t.object({fieldName:t.string().nonempty(),value:I.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),Z=t.object({and:t.array(_).optional(),or:t.array(_).optional()}),A=t.array(t.union([_,Z])),X=t.object({src:t.string().url(),preload:t.boolean().optional(),name:t.string().nonempty(),function:t.string().nonempty(),params:t.array(t.record(t.string(),t.any())).optional()}),Q=t.object({name:t.enum(["organization_call","close_panel","retry_first_step","retry_next_step","organization_chat"]),params:t.record(t.string(),t.any()).optional()}),S=t.object({id:t.string().nonempty(),type:t.enum(["submit","navigate","link","back","dispatcher","script"]),label:t.string().nonempty(),variant:t.enum(["primary","secondary","success","danger","warning","info"]),position:t.enum(["top","bottom"]).optional(),url:t.string().url().optional(),target:t.enum(["_self","_blank","_parent","_top"]).optional(),loadingBehavior:t.enum(["none","spinner","disabled"]).optional(),prefix:g.optional(),suffix:g.optional(),scripts:X.array().optional(),events:Q.array().optional()}),tt=t.object({message:t.string().optional(),icon:t.string().optional(),position:t.enum(["top","bottom"]).optional(),kind:t.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:t.array(S).optional()}),ot=t.object({name:t.string().nonempty(),label:t.string().optional(),value:t.union([I,t.array(I)]).optional(),type:F,component:t.enum(["input","phone_input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar","stripe_payment"]).optional(),disabled:t.boolean().optional(),readonly:t.boolean().optional(),multiple:t.boolean().optional(),placeholder:t.string().optional(),options:t.array(t.object({id:t.string().optional(),label:t.string().nonempty(),value:I.optional(),image:t.string().url().optional(),description:t.string().optional(),disabled:t.boolean().optional(),attributes:t.record(t.string(),t.any()).optional(),actions:t.array(S).optional(),dependsOn:A.optional()})).optional(),required:t.boolean().optional(),configuration:t.object({generic:t.object({error:t.object({loading:tt.optional(),validation:t.object({icon:t.string().optional(),showOn:t.enum(["input","blur"]).optional()}).optional()})}).optional(),input:t.object({min:t.number().optional(),max:t.number().optional(),step:t.number().optional(),pattern:t.string().refine(s=>{try{return new RegExp(s),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:t.number().optional(),maxLength:t.number().optional(),exactLength:t.number().optional(),prefix:t.object({default:g.optional(),success:g.optional(),error:g.optional()}).optional(),suffix:t.object({default:g.optional(),success:g.optional(),error:g.optional()}).optional(),clearable:t.boolean().optional(),floatingLabel:t.boolean().optional()}).optional(),phoneInput:t.object({includePrefixValue:t.boolean().optional(),showFlag:t.boolean().optional(),showCode:t.boolean().optional(),prefixLabel:t.string().optional(),lockedPrefix:t.boolean().optional(),countries:t.array(t.string()).optional(),defaultPrefix:t.string().optional(),autoDetectCountry:t.boolean().optional()}).optional(),textarea:t.object({minLength:t.number().optional(),maxLength:t.number().optional(),exactLength:t.number().optional(),rows:t.number().optional()}).optional(),checkbox:t.object({layout:t.enum(["horizontal","vertical"])}).optional(),rating:t.object({icons:t.array(t.string()).optional(),color:t.string().optional(),precision:t.number().optional()}).optional(),carousel:t.object({loop:t.boolean().optional(),mouseDragging:t.boolean().optional(),itemsPerPage:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),itemsPerMove:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),showArrows:t.boolean().optional(),showDots:t.boolean().optional(),autoplay:t.boolean().optional(),autoplaySpeed:t.number().optional(),clickableItems:t.object({actionId:t.string()}).optional()}).optional(),grid:t.object({search:t.object({enabled:t.boolean().optional(),value:t.string().optional(),button:t.object({label:t.string().optional()}).optional(),placeholder:t.string().optional(),noResultsText:t.string().optional(),clearable:t.boolean().optional()}).optional(),itemsPerRow:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),itemsPerPage:t.object({small:t.number(),medium:t.number().optional(),large:t.number().optional()}).optional(),clickableItems:t.object({actionId:t.string()}).optional()}).optional(),map:t.object({apiKey:t.string().optional(),mapId:t.string().optional(),region:t.string().length(2).optional(),colorScheme:t.nativeEnum(N).optional(),center:t.object({lat:t.number().min(-90).max(90),lng:t.number().min(-180).max(180)}).optional(),showMap:t.enum(["always","on-search","never"]).optional(),zoom:t.object({initial:t.number().optional(),focus:t.number().optional(),max:t.number().optional(),min:t.number().optional()}).optional(),controls:t.object({fullscreen:t.boolean().optional(),mapType:t.boolean().optional(),zoom:t.boolean().optional(),rotate:t.boolean().optional(),scale:t.boolean().optional(),streetView:t.boolean().optional()}).optional(),initialLocations:t.number().optional(),maxLocations:t.number().optional(),distanceUnit:t.enum(["km","mi"]).optional(),distanceFormat:t.enum(["short","long"]).optional(),distanceDecimals:t.number().optional(),options:t.object({show:t.enum(["always","on-search","never"]).optional(),component:t.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:t.string().optional(),detailsLabel:t.string().optional()}).optional(),search:t.object({enabled:t.boolean().optional(),value:t.string().optional(),button:t.object({label:t.string().optional(),position:t.enum(["inside","outside"]).optional()}).optional(),placeholder:t.string().optional(),noResultsText:t.string().optional(),autocomplete:t.boolean().optional(),clearable:t.boolean().optional(),mode:t.enum(["address","postcode"]).default("postcode").optional(),locationButton:t.object({icon:t.string().optional(),position:t.enum(["left","right"]).optional()}).optional(),prefix:t.object({default:g.optional()}).optional(),suffix:t.object({default:g.optional()}).optional()}).optional(),distanceRange:t.object({initial:t.number().optional(),min:t.number().optional(),max:t.number().optional(),step:t.number().optional()}).optional(),mapRegion:t.object({strokeColor:t.string().optional(),fillColor:t.string().optional(),fillOpacity:t.number().optional()}).optional(),locationPin:T.optional(),markerPin:t.object({default:T.optional(),hover:T.optional(),selected:T.optional()}).optional(),infoWindow:t.object({button:t.object({label:t.string(),action:t.string()}).optional()}).optional(),ordering:t.object({orderBy:t.enum(["distance","title","id"]).optional(),orderDir:t.enum(["asc","desc"]).optional(),preferences:t.array(t.object({ids:t.string().array(),filters:t.object({postcodes:t.string().array().optional()}).optional()}))}).optional(),clickableItems:t.object({actionId:t.string()}).optional(),forcePolyfills:t.boolean().optional()}).optional(),calendar:t.object({current:t.object({month:t.number().min(0).max(11).optional(),year:t.number().optional()}).optional(),range:t.object({min:x.optional(),max:x.optional(),enabled:t.array(x).optional(),disabled:t.array(x).optional()}).optional(),time:t.object({label:t.string().optional(),format:t.enum(["12h","24h"]).optional(),component:t.enum(["carousel","list"]).optional()}).optional(),api:t.object({version:t.string().optional(),url:t.string().url().nonempty(),organizationId:t.string().nonempty(),availability:t.object({filters:q,options:B.optional()}).optional(),slots:t.object({filters:H,options:Y.optional()}).optional()}).optional()}).optional(),stripe:t.object({publishableKey:t.string().nonempty(),mode:t.enum(["payment","setup"]).default("payment").optional(),createPaymentIntentEndpoint:t.string().url().optional(),createSetupIntentEndpoint:t.string().url().optional(),clientSecret:t.string().optional(),paymentIntentId:t.string().optional(),setupIntentId:t.string().optional(),amount:t.number().optional(),currency:t.string().default("usd").optional(),connectedAccountId:t.string().optional(),returnUrl:t.string().url().optional(),headers:t.record(t.string(),t.string()).optional(),paymentIntentParams:t.record(t.string(),t.unknown()).optional(),appearance:t.object({theme:t.enum(["stripe","night","flat"]).optional(),variables:t.record(t.string(),t.string()).optional(),rules:t.record(t.string(),t.record(t.string(),t.string())).optional()}).optional(),layout:t.enum(["tabs","accordion","auto"]).optional(),elementOptions:t.record(t.string(),t.unknown()).optional(),terms:t.object({card:t.enum(["auto","always","never"]).optional()}).optional(),customTermsText:t.string().optional(),openDialogButtonText:t.string().optional(),confirmButtonText:t.string().optional(),cancelButtonText:t.string().optional(),authorizedText:t.string().optional(),successMessage:t.string().optional(),setupSuccessMessage:t.string().optional(),infoText:t.string().optional(),amountLabel:t.string().optional(),loadingElementText:t.string().optional(),showAmount:t.boolean().optional(),dialogTitle:t.string().optional(),autoOpenDialog:t.boolean().optional(),actionId:t.string().optional()}).optional()}).optional(),dependsOn:A.optional(),dependentBehavior:t.enum(["hidden","disabled"]).optional(),customError:t.object({required:t.string().optional(),invalid:t.string().optional(),minLength:t.string().optional(),maxLength:t.string().optional(),minValue:t.string().optional(),maxValue:t.string().optional(),mismatch:t.string().optional()}).optional()}),et=t.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),nt=t.object({type:t.enum(["redirect"]),params:t.record(t.string(),t.any()).optional()}),at=t.object({id:t.string().nonempty(),number:t.number().optional(),title:t.string().optional(),description:t.string().optional(),stageId:t.string().optional(),state:t.record(t.string(),t.any()).optional(),fields:t.array(ot).optional(),actions:t.array(S).optional(),result:t.object({postActions:t.array(nt).optional(),pipelines:t.array(t.object({name:t.string(),data:t.object({})})).optional(),tracking:t.record(t.string(),t.any()).optional()}).optional(),error:t.object({code:et,message:t.string().optional(),icon:t.string().optional(),position:t.enum(["top","bottom"]).optional(),fields:t.array(t.object({name:t.string(),type:F,value:t.any(),error:t.string()})).optional()}).optional(),isFinal:t.boolean().optional()}),it=t.object({id:t.string().length(24).nonempty(),organizationId:t.string().uuid().nonempty(),updatedAt:t.string().datetime().nonempty(),stages:t.array(t.object({id:t.string().nonempty(),name:t.string().nonempty()}))}),It=t.object({status:t.enum(["ok","error"]),step:at,flow:it}),Ot=t.enum(["track"]);var j=class{constructor(o){m(this,"baseURL");m(this,"headers");m(this,"flowId");m(this,"tracking");m(this,"IMMEDIATE_RETRIES",2);m(this,"RETRY_DELAY_MS",3e3);let e=st({},D,z.parse(o));this.flowId=e.flowId,this.baseURL=e.baseUrl,this.headers=new Headers({"Content-Type":"application/json","X-Onlive-Organization-Id":e.organizationId,"X-Lang":e.lang}),e.tracking?.enabled&&(this.tracking=new R(e.organizationId,e.flowId,e.tracking,!!e.devMode))}delay(o){return new Promise(e=>setTimeout(e,o))}async request(o,e={}){let n=null;for(let i=0;i<=this.IMMEDIATE_RETRIES;i++)try{return await this.executeRequest(o,e)}catch(p){n=p instanceof Error?p:new Error(String(p))}try{return await this.delay(this.RETRY_DELAY_MS),await this.executeRequest(o,e)}catch(i){throw n??(i instanceof Error?i:new Error(String(i)))}}async executeRequest(o,e){let n=await fetch(`${this.baseURL}/${o}`,{...e,headers:this.headers});if(!n?.ok)throw new Error(`HTTP error! status: ${n?.status||"unknown"}`);return n.json()}async firstStep(o={}){this.tracking?.analyzeRequest({},o);let e=this.tracking?this.tracking?.preferences():rt(),n=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(O.parse({...o,state:{preferences:e,...o.state}}))});return this.tracking?.analyzeResponse({},n),n}async getStep(o,e={}){this.tracking?.analyzeRequest({stepId:o},e);let n=this.tracking?.preferences(),i=await this.request(`flow/${this.flowId}/steps/${L.parse(o)}`,{method:"POST",body:JSON.stringify(O.parse({...e,state:{preferences:n,...e.state}}))});return this.tracking?.analyzeResponse({stepId:o},i),i}async nextStep(o,e={}){this.tracking?.analyzeRequest(o,e);let{currentStepId:n,actionId:i}=C.parse(o),p=await this.request(`flow/${this.flowId}/steps/${n}/action/${i}`,{method:"POST",body:JSON.stringify(O.parse(e))});return this.tracking?.analyzeResponse(o,p),p}},b=j;y("FlowClient",()=>{let s,o="123e4567-e89b-12d3-a456-426614174000",e="4f3d2a1b6c8e9f0d7a2b3c4d",n={baseUrl:"https://api.example.com",organizationId:o,flowId:e,lang:"en"},i={state:{someKey:"someValue"}},p={status:"ok",step:{id:"step-id"},flow:{id:e,updatedAt:"2021-01-01T00:00:00Z",organizationId:o,stages:[]}};pt(()=>{c.clearAllMocks(),global.fetch=c.fn(),Object.defineProperty(window,"matchMedia",{writable:!0,value:c.fn().mockImplementation(a=>({matches:!1,media:a,onchange:null,addListener:c.fn(),removeListener:c.fn(),addEventListener:c.fn(),removeEventListener:c.fn(),dispatchEvent:c.fn()}))}),s=new b(n)}),y("Constructor",()=>{l("should create instance with correct configuration",()=>{let a=new b(n);r(a.baseURL).toBe(n.baseUrl),r(a.headers.get("Content-Type")).toBe("application/json"),r(a.headers.get("X-Onlive-Organization-Id")).toBe(n.organizationId)}),l("should throw error if baseUrl is invalid",()=>{let a={baseUrl:"invalid-url",organizationId:o,flowId:e,lang:"en"};r(()=>new b(a)).toThrow(f)}),l("should throw error if organizationId is missing",()=>{let a={baseUrl:"https://api.example.com",flowId:e,lang:"en"};r(()=>new b(a)).toThrow(f)}),l("should throw error if organizationId is not a valid UUID",()=>{let a={baseUrl:"https://api.example.com",organizationId:"invalid-uuid",flowId:e,lang:"en"};r(()=>new b(a)).toThrow(f)}),l("should throw error if lang is missing",()=>{let a={baseUrl:"https://api.example.com",organizationId:o,flowId:e};r(()=>new b(a)).toThrow(f)}),l("should throw error if lang length is not 2",()=>{let a={baseUrl:"https://api.example.com",organizationId:o,flowId:e,lang:"english"};r(()=>new b(a)).toThrow(f)})}),y("firstStep",()=>{l("should make POST request to /flow/:flowId/first-step",async()=>{let a=p;global.fetch=c.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(a)});let d=await s.firstStep(i);r(global.fetch).toHaveBeenCalledWith(`${n.baseUrl}/flow/${n.flowId}/first-step`,r.objectContaining({method:"POST",headers:r.any(Headers),body:JSON.stringify({state:{preferences:lt(),...i.state}})})),r(d).toEqual(a)}),l("should throw error if options are invalid",async()=>{let a={state:"invalid-state"};await r(s.firstStep(a)).rejects.toThrow(Error)}),l("should handle HTTP error",async()=>{global.fetch=c.fn().mockResolvedValue({ok:!1,status:500}),await r(s.firstStep(i)).rejects.toThrow("HTTP error! status: 500")})}),y("getStep",()=>{let a="step-123";l("should make POST request to /flow/:flowId/steps/:stepId",async()=>{let d=p;global.fetch=c.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(d)});let k=await s.getStep(a,i);r(global.fetch).toHaveBeenCalledWith(`${n.baseUrl}/flow/${n.flowId}/steps/${a}`,r.objectContaining({method:"POST",headers:r.any(Headers),body:JSON.stringify(i)})),r(k).toEqual(d)}),l("should throw error if options are invalid",async()=>{let d={state:"invalid-state"};await r(s.getStep(a,d)).rejects.toThrow(Error)}),l("should handle HTTP error",async()=>{global.fetch=c.fn().mockResolvedValue({ok:!1,status:500}),await r(s.getStep(a,i)).rejects.toThrow("HTTP error! status: 500")})}),y("nextStep",()=>{let a={currentStepId:"step-123",actionId:"action-123"};l("should make POST request to /flow/:flowId/steps/:currentStepId/action/:actionId",async()=>{let d=p;global.fetch=c.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(d)});let k=await s.nextStep(a,i);r(global.fetch).toHaveBeenCalledWith(`${n.baseUrl}/flow/${n.flowId}/steps/${a.currentStepId}/action/${a.actionId}`,r.objectContaining({method:"POST",headers:r.any(Headers),body:JSON.stringify(i)})),r(k).toEqual(d)}),l("should validate trigger",async()=>{let d={};await r(s.nextStep(d,i)).rejects.toThrow(f)}),l("should throw error if options are invalid",async()=>{let d={state:"invalid-state"};await r(s.nextStep(a,d)).rejects.toThrow(f)}),l("should handle HTTP error",async()=>{global.fetch=c.fn().mockResolvedValue({ok:!1,status:500}),await r(s.nextStep(a,i)).rejects.toThrow("HTTP error! status: 500")})})});
|
package/client/client.types.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/flow-client v0.1.
|
|
2
|
-
"use strict";var b=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var I=(n,i)=>{for(var r in i)b(n,r,{get:i[r],enumerable:!0})},L=(n,i,r,u)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of D(i))!_.call(n,a)&&a!==r&&b(n,a,{get:()=>i[a],enumerable:!(u=E(i,a))||u.enumerable});return n};var P=n=>L(b({},"__esModule",{value:!0}),n);var W={};I(W,{Action:()=>m,ActionEvent:()=>j,ActionScript:()=>x,ClientOptions:()=>S,DEFAULT_CLIENT_OPTIONS:()=>w,ErrorCode:()=>A,ErrorData:()=>v,EventType:()=>G,Field:()=>O,Flow:()=>h,FlowContext:()=>U,GetStepOptions:()=>R,GetStepTrigger:()=>C,PostAction:()=>N,Step:()=>T,StepId:()=>z});module.exports=P(W);var c=require("@onlive.ai/calendar"),o=require("zod");var t=require("zod");var d=t.z.object({enabled:t.z.boolean().default(!1).optional(),data:t.z.custom().optional(),removeExtraneousValues:t.z.boolean().default(!0).optional(),allowBotTraffic:t.z.boolean().default(!1).optional(),adapters:t.z.array(t.z.string()).default([]).optional(),apiUrl:t.z.string().url().optional(),emitters:t.z.object({windowEvent:t.z.boolean().optional(),dataLayer:t.z.boolean().optional(),windowPostMessage:t.z.boolean().optional()}).optional()});var w={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},z=o.z.string().nonempty(),S=o.z.object({baseUrl:o.z.string().url().nonempty(),flowId:o.z.string().length(24).nonempty(),organizationId:o.z.string().uuid().nonempty(),lang:o.z.string().length(2).nonempty(),tracking:d.optional(),devMode:o.z.boolean().default(!1).optional()}),R=o.z.object({state:o.z.record(o.z.string(),o.z.any()).optional(),fields:o.z.record(o.z.string(),o.z.any()).optional()}),C=o.z.object({currentStepId:o.z.string().nonempty(),actionId:o.z.string().nonempty()}),f=o.z.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),F=o.z.object({name:o.z.string(),value:o.z.string().optional(),icon:o.z.string().optional(),type:o.z.enum(["url","email","phone"]).optional()}),k=o.z.object({lat:o.z.number().min(-90).max(90),lng:o.z.number().min(-180).max(180),meta:o.z.record(o.z.string(),o.z.any()).optional(),properties:o.z.record(o.z.string(),F).optional()}),M=o.z.object({datetime:o.z.string().datetime(),meta:o.z.record(o.z.string(),o.z.any()).optional()}),s=o.z.union([o.z.string(),o.z.number(),o.z.boolean(),k,M]),l=o.z.object({content:o.z.object({icon:o.z.string().optional(),url:o.z.string().url().optional(),width:o.z.string().optional(),height:o.z.string().optional(),scale:o.z.number().optional()}).optional(),background:o.z.string().optional(),glyph:o.z.object({color:o.z.string().optional(),url:o.z.string().url().optional(),icon:o.z.string().optional()}).optional(),borderColor:o.z.string().optional(),scale:o.z.number().optional()}),p=o.z.custom(n=>/^\d{4}-\d{2}-\d{2}$/.test(n),{message:"Date must be in 'YYYY-MM-DD' format"}),e=o.z.object({text:o.z.string().optional(),icon:o.z.string().optional()}),g=o.z.object({fieldName:o.z.string().nonempty(),value:s.optional(),operator:o.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),V=o.z.object({and:o.z.array(g).optional(),or:o.z.array(g).optional()}),y=o.z.array(o.z.union([g,V])),x=o.z.object({src:o.z.string().url(),preload:o.z.boolean().optional(),name:o.z.string().nonempty(),function:o.z.string().nonempty(),params:o.z.record(o.z.string(),o.z.any()).optional()}),j=o.z.object({name:o.z.enum(["organization_call","close_panel","retry_first_step","retry_next_step"]),params:o.z.record(o.z.string(),o.z.any()).optional()}),m=o.z.object({id:o.z.string().nonempty(),type:o.z.enum(["submit","navigate","link","back","dispatcher","script"]),label:o.z.string().nonempty(),variant:o.z.enum(["primary","secondary","success","danger","warning","info"]),position:o.z.enum(["top","bottom"]).optional(),url:o.z.string().url().optional(),loadingBehavior:o.z.enum(["none","spinner","disabled"]).optional(),prefix:e.optional(),suffix:e.optional(),scripts:x.array().optional(),events:j.array().optional()}),v=o.z.object({message:o.z.string().optional(),icon:o.z.string().optional(),position:o.z.enum(["top","bottom"]).optional(),kind:o.z.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:o.z.array(m).optional()}),O=o.z.object({name:o.z.string().nonempty(),label:o.z.string().optional(),value:o.z.union([s,o.z.array(s)]).optional(),type:f,component:o.z.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar"]).optional(),disabled:o.z.boolean().optional(),readonly:o.z.boolean().optional(),multiple:o.z.boolean().optional(),placeholder:o.z.string().optional(),options:o.z.array(o.z.object({id:o.z.string().optional(),label:o.z.string().nonempty(),value:s.optional(),image:o.z.string().url().optional(),description:o.z.string().optional(),disabled:o.z.boolean().optional(),attributes:o.z.record(o.z.string(),o.z.any()).optional(),actions:o.z.array(m).optional(),dependsOn:y.optional()})).optional(),required:o.z.boolean().optional(),configuration:o.z.object({generic:o.z.object({error:o.z.object({loading:v.optional(),validation:o.z.object({icon:o.z.string().optional(),showOn:o.z.enum(["input","blur"]).optional()}).optional()})}).optional(),input:o.z.object({min:o.z.number().optional(),max:o.z.number().optional(),step:o.z.number().optional(),pattern:o.z.string().refine(n=>{try{return new RegExp(n),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:o.z.number().optional(),maxLength:o.z.number().optional(),exactLength:o.z.number().optional(),prefix:o.z.object({default:e.optional(),success:e.optional(),error:e.optional()}).optional(),suffix:o.z.object({default:e.optional(),success:e.optional(),error:e.optional()}).optional(),clearable:o.z.boolean().optional(),floatingLabel:o.z.boolean().optional()}).optional(),textarea:o.z.object({minLength:o.z.number().optional(),maxLength:o.z.number().optional(),exactLength:o.z.number().optional(),rows:o.z.number().optional()}).optional(),checkbox:o.z.object({layout:o.z.enum(["horizontal","vertical"])}).optional(),rating:o.z.object({icons:o.z.array(o.z.string()).optional(),color:o.z.string().optional(),precision:o.z.number().optional()}).optional(),carousel:o.z.object({loop:o.z.boolean().optional(),mouseDragging:o.z.boolean().optional(),itemsPerPage:o.z.object({small:o.z.number(),medium:o.z.number().optional(),large:o.z.number().optional()}).optional(),itemsPerMove:o.z.object({small:o.z.number(),medium:o.z.number().optional(),large:o.z.number().optional()}).optional(),showArrows:o.z.boolean().optional(),showDots:o.z.boolean().optional(),autoplay:o.z.boolean().optional(),autoplaySpeed:o.z.number().optional(),clickableItems:o.z.object({actionId:o.z.string()}).optional()}).optional(),grid:o.z.object({search:o.z.object({enabled:o.z.boolean().optional(),value:o.z.string().optional(),button:o.z.object({label:o.z.string().optional()}).optional(),placeholder:o.z.string().optional(),noResultsText:o.z.string().optional(),clearable:o.z.boolean().optional()}).optional(),itemsPerRow:o.z.object({small:o.z.number(),medium:o.z.number().optional(),large:o.z.number().optional()}).optional(),itemsPerPage:o.z.object({small:o.z.number(),medium:o.z.number().optional(),large:o.z.number().optional()}).optional(),clickableItems:o.z.object({actionId:o.z.string()}).optional()}).optional(),map:o.z.object({apiKey:o.z.string().optional(),region:o.z.string().length(2).optional(),center:o.z.object({lat:o.z.number().min(-90).max(90),lng:o.z.number().min(-180).max(180)}).optional(),showMap:o.z.enum(["always","on-search","never"]).optional(),zoom:o.z.object({initial:o.z.number().optional(),focus:o.z.number().optional(),max:o.z.number().optional(),min:o.z.number().optional()}).optional(),controls:o.z.object({fullscreen:o.z.boolean().optional(),mapType:o.z.boolean().optional(),zoom:o.z.boolean().optional(),rotate:o.z.boolean().optional(),scale:o.z.boolean().optional(),streetView:o.z.boolean().optional()}).optional(),initialLocations:o.z.number().optional(),maxLocations:o.z.number().optional(),distanceUnit:o.z.enum(["km","mi"]).optional(),distanceFormat:o.z.enum(["short","long"]).optional(),options:o.z.object({show:o.z.enum(["always","on-search","never"]).optional(),component:o.z.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:o.z.string().optional(),detailsLabel:o.z.string().optional()}).optional(),search:o.z.object({enabled:o.z.boolean().optional(),value:o.z.string().optional(),button:o.z.object({label:o.z.string().optional(),position:o.z.enum(["inside","outside"]).optional()}).optional(),placeholder:o.z.string().optional(),noResultsText:o.z.string().optional(),autocomplete:o.z.boolean().optional(),clearable:o.z.boolean().optional(),mode:o.z.enum(["address","postcode"]).default("postcode").optional(),locationButton:o.z.object({icon:o.z.string().optional(),position:o.z.enum(["left","right"]).optional()}).optional(),prefix:o.z.object({default:e.optional()}).optional(),suffix:o.z.object({default:e.optional()}).optional()}).optional(),distanceRange:o.z.object({initial:o.z.number().optional(),min:o.z.number().optional(),max:o.z.number().optional(),step:o.z.number().optional()}).optional(),mapRegion:o.z.object({strokeColor:o.z.string().optional(),fillColor:o.z.string().optional(),fillOpacity:o.z.number().optional()}).optional(),locationPin:l.optional(),markerPin:o.z.object({default:l.optional(),hover:l.optional(),selected:l.optional()}).optional(),infoWindow:o.z.object({button:o.z.object({label:o.z.string(),action:o.z.string()}).optional()}).optional(),ordering:o.z.object({orderBy:o.z.enum(["distance","title","id"]).optional(),orderDir:o.z.enum(["asc","desc"]).optional(),preferences:o.z.array(o.z.object({ids:o.z.string().array(),filters:o.z.object({postcodes:o.z.string().array().optional()}).optional()}))}).optional(),clickableItems:o.z.object({actionId:o.z.string()}).optional(),forcePolyfills:o.z.boolean().optional()}).optional(),calendar:o.z.object({current:o.z.object({month:o.z.number().min(0).max(11).optional(),year:o.z.number().optional()}).optional(),range:o.z.object({min:p.optional(),max:p.optional(),enabled:o.z.array(p).optional(),disabled:o.z.array(p).optional()}).optional(),time:o.z.object({label:o.z.string().optional(),format:o.z.enum(["12h","24h"]).optional(),component:o.z.enum(["carousel","list"]).optional()}).optional(),api:o.z.object({url:o.z.string().url().nonempty(),organizationId:o.z.string().nonempty(),availability:o.z.object({filters:c.GetAvailabilityFilters,options:c.GetAvailabilityOptions.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:y.optional(),dependentBehavior:o.z.enum(["hidden","disabled"]).optional(),customError:o.z.object({required:o.z.string().optional(),invalid:o.z.string().optional(),minLength:o.z.string().optional(),maxLength:o.z.string().optional(),minValue:o.z.string().optional(),maxValue:o.z.string().optional(),mismatch:o.z.string().optional()}).optional()}),A=o.z.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),N=o.z.object({type:o.z.enum(["redirect"]),params:o.z.record(o.z.string(),o.z.any()).optional()}),T=o.z.object({id:o.z.string().nonempty(),title:o.z.string().optional(),description:o.z.string().optional(),stageId:o.z.string().optional(),state:o.z.record(o.z.string(),o.z.any()).optional(),fields:o.z.array(O).optional(),actions:o.z.array(m).optional(),result:o.z.object({postActions:o.z.array(N).optional(),pipelines:o.z.array(o.z.object({name:o.z.string(),data:o.z.object({})})).optional(),tracking:o.z.record(o.z.string(),o.z.any()).optional()}).optional(),error:o.z.object({code:A,message:o.z.string().optional(),icon:o.z.string().optional(),position:o.z.enum(["top","bottom"]).optional(),fields:o.z.array(o.z.object({name:o.z.string(),type:f,value:o.z.any(),error:o.z.string()})).optional()}).optional(),isFinal:o.z.boolean().optional()}),h=o.z.object({id:o.z.string().length(24).nonempty(),organizationId:o.z.string().uuid().nonempty(),updatedAt:o.z.string().datetime().nonempty(),stages:o.z.array(o.z.object({id:o.z.string().nonempty(),name:o.z.string().nonempty()}))}),U=o.z.object({status:o.z.enum(["ok","error"]),step:T,flow:h}),G=o.z.enum(["track"]);0&&(module.exports={Action,ActionEvent,ActionScript,ClientOptions,DEFAULT_CLIENT_OPTIONS,ErrorCode,ErrorData,EventType,Field,Flow,FlowContext,GetStepOptions,GetStepTrigger,PostAction,Step,StepId});
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.209 | © 2026 Onlive.ai */
|
|
2
|
+
"use strict";var g=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var P=(n,i)=>{for(var l in i)g(n,l,{get:i[l],enumerable:!0})},w=(n,i,l,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of N(i))!L.call(n,r)&&r!==l&&g(n,r,{get:()=>i[r],enumerable:!(a=I(i,r))||a.enumerable});return n};var S=n=>w(g({},"__esModule",{value:!0}),n);var B={};P(B,{Action:()=>b,ActionEvent:()=>O,ActionScript:()=>T,ClientOptions:()=>R,ColorScheme:()=>y,DEFAULT_CLIENT_OPTIONS:()=>F,DEFAULT_MAP_ID:()=>z,ErrorCode:()=>A,ErrorData:()=>h,EventType:()=>Y,Field:()=>v,Flow:()=>D,FlowContext:()=>W,GetStepOptions:()=>C,GetStepTrigger:()=>M,PostAction:()=>_,Step:()=>E,StepId:()=>k});module.exports=S(B);var m=require("@onlive.ai/calendar"),u=require("@onlive.ai/calendar/client/client.types.js"),o=require("zod");var t=require("zod");var f=t.z.object({enabled:t.z.boolean().default(!1).optional(),data:t.z.custom().optional(),removeExtraneousValues:t.z.boolean().default(!0).optional(),allowBotTraffic:t.z.boolean().default(!1).optional(),adapters:t.z.array(t.z.string()).default([]).optional(),apiUrl:t.z.string().url().optional(),emitters:t.z.object({windowEvent:t.z.boolean().optional(),dataLayer:t.z.boolean().optional(),windowPostMessage:t.z.boolean().optional()}).optional()});var z="bf585082a22fad962b4cbc08",y=(a=>(a.DARK="DARK",a.FOLLOW_SYSTEM="FOLLOW_SYSTEM",a.LIGHT="LIGHT",a))(y||{}),F={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},k=o.z.string().nonempty(),R=o.z.object({baseUrl:o.z.string().url().nonempty(),flowId:o.z.string().length(24).nonempty(),organizationId:o.z.string().uuid().nonempty(),lang:o.z.string().length(2).nonempty(),tracking:f.optional(),devMode:o.z.boolean().default(!1).optional()}),C=o.z.object({state:o.z.record(o.z.string(),o.z.any()).optional(),fields:o.z.record(o.z.string(),o.z.any()).optional()}),M=o.z.object({currentStepId:o.z.string().nonempty(),actionId:o.z.string().nonempty()}),j=o.z.enum(["text","boolean","number","first_name","last_name","name","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),V=o.z.object({name:o.z.string().optional(),value:o.z.string().optional(),icon:o.z.string().optional(),type:o.z.enum(["url","email","phone"]).optional()}),U=o.z.object({lat:o.z.number().min(-90).max(90),lng:o.z.number().min(-180).max(180),meta:o.z.record(o.z.string(),o.z.any()).optional(),properties:o.z.record(o.z.string(),V).optional()}),G=o.z.object({datetime:o.z.string().datetime(),meta:o.z.record(o.z.string(),o.z.any()).optional()}),c=o.z.union([o.z.string(),o.z.number(),o.z.boolean(),U,G]),p=o.z.object({content:o.z.object({icon:o.z.string().optional(),url:o.z.string().url().optional(),width:o.z.string().optional(),height:o.z.string().optional(),scale:o.z.number().optional()}).optional(),background:o.z.string().optional(),glyph:o.z.object({color:o.z.string().optional(),url:o.z.string().url().optional(),icon:o.z.string().optional()}).optional(),borderColor:o.z.string().optional(),scale:o.z.number().optional()}),s=o.z.custom(n=>typeof n=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(n),{message:"Date must be in 'YYYY-MM-DD' format"}),e=o.z.object({text:o.z.string().optional(),icon:o.z.string().optional()}),d=o.z.object({fieldName:o.z.string().nonempty(),value:c.optional(),operator:o.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()}),K=o.z.object({and:o.z.array(d).optional(),or:o.z.array(d).optional()}),x=o.z.array(o.z.union([d,K])),T=o.z.object({src:o.z.string().url(),preload:o.z.boolean().optional(),name:o.z.string().nonempty(),function:o.z.string().nonempty(),params:o.z.array(o.z.record(o.z.string(),o.z.any())).optional()}),O=o.z.object({name:o.z.enum(["organization_call","close_panel","retry_first_step","retry_next_step","organization_chat"]),params:o.z.record(o.z.string(),o.z.any()).optional()}),b=o.z.object({id:o.z.string().nonempty(),type:o.z.enum(["submit","navigate","link","back","dispatcher","script"]),label:o.z.string().nonempty(),variant:o.z.enum(["primary","secondary","success","danger","warning","info"]),position:o.z.enum(["top","bottom"]).optional(),url:o.z.string().url().optional(),target:o.z.enum(["_self","_blank","_parent","_top"]).optional(),loadingBehavior:o.z.enum(["none","spinner","disabled"]).optional(),prefix:e.optional(),suffix:e.optional(),scripts:T.array().optional(),events:O.array().optional()}),h=o.z.object({message:o.z.string().optional(),icon:o.z.string().optional(),position:o.z.enum(["top","bottom"]).optional(),kind:o.z.enum(["initial-loading","step-loading","step-validation","field-loading"]).optional(),actions:o.z.array(b).optional()}),v=o.z.object({name:o.z.string().nonempty(),label:o.z.string().optional(),value:o.z.union([c,o.z.array(c)]).optional(),type:j,component:o.z.enum(["input","phone_input","textarea","select","radio","checkbox","switch","rating","carousel","grid","button","label","map","calendar","stripe_payment"]).optional(),disabled:o.z.boolean().optional(),readonly:o.z.boolean().optional(),multiple:o.z.boolean().optional(),placeholder:o.z.string().optional(),options:o.z.array(o.z.object({id:o.z.string().optional(),label:o.z.string().nonempty(),value:c.optional(),image:o.z.string().url().optional(),description:o.z.string().optional(),disabled:o.z.boolean().optional(),attributes:o.z.record(o.z.string(),o.z.any()).optional(),actions:o.z.array(b).optional(),dependsOn:x.optional()})).optional(),required:o.z.boolean().optional(),configuration:o.z.object({generic:o.z.object({error:o.z.object({loading:h.optional(),validation:o.z.object({icon:o.z.string().optional(),showOn:o.z.enum(["input","blur"]).optional()}).optional()})}).optional(),input:o.z.object({min:o.z.number().optional(),max:o.z.number().optional(),step:o.z.number().optional(),pattern:o.z.string().refine(n=>{try{return new RegExp(n),!0}catch{return!1}},"Invalid regex pattern").optional(),minLength:o.z.number().optional(),maxLength:o.z.number().optional(),exactLength:o.z.number().optional(),prefix:o.z.object({default:e.optional(),success:e.optional(),error:e.optional()}).optional(),suffix:o.z.object({default:e.optional(),success:e.optional(),error:e.optional()}).optional(),clearable:o.z.boolean().optional(),floatingLabel:o.z.boolean().optional()}).optional(),phoneInput:o.z.object({includePrefixValue:o.z.boolean().optional(),showFlag:o.z.boolean().optional(),showCode:o.z.boolean().optional(),prefixLabel:o.z.string().optional(),lockedPrefix:o.z.boolean().optional(),countries:o.z.array(o.z.string()).optional(),defaultPrefix:o.z.string().optional(),autoDetectCountry:o.z.boolean().optional()}).optional(),textarea:o.z.object({minLength:o.z.number().optional(),maxLength:o.z.number().optional(),exactLength:o.z.number().optional(),rows:o.z.number().optional()}).optional(),checkbox:o.z.object({layout:o.z.enum(["horizontal","vertical"])}).optional(),rating:o.z.object({icons:o.z.array(o.z.string()).optional(),color:o.z.string().optional(),precision:o.z.number().optional()}).optional(),carousel:o.z.object({loop:o.z.boolean().optional(),mouseDragging:o.z.boolean().optional(),itemsPerPage:o.z.object({small:o.z.number(),medium:o.z.number().optional(),large:o.z.number().optional()}).optional(),itemsPerMove:o.z.object({small:o.z.number(),medium:o.z.number().optional(),large:o.z.number().optional()}).optional(),showArrows:o.z.boolean().optional(),showDots:o.z.boolean().optional(),autoplay:o.z.boolean().optional(),autoplaySpeed:o.z.number().optional(),clickableItems:o.z.object({actionId:o.z.string()}).optional()}).optional(),grid:o.z.object({search:o.z.object({enabled:o.z.boolean().optional(),value:o.z.string().optional(),button:o.z.object({label:o.z.string().optional()}).optional(),placeholder:o.z.string().optional(),noResultsText:o.z.string().optional(),clearable:o.z.boolean().optional()}).optional(),itemsPerRow:o.z.object({small:o.z.number(),medium:o.z.number().optional(),large:o.z.number().optional()}).optional(),itemsPerPage:o.z.object({small:o.z.number(),medium:o.z.number().optional(),large:o.z.number().optional()}).optional(),clickableItems:o.z.object({actionId:o.z.string()}).optional()}).optional(),map:o.z.object({apiKey:o.z.string().optional(),mapId:o.z.string().optional(),region:o.z.string().length(2).optional(),colorScheme:o.z.nativeEnum(y).optional(),center:o.z.object({lat:o.z.number().min(-90).max(90),lng:o.z.number().min(-180).max(180)}).optional(),showMap:o.z.enum(["always","on-search","never"]).optional(),zoom:o.z.object({initial:o.z.number().optional(),focus:o.z.number().optional(),max:o.z.number().optional(),min:o.z.number().optional()}).optional(),controls:o.z.object({fullscreen:o.z.boolean().optional(),mapType:o.z.boolean().optional(),zoom:o.z.boolean().optional(),rotate:o.z.boolean().optional(),scale:o.z.boolean().optional(),streetView:o.z.boolean().optional()}).optional(),initialLocations:o.z.number().optional(),maxLocations:o.z.number().optional(),distanceUnit:o.z.enum(["km","mi"]).optional(),distanceFormat:o.z.enum(["short","long"]).optional(),distanceDecimals:o.z.number().optional(),options:o.z.object({show:o.z.enum(["always","on-search","never"]).optional(),component:o.z.enum(["list-button","list-radio","carousel"]).optional(),searchLabel:o.z.string().optional(),detailsLabel:o.z.string().optional()}).optional(),search:o.z.object({enabled:o.z.boolean().optional(),value:o.z.string().optional(),button:o.z.object({label:o.z.string().optional(),position:o.z.enum(["inside","outside"]).optional()}).optional(),placeholder:o.z.string().optional(),noResultsText:o.z.string().optional(),autocomplete:o.z.boolean().optional(),clearable:o.z.boolean().optional(),mode:o.z.enum(["address","postcode"]).default("postcode").optional(),locationButton:o.z.object({icon:o.z.string().optional(),position:o.z.enum(["left","right"]).optional()}).optional(),prefix:o.z.object({default:e.optional()}).optional(),suffix:o.z.object({default:e.optional()}).optional()}).optional(),distanceRange:o.z.object({initial:o.z.number().optional(),min:o.z.number().optional(),max:o.z.number().optional(),step:o.z.number().optional()}).optional(),mapRegion:o.z.object({strokeColor:o.z.string().optional(),fillColor:o.z.string().optional(),fillOpacity:o.z.number().optional()}).optional(),locationPin:p.optional(),markerPin:o.z.object({default:p.optional(),hover:p.optional(),selected:p.optional()}).optional(),infoWindow:o.z.object({button:o.z.object({label:o.z.string(),action:o.z.string()}).optional()}).optional(),ordering:o.z.object({orderBy:o.z.enum(["distance","title","id"]).optional(),orderDir:o.z.enum(["asc","desc"]).optional(),preferences:o.z.array(o.z.object({ids:o.z.string().array(),filters:o.z.object({postcodes:o.z.string().array().optional()}).optional()}))}).optional(),clickableItems:o.z.object({actionId:o.z.string()}).optional(),forcePolyfills:o.z.boolean().optional()}).optional(),calendar:o.z.object({current:o.z.object({month:o.z.number().min(0).max(11).optional(),year:o.z.number().optional()}).optional(),range:o.z.object({min:s.optional(),max:s.optional(),enabled:o.z.array(s).optional(),disabled:o.z.array(s).optional()}).optional(),time:o.z.object({label:o.z.string().optional(),format:o.z.enum(["12h","24h"]).optional(),component:o.z.enum(["carousel","list"]).optional()}).optional(),api:o.z.object({version:o.z.string().optional(),url:o.z.string().url().nonempty(),organizationId:o.z.string().nonempty(),availability:o.z.object({filters:m.GetAvailabilityFilters,options:m.GetAvailabilityOptions.optional()}).optional(),slots:o.z.object({filters:u.GetSlotFilters,options:u.GetSlotOptions.optional()}).optional()}).optional()}).optional(),stripe:o.z.object({publishableKey:o.z.string().nonempty(),mode:o.z.enum(["payment","setup"]).default("payment").optional(),createPaymentIntentEndpoint:o.z.string().url().optional(),createSetupIntentEndpoint:o.z.string().url().optional(),clientSecret:o.z.string().optional(),paymentIntentId:o.z.string().optional(),setupIntentId:o.z.string().optional(),amount:o.z.number().optional(),currency:o.z.string().default("usd").optional(),connectedAccountId:o.z.string().optional(),returnUrl:o.z.string().url().optional(),headers:o.z.record(o.z.string(),o.z.string()).optional(),paymentIntentParams:o.z.record(o.z.string(),o.z.unknown()).optional(),appearance:o.z.object({theme:o.z.enum(["stripe","night","flat"]).optional(),variables:o.z.record(o.z.string(),o.z.string()).optional(),rules:o.z.record(o.z.string(),o.z.record(o.z.string(),o.z.string())).optional()}).optional(),layout:o.z.enum(["tabs","accordion","auto"]).optional(),elementOptions:o.z.record(o.z.string(),o.z.unknown()).optional(),terms:o.z.object({card:o.z.enum(["auto","always","never"]).optional()}).optional(),customTermsText:o.z.string().optional(),openDialogButtonText:o.z.string().optional(),confirmButtonText:o.z.string().optional(),cancelButtonText:o.z.string().optional(),authorizedText:o.z.string().optional(),successMessage:o.z.string().optional(),setupSuccessMessage:o.z.string().optional(),infoText:o.z.string().optional(),amountLabel:o.z.string().optional(),loadingElementText:o.z.string().optional(),showAmount:o.z.boolean().optional(),dialogTitle:o.z.string().optional(),autoOpenDialog:o.z.boolean().optional(),actionId:o.z.string().optional()}).optional()}).optional(),dependsOn:x.optional(),dependentBehavior:o.z.enum(["hidden","disabled"]).optional(),customError:o.z.object({required:o.z.string().optional(),invalid:o.z.string().optional(),minLength:o.z.string().optional(),maxLength:o.z.string().optional(),minValue:o.z.string().optional(),maxValue:o.z.string().optional(),mismatch:o.z.string().optional()}).optional()}),A=o.z.enum(["INVALID_DATA","INVALID_ACTION","STEP_NOT_FOUND","UNKNOWN_ERROR","APPOINTMENT_INVALID_DATA","APPOINTMENT_BUSY_SLOT","APPOINTMENT_OUT_OF_DATE","APPOINTMENT_UNKNOWN_ERROR","LEAD_INVALID_DATA","LEAD_UNKNOWN_ERROR","CONTENT_INVALID_DATA","CONTENT_UNKNOWN_ERROR","CONTACT_INVALID_DATA","CONTACT_UNKNOWN_ERROR","LOST_OPPORTUNITY_INVALID_DATA","LOST_OPPORTUNITY_UNKNOWN_ERROR"]),_=o.z.object({type:o.z.enum(["redirect"]),params:o.z.record(o.z.string(),o.z.any()).optional()}),E=o.z.object({id:o.z.string().nonempty(),number:o.z.number().optional(),title:o.z.string().optional(),description:o.z.string().optional(),stageId:o.z.string().optional(),state:o.z.record(o.z.string(),o.z.any()).optional(),fields:o.z.array(v).optional(),actions:o.z.array(b).optional(),result:o.z.object({postActions:o.z.array(_).optional(),pipelines:o.z.array(o.z.object({name:o.z.string(),data:o.z.object({})})).optional(),tracking:o.z.record(o.z.string(),o.z.any()).optional()}).optional(),error:o.z.object({code:A,message:o.z.string().optional(),icon:o.z.string().optional(),position:o.z.enum(["top","bottom"]).optional(),fields:o.z.array(o.z.object({name:o.z.string(),type:j,value:o.z.any(),error:o.z.string()})).optional()}).optional(),isFinal:o.z.boolean().optional()}),D=o.z.object({id:o.z.string().length(24).nonempty(),organizationId:o.z.string().uuid().nonempty(),updatedAt:o.z.string().datetime().nonempty(),stages:o.z.array(o.z.object({id:o.z.string().nonempty(),name:o.z.string().nonempty()}))}),W=o.z.object({status:o.z.enum(["ok","error"]),step:E,flow:D}),Y=o.z.enum(["track"]);0&&(module.exports={Action,ActionEvent,ActionScript,ClientOptions,ColorScheme,DEFAULT_CLIENT_OPTIONS,DEFAULT_MAP_ID,ErrorCode,ErrorData,EventType,Field,Flow,FlowContext,GetStepOptions,GetStepTrigger,PostAction,Step,StepId});
|