@onlive.ai/flow-client 0.1.50 → 0.1.55
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/README.md +12 -12
- package/client/client.service.cjs +2 -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 +422 -144
- package/client/client.types.d.ts +422 -144
- package/client/client.types.js +2 -2
- package/flow.types.cjs +1 -1
- package/flow.types.js +1 -1
- package/index.cjs +2 -2
- package/index.js +2 -2
- package/package.json +5 -5
- package/schema-generator.cjs +3 -3
- package/schema-generator.js +3 -3
- package/tracking/tracking.service.cjs +2 -2
- package/tracking/tracking.service.js +2 -2
- package/tracking/tracking.types.cjs +1 -1
- package/tracking/tracking.types.d.cts +32 -96
- package/tracking/tracking.types.d.ts +32 -96
- package/tracking/tracking.types.js +1 -1
package/README.md
CHANGED
|
@@ -53,9 +53,9 @@ This package depends on:
|
|
|
53
53
|
### Basic Import
|
|
54
54
|
|
|
55
55
|
```typescript
|
|
56
|
-
import { FlowClient } from
|
|
56
|
+
import { FlowClient } from "@onlive.ai/flow-client";
|
|
57
57
|
// or
|
|
58
|
-
import { FlowClient, type FlowContext, type ClientOptions } from
|
|
58
|
+
import { FlowClient, type FlowContext, type ClientOptions } from "@onlive.ai/flow-client";
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
### Initialization
|
|
@@ -188,7 +188,7 @@ pnpm clean
|
|
|
188
188
|
### Complete Flow Example
|
|
189
189
|
|
|
190
190
|
```typescript
|
|
191
|
-
import { FlowClient } from
|
|
191
|
+
import { FlowClient } from "@onlive.ai/flow-client";
|
|
192
192
|
|
|
193
193
|
const client = new FlowClient({
|
|
194
194
|
baseUrl: "https://api.example.com",
|
|
@@ -198,31 +198,31 @@ const client = new FlowClient({
|
|
|
198
198
|
});
|
|
199
199
|
|
|
200
200
|
// Set up event tracking
|
|
201
|
-
client.on(
|
|
202
|
-
console.log(
|
|
201
|
+
client.on("track", (eventType, eventData) => {
|
|
202
|
+
console.log("Flow event:", eventType, eventData);
|
|
203
203
|
});
|
|
204
204
|
|
|
205
205
|
// Start the flow
|
|
206
206
|
try {
|
|
207
207
|
const firstStep = await client.firstStep();
|
|
208
|
-
console.log(
|
|
209
|
-
|
|
208
|
+
console.log("First step:", firstStep);
|
|
209
|
+
|
|
210
210
|
// Progress through the flow
|
|
211
211
|
const nextStep = await client.nextStep({
|
|
212
212
|
currentStepId: firstStep.step.id,
|
|
213
|
-
actionId:
|
|
213
|
+
actionId: "continue",
|
|
214
214
|
});
|
|
215
|
-
|
|
216
|
-
console.log(
|
|
215
|
+
|
|
216
|
+
console.log("Next step:", nextStep);
|
|
217
217
|
} catch (error) {
|
|
218
|
-
console.error(
|
|
218
|
+
console.error("Flow error:", error);
|
|
219
219
|
}
|
|
220
220
|
```
|
|
221
221
|
|
|
222
222
|
### Getting a Specific Step
|
|
223
223
|
|
|
224
224
|
```typescript
|
|
225
|
-
const specificStep = await client.getStep(
|
|
225
|
+
const specificStep = await client.getStep("step-id-123", {
|
|
226
226
|
// optional additional parameters
|
|
227
227
|
});
|
|
228
228
|
```
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/flow-client v0.1.
|
|
2
|
-
"use strict";var u=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var z=(i,e,o)=>e in i?u(i,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):i[e]=o;var R=(i,e)=>{for(var o in e)u(i,o,{get:e[o],enumerable:!0})},P=(i,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of L(e))!D.call(i,r)&&r!==o&&u(i,r,{get:()=>e[r],enumerable:!(n=w(e,r))||n.enumerable});return i};var F=i=>P(u({},"__esModule",{value:!0}),i);var p=(i,e,o)=>z(i,typeof e!="symbol"?e+"":e,o);var J={};R(J,{FlowClient:()=>v,default:()=>H});module.exports=F(J);var A=require("@onlive.ai/common-121/utils/merge.js");var l=require("@onlive.ai/tracker"),_=require("@onlive.ai/common-121/utils/merge.js"),O=require("@onlive.ai/common-121/utils/browser-preferences.js");var a=require("zod"),m="flow_form",T="onlive-analytics-event",g=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(e,o,n,r){p(this,"options");p(this,"tracker");p(this,"eventListeners",[]);this.options=g.parse(n),this.tracker=new l.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:e,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:l.Session.id,interaction_id:l.Session.interactionId,extra:{flow_id:o}},this.options.data)),window.addEventListener(T,({detail:c})=>this.emit(c.event,c.data))}getTracker(){return this.tracker}preferences(){return{...(0,O.browserPreferences)(),interactionId:l.Session.interactionId,guestId:l.Session.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?m:void 0,step_name:e.currentStepId}),o.fields&&this.tracker.send("form_submit",{form_name:m,form_data:o.fields,step_name:e.currentStepId}))}analyzeResponse(e,o){"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,step_name:o.step.id})}),o.step.error&&this.tracker.send("form_error",{form_name:m,form_error:o.step.error.code,step_name:o.step.id})),this.tracker.send("impression",{impression_type:"step",form_name:void 0,step_name:o.step.id,step_initial:!("currentStepId"in e)||void 0,step_final:o.step.isFinal}),this.tracker.setBase({form_name:m,step_name:o.step.id,step_initial:!("currentStepId"in e)||void 0,step_final:o.step.isFinal,...o.step.result?.tracking})}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}))}},E=x;var y=require("@onlive.ai/calendar"),t=require("zod");var N={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},j=t.z.string().nonempty(),I=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:g.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()}),k=t.z.object({currentStepId:t.z.string().nonempty(),actionId:t.z.string().nonempty()}),S=t.z.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),C=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()}),U=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(),C).optional()}),V=t.z.object({datetime:t.z.string().datetime(),meta:t.z.record(t.z.string(),t.z.any()).optional()}),d=t.z.union([t.z.string(),t.z.number(),t.z.boolean(),U,V]),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()}),f=t.z.custom(i=>/^\d{4}-\d{2}-\d{2}$/.test(i),{message:"Date must be in 'YYYY-MM-DD' format"}),s=t.z.object({text:t.z.string().optional(),icon:t.z.string().optional()}),M=t.z.object({name:t.z.string().nonempty(),label:t.z.string().optional(),value:t.z.union([d,t.z.array(d)]).optional(),type:S,component:t.z.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({label:t.z.string().nonempty(),value:d.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(),dependsOn:t.z.array(t.z.object({fieldName:t.z.string().nonempty(),value:d.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).optional()})).optional(),required:t.z.boolean().optional(),configuration:t.z.object({generic:t.z.object({error:t.z.object({icon:t.z.string().optional(),showOn:t.z.enum(["input","blur"]).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: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(),textarea:t.z.object({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(),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({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(),mappedResults:t.z.object({mapping:t.z.record(t.z.string(),t.z.array(t.z.object({key:t.z.string(),value:t.z.string()})))}).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()}).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:f.optional(),max:f.optional(),enabled:t.z.array(f).optional(),disabled:t.z.array(f).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:y.GetAvailabilityFilters,options:y.GetAvailabilityOptions.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:t.z.array(t.z.object({fieldName:t.z.string().nonempty(),value:d.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).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()}),G=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()}),$=t.z.object({name:t.z.enum(["organization_call","close_panel"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),q=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"]),url:t.z.string().url().optional(),scripts:G.array().optional(),events:$.array().optional()}),B=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"]),W=t.z.object({type:t.z.enum(["redirect"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),Y=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(M).optional(),actions:t.z.array(q).optional(),result:t.z.object({postActions:t.z.array(W).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:B,message:t.z.string().optional(),fields:t.z.array(t.z.object({name:t.z.string(),type:S,value:t.z.any(),error:t.z.string()})).optional()}).optional(),isFinal:t.z.boolean().optional()}),K=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:Y,flow:K}),st=t.z.enum(["track"]);var v=class{constructor(e){p(this,"baseURL");p(this,"headers");p(this,"flowId");p(this,"tracking");let o=(0,A.merge)({},N,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 E(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?.preferences(),n=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(h.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(),r=await this.request(`flow/${this.flowId}/steps/${j.parse(e)}`,{method:"POST",body:JSON.stringify(h.parse({...o,state:{preferences:n,...o.state}}))});return this.tracking?.analyzeResponse({stepId:e},r),r}async nextStep(e,o={}){this.tracking?.analyzeRequest(e,o);let{currentStepId:n,actionId:r}=k.parse(e),c=await this.request(`flow/${this.flowId}/steps/${n}/action/${r}`,{method:"POST",body:JSON.stringify(h.parse(o))});return this.tracking?.analyzeResponse(e,c),c}},H=v;0&&(module.exports={FlowClient});
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.55 | © 2025 Onlive.ai */
|
|
2
|
+
"use strict";var d=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var z=(i,o,e)=>o in i?d(i,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[o]=e;var P=(i,o)=>{for(var e in o)d(i,e,{get:o[e],enumerable:!0})},R=(i,o,e,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of L(o))!D.call(i,r)&&r!==e&&d(i,r,{get:()=>o[r],enumerable:!(n=A(o,r))||n.enumerable});return i};var F=i=>R(d({},"__esModule",{value:!0}),i);var p=(i,o,e)=>z(i,typeof o!="symbol"?o+"":o,e);var J={};P(J,{FlowClient:()=>v,default:()=>H});module.exports=F(J);var S=require("@onlive.ai/common-121/utils/merge.js");var s=require("@onlive.ai/tracker"),O=require("@onlive.ai/common-121/utils/merge.js"),_=require("@onlive.ai/common-121/utils/browser-preferences.js");var a=require("zod"),u="flow_form",T="onlive-analytics-event",g=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){p(this,"options");p(this,"tracker");p(this,"eventListeners",[]);this.options=g.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,O.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(T,({detail:c})=>this.emit(c.event,c.data))}getTracker(){return this.tracker}preferences(){return{...(0,_.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?u:void 0,step_name:o.currentStepId}),e.fields&&this.tracker.send("form_submit",{form_name:u,form_data:e.fields,step_name:o.currentStepId}))}analyzeResponse(o,e){this.tracker.setBase({form_name:u,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}))}},E=x;var f=require("@onlive.ai/calendar"),t=require("zod");var N={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},j=t.z.string().nonempty(),I=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:g.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()}),w=t.z.object({currentStepId:t.z.string().nonempty(),actionId:t.z.string().nonempty()}),k=t.z.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),C=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()}),U=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(),C).optional()}),V=t.z.object({datetime:t.z.string().datetime(),meta:t.z.record(t.z.string(),t.z.any()).optional()}),m=t.z.union([t.z.string(),t.z.number(),t.z.boolean(),U,V]),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()}),y=t.z.custom(i=>/^\d{4}-\d{2}-\d{2}$/.test(i),{message:"Date must be in 'YYYY-MM-DD' format"}),l=t.z.object({text:t.z.string().optional(),icon:t.z.string().optional()}),M=t.z.object({name:t.z.string().nonempty(),label:t.z.string().optional(),value:t.z.union([m,t.z.array(m)]).optional(),type:k,component:t.z.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({label:t.z.string().nonempty(),value:m.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(),dependsOn:t.z.array(t.z.object({fieldName:t.z.string().nonempty(),value:m.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).optional()})).optional(),required:t.z.boolean().optional(),configuration:t.z.object({generic:t.z.object({error:t.z.object({icon:t.z.string().optional(),showOn:t.z.enum(["input","blur"]).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:l.optional(),success:l.optional(),error:l.optional()}).optional(),suffix:t.z.object({default:l.optional(),success:l.optional(),error:l.optional()}).optional(),clearable:t.z.boolean().optional(),floatingLabel:t.z.boolean().optional()}).optional(),textarea:t.z.object({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.number().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(),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:l.optional()}).optional(),suffix:t.z.object({default:l.optional()}).optional(),mappedResults:t.z.object({mapping:t.z.record(t.z.string(),t.z.array(t.z.object({key:t.z.string(),value:t.z.string()})))}).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()}).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:y.optional(),max:y.optional(),enabled:t.z.array(y).optional(),disabled:t.z.array(y).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:t.z.array(t.z.object({fieldName:t.z.string().nonempty(),value:m.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).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()}),G=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()}),$=t.z.object({name:t.z.enum(["organization_call","close_panel"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),q=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"]),url:t.z.string().url().optional(),scripts:G.array().optional(),events:$.array().optional()}),B=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"]),W=t.z.object({type:t.z.enum(["redirect"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),Y=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(M).optional(),actions:t.z.array(q).optional(),result:t.z.object({postActions:t.z.array(W).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:B,message:t.z.string().optional(),fields:t.z.array(t.z.object({name:t.z.string(),type:k,value:t.z.any(),error:t.z.string()})).optional()}).optional(),isFinal:t.z.boolean().optional()}),K=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:Y,flow:K}),lt=t.z.enum(["track"]);var v=class{constructor(o){p(this,"baseURL");p(this,"headers");p(this,"flowId");p(this,"tracking");let e=(0,S.merge)({},N,I.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(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?.preferences(),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/${j.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}=w.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}},H=v;0&&(module.exports={FlowClient});
|
package/client/client.service.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/flow-client v0.1.
|
|
2
|
-
var j=Object.defineProperty;var I=(a,o,e)=>o in a?j(a,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[o]=e;var r=(a,o,e)=>I(a,typeof o!="symbol"?o+"":o,e);import{merge as q}from"@onlive.ai/common-121/utils/merge.js";import{Session as u,Tracker as k}from"@onlive.ai/tracker";import{merge as S}from"@onlive.ai/common-121/utils/merge.js";import{browserPreferences as A}from"@onlive.ai/common-121/utils/browser-preferences.js";import{z as i}from"zod";var c="flow_form",v="onlive-analytics-event",d=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 y=class{constructor(o,e,n,s){r(this,"options");r(this,"tracker");r(this,"eventListeners",[]);this.options=d.parse(n),this.tracker=new k({apiUrl:this.options.apiUrl,removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:s}),this.tracker.setBase(S({},{organization_id:o,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:u.id,interaction_id:u.interactionId,extra:{flow_id:e}},this.options.data)),window.addEventListener(v,({detail:l})=>this.emit(l.event,l.data))}getTracker(){return this.tracker}preferences(){return{...A(),interactionId:u.interactionId,guestId:u.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,step_name:o.currentStepId}),e.fields&&this.tracker.send("form_submit",{form_name:c,form_data:e.fields,step_name:o.currentStepId}))}analyzeResponse(o,e){"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,step_name:e.step.id})}),e.step.error&&this.tracker.send("form_error",{form_name:c,form_error:e.step.error.code,step_name:e.step.id})),this.tracker.send("impression",{impression_type:"step",form_name:void 0,step_name:e.step.id,step_initial:!("currentStepId"in o)||void 0,step_final:e.step.isFinal}),this.tracker.setBase({form_name:c,step_name:e.step.id,step_initial:!("currentStepId"in o)||void 0,step_final:e.step.isFinal,...e.step.result?.tracking})}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}))}},x=y;import{GetAvailabilityFilters as w,GetAvailabilityOptions as L}from"@onlive.ai/calendar";import{z as t}from"zod";var T={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},_=t.string().nonempty(),O=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:d.optional(),devMode:t.boolean().default(!1).optional()}),f=t.object({state:t.record(t.string(),t.any()).optional(),fields:t.record(t.string(),t.any()).optional()}),E=t.object({currentStepId:t.string().nonempty(),actionId:t.string().nonempty()}),N=t.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),D=t.object({name:t.string(),value:t.string().optional(),icon:t.string().optional(),type:t.enum(["url","email","phone"]).optional()}),z=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(),D).optional()}),R=t.object({datetime:t.string().datetime(),meta:t.record(t.string(),t.any()).optional()}),m=t.union([t.string(),t.number(),t.boolean(),z,R]),g=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"}),p=t.object({text:t.string().optional(),icon:t.string().optional()}),P=t.object({name:t.string().nonempty(),label:t.string().optional(),value:t.union([m,t.array(m)]).optional(),type:N,component:t.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({label:t.string().nonempty(),value:m.optional(),image:t.string().url().optional(),description:t.string().optional(),disabled:t.boolean().optional(),attributes:t.record(t.string(),t.any()).optional(),dependsOn:t.array(t.object({fieldName:t.string().nonempty(),value:m.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).optional()})).optional(),required:t.boolean().optional(),configuration:t.object({generic:t.object({error:t.object({icon:t.string().optional(),showOn:t.enum(["input","blur"]).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:p.optional(),success:p.optional(),error:p.optional()}).optional(),suffix:t.object({default:p.optional(),success:p.optional(),error:p.optional()}).optional(),clearable:t.boolean().optional(),floatingLabel:t.boolean().optional()}).optional(),textarea:t.object({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(),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({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:p.optional()}).optional(),suffix:t.object({default:p.optional()}).optional(),mappedResults:t.object({mapping:t.record(t.string(),t.array(t.object({key:t.string(),value:t.string()})))}).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:g.optional(),markerPin:t.object({default:g.optional(),hover:g.optional(),selected:g.optional()}).optional(),infoWindow:t.object({button:t.object({label:t.string(),action:t.string()}).optional()}).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:w,options:L.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:t.array(t.object({fieldName:t.string().nonempty(),value:m.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).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()}),F=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()}),C=t.object({name:t.enum(["organization_call","close_panel"]),params:t.record(t.string(),t.any()).optional()}),U=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"]),url:t.string().url().optional(),scripts:F.array().optional(),events:C.array().optional()}),V=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"]),M=t.object({type:t.enum(["redirect"]),params:t.record(t.string(),t.any()).optional()}),G=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(P).optional(),actions:t.array(U).optional(),result:t.object({postActions:t.array(M).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:V,message:t.string().optional(),fields:t.array(t.object({name:t.string(),type:N,value:t.any(),error:t.string()})).optional()}).optional(),isFinal:t.boolean().optional()}),$=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()}))}),pt=t.object({status:t.enum(["ok","error"]),step:G,flow:$}),st=t.enum(["track"]);var h=class{constructor(o){r(this,"baseURL");r(this,"headers");r(this,"flowId");r(this,"tracking");let e=q({},T,O.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 x(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?.preferences(),n=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(f.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(),s=await this.request(`flow/${this.flowId}/steps/${_.parse(o)}`,{method:"POST",body:JSON.stringify(f.parse({...e,state:{preferences:n,...e.state}}))});return this.tracking?.analyzeResponse({stepId:o},s),s}async nextStep(o,e={}){this.tracking?.analyzeRequest(o,e);let{currentStepId:n,actionId:s}=E.parse(o),l=await this.request(`flow/${this.flowId}/steps/${n}/action/${s}`,{method:"POST",body:JSON.stringify(f.parse(e))});return this.tracking?.analyzeResponse(o,l),l}},gt=h;export{h as FlowClient,gt as default};
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.55 | © 2025 Onlive.ai */
|
|
2
|
+
var j=Object.defineProperty;var I=(a,e,o)=>e in a?j(a,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):a[e]=o;var r=(a,e,o)=>I(a,typeof e!="symbol"?e+"":e,o);import{merge as q}from"@onlive.ai/common-121/utils/merge.js";import{Session as u,Tracker as w}from"@onlive.ai/tracker";import{merge as k}from"@onlive.ai/common-121/utils/merge.js";import{browserPreferences as S}from"@onlive.ai/common-121/utils/browser-preferences.js";import{z as i}from"zod";var m="flow_form",v="onlive-analytics-event",d=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){r(this,"options");r(this,"tracker");r(this,"eventListeners",[]);this.options=d.parse(n),this.tracker=new w({apiUrl:this.options.apiUrl,removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:l}),this.tracker.setBase(k({},{organization_id:e,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:u.id,interaction_id:u.interactionId,extra:{flow_id:o}},this.options.data)),window.addEventListener(v,({detail:s})=>this.emit(s.event,s.data))}getTracker(){return this.tracker}preferences(){return{...S(),interactionId:u.interactionId,guestId:u.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?m:void 0,step_name:e.currentStepId}),o.fields&&this.tracker.send("form_submit",{form_name:m,form_data:o.fields,step_name:e.currentStepId}))}analyzeResponse(e,o){this.tracker.setBase({form_name:m,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}))}},x=f;import{GetAvailabilityFilters as A,GetAvailabilityOptions as L}from"@onlive.ai/calendar";import{z as t}from"zod";var T={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},O=t.string().nonempty(),_=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:d.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()}),E=t.object({currentStepId:t.string().nonempty(),actionId:t.string().nonempty()}),N=t.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),D=t.object({name:t.string(),value:t.string().optional(),icon:t.string().optional(),type:t.enum(["url","email","phone"]).optional()}),z=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(),D).optional()}),P=t.object({datetime:t.string().datetime(),meta:t.record(t.string(),t.any()).optional()}),c=t.union([t.string(),t.number(),t.boolean(),z,P]),g=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"}),p=t.object({text:t.string().optional(),icon:t.string().optional()}),R=t.object({name:t.string().nonempty(),label:t.string().optional(),value:t.union([c,t.array(c)]).optional(),type:N,component:t.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({label:t.string().nonempty(),value:c.optional(),image:t.string().url().optional(),description:t.string().optional(),disabled:t.boolean().optional(),attributes:t.record(t.string(),t.any()).optional(),dependsOn:t.array(t.object({fieldName:t.string().nonempty(),value:c.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).optional()})).optional(),required:t.boolean().optional(),configuration:t.object({generic:t.object({error:t.object({icon:t.string().optional(),showOn:t.enum(["input","blur"]).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:p.optional(),success:p.optional(),error:p.optional()}).optional(),suffix:t.object({default:p.optional(),success:p.optional(),error:p.optional()}).optional(),clearable:t.boolean().optional(),floatingLabel:t.boolean().optional()}).optional(),textarea:t.object({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.number().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(),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:p.optional()}).optional(),suffix:t.object({default:p.optional()}).optional(),mappedResults:t.object({mapping:t.record(t.string(),t.array(t.object({key:t.string(),value:t.string()})))}).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:g.optional(),markerPin:t.object({default:g.optional(),hover:g.optional(),selected:g.optional()}).optional(),infoWindow:t.object({button:t.object({label:t.string(),action:t.string()}).optional()}).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:A,options:L.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:t.array(t.object({fieldName:t.string().nonempty(),value:c.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).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()}),F=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()}),C=t.object({name:t.enum(["organization_call","close_panel"]),params:t.record(t.string(),t.any()).optional()}),U=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"]),url:t.string().url().optional(),scripts:F.array().optional(),events:C.array().optional()}),V=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"]),M=t.object({type:t.enum(["redirect"]),params:t.record(t.string(),t.any()).optional()}),G=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(R).optional(),actions:t.array(U).optional(),result:t.object({postActions:t.array(M).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:V,message:t.string().optional(),fields:t.array(t.object({name:t.string(),type:N,value:t.any(),error:t.string()})).optional()}).optional(),isFinal:t.boolean().optional()}),$=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()}))}),pt=t.object({status:t.enum(["ok","error"]),step:G,flow:$}),lt=t.enum(["track"]);var h=class{constructor(e){r(this,"baseURL");r(this,"headers");r(this,"flowId");r(this,"tracking");let o=q({},T,_.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 x(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?.preferences(),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/${O.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}=E.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}},gt=h;export{h as FlowClient,gt as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/flow-client v0.1.
|
|
2
|
-
"use strict";var C=Object.defineProperty;var D=(r,n,o)=>n in r?C(r,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[n]=o;var d=(r,n,o)=>D(r,typeof n!="symbol"?n+"":n,o);var e=require("vitest"),g=require("zod");var R=require("@onlive.ai/common-121/utils/merge.js");var f=require("@onlive.ai/tracker"),_=require("@onlive.ai/common-121/utils/merge.js"),E=require("@onlive.ai/common-121/utils/browser-preferences.js");var p=require("zod"),b="flow_form",k="onlive-analytics-event",h=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,o,i,s){d(this,"options");d(this,"tracker");d(this,"eventListeners",[]);this.options=h.parse(i),this.tracker=new f.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:f.Session.id,interaction_id:f.Session.interactionId,extra:{flow_id:o}},this.options.data)),window.addEventListener(k,({detail:c})=>this.emit(c.event,c.data))}getTracker(){return this.tracker}preferences(){return{...(0,E.browserPreferences)(),interactionId:f.Session.interactionId,guestId:f.Session.id}}analyzeRequest(n,o){"currentStepId"in n&&(n.actionId&&this.tracker.send("element_click",{element_label:n.actionId,element_type:"button",form_name:Object.keys(o.fields||{}).length?b:void 0,step_name:n.currentStepId}),o.fields&&this.tracker.send("form_submit",{form_name:b,form_data:o.fields,step_name:n.currentStepId}))}analyzeResponse(n,o){"currentStepId"in n&&(o.step.result?.pipelines&&o.step.result.pipelines.forEach(i=>{this.tracker.send("task_success",{task_name:i.name,task_data:i.data,step_name:o.step.id})}),o.step.error&&this.tracker.send("form_error",{form_name:b,form_error:o.step.error.code,step_name:o.step.id})),this.tracker.send("impression",{impression_type:"step",form_name:void 0,step_name:o.step.id,step_initial:!("currentStepId"in n)||void 0,step_final:o.step.isFinal}),this.tracker.setBase({form_name:b,step_name:o.step.id,step_initial:!("currentStepId"in n)||void 0,step_final:o.step.isFinal,...o.step.result?.tracking})}send(n,o){this.tracker.send(n,o)}setData(n){this.tracker.setBase(n)}onEvent(n){this.eventListeners.push(n)}emit(n,o){this.eventListeners.forEach(i=>i({event:n,data:o}))}},j=I;var T=require("@onlive.ai/calendar"),t=require("zod");var N={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},A=t.z.string().nonempty(),L=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:h.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()}),P=t.z.object({currentStepId:t.z.string().nonempty(),actionId:t.z.string().nonempty()}),z=t.z.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),F=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()}),U=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(),F).optional()}),V=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(),U,V]),v=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()}),w=t.z.custom(r=>/^\d{4}-\d{2}-\d{2}$/.test(r),{message:"Date must be in 'YYYY-MM-DD' format"}),m=t.z.object({text:t.z.string().optional(),icon:t.z.string().optional()}),G=t.z.object({name:t.z.string().nonempty(),label:t.z.string().optional(),value:t.z.union([y,t.z.array(y)]).optional(),type:z,component:t.z.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({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(),dependsOn:t.z.array(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()})).optional()})).optional(),required:t.z.boolean().optional(),configuration:t.z.object({generic:t.z.object({error:t.z.object({icon:t.z.string().optional(),showOn:t.z.enum(["input","blur"]).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: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(),textarea:t.z.object({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(),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({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(),mappedResults:t.z.object({mapping:t.z.record(t.z.string(),t.z.array(t.z.object({key:t.z.string(),value:t.z.string()})))}).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:v.optional(),markerPin:t.z.object({default:v.optional(),hover:v.optional(),selected:v.optional()}).optional(),infoWindow:t.z.object({button:t.z.object({label:t.z.string(),action:t.z.string()}).optional()}).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:w.optional(),max:w.optional(),enabled:t.z.array(w).optional(),disabled:t.z.array(w).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:t.z.array(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()})).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()}),$=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()}),M=t.z.object({name:t.z.enum(["organization_call","close_panel"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),q=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"]),url:t.z.string().url().optional(),scripts:$.array().optional(),events:M.array().optional()}),B=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"]),H=t.z.object({type:t.z.enum(["redirect"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),W=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(G).optional(),actions:t.z.array(q).optional(),result:t.z.object({postActions:t.z.array(H).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:B,message:t.z.string().optional(),fields:t.z.array(t.z.object({name:t.z.string(),type:z,value:t.z.any(),error:t.z.string()})).optional()}).optional(),isFinal:t.z.boolean().optional()}),Y=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()}))}),it=t.z.object({status:t.z.enum(["ok","error"]),step:W,flow:Y}),rt=t.z.enum(["track"]);var S=class{constructor(n){d(this,"baseURL");d(this,"headers");d(this,"flowId");d(this,"tracking");let o=(0,R.merge)({},N,L.parse(n));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 j(o.organizationId,o.flowId,o.tracking,!!o.devMode))}async request(n,o={}){let i=await fetch(`${this.baseURL}/${n}`,{...o,headers:this.headers});if(!i?.ok)throw new Error(`HTTP error! status: ${i?.status||"unknown"}`);return i.json()}async firstStep(n={}){this.tracking?.analyzeRequest({},n);let o=this.tracking?.preferences(),i=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(O.parse({...n,state:{preferences:o,...n.state}}))});return this.tracking?.analyzeResponse({},i),i}async getStep(n,o={}){this.tracking?.analyzeRequest({stepId:n},o);let i=this.tracking?.preferences(),s=await this.request(`flow/${this.flowId}/steps/${A.parse(n)}`,{method:"POST",body:JSON.stringify(O.parse({...o,state:{preferences:i,...o.state}}))});return this.tracking?.analyzeResponse({stepId:n},s),s}async nextStep(n,o={}){this.tracking?.analyzeRequest(n,o);let{currentStepId:i,actionId:s}=P.parse(n),c=await this.request(`flow/${this.flowId}/steps/${i}/action/${s}`,{method:"POST",body:JSON.stringify(O.parse(o))});return this.tracking?.analyzeResponse(n,c),c}},u=S;(0,e.describe)("FlowClient",()=>{let r,n="123e4567-e89b-12d3-a456-426614174000",o="4f3d2a1b6c8e9f0d7a2b3c4d",i={baseUrl:"https://api.example.com",organizationId:n,flowId:o,lang:"en"},s={state:{someKey:"someValue"}},c={status:"ok",step:{id:"step-id"},flow:{id:o,updatedAt:"2021-01-01T00:00:00Z",organizationId:n,stages:[]}};(0,e.beforeEach)(()=>{e.vi.clearAllMocks(),global.fetch=e.vi.fn(),r=new u(i)}),(0,e.describe)("Constructor",()=>{(0,e.it)("should create instance with correct configuration",()=>{let a=new u(i);(0,e.expect)(a.baseURL).toBe(i.baseUrl),(0,e.expect)(a.headers.get("Content-Type")).toBe("application/json"),(0,e.expect)(a.headers.get("X-Onlive-Organization-Id")).toBe(i.organizationId)}),(0,e.it)("should throw error if baseUrl is invalid",()=>{let a={baseUrl:"invalid-url",organizationId:n,flowId:o,lang:"en"};(0,e.expect)(()=>new u(a)).toThrow(g.ZodError)}),(0,e.it)("should throw error if organizationId is missing",()=>{let a={baseUrl:"https://api.example.com",flowId:o,lang:"en"};(0,e.expect)(()=>new u(a)).toThrow(g.ZodError)}),(0,e.it)("should throw error if organizationId is not a valid UUID",()=>{let a={baseUrl:"https://api.example.com",organizationId:"invalid-uuid",flowId:o,lang:"en"};(0,e.expect)(()=>new u(a)).toThrow(g.ZodError)}),(0,e.it)("should throw error if lang is missing",()=>{let a={baseUrl:"https://api.example.com",organizationId:n,flowId:o};(0,e.expect)(()=>new u(a)).toThrow(g.ZodError)}),(0,e.it)("should throw error if lang length is not 2",()=>{let a={baseUrl:"https://api.example.com",organizationId:n,flowId:o,lang:"english"};(0,e.expect)(()=>new u(a)).toThrow(g.ZodError)})}),(0,e.describe)("firstStep",()=>{(0,e.it)("should make POST request to /flow/:flowId/first-step",async()=>{let a=c;global.fetch=e.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(a)});let l=await r.firstStep(s);(0,e.expect)(global.fetch).toHaveBeenCalledWith(`${i.baseUrl}/flow/${i.flowId}/first-step`,e.expect.objectContaining({method:"POST",headers:e.expect.any(Headers),body:JSON.stringify(s)})),(0,e.expect)(l).toEqual(a)}),(0,e.it)("should throw error if options are invalid",async()=>{let a={state:"invalid-state"};await(0,e.expect)(r.firstStep(a)).rejects.toThrow(Error)}),(0,e.it)("should handle HTTP error",async()=>{global.fetch=e.vi.fn().mockResolvedValue({ok:!1,status:500}),await(0,e.expect)(r.firstStep(s)).rejects.toThrow("HTTP error! status: 500")})}),(0,e.describe)("getStep",()=>{let a="step-123";(0,e.it)("should make POST request to /flow/:flowId/steps/:stepId",async()=>{let l=c;global.fetch=e.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(l)});let x=await r.getStep(a,s);(0,e.expect)(global.fetch).toHaveBeenCalledWith(`${i.baseUrl}/flow/${i.flowId}/steps/${a}`,e.expect.objectContaining({method:"POST",headers:e.expect.any(Headers),body:JSON.stringify(s)})),(0,e.expect)(x).toEqual(l)}),(0,e.it)("should throw error if options are invalid",async()=>{let l={state:"invalid-state"};await(0,e.expect)(r.getStep(a,l)).rejects.toThrow(Error)}),(0,e.it)("should handle HTTP error",async()=>{global.fetch=e.vi.fn().mockResolvedValue({ok:!1,status:500}),await(0,e.expect)(r.getStep(a,s)).rejects.toThrow("HTTP error! status: 500")})}),(0,e.describe)("nextStep",()=>{let a={currentStepId:"step-123",actionId:"action-123"};(0,e.it)("should make POST request to /flow/:flowId/steps/:currentStepId/action/:actionId",async()=>{let l=c;global.fetch=e.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(l)});let x=await r.nextStep(a,s);(0,e.expect)(global.fetch).toHaveBeenCalledWith(`${i.baseUrl}/flow/${i.flowId}/steps/${a.currentStepId}/action/${a.actionId}`,e.expect.objectContaining({method:"POST",headers:e.expect.any(Headers),body:JSON.stringify(s)})),(0,e.expect)(x).toEqual(l)}),(0,e.it)("should validate trigger",async()=>{let l={};await(0,e.expect)(r.nextStep(l,s)).rejects.toThrow(g.ZodError)}),(0,e.it)("should throw error if options are invalid",async()=>{let l={state:"invalid-state"};await(0,e.expect)(r.nextStep(a,l)).rejects.toThrow(g.ZodError)}),(0,e.it)("should handle HTTP error",async()=>{global.fetch=e.vi.fn().mockResolvedValue({ok:!1,status:500}),await(0,e.expect)(r.nextStep(a,s)).rejects.toThrow("HTTP error! status: 500")})})});
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.55 | © 2025 Onlive.ai */
|
|
2
|
+
"use strict";var R=Object.defineProperty;var D=(r,n,e)=>n in r?R(r,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[n]=e;var d=(r,n,e)=>D(r,typeof n!="symbol"?n+"":n,e);var o=require("vitest"),g=require("zod");var z=require("@onlive.ai/common-121/utils/merge.js");var b=require("@onlive.ai/tracker"),j=require("@onlive.ai/common-121/utils/merge.js"),E=require("@onlive.ai/common-121/utils/browser-preferences.js");var p=require("zod"),y="flow_form",k="onlive-analytics-event",h=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,i,s){d(this,"options");d(this,"tracker");d(this,"eventListeners",[]);this.options=h.parse(i),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,j.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(k,({detail:c})=>this.emit(c.event,c.data))}getTracker(){return this.tracker}preferences(){return{...(0,E.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?y:void 0,step_name:n.currentStepId}),e.fields&&this.tracker.send("form_submit",{form_name:y,form_data:e.fields,step_name:n.currentStepId}))}analyzeResponse(n,e){this.tracker.setBase({form_name:y,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(i=>{this.tracker.send("task_success",{task_name:i.name,task_data:i.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(i=>i({event:n,data:e}))}},_=I;var T=require("@onlive.ai/calendar"),t=require("zod");var N={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},A=t.z.string().nonempty(),P=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:h.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()}),L=t.z.object({currentStepId:t.z.string().nonempty(),actionId:t.z.string().nonempty()}),C=t.z.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),F=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()}),U=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(),F).optional()}),V=t.z.object({datetime:t.z.string().datetime(),meta:t.z.record(t.z.string(),t.z.any()).optional()}),f=t.z.union([t.z.string(),t.z.number(),t.z.boolean(),U,V]),v=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()}),w=t.z.custom(r=>/^\d{4}-\d{2}-\d{2}$/.test(r),{message:"Date must be in 'YYYY-MM-DD' format"}),m=t.z.object({text:t.z.string().optional(),icon:t.z.string().optional()}),G=t.z.object({name:t.z.string().nonempty(),label:t.z.string().optional(),value:t.z.union([f,t.z.array(f)]).optional(),type:C,component:t.z.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({label:t.z.string().nonempty(),value:f.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(),dependsOn:t.z.array(t.z.object({fieldName:t.z.string().nonempty(),value:f.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).optional()})).optional(),required:t.z.boolean().optional(),configuration:t.z.object({generic:t.z.object({error:t.z.object({icon:t.z.string().optional(),showOn:t.z.enum(["input","blur"]).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: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(),textarea:t.z.object({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.number().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(),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:m.optional()}).optional(),suffix:t.z.object({default:m.optional()}).optional(),mappedResults:t.z.object({mapping:t.z.record(t.z.string(),t.z.array(t.z.object({key:t.z.string(),value:t.z.string()})))}).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:v.optional(),markerPin:t.z.object({default:v.optional(),hover:v.optional(),selected:v.optional()}).optional(),infoWindow:t.z.object({button:t.z.object({label:t.z.string(),action:t.z.string()}).optional()}).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:w.optional(),max:w.optional(),enabled:t.z.array(w).optional(),disabled:t.z.array(w).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:t.z.array(t.z.object({fieldName:t.z.string().nonempty(),value:f.optional(),operator:t.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).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()}),$=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()}),M=t.z.object({name:t.z.enum(["organization_call","close_panel"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),q=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"]),url:t.z.string().url().optional(),scripts:$.array().optional(),events:M.array().optional()}),B=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"]),H=t.z.object({type:t.z.enum(["redirect"]),params:t.z.record(t.z.string(),t.z.any()).optional()}),W=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(G).optional(),actions:t.z.array(q).optional(),result:t.z.object({postActions:t.z.array(H).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:B,message:t.z.string().optional(),fields:t.z.array(t.z.object({name:t.z.string(),type:C,value:t.z.any(),error:t.z.string()})).optional()}).optional(),isFinal:t.z.boolean().optional()}),Y=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()}))}),it=t.z.object({status:t.z.enum(["ok","error"]),step:W,flow:Y}),rt=t.z.enum(["track"]);var S=class{constructor(n){d(this,"baseURL");d(this,"headers");d(this,"flowId");d(this,"tracking");let e=(0,z.merge)({},N,P.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 _(e.organizationId,e.flowId,e.tracking,!!e.devMode))}async request(n,e={}){let i=await fetch(`${this.baseURL}/${n}`,{...e,headers:this.headers});if(!i?.ok)throw new Error(`HTTP error! status: ${i?.status||"unknown"}`);return i.json()}async firstStep(n={}){this.tracking?.analyzeRequest({},n);let e=this.tracking?.preferences(),i=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({},i),i}async getStep(n,e={}){this.tracking?.analyzeRequest({stepId:n},e);let i=this.tracking?.preferences(),s=await this.request(`flow/${this.flowId}/steps/${A.parse(n)}`,{method:"POST",body:JSON.stringify(O.parse({...e,state:{preferences:i,...e.state}}))});return this.tracking?.analyzeResponse({stepId:n},s),s}async nextStep(n,e={}){this.tracking?.analyzeRequest(n,e);let{currentStepId:i,actionId:s}=L.parse(n),c=await this.request(`flow/${this.flowId}/steps/${i}/action/${s}`,{method:"POST",body:JSON.stringify(O.parse(e))});return this.tracking?.analyzeResponse(n,c),c}},u=S;(0,o.describe)("FlowClient",()=>{let r,n="123e4567-e89b-12d3-a456-426614174000",e="4f3d2a1b6c8e9f0d7a2b3c4d",i={baseUrl:"https://api.example.com",organizationId:n,flowId:e,lang:"en"},s={state:{someKey:"someValue"}},c={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(i)}),(0,o.describe)("Constructor",()=>{(0,o.it)("should create instance with correct configuration",()=>{let a=new u(i);(0,o.expect)(a.baseURL).toBe(i.baseUrl),(0,o.expect)(a.headers.get("Content-Type")).toBe("application/json"),(0,o.expect)(a.headers.get("X-Onlive-Organization-Id")).toBe(i.organizationId)}),(0,o.it)("should throw error if baseUrl is invalid",()=>{let a={baseUrl:"invalid-url",organizationId:n,flowId:e,lang:"en"};(0,o.expect)(()=>new u(a)).toThrow(g.ZodError)}),(0,o.it)("should throw error if organizationId is missing",()=>{let a={baseUrl:"https://api.example.com",flowId:e,lang:"en"};(0,o.expect)(()=>new u(a)).toThrow(g.ZodError)}),(0,o.it)("should throw error if organizationId is not a valid UUID",()=>{let a={baseUrl:"https://api.example.com",organizationId:"invalid-uuid",flowId:e,lang:"en"};(0,o.expect)(()=>new u(a)).toThrow(g.ZodError)}),(0,o.it)("should throw error if lang is missing",()=>{let a={baseUrl:"https://api.example.com",organizationId:n,flowId:e};(0,o.expect)(()=>new u(a)).toThrow(g.ZodError)}),(0,o.it)("should throw error if lang length is not 2",()=>{let a={baseUrl:"https://api.example.com",organizationId:n,flowId:e,lang:"english"};(0,o.expect)(()=>new u(a)).toThrow(g.ZodError)})}),(0,o.describe)("firstStep",()=>{(0,o.it)("should make POST request to /flow/:flowId/first-step",async()=>{let a=c;global.fetch=o.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(a)});let l=await r.firstStep(s);(0,o.expect)(global.fetch).toHaveBeenCalledWith(`${i.baseUrl}/flow/${i.flowId}/first-step`,o.expect.objectContaining({method:"POST",headers:o.expect.any(Headers),body:JSON.stringify(s)})),(0,o.expect)(l).toEqual(a)}),(0,o.it)("should throw error if options are invalid",async()=>{let a={state:"invalid-state"};await(0,o.expect)(r.firstStep(a)).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 a="step-123";(0,o.it)("should make POST request to /flow/:flowId/steps/:stepId",async()=>{let l=c;global.fetch=o.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(l)});let x=await r.getStep(a,s);(0,o.expect)(global.fetch).toHaveBeenCalledWith(`${i.baseUrl}/flow/${i.flowId}/steps/${a}`,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(a,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(a,s)).rejects.toThrow("HTTP error! status: 500")})}),(0,o.describe)("nextStep",()=>{let a={currentStepId:"step-123",actionId:"action-123"};(0,o.it)("should make POST request to /flow/:flowId/steps/:currentStepId/action/:actionId",async()=>{let l=c;global.fetch=o.vi.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(l)});let x=await r.nextStep(a,s);(0,o.expect)(global.fetch).toHaveBeenCalledWith(`${i.baseUrl}/flow/${i.flowId}/steps/${a.currentStepId}/action/${a.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(a,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(a,s)).rejects.toThrow("HTTP error! status: 500")})})});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/flow-client v0.1.
|
|
2
|
-
var R=Object.defineProperty;var C=(r,o,e)=>o in r?R(r,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[o]=e;var m=(r,o,e)=>C(r,typeof o!="symbol"?o+"":o,e);import{beforeEach as tt,describe as v,expect as i,it as l,vi as f}from"vitest";import{ZodError as b}from"zod";import{merge as Q}from"@onlive.ai/common-121/utils/merge.js";import{Session as T,Tracker as D}from"@onlive.ai/tracker";import{merge as F}from"@onlive.ai/common-121/utils/merge.js";import{browserPreferences as U}from"@onlive.ai/common-121/utils/browser-preferences.js";import{z as c}from"zod";var y="flow_form",E="onlive-analytics-event",w=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 k=class{constructor(o,e,a,s){m(this,"options");m(this,"tracker");m(this,"eventListeners",[]);this.options=w.parse(a),this.tracker=new D({apiUrl:this.options.apiUrl,removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:s}),this.tracker.setBase(F({},{organization_id:o,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:T.id,interaction_id:T.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{...U(),interactionId:T.interactionId,guestId:T.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?y:void 0,step_name:o.currentStepId}),e.fields&&this.tracker.send("form_submit",{form_name:y,form_data:e.fields,step_name:o.currentStepId}))}analyzeResponse(o,e){"currentStepId"in o&&(e.step.result?.pipelines&&e.step.result.pipelines.forEach(a=>{this.tracker.send("task_success",{task_name:a.name,task_data:a.data,step_name:e.step.id})}),e.step.error&&this.tracker.send("form_error",{form_name:y,form_error:e.step.error.code,step_name:e.step.id})),this.tracker.send("impression",{impression_type:"step",form_name:void 0,step_name:e.step.id,step_initial:!("currentStepId"in o)||void 0,step_final:e.step.isFinal}),this.tracker.setBase({form_name:y,step_name:e.step.id,step_initial:!("currentStepId"in o)||void 0,step_final:e.step.isFinal,...e.step.result?.tracking})}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(a=>a({event:o,data:e}))}},j=k;import{GetAvailabilityFilters as V,GetAvailabilityOptions as G}from"@onlive.ai/calendar";import{z as t}from"zod";var N={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},A=t.string().nonempty(),L=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:w.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()}),P=t.object({currentStepId:t.string().nonempty(),actionId:t.string().nonempty()}),z=t.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),$=t.object({name:t.string(),value:t.string().optional(),icon:t.string().optional(),type:t.enum(["url","email","phone"]).optional()}),M=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(),$).optional()}),q=t.object({datetime:t.string().datetime(),meta:t.record(t.string(),t.any()).optional()}),h=t.union([t.string(),t.number(),t.boolean(),M,q]),O=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(r=>/^\d{4}-\d{2}-\d{2}$/.test(r),{message:"Date must be in 'YYYY-MM-DD' format"}),u=t.object({text:t.string().optional(),icon:t.string().optional()}),B=t.object({name:t.string().nonempty(),label:t.string().optional(),value:t.union([h,t.array(h)]).optional(),type:z,component:t.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({label:t.string().nonempty(),value:h.optional(),image:t.string().url().optional(),description:t.string().optional(),disabled:t.boolean().optional(),attributes:t.record(t.string(),t.any()).optional(),dependsOn:t.array(t.object({fieldName:t.string().nonempty(),value:h.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).optional()})).optional(),required:t.boolean().optional(),configuration:t.object({generic:t.object({error:t.object({icon:t.string().optional(),showOn:t.enum(["input","blur"]).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:u.optional(),success:u.optional(),error:u.optional()}).optional(),suffix:t.object({default:u.optional(),success:u.optional(),error:u.optional()}).optional(),clearable:t.boolean().optional(),floatingLabel:t.boolean().optional()}).optional(),textarea:t.object({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(),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({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:u.optional()}).optional(),suffix:t.object({default:u.optional()}).optional(),mappedResults:t.object({mapping:t.record(t.string(),t.array(t.object({key:t.string(),value:t.string()})))}).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:O.optional(),markerPin:t.object({default:O.optional(),hover:O.optional(),selected:O.optional()}).optional(),infoWindow:t.object({button:t.object({label:t.string(),action:t.string()}).optional()}).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({url:t.string().url().nonempty(),organizationId:t.string().nonempty(),availability:t.object({filters:V,options:G.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:t.array(t.object({fieldName:t.string().nonempty(),value:h.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).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()}),H=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()}),W=t.object({name:t.enum(["organization_call","close_panel"]),params:t.record(t.string(),t.any()).optional()}),Y=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"]),url:t.string().url().optional(),scripts:H.array().optional(),events:W.array().optional()}),K=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"]),J=t.object({type:t.enum(["redirect"]),params:t.record(t.string(),t.any()).optional()}),Z=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(B).optional(),actions:t.array(Y).optional(),result:t.object({postActions:t.array(J).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:K,message:t.string().optional(),fields:t.array(t.object({name:t.string(),type:z,value:t.any(),error:t.string()})).optional()}).optional(),isFinal:t.boolean().optional()}),X=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()}))}),yt=t.object({status:t.enum(["ok","error"]),step:Z,flow:X}),ht=t.enum(["track"]);var _=class{constructor(o){m(this,"baseURL");m(this,"headers");m(this,"flowId");m(this,"tracking");let e=Q({},N,L.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))}async request(o,e={}){let a=await fetch(`${this.baseURL}/${o}`,{...e,headers:this.headers});if(!a?.ok)throw new Error(`HTTP error! status: ${a?.status||"unknown"}`);return a.json()}async firstStep(o={}){this.tracking?.analyzeRequest({},o);let e=this.tracking?.preferences(),a=await this.request(`flow/${this.flowId}/first-step`,{method:"POST",body:JSON.stringify(I.parse({...o,state:{preferences:e,...o.state}}))});return this.tracking?.analyzeResponse({},a),a}async getStep(o,e={}){this.tracking?.analyzeRequest({stepId:o},e);let a=this.tracking?.preferences(),s=await this.request(`flow/${this.flowId}/steps/${A.parse(o)}`,{method:"POST",body:JSON.stringify(I.parse({...e,state:{preferences:a,...e.state}}))});return this.tracking?.analyzeResponse({stepId:o},s),s}async nextStep(o,e={}){this.tracking?.analyzeRequest(o,e);let{currentStepId:a,actionId:s}=P.parse(o),d=await this.request(`flow/${this.flowId}/steps/${a}/action/${s}`,{method:"POST",body:JSON.stringify(I.parse(e))});return this.tracking?.analyzeResponse(o,d),d}},g=_;v("FlowClient",()=>{let r,o="123e4567-e89b-12d3-a456-426614174000",e="4f3d2a1b6c8e9f0d7a2b3c4d",a={baseUrl:"https://api.example.com",organizationId:o,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:o,stages:[]}};tt(()=>{f.clearAllMocks(),global.fetch=f.fn(),r=new g(a)}),v("Constructor",()=>{l("should create instance with correct configuration",()=>{let n=new g(a);i(n.baseURL).toBe(a.baseUrl),i(n.headers.get("Content-Type")).toBe("application/json"),i(n.headers.get("X-Onlive-Organization-Id")).toBe(a.organizationId)}),l("should throw error if baseUrl is invalid",()=>{let n={baseUrl:"invalid-url",organizationId:o,flowId:e,lang:"en"};i(()=>new g(n)).toThrow(b)}),l("should throw error if organizationId is missing",()=>{let n={baseUrl:"https://api.example.com",flowId:e,lang:"en"};i(()=>new g(n)).toThrow(b)}),l("should throw error if organizationId is not a valid UUID",()=>{let n={baseUrl:"https://api.example.com",organizationId:"invalid-uuid",flowId:e,lang:"en"};i(()=>new g(n)).toThrow(b)}),l("should throw error if lang is missing",()=>{let n={baseUrl:"https://api.example.com",organizationId:o,flowId:e};i(()=>new g(n)).toThrow(b)}),l("should throw error if lang length is not 2",()=>{let n={baseUrl:"https://api.example.com",organizationId:o,flowId:e,lang:"english"};i(()=>new g(n)).toThrow(b)})}),v("firstStep",()=>{l("should make POST request to /flow/:flowId/first-step",async()=>{let n=d;global.fetch=f.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(n)});let p=await r.firstStep(s);i(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/first-step`,i.objectContaining({method:"POST",headers:i.any(Headers),body:JSON.stringify(s)})),i(p).toEqual(n)}),l("should throw error if options are invalid",async()=>{let n={state:"invalid-state"};await i(r.firstStep(n)).rejects.toThrow(Error)}),l("should handle HTTP error",async()=>{global.fetch=f.fn().mockResolvedValue({ok:!1,status:500}),await i(r.firstStep(s)).rejects.toThrow("HTTP error! status: 500")})}),v("getStep",()=>{let n="step-123";l("should make POST request to /flow/:flowId/steps/:stepId",async()=>{let p=d;global.fetch=f.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(p)});let S=await r.getStep(n,s);i(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/steps/${n}`,i.objectContaining({method:"POST",headers:i.any(Headers),body:JSON.stringify(s)})),i(S).toEqual(p)}),l("should throw error if options are invalid",async()=>{let p={state:"invalid-state"};await i(r.getStep(n,p)).rejects.toThrow(Error)}),l("should handle HTTP error",async()=>{global.fetch=f.fn().mockResolvedValue({ok:!1,status:500}),await i(r.getStep(n,s)).rejects.toThrow("HTTP error! status: 500")})}),v("nextStep",()=>{let n={currentStepId:"step-123",actionId:"action-123"};l("should make POST request to /flow/:flowId/steps/:currentStepId/action/:actionId",async()=>{let p=d;global.fetch=f.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(p)});let S=await r.nextStep(n,s);i(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/steps/${n.currentStepId}/action/${n.actionId}`,i.objectContaining({method:"POST",headers:i.any(Headers),body:JSON.stringify(s)})),i(S).toEqual(p)}),l("should validate trigger",async()=>{let p={};await i(r.nextStep(p,s)).rejects.toThrow(b)}),l("should throw error if options are invalid",async()=>{let p={state:"invalid-state"};await i(r.nextStep(n,p)).rejects.toThrow(b)}),l("should handle HTTP error",async()=>{global.fetch=f.fn().mockResolvedValue({ok:!1,status:500}),await i(r.nextStep(n,s)).rejects.toThrow("HTTP error! status: 500")})})});
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.55 | © 2025 Onlive.ai */
|
|
2
|
+
var z=Object.defineProperty;var R=(r,e,o)=>e in r?z(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o;var m=(r,e,o)=>R(r,typeof e!="symbol"?e+"":e,o);import{beforeEach as tt,describe as h,expect as i,it as l,vi as b}from"vitest";import{ZodError as f}from"zod";import{merge as Q}from"@onlive.ai/common-121/utils/merge.js";import{Session as T,Tracker as D}from"@onlive.ai/tracker";import{merge as F}from"@onlive.ai/common-121/utils/merge.js";import{browserPreferences as U}from"@onlive.ai/common-121/utils/browser-preferences.js";import{z as c}from"zod";var v="flow_form",E="onlive-analytics-event",w=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 k=class{constructor(e,o,a,s){m(this,"options");m(this,"tracker");m(this,"eventListeners",[]);this.options=w.parse(a),this.tracker=new D({apiUrl:this.options.apiUrl,removeExtraneousValues:this.options.removeExtraneousValues,allowBotTraffic:this.options.allowBotTraffic,adapters:this.options.adapters,dryRun:s}),this.tracker.setBase(F({},{organization_id:e,page_url:window.location.href,page_referrer:document.referrer,origin_medium:"web",guest_id:T.id,interaction_id:T.interactionId,extra:{flow_id:o}},this.options.data)),window.addEventListener(E,({detail:d})=>this.emit(d.event,d.data))}getTracker(){return this.tracker}preferences(){return{...U(),interactionId:T.interactionId,guestId:T.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?v:void 0,step_name:e.currentStepId}),o.fields&&this.tracker.send("form_submit",{form_name:v,form_data:o.fields,step_name:e.currentStepId}))}analyzeResponse(e,o){this.tracker.setBase({form_name:v,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(a=>{this.tracker.send("task_success",{task_name:a.name,task_data:a.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(a=>a({event:e,data:o}))}},_=k;import{GetAvailabilityFilters as V,GetAvailabilityOptions as G}from"@onlive.ai/calendar";import{z as t}from"zod";var N={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},A=t.string().nonempty(),P=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:w.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()}),L=t.object({currentStepId:t.string().nonempty(),actionId:t.string().nonempty()}),C=t.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),$=t.object({name:t.string(),value:t.string().optional(),icon:t.string().optional(),type:t.enum(["url","email","phone"]).optional()}),M=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(),$).optional()}),q=t.object({datetime:t.string().datetime(),meta:t.record(t.string(),t.any()).optional()}),y=t.union([t.string(),t.number(),t.boolean(),M,q]),O=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(r=>/^\d{4}-\d{2}-\d{2}$/.test(r),{message:"Date must be in 'YYYY-MM-DD' format"}),u=t.object({text:t.string().optional(),icon:t.string().optional()}),B=t.object({name:t.string().nonempty(),label:t.string().optional(),value:t.union([y,t.array(y)]).optional(),type:C,component:t.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({label:t.string().nonempty(),value:y.optional(),image:t.string().url().optional(),description:t.string().optional(),disabled:t.boolean().optional(),attributes:t.record(t.string(),t.any()).optional(),dependsOn:t.array(t.object({fieldName:t.string().nonempty(),value:y.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).optional()})).optional(),required:t.boolean().optional(),configuration:t.object({generic:t.object({error:t.object({icon:t.string().optional(),showOn:t.enum(["input","blur"]).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:u.optional(),success:u.optional(),error:u.optional()}).optional(),suffix:t.object({default:u.optional(),success:u.optional(),error:u.optional()}).optional(),clearable:t.boolean().optional(),floatingLabel:t.boolean().optional()}).optional(),textarea:t.object({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.number().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(),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:u.optional()}).optional(),suffix:t.object({default:u.optional()}).optional(),mappedResults:t.object({mapping:t.record(t.string(),t.array(t.object({key:t.string(),value:t.string()})))}).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:O.optional(),markerPin:t.object({default:O.optional(),hover:O.optional(),selected:O.optional()}).optional(),infoWindow:t.object({button:t.object({label:t.string(),action:t.string()}).optional()}).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({url:t.string().url().nonempty(),organizationId:t.string().nonempty(),availability:t.object({filters:V,options:G.optional()}).optional()}).optional()}).optional()}).optional(),dependsOn:t.array(t.object({fieldName:t.string().nonempty(),value:y.optional(),operator:t.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).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()}),H=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()}),W=t.object({name:t.enum(["organization_call","close_panel"]),params:t.record(t.string(),t.any()).optional()}),Y=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"]),url:t.string().url().optional(),scripts:H.array().optional(),events:W.array().optional()}),K=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"]),J=t.object({type:t.enum(["redirect"]),params:t.record(t.string(),t.any()).optional()}),Z=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(B).optional(),actions:t.array(Y).optional(),result:t.object({postActions:t.array(J).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:K,message:t.string().optional(),fields:t.array(t.object({name:t.string(),type:C,value:t.any(),error:t.string()})).optional()}).optional(),isFinal:t.boolean().optional()}),X=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()}))}),yt=t.object({status:t.enum(["ok","error"]),step:Z,flow:X}),ht=t.enum(["track"]);var j=class{constructor(e){m(this,"baseURL");m(this,"headers");m(this,"flowId");m(this,"tracking");let o=Q({},N,P.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 _(o.organizationId,o.flowId,o.tracking,!!o.devMode))}async request(e,o={}){let a=await fetch(`${this.baseURL}/${e}`,{...o,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 o=this.tracking?.preferences(),a=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({},a),a}async getStep(e,o={}){this.tracking?.analyzeRequest({stepId:e},o);let a=this.tracking?.preferences(),s=await this.request(`flow/${this.flowId}/steps/${A.parse(e)}`,{method:"POST",body:JSON.stringify(I.parse({...o,state:{preferences:a,...o.state}}))});return this.tracking?.analyzeResponse({stepId:e},s),s}async nextStep(e,o={}){this.tracking?.analyzeRequest(e,o);let{currentStepId:a,actionId:s}=L.parse(e),d=await this.request(`flow/${this.flowId}/steps/${a}/action/${s}`,{method:"POST",body:JSON.stringify(I.parse(o))});return this.tracking?.analyzeResponse(e,d),d}},g=j;h("FlowClient",()=>{let r,e="123e4567-e89b-12d3-a456-426614174000",o="4f3d2a1b6c8e9f0d7a2b3c4d",a={baseUrl:"https://api.example.com",organizationId:e,flowId:o,lang:"en"},s={state:{someKey:"someValue"}},d={status:"ok",step:{id:"step-id"},flow:{id:o,updatedAt:"2021-01-01T00:00:00Z",organizationId:e,stages:[]}};tt(()=>{b.clearAllMocks(),global.fetch=b.fn(),r=new g(a)}),h("Constructor",()=>{l("should create instance with correct configuration",()=>{let n=new g(a);i(n.baseURL).toBe(a.baseUrl),i(n.headers.get("Content-Type")).toBe("application/json"),i(n.headers.get("X-Onlive-Organization-Id")).toBe(a.organizationId)}),l("should throw error if baseUrl is invalid",()=>{let n={baseUrl:"invalid-url",organizationId:e,flowId:o,lang:"en"};i(()=>new g(n)).toThrow(f)}),l("should throw error if organizationId is missing",()=>{let n={baseUrl:"https://api.example.com",flowId:o,lang:"en"};i(()=>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"};i(()=>new g(n)).toThrow(f)}),l("should throw error if lang is missing",()=>{let n={baseUrl:"https://api.example.com",organizationId:e,flowId:o};i(()=>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"};i(()=>new g(n)).toThrow(f)})}),h("firstStep",()=>{l("should make POST request to /flow/:flowId/first-step",async()=>{let n=d;global.fetch=b.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(n)});let p=await r.firstStep(s);i(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/first-step`,i.objectContaining({method:"POST",headers:i.any(Headers),body:JSON.stringify(s)})),i(p).toEqual(n)}),l("should throw error if options are invalid",async()=>{let n={state:"invalid-state"};await i(r.firstStep(n)).rejects.toThrow(Error)}),l("should handle HTTP error",async()=>{global.fetch=b.fn().mockResolvedValue({ok:!1,status:500}),await i(r.firstStep(s)).rejects.toThrow("HTTP error! status: 500")})}),h("getStep",()=>{let n="step-123";l("should make POST request to /flow/:flowId/steps/:stepId",async()=>{let p=d;global.fetch=b.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(p)});let S=await r.getStep(n,s);i(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/steps/${n}`,i.objectContaining({method:"POST",headers:i.any(Headers),body:JSON.stringify(s)})),i(S).toEqual(p)}),l("should throw error if options are invalid",async()=>{let p={state:"invalid-state"};await i(r.getStep(n,p)).rejects.toThrow(Error)}),l("should handle HTTP error",async()=>{global.fetch=b.fn().mockResolvedValue({ok:!1,status:500}),await i(r.getStep(n,s)).rejects.toThrow("HTTP error! status: 500")})}),h("nextStep",()=>{let n={currentStepId:"step-123",actionId:"action-123"};l("should make POST request to /flow/:flowId/steps/:currentStepId/action/:actionId",async()=>{let p=d;global.fetch=b.fn().mockResolvedValue({ok:!0,json:()=>Promise.resolve(p)});let S=await r.nextStep(n,s);i(global.fetch).toHaveBeenCalledWith(`${a.baseUrl}/flow/${a.flowId}/steps/${n.currentStepId}/action/${n.actionId}`,i.objectContaining({method:"POST",headers:i.any(Headers),body:JSON.stringify(s)})),i(S).toEqual(p)}),l("should validate trigger",async()=>{let p={};await i(r.nextStep(p,s)).rejects.toThrow(f)}),l("should throw error if options are invalid",async()=>{let p={state:"invalid-state"};await i(r.nextStep(n,p)).rejects.toThrow(f)}),l("should handle HTTP error",async()=>{global.fetch=b.fn().mockResolvedValue({ok:!1,status:500}),await i(r.nextStep(n,s)).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 m=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var h=(n,e)=>{for(var l in e)m(n,l,{get:e[l],enumerable:!0})},_=(n,e,l,b)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of T(e))!E.call(n,a)&&a!==l&&m(n,a,{get:()=>e[a],enumerable:!(b=O(e,a))||b.enumerable});return n};var L=n=>_(m({},"__esModule",{value:!0}),n);var M={};h(M,{Action:()=>x,ActionEvent:()=>f,ActionScript:()=>y,ClientOptions:()=>S,DEFAULT_CLIENT_OPTIONS:()=>I,ErrorCode:()=>j,EventType:()=>k,Field:()=>d,Flow:()=>A,FlowContext:()=>C,GetStepOptions:()=>w,GetStepTrigger:()=>z,PostAction:()=>N,Step:()=>v,StepId:()=>D});module.exports=L(M);var c=require("@onlive.ai/calendar"),o=require("zod");var t=require("zod");var g=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 I={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},D=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:g.optional(),devMode:o.z.boolean().default(!1).optional()}),w=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()}),z=o.z.object({currentStepId:o.z.string().nonempty(),actionId:o.z.string().nonempty()}),u=o.z.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),P=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()}),R=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(),P).optional()}),F=o.z.object({datetime:o.z.string().datetime(),meta:o.z.record(o.z.string(),o.z.any()).optional()}),r=o.z.union([o.z.string(),o.z.number(),o.z.boolean(),R,F]),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=>/^\d{4}-\d{2}-\d{2}$/.test(n),{message:"Date must be in 'YYYY-MM-DD' format"}),i=o.z.object({text:o.z.string().optional(),icon:o.z.string().optional()}),d=o.z.object({name:o.z.string().nonempty(),label:o.z.string().optional(),value:o.z.union([r,o.z.array(r)]).optional(),type:u,component:o.z.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({label:o.z.string().nonempty(),value:r.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(),dependsOn:o.z.array(o.z.object({fieldName:o.z.string().nonempty(),value:r.optional(),operator:o.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).optional()})).optional(),required:o.z.boolean().optional(),configuration:o.z.object({generic:o.z.object({error:o.z.object({icon:o.z.string().optional(),showOn:o.z.enum(["input","blur"]).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:i.optional(),success:i.optional(),error:i.optional()}).optional(),suffix:o.z.object({default:i.optional(),success:i.optional(),error:i.optional()}).optional(),clearable:o.z.boolean().optional(),floatingLabel:o.z.boolean().optional()}).optional(),textarea:o.z.object({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(),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({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:i.optional()}).optional(),suffix:o.z.object({default:i.optional()}).optional(),mappedResults:o.z.object({mapping:o.z.record(o.z.string(),o.z.array(o.z.object({key:o.z.string(),value:o.z.string()})))}).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()}).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({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:o.z.array(o.z.object({fieldName:o.z.string().nonempty(),value:r.optional(),operator:o.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).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()}),y=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()}),f=o.z.object({name:o.z.enum(["organization_call","close_panel"]),params:o.z.record(o.z.string(),o.z.any()).optional()}),x=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"]),url:o.z.string().url().optional(),scripts:y.array().optional(),events:f.array().optional()}),j=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()}),v=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(d).optional(),actions:o.z.array(x).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:j,message:o.z.string().optional(),fields:o.z.array(o.z.object({name:o.z.string(),type:u,value:o.z.any(),error:o.z.string()})).optional()}).optional(),isFinal:o.z.boolean().optional()}),A=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()}))}),C=o.z.object({status:o.z.enum(["ok","error"]),step:v,flow:A}),k=o.z.enum(["track"]);0&&(module.exports={Action,ActionEvent,ActionScript,ClientOptions,DEFAULT_CLIENT_OPTIONS,ErrorCode,EventType,Field,Flow,FlowContext,GetStepOptions,GetStepTrigger,PostAction,Step,StepId});
|
|
1
|
+
/*! @onlive.ai/flow-client v0.1.55 | © 2025 Onlive.ai */
|
|
2
|
+
"use strict";var m=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var E=(n,e)=>{for(var l in e)m(n,l,{get:e[l],enumerable:!0})},_=(n,e,l,b)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of T(e))!h.call(n,a)&&a!==l&&m(n,a,{get:()=>e[a],enumerable:!(b=O(e,a))||b.enumerable});return n};var L=n=>_(m({},"__esModule",{value:!0}),n);var M={};E(M,{Action:()=>x,ActionEvent:()=>f,ActionScript:()=>y,ClientOptions:()=>w,DEFAULT_CLIENT_OPTIONS:()=>I,ErrorCode:()=>j,EventType:()=>k,Field:()=>d,Flow:()=>v,FlowContext:()=>C,GetStepOptions:()=>S,GetStepTrigger:()=>P,PostAction:()=>A,Step:()=>N,StepId:()=>D});module.exports=L(M);var c=require("@onlive.ai/calendar"),o=require("zod");var t=require("zod");var g=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 I={tracking:{removeExtraneousValues:!0,apiUrl:"https://srvless.onlive.site/tracking",data:{widget_type:"OnliveAppFlow"}}},D=o.z.string().nonempty(),w=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:g.optional(),devMode:o.z.boolean().default(!1).optional()}),S=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()}),P=o.z.object({currentStepId:o.z.string().nonempty(),actionId:o.z.string().nonempty()}),u=o.z.enum(["text","boolean","number","email","phone","mobile_phone","date","time","datetime","password","url","color","object","void","location","availability"]),z=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()}),R=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(),z).optional()}),F=o.z.object({datetime:o.z.string().datetime(),meta:o.z.record(o.z.string(),o.z.any()).optional()}),r=o.z.union([o.z.string(),o.z.number(),o.z.boolean(),R,F]),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=>/^\d{4}-\d{2}-\d{2}$/.test(n),{message:"Date must be in 'YYYY-MM-DD' format"}),i=o.z.object({text:o.z.string().optional(),icon:o.z.string().optional()}),d=o.z.object({name:o.z.string().nonempty(),label:o.z.string().optional(),value:o.z.union([r,o.z.array(r)]).optional(),type:u,component:o.z.enum(["input","textarea","select","radio","checkbox","switch","rating","carousel","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({label:o.z.string().nonempty(),value:r.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(),dependsOn:o.z.array(o.z.object({fieldName:o.z.string().nonempty(),value:r.optional(),operator:o.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).optional()})).optional(),required:o.z.boolean().optional(),configuration:o.z.object({generic:o.z.object({error:o.z.object({icon:o.z.string().optional(),showOn:o.z.enum(["input","blur"]).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:i.optional(),success:i.optional(),error:i.optional()}).optional(),suffix:o.z.object({default:i.optional(),success:i.optional(),error:i.optional()}).optional(),clearable:o.z.boolean().optional(),floatingLabel:o.z.boolean().optional()}).optional(),textarea:o.z.object({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.number().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(),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:i.optional()}).optional(),suffix:o.z.object({default:i.optional()}).optional(),mappedResults:o.z.object({mapping:o.z.record(o.z.string(),o.z.array(o.z.object({key:o.z.string(),value:o.z.string()})))}).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()}).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({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:o.z.array(o.z.object({fieldName:o.z.string().nonempty(),value:r.optional(),operator:o.z.enum(["exists","equals","not-equals","contains","not-contains","greater-than","less-than"]).optional()})).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()}),y=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()}),f=o.z.object({name:o.z.enum(["organization_call","close_panel"]),params:o.z.record(o.z.string(),o.z.any()).optional()}),x=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"]),url:o.z.string().url().optional(),scripts:y.array().optional(),events:f.array().optional()}),j=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"]),A=o.z.object({type:o.z.enum(["redirect"]),params:o.z.record(o.z.string(),o.z.any()).optional()}),N=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(d).optional(),actions:o.z.array(x).optional(),result:o.z.object({postActions:o.z.array(A).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:j,message:o.z.string().optional(),fields:o.z.array(o.z.object({name:o.z.string(),type:u,value:o.z.any(),error:o.z.string()})).optional()}).optional(),isFinal:o.z.boolean().optional()}),v=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()}))}),C=o.z.object({status:o.z.enum(["ok","error"]),step:N,flow:v}),k=o.z.enum(["track"]);0&&(module.exports={Action,ActionEvent,ActionScript,ClientOptions,DEFAULT_CLIENT_OPTIONS,ErrorCode,EventType,Field,Flow,FlowContext,GetStepOptions,GetStepTrigger,PostAction,Step,StepId});
|