@stream-io/node-sdk 0.4.12 → 0.4.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { ApiConfig, RequestMetadata } from './types';
2
2
  export declare class BaseApi {
3
- private readonly apiConfig;
3
+ protected readonly apiConfig: ApiConfig;
4
4
  constructor(apiConfig: ApiConfig);
5
5
  protected sendRequest: <T>(method: string, url: string, pathParams?: Record<string, string>, queryParams?: Record<string, any>, body?: any) => Promise<{
6
6
  body: T;
@@ -1,5 +1,18 @@
1
1
  import { VideoApi } from './gen/video/VideoApi';
2
2
  import { StreamCall } from './StreamCall';
3
+ import type { StreamClient } from './StreamClient';
4
+ import type { ApiConfig } from './types';
5
+ import type { RealtimeClient } from '@stream-io/openai-realtime-api';
3
6
  export declare class StreamVideoClient extends VideoApi {
7
+ private readonly streamClient;
8
+ constructor({ streamClient, ...apiConfig }: ApiConfig & {
9
+ streamClient: StreamClient;
10
+ });
4
11
  call: (type: string, id: string) => StreamCall;
12
+ connectOpenAi: (options: {
13
+ call: StreamCall;
14
+ agentUserId: string;
15
+ openAiApiKey: string;
16
+ validityInSeconds: number;
17
+ }) => Promise<RealtimeClient>;
5
18
  }
@@ -107,6 +107,7 @@ export interface AppResponseFields {
107
107
  disable_auth_checks: boolean;
108
108
  disable_permissions_checks: boolean;
109
109
  enforce_unique_usernames: string;
110
+ guest_user_creation_disabled: boolean;
110
111
  image_moderation_enabled: boolean;
111
112
  moderation_enabled: boolean;
112
113
  moderation_multitenant_blocklist_enabled: boolean;
@@ -441,6 +442,38 @@ export interface CallEvent {
441
442
  component?: string;
442
443
  issue_tags?: string[];
443
444
  }
445
+ export interface CallFrameRecordingFailedEvent {
446
+ call_cid: string;
447
+ created_at: Date;
448
+ egress_id: string;
449
+ call: CallResponse;
450
+ type: string;
451
+ }
452
+ export interface CallFrameRecordingFrameReadyEvent {
453
+ call_cid: string;
454
+ captured_at: Date;
455
+ created_at: Date;
456
+ egress_id: string;
457
+ session_id: string;
458
+ track_type: string;
459
+ url: string;
460
+ users: Record<string, UserResponse>;
461
+ type: string;
462
+ }
463
+ export interface CallFrameRecordingStartedEvent {
464
+ call_cid: string;
465
+ created_at: Date;
466
+ egress_id: string;
467
+ call: CallResponse;
468
+ type: string;
469
+ }
470
+ export interface CallFrameRecordingStoppedEvent {
471
+ call_cid: string;
472
+ created_at: Date;
473
+ egress_id: string;
474
+ call: CallResponse;
475
+ type: string;
476
+ }
444
477
  export interface CallHLSBroadcastingFailedEvent {
445
478
  call_cid: string;
446
479
  created_at: Date;
@@ -686,6 +719,7 @@ export interface CallSettings {
686
719
  audio?: AudioSettings;
687
720
  backstage?: BackstageSettings;
688
721
  broadcasting?: BroadcastSettings;
722
+ frame_recording?: FrameRecordSettings;
689
723
  geofencing?: GeofenceSettings;
690
724
  limits?: LimitsSettings;
691
725
  recording?: RecordSettings;
@@ -700,6 +734,7 @@ export interface CallSettingsRequest {
700
734
  audio?: AudioSettingsRequest;
701
735
  backstage?: BackstageSettingsRequest;
702
736
  broadcasting?: BroadcastSettingsRequest;
737
+ frame_recording?: FrameRecordingSettingsRequest;
703
738
  geofencing?: GeofenceSettingsRequest;
704
739
  limits?: LimitsSettingsRequest;
705
740
  recording?: RecordSettingsRequest;
@@ -714,6 +749,7 @@ export interface CallSettingsResponse {
714
749
  audio: AudioSettingsResponse;
715
750
  backstage: BackstageSettingsResponse;
716
751
  broadcasting: BroadcastSettingsResponse;
752
+ frame_recording: FrameRecordingSettingsResponse;
717
753
  geofencing: GeofenceSettingsResponse;
718
754
  limits: LimitsSettingsResponse;
719
755
  recording: RecordSettingsResponse;
@@ -1105,6 +1141,7 @@ export declare const ChannelOwnCapability: {
1105
1141
  readonly SEND_POLL: "send-poll";
1106
1142
  readonly SEND_REACTION: "send-reaction";
1107
1143
  readonly SEND_REPLY: "send-reply";
1144
+ readonly SEND_RESTRICTED_VISIBILITY_MESSAGE: "send-restricted-visibility-message";
1108
1145
  readonly SEND_TYPING_EVENTS: "send-typing-events";
1109
1146
  readonly SET_CHANNEL_COOLDOWN: "set-channel-cooldown";
1110
1147
  readonly SKIP_SLOW_MODE: "skip-slow-mode";
@@ -1335,8 +1372,8 @@ export interface CollectUserFeedbackRequest {
1335
1372
  rating: number;
1336
1373
  sdk: string;
1337
1374
  sdk_version: string;
1338
- user_session_id: string;
1339
1375
  reason?: string;
1376
+ user_session_id?: string;
1340
1377
  custom?: Record<string, any>;
1341
1378
  }
1342
1379
  export interface CollectUserFeedbackResponse {
@@ -1782,6 +1819,7 @@ export interface EgressRTMPResponse {
1782
1819
  export interface EgressResponse {
1783
1820
  broadcasting: boolean;
1784
1821
  rtmps: EgressRTMPResponse[];
1822
+ frame_recording?: FrameRecordingResponse;
1785
1823
  hls?: EgressHLSResponse;
1786
1824
  }
1787
1825
  export interface EndCallRequest {
@@ -2049,6 +2087,24 @@ export interface FlagUpdatedEvent {
2049
2087
  message?: MessageResponse;
2050
2088
  user?: UserResponse;
2051
2089
  }
2090
+ export interface FrameRecordSettings {
2091
+ capture_interval_in_seconds: number;
2092
+ mode: 'available' | 'disabled' | 'auto-on';
2093
+ quality?: string;
2094
+ }
2095
+ export interface FrameRecordingResponse {
2096
+ status: string;
2097
+ }
2098
+ export interface FrameRecordingSettingsRequest {
2099
+ capture_interval_in_seconds: number;
2100
+ mode: 'available' | 'disabled' | 'auto-on';
2101
+ quality?: '360p' | '480p' | '720p' | '1080p' | '1440p';
2102
+ }
2103
+ export interface FrameRecordingSettingsResponse {
2104
+ capture_interval_in_seconds: number;
2105
+ mode: 'available' | 'disabled' | 'auto-on';
2106
+ quality?: string;
2107
+ }
2052
2108
  export interface FullUserResponse {
2053
2109
  banned: boolean;
2054
2110
  created_at: Date;
@@ -2238,6 +2294,14 @@ export interface GetMessageResponse {
2238
2294
  message: MessageWithChannelResponse;
2239
2295
  pending_message_metadata?: Record<string, string>;
2240
2296
  }
2297
+ export interface GetModerationAnalyticsRequest {
2298
+ end_date?: string;
2299
+ start_date?: string;
2300
+ }
2301
+ export interface GetModerationAnalyticsResponse {
2302
+ duration: string;
2303
+ analytics?: ModerationAnalytics;
2304
+ }
2241
2305
  export interface GetOGResponse {
2242
2306
  duration: string;
2243
2307
  custom: Record<string, any>;
@@ -2618,6 +2682,7 @@ export interface Message {
2618
2682
  latest_reactions: Reaction[];
2619
2683
  mentioned_users: User[];
2620
2684
  own_reactions: Reaction[];
2685
+ restricted_visibility: string[];
2621
2686
  custom: Record<string, any>;
2622
2687
  reaction_counts: Record<string, number>;
2623
2688
  reaction_groups: Record<string, ReactionGroupResponse>;
@@ -2760,6 +2825,7 @@ export interface MessageRequest {
2760
2825
  user_id?: string;
2761
2826
  attachments?: Attachment[];
2762
2827
  mentioned_users?: string[];
2828
+ restricted_visibility?: string[];
2763
2829
  custom?: Record<string, any>;
2764
2830
  user?: UserRequest;
2765
2831
  }
@@ -2780,6 +2846,7 @@ export interface MessageResponse {
2780
2846
  latest_reactions: ReactionResponse[];
2781
2847
  mentioned_users: UserResponse[];
2782
2848
  own_reactions: ReactionResponse[];
2849
+ restricted_visibility: string[];
2783
2850
  custom: Record<string, any>;
2784
2851
  reaction_counts: Record<string, number>;
2785
2852
  reaction_scores: Record<string, number>;
@@ -2854,6 +2921,7 @@ export interface MessageWithChannelResponse {
2854
2921
  latest_reactions: ReactionResponse[];
2855
2922
  mentioned_users: UserResponse[];
2856
2923
  own_reactions: ReactionResponse[];
2924
+ restricted_visibility: string[];
2857
2925
  channel: ChannelResponse;
2858
2926
  custom: Record<string, any>;
2859
2927
  reaction_counts: Record<string, number>;
@@ -2886,6 +2954,22 @@ export interface ModerationActionConfig {
2886
2954
  order: number;
2887
2955
  custom: Record<string, any>;
2888
2956
  }
2957
+ export interface ModerationAnalytics {
2958
+ total_items_moderated: number;
2959
+ ai_image_harms: Array<Record<string, any>>;
2960
+ ai_text_harms: Array<Record<string, any>>;
2961
+ ai_video_harms: Array<Record<string, any>>;
2962
+ blocklist_by_list: Array<Record<string, any>>;
2963
+ blocklist_matches: Array<Record<string, any>>;
2964
+ model_accuracy: Array<Record<string, any>>;
2965
+ moderator_actions: Array<Record<string, any>>;
2966
+ moderator_productivity: Array<Record<string, any>>;
2967
+ semantic_filter_top_matches: Array<Record<string, any>>;
2968
+ sla_metrics: Array<Record<string, any>>;
2969
+ usage_metrics: Array<Record<string, any>>;
2970
+ action_distribution_over_time: Record<string, Record<string, any>>;
2971
+ detection_by_engine_over_time: Record<string, Record<string, any>>;
2972
+ }
2889
2973
  export interface ModerationCustomActionEvent {
2890
2974
  created_at: Date;
2891
2975
  type: string;
@@ -3053,10 +3137,12 @@ export declare const OwnCapability: {
3053
3137
  readonly SEND_VIDEO: "send-video";
3054
3138
  readonly START_BROADCAST_CALL: "start-broadcast-call";
3055
3139
  readonly START_CLOSED_CAPTIONS_CALL: "start-closed-captions-call";
3140
+ readonly START_FRAME_RECORD_CALL: "start-frame-record-call";
3056
3141
  readonly START_RECORD_CALL: "start-record-call";
3057
3142
  readonly START_TRANSCRIPTION_CALL: "start-transcription-call";
3058
3143
  readonly STOP_BROADCAST_CALL: "stop-broadcast-call";
3059
3144
  readonly STOP_CLOSED_CAPTIONS_CALL: "stop-closed-captions-call";
3145
+ readonly STOP_FRAME_RECORD_CALL: "stop-frame-record-call";
3060
3146
  readonly STOP_RECORD_CALL: "stop-record-call";
3061
3147
  readonly STOP_TRANSCRIPTION_CALL: "stop-transcription-call";
3062
3148
  readonly UPDATE_CALL: "update-call";
@@ -3940,6 +4026,7 @@ export interface ReviewQueueItemResponse {
3940
4026
  completed_at?: Date;
3941
4027
  entity_creator_id?: string;
3942
4028
  reviewed_at?: Date;
4029
+ teams?: string[];
3943
4030
  assigned_to?: UserResponse;
3944
4031
  entity_creator?: EntityCreatorResponse;
3945
4032
  feeds_v2_activity?: EnrichedActivity;
@@ -4037,6 +4124,7 @@ export interface SearchResultMessage {
4037
4124
  latest_reactions: ReactionResponse[];
4038
4125
  mentioned_users: UserResponse[];
4039
4126
  own_reactions: ReactionResponse[];
4127
+ restricted_visibility: string[];
4040
4128
  custom: Record<string, any>;
4041
4129
  reaction_counts: Record<string, number>;
4042
4130
  reaction_scores: Record<string, number>;
@@ -4174,6 +4262,12 @@ export interface StartClosedCaptionsRequest {
4174
4262
  export interface StartClosedCaptionsResponse {
4175
4263
  duration: string;
4176
4264
  }
4265
+ export interface StartFrameRecordingRequest {
4266
+ recording_external_storage?: string;
4267
+ }
4268
+ export interface StartFrameRecordingResponse {
4269
+ duration: string;
4270
+ }
4177
4271
  export interface StartHLSBroadcastingRequest {
4178
4272
  }
4179
4273
  export interface StartHLSBroadcastingResponse {
@@ -4213,6 +4307,11 @@ export interface StopClosedCaptionsRequest {
4213
4307
  export interface StopClosedCaptionsResponse {
4214
4308
  duration: string;
4215
4309
  }
4310
+ export interface StopFrameRecordingRequest {
4311
+ }
4312
+ export interface StopFrameRecordingResponse {
4313
+ duration: string;
4314
+ }
4216
4315
  export interface StopHLSBroadcastingRequest {
4217
4316
  }
4218
4317
  export interface StopHLSBroadcastingResponse {
@@ -4492,6 +4591,7 @@ export interface UpdateAppRequest {
4492
4591
  enforce_unique_usernames?: 'no' | 'app' | 'team';
4493
4592
  feeds_moderation_enabled?: boolean;
4494
4593
  feeds_v2_region?: string;
4594
+ guest_user_creation_disabled?: boolean;
4495
4595
  image_moderation_enabled?: boolean;
4496
4596
  migrate_permissions_to_v2?: boolean;
4497
4597
  moderation_enabled?: boolean;
@@ -1,7 +1,8 @@
1
1
  import { BaseApi } from '../../BaseApi';
2
2
  import { StreamResponse } from '../../types';
3
- import { BanRequest, BanResponse, CheckRequest, CheckResponse, CustomCheckRequest, CustomCheckResponse, DeleteModerationConfigResponse, DeleteModerationTemplateResponse, FlagRequest, FlagResponse, GetConfigResponse, GetReviewQueueItemResponse, GetUserModerationReportResponse, ModeratorStatsResponse, MuteRequest, MuteResponse, QueryFeedModerationTemplatesResponse, QueryModerationConfigsRequest, QueryModerationConfigsResponse, QueryModerationLogsRequest, QueryModerationLogsResponse, QueryReviewQueueRequest, QueryReviewQueueResponse, QueryUsageStatsRequest, QueryUsageStatsResponse, QueueStatsResponse, SubmitActionRequest, SubmitActionResponse, UnbanRequest, UnbanResponse, UnmuteRequest, UnmuteResponse, UpsertConfigRequest, UpsertConfigResponse, UpsertModerationTemplateRequest, UpsertModerationTemplateResponse } from '../models';
3
+ import { BanRequest, BanResponse, CheckRequest, CheckResponse, CustomCheckRequest, CustomCheckResponse, DeleteModerationConfigResponse, DeleteModerationTemplateResponse, FlagRequest, FlagResponse, GetConfigResponse, GetModerationAnalyticsRequest, GetModerationAnalyticsResponse, GetReviewQueueItemResponse, GetUserModerationReportResponse, ModeratorStatsResponse, MuteRequest, MuteResponse, QueryFeedModerationTemplatesResponse, QueryModerationConfigsRequest, QueryModerationConfigsResponse, QueryModerationLogsRequest, QueryModerationLogsResponse, QueryReviewQueueRequest, QueryReviewQueueResponse, QueryUsageStatsRequest, QueryUsageStatsResponse, QueueStatsResponse, SubmitActionRequest, SubmitActionResponse, UnbanRequest, UnbanResponse, UnmuteRequest, UnmuteResponse, UpsertConfigRequest, UpsertConfigResponse, UpsertModerationTemplateRequest, UpsertModerationTemplateResponse } from '../models';
4
4
  export declare class ModerationApi extends BaseApi {
5
+ getModerationAnalytics: (request?: GetModerationAnalyticsRequest) => Promise<StreamResponse<GetModerationAnalyticsResponse>>;
5
6
  ban: (request: BanRequest) => Promise<StreamResponse<BanResponse>>;
6
7
  check: (request: CheckRequest) => Promise<StreamResponse<CheckResponse>>;
7
8
  upsertConfig: (request: UpsertConfigRequest) => Promise<StreamResponse<UpsertConfigResponse>>;
@@ -1,6 +1,6 @@
1
1
  import { VideoApi } from './VideoApi';
2
2
  import { StreamResponse } from '../../types';
3
- import { BlockUserRequest, BlockUserResponse, CollectUserFeedbackRequest, CollectUserFeedbackResponse, DeleteCallRequest, DeleteCallResponse, DeleteRecordingResponse, DeleteTranscriptionResponse, EndCallResponse, GetCallReportResponse, GetCallResponse, GetCallStatsResponse, GetOrCreateCallRequest, GetOrCreateCallResponse, GoLiveRequest, GoLiveResponse, ListRecordingsResponse, ListTranscriptionsResponse, MuteUsersRequest, MuteUsersResponse, PinRequest, PinResponse, SendCallEventRequest, SendCallEventResponse, StartClosedCaptionsRequest, StartClosedCaptionsResponse, StartHLSBroadcastingResponse, StartRTMPBroadcastsRequest, StartRTMPBroadcastsResponse, StartRecordingRequest, StartRecordingResponse, StartTranscriptionRequest, StartTranscriptionResponse, StopAllRTMPBroadcastsResponse, StopClosedCaptionsRequest, StopClosedCaptionsResponse, StopHLSBroadcastingResponse, StopLiveRequest, StopLiveResponse, StopRTMPBroadcastsRequest, StopRTMPBroadcastsResponse, StopRecordingResponse, StopTranscriptionRequest, StopTranscriptionResponse, UnblockUserRequest, UnblockUserResponse, UnpinRequest, UnpinResponse, UpdateCallMembersRequest, UpdateCallMembersResponse, UpdateCallRequest, UpdateCallResponse, UpdateUserPermissionsRequest, UpdateUserPermissionsResponse } from '../models';
3
+ import { BlockUserRequest, BlockUserResponse, CollectUserFeedbackRequest, CollectUserFeedbackResponse, DeleteCallRequest, DeleteCallResponse, DeleteRecordingResponse, DeleteTranscriptionResponse, EndCallResponse, GetCallReportResponse, GetCallResponse, GetCallStatsResponse, GetOrCreateCallRequest, GetOrCreateCallResponse, GoLiveRequest, GoLiveResponse, ListRecordingsResponse, ListTranscriptionsResponse, MuteUsersRequest, MuteUsersResponse, PinRequest, PinResponse, SendCallEventRequest, SendCallEventResponse, StartClosedCaptionsRequest, StartClosedCaptionsResponse, StartFrameRecordingRequest, StartFrameRecordingResponse, StartHLSBroadcastingResponse, StartRTMPBroadcastsRequest, StartRTMPBroadcastsResponse, StartRecordingRequest, StartRecordingResponse, StartTranscriptionRequest, StartTranscriptionResponse, StopAllRTMPBroadcastsResponse, StopClosedCaptionsRequest, StopClosedCaptionsResponse, StopFrameRecordingResponse, StopHLSBroadcastingResponse, StopLiveRequest, StopLiveResponse, StopRTMPBroadcastsRequest, StopRTMPBroadcastsResponse, StopRecordingResponse, StopTranscriptionRequest, StopTranscriptionResponse, UnblockUserRequest, UnblockUserResponse, UnpinRequest, UnpinResponse, UpdateCallMembersRequest, UpdateCallMembersResponse, UpdateCallRequest, UpdateCallResponse, UpdateUserPermissionsRequest, UpdateUserPermissionsResponse } from '../models';
4
4
  export declare class CallApi {
5
5
  protected videoApi: VideoApi;
6
6
  readonly type: string;
@@ -17,9 +17,7 @@ export declare class CallApi {
17
17
  blockUser: (request: BlockUserRequest) => Promise<StreamResponse<BlockUserResponse>>;
18
18
  delete: (request?: DeleteCallRequest) => Promise<StreamResponse<DeleteCallResponse>>;
19
19
  sendCallEvent: (request?: SendCallEventRequest) => Promise<StreamResponse<SendCallEventResponse>>;
20
- collectUserFeedback: (request: CollectUserFeedbackRequest & {
21
- session: string;
22
- }) => Promise<StreamResponse<CollectUserFeedbackResponse>>;
20
+ collectUserFeedback: (request: CollectUserFeedbackRequest) => Promise<StreamResponse<CollectUserFeedbackResponse>>;
23
21
  goLive: (request?: GoLiveRequest) => Promise<StreamResponse<GoLiveResponse>>;
24
22
  end: () => Promise<StreamResponse<EndCallResponse>>;
25
23
  updateCallMembers: (request?: UpdateCallMembersRequest) => Promise<StreamResponse<UpdateCallMembersResponse>>;
@@ -36,6 +34,7 @@ export declare class CallApi {
36
34
  }) => Promise<StreamResponse<StopRTMPBroadcastsResponse>>;
37
35
  startHLSBroadcasting: () => Promise<StreamResponse<StartHLSBroadcastingResponse>>;
38
36
  startClosedCaptions: (request?: StartClosedCaptionsRequest) => Promise<StreamResponse<StartClosedCaptionsResponse>>;
37
+ startFrameRecording: (request?: StartFrameRecordingRequest) => Promise<StreamResponse<StartFrameRecordingResponse>>;
39
38
  startRecording: (request?: StartRecordingRequest) => Promise<StreamResponse<StartRecordingResponse>>;
40
39
  startTranscription: (request?: StartTranscriptionRequest) => Promise<StreamResponse<StartTranscriptionResponse>>;
41
40
  getCallStats: (request: {
@@ -43,6 +42,7 @@ export declare class CallApi {
43
42
  }) => Promise<StreamResponse<GetCallStatsResponse>>;
44
43
  stopHLSBroadcasting: () => Promise<StreamResponse<StopHLSBroadcastingResponse>>;
45
44
  stopClosedCaptions: (request?: StopClosedCaptionsRequest) => Promise<StreamResponse<StopClosedCaptionsResponse>>;
45
+ stopFrameRecording: () => Promise<StreamResponse<StopFrameRecordingResponse>>;
46
46
  stopLive: (request?: StopLiveRequest) => Promise<StreamResponse<StopLiveResponse>>;
47
47
  stopRecording: () => Promise<StreamResponse<StopRecordingResponse>>;
48
48
  stopTranscription: (request?: StopTranscriptionRequest) => Promise<StreamResponse<StopTranscriptionResponse>>;
@@ -1,6 +1,6 @@
1
1
  import { BaseApi } from '../../BaseApi';
2
2
  import { StreamResponse } from '../../types';
3
- import { BlockUserRequest, BlockUserResponse, CollectUserFeedbackRequest, CollectUserFeedbackResponse, CreateCallTypeRequest, CreateCallTypeResponse, DeleteCallRequest, DeleteCallResponse, DeleteRecordingResponse, DeleteTranscriptionResponse, EndCallResponse, GetCallReportResponse, GetCallResponse, GetCallStatsResponse, GetCallTypeResponse, GetEdgesResponse, GetOrCreateCallRequest, GetOrCreateCallResponse, GoLiveRequest, GoLiveResponse, ListCallTypeResponse, ListRecordingsResponse, ListTranscriptionsResponse, MuteUsersRequest, MuteUsersResponse, PinRequest, PinResponse, QueryAggregateCallStatsRequest, QueryAggregateCallStatsResponse, QueryCallMembersRequest, QueryCallMembersResponse, QueryCallStatsRequest, QueryCallStatsResponse, QueryCallsRequest, QueryCallsResponse, QueryUserFeedbackRequest, QueryUserFeedbackResponse, Response, SendCallEventRequest, SendCallEventResponse, StartClosedCaptionsRequest, StartClosedCaptionsResponse, StartHLSBroadcastingResponse, StartRTMPBroadcastsRequest, StartRTMPBroadcastsResponse, StartRecordingRequest, StartRecordingResponse, StartTranscriptionRequest, StartTranscriptionResponse, StopAllRTMPBroadcastsResponse, StopClosedCaptionsRequest, StopClosedCaptionsResponse, StopHLSBroadcastingResponse, StopLiveRequest, StopLiveResponse, StopRTMPBroadcastsRequest, StopRTMPBroadcastsResponse, StopRecordingResponse, StopTranscriptionRequest, StopTranscriptionResponse, UnblockUserRequest, UnblockUserResponse, UnpinRequest, UnpinResponse, UpdateCallMembersRequest, UpdateCallMembersResponse, UpdateCallRequest, UpdateCallResponse, UpdateCallTypeRequest, UpdateCallTypeResponse, UpdateUserPermissionsRequest, UpdateUserPermissionsResponse } from '../models';
3
+ import { BlockUserRequest, BlockUserResponse, CollectUserFeedbackRequest, CollectUserFeedbackResponse, CreateCallTypeRequest, CreateCallTypeResponse, DeleteCallRequest, DeleteCallResponse, DeleteRecordingResponse, DeleteTranscriptionResponse, EndCallResponse, GetCallReportResponse, GetCallResponse, GetCallStatsResponse, GetCallTypeResponse, GetEdgesResponse, GetOrCreateCallRequest, GetOrCreateCallResponse, GoLiveRequest, GoLiveResponse, ListCallTypeResponse, ListRecordingsResponse, ListTranscriptionsResponse, MuteUsersRequest, MuteUsersResponse, PinRequest, PinResponse, QueryAggregateCallStatsRequest, QueryAggregateCallStatsResponse, QueryCallMembersRequest, QueryCallMembersResponse, QueryCallStatsRequest, QueryCallStatsResponse, QueryCallsRequest, QueryCallsResponse, QueryUserFeedbackRequest, QueryUserFeedbackResponse, Response, SendCallEventRequest, SendCallEventResponse, StartClosedCaptionsRequest, StartClosedCaptionsResponse, StartFrameRecordingRequest, StartFrameRecordingResponse, StartHLSBroadcastingResponse, StartRTMPBroadcastsRequest, StartRTMPBroadcastsResponse, StartRecordingRequest, StartRecordingResponse, StartTranscriptionRequest, StartTranscriptionResponse, StopAllRTMPBroadcastsResponse, StopClosedCaptionsRequest, StopClosedCaptionsResponse, StopFrameRecordingResponse, StopHLSBroadcastingResponse, StopLiveRequest, StopLiveResponse, StopRTMPBroadcastsRequest, StopRTMPBroadcastsResponse, StopRecordingResponse, StopTranscriptionRequest, StopTranscriptionResponse, UnblockUserRequest, UnblockUserResponse, UnpinRequest, UnpinResponse, UpdateCallMembersRequest, UpdateCallMembersResponse, UpdateCallRequest, UpdateCallResponse, UpdateCallTypeRequest, UpdateCallTypeResponse, UpdateUserPermissionsRequest, UpdateUserPermissionsResponse } from '../models';
4
4
  export declare class VideoApi extends BaseApi {
5
5
  queryUserFeedback: (request?: QueryUserFeedbackRequest & {
6
6
  full?: boolean;
@@ -38,7 +38,6 @@ export declare class VideoApi extends BaseApi {
38
38
  collectUserFeedback: (request: CollectUserFeedbackRequest & {
39
39
  type: string;
40
40
  id: string;
41
- session: string;
42
41
  }) => Promise<StreamResponse<CollectUserFeedbackResponse>>;
43
42
  goLive: (request: GoLiveRequest & {
44
43
  type: string;
@@ -90,6 +89,10 @@ export declare class VideoApi extends BaseApi {
90
89
  type: string;
91
90
  id: string;
92
91
  }) => Promise<StreamResponse<StartClosedCaptionsResponse>>;
92
+ startFrameRecording: (request: StartFrameRecordingRequest & {
93
+ type: string;
94
+ id: string;
95
+ }) => Promise<StreamResponse<StartFrameRecordingResponse>>;
93
96
  startRecording: (request: StartRecordingRequest & {
94
97
  type: string;
95
98
  id: string;
@@ -111,6 +114,10 @@ export declare class VideoApi extends BaseApi {
111
114
  type: string;
112
115
  id: string;
113
116
  }) => Promise<StreamResponse<StopClosedCaptionsResponse>>;
117
+ stopFrameRecording: (request: {
118
+ type: string;
119
+ id: string;
120
+ }) => Promise<StreamResponse<StopFrameRecordingResponse>>;
114
121
  stopLive: (request: StopLiveRequest & {
115
122
  type: string;
116
123
  id: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/node-sdk",
3
- "version": "0.4.12",
3
+ "version": "0.4.14",
4
4
  "description": "",
5
5
  "exports": {
6
6
  ".": {
@@ -49,6 +49,7 @@
49
49
  "@openapitools/openapi-generator-cli": "^2.7.0",
50
50
  "@rollup/plugin-replace": "^5.0.2",
51
51
  "@rollup/plugin-typescript": "^11.1.4",
52
+ "@stream-io/openai-realtime-api": "prerelease",
52
53
  "@types/uuid": "^9.0.4",
53
54
  "@typescript-eslint/eslint-plugin": "^6.4.0",
54
55
  "dotenv": "^16.3.1",
@@ -74,6 +75,14 @@
74
75
  "jsonwebtoken": "^9.0.2",
75
76
  "uuid": "^9.0.1"
76
77
  },
78
+ "peerDependencies": {
79
+ "@stream-io/openai-realtime-api": "prerelease"
80
+ },
81
+ "peerDependenciesMeta": {
82
+ "@stream-io/openai-realtime-api": {
83
+ "optional": true
84
+ }
85
+ },
77
86
  "engines": {
78
87
  "node": ">=18.0.0"
79
88
  },
package/src/BaseApi.ts CHANGED
@@ -4,7 +4,7 @@ import { APIError } from './gen/models';
4
4
  import { getRateLimitFromResponseHeader } from './utils/rate-limit';
5
5
 
6
6
  export class BaseApi {
7
- constructor(private readonly apiConfig: ApiConfig) {}
7
+ constructor(protected readonly apiConfig: ApiConfig) {}
8
8
 
9
9
  protected sendRequest = async <T>(
10
10
  method: string,
@@ -38,6 +38,7 @@ export class StreamClient extends CommonApi {
38
38
  super({ apiKey, token, timeout, baseUrl: chatBaseUrl });
39
39
 
40
40
  this.video = new StreamVideoClient({
41
+ streamClient: this,
41
42
  apiKey,
42
43
  token,
43
44
  timeout,
@@ -1,8 +1,63 @@
1
1
  import { VideoApi } from './gen/video/VideoApi';
2
2
  import { StreamCall } from './StreamCall';
3
+ import type { StreamClient } from './StreamClient';
4
+ import type { ApiConfig } from './types';
5
+ import type {
6
+ RealtimeClient,
7
+ createRealtimeClient,
8
+ } from '@stream-io/openai-realtime-api';
3
9
 
4
10
  export class StreamVideoClient extends VideoApi {
11
+ private readonly streamClient: StreamClient;
12
+
13
+ constructor({
14
+ streamClient,
15
+ ...apiConfig
16
+ }: ApiConfig & { streamClient: StreamClient }) {
17
+ super(apiConfig);
18
+ this.streamClient = streamClient;
19
+ }
20
+
5
21
  call = (type: string, id: string) => {
6
22
  return new StreamCall(this, type, id);
7
23
  };
24
+
25
+ connectOpenAi = async (options: {
26
+ call: StreamCall;
27
+ agentUserId: string;
28
+ openAiApiKey: string;
29
+ validityInSeconds: number;
30
+ }): Promise<RealtimeClient> => {
31
+ let doCreateRealtimeClient: typeof createRealtimeClient;
32
+
33
+ try {
34
+ doCreateRealtimeClient = (await import('@stream-io/openai-realtime-api'))
35
+ .createRealtimeClient;
36
+ } catch {
37
+ throw new Error(
38
+ 'Cannot create Realtime API client. Is @stream-io/openai-realtime-api installed?',
39
+ );
40
+ }
41
+
42
+ if (!options.agentUserId) {
43
+ throw new Error('"agentUserId" must by specified in options');
44
+ }
45
+
46
+ const token = this.streamClient.generateCallToken({
47
+ user_id: options.agentUserId,
48
+ call_cids: [options.call.cid],
49
+ validity_in_seconds: options.validityInSeconds,
50
+ });
51
+
52
+ const realtimeClient = doCreateRealtimeClient({
53
+ baseUrl: this.apiConfig.baseUrl,
54
+ call: options.call,
55
+ streamApiKey: this.apiConfig.apiKey,
56
+ streamUserToken: token,
57
+ openAiApiKey: options.openAiApiKey,
58
+ });
59
+
60
+ await realtimeClient.connect();
61
+ return realtimeClient;
62
+ };
8
63
  }
@@ -97,6 +97,7 @@ export class CommonApi extends BaseApi {
97
97
  enforce_unique_usernames: request?.enforce_unique_usernames,
98
98
  feeds_moderation_enabled: request?.feeds_moderation_enabled,
99
99
  feeds_v2_region: request?.feeds_v2_region,
100
+ guest_user_creation_disabled: request?.guest_user_creation_disabled,
100
101
  image_moderation_enabled: request?.image_moderation_enabled,
101
102
  migrate_permissions_to_v2: request?.migrate_permissions_to_v2,
102
103
  moderation_enabled: request?.moderation_enabled,