Skip to content

Commit

Permalink
Fix realtime-api get recordings/playbacks/streams (#657)
Browse files Browse the repository at this point in the history
* update video playground

* tests in realtime-api for getRecordings

* pass room_session_id down to the objects

* changeset
  • Loading branch information
Edoardo Gallo authored Sep 22, 2022
1 parent 8132100 commit 50f2e07
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 10 deletions.
5 changes: 5 additions & 0 deletions .changeset/lemon-wombats-invent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@signalwire/realtime-api': patch
---

Hotfix for getRecordings, getPlaybacks and getStreams return objects without room_session_id.
33 changes: 29 additions & 4 deletions internal/playground-realtime-api/src/basic/index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,40 @@
import { createClient } from '@signalwire/realtime-api'
import { Video } from '@signalwire/realtime-api'

async function run() {
try {
const client = await createClient({
const video = new Video.Client({
// @ts-expect-error
host: process.env.HOST || 'relay.swire.io',
host: process.env.HOST,
project: process.env.PROJECT as string,
token: process.env.TOKEN as string,
// debug: { logWsTraffic: true },
})

await client.connect()
video.on('room.started', async (roomSession) => {
console.log('Room started', roomSession.id)

roomSession.on('member.updated', async (member) => {
console.log(member)
})
})

video.on('room.ended', async (roomSession) => {
console.log('Room ended', roomSession.id)
})

const { roomSessions } = await video.getRoomSessions()

roomSessions.forEach(async (roomSession) => {
console.log('RoomSession:', roomSession.id)
const { recordings } = await roomSession.getRecordings()
console.log('Recordings', recordings.length)
recordings.forEach(async (rec) => {
console.log('REC', rec.id, rec.roomSessionId, rec.state, rec.startedAt)
if (rec.state === 'recording') {
await rec.stop()
}
})
})

console.log('Client Running..')
} catch (error) {
Expand Down
42 changes: 42 additions & 0 deletions packages/realtime-api/src/video/RoomSession.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,48 @@ describe('RoomSession Object', () => {
expect(roomSession.play).toBeDefined()
})

describe('getRecordings', () => {
it('should return an array of recordings', async () => {
const recordingList = [
{
id: '6dfd0d76-b68f-4eef-bdee-08100fe03f4e',
state: 'completed',
started_at: 1663858327.847,
duration: 6.04,
ended_at: 1663858334.343,
},
{
id: 'e69d456b-4191-4dbb-8618-28d477734d65',
state: 'recording',
started_at: 1663858425.548,
},
]

// @ts-expect-error
;(roomSession.execute as jest.Mock).mockResolvedValueOnce({
recordings: recordingList,
})

const { recordings } = await roomSession.getRecordings()
recordings.forEach((recording, index) => {
expect(recording.id).toEqual(recordingList[index].id)
expect(recording.roomSessionId).toEqual(roomSessionId)
expect(recording.state).toEqual(recordingList[index].state)
expect(recording.startedAt).toEqual(
new Date(recordingList[index].started_at! * 1000)
)
if (recordingList[index].ended_at) {
expect(recording.endedAt).toEqual(
new Date(recordingList[index].ended_at! * 1000)
)
}
expect(typeof recording.pause).toBe('function')
expect(typeof recording.resume).toBe('function')
expect(typeof recording.stop).toBe('function')
})
})
})

it('startRecording should return a recording object', async () => {
// @ts-expect-error
roomSession.execute = jest.fn().mockResolvedValue({
Expand Down
42 changes: 36 additions & 6 deletions packages/realtime-api/src/video/RoomSession.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,15 +158,30 @@ export class RoomSessionConsumer extends BaseConsumer<RealTimeRoomApiEvents> {
nestedFieldsToProcess: {
members: {
eventTransformType: 'roomSessionMember',
processInstancePayload: (payload) => ({ member: payload }),
processInstancePayload: (payload) => {
return {
room_session_id: this.getStateProperty('roomSessionId'),
member: payload,
}
},
},
recordings: {
eventTransformType: 'roomSessionRecording',
processInstancePayload: (payload) => ({ recording: payload }),
processInstancePayload: (payload) => {
return {
room_session_id: this.getStateProperty('roomSessionId'),
recording: payload,
}
},
},
streams: {
eventTransformType: 'roomSessionStream',
processInstancePayload: (payload) => ({ stream: payload }),
processInstancePayload: (payload) => {
return {
room_session_id: this.getStateProperty('roomSessionId'),
stream: payload,
}
},
},
},
getInstanceEventNamespace: (
Expand Down Expand Up @@ -194,7 +209,12 @@ export class RoomSessionConsumer extends BaseConsumer<RealTimeRoomApiEvents> {
nestedFieldsToProcess: {
recordings: {
eventTransformType: 'roomSessionRecording',
processInstancePayload: (payload) => ({ recording: payload }),
processInstancePayload: (payload) => {
return {
room_session_id: this.getStateProperty('roomSessionId'),
recording: payload,
}
},
},
},
},
Expand All @@ -212,7 +232,12 @@ export class RoomSessionConsumer extends BaseConsumer<RealTimeRoomApiEvents> {
nestedFieldsToProcess: {
playbacks: {
eventTransformType: 'roomSessionPlayback',
processInstancePayload: (payload) => ({ playback: payload }),
processInstancePayload: (payload) => {
return {
room_session_id: this.getStateProperty('roomSessionId'),
playback: payload,
}
},
},
},
},
Expand Down Expand Up @@ -365,7 +390,12 @@ export class RoomSessionConsumer extends BaseConsumer<RealTimeRoomApiEvents> {
nestedFieldsToProcess: {
streams: {
eventTransformType: 'roomSessionStream',
processInstancePayload: (payload) => ({ stream: payload }),
processInstancePayload: (payload) => {
return {
room_session_id: this.getStateProperty('roomSessionId'),
stream: payload,
}
},
},
},
},
Expand Down

0 comments on commit 50f2e07

Please sign in to comment.