@cossistant/core 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client.d.ts +14 -2
- package/client.d.ts.map +1 -1
- package/client.js +25 -4
- package/client.js.map +1 -1
- package/env.d.ts +1 -0
- package/index.d.ts +7 -4
- package/index.js +6 -3
- package/package.json +1 -1
- package/realtime-client.d.ts +85 -0
- package/realtime-client.d.ts.map +1 -0
- package/realtime-client.js +463 -0
- package/realtime-client.js.map +1 -0
- package/realtime-event-filter.d.ts +15 -0
- package/realtime-event-filter.d.ts.map +1 -0
- package/realtime-event-filter.js +40 -0
- package/realtime-event-filter.js.map +1 -0
- package/resolve-public-key.d.ts +31 -0
- package/resolve-public-key.d.ts.map +1 -0
- package/resolve-public-key.js +52 -0
- package/resolve-public-key.js.map +1 -0
- package/rest-client.d.ts.map +1 -1
- package/rest-client.js +3 -2
- package/rest-client.js.map +1 -1
- package/store/seen-store.d.ts +1 -1
- package/store/timeline-items-store.d.ts.map +1 -1
- package/store/timeline-items-store.js +1 -1
- package/store/typing-store.d.ts +1 -1
- package/types/src/api/contact.js +297 -0
- package/types/src/api/contact.js.map +1 -0
- package/types/src/api/timeline-item.js +1 -1
- package/types/src/api/visitor.js +301 -0
- package/types/src/api/visitor.js.map +1 -0
- package/types/src/enums.js +12 -1
- package/types/src/enums.js.map +1 -1
- package/types/src/realtime-events.d.ts +2 -1
- package/types/src/realtime-events.d.ts.map +1 -1
- package/types/src/realtime-events.js +349 -0
- package/types/src/realtime-events.js.map +1 -0
- package/types/src/schemas.js +49 -0
- package/types/src/schemas.js.map +1 -0
- package/types/src/trpc/conversation.js +124 -0
- package/types/src/trpc/conversation.js.map +1 -0
- package/utils.d.ts.map +1 -1
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import { ConversationEventType, ConversationStatus, ConversationTimelineType, TimelineItemVisibility } from "./enums.js";
|
|
2
|
+
import { visitorResponseSchema } from "./api/visitor.js";
|
|
3
|
+
import { conversationSchema } from "./schemas.js";
|
|
4
|
+
import { conversationHeaderSchema } from "./trpc/conversation.js";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
|
|
7
|
+
//#region ../types/src/realtime-events.ts
|
|
8
|
+
const baseRealtimeEvent = z.object({
|
|
9
|
+
websiteId: z.string(),
|
|
10
|
+
organizationId: z.string(),
|
|
11
|
+
visitorId: z.string().nullable(),
|
|
12
|
+
userId: z.string().nullable()
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Central event system for real-time communication
|
|
16
|
+
* All WebSocket and Redis Pub/Sub events are defined here
|
|
17
|
+
*/
|
|
18
|
+
const realtimeSchema = {
|
|
19
|
+
userConnected: baseRealtimeEvent.extend({ connectionId: z.string() }),
|
|
20
|
+
userDisconnected: baseRealtimeEvent.extend({ connectionId: z.string() }),
|
|
21
|
+
visitorConnected: baseRealtimeEvent.extend({
|
|
22
|
+
visitorId: z.string(),
|
|
23
|
+
connectionId: z.string()
|
|
24
|
+
}),
|
|
25
|
+
visitorDisconnected: baseRealtimeEvent.extend({
|
|
26
|
+
visitorId: z.string(),
|
|
27
|
+
connectionId: z.string()
|
|
28
|
+
}),
|
|
29
|
+
userPresenceUpdate: baseRealtimeEvent.extend({
|
|
30
|
+
userId: z.string(),
|
|
31
|
+
status: z.enum([
|
|
32
|
+
"online",
|
|
33
|
+
"away",
|
|
34
|
+
"offline"
|
|
35
|
+
]),
|
|
36
|
+
lastSeen: z.string()
|
|
37
|
+
}),
|
|
38
|
+
conversationSeen: baseRealtimeEvent.extend({
|
|
39
|
+
conversationId: z.string(),
|
|
40
|
+
aiAgentId: z.string().nullable(),
|
|
41
|
+
lastSeenAt: z.string(),
|
|
42
|
+
actorType: z.enum([
|
|
43
|
+
"visitor",
|
|
44
|
+
"user",
|
|
45
|
+
"ai_agent"
|
|
46
|
+
]),
|
|
47
|
+
actorId: z.string()
|
|
48
|
+
}),
|
|
49
|
+
conversationTyping: baseRealtimeEvent.extend({
|
|
50
|
+
conversationId: z.string(),
|
|
51
|
+
aiAgentId: z.string().nullable(),
|
|
52
|
+
isTyping: z.boolean(),
|
|
53
|
+
visitorPreview: z.string().max(2e3).nullable().optional()
|
|
54
|
+
}),
|
|
55
|
+
timelineItemCreated: baseRealtimeEvent.extend({
|
|
56
|
+
conversationId: z.string(),
|
|
57
|
+
item: z.object({
|
|
58
|
+
id: z.string(),
|
|
59
|
+
conversationId: z.string(),
|
|
60
|
+
organizationId: z.string(),
|
|
61
|
+
visibility: z.enum([TimelineItemVisibility.PUBLIC, TimelineItemVisibility.PRIVATE]),
|
|
62
|
+
type: z.enum([
|
|
63
|
+
ConversationTimelineType.MESSAGE,
|
|
64
|
+
ConversationTimelineType.EVENT,
|
|
65
|
+
ConversationTimelineType.IDENTIFICATION,
|
|
66
|
+
ConversationTimelineType.TOOL
|
|
67
|
+
]),
|
|
68
|
+
text: z.string().nullable(),
|
|
69
|
+
parts: z.array(z.unknown()),
|
|
70
|
+
userId: z.string().nullable(),
|
|
71
|
+
visitorId: z.string().nullable(),
|
|
72
|
+
aiAgentId: z.string().nullable(),
|
|
73
|
+
createdAt: z.string(),
|
|
74
|
+
deletedAt: z.string().nullable(),
|
|
75
|
+
tool: z.string().nullable().optional()
|
|
76
|
+
})
|
|
77
|
+
}),
|
|
78
|
+
conversationCreated: baseRealtimeEvent.extend({
|
|
79
|
+
conversationId: z.string(),
|
|
80
|
+
conversation: conversationSchema,
|
|
81
|
+
header: conversationHeaderSchema
|
|
82
|
+
}),
|
|
83
|
+
visitorIdentified: baseRealtimeEvent.extend({
|
|
84
|
+
visitorId: z.string(),
|
|
85
|
+
visitor: visitorResponseSchema
|
|
86
|
+
}),
|
|
87
|
+
conversationEventCreated: baseRealtimeEvent.extend({
|
|
88
|
+
conversationId: z.string(),
|
|
89
|
+
aiAgentId: z.string().nullable(),
|
|
90
|
+
event: z.object({
|
|
91
|
+
id: z.string(),
|
|
92
|
+
conversationId: z.string(),
|
|
93
|
+
organizationId: z.string(),
|
|
94
|
+
type: z.enum([
|
|
95
|
+
ConversationEventType.ASSIGNED,
|
|
96
|
+
ConversationEventType.UNASSIGNED,
|
|
97
|
+
ConversationEventType.PARTICIPANT_REQUESTED,
|
|
98
|
+
ConversationEventType.PARTICIPANT_JOINED,
|
|
99
|
+
ConversationEventType.PARTICIPANT_LEFT,
|
|
100
|
+
ConversationEventType.STATUS_CHANGED,
|
|
101
|
+
ConversationEventType.PRIORITY_CHANGED,
|
|
102
|
+
ConversationEventType.TAG_ADDED,
|
|
103
|
+
ConversationEventType.TAG_REMOVED,
|
|
104
|
+
ConversationEventType.RESOLVED,
|
|
105
|
+
ConversationEventType.REOPENED,
|
|
106
|
+
ConversationEventType.VISITOR_BLOCKED,
|
|
107
|
+
ConversationEventType.VISITOR_UNBLOCKED,
|
|
108
|
+
ConversationEventType.VISITOR_IDENTIFIED
|
|
109
|
+
]),
|
|
110
|
+
actorUserId: z.string().nullable(),
|
|
111
|
+
actorAiAgentId: z.string().nullable(),
|
|
112
|
+
targetUserId: z.string().nullable(),
|
|
113
|
+
targetAiAgentId: z.string().nullable(),
|
|
114
|
+
message: z.string().nullable(),
|
|
115
|
+
metadata: z.record(z.string(), z.unknown()).nullable(),
|
|
116
|
+
createdAt: z.string(),
|
|
117
|
+
updatedAt: z.string(),
|
|
118
|
+
deletedAt: z.string().nullable()
|
|
119
|
+
})
|
|
120
|
+
}),
|
|
121
|
+
conversationUpdated: baseRealtimeEvent.extend({
|
|
122
|
+
conversationId: z.string(),
|
|
123
|
+
updates: z.object({
|
|
124
|
+
title: z.string().nullable().optional(),
|
|
125
|
+
sentiment: z.enum([
|
|
126
|
+
"positive",
|
|
127
|
+
"negative",
|
|
128
|
+
"neutral"
|
|
129
|
+
]).nullable().optional(),
|
|
130
|
+
sentimentConfidence: z.number().nullable().optional(),
|
|
131
|
+
escalatedAt: z.string().nullable().optional(),
|
|
132
|
+
escalationReason: z.string().nullable().optional(),
|
|
133
|
+
status: z.enum([
|
|
134
|
+
ConversationStatus.OPEN,
|
|
135
|
+
ConversationStatus.RESOLVED,
|
|
136
|
+
ConversationStatus.SPAM
|
|
137
|
+
]).optional(),
|
|
138
|
+
priority: z.enum([
|
|
139
|
+
"low",
|
|
140
|
+
"normal",
|
|
141
|
+
"high",
|
|
142
|
+
"urgent"
|
|
143
|
+
]).optional(),
|
|
144
|
+
resolvedAt: z.string().nullable().optional(),
|
|
145
|
+
resolvedByUserId: z.string().nullable().optional(),
|
|
146
|
+
resolvedByAiAgentId: z.string().nullable().optional(),
|
|
147
|
+
resolutionTime: z.number().nullable().optional(),
|
|
148
|
+
deletedAt: z.string().nullable().optional()
|
|
149
|
+
}),
|
|
150
|
+
aiAgentId: z.string().nullable()
|
|
151
|
+
}),
|
|
152
|
+
aiAgentProcessingStarted: baseRealtimeEvent.extend({
|
|
153
|
+
conversationId: z.string(),
|
|
154
|
+
aiAgentId: z.string(),
|
|
155
|
+
workflowRunId: z.string(),
|
|
156
|
+
triggerMessageId: z.string(),
|
|
157
|
+
phase: z.string().optional(),
|
|
158
|
+
audience: z.enum(["all", "dashboard"]).default("dashboard")
|
|
159
|
+
}),
|
|
160
|
+
aiAgentDecisionMade: baseRealtimeEvent.extend({
|
|
161
|
+
conversationId: z.string(),
|
|
162
|
+
aiAgentId: z.string(),
|
|
163
|
+
workflowRunId: z.string(),
|
|
164
|
+
shouldAct: z.boolean(),
|
|
165
|
+
reason: z.string(),
|
|
166
|
+
mode: z.enum([
|
|
167
|
+
"respond_to_visitor",
|
|
168
|
+
"respond_to_command",
|
|
169
|
+
"background_only"
|
|
170
|
+
]),
|
|
171
|
+
audience: z.enum(["all", "dashboard"])
|
|
172
|
+
}),
|
|
173
|
+
aiAgentProcessingProgress: baseRealtimeEvent.extend({
|
|
174
|
+
conversationId: z.string(),
|
|
175
|
+
aiAgentId: z.string(),
|
|
176
|
+
workflowRunId: z.string(),
|
|
177
|
+
phase: z.string(),
|
|
178
|
+
message: z.string().nullable(),
|
|
179
|
+
tool: z.object({
|
|
180
|
+
toolCallId: z.string(),
|
|
181
|
+
toolName: z.string(),
|
|
182
|
+
state: z.enum([
|
|
183
|
+
"partial",
|
|
184
|
+
"result",
|
|
185
|
+
"error"
|
|
186
|
+
])
|
|
187
|
+
}).optional(),
|
|
188
|
+
audience: z.enum(["all", "dashboard"]).default("all")
|
|
189
|
+
}),
|
|
190
|
+
aiAgentProcessingCompleted: baseRealtimeEvent.extend({
|
|
191
|
+
conversationId: z.string(),
|
|
192
|
+
aiAgentId: z.string(),
|
|
193
|
+
workflowRunId: z.string(),
|
|
194
|
+
status: z.enum([
|
|
195
|
+
"success",
|
|
196
|
+
"skipped",
|
|
197
|
+
"cancelled",
|
|
198
|
+
"error"
|
|
199
|
+
]),
|
|
200
|
+
action: z.string().nullable().optional(),
|
|
201
|
+
reason: z.string().nullable().optional(),
|
|
202
|
+
audience: z.enum(["all", "dashboard"]).default("all")
|
|
203
|
+
}),
|
|
204
|
+
timelineItemUpdated: baseRealtimeEvent.extend({
|
|
205
|
+
conversationId: z.string(),
|
|
206
|
+
item: z.object({
|
|
207
|
+
id: z.string(),
|
|
208
|
+
conversationId: z.string(),
|
|
209
|
+
organizationId: z.string(),
|
|
210
|
+
visibility: z.enum([TimelineItemVisibility.PUBLIC, TimelineItemVisibility.PRIVATE]),
|
|
211
|
+
type: z.enum([
|
|
212
|
+
ConversationTimelineType.MESSAGE,
|
|
213
|
+
ConversationTimelineType.EVENT,
|
|
214
|
+
ConversationTimelineType.IDENTIFICATION,
|
|
215
|
+
ConversationTimelineType.TOOL
|
|
216
|
+
]),
|
|
217
|
+
text: z.string().nullable(),
|
|
218
|
+
parts: z.array(z.unknown()),
|
|
219
|
+
userId: z.string().nullable(),
|
|
220
|
+
visitorId: z.string().nullable(),
|
|
221
|
+
aiAgentId: z.string().nullable(),
|
|
222
|
+
createdAt: z.string(),
|
|
223
|
+
deletedAt: z.string().nullable(),
|
|
224
|
+
tool: z.string().nullable().optional()
|
|
225
|
+
})
|
|
226
|
+
}),
|
|
227
|
+
timelineItemPartUpdated: baseRealtimeEvent.extend({
|
|
228
|
+
conversationId: z.string(),
|
|
229
|
+
timelineItemId: z.string(),
|
|
230
|
+
partIndex: z.number(),
|
|
231
|
+
part: z.unknown()
|
|
232
|
+
}),
|
|
233
|
+
crawlStarted: baseRealtimeEvent.extend({
|
|
234
|
+
linkSourceId: z.string(),
|
|
235
|
+
url: z.string(),
|
|
236
|
+
discoveredPages: z.array(z.object({
|
|
237
|
+
url: z.string(),
|
|
238
|
+
title: z.string().nullable(),
|
|
239
|
+
depth: z.number()
|
|
240
|
+
})),
|
|
241
|
+
totalPagesCount: z.number()
|
|
242
|
+
}),
|
|
243
|
+
crawlProgress: baseRealtimeEvent.extend({
|
|
244
|
+
linkSourceId: z.string(),
|
|
245
|
+
url: z.string(),
|
|
246
|
+
page: z.object({
|
|
247
|
+
url: z.string(),
|
|
248
|
+
title: z.string().nullable(),
|
|
249
|
+
status: z.enum([
|
|
250
|
+
"pending",
|
|
251
|
+
"crawling",
|
|
252
|
+
"completed",
|
|
253
|
+
"failed"
|
|
254
|
+
]),
|
|
255
|
+
sizeBytes: z.number().optional(),
|
|
256
|
+
error: z.string().nullable().optional()
|
|
257
|
+
}),
|
|
258
|
+
completedCount: z.number(),
|
|
259
|
+
totalCount: z.number()
|
|
260
|
+
}),
|
|
261
|
+
crawlCompleted: baseRealtimeEvent.extend({
|
|
262
|
+
linkSourceId: z.string(),
|
|
263
|
+
url: z.string(),
|
|
264
|
+
crawledPagesCount: z.number(),
|
|
265
|
+
totalSizeBytes: z.number(),
|
|
266
|
+
failedPagesCount: z.number()
|
|
267
|
+
}),
|
|
268
|
+
crawlFailed: baseRealtimeEvent.extend({
|
|
269
|
+
linkSourceId: z.string(),
|
|
270
|
+
url: z.string(),
|
|
271
|
+
error: z.string()
|
|
272
|
+
}),
|
|
273
|
+
linkSourceUpdated: baseRealtimeEvent.extend({
|
|
274
|
+
linkSourceId: z.string(),
|
|
275
|
+
status: z.enum([
|
|
276
|
+
"pending",
|
|
277
|
+
"mapping",
|
|
278
|
+
"crawling",
|
|
279
|
+
"completed",
|
|
280
|
+
"failed"
|
|
281
|
+
]),
|
|
282
|
+
discoveredPagesCount: z.number().optional(),
|
|
283
|
+
crawledPagesCount: z.number().optional(),
|
|
284
|
+
totalSizeBytes: z.number().optional(),
|
|
285
|
+
errorMessage: z.string().nullable().optional()
|
|
286
|
+
}),
|
|
287
|
+
crawlPagesDiscovered: baseRealtimeEvent.extend({
|
|
288
|
+
linkSourceId: z.string(),
|
|
289
|
+
pages: z.array(z.object({
|
|
290
|
+
url: z.string(),
|
|
291
|
+
path: z.string(),
|
|
292
|
+
depth: z.number()
|
|
293
|
+
}))
|
|
294
|
+
}),
|
|
295
|
+
crawlPageCompleted: baseRealtimeEvent.extend({
|
|
296
|
+
linkSourceId: z.string(),
|
|
297
|
+
page: z.object({
|
|
298
|
+
url: z.string(),
|
|
299
|
+
title: z.string().nullable(),
|
|
300
|
+
sizeBytes: z.number(),
|
|
301
|
+
knowledgeId: z.string()
|
|
302
|
+
})
|
|
303
|
+
}),
|
|
304
|
+
trainingStarted: baseRealtimeEvent.extend({
|
|
305
|
+
aiAgentId: z.string(),
|
|
306
|
+
totalItems: z.number()
|
|
307
|
+
}),
|
|
308
|
+
trainingProgress: baseRealtimeEvent.extend({
|
|
309
|
+
aiAgentId: z.string(),
|
|
310
|
+
processedItems: z.number(),
|
|
311
|
+
totalItems: z.number(),
|
|
312
|
+
currentItem: z.object({
|
|
313
|
+
id: z.string(),
|
|
314
|
+
title: z.string().nullable(),
|
|
315
|
+
type: z.enum([
|
|
316
|
+
"url",
|
|
317
|
+
"faq",
|
|
318
|
+
"article"
|
|
319
|
+
])
|
|
320
|
+
}).optional(),
|
|
321
|
+
percentage: z.number()
|
|
322
|
+
}),
|
|
323
|
+
trainingCompleted: baseRealtimeEvent.extend({
|
|
324
|
+
aiAgentId: z.string(),
|
|
325
|
+
totalItems: z.number(),
|
|
326
|
+
totalChunks: z.number(),
|
|
327
|
+
duration: z.number()
|
|
328
|
+
}),
|
|
329
|
+
trainingFailed: baseRealtimeEvent.extend({
|
|
330
|
+
aiAgentId: z.string(),
|
|
331
|
+
error: z.string()
|
|
332
|
+
})
|
|
333
|
+
};
|
|
334
|
+
/**
|
|
335
|
+
* Validates an event against its schema
|
|
336
|
+
*/
|
|
337
|
+
function validateRealtimeEvent(type, data) {
|
|
338
|
+
return realtimeSchema[type].parse(data);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Type guard to check if a string is a valid event type
|
|
342
|
+
*/
|
|
343
|
+
function isValidEventType(type) {
|
|
344
|
+
return typeof type === "string" && type in realtimeSchema;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
//#endregion
|
|
348
|
+
export { isValidEventType, validateRealtimeEvent };
|
|
349
|
+
//# sourceMappingURL=realtime-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-events.js","names":[],"sources":["../../../../types/src/realtime-events.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { visitorResponseSchema } from \"./api/visitor\";\nimport {\n\tConversationEventType,\n\tConversationStatus,\n\tConversationTimelineType,\n\tTimelineItemVisibility,\n} from \"./enums\";\nimport { conversationSchema } from \"./schemas\";\nimport { conversationHeaderSchema } from \"./trpc/conversation\";\n\nexport const baseRealtimeEvent = z.object({\n\twebsiteId: z.string(),\n\torganizationId: z.string(),\n\tvisitorId: z.string().nullable(),\n\tuserId: z.string().nullable(),\n});\n\n/**\n * Central event system for real-time communication\n * All WebSocket and Redis Pub/Sub events are defined here\n */\nexport const realtimeSchema = {\n\tuserConnected: baseRealtimeEvent.extend({\n\t\tconnectionId: z.string(),\n\t}),\n\tuserDisconnected: baseRealtimeEvent.extend({\n\t\tconnectionId: z.string(),\n\t}),\n\tvisitorConnected: baseRealtimeEvent.extend({\n\t\tvisitorId: z.string(),\n\t\tconnectionId: z.string(),\n\t}),\n\tvisitorDisconnected: baseRealtimeEvent.extend({\n\t\tvisitorId: z.string(),\n\t\tconnectionId: z.string(),\n\t}),\n\tuserPresenceUpdate: baseRealtimeEvent.extend({\n\t\tuserId: z.string(),\n\t\tstatus: z.enum([\"online\", \"away\", \"offline\"]),\n\t\tlastSeen: z.string(),\n\t}),\n\tconversationSeen: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string().nullable(),\n\t\tlastSeenAt: z.string(),\n\t\t/** The type of actor who marked the conversation as seen */\n\t\tactorType: z.enum([\"visitor\", \"user\", \"ai_agent\"]),\n\t\t/** The actor's ID (matches one of userId, visitorId, or aiAgentId based on actorType) */\n\t\tactorId: z.string(),\n\t}),\n\tconversationTyping: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string().nullable(),\n\t\tisTyping: z.boolean(),\n\t\tvisitorPreview: z.string().max(2000).nullable().optional(),\n\t}),\n\ttimelineItemCreated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\titem: z.object({\n\t\t\tid: z.string(),\n\t\t\tconversationId: z.string(),\n\t\t\torganizationId: z.string(),\n\t\t\tvisibility: z.enum([\n\t\t\t\tTimelineItemVisibility.PUBLIC,\n\t\t\t\tTimelineItemVisibility.PRIVATE,\n\t\t\t]),\n\t\t\ttype: z.enum([\n\t\t\t\tConversationTimelineType.MESSAGE,\n\t\t\t\tConversationTimelineType.EVENT,\n\t\t\t\tConversationTimelineType.IDENTIFICATION,\n\t\t\t\tConversationTimelineType.TOOL,\n\t\t\t]),\n\t\t\ttext: z.string().nullable(),\n\t\t\tparts: z.array(z.unknown()),\n\t\t\tuserId: z.string().nullable(),\n\t\t\tvisitorId: z.string().nullable(),\n\t\t\taiAgentId: z.string().nullable(),\n\t\t\tcreatedAt: z.string(),\n\t\t\tdeletedAt: z.string().nullable(),\n\t\t\ttool: z.string().nullable().optional(),\n\t\t}),\n\t}),\n\tconversationCreated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\tconversation: conversationSchema,\n\t\theader: conversationHeaderSchema,\n\t}),\n\tvisitorIdentified: baseRealtimeEvent.extend({\n\t\tvisitorId: z.string(),\n\t\tvisitor: visitorResponseSchema,\n\t}),\n\tconversationEventCreated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string().nullable(),\n\t\tevent: z.object({\n\t\t\tid: z.string(),\n\t\t\tconversationId: z.string(),\n\t\t\torganizationId: z.string(),\n\t\t\ttype: z.enum([\n\t\t\t\tConversationEventType.ASSIGNED,\n\t\t\t\tConversationEventType.UNASSIGNED,\n\t\t\t\tConversationEventType.PARTICIPANT_REQUESTED,\n\t\t\t\tConversationEventType.PARTICIPANT_JOINED,\n\t\t\t\tConversationEventType.PARTICIPANT_LEFT,\n\t\t\t\tConversationEventType.STATUS_CHANGED,\n\t\t\t\tConversationEventType.PRIORITY_CHANGED,\n\t\t\t\tConversationEventType.TAG_ADDED,\n\t\t\t\tConversationEventType.TAG_REMOVED,\n\t\t\t\tConversationEventType.RESOLVED,\n\t\t\t\tConversationEventType.REOPENED,\n\t\t\t\tConversationEventType.VISITOR_BLOCKED,\n\t\t\t\tConversationEventType.VISITOR_UNBLOCKED,\n\t\t\t\tConversationEventType.VISITOR_IDENTIFIED,\n\t\t\t]),\n\t\t\tactorUserId: z.string().nullable(),\n\t\t\tactorAiAgentId: z.string().nullable(),\n\t\t\ttargetUserId: z.string().nullable(),\n\t\t\ttargetAiAgentId: z.string().nullable(),\n\t\t\tmessage: z.string().nullable(),\n\t\t\tmetadata: z.record(z.string(), z.unknown()).nullable(),\n\t\t\tcreatedAt: z.string(),\n\t\t\tupdatedAt: z.string(),\n\t\t\tdeletedAt: z.string().nullable(),\n\t\t}),\n\t}),\n\t// Conversation updated (title, sentiment, escalation status changes, status changes)\n\tconversationUpdated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\tupdates: z.object({\n\t\t\ttitle: z.string().nullable().optional(),\n\t\t\tsentiment: z\n\t\t\t\t.enum([\"positive\", \"negative\", \"neutral\"])\n\t\t\t\t.nullable()\n\t\t\t\t.optional(),\n\t\t\tsentimentConfidence: z.number().nullable().optional(),\n\t\t\tescalatedAt: z.string().nullable().optional(),\n\t\t\tescalationReason: z.string().nullable().optional(),\n\t\t\tstatus: z\n\t\t\t\t.enum([\n\t\t\t\t\tConversationStatus.OPEN,\n\t\t\t\t\tConversationStatus.RESOLVED,\n\t\t\t\t\tConversationStatus.SPAM,\n\t\t\t\t])\n\t\t\t\t.optional(),\n\t\t\tpriority: z.enum([\"low\", \"normal\", \"high\", \"urgent\"]).optional(),\n\t\t\tresolvedAt: z.string().nullable().optional(),\n\t\t\tresolvedByUserId: z.string().nullable().optional(),\n\t\t\tresolvedByAiAgentId: z.string().nullable().optional(),\n\t\t\tresolutionTime: z.number().nullable().optional(),\n\t\t\tdeletedAt: z.string().nullable().optional(),\n\t\t}),\n\t\taiAgentId: z.string().nullable(),\n\t}),\n\n\t// =========================================================================\n\t// AI AGENT PROCESSING EVENTS\n\t// For progressive UI updates during AI agent responses\n\t//\n\t// AUDIENCE FIELD:\n\t// - 'all': Send to both dashboard and widget\n\t// - 'dashboard': Send only to dashboard (human agents)\n\t//\n\t// Widget (visitor) connections only receive events with audience='all'\n\t// =========================================================================\n\n\t// Emitted when AI agent starts processing a message\n\taiAgentProcessingStarted: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** ID of the trigger message that started this workflow */\n\t\ttriggerMessageId: z.string(),\n\t\t/** Initial phase of processing */\n\t\tphase: z.string().optional(),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]).default(\"dashboard\"),\n\t}),\n\n\t// Emitted when AI agent makes a decision about whether to act\n\taiAgentDecisionMade: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** Whether the AI decided to take action */\n\t\tshouldAct: z.boolean(),\n\t\t/** Human-readable reason for the decision */\n\t\treason: z.string(),\n\t\t/** Response mode: how the AI is responding */\n\t\tmode: z.enum([\n\t\t\t\"respond_to_visitor\",\n\t\t\t\"respond_to_command\",\n\t\t\t\"background_only\",\n\t\t]),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]),\n\t}),\n\n\t// Emitted for progress updates during AI agent processing\n\taiAgentProcessingProgress: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** Current phase: 'thinking', 'searching', 'tool-executing', 'generating', etc. */\n\t\tphase: z.string(),\n\t\t/** Human-readable message for display (widget sees this) */\n\t\tmessage: z.string().nullable(),\n\t\t/** Tool information when phase is tool-related */\n\t\ttool: z\n\t\t\t.object({\n\t\t\t\ttoolCallId: z.string(),\n\t\t\t\ttoolName: z.string(),\n\t\t\t\t/** Tool state: partial (executing), result (success), error (failed) */\n\t\t\t\tstate: z.enum([\"partial\", \"result\", \"error\"]),\n\t\t\t})\n\t\t\t.optional(),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]).default(\"all\"),\n\t}),\n\n\t// Emitted when AI agent finishes processing\n\taiAgentProcessingCompleted: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** Whether processing completed successfully, was skipped, cancelled, or errored */\n\t\tstatus: z.enum([\"success\", \"skipped\", \"cancelled\", \"error\"]),\n\t\t/** Action taken (if status is 'success') */\n\t\taction: z.string().nullable().optional(),\n\t\t/** Reason for skip/cancel/error */\n\t\treason: z.string().nullable().optional(),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]).default(\"all\"),\n\t}),\n\n\t// =========================================================================\n\t// TIMELINE ITEM UPDATE EVENTS\n\t// For updating timeline items with new parts or state changes\n\t// =========================================================================\n\n\t// Emitted when an entire timeline item is updated (e.g., parts added)\n\ttimelineItemUpdated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\titem: z.object({\n\t\t\tid: z.string(),\n\t\t\tconversationId: z.string(),\n\t\t\torganizationId: z.string(),\n\t\t\tvisibility: z.enum([\n\t\t\t\tTimelineItemVisibility.PUBLIC,\n\t\t\t\tTimelineItemVisibility.PRIVATE,\n\t\t\t]),\n\t\t\ttype: z.enum([\n\t\t\t\tConversationTimelineType.MESSAGE,\n\t\t\t\tConversationTimelineType.EVENT,\n\t\t\t\tConversationTimelineType.IDENTIFICATION,\n\t\t\t\tConversationTimelineType.TOOL,\n\t\t\t]),\n\t\t\ttext: z.string().nullable(),\n\t\t\tparts: z.array(z.unknown()),\n\t\t\tuserId: z.string().nullable(),\n\t\t\tvisitorId: z.string().nullable(),\n\t\t\taiAgentId: z.string().nullable(),\n\t\t\tcreatedAt: z.string(),\n\t\t\tdeletedAt: z.string().nullable(),\n\t\t\ttool: z.string().nullable().optional(),\n\t\t}),\n\t}),\n\n\t// Emitted for granular part updates (e.g., tool state changes)\n\ttimelineItemPartUpdated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\ttimelineItemId: z.string(),\n\t\t/** Index of the part in the parts array */\n\t\tpartIndex: z.number(),\n\t\t/** The updated part data */\n\t\tpart: z.unknown(),\n\t}),\n\t// Web crawling events\n\tcrawlStarted: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\tdiscoveredPages: z.array(\n\t\t\tz.object({\n\t\t\t\turl: z.string(),\n\t\t\t\ttitle: z.string().nullable(),\n\t\t\t\tdepth: z.number(),\n\t\t\t})\n\t\t),\n\t\ttotalPagesCount: z.number(),\n\t}),\n\tcrawlProgress: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\tpage: z.object({\n\t\t\turl: z.string(),\n\t\t\ttitle: z.string().nullable(),\n\t\t\tstatus: z.enum([\"pending\", \"crawling\", \"completed\", \"failed\"]),\n\t\t\tsizeBytes: z.number().optional(),\n\t\t\terror: z.string().nullable().optional(),\n\t\t}),\n\t\tcompletedCount: z.number(),\n\t\ttotalCount: z.number(),\n\t}),\n\tcrawlCompleted: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\tcrawledPagesCount: z.number(),\n\t\ttotalSizeBytes: z.number(),\n\t\tfailedPagesCount: z.number(),\n\t}),\n\tcrawlFailed: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\terror: z.string(),\n\t}),\n\t// Link source updated (for status changes, etc.)\n\tlinkSourceUpdated: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\tstatus: z.enum([\"pending\", \"mapping\", \"crawling\", \"completed\", \"failed\"]),\n\t\tdiscoveredPagesCount: z.number().optional(),\n\t\tcrawledPagesCount: z.number().optional(),\n\t\ttotalSizeBytes: z.number().optional(),\n\t\terrorMessage: z.string().nullable().optional(),\n\t}),\n\t// Emitted after map phase with all discovered URLs (for real-time tree display)\n\tcrawlPagesDiscovered: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\tpages: z.array(\n\t\t\tz.object({\n\t\t\t\turl: z.string(),\n\t\t\t\tpath: z.string(),\n\t\t\t\tdepth: z.number(),\n\t\t\t})\n\t\t),\n\t}),\n\t// Emitted when each page completes scraping (for real-time updates)\n\tcrawlPageCompleted: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\tpage: z.object({\n\t\t\turl: z.string(),\n\t\t\ttitle: z.string().nullable(),\n\t\t\tsizeBytes: z.number(),\n\t\t\tknowledgeId: z.string(),\n\t\t}),\n\t}),\n\n\t// =========================================================================\n\t// AI TRAINING EVENTS\n\t// For knowledge base embedding generation and progress tracking\n\t// =========================================================================\n\n\t// Emitted when AI training starts\n\ttrainingStarted: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\ttotalItems: z.number(),\n\t}),\n\n\t// Emitted for progress updates during AI training\n\ttrainingProgress: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\tprocessedItems: z.number(),\n\t\ttotalItems: z.number(),\n\t\tcurrentItem: z\n\t\t\t.object({\n\t\t\t\tid: z.string(),\n\t\t\t\ttitle: z.string().nullable(),\n\t\t\t\ttype: z.enum([\"url\", \"faq\", \"article\"]),\n\t\t\t})\n\t\t\t.optional(),\n\t\tpercentage: z.number(),\n\t}),\n\n\t// Emitted when AI training completes successfully\n\ttrainingCompleted: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\ttotalItems: z.number(),\n\t\ttotalChunks: z.number(),\n\t\tduration: z.number(), // milliseconds\n\t}),\n\n\t// Emitted when AI training fails\n\ttrainingFailed: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\terror: z.string(),\n\t}),\n} as const;\n\nexport type RealtimeEventType = keyof typeof realtimeSchema;\n\nexport type RealtimeEventPayload<T extends RealtimeEventType> = z.infer<\n\t(typeof realtimeSchema)[T]\n>;\n\nexport type RealtimeEvent<T extends RealtimeEventType> = {\n\ttype: T;\n\tpayload: RealtimeEventPayload<T>;\n};\n\nexport type AnyRealtimeEvent = {\n\t[K in RealtimeEventType]: RealtimeEvent<K>;\n}[RealtimeEventType];\n\nexport type RealtimeEventData<T extends RealtimeEventType> =\n\tRealtimeEventPayload<T>;\n\n/**\n * Validates an event against its schema\n */\nexport function validateRealtimeEvent<T extends RealtimeEventType>(\n\ttype: T,\n\tdata: unknown\n): RealtimeEventPayload<T> {\n\tconst schema = realtimeSchema[type];\n\treturn schema.parse(data) as RealtimeEventPayload<T>;\n}\n\n/**\n * Type guard to check if a string is a valid event type\n */\nexport function isValidEventType(type: unknown): type is RealtimeEventType {\n\treturn typeof type === \"string\" && type in realtimeSchema;\n}\n\nexport function getEventPayload<T extends RealtimeEventType>(\n\tevent: RealtimeEvent<T>\n): RealtimeEventPayload<T> {\n\treturn event.payload;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ConversationStatus } from "./enums.js";
|
|
2
|
+
import { timelineItemSchema } from "./api/timeline-item.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
//#region ../types/src/schemas.ts
|
|
6
|
+
const viewSchema = z.object({
|
|
7
|
+
id: z.string(),
|
|
8
|
+
name: z.string(),
|
|
9
|
+
description: z.string().nullable(),
|
|
10
|
+
prompt: z.string().nullable(),
|
|
11
|
+
organizationId: z.string(),
|
|
12
|
+
websiteId: z.string(),
|
|
13
|
+
createdAt: z.string(),
|
|
14
|
+
updatedAt: z.string(),
|
|
15
|
+
deletedAt: z.string().nullable()
|
|
16
|
+
});
|
|
17
|
+
const conversationSchema = z.object({
|
|
18
|
+
id: z.string(),
|
|
19
|
+
title: z.string().optional(),
|
|
20
|
+
createdAt: z.string(),
|
|
21
|
+
updatedAt: z.string(),
|
|
22
|
+
visitorId: z.string(),
|
|
23
|
+
websiteId: z.string(),
|
|
24
|
+
status: z.enum([
|
|
25
|
+
ConversationStatus.OPEN,
|
|
26
|
+
ConversationStatus.RESOLVED,
|
|
27
|
+
ConversationStatus.SPAM
|
|
28
|
+
]).default(ConversationStatus.OPEN),
|
|
29
|
+
visitorRating: z.number().int().min(1).max(5).nullable().optional(),
|
|
30
|
+
visitorRatingAt: z.string().nullable().optional(),
|
|
31
|
+
deletedAt: z.string().nullable().default(null),
|
|
32
|
+
visitorLastSeenAt: z.string().nullable().optional(),
|
|
33
|
+
lastTimelineItem: timelineItemSchema.optional()
|
|
34
|
+
});
|
|
35
|
+
const conversationSeenSchema = z.object({
|
|
36
|
+
id: z.string(),
|
|
37
|
+
conversationId: z.string(),
|
|
38
|
+
userId: z.string().nullable(),
|
|
39
|
+
visitorId: z.string().nullable(),
|
|
40
|
+
aiAgentId: z.string().nullable(),
|
|
41
|
+
lastSeenAt: z.string(),
|
|
42
|
+
createdAt: z.string(),
|
|
43
|
+
updatedAt: z.string(),
|
|
44
|
+
deletedAt: z.string().nullable()
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
export { conversationSchema, conversationSeenSchema };
|
|
49
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","names":[],"sources":["../../../../types/src/schemas.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { timelineItemSchema } from \"./api/timeline-item\";\nimport { ConversationEventType, ConversationStatus } from \"./enums\";\n\nexport const viewSchema = z.object({\n\tid: z.string(),\n\tname: z.string(),\n\tdescription: z.string().nullable(),\n\tprompt: z.string().nullable(),\n\torganizationId: z.string(),\n\twebsiteId: z.string(),\n\tcreatedAt: z.string(),\n\tupdatedAt: z.string(),\n\tdeletedAt: z.string().nullable(),\n});\n\nexport type InboxView = z.infer<typeof viewSchema>;\n\nexport const conversationSchema = z.object({\n\tid: z.string(),\n\ttitle: z.string().optional(),\n\tcreatedAt: z.string(),\n\tupdatedAt: z.string(),\n\tvisitorId: z.string(),\n\twebsiteId: z.string(),\n\tstatus: z\n\t\t.enum([\n\t\t\tConversationStatus.OPEN,\n\t\t\tConversationStatus.RESOLVED,\n\t\t\tConversationStatus.SPAM,\n\t\t])\n\t\t.default(ConversationStatus.OPEN),\n\tvisitorRating: z.number().int().min(1).max(5).nullable().optional(),\n\tvisitorRatingAt: z.string().nullable().optional(),\n\tdeletedAt: z.string().nullable().default(null),\n\tvisitorLastSeenAt: z.string().nullable().optional(),\n\tlastTimelineItem: timelineItemSchema.optional(),\n});\n\nexport type Conversation = z.infer<typeof conversationSchema>;\n\nexport const conversationSeenSchema = z.object({\n\tid: z.string(),\n\tconversationId: z.string(),\n\tuserId: z.string().nullable(),\n\tvisitorId: z.string().nullable(),\n\taiAgentId: z.string().nullable(),\n\tlastSeenAt: z.string(),\n\tcreatedAt: z.string(),\n\tupdatedAt: z.string(),\n\tdeletedAt: z.string().nullable(),\n});\n\nexport type ConversationSeen = z.infer<typeof conversationSeenSchema>;\n"],"mappings":";;;;;AAIA,MAAa,aAAa,EAAE,OAAO;CAClC,IAAI,EAAE,QAAQ;CACd,MAAM,EAAE,QAAQ;CAChB,aAAa,EAAE,QAAQ,CAAC,UAAU;CAClC,QAAQ,EAAE,QAAQ,CAAC,UAAU;CAC7B,gBAAgB,EAAE,QAAQ;CAC1B,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,CAAC;AAIF,MAAa,qBAAqB,EAAE,OAAO;CAC1C,IAAI,EAAE,QAAQ;CACd,OAAO,EAAE,QAAQ,CAAC,UAAU;CAC5B,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,QAAQ;CACrB,QAAQ,EACN,KAAK;EACL,mBAAmB;EACnB,mBAAmB;EACnB,mBAAmB;EACnB,CAAC,CACD,QAAQ,mBAAmB,KAAK;CAClC,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU;CACnE,iBAAiB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU;CACjD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,KAAK;CAC9C,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU;CACnD,kBAAkB,mBAAmB,UAAU;CAC/C,CAAC;AAIF,MAAa,yBAAyB,EAAE,OAAO;CAC9C,IAAI,EAAE,QAAQ;CACd,gBAAgB,EAAE,QAAQ;CAC1B,QAAQ,EAAE,QAAQ,CAAC,UAAU;CAC7B,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,YAAY,EAAE,QAAQ;CACtB,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,QAAQ;CACrB,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { ConversationPriority, ConversationSentiment, ConversationStatus } from "../enums.js";
|
|
2
|
+
import { visitorProfileSchema } from "../api/visitor.js";
|
|
3
|
+
import { timelineItemSchema } from "../api/timeline-item.js";
|
|
4
|
+
import { conversationSeenSchema } from "../schemas.js";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
|
|
7
|
+
//#region ../types/src/trpc/conversation.ts
|
|
8
|
+
const conversationStatusSchema = z.enum([
|
|
9
|
+
ConversationStatus.OPEN,
|
|
10
|
+
ConversationStatus.RESOLVED,
|
|
11
|
+
ConversationStatus.SPAM
|
|
12
|
+
]);
|
|
13
|
+
const conversationPrioritySchema = z.enum([
|
|
14
|
+
ConversationPriority.LOW,
|
|
15
|
+
ConversationPriority.NORMAL,
|
|
16
|
+
ConversationPriority.HIGH,
|
|
17
|
+
ConversationPriority.URGENT
|
|
18
|
+
]);
|
|
19
|
+
const conversationSentimentSchema = z.enum([
|
|
20
|
+
ConversationSentiment.POSITIVE,
|
|
21
|
+
ConversationSentiment.NEGATIVE,
|
|
22
|
+
ConversationSentiment.NEUTRAL
|
|
23
|
+
]).nullable();
|
|
24
|
+
const conversationRecordSchema = z.object({
|
|
25
|
+
id: z.string(),
|
|
26
|
+
organizationId: z.string(),
|
|
27
|
+
visitorId: z.string(),
|
|
28
|
+
websiteId: z.string(),
|
|
29
|
+
status: conversationStatusSchema,
|
|
30
|
+
priority: conversationPrioritySchema,
|
|
31
|
+
sentiment: conversationSentimentSchema,
|
|
32
|
+
sentimentConfidence: z.number().nullable(),
|
|
33
|
+
channel: z.string(),
|
|
34
|
+
title: z.string().nullable(),
|
|
35
|
+
resolutionTime: z.number().nullable(),
|
|
36
|
+
visitorRating: z.number().int().min(1).max(5).nullable(),
|
|
37
|
+
visitorRatingAt: z.string().nullable(),
|
|
38
|
+
startedAt: z.string().nullable(),
|
|
39
|
+
firstResponseAt: z.string().nullable(),
|
|
40
|
+
resolvedAt: z.string().nullable(),
|
|
41
|
+
lastMessageAt: z.string().nullable(),
|
|
42
|
+
lastMessageBy: z.string().nullable(),
|
|
43
|
+
resolvedByUserId: z.string().nullable(),
|
|
44
|
+
resolvedByAiAgentId: z.string().nullable(),
|
|
45
|
+
escalatedAt: z.string().nullable(),
|
|
46
|
+
escalatedByAiAgentId: z.string().nullable(),
|
|
47
|
+
escalationReason: z.string().nullable(),
|
|
48
|
+
escalationHandledAt: z.string().nullable(),
|
|
49
|
+
escalationHandledByUserId: z.string().nullable(),
|
|
50
|
+
aiPausedUntil: z.string().nullable(),
|
|
51
|
+
createdAt: z.string(),
|
|
52
|
+
updatedAt: z.string(),
|
|
53
|
+
deletedAt: z.string().nullable()
|
|
54
|
+
});
|
|
55
|
+
const conversationMutationResponseSchema = z.object({ conversation: conversationRecordSchema });
|
|
56
|
+
const conversationHeaderSchema = z.object({
|
|
57
|
+
id: z.string(),
|
|
58
|
+
status: conversationStatusSchema,
|
|
59
|
+
priority: conversationPrioritySchema,
|
|
60
|
+
organizationId: z.string(),
|
|
61
|
+
visitorId: z.string(),
|
|
62
|
+
visitor: visitorProfileSchema,
|
|
63
|
+
websiteId: z.string(),
|
|
64
|
+
channel: z.string(),
|
|
65
|
+
title: z.string().nullable(),
|
|
66
|
+
resolutionTime: z.number().nullable(),
|
|
67
|
+
visitorRating: z.number().int().min(1).max(5).nullable(),
|
|
68
|
+
visitorRatingAt: z.string().nullable(),
|
|
69
|
+
startedAt: z.string().nullable(),
|
|
70
|
+
firstResponseAt: z.string().nullable(),
|
|
71
|
+
resolvedAt: z.string().nullable(),
|
|
72
|
+
resolvedByUserId: z.string().nullable(),
|
|
73
|
+
resolvedByAiAgentId: z.string().nullable(),
|
|
74
|
+
escalatedAt: z.string().nullable(),
|
|
75
|
+
escalatedByAiAgentId: z.string().nullable(),
|
|
76
|
+
escalationReason: z.string().nullable(),
|
|
77
|
+
escalationHandledAt: z.string().nullable(),
|
|
78
|
+
escalationHandledByUserId: z.string().nullable(),
|
|
79
|
+
aiPausedUntil: z.string().nullable(),
|
|
80
|
+
createdAt: z.string(),
|
|
81
|
+
updatedAt: z.string(),
|
|
82
|
+
deletedAt: z.string().nullable(),
|
|
83
|
+
lastMessageAt: z.string().nullable(),
|
|
84
|
+
lastSeenAt: z.string().nullable(),
|
|
85
|
+
lastMessageTimelineItem: timelineItemSchema.nullable(),
|
|
86
|
+
lastTimelineItem: timelineItemSchema.nullable(),
|
|
87
|
+
viewIds: z.array(z.string()),
|
|
88
|
+
seenData: z.array(conversationSeenSchema)
|
|
89
|
+
});
|
|
90
|
+
const listConversationHeadersResponseSchema = z.object({
|
|
91
|
+
items: z.array(conversationHeaderSchema),
|
|
92
|
+
nextCursor: z.string().nullable()
|
|
93
|
+
});
|
|
94
|
+
const inboxAnalyticsRangeSchema = z.union([
|
|
95
|
+
z.literal(7),
|
|
96
|
+
z.literal(14),
|
|
97
|
+
z.literal(30)
|
|
98
|
+
]);
|
|
99
|
+
const inboxAnalyticsRequestSchema = z.object({
|
|
100
|
+
websiteSlug: z.string(),
|
|
101
|
+
rangeDays: inboxAnalyticsRangeSchema.optional().default(7)
|
|
102
|
+
});
|
|
103
|
+
const inboxAnalyticsMetricsSchema = z.object({
|
|
104
|
+
medianResponseTimeSeconds: z.number().nullable(),
|
|
105
|
+
medianResolutionTimeSeconds: z.number().nullable(),
|
|
106
|
+
aiHandledRate: z.number().nullable(),
|
|
107
|
+
satisfactionIndex: z.number().nullable(),
|
|
108
|
+
uniqueVisitors: z.number()
|
|
109
|
+
});
|
|
110
|
+
const inboxAnalyticsResponseSchema = z.object({
|
|
111
|
+
range: z.object({
|
|
112
|
+
rangeDays: inboxAnalyticsRangeSchema,
|
|
113
|
+
currentStart: z.string(),
|
|
114
|
+
currentEnd: z.string(),
|
|
115
|
+
previousStart: z.string(),
|
|
116
|
+
previousEnd: z.string()
|
|
117
|
+
}),
|
|
118
|
+
current: inboxAnalyticsMetricsSchema,
|
|
119
|
+
previous: inboxAnalyticsMetricsSchema
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
//#endregion
|
|
123
|
+
export { conversationHeaderSchema };
|
|
124
|
+
//# sourceMappingURL=conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","names":[],"sources":["../../../../../types/src/trpc/conversation.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { timelineItemSchema } from \"../api/timeline-item\";\nimport { visitorProfileSchema } from \"../api/visitor\";\nimport {\n\tConversationPriority,\n\tConversationSentiment,\n\tConversationStatus,\n} from \"../enums\";\nimport { conversationSeenSchema } from \"../schemas\";\n\nexport const conversationStatusSchema = z.enum([\n\tConversationStatus.OPEN,\n\tConversationStatus.RESOLVED,\n\tConversationStatus.SPAM,\n]);\n\nexport const conversationPrioritySchema = z.enum([\n\tConversationPriority.LOW,\n\tConversationPriority.NORMAL,\n\tConversationPriority.HIGH,\n\tConversationPriority.URGENT,\n]);\n\nexport const conversationSentimentSchema = z\n\t.enum([\n\t\tConversationSentiment.POSITIVE,\n\t\tConversationSentiment.NEGATIVE,\n\t\tConversationSentiment.NEUTRAL,\n\t])\n\t.nullable();\n\nexport const conversationRecordSchema = z.object({\n\tid: z.string(),\n\torganizationId: z.string(),\n\tvisitorId: z.string(),\n\twebsiteId: z.string(),\n\tstatus: conversationStatusSchema,\n\tpriority: conversationPrioritySchema,\n\tsentiment: conversationSentimentSchema,\n\tsentimentConfidence: z.number().nullable(),\n\tchannel: z.string(),\n\ttitle: z.string().nullable(),\n\tresolutionTime: z.number().nullable(),\n\tvisitorRating: z.number().int().min(1).max(5).nullable(),\n\tvisitorRatingAt: z.string().nullable(),\n\tstartedAt: z.string().nullable(),\n\tfirstResponseAt: z.string().nullable(),\n\tresolvedAt: z.string().nullable(),\n\tlastMessageAt: z.string().nullable(),\n\tlastMessageBy: z.string().nullable(),\n\tresolvedByUserId: z.string().nullable(),\n\tresolvedByAiAgentId: z.string().nullable(),\n\t// Escalation tracking\n\tescalatedAt: z.string().nullable(),\n\tescalatedByAiAgentId: z.string().nullable(),\n\tescalationReason: z.string().nullable(),\n\tescalationHandledAt: z.string().nullable(),\n\tescalationHandledByUserId: z.string().nullable(),\n\t// AI pause control\n\taiPausedUntil: z.string().nullable(),\n\tcreatedAt: z.string(),\n\tupdatedAt: z.string(),\n\tdeletedAt: z.string().nullable(),\n});\n\nexport type ConversationRecordResponse = z.infer<\n\ttypeof conversationRecordSchema\n>;\n\nexport const conversationMutationResponseSchema = z.object({\n\tconversation: conversationRecordSchema,\n});\n\nexport const conversationHeaderSchema = z.object({\n\tid: z.string(),\n\tstatus: conversationStatusSchema,\n\tpriority: conversationPrioritySchema,\n\torganizationId: z.string(),\n\tvisitorId: z.string(),\n\tvisitor: visitorProfileSchema,\n\twebsiteId: z.string(),\n\tchannel: z.string(),\n\ttitle: z.string().nullable(),\n\tresolutionTime: z.number().nullable(),\n\tvisitorRating: z.number().int().min(1).max(5).nullable(),\n\tvisitorRatingAt: z.string().nullable(),\n\tstartedAt: z.string().nullable(),\n\tfirstResponseAt: z.string().nullable(),\n\tresolvedAt: z.string().nullable(),\n\tresolvedByUserId: z.string().nullable(),\n\tresolvedByAiAgentId: z.string().nullable(),\n\t// Escalation tracking\n\tescalatedAt: z.string().nullable(),\n\tescalatedByAiAgentId: z.string().nullable(),\n\tescalationReason: z.string().nullable(),\n\tescalationHandledAt: z.string().nullable(),\n\tescalationHandledByUserId: z.string().nullable(),\n\t// AI pause control\n\taiPausedUntil: z.string().nullable(),\n\tcreatedAt: z.string(),\n\tupdatedAt: z.string(),\n\tdeletedAt: z.string().nullable(),\n\tlastMessageAt: z.string().nullable(),\n\tlastSeenAt: z.string().nullable(),\n\tlastMessageTimelineItem: timelineItemSchema.nullable(),\n\tlastTimelineItem: timelineItemSchema.nullable(),\n\tviewIds: z.array(z.string()),\n\tseenData: z.array(conversationSeenSchema),\n});\n\nexport const listConversationHeadersResponseSchema = z.object({\n\titems: z.array(conversationHeaderSchema),\n\tnextCursor: z.string().nullable(),\n});\n\nexport const inboxAnalyticsRangeSchema = z.union([\n\tz.literal(7),\n\tz.literal(14),\n\tz.literal(30),\n]);\n\nexport const inboxAnalyticsRequestSchema = z.object({\n\twebsiteSlug: z.string(),\n\trangeDays: inboxAnalyticsRangeSchema.optional().default(7),\n});\n\nexport const inboxAnalyticsMetricsSchema = z.object({\n\tmedianResponseTimeSeconds: z.number().nullable(),\n\tmedianResolutionTimeSeconds: z.number().nullable(),\n\taiHandledRate: z.number().nullable(),\n\tsatisfactionIndex: z.number().nullable(),\n\tuniqueVisitors: z.number(),\n});\n\nexport const inboxAnalyticsResponseSchema = z.object({\n\trange: z.object({\n\t\trangeDays: inboxAnalyticsRangeSchema,\n\t\tcurrentStart: z.string(),\n\t\tcurrentEnd: z.string(),\n\t\tpreviousStart: z.string(),\n\t\tpreviousEnd: z.string(),\n\t}),\n\tcurrent: inboxAnalyticsMetricsSchema,\n\tprevious: inboxAnalyticsMetricsSchema,\n});\n\nexport type ConversationMutationResponse = z.infer<\n\ttypeof conversationMutationResponseSchema\n>;\n\nexport type ConversationHeader = z.infer<typeof conversationHeaderSchema>;\n\nexport type InboxAnalyticsRequest = z.infer<typeof inboxAnalyticsRequestSchema>;\nexport type InboxAnalyticsResponse = z.infer<\n\ttypeof inboxAnalyticsResponseSchema\n>;\n"],"mappings":"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"}
|
package/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","names":[],"sources":["../src/utils.ts"],"sourcesContent":[],"mappings":";cAGa,YAAU;AAAV,iBAEG,WAAA,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../src/utils.ts"],"sourcesContent":[],"mappings":";cAGa,YAAU;AAAV,iBAEG,WAAA,CAFoC,IAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAEpC,cAOH,sBAPc,EAAA,GAAA,GAAA,MAAA;AAOd,cAKA,iBAFZ,EAAA,GAAA,GAAA,MAAA"}
|