@camera.ui/camera-ui-tuya 0.0.20 → 0.0.21

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.
package/dist/peer.js DELETED
@@ -1,268 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { ReplaySubject, Subject } from 'rxjs';
3
- import { MediaStreamTrack, RTCIceCandidate, RTCPeerConnection, RTCRtpCodecParameters } from 'werift';
4
- import { TuyaMQ } from './tuya/mq.js';
5
- export class CustomPeerConnection {
6
- pc;
7
- sessionId;
8
- platform;
9
- cameraDevice;
10
- cloudCamera;
11
- cameraLogger;
12
- mqtt;
13
- deviceWebRTConfig;
14
- mqttWebRTConfig;
15
- onAudioRtp = new Subject();
16
- onAudioRtcp = new Subject();
17
- onVideoRtp = new Subject();
18
- onVideoRtcp = new Subject();
19
- onIceCandidate = new Subject();
20
- onConnectionState = new ReplaySubject(1);
21
- returnAudioTrack = new MediaStreamTrack({ kind: 'audio' });
22
- constructor(platform, cameraDevice, cloudCamera) {
23
- this.platform = platform;
24
- this.cameraDevice = cameraDevice;
25
- this.cloudCamera = cloudCamera;
26
- this.cameraLogger = cameraDevice.logger;
27
- this.sessionId = randomUUID();
28
- }
29
- async createPeerConnection() {
30
- const deviceWebRTConfigResponse = await this.platform.cloud?.getDeviceWebRTConfig(this.cloudCamera);
31
- if (!deviceWebRTConfigResponse?.success) {
32
- throw new Error(`Failed to create device rtc config for ${this.cameraDevice.name}: request failed: ${deviceWebRTConfigResponse?.result}.`);
33
- }
34
- this.deviceWebRTConfig = deviceWebRTConfigResponse.result;
35
- const mqResponse = await this.platform.cloud?.getWebRTCMQConfig(this.deviceWebRTConfig);
36
- if (!mqResponse?.success) {
37
- throw new Error(`Failed to create rtc mqtt config for ${this.cameraDevice.name}: request failed: ${mqResponse?.result}.`);
38
- }
39
- this.mqttWebRTConfig = mqResponse.result;
40
- this.mqtt = new TuyaMQ(this.mqttWebRTConfig);
41
- await this.mqtt.connect();
42
- const iceServers = this.deviceWebRTConfig.p2p_config.ices.map((ice) => {
43
- return {
44
- credential: ice.credential,
45
- urls: ice.urls,
46
- username: ice.username,
47
- };
48
- });
49
- const pc = (this.pc = new RTCPeerConnection({
50
- codecs: {
51
- video: [
52
- new RTCRtpCodecParameters({
53
- mimeType: 'video/H264',
54
- clockRate: 90000,
55
- rtcpFeedback: [{ type: 'transport-cc' }, { type: 'ccm', parameter: 'fir' }, { type: 'nack' }, { type: 'nack', parameter: 'pli' }, { type: 'goog-remb' }],
56
- parameters: 'packetization-mode=1;profile-level-id=640029;level-asymmetry-allowed=1',
57
- }),
58
- ],
59
- audio: [
60
- new RTCRtpCodecParameters({
61
- mimeType: 'audio/PCMU',
62
- clockRate: 8000,
63
- channels: 1,
64
- payloadType: 0,
65
- }),
66
- ],
67
- },
68
- iceServers,
69
- iceTransportPolicy: 'all',
70
- bundlePolicy: 'max-bundle',
71
- }));
72
- const videoTransceiver = pc.addTransceiver('video', {
73
- direction: 'recvonly',
74
- });
75
- const audioTransceiver = pc.addTransceiver(this.returnAudioTrack, {
76
- direction: 'sendrecv',
77
- });
78
- audioTransceiver.onTrack.subscribe((track) => {
79
- track.onReceiveRtp.subscribe((rtp) => {
80
- this.onAudioRtp.next(rtp);
81
- });
82
- track.onReceiveRtcp.subscribe((rtcp) => {
83
- this.onAudioRtcp.next(rtcp);
84
- });
85
- });
86
- videoTransceiver.onTrack.subscribe((track) => {
87
- track.onReceiveRtp.subscribe((rtp) => {
88
- this.onVideoRtp.next(rtp);
89
- });
90
- track.onReceiveRtcp.subscribe((rtcp) => {
91
- this.onVideoRtcp.next(rtcp);
92
- });
93
- track.onReceiveRtp.once(() => {
94
- setInterval(() => videoTransceiver.receiver.sendRtcpPLI(track.ssrc), 4000);
95
- });
96
- });
97
- pc.onIceCandidate.subscribe((iceCandidate) => {
98
- if (iceCandidate) {
99
- this.onIceCandidate.next(iceCandidate);
100
- }
101
- });
102
- pc.iceConnectionStateChange.subscribe(() => {
103
- if (pc.iceConnectionState === 'closed') {
104
- this.onConnectionState.next('closed');
105
- }
106
- });
107
- pc.connectionStateChange.subscribe(() => {
108
- this.onConnectionState.next(pc.connectionState);
109
- });
110
- this.onIceCandidate.subscribe((candidate) => {
111
- if (!candidate.candidate || candidate.candidate == '') {
112
- return;
113
- }
114
- this.sendIceCandidate(candidate);
115
- });
116
- const offer = await this.createOffer();
117
- const offerMessage = {
118
- mode: 'webrtc',
119
- sdp: offer.sdp,
120
- auth: this.deviceWebRTConfig.auth,
121
- stream_type: 1,
122
- };
123
- const webRTCMessage = {
124
- protocol: 302,
125
- pv: '2.2',
126
- t: Date.now(),
127
- data: {
128
- header: {
129
- type: 'offer',
130
- from: this.mqttWebRTConfig.source_topic.split('/')[3],
131
- to: this.deviceWebRTConfig.id,
132
- sub_dev_id: '',
133
- sessionid: this.sessionId,
134
- moto_id: this.deviceWebRTConfig.moto_id,
135
- tid: '',
136
- },
137
- msg: offerMessage,
138
- },
139
- };
140
- this.mqtt.publish(JSON.stringify(webRTCMessage));
141
- const answer = await this.createLocalDescription();
142
- await this.acceptAnswer(answer);
143
- }
144
- async createOffer() {
145
- if (!this.pc) {
146
- throw new Error('Peer connection not created');
147
- }
148
- const offer = await this.pc.createOffer();
149
- this.pc.setLocalDescription(offer);
150
- return offer;
151
- }
152
- async acceptAnswer(answer) {
153
- if (!this.pc) {
154
- throw new Error('Peer connection not created');
155
- }
156
- await this.pc.setRemoteDescription(answer);
157
- }
158
- async addIceCandidate(candidate) {
159
- if (!this.pc) {
160
- throw new Error('Peer connection not created');
161
- }
162
- await this.pc.addIceCandidate(candidate);
163
- }
164
- async close() {
165
- try {
166
- this.endSession();
167
- await this.pc?.close();
168
- }
169
- catch {
170
- //
171
- }
172
- this.reset();
173
- }
174
- async createLocalDescription() {
175
- return new Promise((resolve, reject) => {
176
- const messageHandler = (_client, message) => {
177
- const webRTCMessage = JSON.parse(message);
178
- if (webRTCMessage.data.header.type == 'answer') {
179
- const answer = webRTCMessage.data.msg;
180
- resolve({
181
- sdp: answer.sdp,
182
- type: 'answer',
183
- });
184
- }
185
- else if (webRTCMessage.data.header.type == 'candidate') {
186
- const candidate = webRTCMessage.data.msg;
187
- if (!candidate?.candidate || candidate.candidate == '') {
188
- return;
189
- }
190
- this.addIceCandidate(new RTCIceCandidate({
191
- candidate: candidate.candidate,
192
- sdpMid: '0',
193
- sdpMLineIndex: 0,
194
- }));
195
- }
196
- else {
197
- this.cameraLogger.error('[WebRTC] - TuyaMQ: There was an error trying to get an answer or candidate from TuyaMQ.');
198
- this.mqtt?.removeMessageListener(messageHandler);
199
- this.close();
200
- reject(new Error('[WebRTC] - TuyaMQ: There was an error trying to get an answer or candidate from TuyaMQ.'));
201
- }
202
- };
203
- this.mqtt?.message(messageHandler);
204
- });
205
- }
206
- async sendIceCandidate(candidate) {
207
- if (!this.deviceWebRTConfig || !this.mqttWebRTConfig || !this.mqtt) {
208
- return;
209
- }
210
- const acandidate = candidate.candidate ? `a=${candidate.candidate}` : '';
211
- const candidateMessage = {
212
- mode: 'webrtc',
213
- candidate: acandidate,
214
- };
215
- const webRTCMQMessage = {
216
- protocol: 302,
217
- pv: '2.2',
218
- t: Date.now(),
219
- data: {
220
- header: {
221
- type: 'candidate',
222
- from: this.mqttWebRTConfig.source_topic.split('/')[3],
223
- to: this.deviceWebRTConfig.id,
224
- sub_dev_id: '',
225
- sessionid: this.sessionId,
226
- moto_id: this.deviceWebRTConfig.moto_id,
227
- tid: '',
228
- },
229
- msg: candidateMessage,
230
- },
231
- };
232
- this.mqtt.publish(JSON.stringify(webRTCMQMessage));
233
- }
234
- endSession() {
235
- if (!this.deviceWebRTConfig || !this.mqttWebRTConfig || !this.mqtt) {
236
- return;
237
- }
238
- const webRTCMessage = {
239
- protocol: 302,
240
- pv: '2.2',
241
- t: Date.now(),
242
- data: {
243
- header: {
244
- type: 'disconnect',
245
- from: this.mqttWebRTConfig.source_topic.split('/')[3],
246
- to: this.deviceWebRTConfig.id,
247
- sub_dev_id: '',
248
- sessionid: this.sessionId,
249
- moto_id: this.deviceWebRTConfig.moto_id,
250
- tid: '',
251
- },
252
- msg: {
253
- mode: 'webrtc',
254
- },
255
- },
256
- };
257
- this.mqtt.publish(JSON.stringify(webRTCMessage));
258
- this.mqtt.stop();
259
- }
260
- reset() {
261
- this.mqtt?.stop();
262
- this.mqtt = undefined;
263
- this.deviceWebRTConfig = undefined;
264
- this.mqttWebRTConfig = undefined;
265
- this.pc = undefined;
266
- }
267
- }
268
- //# sourceMappingURL=peer.js.map
package/dist/peer.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"peer.js","sourceRoot":"","sources":["../src/peer.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import type { Config } from '../types.js';
2
- import type { DeviceWebRTConfig, MQTTConfig, RTSPToken, TuyaDeviceConfig, TuyaDeviceStatus, TuyaHomeConfig, TuyaResponse } from './const.js';
3
- export declare class TuyaCloud {
4
- private readonly config;
5
- private readonly nonce;
6
- private session?;
7
- private client;
8
- private readonly userId;
9
- private readonly clientId;
10
- private readonly secret;
11
- private readonly country;
12
- private readonly whitelist;
13
- private _cameras;
14
- get cameras(): TuyaDeviceConfig[] | undefined;
15
- constructor(config: Config);
16
- login(): Promise<boolean>;
17
- isLoggedIn(): boolean;
18
- updateDevice(device: TuyaDeviceConfig, statuses: TuyaDeviceStatus[]): Promise<boolean>;
19
- getHomeList(): Promise<TuyaHomeConfig[]>;
20
- getHomeDeviceList(homeID: number): Promise<TuyaDeviceConfig[]>;
21
- fetchDevices(): Promise<boolean>;
22
- getRTSPS(camera: TuyaDeviceConfig): Promise<RTSPToken | undefined>;
23
- getDeviceWebRTConfig(camera: TuyaDeviceConfig): Promise<TuyaResponse<DeviceWebRTConfig>>;
24
- getWebRTCMQConfig(webRTCDeviceConfig: DeviceWebRTConfig): Promise<TuyaResponse<MQTTConfig>>;
25
- getSessionUserId(): string | undefined;
26
- get<T>(path: string, query?: {
27
- [k: string]: any;
28
- }): Promise<TuyaResponse<T>>;
29
- post<T>(path: string, body?: {
30
- [k: string]: any;
31
- }): Promise<TuyaResponse<T>>;
32
- private request;
33
- private getStringToSign;
34
- private refreshAccessTokenIfNeeded;
35
- }
@@ -1,227 +0,0 @@
1
- import axios from 'axios';
2
- import { randomBytes } from 'crypto';
3
- import CryptoJS from 'crypto-js';
4
- import { getTuyaCloudEndpoint, TUYA_COUNTRIES } from './utils.js';
5
- export class TuyaCloud {
6
- config;
7
- // Tuya IoT Cloud API
8
- nonce;
9
- session = undefined;
10
- client;
11
- userId;
12
- clientId;
13
- secret;
14
- country;
15
- whitelist = [];
16
- _cameras;
17
- get cameras() {
18
- return this._cameras;
19
- }
20
- constructor(config) {
21
- this.config = config;
22
- this.userId = config.home.userId;
23
- this.clientId = config.home.accessId;
24
- this.secret = config.home.accessKey;
25
- this.nonce = CryptoJS.lib.WordArray.random(16).toString();
26
- this.country = TUYA_COUNTRIES.find((value) => value.country == config.home.country);
27
- this.whitelist = config.home.homeWhitelist;
28
- this.client = new axios.Axios({
29
- baseURL: getTuyaCloudEndpoint(this.country),
30
- timeout: 5 * 1e3,
31
- });
32
- this._cameras = undefined;
33
- }
34
- async login() {
35
- await this.refreshAccessTokenIfNeeded();
36
- return this.isLoggedIn();
37
- }
38
- isLoggedIn() {
39
- return this.session !== undefined && this.session.tokenExpiresAt.getTime() > Date.now();
40
- }
41
- // Set Device Status
42
- async updateDevice(device, statuses) {
43
- if (!device) {
44
- return false;
45
- }
46
- const result = await this.post(`/v1.0/devices/${device.id}/commands`, {
47
- commands: statuses,
48
- });
49
- return result.success && result.result;
50
- }
51
- // Get Homes
52
- async getHomeList() {
53
- const response = await this.get(`/v1.0/users/${this.userId}/homes`);
54
- if (!response.success) {
55
- return [];
56
- }
57
- return response.result;
58
- }
59
- async getHomeDeviceList(homeID) {
60
- const response = await this.get(`/v1.0/homes/${homeID}/devices`);
61
- if (!response.success) {
62
- return [];
63
- }
64
- return response.result;
65
- }
66
- // Get Devices
67
- async fetchDevices() {
68
- const homeResponse = await this.getHomeList();
69
- const cameras = [];
70
- const homeIds = homeResponse.map((home) => home.home_id.toString());
71
- for (const id of homeIds) {
72
- if (this.whitelist.length && !this.whitelist.includes(id)) {
73
- continue;
74
- }
75
- const devices = await this.getHomeDeviceList(parseInt(id));
76
- cameras.push(...devices);
77
- }
78
- for (const state of cameras) {
79
- const response = await this.get(`/v1.0/devices/${state.id}/functions`);
80
- if (!response.success) {
81
- continue;
82
- }
83
- state.functions = response.result.functions;
84
- }
85
- this._cameras = cameras.filter((element) => element.category === 'sp');
86
- return true;
87
- }
88
- // Camera Functions
89
- async getRTSPS(camera) {
90
- const response = await this.post(`/v1.0/devices/${camera.id}/stream/actions/allocate`, { type: 'rtsp' });
91
- if (response.success) {
92
- return {
93
- url: response.result.url,
94
- expires: new Date(response.t + 30 * 1000), // This will expire in 30 seconds.
95
- };
96
- }
97
- else {
98
- return undefined;
99
- }
100
- }
101
- async getDeviceWebRTConfig(camera) {
102
- const response = await this.get(`/v1.0/users/${this.userId}/devices/${camera.id}/webrtc-configs`);
103
- return response;
104
- }
105
- async getWebRTCMQConfig(webRTCDeviceConfig) {
106
- const response = await this.post('/v1.0/open-hub/access/config', {
107
- link_id: randomBytes(8).readUInt8(),
108
- uid: this.userId,
109
- link_type: 'mqtt',
110
- topics: 'ipc',
111
- });
112
- if (response.success) {
113
- response.result = {
114
- ...response.result,
115
- sink_topic: response.result.sink_topic.ipc.replace('{device_id}', webRTCDeviceConfig.id).replace('moto_id', webRTCDeviceConfig.moto_id),
116
- source_topic: response.result.source_topic.ipc,
117
- };
118
- return response;
119
- }
120
- return response;
121
- }
122
- getSessionUserId() {
123
- return this.session?.uid;
124
- }
125
- // Tuya IoT Cloud Requests API
126
- async get(path, query = {}) {
127
- return this.request('GET', path, query);
128
- }
129
- async post(path, body = {}) {
130
- return this.request('POST', path, {}, body);
131
- }
132
- async request(method, path, query = {}, body = {}) {
133
- if (!(await this.login())) {
134
- return {
135
- result: undefined,
136
- success: false,
137
- t: Date.now(),
138
- };
139
- }
140
- const timestamp = Date.now().toString();
141
- const headers = { client_id: this.clientId };
142
- const stringToSign = this.getStringToSign(method, path, query, headers, body);
143
- const sign = CryptoJS.HmacSHA256(this.clientId + this.session?.accessToken + timestamp + this.nonce + stringToSign, this.secret)
144
- .toString()
145
- .toUpperCase();
146
- const requestHeaders = {
147
- client_id: this.clientId,
148
- sign: sign,
149
- sign_method: 'HMAC-SHA256',
150
- t: timestamp,
151
- access_token: this.session.accessToken,
152
- 'Signature-Headers': Object.keys(headers).join(':'),
153
- nonce: this.nonce,
154
- };
155
- return this.client
156
- .request({
157
- method,
158
- url: path,
159
- data: Object.keys(body).length > 0 ? JSON.stringify(body) : undefined,
160
- params: query,
161
- headers: requestHeaders,
162
- responseType: 'json',
163
- transformResponse: (data) => JSON.parse(data),
164
- })
165
- .then((value) => {
166
- return value.data;
167
- });
168
- }
169
- getStringToSign(method, path, query = {}, headers = {}, body = {}) {
170
- const isQueryEmpty = Object.keys(query).length == 0;
171
- const isHeaderEmpty = Object.keys(headers).length == 0;
172
- const isBodyEmpty = Object.keys(body).length == 0;
173
- const httpMethod = method.toUpperCase();
174
- const url = path +
175
- (isQueryEmpty
176
- ? ''
177
- : '?' +
178
- Object.keys(query)
179
- .map((key) => `${key}=${query[key]}`)
180
- .join('&'));
181
- const contentHashed = CryptoJS.SHA256(isBodyEmpty ? '' : JSON.stringify(body)).toString();
182
- const headersParsed = Object.keys(headers)
183
- .map((key) => `${key}:${headers[key]}`)
184
- .join('\n');
185
- const headersStr = isHeaderEmpty ? '' : headersParsed + '\n';
186
- const signStr = [httpMethod, contentHashed, headersStr, url].join('\n');
187
- return signStr;
188
- }
189
- async refreshAccessTokenIfNeeded() {
190
- if (this.isLoggedIn()) {
191
- return;
192
- }
193
- let url;
194
- if (!this.session) {
195
- url = '/v1.0/token?grant_type=1';
196
- }
197
- else {
198
- url = `/v1.0/token/${this.session.refreshToken}`;
199
- }
200
- const timestamp = new Date().getTime().toString();
201
- const stringToSign = this.getStringToSign('GET', url);
202
- const signString = CryptoJS.HmacSHA256(this.clientId + timestamp + stringToSign, this.secret)
203
- .toString()
204
- .toUpperCase();
205
- const headers = {
206
- t: timestamp,
207
- sign_method: 'HMAC-SHA256',
208
- client_id: this.clientId,
209
- sign: signString,
210
- };
211
- const { data } = await this.client.get(url, { headers });
212
- const response = JSON.parse(data);
213
- if (!response.success) {
214
- this.session = undefined;
215
- }
216
- else {
217
- const newExpiration = new Date(Date.now() + response.result.expire_time * 1000);
218
- this.session = {
219
- accessToken: response.result.access_token,
220
- refreshToken: response.result.refresh_token,
221
- tokenExpiresAt: newExpiration,
222
- uid: response.result.uid,
223
- };
224
- }
225
- }
226
- }
227
- //# sourceMappingURL=cloud.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/tuya/cloud.ts"],"names":[],"mappings":"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"}
@@ -1,121 +0,0 @@
1
- export interface TuyaResponse<T> {
2
- success: boolean;
3
- t: number;
4
- result: T;
5
- }
6
- export interface TuyaHomeConfig {
7
- geo_name: string;
8
- home_id: number;
9
- name: string;
10
- lat: number;
11
- lon: number;
12
- role: string;
13
- }
14
- export interface TuyaDeviceConfig {
15
- id: string;
16
- name: string;
17
- local_key: string;
18
- category: string;
19
- product_id: string;
20
- product_name: string;
21
- sub: boolean;
22
- uuid: string;
23
- online: boolean;
24
- icon: string;
25
- ip: string;
26
- time_zone: string;
27
- active_time: number;
28
- create_time: number;
29
- update_time: number;
30
- status: TuyaDeviceStatus[];
31
- functions?: DeviceFunction[];
32
- uid: string;
33
- biz_type: number;
34
- model: string;
35
- owner_id: string;
36
- }
37
- export interface TuyaDeviceStatus {
38
- code: string;
39
- value: any;
40
- }
41
- export interface DeviceFunction {
42
- code: string;
43
- type: string;
44
- values: string;
45
- desc: string;
46
- name: string;
47
- }
48
- export interface RTSPToken {
49
- url: string;
50
- expires: Date;
51
- }
52
- export interface MQTTConfig {
53
- url: string;
54
- username: string;
55
- password: string;
56
- client_id: string;
57
- source_topic: string;
58
- sink_topic: string;
59
- expire_time: number;
60
- }
61
- export interface DeviceWebRTConfig {
62
- audio_attributes: AudioAttributes;
63
- auth: string;
64
- id: string;
65
- moto_id: string;
66
- p2p_config: P2PConfig;
67
- skill: string;
68
- supports_webrtc: boolean;
69
- vedio_clarity: number;
70
- }
71
- interface AudioAttributes {
72
- call_mode: number[];
73
- hardware_capability: number[];
74
- }
75
- interface P2PConfig {
76
- ices: Ice[];
77
- }
78
- interface Ice {
79
- urls: string;
80
- credential?: string;
81
- ttl?: number;
82
- username?: string;
83
- }
84
- export interface WebRTCMQMessage {
85
- protocol: number;
86
- pv: string;
87
- t: number;
88
- data: {
89
- header: {
90
- type: 'offer' | 'answer' | 'candidate' | 'disconnect';
91
- from: string;
92
- to: string;
93
- sub_dev_id: string;
94
- sessionid: string;
95
- moto_id: string;
96
- tid: string;
97
- };
98
- msg: OfferMessage | AnswerMessage | CandidateMessage | DisconnectMessage;
99
- };
100
- }
101
- export interface OfferMessage {
102
- mode: string;
103
- sdp: string;
104
- auth: string;
105
- stream_type: number;
106
- }
107
- export interface AnswerMessage {
108
- mode: string;
109
- sdp: string;
110
- stream_type: number;
111
- token: Ice[];
112
- replay: any;
113
- }
114
- export interface CandidateMessage {
115
- mode: string;
116
- candidate: string;
117
- }
118
- export interface DisconnectMessage {
119
- mode: string;
120
- }
121
- export {};