1- import { GetOrCreateCallRequest , QueryCallMembersRequest } from './gen/models' ;
1+ import { VideoApi } from './gen-imports' ;
2+ import {
3+ CallResponse ,
4+ GetOrCreateCallRequest ,
5+ QueryCallMembersRequest ,
6+ } from './gen/models' ;
27import { CallApi } from './gen/video/CallApi' ;
8+ import { StreamClient } from './StreamClient' ;
39import { OmitTypeId } from './types' ;
410
511export class StreamCall extends CallApi {
12+ data ?: CallResponse ;
13+
14+ constructor (
15+ videoApi : VideoApi ,
16+ readonly type : string ,
17+ readonly id : string ,
18+ private readonly streamClient : StreamClient ,
19+ ) {
20+ super ( videoApi , type , id ) ;
21+ }
22+
623 get cid ( ) {
724 return `${ this . type } :${ this . id } ` ;
825 }
@@ -16,4 +33,42 @@ export class StreamCall extends CallApi {
1633 ...( request ?? { } ) ,
1734 } ) ;
1835 } ;
36+
37+ getOrCreate = async ( request ?: GetOrCreateCallRequest ) => {
38+ const response = await super . getOrCreate ( request ) ;
39+ this . data = response . call ;
40+ return response ;
41+ } ;
42+
43+ get = async ( ) => {
44+ const response = await super . get ( ) ;
45+ this . data = response . call ;
46+ return response ;
47+ } ;
48+
49+ createSRTCredetials = (
50+ userID : string ,
51+ ) : {
52+ address : string ;
53+ } => {
54+ if ( ! this . data ) {
55+ throw new Error (
56+ 'Object is not initialized, call get() or getOrCreate() first' ,
57+ ) ;
58+ }
59+
60+ const token = this . streamClient . generatePermanentUserToken ( {
61+ user_id : userID ,
62+ } ) ;
63+ const segments = token . split ( '.' ) ;
64+ if ( segments . length !== 3 ) {
65+ throw new Error ( 'Invalid token format' ) ;
66+ }
67+
68+ return {
69+ address : this . data . ingress . srt . address
70+ . replace ( '{passphrase}' , segments [ 2 ] )
71+ . replace ( '{token}' , token ) ,
72+ } ;
73+ } ;
1974}
0 commit comments