@stream-io/node-sdk 0.3.1 → 0.4.1

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.
Files changed (69) hide show
  1. package/dist/index.cjs.js +4136 -9282
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.d.ts +2 -3
  4. package/dist/index.es.js +4136 -9206
  5. package/dist/index.es.js.map +1 -1
  6. package/dist/src/BaseApi.d.ts +10 -0
  7. package/dist/src/StreamCall.d.ts +5 -37
  8. package/dist/src/StreamChannel.d.ts +7 -34
  9. package/dist/src/StreamChatClient.d.ts +2 -25
  10. package/dist/src/StreamClient.d.ts +51 -59
  11. package/dist/src/StreamModerationClient.d.ts +3 -0
  12. package/dist/src/StreamVideoClient.d.ts +2 -18
  13. package/dist/src/gen/chat/ChannelApi.d.ts +33 -0
  14. package/dist/src/gen/chat/ChatApi.d.ts +241 -0
  15. package/dist/src/gen/common/CommonApi.d.ts +99 -0
  16. package/dist/src/gen/model-decoders/index.d.ts +3 -0
  17. package/dist/src/gen/models/index.d.ts +3881 -0
  18. package/dist/src/gen/moderation/ModerationApi.d.ts +38 -0
  19. package/dist/src/gen/video/CallApi.d.ts +56 -0
  20. package/dist/src/gen/video/VideoApi.d.ts +151 -0
  21. package/dist/src/types.d.ts +25 -0
  22. package/dist/src/utils/create-token.d.ts +2 -0
  23. package/dist/src/utils/rate-limit.d.ts +2 -0
  24. package/index.ts +2 -3
  25. package/package.json +5 -4
  26. package/src/BaseApi.ts +115 -0
  27. package/src/StreamCall.ts +9 -199
  28. package/src/StreamChannel.ts +23 -246
  29. package/src/StreamChatClient.ts +3 -122
  30. package/src/StreamClient.ts +101 -345
  31. package/src/StreamModerationClient.ts +3 -0
  32. package/src/StreamVideoClient.ts +3 -95
  33. package/src/gen/chat/ChannelApi.ts +270 -0
  34. package/src/gen/chat/ChatApi.ts +1857 -0
  35. package/src/gen/common/CommonApi.ts +1004 -0
  36. package/src/gen/model-decoders/index.ts +1897 -0
  37. package/src/gen/models/index.ts +6794 -0
  38. package/src/gen/moderation/ModerationApi.ts +476 -0
  39. package/src/gen/video/CallApi.ts +309 -0
  40. package/src/gen/video/VideoApi.ts +1007 -0
  41. package/src/types.ts +35 -0
  42. package/src/utils/create-token.ts +6 -1
  43. package/src/utils/rate-limit.ts +21 -0
  44. package/dist/src/gen/chat/apis/ProductchatApi.d.ts +0 -1750
  45. package/dist/src/gen/chat/apis/index.d.ts +0 -1
  46. package/dist/src/gen/chat/index.d.ts +0 -3
  47. package/dist/src/gen/chat/models/index.d.ts +0 -14865
  48. package/dist/src/gen/chat/runtime.d.ts +0 -180
  49. package/dist/src/gen/video/apis/ProductvideoApi.d.ts +0 -648
  50. package/dist/src/gen/video/apis/index.d.ts +0 -1
  51. package/dist/src/gen/video/index.d.ts +0 -3
  52. package/dist/src/gen/video/models/index.d.ts +0 -5011
  53. package/dist/src/gen/video/runtime.d.ts +0 -180
  54. package/src/gen/chat/.openapi-generator/FILES +0 -6
  55. package/src/gen/chat/.openapi-generator/VERSION +0 -1
  56. package/src/gen/chat/.openapi-generator-ignore +0 -23
  57. package/src/gen/chat/apis/ProductchatApi.ts +0 -7007
  58. package/src/gen/chat/apis/index.ts +0 -3
  59. package/src/gen/chat/index.ts +0 -5
  60. package/src/gen/chat/models/index.ts +0 -14766
  61. package/src/gen/chat/runtime.ts +0 -415
  62. package/src/gen/video/.openapi-generator/FILES +0 -6
  63. package/src/gen/video/.openapi-generator/VERSION +0 -1
  64. package/src/gen/video/.openapi-generator-ignore +0 -23
  65. package/src/gen/video/apis/ProductvideoApi.ts +0 -2575
  66. package/src/gen/video/apis/index.ts +0 -3
  67. package/src/gen/video/index.ts +0 -5
  68. package/src/gen/video/models/index.ts +0 -5000
  69. package/src/gen/video/runtime.ts +0 -415
