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 networkRequest data 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 ephemeral event
// send ephemeral event
conversation
  .sendEphemeralEvent({ state: "INVITED" })
  .then((event) => {
    console.log(event)
  });

Version 9.3.1 - August 30, 2023

Fixes

  • Fix NexmoAPI error wrapping for v0.3 Conversation API endpoints

Release Notes

Version 9.3.1 - June 19, 2023

Fixes

  • Fix NexmoAPI error wrapping for v0.3 Conversation API endpoints

Version 9.3.0 - June 01, 2023

New

  • Add state to query param for application.getConversations() for the ConversationsPage object
// iterate through conversations
application
  .getConversations({ state: "INVITED" })
  .then((conversations_page) => {
    conversations_page.items.forEach(conversation => {
      render(conversation);
    })
  });

Fixes

  • Fix type definition for Conversation timestamp to object
  • Default socket.io query session_version to 0.0.1 unless enableInboundOffer flag set to true, then default to 0.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 enableEventsQueue and enableInboundOffer
  • Add acknowledgeEvents flag in the configuration to allow tracking of websocket event acknowledgement

Version 9.2.4 - April 19, 2023

Fixes

  • Emitting reconnecting socket event on reconnection attempt

Version 9.2.3 - March 30, 2023

Changes

  • Upgrade socket.io-client version to 4.6.1

Version 9.2.2 - March 13, 2023

Fixes

  • Fix ConversationEventsProcessor being initiated multiple times for the same conversation

Version 9.2.0 - December 21, 2022

Changes

  • Add enableInboundOffer flag to config for inbound call setup
  • Remove Ice Servers default from webrtc STUN server setup
  • Replace api.nexmo URLs to api.vonage URLs

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 v2 of 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 ice gathering process as soon as member is invited to a call)

Fix

  • Remove public-ip library because of a security vulnerability (updated with is-ip)

Version 9.0.0 - June 30, 2022

Breaking changes

  • Rename login() function to createSession()
rtc.createSession(token).then((application) => {
  console.log(application);
}).catch((error) => {
  console.log(error);
});
  • Rename logout() function to deleteSession()
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 field dcListCallback which 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() and delivered() 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:seen
    • message:delivered
    • message:submitted
    • message:rejected
    • message: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_by
    • delivered_to
    • submitted_to
    • rejected_by
    • undeliverable_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 lite to none

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 new message to the conversation (supported types are text, image, audio, video and file)
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 MessageEvent type of event
conversation.on("message", (member, messageEvent) => {
  console.log(messageEvent);
});

Changes

  • Deprecate sendText() function (use sendMessage() with a type of text instead)
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 (use uploadImage() and sendMessage() with a type of image instead)
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 mediaParams parameter in reconnectCall function, in order to modify the MediaStream object
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 NXMCall status when reconnecting to a call (STARTED, RINGING or ANSWERED)

Changes

  • Update npm dependencies

Version 8.1.0 - September 02, 2021

New

  • Add reconnectCall function 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 reconnectRtcId to media enable() 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_data object in callServer function
application.callServer("<phone_number>", "phone", { field1: "test" }).then((nxmCall) => {
  console.log(nxmCall);
}).catch((error) => {
  console.error(error);
});
  • Add apiKey, applicationId, conversationId and conversationName when available in rtcstats analytics reports

Fixes

  • Fix bug in call transfer where transferred_from was undefined

Version 8.0.5 - July 15, 2021

Fixes

  • Fix the from for member events
  • Update npm dependencies including socket-io

Version 8.0.4 - June 16, 2021

Fixes

  • Fix bug on DTMF dispatch of callback to event_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.members Map)

Version 8.0.0 - April 27, 2021

