@opencx/widget 2.5.1 → 2.6.0

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.
Files changed (47) hide show
  1. package/dist/basic.cjs +1 -1
  2. package/dist/basic.cjs.map +1 -1
  3. package/dist/basic.js +1 -1
  4. package/dist/basic.js.map +1 -1
  5. package/dist/core/client/api.d.ts +1 -1
  6. package/dist/core/client/chat.d.ts +37 -2
  7. package/dist/core/client/contact.d.ts +2 -2
  8. package/dist/core/errors/index.d.ts +6 -0
  9. package/dist/core/platform/audio.d.ts +38 -0
  10. package/dist/core/platform/index.d.ts +6 -2
  11. package/dist/core/platform/storage.d.ts +8 -2
  12. package/dist/core/tests/client/integration.test.d.ts +1 -0
  13. package/dist/core/tests/platform/audio.test.d.ts +1 -0
  14. package/dist/core/tests/platform/logger.test.d.ts +1 -0
  15. package/dist/core/tests/platform/storage.test.d.ts +1 -0
  16. package/dist/core/tests/test-utils.d.ts +2 -0
  17. package/dist/core/tests/types/pub-sub.test.d.ts +1 -0
  18. package/dist/core/tests/utils/create-fetch.test.d.ts +1 -0
  19. package/dist/core/types/helpers.d.ts +2 -2
  20. package/dist/core/types/pub-sub.d.ts +1 -0
  21. package/dist/core/types/schemas-v2.d.ts +3 -0
  22. package/dist/core/utils/create-fetch.d.ts +2 -1
  23. package/dist/{genUuid-CDpI3ugS.js → genUuid-C12yFv3j.js} +2 -1
  24. package/dist/genUuid-C12yFv3j.js.map +1 -0
  25. package/dist/genUuid-DdeSE04H.cjs +2 -0
  26. package/dist/genUuid-DdeSE04H.cjs.map +1 -0
  27. package/dist/{index-D84Xc70r.js → index-C87obATS.js} +531 -524
  28. package/dist/index-C87obATS.js.map +1 -0
  29. package/dist/index-ChwS_h0D.cjs +18 -0
  30. package/dist/index-ChwS_h0D.cjs.map +1 -0
  31. package/dist/index.cjs +1 -1
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.js +668 -471
  34. package/dist/index.js.map +1 -1
  35. package/dist/package.json.d.ts +2 -1
  36. package/dist/react.cjs +1 -1
  37. package/dist/react.js +2 -2
  38. package/dist-embed/script.js +20 -20
  39. package/dist-embed/script.js.map +1 -1
  40. package/package.json +2 -1
  41. package/dist/genUuid-BkZtn1k9.cjs +0 -2
  42. package/dist/genUuid-BkZtn1k9.cjs.map +0 -1
  43. package/dist/genUuid-CDpI3ugS.js.map +0 -1
  44. package/dist/index-1bY4_hBw.cjs +0 -18
  45. package/dist/index-1bY4_hBw.cjs.map +0 -1
  46. package/dist/index-D84Xc70r.js.map +0 -1
  47. /package/dist/core/{utils/genId.test.d.ts → tests/client/integration-perisitance.test.d.ts} +0 -0
@@ -12,7 +12,7 @@ export declare class ApiCaller {
12
12
  contactName: string;
13
13
  }>;
14
14
  widgetPrelude(): Promise<WidgetPreludeSchema>;