@@ -0,0 +1,38 @@
1
+ import { BaseApi } from '../../BaseApi';
2
+ import { StreamResponse } from '../../types';
3
+ import { BanRequest, BanResponse, CheckRequest, CheckResponse, CustomCheckRequest, CustomCheckResponse, DeleteModerationTemplateResponse, FlagRequest, FlagResponse, GetConfigResponse, GetReviewQueueItemResponse, GetUserModerationReportResponse, ModeratorStatsResponse, MuteRequest, MuteResponse, QueryFeedModerationTemplatesResponse, QueryModerationLogsRequest, QueryModerationLogsResponse, QueryReviewQueueRequest, QueryReviewQueueResponse, QueryUsageStatsRequest, QueryUsageStatsResponse, QueueStatsResponse, SubmitActionRequest, SubmitActionResponse, UnbanRequest, UnbanResponse, UnmuteRequest, UnmuteResponse, UpsertConfigRequest, UpsertConfigResponse, UpsertModerationTemplateRequest, UpsertModerationTemplateResponse } from '../models';
4
+ export declare class ModerationApi extends BaseApi {
5
+ ban: (request: BanRequest) => Promise<StreamResponse<BanResponse>>;
6
+ check: (request: CheckRequest) => Promise<StreamResponse<CheckResponse>>;
7
+ upsertConfig: (request: UpsertConfigRequest) => Promise<StreamResponse<UpsertConfigResponse>>;
8
+ getConfig: (request: {
9
+ key: string;
10
+ }) => Promise<StreamResponse<GetConfigResponse>>;
11
+ customCheck: (request: CustomCheckRequest) => Promise<StreamResponse<CustomCheckResponse>>;
12
+ v2DeleteTemplate: () => Promise<StreamResponse<DeleteModerationTemplateResponse>>;
13
+ v2QueryTemplates: () => Promise<StreamResponse<QueryFeedModerationTemplatesResponse>>;
14
+ v2UpsertTemplate: (request: UpsertModerationTemplateRequest) => Promise<StreamResponse<UpsertModerationTemplateResponse>>;
15
+ flag: (request: FlagRequest) => Promise<StreamResponse<FlagResponse>>;
16
+ queryModerationLogs: (request?: QueryModerationLogsRequest) => Promise<StreamResponse<QueryModerationLogsResponse>>;
17
+ getModeratorStats: () => Promise<StreamResponse<ModeratorStatsResponse>>;
18
+ mute: (request: MuteRequest) => Promise<StreamResponse<MuteResponse>>;
19
+ getQueueStats: () => Promise<StreamResponse<QueueStatsResponse>>;
20
+ queryReviewQueue: (request?: QueryReviewQueueRequest) => Promise<StreamResponse<QueryReviewQueueResponse>>;
21
+ getReviewQueueItem: (request: {
22
+ id: string;
23
+ }) => Promise<StreamResponse<GetReviewQueueItemResponse>>;
24
+ submitAction: (request: SubmitActionRequest) => Promise<StreamResponse<SubmitActionResponse>>;
25
+ unban: (request: UnbanRequest & {
26
+ target_user_id: string;
27
+ channel_cid?: string;
28
+ created_by?: string;
29
+ }) => Promise<StreamResponse<UnbanResponse>>;
30
+ unmute: (request: UnmuteRequest) => Promise<StreamResponse<UnmuteResponse>>;
31
+ queryUsageStats: (request?: QueryUsageStatsRequest) => Promise<StreamResponse<QueryUsageStatsResponse>>;
32
+ getUserReport: (request: {
33
+ user_id: string;
34
+ create_user_if_not_exists?: boolean;
35
+ include_user_mutes?: boolean;
36
+ include_user_blocks?: boolean;
37
+ }) => Promise<StreamResponse<GetUserModerationReportResponse>>;
38
+ }
@@ -0,0 +1,56 @@
1
+ import { VideoApi } from './VideoApi';
2
+ import { StreamResponse } from '../../types';
3
+ import { BlockUserRequest, BlockUserResponse, CollectUserFeedbackRequest, CollectUserFeedbackResponse, DeleteCallRequest, DeleteCallResponse, DeleteRecordingResponse, DeleteTranscriptionResponse, EndCallResponse, GetCallResponse, GetCallStatsResponse, GetOrCreateCallRequest, GetOrCreateCallResponse, GoLiveRequest, GoLiveResponse, ListRecordingsResponse, ListTranscriptionsResponse, MuteUsersRequest, MuteUsersResponse, PinRequest, PinResponse, SendCallEventRequest, SendCallEventResponse, StartHLSBroadcastingResponse, StartRTMPBroadcastsRequest, StartRTMPBroadcastsResponse, StartRecordingRequest, StartRecordingResponse, StartTranscriptionRequest, StartTranscriptionResponse, StopAllRTMPBroadcastsResponse, StopHLSBroadcastingResponse, StopLiveResponse, StopRTMPBroadcastsRequest, StopRTMPBroadcastsResponse, StopRecordingResponse, StopTranscriptionResponse, UnblockUserRequest, UnblockUserResponse, UnpinRequest, UnpinResponse, UpdateCallMembersRequest, UpdateCallMembersResponse, UpdateCallRequest, UpdateCallResponse, UpdateUserPermissionsRequest, UpdateUserPermissionsResponse } from '../models';
4
+ export declare class CallApi {
5
+ protected videoApi: VideoApi;
6
+ readonly type: string;
7
+ readonly id: string;
8
+ constructor(videoApi: VideoApi, type: string, id: string);
9
+ get: (request?: {
10
+ members_limit?: number;
11
+ ring?: boolean;
12
+ notify?: boolean;
13
+ video?: boolean;
14
+ }) => Promise<StreamResponse<GetCallResponse>>;
15
+ update: (request?: UpdateCallRequest) => Promise<StreamResponse<UpdateCallResponse>>;
16
+ getOrCreate: (request?: GetOrCreateCallRequest) => Promise<StreamResponse<GetOrCreateCallResponse>>;
17
+ blockUser: (request: BlockUserRequest) => Promise<StreamResponse<BlockUserResponse>>;
18
+ delete: (request?: DeleteCallRequest) => Promise<StreamResponse<DeleteCallResponse>>;
19
+ sendCallEvent: (request?: SendCallEventRequest) => Promise<StreamResponse<SendCallEventResponse>>;
20
+ collectUserFeedback: (request: CollectUserFeedbackRequest & {
21
+ session: string;
22
+ }) => Promise<StreamResponse<CollectUserFeedbackResponse>>;
23
+ goLive: (request?: GoLiveRequest) => Promise<StreamResponse<GoLiveResponse>>;
24
+ end: () => Promise<StreamResponse<EndCallResponse>>;
25
+ updateCallMembers: (request?: UpdateCallMembersRequest) => Promise<StreamResponse<UpdateCallMembersResponse>>;
26
+ muteUsers: (request?: MuteUsersRequest) => Promise<StreamResponse<MuteUsersResponse>>;
27
+ videoPin: (request: PinRequest) => Promise<StreamResponse<PinResponse>>;
28
+ listRecordings: () => Promise<StreamResponse<ListRecordingsResponse>>;
29
+ startRTMPBroadcasts: (request: StartRTMPBroadcastsRequest) => Promise<StreamResponse<StartRTMPBroadcastsResponse>>;
30
+ stopAllRTMPBroadcasts: () => Promise<StreamResponse<StopAllRTMPBroadcastsResponse>>;
31
+ stopRTMPBroadcast: (request: StopRTMPBroadcastsRequest & {
32
+ name: string;
33
+ }) => Promise<StreamResponse<StopRTMPBroadcastsResponse>>;
34
+ startHLSBroadcasting: () => Promise<StreamResponse<StartHLSBroadcastingResponse>>;
35
+ startRecording: (request?: StartRecordingRequest) => Promise<StreamResponse<StartRecordingResponse>>;
36
+ startTranscription: (request?: StartTranscriptionRequest) => Promise<StreamResponse<StartTranscriptionResponse>>;
37
+ getCallStats: (request: {
38
+ session: string;
39
+ }) => Promise<StreamResponse<GetCallStatsResponse>>;
40
+ stopHLSBroadcasting: () => Promise<StreamResponse<StopHLSBroadcastingResponse>>;
41
+ stopLive: () => Promise<StreamResponse<StopLiveResponse>>;
42
+ stopRecording: () => Promise<StreamResponse<StopRecordingResponse>>;
43
+ stopTranscription: () => Promise<StreamResponse<StopTranscriptionResponse>>;
44
+ listTranscriptions: () => Promise<StreamResponse<ListTranscriptionsResponse>>;
45
+ unblockUser: (request: UnblockUserRequest) => Promise<StreamResponse<UnblockUserResponse>>;
46
+ videoUnpin: (request: UnpinRequest) => Promise<StreamResponse<UnpinResponse>>;
47
+ updateUserPermissions: (request: UpdateUserPermissionsRequest) => Promise<StreamResponse<UpdateUserPermissionsResponse>>;
48
+ deleteRecording: (request: {
49
+ session: string;
50
+ filename: string;
51
+ }) => Promise<StreamResponse<DeleteRecordingResponse>>;
52
+ deleteTranscription: (request: {
53
+ session: string;
54
+ filename: string;
55
+ }) => Promise<StreamResponse<DeleteTranscriptionResponse>>;
56
+ }
@@ -0,0 +1,151 @@
1
+ import { BaseApi } from '../../BaseApi';
2
+ import { StreamResponse } from '../../types';
3
+ import { BlockUserRequest, BlockUserResponse, CollectUserFeedbackRequest, CollectUserFeedbackResponse, CreateCallTypeRequest, CreateCallTypeResponse, DeleteCallRequest, DeleteCallResponse, DeleteRecordingResponse, DeleteTranscriptionResponse, EndCallResponse, GetCallResponse, GetCallStatsResponse, GetCallTypeResponse, GetEdgesResponse, GetOrCreateCallRequest, GetOrCreateCallResponse, GoLiveRequest, GoLiveResponse, ListCallTypeResponse, ListRecordingsResponse, ListTranscriptionsResponse, MuteUsersRequest, MuteUsersResponse, PinRequest, PinResponse, QueryCallMembersRequest, QueryCallMembersResponse, QueryCallStatsRequest, QueryCallStatsResponse, QueryCallsRequest, QueryCallsResponse, Response, SendCallEventRequest, SendCallEventResponse, StartHLSBroadcastingResponse, StartRTMPBroadcastsRequest, StartRTMPBroadcastsResponse, StartRecordingRequest, StartRecordingResponse, StartTranscriptionRequest, StartTranscriptionResponse, StopAllRTMPBroadcastsResponse, StopHLSBroadcastingResponse, StopLiveResponse, StopRTMPBroadcastsRequest, StopRTMPBroadcastsResponse, StopRecordingResponse, StopTranscriptionResponse, UnblockUserRequest, UnblockUserResponse, UnpinRequest, UnpinResponse, UpdateCallMembersRequest, UpdateCallMembersResponse, UpdateCallRequest, UpdateCallResponse, UpdateCallTypeRequest, UpdateCallTypeResponse, UpdateUserPermissionsRequest, UpdateUserPermissionsResponse } from '../models';
4
+ export declare class VideoApi extends BaseApi {
5
+ queryCallMembers: (request: QueryCallMembersRequest) => Promise<StreamResponse<QueryCallMembersResponse>>;
6
+ queryCallStats: (request?: QueryCallStatsRequest) => Promise<StreamResponse<QueryCallStatsResponse>>;
7
+ getCall: (request: {
8
+ type: string;
9
+ id: string;
10
+ members_limit?: number;
11
+ ring?: boolean;
12
+ notify?: boolean;
13
+ video?: boolean;
14
+ }) => Promise<StreamResponse<GetCallResponse>>;
15
+ updateCall: (request: UpdateCallRequest & {
16
+ type: string;
17
+ id: string;
18
+ }) => Promise<StreamResponse<UpdateCallResponse>>;
19
+ getOrCreateCall: (request: GetOrCreateCallRequest & {
20
+ type: string;
21
+ id: string;
22
+ }) => Promise<StreamResponse<GetOrCreateCallResponse>>;
23
+ blockUser: (request: BlockUserRequest & {
24
+ type: string;
25
+ id: string;
26
+ }) => Promise<StreamResponse<BlockUserResponse>>;
27
+ deleteCall: (request: DeleteCallRequest & {
28
+ type: string;
29
+ id: string;
30
+ }) => Promise<StreamResponse<DeleteCallResponse>>;
31
+ sendCallEvent: (request: SendCallEventRequest & {
32
+ type: string;
33
+ id: string;
34
+ }) => Promise<StreamResponse<SendCallEventResponse>>;
35
+ collectUserFeedback: (request: CollectUserFeedbackRequest & {
36
+ type: string;
37
+ id: string;
38
+ session: string;
39
+ }) => Promise<StreamResponse<CollectUserFeedbackResponse>>;
40
+ goLive: (request: GoLiveRequest & {
41
+ type: string;
42
+ id: string;
43
+ }) => Promise<StreamResponse<GoLiveResponse>>;
44
+ endCall: (request: {
45
+ type: string;
46
+ id: string;
47
+ }) => Promise<StreamResponse<EndCallResponse>>;
48
+ updateCallMembers: (request: UpdateCallMembersRequest & {
49
+ type: string;
50
+ id: string;
51
+ }) => Promise<StreamResponse<UpdateCallMembersResponse>>;
52
+ muteUsers: (request: MuteUsersRequest & {
53
+ type: string;
54
+ id: string;
55
+ }) => Promise<StreamResponse<MuteUsersResponse>>;
56
+ videoPin: (request: PinRequest & {
57
+ type: string;
58
+ id: string;
59
+ }) => Promise<StreamResponse<PinResponse>>;
60
+ listRecordings: (request: {
61
+ type: string;
62
+ id: string;
63
+ }) => Promise<StreamResponse<ListRecordingsResponse>>;
64
+ startRTMPBroadcasts: (request: StartRTMPBroadcastsRequest & {
65
+ type: string;
66
+ id: string;
67
+ }) => Promise<StreamResponse<StartRTMPBroadcastsResponse>>;
68
+ stopAllRTMPBroadcasts: (request: {
69
+ type: string;
70
+ id: string;
71
+ }) => Promise<StreamResponse<StopAllRTMPBroadcastsResponse>>;
72
+ stopRTMPBroadcast: (request: StopRTMPBroadcastsRequest & {
73
+ type: string;
74
+ id: string;
75
+ name: string;
76
+ }) => Promise<StreamResponse<StopRTMPBroadcastsResponse>>;
77
+ startHLSBroadcasting: (request: {
78
+ type: string;
79
+ id: string;
80
+ }) => Promise<StreamResponse<StartHLSBroadcastingResponse>>;
81
+ startRecording: (request: StartRecordingRequest & {
82
+ type: string;
83
+ id: string;
84
+ }) => Promise<StreamResponse<StartRecordingResponse>>;
85
+ startTranscription: (request: StartTranscriptionRequest & {
86
+ type: string;
87
+ id: string;
88
+ }) => Promise<StreamResponse<StartTranscriptionResponse>>;
89
+ getCallStats: (request: {
90
+ type: string;
91
+ id: string;
92
+ session: string;
93
+ }) => Promise<StreamResponse<GetCallStatsResponse>>;
94
+ stopHLSBroadcasting: (request: {
95
+ type: string;
96
+ id: string;
97
+ }) => Promise<StreamResponse<StopHLSBroadcastingResponse>>;
98
+ stopLive: (request: {
99
+ type: string;
100
+ id: string;
101
+ }) => Promise<StreamResponse<StopLiveResponse>>;
102
+ stopRecording: (request: {
103
+ type: string;
104
+ id: string;
105
+ }) => Promise<StreamResponse<StopRecordingResponse>>;
106
+ stopTranscription: (request: {
107
+ type: string;
108
+ id: string;
109
+ }) => Promise<StreamResponse<StopTranscriptionResponse>>;
110
+ listTranscriptions: (request: {
111
+ type: string;
112
+ id: string;
113
+ }) => Promise<StreamResponse<ListTranscriptionsResponse>>;
114
+ unblockUser: (request: UnblockUserRequest & {
115
+ type: string;
116
+ id: string;
117
+ }) => Promise<StreamResponse<UnblockUserResponse>>;
118
+ videoUnpin: (request: UnpinRequest & {
119
+ type: string;
120
+ id: string;
121
+ }) => Promise<StreamResponse<UnpinResponse>>;
122
+ updateUserPermissions: (request: UpdateUserPermissionsRequest & {
123
+ type: string;
124
+ id: string;
125
+ }) => Promise<StreamResponse<UpdateUserPermissionsResponse>>;
126
+ deleteRecording: (request: {
127
+ type: string;
128
+ id: string;
129
+ session: string;
130
+ filename: string;
131
+ }) => Promise<StreamResponse<DeleteRecordingResponse>>;
132
+ deleteTranscription: (request: {
133
+ type: string;
134
+ id: string;
135
+ session: string;
136
+ filename: string;
137
+ }) => Promise<StreamResponse<DeleteTranscriptionResponse>>;
138
+ queryCalls: (request?: QueryCallsRequest) => Promise<StreamResponse<QueryCallsResponse>>;
139
+ listCallTypes: () => Promise<StreamResponse<ListCallTypeResponse>>;
140
+ createCallType: (request: CreateCallTypeRequest) => Promise<StreamResponse<CreateCallTypeResponse>>;
141
+ deleteCallType: (request: {
142
+ name: string;
143
+ }) => Promise<StreamResponse<Response>>;
144
+ getCallType: (request: {
145
+ name: string;
146
+ }) => Promise<StreamResponse<GetCallTypeResponse>>;
147
+ updateCallType: (request: UpdateCallTypeRequest & {
148
+ name: string;
149
+ }) => Promise<StreamResponse<UpdateCallTypeResponse>>;
150
+ getEdges: () => Promise<StreamResponse<GetEdgesResponse>>;
151
+ }
@@ -1,4 +1,29 @@
1
1
  export type OmitTypeId<T> = Omit<T, 'type' | 'id' | 'connection_id'>;
