1
+ const ALICE_JWT = "" ;
2
+ const BOB_JWT = "" ;
3
+ const CONVERSATION_ID = "" ;
4
+
5
+ const aliceLoginBtn = document . getElementById ( "alice-login" ) ;
6
+ const bobLoginBtn = document . getElementById ( "bob-login" ) ;
7
+
8
+ const messageTextarea = document . getElementById ( "message-textarea" ) ;
9
+ const messageFeed = document . getElementById ( "message-feed" ) ;
10
+ const sendButton = document . getElementById ( "send" ) ;
11
+
12
+ let userToken ;
13
+ let myMember ;
14
+
15
+ function formatMessage ( sender , message ) {
16
+ const rawDate = new Date ( Date . parse ( message . timestamp ) ) ;
17
+ const options = {
18
+ weekday : "long" ,
19
+ year : "numeric" ,
20
+ month : "long" ,
21
+ day : "numeric" ,
22
+ hour : "numeric" ,
23
+ minute : "numeric" ,
24
+ second : "numeric" ,
25
+ } ;
26
+ const formattedDate = rawDate . toLocaleDateString ( undefined , options ) ;
27
+ let text = "" ;
28
+
29
+ if ( message . from . memberId !== myMember . id ) {
30
+ text = `<span style="color:red">${ sender . userName . replace ( / < / g, "<" ) } (${ formattedDate } ): <b>${ message . body . text . replace ( / < / g, "<" ) } </b></span>` ;
31
+ } else {
32
+ text = `me (${ formattedDate } ): <b>${ message . body . text . replace ( / < / g, "<" ) } </b>` ;
33
+ }
34
+ return text + "<br />" ;
35
+ }
36
+
37
+ function handleEvent ( event ) {
38
+ let formattedMessage ;
39
+ switch ( event . kind ) {
40
+ case "member:invited" :
41
+ formattedMessage = `${ event . body . user . name } was invited.<br/>` ;
42
+ break ;
43
+ case "member:joined" :
44
+ formattedMessage = `${ event . body . user . name } joined.<br/>` ;
45
+ break ;
46
+ case "member:left" :
47
+ formattedMessage = `${ event . body . user . name } left.<br/>` ;
48
+ break ;
49
+ case "message:text" :
50
+ const sender = {
51
+ displayName : event . from . displayName ,
52
+ memberId : event . from . memberId ,
53
+ userName : event . from . user . name ,
54
+ userId : event . from . user . id ,
55
+ } ;
56
+ formattedMessage = formatMessage ( sender , event ) ;
57
+ break ;
58
+ }
59
+ messageFeed . innerHTML = messageFeed . innerHTML + formattedMessage ;
60
+ }
61
+
62
+ async function run ( ) {
63
+ const client = new vonageClientSDK . VonageClient ( ) ;
64
+ try {
65
+ await client . createSession ( userToken ) ;
66
+
67
+ // Get my Member information
68
+ myMember = await client . getConversationMember ( CONVERSATION_ID , "me" ) ;
69
+
70
+ document . getElementById ( "messages" ) . style . display = "block" ;
71
+ document . getElementById ( "login" ) . style . display = "none" ;
72
+
73
+ // Load events that happened before the page loaded
74
+ const params = {
75
+ order : "asc" ,
76
+ pageSize : 100 ,
77
+ } ;
78
+ const eventsPage = await client . getConversationEvents ( CONVERSATION_ID , params ) ;
79
+ eventsPage . events . forEach ( ( event ) => handleEvent ( event ) ) ;
80
+ } catch ( error ) {
81
+ console . error ( "Error: " , error ) ;
82
+ return ;
83
+ }
84
+
85
+ client . on ( "conversationEvent" , ( event ) => {
86
+ handleEvent ( event ) ;
87
+ } ) ;
88
+
89
+ // Listen for clicks on the submit button and send the existing text value
90
+ sendButton . addEventListener ( "click" , ( ) => {
91
+ client
92
+ . sendMessageTextEvent ( CONVERSATION_ID , messageTextarea . value )
93
+ . then ( ( timestamp ) => {
94
+ console . log ( "Successfully sent text message at " , timestamp ) ;
95
+ messageTextarea . value = "" ;
96
+ } )
97
+ . catch ( ( error ) => {
98
+ console . error ( "Error sending text message: " , error ) ;
99
+ } ) ;
100
+ } ) ;
101
+ }
102
+
103
+ aliceLoginBtn . addEventListener ( "click" , ( ) => {
104
+ userToken = ALICE_JWT ;
105
+ run ( ) ;
106
+ } ) ;
107
+
108
+ bobLoginBtn . addEventListener ( "click" , ( ) => {
109
+ userToken = BOB_JWT ;
110
+ run ( ) ;
111
+ } ) ;
112
+
113
+
0 commit comments