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
- 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
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()