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 connections fails

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.createdThe call was createdAll call members
call.endedThe call was endedAll call members
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.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.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.session_endedA call session ended (all participants have left the call)Call watchers
call.session_participant_joinedA participant joined to the call sessionsCall 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.unblocked_userA user is unblockedCall watchers
call.updatedThe call was updatedCall watchers
customCustom eventAll 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);
  }
});