Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/room-manager
2 changes: 1 addition & 1 deletion packages/js-server-sdk
2 changes: 1 addition & 1 deletion packages/web-client-sdk
Submodule web-client-sdk updated 46 files
+1 −1 .github/workflows/tests.yaml
+2 −0 e2e-tests/livestream-client/config.ts
+4 −1 e2e-tests/livestream-client/src/App.tsx
+6 −0 e2e-tests/react-client/config.ts
+4 −3 e2e-tests/react-client/scenarios/utils.ts
+14 −1 e2e-tests/webrtc-client/config.ts
+2 −2 e2e-tests/webrtc-client/scenarios/utils.ts
+2 −1 examples/mobile-client/fishjam-chat/.env.example
+6 −2 examples/mobile-client/fishjam-chat/README.md
+4 −2 examples/mobile-client/fishjam-chat/app/livestream/screen-sharing.tsx
+4 −2 examples/mobile-client/fishjam-chat/app/livestream/streamer.tsx
+4 −2 examples/mobile-client/fishjam-chat/app/livestream/viewer.tsx
+4 −2 examples/mobile-client/fishjam-chat/app/room/preview.tsx
+1 −1 package.json
+3 −3 packages/mobile-client/package.json
+1 −1 packages/react-client/package.json
+8 −8 packages/react-client/src/FishjamProvider.tsx
+15 −0 packages/react-client/src/hooks/internal/useCurrentCallback.ts
+14 −16 packages/react-client/src/hooks/internal/useScreenshareManager.ts
+57 −65 packages/react-client/src/hooks/internal/useTrackManager.ts
+6 −2 packages/react-client/src/hooks/useDataChannel.ts
+9 −1 packages/react-client/src/hooks/useLocalVAD.ts
+13 −1 packages/react-client/src/hooks/usePeers.ts
+10 −10 packages/react-client/src/hooks/useSandbox.ts
+24 −39 packages/react-client/src/hooks/useVAD.ts
+67 −0 packages/react-client/src/tests/useCurrentCallback.spec.ts
+7 −0 packages/react-client/src/utils/errors.ts
+1 −1 packages/ts-client/package.json
+1 −1 packages/webrtc-client/package.json
+28 −3 packages/webrtc-client/src/ConnectionManager.ts
+29 −28 packages/webrtc-client/src/webRTCEndpoint.ts
+115 −0 packages/webrtc-client/tests/addTransceiversIfNeeded.test.ts
+27 −32 packages/webrtc-client/tests/events/connectedEvent.test.ts
+28 −26 packages/webrtc-client/tests/events/encodingSwitchedEvent.test.ts
+6 −6 packages/webrtc-client/tests/events/endpointAddedEvent.test.ts
+26 −27 packages/webrtc-client/tests/events/endpointRemovedEvent.test.ts
+9 −8 packages/webrtc-client/tests/events/endpointUpdatedEvent.test.ts
+128 −0 packages/webrtc-client/tests/events/serializedMediaEvents.test.ts
+64 −64 packages/webrtc-client/tests/events/trackAddedEvent.test.ts
+21 −22 packages/webrtc-client/tests/events/trackRemovedEvent.test.ts
+29 −31 packages/webrtc-client/tests/events/trackUpdatedEvent.test.ts
+23 −20 packages/webrtc-client/tests/events/vadNotificationEvent.test.ts
+13 −22 packages/webrtc-client/tests/methods/addTrackMethod.test.ts
+4 −4 packages/webrtc-client/tests/methods/getLocalTrackAudioLevelMethod.test.ts
+6 −8 packages/webrtc-client/tests/utils.ts
+6 −6 yarn.lock
18 changes: 18 additions & 0 deletions static/api/protobuf/server_notifications.proto
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,21 @@ message ServerMessage {
string streamer_id = 2;
}

// Carries multiple notifications in a single wire frame.
//
// Constraints (documented, not schema-enforced):
// - Each element's `content` MUST be a notification variant — never
// Authenticated, AuthRequest, SubscribeRequest, or SubscribeResponse.
// - NotificationBatch MUST NOT be nested inside another NotificationBatch.
// The schema technically permits this, but senders must not emit
// recursive batches and receivers may treat them as a protocol violation.
// - Notifications are delivered in array order; consumers must process
// them in order.
// - Sent only for webhooks, for peers that .
message NotificationBatch {
repeated ServerMessage notifications = 1;
}

reserved 12;