2
+ export interface ApiConfig {
3
+ apiKey: string;
4
+ token: string;
5
+ baseUrl: string;
6
+ timeout: number;
7
+ }
8
+ export interface RequestMetadata {
9
+ responseHeaders: Headers;
10
+ rateLimit: RateLimit;
11
+ responseCode: number;
12
+ clientRequestId: string;
13
+ }
14
+ export type StreamResponse<T> = T & {
15
+ metadata: RequestMetadata;
16
+ };
17
+ export declare class StreamError extends Error {
18
+ metadata: Partial<RequestMetadata>;
19
+ code?: number | undefined;
20
+ constructor(message: string, metadata: Partial<RequestMetadata>, code?: number | undefined, errorOptions?: ErrorOptions);
21
+ }
22
+ export interface RateLimit {
23
+ rateLimit?: number;
24
+ rateLimitRemaining?: number;
25
+ rateLimitReset?: Date;
26
+ }
2
27
  interface BaseTokenPayload {
3
28
  user_id: string;
4
29
  exp: number;
@@ -4,5 +4,7 @@ export declare function JWTUserToken(apiSecret: Secret, payload: {
4
4
  exp: number;
5
5
  iat: number;
6
6
  call_cids?: string[];
7
+ } & {
8
+ [key: string]: any;
7
9
  }): string;
8
10
  export declare function JWTServerToken(apiSecret: Secret, jwtOptions?: SignOptions): string;
@@ -0,0 +1,2 @@
1
+ import { RateLimit } from '../types';
2
+ export declare const getRateLimitFromResponseHeader: (responseHeaders: Headers) => RateLimit;
package/index.ts CHANGED
@@ -1,7 +1,6 @@
1
- export * from './src/gen/chat/models';
2
- export * from './src/gen/video/models';
1
+ export * from './src/gen/models';
3
2
  export * from './src/StreamClient';
4
- export * from './src/StreamVideoClient';
5
3
  export * from './src/StreamCall';
6
4
  export * from './src/StreamChatClient';
7
5
  export * from './src/StreamChannel';
6
+ export * from './src/StreamVideoClient';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/node-sdk",
3
- "version": "0.3.1",
3
+ "version": "0.4.1",
4
4
  "description": "",
5
5
  "exports": {
6
6
  ".": {
@@ -25,11 +25,11 @@
25
25
  "test:bun": "bun run vitest",
26
26
  "start": "rollup -w -c",
27
27
  "build": "rm -rf dist && rollup -c",
28
- "generate:open-api": "./generate-openapi.sh protocol $PRODUCT",
29
- "generate:open-api:dev": "./generate-openapi.sh chat $PRODUCT",
28
+ "generate:open-api": "./generate-openapi.sh",
30
29
  "lint": "eslint **/*.ts",
31
30
  "lint:fix": "eslint --fix **/*.ts",
32
- "prettier:fix": "prettier . --write"
31
+ "prettier:fix": "prettier . --write",
32
+ "lint:gen": "eslint --fix src/gen/**/*ts && prettier src/gen/**/*.ts --write"
33
33
  },
34
34
  "lint-staged": {
35
35
  "**/*": [
@@ -58,6 +58,7 @@
58
58
  "eslint-plugin-import": "^2.25.2",
59
59
  "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
60
60
  "eslint-plugin-promise": "^6.0.0",
61
+ "eslint-plugin-unused-imports": "^4.0.1",
61
62
  "husky": "^8.0.3",
62
63
  "lint-staged": "^15.1.0",
63
64
  "prettier": "^3.1.0",
package/src/BaseApi.ts ADDED
@@ -0,0 +1,115 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { ApiConfig, RequestMetadata, StreamError } from './types';
3
+ import { APIError } from './gen/models';
4
+ import { getRateLimitFromResponseHeader } from './utils/rate-limit';
5
+
6
+ export class BaseApi {
7
+ constructor(private readonly apiConfig: ApiConfig) {}
8
+
9
+ protected sendRequest = async <T>(
10
+ method: string,
11
+ url: string,
12
+ pathParams?: Record<string, string>,
13
+ queryParams?: Record<string, any>,
14
+ body?: any,
15
+ ) => {
16
+ queryParams = queryParams ?? {};
17
+ queryParams.api_key = this.apiConfig.apiKey;
18
+ const encodedParams = this.queryParamsStringify(queryParams);
19
+ if (pathParams) {
20
+ Object.keys(pathParams).forEach((paramName) => {
21
+ url = url.replace(`{${paramName}}`, pathParams[paramName]);
22
+ });
23
+ }
24
+ url += `?${encodedParams}`;
25
+ const clientRequestId = uuidv4();
26
+ const headers = {
27
+ Authorization: this.apiConfig.token,
28
+ 'stream-auth-type': 'jwt',
29
+ 'Content-Type': 'application/json',
30
+ 'X-Stream-Client': 'stream-node-' + process.env.PKG_VERSION,
31
+ 'Accept-Encoding': 'gzip',
32
+ 'x-client-request-id': clientRequestId,
33
+ };
34
+
35
+ const signal = AbortSignal.timeout(this.apiConfig.timeout);
36
+
37
+ try {
38
+ const response = await fetch(`${this.apiConfig.baseUrl}${url}`, {
39
+ signal,
40
+ method,
41
+ body: JSON.stringify(body),
42
+ headers,
43
+ });
44
+
45
+ const responseHeaders = response.headers;
46
+
47
+ const metadata: RequestMetadata = {
48
+ clientRequestId,
49
+ responseHeaders,
50
+ responseCode: response.status,
51
+ rateLimit: getRateLimitFromResponseHeader(responseHeaders),
52
+ };
53
+
54
+ if (response.status < 200 || response.status >= 300) {
55
+ const error = (await response.json()) as APIError;
56
+ throw new StreamError(
57
+ `Stream error code ${error.code}: ${error.message}`,
58
+ metadata,
59
+ error.code,
60
+ undefined,
61
+ );
62
+ }
63
+
64
+ const responseBody = (await response.json()) as T;
65
+
66
+ return { body: responseBody, metadata };
67
+ } catch (error: any) {
68
+ if (error instanceof StreamError) {
69
+ throw error;
70
+ }
71
+ const metadata: Partial<RequestMetadata> = {
72
+ clientRequestId,
73
+ responseCode: error.status,
74
+ };
75
+ if (error.name === 'AbortError' || error.name === 'TimeoutError') {
76
+ throw new StreamError(
77
+ `The request was aborted due to to the ${this.apiConfig.timeout}ms timeout, you can set the timeout in the StreamClient constructor`,
78
+ metadata,
79
+ undefined,
80
+ error,
81
+ );
82
+ } else {
83
+ throw new StreamError(
84
+ `The request failed due to an unexpected error`,
85
+ metadata,
86
+ error,
87
+ );
88
+ }
89
+ }
90
+ };
91
+
92
+ protected queryParamsStringify = (params: Record<string, any>) => {
93
+ const newParams = [];
94
+ for (const k in params) {
95
+ const param = params[k];
96
+ if (Array.isArray(param)) {
97
+ newParams.push(`${k}=${encodeURIComponent(param.join(','))}`);
98
+ } else if (param instanceof Date) {
99
+ newParams.push(param.toISOString());
100
+ } else if (typeof param === 'object') {
101
+ newParams.push(`${k}=${encodeURIComponent(JSON.stringify(param))}`);
102
+ } else {
103
+ if (
104
+ typeof param === 'string' ||
105
+ typeof param === 'number' ||
106
+ typeof param === 'boolean'
107
+ ) {
108
+ newParams.push(`${k}=${encodeURIComponent(param)}`);
109
+ }
110
+ }
111
+ }
112
+
113
+ return newParams.join('&');
114
+ };
115
+ }
package/src/StreamCall.ts CHANGED
@@ -1,209 +1,19 @@
1
- import { StreamClient } from './StreamClient';
2
- import {
3
- DeleteRecordingRequest,
4
- DeleteTranscriptionRequest,
5
- GetCallRequest,
6
- GetCallStatsRequest,
7
- ProductvideoApi,
8
- VideoBlockUserRequest,
9
- VideoDeleteCallRequest,
10
- VideoGetOrCreateCallRequest,
11
- VideoGoLiveRequest,
12
- VideoMuteUsersRequest,
13
- VideoPinRequest,
14
- VideoQueryCallMembersRequest,
15
- VideoSendCallEventRequest,
16
- VideoStartRecordingRequest,
17
- VideoStartTranscriptionRequest,
18
- VideoUnblockUserRequest,
19
- VideoUnpinRequest,
20
- VideoUpdateCallMembersRequest,
21
- VideoUpdateCallRequest,
22
- VideoUpdateUserPermissionsRequest,
23
- } from './gen/video';
1
+ import { QueryCallMembersRequest } from './gen/models';
2
+ import { CallApi } from './gen/video/CallApi';
24
3
  import { OmitTypeId } from './types';
25
4
 
26
- export class StreamCall {
27
- private readonly baseRequest: { type: string; id: string };
28
- private readonly apiClient: ProductvideoApi;
29
-
30
- constructor(
31
- private readonly streamClient: StreamClient,
32
- public readonly type: string,
33
- public readonly id: string,
34
- ) {
35
- this.baseRequest = { id: this.id, type: this.type };
36
- const configuration = this.streamClient.getConfiguration('video');
37
- this.apiClient = new ProductvideoApi(configuration);
38
- }
39
-
5
+ export class StreamCall extends CallApi {
40
6
  get cid() {
41
7
  return `${this.type}:${this.id}`;
42
8
  }
43
9
 
44
- blockUser = (videoBlockUserRequest: VideoBlockUserRequest) => {
45
- return this.apiClient.blockUser({
46
- ...this.baseRequest,
47
- videoBlockUserRequest,
48
- });
49
- };
50
-
51
- endCall = () => {
52
- return this.apiClient.endCall({ ...this.baseRequest });
53
- };
54
-
55
- get = (request?: OmitTypeId<GetCallRequest>) => {
56
- return this.apiClient.getCall({ ...(request ?? {}), ...this.baseRequest });
57
- };
58
-
59
- delete = (videoDeleteCallRequest?: VideoDeleteCallRequest) => {
60
- return this.apiClient.deleteCall({
61
- ...this.baseRequest,
62
- videoDeleteCallRequest: videoDeleteCallRequest ?? null,
63
- });
64
- };
65
-
66
- getOrCreate = (videoGetOrCreateCallRequest?: VideoGetOrCreateCallRequest) => {
67
- return this.apiClient.getOrCreateCall({
68
- ...this.baseRequest,
69
- videoGetOrCreateCallRequest: videoGetOrCreateCallRequest ?? {},
70
- });
71
- };
72
-
73
- getSessionStatistics = (request: OmitTypeId<GetCallStatsRequest>) => {
74
- return this.apiClient.getCallStats({ ...this.baseRequest, ...request });
75
- };
76
-
77
- create = (getOrCreateCallRequest?: VideoGetOrCreateCallRequest) => {
78
- return this.getOrCreate(getOrCreateCallRequest);
79
- };
80
-
81
- goLive = (videoGoLiveRequest?: VideoGoLiveRequest) => {
82
- return this.apiClient.goLive({
83
- ...this.baseRequest,
84
- videoGoLiveRequest: videoGoLiveRequest ?? {},
85
- });
86
- };
87
-
88
- listRecordings = () => {
89
- return this.apiClient.listRecordings({
90
- ...this.baseRequest,
91
- });
92
- };
93
-
94
- deleteRecording = (request: OmitTypeId<DeleteRecordingRequest>) => {
95
- return this.apiClient.deleteRecording({ ...this.baseRequest, ...request });
96
- };
97
-
98
- listTranscriptions = () => {
99
- return this.apiClient.listTranscriptions({
100
- ...this.baseRequest,
101
- });
102
- };
103
-
104
- muteUsers = (videoMuteUsersRequest: VideoMuteUsersRequest) => {
105
- return this.apiClient.muteUsers({
106
- ...this.baseRequest,
107
- videoMuteUsersRequest,
108
- });
109
- };
110
-
111
- queryMembers = (request?: OmitTypeId<VideoQueryCallMembersRequest>) => {
112
- return this.apiClient.queryCallMembers({
113
- videoQueryCallMembersRequest: { ...(request ?? {}), ...this.baseRequest },
114
- });
115
- };
116
-
117
- sendCustomEvent = (videoSendCallEventRequest: VideoSendCallEventRequest) => {
118
- return this.apiClient.sendCallEvent({
119
- videoSendCallEventRequest,
120
- ...this.baseRequest,
121
- });
122
- };
123
-
124
- startHLSBroadcasting = () => {
125
- return this.apiClient.startHLSBroadcasting({ ...this.baseRequest });
126
- };
127
-
128
- startRecording = (request?: VideoStartRecordingRequest) => {
129
- return this.apiClient.startRecording({
130
- ...this.baseRequest,
131
- videoStartRecordingRequest: request ?? {},
132
- });
133
- };
134
-
135
- startTranscription = (
136
- videoStartTranscriptionRequest: VideoStartTranscriptionRequest = {},
137
- ) => {
138
- return this.apiClient.startTranscription({
139
- ...this.baseRequest,
140
- videoStartTranscriptionRequest,
141
- });
142
- };
143
-
144
- deleteTranscription = (request: OmitTypeId<DeleteTranscriptionRequest>) => {
145
- return this.apiClient.deleteTranscription({
146
- ...this.baseRequest,
147
- ...request,
148
- });
149
- };
150
-
151
- stopHLSBroadcasting = () => {
152
- return this.apiClient.stopHLSBroadcasting({ ...this.baseRequest });
153
- };
154
-
155
- stopLive = () => {
156
- return this.apiClient.stopLive({ ...this.baseRequest });
157
- };
158
-
159
- stopRecording = () => {
160
- return this.apiClient.stopRecording({ ...this.baseRequest });
161
- };
162
-
163
- stopTranscription = () => {
164
- return this.apiClient.stopTranscription({ ...this.baseRequest });
165
- };
166
-
167
- unblockUser = (videoUnblockUserRequest: VideoUnblockUserRequest) => {
168
- return this.apiClient.unblockUser({
169
- videoUnblockUserRequest,
170
- ...this.baseRequest,
171
- });
172
- };
173
-
174
- update = (videoUpdateCallRequest: VideoUpdateCallRequest) => {
175
- return this.apiClient.updateCall({
176
- videoUpdateCallRequest,
177
- ...this.baseRequest,
178
- });
179
- };
180
-
181
- updateCallMembers = (
182
- videoUpdateCallMembersRequest: VideoUpdateCallMembersRequest,
183
- ) => {
184
- return this.apiClient.updateCallMembers({
185
- videoUpdateCallMembersRequest,
186
- ...this.baseRequest,
187
- });
188
- };
189
-
190
- updateUserPermissions = (
191
- videoUpdateUserPermissionsRequest: VideoUpdateUserPermissionsRequest,
192
- ) => {
193
- return this.apiClient.updateUserPermissions({
194
- videoUpdateUserPermissionsRequest,
195
- ...this.baseRequest,
196
- });
197
- };
198
-
199
- pinVideo = (videoPinRequest: VideoPinRequest) => {
200
- return this.apiClient.videoPin({ videoPinRequest, ...this.baseRequest });
201
- };
10
+ create = this.getOrCreate;
202
11
 
203
- unpinVideo = (videoUnpinRequest: VideoUnpinRequest) => {
204
- return this.apiClient.videoUnpin({
205
- videoUnpinRequest,
206
- ...this.baseRequest,
12
+ queryMembers = (request?: OmitTypeId<QueryCallMembersRequest>) => {
13
+ return this.videoApi.queryCallMembers({
14
+ id: this.id,
15
+ type: this.type,
16
+ ...(request ?? {}),
207
17
  });
208
18
  };
209
19
  }