Events

Use the reactive state store for most state change notifications. Subscribe to WebSocket events for advanced use cases.

Best Practices

  • Prefer state hooks - Use reactive state store for most use cases
  • Unsubscribe properly - Always call the returned unsubscribe function
  • Watch calls for events - Call events require watching via queryCalls, join, or get/getOrCreate
  • Limit custom event size - Maximum 5KB payload for custom events

List of events

Client events

Client events are always delivered if a user is connected to the client using the connectUser method.

The list of client events:

NameDescription
connection.okFired when the authentication process finished successfully
connection.errorFired when the WS connection fails
health.checkFired periodically as a heartbeat to keep the connection alive
user.updatedFired when the connected user's data is updated

Call events

Call events are delivered only to clients watching the call. Three ways to watch:

  1. Call the queryCalls method with the watch option set to true:
import { StreamVideoClient } from '@stream-io/video-react-native-sdk';

let client: StreamVideoClient;

client.queryCalls({
    ...
    watch: true
});
  1. Join a call:
import { StreamVideoClient } from "@stream-io/video-react-native-sdk";

let client: StreamVideoClient;

client.call("default", "test-call").join();
  1. Watch a call:
import { StreamVideoClient } from "@stream-io/video-react-native-sdk";

let client: StreamVideoClient;

client.call("default", "test-call").getOrCreate();
// or
client.call("default", "test-call").get();

The list of call events:

NameDescriptionDelivered to
call.acceptedA user accepts a notification to join a callAll call members
call.blocked_userA user is blocked from the callCall watchers
call.closed_captionA new closed caption is availableCall watchers
call.closed_captions_failedClosed captions failed to start or runCall watchers
call.closed_captions_startedClosed captions were startedCall watchers
call.closed_captions_stoppedClosed captions were stoppedCall watchers
call.createdThe call was createdAll call members
call.deletedThe call was deletedAll call members
call.endedThe call was endedAll call members
call.frame_recording_failedA frame recording (screenshot capture) failedCall watchers
call.frame_recording_readyA frame recording is readyCall watchers
call.frame_recording_startedA frame recording was startedCall watchers
call.frame_recording_stoppedA frame recording was stoppedCall watchers
call.hls_broadcasting_failedThe call failed to broadcastCall watchers
call.hls_broadcasting_startedThe call started to broadcastCall watchers
call.hls_broadcasting_stoppedThe call stopped broadcastingCall watchers
call.kicked_userA user was kicked from the callCall watchers
call.live_startedThe call left backstage modeCall watchers
call.member_addedOne or more members were added to the callAll call members
call.member_removedOne or more members were removed from the callAll call members
call.member_updatedOne or more members were updatedAll call members
call.member_updated_permissionOne or more members' role was updatedAll call members
call.missedA ringing call was missed by the userAll call members
call.moderation_blurA moderation blur action was appliedCall watchers
call.moderation_warningA moderation warning was issuedCall watchers
call.notificationA user is calling all call membersAll call members
call.permission_requestA user is requesting permissionsCall watchers
call.permissions_updatedA member's permissions were updatedCall watchers
call.reaction_newA new reaction was sentCall watchers
call.recording_failedA recording failedCall watchers
call.recording_readyA recording is readyCall watchers
call.recording_startedA recording has been startedCall watchers
call.recording_stoppedThe recording was stoppedCall watchers
call.rejectedA user declined to join the callAll call members
call.ringA user is calling all call membersAll call members
call.rtmp_broadcast_failedAn RTMP broadcast failedCall watchers
call.rtmp_broadcast_startedAn RTMP broadcast was startedCall watchers
call.rtmp_broadcast_stoppedAn RTMP broadcast was stoppedCall watchers
call.session_endedA call session ended (all participants have left the call)Call watchers
call.session_participant_count_updatedThe participant counts for the session were updatedCall watchers
call.session_participant_joinedA participant joined the call sessionCall watchers
call.session_participant_leftA participant left a call sessionCall watchers
call.session_startedA call session started (the first participant joined the call)Call watchers
call.stats_report_readyA call stats report is readyCall watchers
call.transcription_failedA transcription failed to start or runCall watchers
call.transcription_readyA transcription is readyCall watchers
call.transcription_startedA transcription was startedCall watchers
call.transcription_stoppedA transcription was stoppedCall watchers
call.unblocked_userA user is unblockedCall watchers
call.updatedThe call was updatedCall watchers
call.user_feedback_submittedA user submitted call feedbackCall watchers
call.user_mutedA user was muted by another userCall watchers
customA custom event sent via sendCustomEventAll call members

Listening to client and call events

Use on method on StreamVideoClient to subscribe to events. Pass event type or 'all' for all events. Returns an unsubscribe function.

Event handler receives StreamVideoEvent with type attribute.

Subscribe to all events:

import { StreamVideoClient } from "@stream-io/video-react-native-sdk";

let client: StreamVideoClient;

// Subscribe to all events
const unsubscribe = client.on("all", (event: StreamVideoEvent) => {
  console.log(event);
});

// Unsubscribe
unsubscribe();

Subscribing to call.created events:

import { StreamVideoClient } from "@stream-io/video-react-native-sdk";

let client: StreamVideoClient;

// Subscribe to all events
const unsubscribe = client.on("call.created", (event: StreamVideoEvent) => {
  if (event.type === "call.created") {
    console.log(`Call created: ${event.call_cid}`);
  }
});

// Unsubscribe
unsubscribe();

Listening to call events

Use on method on Call instance for call-specific events. Event handler receives StreamCallEvent. Returns an unsubscribe function.

Subscribe to call.reaction_new event:

import { Call } from "@stream-io/video-react-native-sdk";

let call: Call;

// Subscribe to new reactions event
const unsubscribe = call.on("call.reaction_new", (event: StreamVideoEvent) => {
  if (event.type === "call.reaction_new") {
    console.log(`New reaction: ${event.reaction}`);
  }
});

// Unsubscribe
unsubscribe();

Custom events

Send custom events using sendCustomEvent (5KB payload limit):

import {
  Call,
  CustomVideoEvent,
  StreamVideoEvent,
} from "@stream-io/video-react-native-sdk";

let call: Call;

// sending a custom event
await call.sendCustomEvent({
  type: "my-event-type",
  payload: {
    foo: "bar",
  },
});

// listening to or receiving a custom event
call.on("custom", (event: StreamVideoEvent) => {
  const customEvent = event as CustomVideoEvent;
  const payload = customEvent.custom;
  if (payload.type === "my-event-type") {
    console.log(payload.foo);
  }
});