oneof content {
Expand Down Expand Up @@ -273,6 +288,9 @@ message ServerMessage {
StreamerConnected streamer_connected = 26;
StreamerDisconnected streamer_disconnected = 27;

// Batch
NotificationBatch notification_batch = 33;

// Deprecated

StreamConnected stream_connected = 22 [deprecated = true];
Expand Down
6 changes: 6 additions & 0 deletions versioned_docs/version-0.27.0/_common/agents/definition.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## What is an Agent?

An agent is a piece of software that allows your backend server to participate in a Fishjam room, similar to how the Fishjam client SDKs allow your client-side application to participate in a Fishjam room.
They can be used to implement features such as real-time audio transcription, real-time content moderation, conversations with AI agents and more.

You can simply think of an agent as a peer running within your backend application.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
:::danger Remember to disconnect your agents!
It's important to disconnect agents, because **every connected agent generates usage** just as a normal peer.
:::
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
By default, agents **won't** receive peers' audio streams.
This is by design and aims to prevent unnecessary resource usage by the agents.

For an agent to start receiving a peer's audio, the peer must be **created** with the **subscribe** option set.
12 changes: 12 additions & 0 deletions versioned_docs/version-0.27.0/api/_category_.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"label": "API",
"position": 7,
"link": {
"type": "generated-index",
"description": "API documentation for Client and Server SDKs.",
"slug": "/api"
},
"customProps": {
"id": "generated-api"
}
}
43 changes: 43 additions & 0 deletions versioned_docs/version-0.27.0/api/mobile/enumerations/Variant.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Enumeration: Variant

Defined in: packages/ts-client/dist/index.d.mts:51

## Enumeration Members

### UNRECOGNIZED

> **UNRECOGNIZED**: `-1`

Defined in: packages/ts-client/dist/index.d.mts:56

***

### VARIANT\_HIGH

> **VARIANT\_HIGH**: `3`

Defined in: packages/ts-client/dist/index.d.mts:55

***

### VARIANT\_LOW

> **VARIANT\_LOW**: `1`

Defined in: packages/ts-client/dist/index.d.mts:53

***

### VARIANT\_MEDIUM

> **VARIANT\_MEDIUM**: `2`

Defined in: packages/ts-client/dist/index.d.mts:54

***

### VARIANT\_UNSPECIFIED

> **VARIANT\_UNSPECIFIED**: `0`

Defined in: packages/ts-client/dist/index.d.mts:52
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Function: FishjamProvider()

> **FishjamProvider**(`props`): `FunctionComponentElement`\<`FishjamProviderProps`\>

Defined in: [packages/mobile-client/src/index.ts:118](https://github.com/fishjam-cloud/web-client-sdk/blob/30f99e0d93a92f6cdd572bab746cc8ce0c853a22/packages/mobile-client/src/index.ts#L118)

## Parameters

| Parameter | Type |
| ------ | ------ |
| `props` | [`FishjamProviderProps`](../type-aliases/FishjamProviderProps.md) |

## Returns

`FunctionComponentElement`\<`FishjamProviderProps`\>
15 changes: 15 additions & 0 deletions versioned_docs/version-0.27.0/api/mobile/functions/RTCPIPView.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Function: RTCPIPView()

> **RTCPIPView**(`__namedParameters`): `Element`

Defined in: [packages/mobile-client/src/overrides/RTCView.tsx:31](https://github.com/fishjam-cloud/web-client-sdk/blob/30f99e0d93a92f6cdd572bab746cc8ce0c853a22/packages/mobile-client/src/overrides/RTCView.tsx#L31)

## Parameters

| Parameter | Type |
| ------ | ------ |
| `__namedParameters` | [`RTCPIPViewProps`](../type-aliases/RTCPIPViewProps.md) |

## Returns

`Element`
15 changes: 15 additions & 0 deletions versioned_docs/version-0.27.0/api/mobile/functions/RTCView.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Function: RTCView()

> **RTCView**(`__namedParameters`): `Element`

Defined in: [packages/mobile-client/src/overrides/RTCView.tsx:26](https://github.com/fishjam-cloud/web-client-sdk/blob/30f99e0d93a92f6cdd572bab746cc8ce0c853a22/packages/mobile-client/src/overrides/RTCView.tsx#L26)

## Parameters

| Parameter | Type |
| ------ | ------ |
| `__namedParameters` | [`RTCVideoViewProps`](../type-aliases/RTCVideoViewProps.md) |

## Returns

`Element`
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Function: useCallKit()

> **useCallKit**(): `object`

Defined in: [packages/mobile-client/src/overrides/hooks.ts:100](https://github.com/fishjam-cloud/web-client-sdk/blob/30f99e0d93a92f6cdd572bab746cc8ce0c853a22/packages/mobile-client/src/overrides/hooks.ts#L100)

## Returns

`object`
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Function: useCallKitEvent()

> **useCallKitEvent**\<`T`\>(`action`, `callback`): `void`

Defined in: [packages/mobile-client/src/overrides/hooks.ts:109](https://github.com/fishjam-cloud/web-client-sdk/blob/30f99e0d93a92f6cdd572bab746cc8ce0c853a22/packages/mobile-client/src/overrides/hooks.ts#L109)

## Type Parameters

| Type Parameter |
| ------ |
| `T` *extends* keyof `CallKitAction` |

## Parameters

| Parameter | Type |
| ------ | ------ |
| `action` | `T` |
| `callback` | (`event`) => `void` |

## Returns

`void`
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Function: useCallKitService()

> **useCallKitService**(`config`): `void`

Defined in: [packages/mobile-client/src/overrides/hooks.ts:105](https://github.com/fishjam-cloud/web-client-sdk/blob/30f99e0d93a92f6cdd572bab746cc8ce0c853a22/packages/mobile-client/src/overrides/hooks.ts#L105)

## Parameters

| Parameter | Type |
| ------ | ------ |
| `config` | `CallKitConfig` |

## Returns

`void`
118 changes: 118 additions & 0 deletions versioned_docs/version-0.27.0/api/mobile/functions/useCamera.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# Function: useCamera()

> **useCamera**(): `object`

Defined in: [packages/mobile-client/src/overrides/hooks.ts:28](https://github.com/fishjam-cloud/web-client-sdk/blob/30f99e0d93a92f6cdd572bab746cc8ce0c853a22/packages/mobile-client/src/overrides/hooks.ts#L28)

## Returns

### ~~activeCamera~~

> **activeCamera**: `null` \| [`DeviceItem`](../type-aliases/DeviceItem.md)

#### Deprecated

Use `currentCamera` and `isCameraOn` instead
Indicates which camera is now turned on and streaming

### cameraDeviceError

> **cameraDeviceError**: `null` \| [`DeviceError`](../type-aliases/DeviceError.md)

Possible error thrown while setting up the camera

### cameraDevices

> **cameraDevices**: [`DeviceItem`](../type-aliases/DeviceItem.md)[]

List of available camera devices

### cameraStream

> **cameraStream**: `null` \| `MediaStream`

### currentCamera

> **currentCamera**: `null` \| `MediaDeviceInfo`

Indicates which camera is now selected

### currentCameraMiddleware

> **currentCameraMiddleware**: [`TrackMiddleware`](../type-aliases/TrackMiddleware.md)

The currently set camera middleware function

### isCameraOn

> **isCameraOn**: `boolean`

Indicates whether the camera is streaming video

### selectCamera()

> **selectCamera**: (`deviceId`) => `Promise`\<`undefined` \| [`DeviceError`](../type-aliases/DeviceError.md)\>

Selects the camera device

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `deviceId` | `string` |

#### Returns

`Promise`\<`undefined` \| [`DeviceError`](../type-aliases/DeviceError.md)\>

### setCameraTrackMiddleware()

> **setCameraTrackMiddleware**: (`middleware`) => `Promise`\<`void`\>

Sets the camera middleware

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `middleware` | [`TrackMiddleware`](../type-aliases/TrackMiddleware.md) |

#### Returns

`Promise`\<`void`\>

### startCamera()

> **startCamera**: (`deviceId?`) => `Promise`\<\[`MediaStreamTrack`, `null`\] \| \[`null`, [`DeviceError`](../type-aliases/DeviceError.md)\]\>

Starts the camera

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `deviceId?` | `null` \| `string` |

#### Returns

`Promise`\<\[`MediaStreamTrack`, `null`\] \| \[`null`, [`DeviceError`](../type-aliases/DeviceError.md)\]\>

### stopCamera()

> **stopCamera**: () => `void`

Stops the camera

#### Returns

`void`

### toggleCamera()

> **toggleCamera**: () => `Promise`\<`undefined` \| [`DeviceError`](../type-aliases/DeviceError.md)\>

Toggles current camera on/off

#### Returns

`Promise`\<`undefined` \| [`DeviceError`](../type-aliases/DeviceError.md)\>
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Function: useCameraPermissions()

> **useCameraPermissions**(): \[() => `Promise`\<[`PermissionStatus`](../type-aliases/PermissionStatus.md)\>, () => `Promise`\<[`PermissionStatus`](../type-aliases/PermissionStatus.md)\>\]

Defined in: [packages/mobile-client/src/hooks/usePermissions.ts:47](https://github.com/fishjam-cloud/web-client-sdk/blob/30f99e0d93a92f6cdd572bab746cc8ce0c853a22/packages/mobile-client/src/hooks/usePermissions.ts#L47)

Hook for querying and requesting camera permission on the device.

## Returns

\[() => `Promise`\<[`PermissionStatus`](../type-aliases/PermissionStatus.md)\>, () => `Promise`\<[`PermissionStatus`](../type-aliases/PermissionStatus.md)\>\]

A tuple of `[query, request]`:
- `query` – checks the current camera permission status without prompting the user.
- `request` – triggers the native permission dialog and returns the resulting status.

## Example

```tsx
import { useCameraPermissions } from "@fishjam-cloud/react-native-client";
// ---cut---
const [queryCameraPermission, requestCameraPermission] = useCameraPermissions();

const status = await queryCameraPermission();
if (status !== 'granted') {
await requestCameraPermission();
}
```
Loading
Loading