Release Notes
Product deprecation notice
Effective April 30th, 2026, Vonage In-App Messaging will no longer be available. Access for new users will be closed, and the service will be discontinued for all existing users.
If you have any questions regarding this product’s discontinuation, please contact your account manager or our support team.
Version 9.5.1 - January 11, 2024
Fixes
- Fix bug on making
networkRequestdata a string
Version 9.5.0 - November 21, 2023
New
- Support pending events (missed
member:invited)
Version 9.4.0 - September 04, 2023
New
- Support
ephemeralevent
// send ephemeral event
conversation
.sendEphemeralEvent({ state: "INVITED" })
.then((event) => {
console.log(event)
});
Version 9.3.1 - August 30, 2023
Fixes
- Fix
NexmoAPIerror wrapping forv0.3Conversation API endpoints
Release Notes
Version 9.3.1 - June 19, 2023
Fixes
- Fix
NexmoAPIerror wrapping forv0.3Conversation API endpoints
Version 9.3.0 - June 01, 2023
New
- Add
stateto query param forapplication.getConversations()for theConversationsPageobject
// iterate through conversations
application
.getConversations({ state: "INVITED" })
.then((conversations_page) => {
conversations_page.items.forEach(conversation => {
render(conversation);
})
});
Fixes
- Fix type definition for
Conversationtimestamp to object - Default
socket.ioquerysession_versionto0.0.1unlessenableInboundOfferflag set to true, then default to0.0.2
Version 9.2.6 - May 23, 2023
Changes
- Add WS reconnection metrics
Version 9.2.5 - May 23, 2023
Fixes
- Fix type definition for
enableEventsQueueandenableInboundOffer - Add
acknowledgeEventsflag in the configuration to allow tracking of websocket event acknowledgement
Version 9.2.4 - April 19, 2023
Fixes
- Emitting
reconnectingsocket event on reconnection attempt
Version 9.2.3 - March 30, 2023
Changes
- Upgrade
socket.io-clientversion to 4.6.1
Version 9.2.2 - March 13, 2023
Fixes
- Fix
ConversationEventsProcessorbeing initiated multiple times for the same conversation
Version 9.2.0 - December 21, 2022
Changes
- Add
enableInboundOfferflag to config for inbound call setup - Remove
Ice Serversdefault fromwebrtc STUNserver setup - Replace
api.nexmoURLs toapi.vonageURLs
Version 9.1.5 - October 24, 2022
Fixes
- Fix bug on user re invited/joined to a conversation
Version 9.1.4 - September 23, 2022
Changes
- Use
v2of Nexmo Conversation Websocket
Version 9.1.3 - September 07, 2022
Fix
- Fix typescript module definition
Version 9.1.1 - August 19, 2022
Fix
- Fix events ordering for rtc:transfer on named conversations
Version 9.1.0 - August 16, 2022
New
- Use pre-loaded media on inbound calls (start
WebRTC icegathering process as soon as member is invited to a call)
Fix
- Remove
public-iplibrary because of a security vulnerability (updated withis-ip)
Version 9.0.0 - June 30, 2022
Breaking changes
- Rename
login()function tocreateSession()
rtc.createSession(token).then((application) => {
console.log(application);
}).catch((error) => {
console.log(error);
});
- Rename
logout()function todeleteSession()
rtc.deleteSession().then((response) => {
console.log(response);
}).catch((error) => {
console.log(error);
});
Changes
- Move websocket connection creation to the
createSession()function
Version 8.7.3 - June 14, 2022
Changes
- Added token authentication to
connectivityReport()
rtc.connectivityReport(token, {
dcListCallback: (dcList) => {...dcList, additionalDc}
}).then((report) => {
console.log(report);
}).catch((error) => {
console.log(error);
});
- Added token authentication to
checkMediaServers()
rtc.checkMediaServers('token', 'nexmo-api-url','dc').then((responseArray) => {
console.log(responseArray);
}).catch((error) => {
console.log(error);
});
Version 8.7.2 - May 27, 2022
Fix
- Removed unused npm dependencies.
Version 8.7.1 - May 11, 2022
New
- Added new
checkMediaServers()method to return a list with the connection health of the media servers for a specific datacenter.
rtc.checkMediaServers('nexmo-api-url','dc').then((responseArray) => {
console.log(responseArray);
}).catch((error) => {
console.log(error);
});
- Added new
checkMediaConnectivity()method to return the connection health of a single media server.
rtc.checkMediaConnectivity('ip-address','1').then((response) => {
console.log(response);
}).catch((error) => {
console.log(error);
});
Changes
- Update
connectivityReport()to return connection time in ms for connection to https, wss, and media servers
Version 8.6.0 - April 21, 2022
New
- Added an optional object argument to the
connectivityReport(), with optional fielddcListCallbackwhich accepts a callback function to update data center list
rtc.connectivityReport({
dcListCallback: (dcList) => {...dcList, additionalDc}
}).then((report) => {
console.log(report);
}).catch((error) => {
console.log(error);
});
Version 8.5.0 - April 20, 2022
New
- Expose
seen()anddelivered()functions for message events
messageEvent.seen().then(() => {
console.log(`Seen message with id ${messageEvent.id}`);
}).catch((error) => {
console.log(error);
});
- Support new message status events
message:seenmessage:deliveredmessage:submittedmessage:rejectedmessage:undeliverable
conversation.on("message:delivered", (member, event) => {
console.log(`Message with id ${event.id} delivered to ${member.name}`);
});
- Added new state objects for message events supporting the new statuses
seen_bydelivered_tosubmitted_torejected_byundeliverable_to
Changes
- Update
connectivityReport()to use proper endpoints per region
Version 8.4.1 - February 14, 2022
Fix
- Fix events ordering when gap in inbound events
Version 8.4.0 - January 21, 2022
New
- Added new
connectivityReport()function to get a connectivity report for all Vonage data centers and media servers
rtc.connectivityReport().then((report) => {
console.log(report);
}).catch((error) => {
console.log(error);
});
Version 8.3.1 - December 09, 2021
New
- Set the default sync level for the login process from
litetonone
Version 8.3.0 - November 01, 2021
New
- Added new
uploadImage()function to upload an image to the Vonage Media Service
const params = {
quality_ratio : "90",
medium_size_ratio: "40",
thumbnail_size_ratio: "20"
};
conversation.uploadImage(fileInput.files[0], params).then((uploadImageRequest) => {
uploadImageRequest.onprogress = (e) => {
console.log("Image request progress: ", e);
console.log("Image progress: " + e.loaded + "/" + e.total);
};
uploadImageRequest.onabort = (e) => {
console.log("Image request aborted: ", e);
console.log("Image: " + e.type);
};
uploadImageRequest.onloadend = (e) => {
console.log("Image request successful: ", e);
console.log("Image: " + e.type);
};
uploadImageRequest.onreadystatechange = () => {
if (uploadImageRequest.readyState === 4 && uploadImageRequest.status === 200) {
const representations = JSON.parse(uploadImageRequest.responseText);
console.log("Original image url: ", representations.original.url);
console.log("Medium image url: ", representations.medium.url);
console.log("Thumbnail image url: ", representations.thumbnail.url);
}
};
}).catch((error) => {
console.error("error uploading the image ", error);
});
- Added new
sendMessage()function to send a newmessageto the conversation (supported types aretext,image,audio,videoandfile)
conversation.sendMessage({
"message_type": "text",
"text": "Hi Vonage!"
}).then((event) => {
console.log("message was sent", event);
}).catch((error)=>{
console.error("error sending the message ", error);
});
conversation.sendMessage({
"message_type": "image",
"image": {
"url": "https://example.com/image.jpg"
}
})
.then((event) => {
console.log("message was sent", event);
}).catch((error)=>{
console.error("error sending the message ", error);
});
- Added new
MessageEventtype of event
conversation.on("message", (member, messageEvent) => {
console.log(messageEvent);
});
Changes
- Deprecate
sendText()function (usesendMessage()with a type oftextinstead)
conversation.sendMessage({ "message_type": "text", "text": "Hi Vonage!" }).then((event) => {
console.log("message was sent", event);
}).catch((error)=>{
console.error("error sending the message ", error);
});
- Deprecate
sendImage()function (useuploadImage()andsendMessage()with a type ofimageinstead)
conversation.uploadImage(imageFile).then((imageRequest) => {
imageRequest.onreadystatechange = () => {
if (imageRequest.readyState === 4 && imageRequest.status === 200) {
try {
const { original, medium, thumbnail } = JSON.parse(imageRequest.responseText);
const message = {
message_type: 'image',
image: {
url: original.url ?? medium.url ?? thumbnail.url
}
}
return conversation.sendMessage(message);
} catch (error) {
console.error("error sending the message ", error);
}
}
if (imageRequest.status !== 200) {
console.error("error uploading the image");
}
};
return imageRequest;
})
.catch((error) => {
console.error("error uploading the image ", error);
});
Version 8.2.5 - October 12, 2021
Fix
- Fix error handling for audio permissions
Version 8.2.2 - October 08, 2021
Fix
- Enhance debug logs
Version 8.2.0 - September 28, 2021
New
- Add new
getUserSessions()function to fetch the sessions of the logged in user
application.getUserSessions({ user_id: "USR-id", page_size: 20 }).then((user_sessions_page) => {
user_sessions_page.items.forEach(user_session => {
render(user_session)
})
}).catch((error) => {
console.error(error);
});
Version 8.1.1 - September 08, 2021
New
- Add new optional
mediaParamsparameter inreconnectCallfunction, in order to modify theMediaStreamobject
application.reconnectCall(
"conversation_id",
"rtc_id",
{ audioConstraints: { deviceId: "device_id" } }
).then((nxmCall) => {
console.log(nxmCall);
}).catch((error) => {
console.error(error);
});
- Update
media.enable()docs to include audio constraints
Fixes
- Assign the correct
NXMCallstatus when reconnecting to a call (STARTED,RINGINGorANSWERED)
Changes
- Update
npmdependencies
Version 8.1.0 - September 02, 2021
New
- Add
reconnectCallfunction allowing users to reconnect to a call within 20 seconds if browser tab closed
application.reconnectCall("conversation_id", "rtc_id").then((nxmCall) => {
console.log(nxmCall);
}).catch((error) => {
console.error(error);
});
- Add optional parameter
reconnectRtcIdto mediaenable()function to reconnect media to call
conversation.media.enable({ reconnectRtcId: "UUID" }).then((stream) => {
console.log(stream)
}).catch((error) => {
console.error("error renabling media", error);
});
- Add
custom_dataobject incallServerfunction
application.callServer("<phone_number>", "phone", { field1: "test" }).then((nxmCall) => {
console.log(nxmCall);
}).catch((error) => {
console.error(error);
});
- Add
apiKey,applicationId,conversationIdandconversationNamewhen available inrtcstatsanalytics reports
Fixes
- Fix bug in call transfer where
transferred_fromwas undefined
Version 8.0.5 - July 15, 2021
Fixes
- Fix the
fromfor member events - Update
npmdependencies includingsocket-io
Version 8.0.4 - June 16, 2021
Fixes
- Fix bug on
DTMFdispatch of callback toevent_url
Version 8.0.3 - May 18, 2021
Fixes
- Fix out of order internal events processing in the events queue
- Fix deprecation warning message for
rtcstats:report
Version 8.0.1 - April 29, 2021
Fixes
- Update Typescript definitions
- Fix bug on IP-IP call scenario involving Native SDKs (not populating properly the
Conversation.membersMap)
Version 8.0.0 - April 27, 2021
Breaking changes
- Deprecate
Conversation.membersMap (it will be populated only on a call scenario) - Conversation events will be emitted with a subset information of the Member
conversation.on("any:event", ({memberId, userId, userName, displayName, imageUrl, customData}, event) => {});
Changes
- Add paginated
getMembers()function to retrieve the members of a conversation
conversation.getMembers().then((members_page) => {
members_page.items.forEach(member => {
render(member);
})
}).catch((error) => {
console.error("error getting the members ", error);
});
- Add
getMyMember()function to retrieve our own member in a conversation
conversation.getMyMember().then((member) => {
render(member);
}).catch((error) => {
console.error("error getting my member", error);
});
- Add
getMember()function to fetch a conversation member bymember_id
conversation.getMember("MEM-id").then((member) => {
render(member);
}).catch((error) => {
console.error("error getting member", error);
});
Version 7.1.0 - April 07, 2021
Changes
rtcstats:reportis deprecated. Please usertcstats:analyticsinstead
application.on('rtcstats:analytics', ({
type: 'mos' || 'mos_report',
mos: string,
rtc_id: string,
mos_report?: {
average: string,
last: string,
max: string,
min: string
},
report?: RTCStatsReport
}) => {}
- Add logs reporter for remote logging
- Add custom
getStatsparser - Remove
callstatslibrary and implementation
Version 7.0.2 - March 30, 2021
Fixes
- Emit 'call:status:update' event when application offline and call disconnected
Version 7.0.1 - February 04, 2021
Fixes
- Remove unnecessary warning message for call status transitions
Version 7.0.0 - February 02, 2021
Breaking changes
legsendpoint should be included inaclpaths onJWTtoken creation
"acl": {
"paths": {
...
"/*/legs/**": {}
}
}
Changes
- Improve
callServersetup time by pre-warming leg - Add the
rtcObjectand remotestreamto theNxmCallobject
Fixes
- Return
ClientDisconnectedreason when client logouts from SDK
Version 6.2.1 - December 24, 2020
Fixes
- Revert back to 6.1.1 from 6.2.0-alpha
Version 6.1.2 - December 24, 2020
Fixes
- Update Typescript definitions
Version 6.1.1 - December 09, 2020
Fixes
- Update Typescript definitions
Version 6.1.0 - December 01, 2020
Changes
- Add
enableEventsQueueflag to client configuration (default to true) - Add internal
eventsQueuemechanism to guarantee order of events received during a session
Version 6.0.19 - November 26, 2020
Changes
- Update
reconnectionDelayto2000insocket.io - Add
randomizationFactorto0.55insocket.io
Version 6.0.18 - November 19, 2020
Changes
- Update documentation
Fixes
- Add
reconnectionDelayto 3000 andreconnectionDelayMaxto 15000 insocket.io
Version 6.0.17 - November 12, 2020
Fixes
- Update Session id after reconnection
Version 6.0.16 - October 12, 2020
Fixes
- Dispatch
system:error:expired-tokenevent in application level
application.on('system:error:expired-token', 'NXM-errors', () => {
console.log('Token Expired');
});
- Handle uncaught exception of
conversation:error:invalid-member-stateevent
Version 6.0.15 - September 21, 2020
Fixes
- Set SDK default to single preset ICE candidate
- Remove
iceGatherOnlyOneCandidateflag from client configuration
Version 6.0.13 - September 14, 2020
Fixes
- Update websocket reconnection logic for token expiry
Version 6.0.12 - September 01, 2020
Fixes
- Update resolved stream on media enabling
Version 6.0.11 - September 01, 2020
Changes
- Update websocket reconnection logic
- Fix delay in establishing media connection with one ice candidate sent
Version 6.0.10 - May 04, 2020
Fixes
- Filter IPv6 Candidates from
iceGatherOnlyOneCandidateSDP offer
Version 6.0.9 - March 24, 2020
Fixes
- Fix handler of
rtc:transferevent to refresh conversation
Version 6.0.8 - February 28, 2020
Fixes
- Fix duplicated webrtc offer sent during IP calling
- Fix Safari
WebRTCdependency
Version 6.0.7 - January 16, 2020
Fixes
- Fix ANSWERED call status in IP - IP calling
- Fix docs issues
Changes
- Improve TypeScript definitions
Version 6.0.6 - November 19, 2019
Fixes
- Add
iceGatherOnlyOneCandidateconfiguration option and use to define path inICE gatheringprocess
Version 6.0.5 - November 19, 2019
Fixes
- Update styling of
JSDocstoDocstraptemplate - Change
RTCPeerConnection ICE candidatesgathering process to send the Session Description Protocol (SDP) offer on firstICEcandidate gathered
Version 6.0.4 - November 14, 2019
Fixes
- Remove remaining audio elements after transferring a call to a new conversation
- Update
conversation.invite()to not include emptyuser_idoruser_namefields within the requests
Version 6.0.3 - October 22, 2019
New
- Added TypeScript definition files
Changes
- Added options for customized logging levels in the console of
debug,info,warn, orerror.
new NexmoClient({
debug: 'info'
})
- Moved storage of JWT token from
localStoragetoNexmoClientconfiguration object - Removed unnecessary files from the NPM release package
Fixes
- Fixed call statuses order in case of a transfer
Version 6.0.1 - September 27, 2019
Changes
- Removed
media.record()function - Removed cache option from SDK, used for storing conversations and events
- Removed automatic syncing of all individual
conversationsin login, whensyncisliteorfull
Version 6.0.0 - September 13, 2019
Breaking Changes
- Change return value of
application.getConversations()to newConversationsPageobject
// iterate through conversations
application
.getConversations({ page_size: 20 })
.then((conversations_page) => {
conversations_page.items.forEach(conversation => {
render(conversation);
})
});
- Change return value of
conversation.getEvents()to newEventsPageobject
// iterate through events
conversation
.getEvents({ event_type: `member:*` })
.then((events_page) => {
events_page.items.forEach(event => {
render(event);
})
});
- Rename method
application.callPhonetoapplication.callServer - Rename method
application.calltoapplication.inAppCall - Rename method
call.createPhoneCalltocall.createServerCall - Rename class
CalltoNXMCall - Rename class
ConversationClienttoNexmoClient - Rename class
ConversationClientErrortoNexmoClientError - Rename files
conversationClient.jsandconversationClient.min.jstonexmoClient.jsandnexmoClient.min.js - Deprecate
member:call:stateevent (use insteadmember:call:status) - Remove automatic login in case of a websocket reconnection and emit the event
New
- Send and listen for custom event types in a conversation.
//sending a custom event type to a conversation
conversation
.sendCustomEvent({type: `my_custom_event`, body: { enabled: true }})
.then((custom_event) => {
console.log(event.body);
});
//listening for a custom event type
conversation.on(`my_custom_event`, (from, event) => {
console.log(event.body);
});
- Add new
PageConfigclass for configuring settings for paginated requests - Add new
Pageclass to wrap results of paginated requests - Add setup of default pagination configuration for conversations and events in ConversationClient initialization
- Add wild card supported for filtering by event types using
:*(for exampleevent_type:member:*)
new NexmoClient({
conversations_page_config: {
page_size: 25,
order: 'asc'
cursor: 'abc'
},
events_page_config: {
page_size: 50,
event_type: `member:*`
}
})
- Add new
ConversationsPageandEventsPagewhich extendPageclass to wrap results of paginated requests for conversations and events - Add
getNext()andgetPrev()methods toConversationsPageandEventsPageobjects to fetch previous and next pages of conversations and events - Add
conversations_page_lastparameter toapplicationobject andevents_page_lastparameter toconversationobject for reference to last page retrieved
application.conversations_page_last
.getNext((conversations_page) => {
conversations_page.items.forEach(conversation => {
render(conversation)
})
})
conversation.events_page_last
.getPrev((events_page) => {
events_page.items.forEach(event => {
render(event)
})
})
- Add the ability to make an IP-IP call through
callServerfunction
// IP-IP call scenario
application
.callServer('username', 'app')
.then((nxmCall) => {
// console.log(nxmCall);
});
// IP-PSTN call scenario
application
.callServer('07400000000')
.then((nxmCall) => {
// console.log(nxmCall);
});
Changes
- Update
reasonobject to receivereason.reason_textandreason.reason_codefields
Internal changes
- Rename
Eventclass toNXMEvent - Update CAPI requests to REST calls for these events
event:deliveredtext:deliveredimage:deliveredevent:seentext:seenimage:seenconversation:eventsaudio:playconversation:deleteconversation:invitetexttext:typing:ontext:typing:offnew:conversationconversation:getuser:conversationsuser:getconversation:joinaudio:sayaudio:earmuff:onaudio:earmuff:offaudio:dtmfaudio:recordaudio:playconversation:member:deleteevent:deleteaudio:ringing:startaudio:ringing:stopaudio:mute:onaudio:mute:offimagertc:newrtc:answerrtc:terminateknocking:newknocking:delete
Version 5.3.4 - July 18, 2019
Fixes
- Custom SDK config object does a deep merge with default config object
Version 5.3.3 - June 29, 2019
Fixes
- Change digits to digit in the
sendDTMF()request method payload. - Stream is not being terminated on a call transfer.
member:callis not being emitted ifmedia.audio_settings.enabledis false or doesn't exist.
New
- Set
member.callStatustostartedwhen initializing an IP - IP call. - Set
member.callStatustoringingwhen enabling the ringing withmedia.startRinging().
Internal changes
- Move stream cleanup from
member:lefttortc:hangupin Media module.
Version 5.2.1 - June 12, 2019
New
- Add the new
nexmoGetRequestutility method to make a GET network request directly to CS:
/**
* Perform a GET network request directly to CS
*
* @param {string} url the request url to CS
* @param {string} data_type the type of data expected back from the request (events, conversations, users)
* @param {object} [params] network request params
* @param {string} [params.cursor] cursor parameter to access the next or previous page of a data set
* @param {number} [params.page_size] the number of resources returned in a single request list
* @param {string} [params.order] 'asc' or 'desc' ordering of resources (usually based on creation time)
* @param {string} [params.event_type] the type of event used to filter event requests ('member:joined', 'audio:dtmf', etc)
*
* @returns {Promise<XMLHttpRequest.response>} the XMLHttpRequest.response
* @static
* @example <caption>Sending a nexmo GET request</caption>
*/
nexmoGetRequest(url, data_type, params).then((response) => {
response.body: {},
response.cursor: {
prev: '',
next: '',
self: ''
},
response.page_size: 10
});
- Support
reasonformember:delete,conversation.leave,member.kick,call.hangupandcall.reject. - Listen for the
member:leftevent withreason:
//listening for member:left with reason
conversation.on('member:left', (member, event) => {
console.log(event.body.reason);
});
/**
* Reason object format
*
* @param {object} [reason] the reason for kicking out a member
* @param {string} [reason.code] the code of the reason
* @param {string} [reason.text] the description of the reason
*/
- Add
callStatusfield in theMemberobject, defining the status of a call. - Emit
member:call:statusevent each time themember.callStatuschanges:
conversation.on("member:call:status", (member) => {
console.log(member.callStatus);
});
Version 5.2.0 - May 30, 2019
New
Add the
callinstance inapplication.callsmap increateCall()function (IP -IP call)Update caller parameter in call object in a PSTN - IP call from
unknowntochannel.from.numberorchannel.from.uriif existsEmit the new
leg:status:updateevent each time a member leg status change
/**
* Conversation listening for leg:status:update events.
*
* @event Conversation#leg:status:update
*
* @property {Member} member - the member whose leg status changed
* @property {Event} event - leg:status:update event
* @param {string} event.cid - the conversation id
* @param {string} event.body.leg_id - the conversation leg id
* @param {string} event.body.type - the conversation leg type (phone or app)
* @param {string} event.body.status - the conversation member leg status
* @param {Array} event.body.statusHistory - array of previous leg statuses
*/
conversation.on("leg:status:update", (member, event) {
console.log(member, event);
});
- Add the
channel.legsfield in member events offered by CS
conversation.on(<member_event>, (member, event) {
console.log(event);
// member_id: <member_id>,
// conversation_id: <conversation_id>,
// ...
// channel: {
// to: {
// type: app
// },
// type: app,
// leg_ids: [<leg_id>]
// legs : [{ leg_id: <leg_id>, status: <leg_status>}],
// leg_settings: {},
// },
// state: <state>,
// leg_ids: []
});
Version 5.1.0 - May 29, 2019
New
- Send DTMF event to a conversation
* Send DTMF in a conversation
*
* @param {string} digits - the DTMF digit(s) to send
* @returns {Promise<Event>}
conversation.media.sendDTMF('digits')
- Emit new event
audio:dtmf
conversation.on("audio:dtmf",(from, event)=>{
event.digit // the dtmf digit(s) received
event.from //id of the user who sent the dtmf
event.timestamp //timestamp of the event
event.cid // conversation id the event was sent to
event.body // additional context about the dtmf
});
- Set customized audio constraints for IP calls when enabling audio
conversation.media.enable({
'audioConstraints': audioConstraints
})
* Replaces the stream's audio tracks currently being used as the sender's sources with a new one with new audio constraints
* @param {object} constraints - audio constraints
* @returns {Promise<MediaStream>} - Returns the new stream with the updated audio constraints.
* @example
* conversation.media.updateAudioConstraints({'autoGainControl': true})
**/
- Update audio constraints for existing audio tracks
conversation.media.updateAudioConstraints(audioConstraints)
})
Fixes
- Remove 'this' passed to cache worker event handler
Internal breaking changes
- Change the media audio parameter from
media.audiotomedia.audio_settingsininviteWithAudiofunction
Version 5.0.3 - May 23, 2019
Changes
- Change default behavior of
autoPlayAudioinmedia.enable()from false to true - Pass an
autoPlayAudioparameter tocall.createCall()andcall.answer()functions (default is true)
Version 5.0.2 - May 30, 2019
New
- Delete the image files before sending the
image:deleterequest - Attach of audio stream can now be chosen if it will be automatically on or off through
media.enable()
media.enable({
autoPlayAudio: true | false
})
Changes (internally)
- Combine the network GET, POST and DELETE requests in one generic function
Version 5.0.1 - April 30, 2019
Fixes
- Clean up user's media before leaving from an ongoing conversation
Breaking changes
- Change
application.conversationstype fromObjecttoMap
Version 4.1.0 - April 26, 2019
Fixes
- Fixed the bug where the audio stream resolved in media.enable() is causing echo and was not the remote stream
- Resolve the remote stream
pc.ontrack()and not thelocalStreamfrom getUserMedia
Changes
- Rename
localStreamtostreaminmedia.rtcObjectsobject.
Version 4.0.2 - April 17, 2019
Changes
- Removed
media.rtcNewPromises
New
- Internal lib dependencies update
- Added support for Bugsnag error monitoring and reporting tool
* @class ConversationClient
*
* @param {object} param.log_reporter configure log reports for bugsnag tool
* @param {Boolean} param.log_reporter.enabled=false
* @param {string} param.log_reporter.bugsnag_key your bugsnag api key / defaults to Vonage api key
- Updated vscode settings to add empty line (if none) at end of every file upon save
- Disable the ice candidates trickling in ice connection
- Wait until most of the candidates to be gathered both for the local and remote side
- Added new private function
editSDPOrder(offer, answer)inrtc_helper.jsto reorder the answer SDP when it's needed - For rtc connection fail state
- Disable leg
- emit new event
media:connection:fail
member.on("media:connection:fail",(connection_details)=>{
connection_details.rtc_id // my member's call id / leg id
connection_details.remote_member_id // the id of the Member the stream belongs to
connection_details.connection_event: // the connection fail event
connection_details.type // the type of the connection (video or screenshare)
connection_details.streamIndex // the streamIndex of the specific stream
});
* @event Member#media:connection:fail
*
* @property {number} payload.rtc_id the rtc_id / leg_id
* @property {string} payload.remote_member_id the id of the Member the stream belongs to
* @property {event} payload.connection_event the connection fail event
- Add new LICENCE file
Breaking changes (internally)
- Deprecating ice trickling logic with
onicecandidateevent handler - Change the format of
member:mediaevent to the new one offered by CS
type: 'member:media',
from: member.member_id,
conversation_id: member.conversation_id,
body: {
media: member.media,
channel: member.channel
}
- Change the format of
member:invitedevent to the new offered by CS
type: 'member:invited',
body: {
media: {
audio_settings: {
enabled: false,
earmuffed: false,
muted: false
}
}
}
Version 4.0.1 - March 4, 2019
New
Select the sync level for the login process
full: trigger full sync to include conversations and eventslite: trigger partial sync, only conversation objects (empty of events)none: don't sync anything
if the Cache module is enabled the manual fetch of a conversation will store them in internal storage
usage:
new ConverationClient({'sync':'full'});
Fixes
rtcstats:reportwas duplicating instances in each call- remove
screensharehttps restriction
Breaking changes (internally)
- Deprecating
application.activeStream, now it's part ofapplication.activeStreams - Removed the restriction to allow calling
media.enable()while a stream is active
Version 4.0.0 - February 1, 2019
Breaking Changes
- rename SDK
stitchtoclient - listening for
media:stream:*now givesstreamIndexinstead ofindexfor consistency with the internal rtcObjects
* @event Member#media:stream:on
*
* @property {number} payload.streamIndex the index number of this stream
* @property {number} [payload.rtc_id] the rtc_id / leg_id
* @property {string} [payload.remote_member_id] the id of the Member the stream belongs to
* @property {string} [payload.name] the stream's display name
* @property {MediaStream} payload.stream the stream that is activated
* @property {boolean} [payload.video_mute] if the video is hidden
* @property {boolean} [payload.audio_mute] if the audio is muted
New
- Screen Share Source ID can now be specified when invoking
media.enable()