15
- handleMessage(message: HttpChatInputSchema): Promise<{
15
+ handleMessage(message: HttpChatInputSchema, abortSignal?: AbortSignal): Promise<{
16
16
  success: true;
17
17
  code?: string | undefined;
18
18
  options?: {
@@ -5,13 +5,24 @@ import { HttpChatInputSchema } from '../types/schemas-v2';
5
5
  import { LoadingState, ErrorState, SomeOptional } from '../types/helpers';
6
6
  import { ConfigInstance } from './config';
7
7
  import { Platform } from '../platform';
8
- type ChatState = {
8
+ export type PollingType = 'session' | 'messages';
9
+ export type PollingState = {
10
+ isPolling: boolean;
11
+ lastPollTime: string | null;
12
+ nextPollTime: string | null;
13
+ error: ErrorState;
14
+ };
15
+ export type PollingStates = {
16
+ [K in PollingType]: PollingState;
17
+ };
18
+ export type ChatState = {
9
19
  messages: MessageType[];
10
20
  keyboard: {
11
21
  options: string[];
12
22
  } | null;
13
23
  loading: LoadingState;
14
24
  error: ErrorState;
25
+ polling: PollingStates;
15
26
  };
16
27
  type ChatOptions = {
17
28
  api: ApiCaller;
@@ -19,6 +30,7 @@ type ChatOptions = {
19
30
  onSessionDestroy?: () => void;
20
31
  platform: Platform;
21
32
  };
33
+ export type SendMessageInput = SomeOptional<Omit<HttpChatInputSchema, "bot_token">, "session_id" | "user">;
22
34
  export declare function createChat(options: ChatOptions): {
23
35
  chatState: PubSub<ChatState>;
24
36
  sessionState: PubSub<{
@@ -33,7 +45,28 @@ export declare function createChat(options: ChatOptions): {
33
45
  };
34
46
  channel: string;
35
47
  } | null>;
36
- sendMessage: (input: SomeOptional<Omit<HttpChatInputSchema, "bot_token">, "session_id" | "user">) => Promise<boolean>;
48
+ sendMessage: (input: SendMessageInput, abort?: AbortSignal) => Promise<{
49
+ success: boolean;
50
+ createdSession: boolean;
51
+ botMessage?: undefined;
52
+ error?: undefined;
53
+ } | {
54
+ success: boolean;
55
+ createdSession: boolean;
56
+ botMessage: {
57
+ type: "FROM_BOT";
58
+ id: string;
59
+ timestamp: string;
60
+ component: string;
61
+ data: unknown;
62
+ } | null;
63
+ error?: undefined;
64
+ } | {
65
+ success: boolean;
66
+ createdSession: boolean;
67
+ error: unknown;
68
+ botMessage?: undefined;
69
+ }>;
37
70
  createSession: () => Promise<{
38
71
  id: string;
39
72
  createdAt: Date;
@@ -48,5 +81,7 @@ export declare function createChat(options: ChatOptions): {
48
81
  } | null>;
49
82
  clearSession: () => Promise<void>;
50
83
  cleanup: (removeSession?: boolean) => void;
84
+ initialState: ChatState;
85
+ sessionStorageKey: string;
51
86
  };
52
87
  export {};
@@ -9,12 +9,12 @@ type ContactState = {
9
9
  loading: LoadingState;
10
10
  error: ErrorState;
11
11
  };
12
- type ContactOptions = {
12
+ export type CreateContactOptions = {
13
13
  api: ApiCaller;
14
14
  platform: Platform;
15
15
  config: ConfigInstance;
16
16
  };
17
- export declare function createContact(options: ContactOptions): {
17
+ export declare function createContact(options: CreateContactOptions): {
18
18
  contactState: PubSub<ContactState>;
19
19
  shouldCollectData: () => {
20
20
  should: boolean;
@@ -19,3 +19,9 @@ export declare class TransportError extends OpenCXError {
19
19
  export declare class FileUploadError extends OpenCXError {
20
20
  constructor(message?: string);
21
21
  }
22
+ export declare class StorageNotAvailableError extends OpenCXError {
23
+ constructor(message?: string);
24
+ }
25
+ export declare class ExternalIdNotDefinedError extends OpenCXError {
26
+ constructor(message?: string);
27
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Platform-agnostic audio interface that can be implemented
3
+ * for different environments (web, mobile, desktop, etc.)
4
+ */
5
+ export interface Audio {
6
+ /**
7
+ * Plays a notification sound
8
+ * @returns Promise that resolves when the sound finishes playing or rejects on error
9
+ */
10
+ playNotification(): Promise<void>;
11
+ /**
12
+ * Checks if audio playback is available and working
13
+ * @returns true if audio is available and working
14
+ */
15
+ isAvailable?(): boolean;
16
+ }
17
+ /**
18
+ * Helper function to check if audio is available and working
19
+ */
20
+ export declare function isAudioAvailable(audio: Audio | undefined): audio is Audio;
21
+ /**
22
+ * Type for the result of a safe audio operation
23
+ */
24
+ export type AudioOperationResult = {
25
+ success: true;
26
+ error: null;
27
+ } | {
28
+ success: false;
29
+ error: {
30
+ message: string;
31
+ code: string;
32
+ context: string;
33
+ };
34
+ };
35
+ /**
36
+ * Helper function to safely perform audio operations
37
+ */
38
+ export declare function safeAudioOperation(operation: () => Promise<void>, errorContext: string): Promise<AudioOperationResult>;
@@ -1,11 +1,15 @@
1
- import { Logger } from './logger';
2
1
  import { Storage } from './storage';
2
+ import { Audio } from './audio';
3
+ import { Logger } from './logger';
3
4
  export * from './storage';
4
- export type { Storage };
5
+ export * from './logger';
6
+ export * from './audio';
7
+ export type { Storage, Audio, Logger };
5
8
  export interface Platform {
6
9
  storage?: Storage;
7
10
  logger?: Logger;
8
11
  env: {
9
12
  platform: string;
10
13
  };
14
+ audio?: Audio;
11
15
  }
@@ -36,11 +36,17 @@ export declare function isStorageAvailable(storage: Storage | undefined): storag
36
36
  export type StorageOperationResult<T> = {
37
37
  success: true;
38
38
  result: T;
39
+ error: null;
39
40
  } | {
40
41
  success: false;
41
- error: Error;
42
+ result: null;
43
+ error: {
44
+ message: string;
45
+ code: string;
46
+ context: string;
47
+ };
42
48
  };
43
49
  /**
44
50
  * Helper function to safely perform storage operations
45
51
  */
46
- export declare function safeStorageOperation<T>(operation: () => Promise<T>, errorMessage: string): Promise<StorageOperationResult<T>>;
52
+ export declare function safeStorageOperation<T>(operation: () => Promise<T>, errorContext: string): Promise<StorageOperationResult<T>>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { User } from '../types';
2
+ export declare function getTestUser(): User;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -6,9 +6,9 @@ export type MakeKeysNotNullable<T, K extends keyof T> = Omit<T, K> & {
6
6
  export type LoadingReason = 'sending_message_to_bot' | 'sending_message_to_agent' | 'creating_session' | 'polling' | 'loading_contact' | 'saving_contact' | 'cleaning_up' | null;
7
7
  export type LoadingState = {
8
8
  isLoading: boolean;
9
- reason?: LoadingReason;
9
+ reason: LoadingReason;
10
10
  };
11
- export type ErrorCode = 'SESSION_CREATION_FAILED' | 'SESSION_CLEAR_FAILED' | 'SESSION_PERSISTENCE_FAILED' | 'MESSAGE_SEND_FAILED' | 'NO_ACTIVE_SESSION' | 'CONTACT_PERSISTENCE_FAILED' | 'CONTACT_LOAD_FAILED' | 'CONTACT_SAVE_FAILED' | 'CONTACT_CLEANUP_FAILED';
11
+ export type ErrorCode = 'SESSION_CREATION_FAILED' | 'SESSION_CLEAR_FAILED' | 'SESSION_PERSISTENCE_FAILED' | 'SESSION_POLLING_FAILED' | 'MESSAGES_POLLING_FAILED' | 'MESSAGE_SEND_FAILED' | 'NO_ACTIVE_SESSION' | 'CONTACT_PERSISTENCE_FAILED' | 'CONTACT_LOAD_FAILED' | 'CONTACT_SAVE_FAILED' | 'CONTACT_CLEANUP_FAILED';
12
12
  export type ErrorState = {
13
13
  hasError: boolean;
14
14
  message?: string;
@@ -19,6 +19,7 @@ export declare class PubSub<S> {
19
19
  private lifecycleListeners;
20
20
  constructor(state: S);
21
21
  private emitLifecycle;
22
+ private notifySubscribers;
22
23
  /**
23
24
  * Subscribe to state changes
24
25
  * @param callback Function to call when state changes
@@ -437,6 +437,7 @@ declare const widgetSessionSchema: z.ZodObject<{
437
437
  channel: string;
438
438
  }>;
439
439
  declare const httpChatInputDto: z.ZodObject<{
440
+ uuid: z.ZodOptional<z.ZodString>;
440
441
  content: z.ZodString;
441
442
  session_id: z.ZodString;
442
443
  headers: z.ZodNullable<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
@@ -499,6 +500,7 @@ declare const httpChatInputDto: z.ZodObject<{
499
500
  size: number;
500
501
  url: string;
501
502
  }[] | null | undefined;
503
+ uuid?: string | undefined;
502
504
  headers?: Record<string, string> | null | undefined;
503
505
  query_params?: Record<string, string> | null | undefined;
504
506
  language?: string | null | undefined;
@@ -520,6 +522,7 @@ declare const httpChatInputDto: z.ZodObject<{
520
522
  size: number;
521
523
  url: string;
522
524
  }[] | null | undefined;
525
+ uuid?: string | undefined;
523
526
  headers?: Record<string, string> | null | undefined;
524
527
  query_params?: Record<string, string> | null | undefined;
525
528
  language?: string | null | undefined;
@@ -19,6 +19,7 @@ export interface CustomFetch {
19
19
  };
20
20
  };
21
21
  }
22
- export declare function createFetch(defaultConfig?: RequestConfig): CustomFetch;
22
+ type Fetch = typeof globalThis.fetch;
23
+ export declare function createFetch(defaultConfig?: RequestConfig, fetch?: Fetch): CustomFetch;
23
24
  export declare function handleJsonResponse<T>(response: Response): Promise<T>;
24
25
  export {};
@@ -63,6 +63,7 @@ n.object({
63
63
  channel: n.string()
64
64
  });
65
65
  n.object({
66
+ uuid: n.string().uuid().optional(),
66
67
  content: n.string(),
67
68
  session_id: n.string(),
68
69
  headers: n.record(n.string(), n.string()).optional().nullable(),
@@ -133,4 +134,4 @@ export {
133
134
  e as c,
134
135
  c as g
135
136
  };
136
- //# sourceMappingURL=genUuid-CDpI3ugS.js.map
137
+ //# sourceMappingURL=genUuid-C12yFv3j.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genUuid-C12yFv3j.js","sources":["../core/types/schemas-v2.ts","../core/utils/genUuid.ts"],"sourcesContent":["import { z } from \"zod\";\n\nconst DayOfficeHoursSchema = z.object({\n from: z.string(),\n to: z.string(),\n})\n\nconst officeHoursSchema = z.object({\n monday: DayOfficeHoursSchema.optional(),\n tuesday: DayOfficeHoursSchema.optional(),\n wednesday: DayOfficeHoursSchema.optional(),\n thursday: DayOfficeHoursSchema.optional(),\n friday: DayOfficeHoursSchema.optional(),\n saturday: DayOfficeHoursSchema.optional(),\n sunday: DayOfficeHoursSchema.optional(),\n Everyday: DayOfficeHoursSchema.optional(),\n WeekDays: DayOfficeHoursSchema.optional(),\n});\n\nconst widgetPreludeSchema = z.object({\n initialQuestions: z.array(z.string()),\n aiEnabled: z.boolean(),\n officeHours: officeHoursSchema,\n officeHoursTimezone: z.string().nullable(),\n organizationName: z.string(),\n})\n\nexport const chatAttachmentSchema = z.object({\n id: z.string(),\n name: z.string(),\n size: z.number(),\n type: z.string(),\n url: z.string(),\n});\n\nexport enum MessageTypeEnum {\n MESSAGE = 'message',\n HANDOFF = 'handoff',\n HANDOFF_TO_ZENDESK = 'handoff_to_zendesk',\n AGENT_MESSAGE = 'agent_message',\n AGENT_JOINED = 'agent_joined',\n AGENT_COMMENT = 'agent_comment',\n AGENT_TOOK_SESSION_FROM_AI = 'agent_took_session_from_ai',\n AGENT_REOPENED_SESSION = 'agent_reopened_session',\n AI_DECIDED_TO_RESOLVE_THE_ISSUE = 'ai_decided_to_resolve_the_issue',\n EMAIL_DRAFT_MESSAGE = 'email_draft_message',\n FOLLOWUP = 'followup',\n AI_ASSUMED_THE_SESSION_RESOLVED = 'ai_assumed_the_session_resolved',\n CONTACT_RESOLVED_THE_SESSION = 'user_confirmed_the_session_resolved',\n}\n\nconst widgetHistorySchema = z.object({\n publicId: z.string(),\n type: z.nativeEnum(MessageTypeEnum),\n sender: z.object({\n kind: z.enum(['user', 'agent', 'ai', 'none', 'unknown']),\n name: z.string().optional().nullable(),\n avatar: z.string().optional().nullable(),\n }),\n content: z.object({\n text: z.string().optional().nullable(),\n }),\n sentAt: z.string().optional().nullable(),\n actionCalls: z\n .array(\n z.object({\n actionName: z.string(),\n args: z.record(z.string(), z.unknown()),\n result: z.record(z.string(), z.unknown()).optional().nullable(),\n }),\n )\n .optional()\n .nullable(),\n attachments: z.array(chatAttachmentSchema).optional().nullable(),\n})\n\nconst widgetSessionSchema = z.object({\n id: z.string().uuid(),\n createdAt: z.date(),\n updatedAt: z.date(),\n isHandedOff: z.boolean(),\n isOpened: z.boolean(),\n assignee: z.object({\n kind: z.enum(['human', 'ai', 'none', 'unknown']),\n name: z.string().nullable(),\n }),\n channel: z.string(),\n})\n\nconst httpChatInputDto = z.object({\n uuid: z.string().uuid().optional(),\n content: z.string(),\n session_id: z.string(),\n headers: z.record(z.string(), z.string()).optional().nullable(),\n bot_token: z.string(),\n query_params: z.record(z.string(), z.string()).optional().nullable(),\n user: z\n .object({\n email: z.string().optional(),\n name: z.string().optional(),\n phone: z.string().optional(),\n avatar: z.string().optional(),\n customData: z.record(z.string(), z.string()).optional(),\n })\n .optional()\n .nullable(),\n language: z.string().optional().nullable(),\n attachments: z.array(chatAttachmentSchema).optional().nullable(),\n})\n\nconst handleContactMessageOutputSchema = z.discriminatedUnion(\n 'success',\n [\n z.object({\n success: z.literal(true),\n code: z.union([z.string(), z.literal(\"session_assigned_to_human_agent\")]).optional(),\n options: z\n .object({\n type: z.literal('options'),\n value: z.array(z.string()),\n })\n .optional(),\n autopilotResponse: z\n .object({\n type: z.literal('text'),\n value: z.object({\n error: z.boolean(),\n content: z.string(),\n }),\n id: z.string().optional(),\n })\n .optional(),\n uiResponse: z\n .object({\n type: z.literal('ui'),\n value: z.object({\n type: z.literal('ui_component'),\n request_response: z.unknown(),\n name: z.string(),\n content: z.string().optional(),\n }),\n })\n .optional(),\n sessionIsHandedOff: z.boolean().optional(),\n }),\n z.object({\n success: z.literal(false),\n error: z.object({\n code: z.string().optional(),\n message: z.string().optional(),\n }),\n }),\n ],\n);\n\nconst widgetVoteSchema = z.object({\n action: z.enum(['upvote', 'downvote']),\n sessionId: z.string(),\n messagePublicId: z.string(),\n});\n\nconst widgetVoteResponseSchema = z.object({\n messagePublicId: z.string().nullable(),\n success: z.boolean(),\n});\n\nexport type WidgetVoteResponseSchema = z.infer<typeof widgetVoteResponseSchema>;\nexport type HandleContactMessageOutputSchema = z.infer<typeof handleContactMessageOutputSchema>;\nexport type HttpChatInputSchema = z.infer<typeof httpChatInputDto>;\nexport type WidgetSessionSchema = z.infer<typeof widgetSessionSchema>;\nexport type WidgetHistorySchema = z.infer<typeof widgetHistorySchema>;\nexport type WidgetPreludeSchema = z.infer<typeof widgetPreludeSchema>;\nexport type WidgetVoteSchema = z.infer<typeof widgetVoteSchema>;\nexport type ChatAttachmentType = z.infer<typeof chatAttachmentSchema>;\n","import { v4 as uuidv4 } from \"uuid\";\n\nexport function genUuid() {\n return uuidv4();\n}\n"],"names":["DayOfficeHoursSchema","z","officeHoursSchema","chatAttachmentSchema","MessageTypeEnum","genUuid","uuidv4"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const n=require("zod"),a=require("uuid"),o=n.z.object({from:n.z.string(),to:n.z.string()}),s=n.z.object({monday:o.optional(),tuesday:o.optional(),wednesday:o.optional(),thursday:o.optional(),friday:o.optional(),saturday:o.optional(),sunday:o.optional(),Everyday:o.optional(),WeekDays:o.optional()});n.z.object({initialQuestions:n.z.array(n.z.string()),aiEnabled:n.z.boolean(),officeHours:s,officeHoursTimezone:n.z.string().nullable(),organizationName:n.z.string()});const e=n.z.object({id:n.z.string(),name:n.z.string(),size:n.z.number(),type:n.z.string(),url:n.z.string()});var i=(t=>(t.MESSAGE="message",t.HANDOFF="handoff",t.HANDOFF_TO_ZENDESK="handoff_to_zendesk",t.AGENT_MESSAGE="agent_message",t.AGENT_JOINED="agent_joined",t.AGENT_COMMENT="agent_comment",t.AGENT_TOOK_SESSION_FROM_AI="agent_took_session_from_ai",t.AGENT_REOPENED_SESSION="agent_reopened_session",t.AI_DECIDED_TO_RESOLVE_THE_ISSUE="ai_decided_to_resolve_the_issue",t.EMAIL_DRAFT_MESSAGE="email_draft_message",t.FOLLOWUP="followup",t.AI_ASSUMED_THE_SESSION_RESOLVED="ai_assumed_the_session_resolved",t.CONTACT_RESOLVED_THE_SESSION="user_confirmed_the_session_resolved",t))(i||{});n.z.object({publicId:n.z.string(),type:n.z.nativeEnum(i),sender:n.z.object({kind:n.z.enum(["user","agent","ai","none","unknown"]),name:n.z.string().optional().nullable(),avatar:n.z.string().optional().nullable()}),content:n.z.object({text:n.z.string().optional().nullable()}),sentAt:n.z.string().optional().nullable(),actionCalls:n.z.array(n.z.object({actionName:n.z.string(),args:n.z.record(n.z.string(),n.z.unknown()),result:n.z.record(n.z.string(),n.z.unknown()).optional().nullable()})).optional().nullable(),attachments:n.z.array(e).optional().nullable()});n.z.object({id:n.z.string().uuid(),createdAt:n.z.date(),updatedAt:n.z.date(),isHandedOff:n.z.boolean(),isOpened:n.z.boolean(),assignee:n.z.object({kind:n.z.enum(["human","ai","none","unknown"]),name:n.z.string().nullable()}),channel:n.z.string()});n.z.object({uuid:n.z.string().uuid().optional(),content:n.z.string(),session_id:n.z.string(),headers:n.z.record(n.z.string(),n.z.string()).optional().nullable(),bot_token:n.z.string(),query_params:n.z.record(n.z.string(),n.z.string()).optional().nullable(),user:n.z.object({email:n.z.string().optional(),name:n.z.string().optional(),phone:n.z.string().optional(),avatar:n.z.string().optional(),customData:n.z.record(n.z.string(),n.z.string()).optional()}).optional().nullable(),language:n.z.string().optional().nullable(),attachments:n.z.array(e).optional().nullable()});n.z.discriminatedUnion("success",[n.z.object({success:n.z.literal(!0),code:n.z.union([n.z.string(),n.z.literal("session_assigned_to_human_agent")]).optional(),options:n.z.object({type:n.z.literal("options"),value:n.z.array(n.z.string())}).optional(),autopilotResponse:n.z.object({type:n.z.literal("text"),value:n.z.object({error:n.z.boolean(),content:n.z.string()}),id:n.z.string().optional()}).optional(),uiResponse:n.z.object({type:n.z.literal("ui"),value:n.z.object({type:n.z.literal("ui_component"),request_response:n.z.unknown(),name:n.z.string(),content:n.z.string().optional()})}).optional(),sessionIsHandedOff:n.z.boolean().optional()}),n.z.object({success:n.z.literal(!1),error:n.z.object({code:n.z.string().optional(),message:n.z.string().optional()})})]);n.z.object({action:n.z.enum(["upvote","downvote"]),sessionId:n.z.string(),messagePublicId:n.z.string()});n.z.object({messagePublicId:n.z.string().nullable(),success:n.z.boolean()});function l(){return a.v4()}exports.MessageTypeEnum=i;exports.chatAttachmentSchema=e;exports.genUuid=l;
2
+ //# sourceMappingURL=genUuid-DdeSE04H.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genUuid-DdeSE04H.cjs","sources":["../core/types/schemas-v2.ts","../core/utils/genUuid.ts"],"sourcesContent":["import { z } from \"zod\";\n\nconst DayOfficeHoursSchema = z.object({\n from: z.string(),\n to: z.string(),\n})\n\nconst officeHoursSchema = z.object({\n monday: DayOfficeHoursSchema.optional(),\n tuesday: DayOfficeHoursSchema.optional(),\n wednesday: DayOfficeHoursSchema.optional(),\n thursday: DayOfficeHoursSchema.optional(),\n friday: DayOfficeHoursSchema.optional(),\n saturday: DayOfficeHoursSchema.optional(),\n sunday: DayOfficeHoursSchema.optional(),\n Everyday: DayOfficeHoursSchema.optional(),\n WeekDays: DayOfficeHoursSchema.optional(),\n});\n\nconst widgetPreludeSchema = z.object({\n initialQuestions: z.array(z.string()),\n aiEnabled: z.boolean(),\n officeHours: officeHoursSchema,\n officeHoursTimezone: z.string().nullable(),\n organizationName: z.string(),\n})\n\nexport const chatAttachmentSchema = z.object({\n id: z.string(),\n name: z.string(),\n size: z.number(),\n type: z.string(),\n url: z.string(),\n});\n\nexport enum MessageTypeEnum {\n MESSAGE = 'message',\n HANDOFF = 'handoff',\n HANDOFF_TO_ZENDESK = 'handoff_to_zendesk',\n AGENT_MESSAGE = 'agent_message',\n AGENT_JOINED = 'agent_joined',\n AGENT_COMMENT = 'agent_comment',\n AGENT_TOOK_SESSION_FROM_AI = 'agent_took_session_from_ai',\n AGENT_REOPENED_SESSION = 'agent_reopened_session',\n AI_DECIDED_TO_RESOLVE_THE_ISSUE = 'ai_decided_to_resolve_the_issue',\n EMAIL_DRAFT_MESSAGE = 'email_draft_message',\n FOLLOWUP = 'followup',\n AI_ASSUMED_THE_SESSION_RESOLVED = 'ai_assumed_the_session_resolved',\n CONTACT_RESOLVED_THE_SESSION = 'user_confirmed_the_session_resolved',\n}\n\nconst widgetHistorySchema = z.object({\n publicId: z.string(),\n type: z.nativeEnum(MessageTypeEnum),\n sender: z.object({\n kind: z.enum(['user', 'agent', 'ai', 'none', 'unknown']),\n name: z.string().optional().nullable(),\n avatar: z.string().optional().nullable(),\n }),\n content: z.object({\n text: z.string().optional().nullable(),\n }),\n sentAt: z.string().optional().nullable(),\n actionCalls: z\n .array(\n z.object({\n actionName: z.string(),\n args: z.record(z.string(), z.unknown()),\n result: z.record(z.string(), z.unknown()).optional().nullable(),\n }),\n )\n .optional()\n .nullable(),\n attachments: z.array(chatAttachmentSchema).optional().nullable(),\n})\n\nconst widgetSessionSchema = z.object({\n id: z.string().uuid(),\n createdAt: z.date(),\n updatedAt: z.date(),\n isHandedOff: z.boolean(),\n isOpened: z.boolean(),\n assignee: z.object({\n kind: z.enum(['human', 'ai', 'none', 'unknown']),\n name: z.string().nullable(),\n }),\n channel: z.string(),\n})\n\nconst httpChatInputDto = z.object({\n uuid: z.string().uuid().optional(),\n content: z.string(),\n session_id: z.string(),\n headers: z.record(z.string(), z.string()).optional().nullable(),\n bot_token: z.string(),\n query_params: z.record(z.string(), z.string()).optional().nullable(),\n user: z\n .object({\n email: z.string().optional(),\n name: z.string().optional(),\n phone: z.string().optional(),\n avatar: z.string().optional(),\n customData: z.record(z.string(), z.string()).optional(),\n })\n .optional()\n .nullable(),\n language: z.string().optional().nullable(),\n attachments: z.array(chatAttachmentSchema).optional().nullable(),\n})\n\nconst handleContactMessageOutputSchema = z.discriminatedUnion(\n 'success',\n [\n z.object({\n success: z.literal(true),\n code: z.union([z.string(), z.literal(\"session_assigned_to_human_agent\")]).optional(),\n options: z\n .object({\n type: z.literal('options'),\n value: z.array(z.string()),\n })\n .optional(),\n autopilotResponse: z\n .object({\n type: z.literal('text'),\n value: z.object({\n error: z.boolean(),\n content: z.string(),\n }),\n id: z.string().optional(),\n })\n .optional(),\n uiResponse: z\n .object({\n type: z.literal('ui'),\n value: z.object({\n type: z.literal('ui_component'),\n request_response: z.unknown(),\n name: z.string(),\n content: z.string().optional(),\n }),\n })\n .optional(),\n sessionIsHandedOff: z.boolean().optional(),\n }),\n z.object({\n success: z.literal(false),\n error: z.object({\n code: z.string().optional(),\n message: z.string().optional(),\n }),\n }),\n ],\n);\n\nconst widgetVoteSchema = z.object({\n action: z.enum(['upvote', 'downvote']),\n sessionId: z.string(),\n messagePublicId: z.string(),\n});\n\nconst widgetVoteResponseSchema = z.object({\n messagePublicId: z.string().nullable(),\n success: z.boolean(),\n});\n\nexport type WidgetVoteResponseSchema = z.infer<typeof widgetVoteResponseSchema>;\nexport type HandleContactMessageOutputSchema = z.infer<typeof handleContactMessageOutputSchema>;\nexport type HttpChatInputSchema = z.infer<typeof httpChatInputDto>;\nexport type WidgetSessionSchema = z.infer<typeof widgetSessionSchema>;\nexport type WidgetHistorySchema = z.infer<typeof widgetHistorySchema>;\nexport type WidgetPreludeSchema = z.infer<typeof widgetPreludeSchema>;\nexport type WidgetVoteSchema = z.infer<typeof widgetVoteSchema>;\nexport type ChatAttachmentType = z.infer<typeof chatAttachmentSchema>;\n","import { v4 as uuidv4 } from \"uuid\";\n\nexport function genUuid() {\n return uuidv4();\n}\n"],"names":["DayOfficeHoursSchema","z","officeHoursSchema","chatAttachmentSchema","MessageTypeEnum","genUuid","uuidv4"],"mappings":"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"}