crisp-api 10.10.4 → 10.10.5

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.
@@ -0,0 +1,789 @@
1
+ /*
2
+ * This file is part of node-crisp-api
3
+ *
4
+ * Copyright (c) 2025 Crisp IM SAS
5
+ * All rights belong to Crisp IM SAS
6
+ */
7
+
8
+ /**************************************************************************
9
+ * IMPORTS
10
+ ***************************************************************************/
11
+
12
+ // PROJECT: RESOURCES
13
+ import {
14
+ ConversationMessageType,
15
+ ConversationMessageUser,
16
+ ConversationState,
17
+ ConversationFileMessageContent,
18
+ ConversationAnimationMessageContent,
19
+ ConversationAudioMessageContent,
20
+ ConversationPickerMessageContent,
21
+ ConversationFieldMessageContent,
22
+ ConversationCarouselMessageContent,
23
+ ConversationEventMessageContent,
24
+ GeolocationInfo,
25
+ SystemInfo,
26
+ ConnectionInfo
27
+ } from "@/resources/WebsiteConversation";
28
+
29
+ /**************************************************************************
30
+ * TYPES + INTERFACES (COMMON)
31
+ ***************************************************************************/
32
+
33
+ /**
34
+ * Common fields shared by every website-scoped event.
35
+ */
36
+ export interface EventsWebsiteGeneric {
37
+ website_id: string;
38
+ }
39
+
40
+ /**
41
+ * Common fields shared by every session-scoped event.
42
+ */
43
+ export interface EventsSessionGeneric extends EventsWebsiteGeneric {
44
+ session_id: string;
45
+ inbox_id: string | null;
46
+ }
47
+
48
+ export interface EventsOperator {
49
+ user_id: string;
50
+ avatar?: string | null;
51
+ nickname?: string;
52
+ }
53
+
54
+ /**************************************************************************
55
+ * TYPES + INTERFACES (SESSION EVENTS)
56
+ ***************************************************************************/
57
+
58
+ export type EventsSessionAvailability = "online" | "offline";
59
+
60
+ export interface EventsSessionUpdateAvailability extends EventsSessionGeneric {
61
+ availability: EventsSessionAvailability;
62
+ }
63
+
64
+ export interface EventsSessionVerification {
65
+ identity: string;
66
+ method: string;
67
+ annotation: string;
68
+ }
69
+
70
+ export interface EventsSessionUpdateVerify extends EventsSessionGeneric {
71
+ is_verified: boolean;
72
+ verifications: EventsSessionVerification[];
73
+ }
74
+
75
+ export type EventsSessionRequestInitiated = EventsSessionGeneric;
76
+
77
+ export interface EventsSessionSetEmail extends EventsSessionGeneric {
78
+ email: string;
79
+ }
80
+
81
+ export interface EventsSessionSetPhone extends EventsSessionGeneric {
82
+ phone: string;
83
+ }
84
+
85
+ export interface EventsSessionSetAddress extends EventsSessionGeneric {
86
+ address: string;
87
+ }
88
+
89
+ export interface EventsSessionSetSubject extends EventsSessionGeneric {
90
+ subject: string;
91
+ }
92
+
93
+ export interface EventsSessionSetAvatar extends EventsSessionGeneric {
94
+ avatar: string;
95
+ }
96
+
97
+ export interface EventsSessionSetNickname extends EventsSessionGeneric {
98
+ nickname: string;
99
+ }
100
+
101
+ export interface EventsSessionSetOrigin extends EventsSessionGeneric {
102
+ origin: string;
103
+ }
104
+
105
+ export interface EventsSessionSetData extends EventsSessionGeneric {
106
+ data: Record<string, string | number | boolean>;
107
+ }
108
+
109
+ export interface EventsSessionSetSegments extends EventsSessionGeneric {
110
+ segments: string[];
111
+ }
112
+
113
+ export interface EventsSessionSetBlock extends EventsSessionGeneric {
114
+ is_blocked: boolean;
115
+ }
116
+
117
+ export interface EventsSessionSetOpened extends EventsSessionGeneric {
118
+ operator: EventsOperator;
119
+ }
120
+
121
+ export interface EventsSessionSetClosed extends EventsSessionGeneric {
122
+ operator: EventsOperator;
123
+ }
124
+
125
+ export interface EventsSessionParticipant {
126
+ target: string;
127
+ type: string;
128
+ }
129
+
130
+ export interface EventsSessionSetParticipants extends EventsSessionGeneric {
131
+ participants: EventsSessionParticipant[];
132
+ }
133
+
134
+ export interface EventsSessionSetMentions extends EventsSessionGeneric {
135
+ mentions: string[];
136
+ }
137
+
138
+ export interface EventsSessionSetRouting extends EventsSessionGeneric {
139
+ routing_id: string | null;
140
+ previous_routing_id: string | null;
141
+ }
142
+
143
+ export interface EventsSessionSetInbox extends EventsSessionGeneric {
144
+ previous_inbox_id: string | null;
145
+ }
146
+
147
+ export interface EventsSessionSetState extends EventsSessionGeneric {
148
+ state: ConversationState;
149
+ }
150
+
151
+ export interface EventsSessionSyncCapabilities extends EventsSessionGeneric {
152
+ capabilities: string[];
153
+ }
154
+
155
+ export interface EventsSessionSyncGeolocation extends EventsSessionGeneric {
156
+ geolocation: GeolocationInfo;
157
+ }
158
+
159
+ export interface EventsSessionSyncSystem extends EventsSessionGeneric {
160
+ system: SystemInfo;
161
+ }
162
+
163
+ export interface EventsSessionSyncNetworkInfo {
164
+ ip: string;
165
+ connection?: ConnectionInfo;
166
+ }
167
+
168
+ export interface EventsSessionSyncNetwork extends EventsSessionGeneric {
169
+ network: EventsSessionSyncNetworkInfo;
170
+ }
171
+
172
+ export interface EventsSessionSyncTimezone extends EventsSessionGeneric {
173
+ timezone: {
174
+ offset: number;
175
+ };
176
+ }
177
+
178
+ export interface EventsSessionSyncLocales extends EventsSessionGeneric {
179
+ locales: {
180
+ locales: string[];
181
+ };
182
+ }
183
+
184
+ export interface EventsSessionPage {
185
+ page_url: string;
186
+ page_title: string;
187
+ timestamp: number;
188
+ }
189
+
190
+ export interface EventsSessionSyncPages extends EventsSessionGeneric {
191
+ pages: EventsSessionPage[];
192
+ }
193
+
194
+ export interface EventsSessionEvent {
195
+ text: string;
196
+ data?: Record<string, string | number | boolean>;
197
+ color?: string;
198
+ timestamp: number;
199
+ }
200
+
201
+ export interface EventsSessionSyncEvents extends EventsSessionGeneric {
202
+ events: EventsSessionEvent[];
203
+ }
204
+
205
+ export interface EventsSessionRating {
206
+ stars: number;
207
+ comment?: string;
208
+ }
209
+
210
+ export interface EventsSessionSyncRating extends EventsSessionGeneric {
211
+ rating: EventsSessionRating;
212
+ }
213
+
214
+ export interface EventsSessionSyncTopic extends EventsSessionGeneric {
215
+ topic: string;
216
+ }
217
+
218
+ export type EventsSessionRemoved = EventsSessionGeneric;
219
+
220
+ export interface EventsSessionError extends EventsSessionGeneric {
221
+ type: string;
222
+ value: string;
223
+ previous_value: string;
224
+ }
225
+
226
+ /**************************************************************************
227
+ * TYPES + INTERFACES (MESSAGE EVENTS)
228
+ ***************************************************************************/
229
+
230
+ export interface EventsMessageUpdated extends EventsSessionGeneric {
231
+ fingerprint: number;
232
+ content: string | ConversationPickerMessageContent;
233
+ }
234
+
235
+ /**
236
+ * Common fields shared by 'message:send' and 'message:received' events.
237
+ */
238
+ export interface EventsMessageGeneric extends EventsSessionGeneric {
239
+ type: ConversationMessageType;
240
+ from: string;
241
+ origin: string;
242
+ fingerprint: number;
243
+ timestamp: number;
244
+ user: ConversationMessageUser;
245
+ mentions?: string[];
246
+ stamped?: boolean;
247
+ }
248
+
249
+ export interface EventsMessageSendText extends EventsMessageGeneric {
250
+ type: "text";
251
+ content: string;
252
+ }
253
+
254
+ export interface EventsMessageSendFile extends EventsMessageGeneric {
255
+ type: "file";
256
+ content: ConversationFileMessageContent;
257
+ }
258
+
259
+ export interface EventsMessageSendAnimation extends EventsMessageGeneric {
260
+ type: "animation";
261
+ content: ConversationAnimationMessageContent;
262
+ }
263
+
264
+ export interface EventsMessageSendAudio extends EventsMessageGeneric {
265
+ type: "audio";
266
+ content: ConversationAudioMessageContent;
267
+ }
268
+
269
+ export interface EventsMessageSendPicker extends EventsMessageGeneric {
270
+ type: "picker";
271
+ content: ConversationPickerMessageContent;
272
+ }
273
+
274
+ export interface EventsMessageSendField extends EventsMessageGeneric {
275
+ type: "field";
276
+ content: ConversationFieldMessageContent;
277
+ }
278
+
279
+ export interface EventsMessageSendCarousel extends EventsMessageGeneric {
280
+ type: "carousel";
281
+ content: ConversationCarouselMessageContent;
282
+ }
283
+
284
+ /**
285
+ * Payload of a 'message:send' event (message sent by a visitor).
286
+ */
287
+ export type EventsMessageSend =
288
+ | EventsMessageSendText
289
+ | EventsMessageSendFile
290
+ | EventsMessageSendAnimation
291
+ | EventsMessageSendAudio
292
+ | EventsMessageSendPicker
293
+ | EventsMessageSendField
294
+ | EventsMessageSendCarousel;
295
+
296
+ export interface EventsMessageReceivedNote extends EventsMessageGeneric {
297
+ type: "note";
298
+ content: string;
299
+ }
300
+
301
+ export interface EventsMessageReceivedEvent extends EventsMessageGeneric {
302
+ type: "event";
303
+ content: ConversationEventMessageContent;
304
+ }
305
+
306
+ /**
307
+ * Payload of a 'message:received' event (message sent by an operator).
308
+ */
309
+ export type EventsMessageReceived =
310
+ | EventsMessageSendText
311
+ | EventsMessageReceivedNote
312
+ | EventsMessageSendFile
313
+ | EventsMessageSendAnimation
314
+ | EventsMessageSendAudio
315
+ | EventsMessageSendPicker
316
+ | EventsMessageSendField
317
+ | EventsMessageSendCarousel
318
+ | EventsMessageReceivedEvent;
319
+
320
+ export interface EventsMessageRemoved extends EventsSessionGeneric {
321
+ fingerprint: number;
322
+ }
323
+
324
+ export interface EventsMessageComposeSend extends EventsSessionGeneric {
325
+ type: "start" | "stop";
326
+ excerpt?: string;
327
+ timestamp: number;
328
+ }
329
+
330
+ export interface EventsMessageComposeReceive extends EventsSessionGeneric {
331
+ type: "start" | "stop";
332
+ excerpt?: string;
333
+ timestamp: number;
334
+ user: ConversationMessageUser;
335
+ }
336
+
337
+ export interface EventsMessageAcknowledge extends EventsSessionGeneric {
338
+ origin: string;
339
+ fingerprints: number[];
340
+ }
341
+
342
+ export interface EventsMessageAcknowledgeIgnoredDetails {
343
+ type: string;
344
+ reason: string;
345
+ }
346
+
347
+ export interface EventsMessageAcknowledgeIgnored
348
+ extends EventsMessageAcknowledge {
349
+ details?: EventsMessageAcknowledgeIgnoredDetails;
350
+ }
351
+
352
+ export type EventsMessageNotifyUnread = EventsSessionGeneric;
353
+
354
+ /**************************************************************************
355
+ * TYPES + INTERFACES (SPAM EVENTS)
356
+ ***************************************************************************/
357
+
358
+ export interface EventsSpamMessage extends EventsWebsiteGeneric {
359
+ spam_id: string;
360
+ type: string;
361
+ reason: string;
362
+ metadata?: Record<string, unknown>;
363
+ headers?: Record<string, string>;
364
+ timestamp: number;
365
+ }
366
+
367
+ export interface EventsSpamDecision extends EventsWebsiteGeneric {
368
+ spam_id: string;
369
+ action: string;
370
+ }
371
+
372
+ /**************************************************************************
373
+ * TYPES + INTERFACES (PEOPLE EVENTS)
374
+ ***************************************************************************/
375
+
376
+ export interface EventsPeopleProfileCreated extends EventsWebsiteGeneric {
377
+ people_id: string;
378
+ email?: string;
379
+ }
380
+
381
+ export interface EventsPeopleEmployment {
382
+ domain?: string;
383
+ name?: string;
384
+ role?: string;
385
+ title?: string;
386
+ }
387
+
388
+ export interface EventsPeoplePerson {
389
+ geolocation?: GeolocationInfo;
390
+ locales?: string[];
391
+ nickname?: string;
392
+ timezone?: number;
393
+ phone?: string;
394
+ avatar?: string;
395
+ employment?: EventsPeopleEmployment;
396
+ address?: string;
397
+ website?: string;
398
+ gender?: string;
399
+ }
400
+
401
+ export interface EventsPeopleCompany {
402
+ description?: string;
403
+ domain?: string;
404
+ geolocation?: GeolocationInfo;
405
+ legal_name?: string;
406
+ name?: string;
407
+ url?: string;
408
+ }
409
+
410
+ export interface EventsPeopleProfileUpdated extends EventsWebsiteGeneric {
411
+ people_id: string;
412
+ email?: string;
413
+ update: {
414
+ updated_at: number;
415
+ person: EventsPeoplePerson;
416
+ };
417
+ }
418
+
419
+ export interface EventsPeopleProfileRemoved extends EventsWebsiteGeneric {
420
+ people_id: string;
421
+ }
422
+
423
+ export interface EventsPeopleBindSession extends EventsSessionGeneric {
424
+ people_id: string;
425
+ }
426
+
427
+ export interface EventsPeopleSyncProfile extends EventsSessionGeneric {
428
+ people_id: string;
429
+ identity: {
430
+ person?: EventsPeoplePerson;
431
+ company?: EventsPeopleCompany;
432
+ };
433
+ }
434
+
435
+ export interface EventsPeopleImportProgress extends EventsWebsiteGeneric {
436
+ people_id?: string;
437
+ progress: number;
438
+ count: {
439
+ skipped: number;
440
+ remaining: number;
441
+ };
442
+ items?: {
443
+ skipped?: Array<{
444
+ identifier: string | null;
445
+ reason: string;
446
+ }>;
447
+ };
448
+ }
449
+
450
+ export interface EventsPeopleImportDone extends EventsWebsiteGeneric {
451
+ people_id?: string;
452
+ error: boolean;
453
+ }
454
+
455
+ /**************************************************************************
456
+ * TYPES + INTERFACES (CAMPAIGN EVENTS)
457
+ ***************************************************************************/
458
+
459
+ export interface EventsCampaignProgress extends EventsWebsiteGeneric {
460
+ campaign_id: string;
461
+ progress: number;
462
+ }
463
+
464
+ export interface EventsCampaignDispatched extends EventsWebsiteGeneric {
465
+ campaign_id: string;
466
+ }
467
+
468
+ export interface EventsCampaignRunning extends EventsWebsiteGeneric {
469
+ campaign_id: string;
470
+ running: boolean;
471
+ }
472
+
473
+ /**************************************************************************
474
+ * TYPES + INTERFACES (BROWSING EVENTS)
475
+ ***************************************************************************/
476
+
477
+ export interface EventsBrowsingRequestInitiated extends EventsSessionGeneric {
478
+ browsing_id: string;
479
+ browsing_token: string;
480
+ }
481
+
482
+ export type EventsBrowsingRequestRejected = EventsSessionGeneric;
483
+
484
+ /**************************************************************************
485
+ * TYPES + INTERFACES (CALL EVENTS)
486
+ ***************************************************************************/
487
+
488
+ export interface EventsCallRequestInitiated extends EventsSessionGeneric {
489
+ call_id: string;
490
+ }
491
+
492
+ export interface EventsCallRequestRejected extends EventsSessionGeneric {
493
+ call_id: string;
494
+ }
495
+
496
+ /**************************************************************************
497
+ * TYPES + INTERFACES (IDENTITY EVENTS)
498
+ ***************************************************************************/
499
+
500
+ export interface EventsIdentityVerifyRequest extends EventsWebsiteGeneric {
501
+ plugin_id: string;
502
+ session_id: string;
503
+ target: string;
504
+ code: string;
505
+ confirm_url: string;
506
+ }
507
+
508
+ /**************************************************************************
509
+ * TYPES + INTERFACES (WIDGET EVENTS)
510
+ ***************************************************************************/
511
+
512
+ export interface EventsWidgetActionProcessed extends EventsSessionGeneric {
513
+ plugin_id: string;
514
+ correlation_id: string;
515
+ outcome: "success" | "failure";
516
+ result?: Record<string, unknown>;
517
+ }
518
+
519
+ /**************************************************************************
520
+ * TYPES + INTERFACES (STATUS EVENTS)
521
+ ***************************************************************************/
522
+
523
+ export type EventsStatusHealth = "healthy" | "sick" | "dead";
524
+
525
+ export interface EventsStatusNode {
526
+ label: string;
527
+ replica: string;
528
+ }
529
+
530
+ export interface EventsStatusHealthChanged extends EventsWebsiteGeneric {
531
+ health: EventsStatusHealth;
532
+ nodes: EventsStatusNode[];
533
+ }
534
+
535
+ /**************************************************************************
536
+ * TYPES + INTERFACES (WEBSITE EVENTS)
537
+ ***************************************************************************/
538
+
539
+ export interface EventsWebsiteUpdateVisitorsCount extends EventsWebsiteGeneric {
540
+ visitors_count: number;
541
+ }
542
+
543
+ export interface EventsWebsiteUpdateOperatorsAvailability
544
+ extends EventsWebsiteGeneric {
545
+ user_id: string;
546
+ availability: {
547
+ type: EventsSessionAvailability;
548
+ };
549
+ }
550
+
551
+ export interface EventsWebsiteUsersAvailable extends EventsWebsiteGeneric {
552
+ available: boolean;
553
+ }
554
+
555
+ /**************************************************************************
556
+ * TYPES + INTERFACES (BUCKET EVENTS)
557
+ ***************************************************************************/
558
+
559
+ export interface EventsBucketURLGenerated {
560
+ from: string;
561
+ id: string;
562
+ identifier: string;
563
+ resource: {
564
+ type: string;
565
+ id: string;
566
+ };
567
+ policy: {
568
+ size_limit: number;
569
+ };
570
+ type: string;
571
+ url: {
572
+ resource: string;
573
+ signed: string;
574
+ };
575
+ }
576
+
577
+ /**************************************************************************
578
+ * TYPES + INTERFACES (MEDIA EVENTS)
579
+ ***************************************************************************/
580
+
581
+ export interface EventsMediaAnimationResult {
582
+ type: string;
583
+ url: string;
584
+ }
585
+
586
+ export interface EventsMediaAnimationListed {
587
+ id: number;
588
+ identifier: string;
589
+ results: EventsMediaAnimationResult[];
590
+ }
591
+
592
+ /**************************************************************************
593
+ * TYPES + INTERFACES (EMAIL EVENTS)
594
+ ***************************************************************************/
595
+
596
+ export interface EventsEmailSubscribe extends EventsWebsiteGeneric {
597
+ email: string;
598
+ subscribed: boolean;
599
+ }
600
+
601
+ export interface EventsEmailTrackView extends EventsWebsiteGeneric {
602
+ type: string;
603
+ identifier: string;
604
+ mode: string;
605
+ }
606
+
607
+ /**************************************************************************
608
+ * TYPES + INTERFACES (PLUGIN EVENTS)
609
+ ***************************************************************************/
610
+
611
+ export interface EventsPluginChannel extends EventsWebsiteGeneric {
612
+ plugin_id: string;
613
+ identifier: string;
614
+ namespace: string;
615
+ payload: unknown;
616
+ }
617
+
618
+ export interface EventsPluginEvent extends EventsWebsiteGeneric {
619
+ plugin_id: string;
620
+ urn: string;
621
+ name: string;
622
+ data: Record<string, unknown>;
623
+ }
624
+
625
+ export interface EventsPluginSubscriptionUpdated extends EventsWebsiteGeneric {
626
+ plugin_id: string;
627
+ bound: boolean;
628
+ target: string;
629
+ }
630
+
631
+ export interface EventsPluginSettingsSaved extends EventsWebsiteGeneric {
632
+ plugin_id: string;
633
+ settings: Record<string, unknown>;
634
+ }
635
+
636
+ /**************************************************************************
637
+ * TYPES + INTERFACES (PLAN EVENTS)
638
+ ***************************************************************************/
639
+
640
+ export interface EventsPlanSubscriptionUpdated extends EventsWebsiteGeneric {
641
+ plan: {
642
+ id: string;
643
+ name: string;
644
+ price?: number;
645
+ trialing: boolean;
646
+ };
647
+ }
648
+
649
+ /**************************************************************************
650
+ * EVENT MAP
651
+ ***************************************************************************/
652
+
653
+ /**
654
+ * Maps each event name to the shape of the payload delivered to its listener,
655
+ * whether received over WebSockets or Web Hooks.
656
+ */
657
+ export interface EventsMap {
658
+ // Session Events
659
+ "session:update_availability": EventsSessionUpdateAvailability;
660
+ "session:update_verify": EventsSessionUpdateVerify;
661
+ "session:request:initiated": EventsSessionRequestInitiated;
662
+ "session:set_email": EventsSessionSetEmail;
663
+ "session:set_phone": EventsSessionSetPhone;
664
+ "session:set_address": EventsSessionSetAddress;
665
+ "session:set_subject": EventsSessionSetSubject;
666
+ "session:set_avatar": EventsSessionSetAvatar;
667
+ "session:set_nickname": EventsSessionSetNickname;
668
+ "session:set_origin": EventsSessionSetOrigin;
669
+ "session:set_data": EventsSessionSetData;
670
+ "session:set_segments": EventsSessionSetSegments;
671
+ "session:set_block": EventsSessionSetBlock;
672
+ "session:set_opened": EventsSessionSetOpened;
673
+ "session:set_closed": EventsSessionSetClosed;
674
+ "session:set_participants": EventsSessionSetParticipants;
675
+ "session:set_mentions": EventsSessionSetMentions;
676
+ "session:set_routing": EventsSessionSetRouting;
677
+ "session:set_inbox": EventsSessionSetInbox;
678
+ "session:set_state": EventsSessionSetState;
679
+ "session:sync:capabilities": EventsSessionSyncCapabilities;
680
+ "session:sync:geolocation": EventsSessionSyncGeolocation;
681
+ "session:sync:system": EventsSessionSyncSystem;
682
+ "session:sync:network": EventsSessionSyncNetwork;
683
+ "session:sync:timezone": EventsSessionSyncTimezone;
684
+ "session:sync:locales": EventsSessionSyncLocales;
685
+ "session:sync:pages": EventsSessionSyncPages;
686
+ "session:sync:events": EventsSessionSyncEvents;
687
+ "session:sync:rating": EventsSessionSyncRating;
688
+ "session:sync:topic": EventsSessionSyncTopic;
689
+ "session:removed": EventsSessionRemoved;
690
+ "session:error": EventsSessionError;
691
+
692
+ // Message Events
693
+ "message:updated": EventsMessageUpdated;
694
+ "message:send": EventsMessageSend;
695
+ "message:received": EventsMessageReceived;
696
+ "message:removed": EventsMessageRemoved;
697
+ "message:compose:send": EventsMessageComposeSend;
698
+ "message:compose:receive": EventsMessageComposeReceive;
699
+ "message:acknowledge:read:send": EventsMessageAcknowledge;
700
+ "message:acknowledge:read:received": EventsMessageAcknowledge;
701
+ "message:acknowledge:unread:send": EventsMessageAcknowledge;
702
+ "message:acknowledge:delivered": EventsMessageAcknowledge;
703
+ "message:acknowledge:ignored": EventsMessageAcknowledgeIgnored;
704
+ "message:notify:unread:send": EventsMessageNotifyUnread;
705
+ "message:notify:unread:received": EventsMessageNotifyUnread;
706
+
707
+ // Spam Events
708
+ "spam:message": EventsSpamMessage;
709
+ "spam:decision": EventsSpamDecision;
710
+
711
+ // People Events
712
+ "people:profile:created": EventsPeopleProfileCreated;
713
+ "people:profile:updated": EventsPeopleProfileUpdated;
714
+ "people:profile:removed": EventsPeopleProfileRemoved;
715
+ "people:bind:session": EventsPeopleBindSession;
716
+ "people:sync:profile": EventsPeopleSyncProfile;
717
+ "people:import:progress": EventsPeopleImportProgress;
718
+ "people:import:done": EventsPeopleImportDone;
719
+
720
+ // Campaign Events
721
+ "campaign:progress": EventsCampaignProgress;
722
+ "campaign:dispatched": EventsCampaignDispatched;
723
+ "campaign:running": EventsCampaignRunning;
724
+
725
+ // Browsing Events
726
+ "browsing:request:initiated": EventsBrowsingRequestInitiated;
727
+ "browsing:request:rejected": EventsBrowsingRequestRejected;
728
+
729
+ // Call Events
730
+ "call:request:initiated": EventsCallRequestInitiated;
731
+ "call:request:rejected": EventsCallRequestRejected;
732
+
733
+ // Identity Events
734
+ "identity:verify:request": EventsIdentityVerifyRequest;
735
+
736
+ // Widget Events
737
+ "widget:action:processed": EventsWidgetActionProcessed;
738
+
739
+ // Status Events
740
+ "status:health:changed": EventsStatusHealthChanged;
741
+
742
+ // Website Events
743
+ "website:update_visitors_count": EventsWebsiteUpdateVisitorsCount;
744
+ "website:update_operators_availability": EventsWebsiteUpdateOperatorsAvailability;
745
+ "website:users:available": EventsWebsiteUsersAvailable;
746
+
747
+ // Bucket Events
748
+ "bucket:url:upload:generated": EventsBucketURLGenerated;
749
+ "bucket:url:avatar:generated": EventsBucketURLGenerated;
750
+ "bucket:url:website:generated": EventsBucketURLGenerated;
751
+ "bucket:url:campaign:generated": EventsBucketURLGenerated;
752
+ "bucket:url:helpdesk:generated": EventsBucketURLGenerated;
753
+ "bucket:url:status:generated": EventsBucketURLGenerated;
754
+ "bucket:url:processing:generated": EventsBucketURLGenerated;
755
+
756
+ // Media Events
757
+ "media:animation:listed": EventsMediaAnimationListed;
758
+
759
+ // Email Events
760
+ "email:subscribe": EventsEmailSubscribe;
761
+ "email:track:view": EventsEmailTrackView;
762
+
763
+ // Plugin Events
764
+ "plugin:channel": EventsPluginChannel;
765
+ "plugin:event": EventsPluginEvent;
766
+ "plugin:subscription:updated": EventsPluginSubscriptionUpdated;
767
+ "plugin:settings:saved": EventsPluginSettingsSaved;
768
+
769
+ // Plan Events
770
+ "plan:subscription:updated": EventsPlanSubscriptionUpdated;
771
+ }
772
+
773
+ /**
774
+ * Union of all recognized event names.
775
+ */
776
+ export type EventName = keyof EventsMap;
777
+
778
+ /**
779
+ * Shape of a Web Hook body, as received on the HTTP endpoint before being
780
+ * dispatched with 'receiveHook'.
781
+ */
782
+ export type EventsWebHookBody<Name extends EventName = EventName> = {
783
+ [K in Name]: {
784
+ event: K;
785
+ data: EventsMap[K];
786
+ timestamp?: number;
787
+ website_id?: string;
788
+ };
789
+ }[Name];