Breaking changes

  • Deprecate Conversation.members Map (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 by member_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:report is deprecated. Please use rtcstats: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 getStats parser
  • Remove callstats library 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

  • legs endpoint should be included in acl paths on JWT token creation
"acl": {
  "paths": {
    ...
    "/*/legs/**": {}
  }
}

Changes

  • Improve callServer setup time by pre-warming leg
  • Add the rtcObject and remote stream to the NxmCall object

Fixes

  • Return ClientDisconnected reason 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 enableEventsQueue flag to client configuration (default to true)
  • Add internal eventsQueue mechanism to guarantee order of events received during a session

Version 6.0.19 - November 26, 2020

Changes

  • Update reconnectionDelay to 2000 in socket.io
  • Add randomizationFactor to 0.55 in socket.io

Version 6.0.18 - November 19, 2020

Changes

  • Update documentation

Fixes

  • Add reconnectionDelay to 3000 and reconnectionDelayMax to 15000 in socket.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-token event in application level
  application.on('system:error:expired-token', 'NXM-errors', () => {
    console.log('Token Expired');
  });
  • Handle uncaught exception of conversation:error:invalid-member-state event

Version 6.0.15 - September 21, 2020

Fixes

  • Set SDK default to single preset ICE candidate
  • Remove iceGatherOnlyOneCandidate flag 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 iceGatherOnlyOneCandidate SDP offer

Version 6.0.9 - March 24, 2020

Fixes

  • Fix handler of rtc:transfer event to refresh conversation

Version 6.0.8 - February 28, 2020

Fixes

  • Fix duplicated webrtc offer sent during IP calling
  • Fix Safari WebRTC dependency

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 iceGatherOnlyOneCandidate configuration option and use to define path in ICE gathering process

Version 6.0.5 - November 19, 2019

Fixes

  • Update styling of JSDocs to Docstrap template
  • Change RTCPeerConnection ICE candidates gathering process to send the Session Description Protocol (SDP) offer on first ICE candidate 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 empty user_id or user_name fields 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, or error.
new NexmoClient({
  debug: 'info'
})
  • Moved storage of JWT token from localStorage to NexmoClient configuration 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 conversations in login, when sync is lite or full

Version 6.0.0 - September 13, 2019

Breaking Changes

  • Change return value of application.getConversations() to new ConversationsPage object
// 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 new EventsPage object
// iterate through events
conversation
  .getEvents({ event_type: `member:*` })
  .then((events_page) => {
    events_page.items.forEach(event => {
      render(event);
    })
  });
  • Rename method application.callPhone to application.callServer
  • Rename method application.call to application.inAppCall
  • Rename method call.createPhoneCall to call.createServerCall
  • Rename class Call to NXMCall
  • Rename class ConversationClient to NexmoClient
  • Rename class ConversationClientError to NexmoClientError
  • Rename files conversationClient.js and conversationClient.min.js to nexmoClient.js and nexmoClient.min.js
  • Deprecate member:call:state event (use instead member: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 PageConfig class for configuring settings for paginated requests
  • Add new Page class 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 example event_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 ConversationsPage and EventsPage which extend Page class to wrap results of paginated requests for conversations and events
  • Add getNext() and getPrev() methods to ConversationsPage and EventsPage objects to fetch previous and next pages of conversations and events
  • Add conversations_page_last parameter to application object and events_page_last parameter to conversation object 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 callServer function
// 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 reason object to receive reason.reason_text and reason.reason_code fields

Internal changes

  • Rename Event class to NXMEvent
  • Update CAPI requests to REST calls for these events
    • event:delivered
    • text:delivered
    • image:delivered
    • event:seen
    • text:seen
    • image:seen
    • conversation:events
    • audio:play
    • conversation:delete
    • conversation:invite
    • text
    • text:typing:on
    • text:typing:off
    • new:conversation
    • conversation:get
    • user:conversations
    • user:get
    • conversation:join
    • audio:say
    • audio:earmuff:on
    • audio:earmuff:off
    • audio:dtmf
    • audio:record
    • audio:play
    • conversation:member:delete
    • event:delete
    • audio:ringing:start
    • audio:ringing:stop
    • audio:mute:on
    • audio:mute:off
    • image
    • rtc:new
    • rtc:answer
    • rtc:terminate
    • knocking:new
    • knocking: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:call is not being emitted if media.audio_settings.enabled is false or doesn't exist.

New

  • Set member.callStatus to started when initializing an IP - IP call.
  • Set member.callStatus to ringing when enabling the ringing with media.startRinging().

Internal changes

  • Move stream cleanup from member:left to rtc:hangup in Media module.

Version 5.2.1 - June 12, 2019

New

  • Add the new nexmoGetRequest utility 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 reason for member:delete, conversation.leave, member.kick, call.hangup and call.reject.
  • Listen for the member:left event with reason:
//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 callStatus field in the Member object, defining the status of a call.
  • Emit member:call:status event each time the member.callStatus changes:
conversation.on("member:call:status", (member) => {
   console.log(member.callStatus);
});

Version 5.2.0 - May 30, 2019

New

  • Add the call instance in application.calls map in createCall() function (IP -IP call)

  • Update caller parameter in call object in a PSTN - IP call from unknown to channel.from.number or channel.from.uri if exists

  • Emit the new leg:status:update event 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.legs field 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.audio to media.audio_settings in inviteWithAudio function

Version 5.0.3 - May 23, 2019

Changes

  • Change default behavior of autoPlayAudio in media.enable() from false to true
  • Pass an autoPlayAudio parameter to call.createCall() and call.answer() functions (default is true)

Version 5.0.2 - May 30, 2019

New

  • Delete the image files before sending the image:delete request
  • 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.conversations type from Object to Map

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 the localStream from getUserMedia

Changes

  • Rename localStream to stream in media.rtcObjects object.

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) in rtc_helper.js to 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 onicecandidate event handler
  • Change the format of member:media event 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:invited event 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 events
    • lite: 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:report was duplicating instances in each call
  • remove screenshare https restriction

Breaking changes (internally)

  • Deprecating application.activeStream, now it's part of application.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 stitch to client
  • listening for media:stream:* now gives streamIndex instead of index for 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()