@camera.ui/camera-ui-ring 0.0.21 → 0.0.23
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/config.schema.json +8 -43
- package/dist/camera.d.ts +24 -0
- package/dist/camera.js +227 -0
- package/dist/camera.js.map +1 -0
- package/dist/index.d.ts +22 -3
- package/dist/index.js +146 -119
- package/dist/index.js.map +1 -1
- package/dist/peer.d.ts +5 -8
- package/dist/peer.js +18 -34
- package/dist/peer.js.map +1 -1
- package/dist/types.d.ts +1 -22
- package/dist/types.js +1 -2
- package/package.json +27 -18
- package/dist/contract.d.ts +0 -2
- package/dist/contract.js +0 -9
- package/dist/contract.js.map +0 -1
- package/dist/server.d.ts +0 -14
- package/dist/server.js +0 -105
- package/dist/server.js.map +0 -1
- package/dist/ws.d.ts +0 -21
- package/dist/ws.js +0 -201
- package/dist/ws.js.map +0 -1
- package/example-config.json +0 -16
package/dist/index.js
CHANGED
|
@@ -1,47 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const types_1 = require("@camera.ui/types");
|
|
6
|
-
const contract_1 = require("./contract");
|
|
7
|
-
const ws_1 = require("./ws");
|
|
8
|
-
const server_1 = require("./server");
|
|
9
|
-
exports.default = (api) => api.registerPlugin(RingPlugin, contract_1.pluginContract);
|
|
10
|
-
class RingPlugin extends types_1.BasePlugin {
|
|
1
|
+
import { RingApi } from 'ring-client-api';
|
|
2
|
+
import { RingRestClient } from 'ring-client-api/rest-client';
|
|
3
|
+
import { Camera } from './camera.js';
|
|
4
|
+
export default class RingPlugin {
|
|
11
5
|
config;
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
logger;
|
|
7
|
+
api;
|
|
8
|
+
cameras = new Map();
|
|
9
|
+
restClient = new Map();
|
|
14
10
|
ringConnections = new Map();
|
|
15
|
-
|
|
16
|
-
constructor(
|
|
17
|
-
|
|
18
|
-
this.
|
|
19
|
-
this.config
|
|
20
|
-
this.config.
|
|
21
|
-
this.
|
|
11
|
+
ringCamerasMap = new Map();
|
|
12
|
+
constructor(logger, api) {
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
this.api = api;
|
|
15
|
+
this.config = api.configService.all();
|
|
16
|
+
this.config.homes = api.configService.get('homes', [], (value) => Array.isArray(value), false, true);
|
|
17
|
+
this.api.deviceManager.on('cameraDeselected', (cameraId) => {
|
|
18
|
+
const cameraDevice = this.cameras.get(cameraId);
|
|
19
|
+
const nativeId = cameraDevice?.nativeId;
|
|
20
|
+
const ringCamera = nativeId ? this.ringCamerasMap.get(nativeId) : undefined;
|
|
21
|
+
ringCamera?.disconnect();
|
|
22
|
+
this.ringCamerasMap.delete(nativeId);
|
|
23
|
+
this.cameras.delete(cameraId);
|
|
24
|
+
});
|
|
22
25
|
this.api.on('finishLaunching', this.start.bind(this));
|
|
23
26
|
this.api.on('shutdown', this.stop.bind(this));
|
|
24
27
|
}
|
|
25
|
-
async start() {
|
|
26
|
-
this.proxyServer = new server_1.ProxyServer(this.config, this.cameras, this.ringCameraConnections, this.logger);
|
|
27
|
-
for (const home of this.config.homes) {
|
|
28
|
-
await this.connectHome(home);
|
|
29
|
-
}
|
|
30
|
-
// Remove orphaned cameras
|
|
31
|
-
for (const [cameraId, cameraDevice] of this.cameras) {
|
|
32
|
-
const ringCameraId = cameraDevice.nativeId;
|
|
33
|
-
if (!this.ringCameraConnections.get(ringCameraId)) {
|
|
34
|
-
this.logger.warn('Removing camera', cameraDevice.name);
|
|
35
|
-
this.cameras.delete(cameraId);
|
|
36
|
-
await this.api.deviceManager.removeCameraById(cameraDevice.id);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
stop() {
|
|
41
|
-
this.proxyServer?.close();
|
|
42
|
-
this.ringCameraConnections.forEach((connection) => connection.close());
|
|
43
|
-
this.ringConnections.forEach((ringApi) => ringApi.disconnect());
|
|
44
|
-
}
|
|
45
28
|
configureCameras(cameras) {
|
|
46
29
|
for (const camera of cameras) {
|
|
47
30
|
this.cameras.set(camera.id, camera);
|
|
@@ -50,19 +33,22 @@ class RingPlugin extends types_1.BasePlugin {
|
|
|
50
33
|
async onFormSubmit(actionId, home) {
|
|
51
34
|
switch (actionId) {
|
|
52
35
|
case 'onLogin':
|
|
53
|
-
|
|
36
|
+
case 'on2FA':
|
|
37
|
+
if (home.twoFactorCode) {
|
|
54
38
|
try {
|
|
55
|
-
const response = await this.generateToken(
|
|
56
|
-
email: home.email,
|
|
57
|
-
password: home.password,
|
|
58
|
-
code: home.pin,
|
|
59
|
-
});
|
|
39
|
+
const response = await this.generateToken(home.name, home.email, home.password, home.twoFactorCode);
|
|
60
40
|
if (response?.refreshToken) {
|
|
61
|
-
this.restClient
|
|
41
|
+
this.restClient.delete(home.name);
|
|
62
42
|
home.token = response.refreshToken;
|
|
63
|
-
this.
|
|
43
|
+
this.refreshConfig(home);
|
|
64
44
|
this.connectHome(home);
|
|
65
|
-
|
|
45
|
+
const formResponse = {
|
|
46
|
+
toast: {
|
|
47
|
+
message: 'Logged in',
|
|
48
|
+
type: 'success',
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
return formResponse;
|
|
66
52
|
}
|
|
67
53
|
else {
|
|
68
54
|
throw new Error('Failed to Login');
|
|
@@ -75,80 +61,117 @@ class RingPlugin extends types_1.BasePlugin {
|
|
|
75
61
|
}
|
|
76
62
|
// token was not valid, login again
|
|
77
63
|
try {
|
|
78
|
-
const response =
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
64
|
+
const response = await this.generateCode(home.name, home.email, home.password);
|
|
65
|
+
if (!response) {
|
|
66
|
+
throw new Error('Failed to get code');
|
|
67
|
+
}
|
|
82
68
|
if ('refreshToken' in response) {
|
|
83
|
-
|
|
84
|
-
this.restClient = undefined;
|
|
69
|
+
this.restClient.delete(home.name);
|
|
85
70
|
home.token = response.refreshToken;
|
|
86
|
-
this.
|
|
71
|
+
this.refreshConfig(home);
|
|
87
72
|
this.connectHome(home);
|
|
88
|
-
|
|
73
|
+
const formResponse = {
|
|
74
|
+
toast: {
|
|
75
|
+
message: 'Logged in!',
|
|
76
|
+
type: 'success',
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
return formResponse;
|
|
89
80
|
}
|
|
90
81
|
else {
|
|
91
|
-
|
|
82
|
+
const formResponse = {
|
|
83
|
+
schema: {
|
|
84
|
+
config: {
|
|
85
|
+
type: 'object',
|
|
86
|
+
title: 'Two-Factor Authentication (2FA)',
|
|
87
|
+
description: 'Enter the 2FA code',
|
|
88
|
+
required: true,
|
|
89
|
+
opened: true,
|
|
90
|
+
properties: {
|
|
91
|
+
twoFactorCode: {
|
|
92
|
+
type: 'string',
|
|
93
|
+
key: 'twoFactorCode',
|
|
94
|
+
title: 'Two-Factor Code',
|
|
95
|
+
description: 'Enter the two-factor code',
|
|
96
|
+
required: true,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
buttons: [
|
|
100
|
+
{
|
|
101
|
+
label: 'Authenticate',
|
|
102
|
+
onSubmit: 'on2FA',
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
toast: {
|
|
108
|
+
message: 'Two-Factor Authentication (2FA) Required!',
|
|
109
|
+
type: 'warning',
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
return formResponse;
|
|
92
113
|
}
|
|
93
114
|
}
|
|
94
115
|
catch (error) {
|
|
95
116
|
const message = `Failed to Link Account. Reason: ${error.message}`;
|
|
96
117
|
this.logger.error(home.name, message);
|
|
97
|
-
|
|
118
|
+
const formResponse = {
|
|
119
|
+
toast: {
|
|
120
|
+
message,
|
|
121
|
+
type: 'error',
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
return formResponse;
|
|
98
125
|
}
|
|
99
|
-
break;
|
|
100
126
|
default:
|
|
101
127
|
const message = `Unknown actionId: ${actionId}`;
|
|
102
|
-
this.logger.warn(message);
|
|
103
|
-
|
|
128
|
+
this.logger.warn(home.name, message);
|
|
129
|
+
const formResponse = {
|
|
130
|
+
toast: {
|
|
131
|
+
message,
|
|
132
|
+
type: 'error',
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
return formResponse;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async start() {
|
|
139
|
+
for (const home of this.config.homes) {
|
|
140
|
+
await this.connectHome(home);
|
|
141
|
+
}
|
|
142
|
+
// Remove orphaned cameras
|
|
143
|
+
for (const [cameraId, cameraDevice] of this.cameras) {
|
|
144
|
+
const ringCameraId = cameraDevice.nativeId;
|
|
145
|
+
if (!this.ringCamerasMap.get(ringCameraId)) {
|
|
146
|
+
this.logger.warn('Removing camera', cameraDevice.name);
|
|
147
|
+
this.cameras.delete(cameraId);
|
|
148
|
+
await this.api.deviceManager.removeCameraById(cameraDevice.id);
|
|
149
|
+
}
|
|
104
150
|
}
|
|
105
151
|
}
|
|
152
|
+
stop() {
|
|
153
|
+
this.ringCamerasMap.forEach((ringCamera) => ringCamera.disconnect());
|
|
154
|
+
this.ringConnections.forEach((ringApi) => ringApi.disconnect());
|
|
155
|
+
this.restClient.clear();
|
|
156
|
+
this.ringConnections.clear();
|
|
157
|
+
this.ringCamerasMap.clear();
|
|
158
|
+
}
|
|
106
159
|
async connectHome(home) {
|
|
107
160
|
try {
|
|
108
161
|
if (home.token) {
|
|
109
|
-
const api = new
|
|
162
|
+
const api = new RingApi({ refreshToken: home.token });
|
|
110
163
|
this.ringConnections.set(home.name, api);
|
|
111
164
|
api.onRefreshTokenUpdated.subscribe(async (refreshToken) => {
|
|
112
165
|
home.token = refreshToken.newRefreshToken;
|
|
113
|
-
this.
|
|
166
|
+
this.refreshConfig(home);
|
|
114
167
|
});
|
|
115
168
|
const ringCameras = await api.getCameras();
|
|
116
|
-
for (const
|
|
117
|
-
const ringCameraId =
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
snapshotSource: `http://localhost:${this.config.server.listen}/${ringCameraId}`,
|
|
123
|
-
};
|
|
124
|
-
if (this.config.server.username && this.config.server.password) {
|
|
125
|
-
proxyInfo.streamSource += `?username=${this.config.server.username}&password=${this.config.server.password}`;
|
|
126
|
-
proxyInfo.snapshotSource += `?username=${this.config.server.username}&password=${this.config.server.password}`;
|
|
127
|
-
}
|
|
128
|
-
let cameraDevice = Array.from(this.cameras.values()).find((camera) => camera.nativeId === ringCameraId);
|
|
129
|
-
if (!cameraDevice) {
|
|
130
|
-
this.logger.log('Adding camera', camera.name);
|
|
131
|
-
cameraDevice = await this.api.deviceManager.createCamera({
|
|
132
|
-
name: camera.name,
|
|
133
|
-
nativeId: ringCameraId,
|
|
134
|
-
model: 'Ring Camera',
|
|
135
|
-
sources: [
|
|
136
|
-
{
|
|
137
|
-
name: 'main',
|
|
138
|
-
roles: ['stream'],
|
|
139
|
-
urls: [proxyInfo.streamSource],
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
name: 'snapshot',
|
|
143
|
-
roles: ['snapshot'],
|
|
144
|
-
urls: [proxyInfo.snapshotSource],
|
|
145
|
-
},
|
|
146
|
-
],
|
|
147
|
-
});
|
|
148
|
-
this.cameras.set(cameraDevice.id, cameraDevice);
|
|
149
|
-
}
|
|
150
|
-
const webRtcProxy = new ws_1.WebsocketProxy(camera, cameraDevice, proxyInfo, this.logger);
|
|
151
|
-
this.ringCameraConnections.set(ringCameraId, webRtcProxy);
|
|
169
|
+
for (const ringCamera of ringCameras) {
|
|
170
|
+
const ringCameraId = ringCamera.id.toString();
|
|
171
|
+
this.ringCamerasMap.set(ringCameraId, ringCamera);
|
|
172
|
+
const camera = new Camera(this, home, ringCamera, this.logger);
|
|
173
|
+
await camera.createCameraDevice();
|
|
174
|
+
this.cameras.set(camera.cameraDevice.id, camera.cameraDevice);
|
|
152
175
|
}
|
|
153
176
|
}
|
|
154
177
|
else {
|
|
@@ -156,44 +179,48 @@ class RingPlugin extends types_1.BasePlugin {
|
|
|
156
179
|
}
|
|
157
180
|
}
|
|
158
181
|
catch (error) {
|
|
159
|
-
this.logger.error(home.name, error
|
|
160
|
-
console.log(error);
|
|
182
|
+
this.logger.error(home.name, error);
|
|
161
183
|
}
|
|
162
184
|
}
|
|
163
|
-
async generateCode(
|
|
164
|
-
this.logger.log(`Logging in with email '${email}'`);
|
|
165
|
-
|
|
185
|
+
async generateCode(homeName, email, password) {
|
|
186
|
+
this.logger.log(homeName, `Logging in with email '${email}'`);
|
|
187
|
+
const ringClient = new RingRestClient({
|
|
166
188
|
email,
|
|
167
189
|
password,
|
|
168
190
|
});
|
|
191
|
+
this.restClient.set(homeName, ringClient);
|
|
169
192
|
try {
|
|
170
|
-
const { refresh_token } = await
|
|
171
|
-
// If we get here, 2fa was not required.
|
|
172
|
-
// I'm not sure this is possible anymore, but it's here just in case
|
|
193
|
+
const { refresh_token } = await ringClient.getCurrentAuth();
|
|
173
194
|
return { refreshToken: refresh_token };
|
|
174
195
|
}
|
|
175
196
|
catch (error) {
|
|
176
|
-
if (
|
|
177
|
-
this.logger.log(
|
|
178
|
-
return { codePrompt:
|
|
197
|
+
if (ringClient.promptFor2fa) {
|
|
198
|
+
this.logger.log(homeName, ringClient.promptFor2fa);
|
|
199
|
+
return { codePrompt: ringClient.promptFor2fa };
|
|
179
200
|
}
|
|
180
|
-
this.logger.error(error
|
|
201
|
+
this.logger.error(homeName, error);
|
|
181
202
|
}
|
|
182
203
|
}
|
|
183
|
-
async generateToken(
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
204
|
+
async generateToken(homeName, email, password, code) {
|
|
205
|
+
let restClient = this.restClient.get(homeName);
|
|
206
|
+
if (!restClient) {
|
|
207
|
+
restClient = new RingRestClient({ email, password });
|
|
208
|
+
this.restClient.set(homeName, restClient);
|
|
209
|
+
}
|
|
210
|
+
this.logger.log(homeName, `Getting token for ${email} with code ${code}`);
|
|
187
211
|
try {
|
|
188
|
-
const authResponse = await
|
|
212
|
+
const authResponse = await restClient.getAuth(code);
|
|
189
213
|
return { refreshToken: authResponse.refresh_token };
|
|
190
214
|
}
|
|
191
215
|
catch (error) {
|
|
192
|
-
this.logger.error('Incorrect 2fa Code. Please check the code and try again', error
|
|
216
|
+
this.logger.error(homeName, 'Incorrect 2fa Code. Please check the code and try again', error);
|
|
193
217
|
}
|
|
194
218
|
}
|
|
195
|
-
|
|
196
|
-
|
|
219
|
+
refreshConfig(home) {
|
|
220
|
+
if ('twoFactorCode' in home) {
|
|
221
|
+
delete home.twoFactorCode;
|
|
222
|
+
}
|
|
223
|
+
this.api.configService.replaceOrAddItem('homes', 'name', home.name, home, true);
|
|
197
224
|
}
|
|
198
225
|
}
|
|
199
226
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/peer.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { MediaStreamTrack, RTCIceCandidate, RtcpPacket, RtpPacket } from 'werift';
|
|
2
1
|
import { ReplaySubject, Subject } from 'rxjs';
|
|
3
|
-
import {
|
|
2
|
+
import { MediaStreamTrack } from 'werift';
|
|
3
|
+
import type { BasicPeerConnection } from '@camera.ui/types';
|
|
4
|
+
import type { RTCIceCandidate, RTCSessionDescription, RtcpPacket, RtpPacket } from 'werift';
|
|
4
5
|
export declare class CustomPeerConnection implements BasicPeerConnection {
|
|
5
6
|
private pc;
|
|
6
|
-
private onRequestKeyFrame;
|
|
7
|
-
private cameraName;
|
|
8
|
-
private logger;
|
|
9
7
|
onAudioRtp: Subject<RtpPacket>;
|
|
10
8
|
onAudioRtcp: Subject<RtcpPacket>;
|
|
11
9
|
onVideoRtp: Subject<RtpPacket>;
|
|
@@ -13,13 +11,12 @@ export declare class CustomPeerConnection implements BasicPeerConnection {
|
|
|
13
11
|
onIceCandidate: Subject<RTCIceCandidate>;
|
|
14
12
|
onConnectionState: ReplaySubject<"closed" | "failed" | "disconnected" | "new" | "connecting" | "connected">;
|
|
15
13
|
returnAudioTrack: MediaStreamTrack;
|
|
16
|
-
constructor(
|
|
17
|
-
createOffer(): Promise<
|
|
14
|
+
constructor();
|
|
15
|
+
createOffer(): Promise<RTCSessionDescription>;
|
|
18
16
|
acceptAnswer(answer: {
|
|
19
17
|
type: 'answer';
|
|
20
18
|
sdp: string;
|
|
21
19
|
}): Promise<void>;
|
|
22
20
|
addIceCandidate(candidate: RTCIceCandidate): Promise<void>;
|
|
23
|
-
requestKeyFrame(): void;
|
|
24
21
|
close(): void;
|
|
25
22
|
}
|
package/dist/peer.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.CustomPeerConnection = void 0;
|
|
4
|
-
const werift_1 = require("werift");
|
|
5
|
-
const rxjs_1 = require("rxjs");
|
|
1
|
+
import { ReplaySubject, Subject } from 'rxjs';
|
|
2
|
+
import { MediaStreamTrack, RTCPeerConnection, RTCRtpCodecParameters } from 'werift';
|
|
6
3
|
const ringIceServers = [
|
|
7
4
|
'stun:stun.kinesisvideo.us-east-1.amazonaws.com:443',
|
|
8
5
|
'stun:stun.kinesisvideo.us-east-2.amazonaws.com:443',
|
|
@@ -13,30 +10,25 @@ const ringIceServers = [
|
|
|
13
10
|
'stun:stun3.l.google.com:19302',
|
|
14
11
|
'stun:stun4.l.google.com:19302',
|
|
15
12
|
];
|
|
16
|
-
class CustomPeerConnection {
|
|
13
|
+
export class CustomPeerConnection {
|
|
17
14
|
pc;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
returnAudioTrack = new werift_1.MediaStreamTrack({ kind: 'audio' });
|
|
28
|
-
constructor(cameraName, logger) {
|
|
29
|
-
this.logger = logger;
|
|
30
|
-
this.cameraName = cameraName;
|
|
31
|
-
const pc = (this.pc = new werift_1.RTCPeerConnection({
|
|
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() {
|
|
23
|
+
const pc = (this.pc = new RTCPeerConnection({
|
|
32
24
|
codecs: {
|
|
33
25
|
audio: [
|
|
34
|
-
new
|
|
26
|
+
new RTCRtpCodecParameters({
|
|
35
27
|
mimeType: 'audio/opus',
|
|
36
28
|
clockRate: 48000,
|
|
37
29
|
channels: 2,
|
|
38
30
|
}),
|
|
39
|
-
new
|
|
31
|
+
new RTCRtpCodecParameters({
|
|
40
32
|
mimeType: 'audio/PCMU',
|
|
41
33
|
clockRate: 8000,
|
|
42
34
|
channels: 1,
|
|
@@ -44,16 +36,12 @@ class CustomPeerConnection {
|
|
|
44
36
|
}),
|
|
45
37
|
],
|
|
46
38
|
video: [
|
|
47
|
-
new
|
|
39
|
+
new RTCRtpCodecParameters({
|
|
48
40
|
mimeType: 'video/H264',
|
|
49
41
|
clockRate: 90000,
|
|
50
42
|
rtcpFeedback: [{ type: 'transport-cc' }, { type: 'ccm', parameter: 'fir' }, { type: 'nack' }, { type: 'nack', parameter: 'pli' }, { type: 'goog-remb' }],
|
|
51
43
|
parameters: 'packetization-mode=1;profile-level-id=640029;level-asymmetry-allowed=1',
|
|
52
44
|
}),
|
|
53
|
-
new werift_1.RTCRtpCodecParameters({
|
|
54
|
-
mimeType: 'video/rtx',
|
|
55
|
-
clockRate: 90000,
|
|
56
|
-
}),
|
|
57
45
|
],
|
|
58
46
|
},
|
|
59
47
|
iceServers: ringIceServers.map((server) => ({ urls: server })),
|
|
@@ -105,15 +93,11 @@ class CustomPeerConnection {
|
|
|
105
93
|
async acceptAnswer(answer) {
|
|
106
94
|
await this.pc.setRemoteDescription(answer);
|
|
107
95
|
}
|
|
108
|
-
addIceCandidate(candidate) {
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
requestKeyFrame() {
|
|
112
|
-
this.onRequestKeyFrame.next();
|
|
96
|
+
async addIceCandidate(candidate) {
|
|
97
|
+
await this.pc.addIceCandidate(candidate);
|
|
113
98
|
}
|
|
114
99
|
close() {
|
|
115
|
-
this.pc.close().catch((
|
|
100
|
+
this.pc.close().catch(() => { });
|
|
116
101
|
}
|
|
117
102
|
}
|
|
118
|
-
exports.CustomPeerConnection = CustomPeerConnection;
|
|
119
103
|
//# sourceMappingURL=peer.js.map
|
package/dist/peer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer.js","sourceRoot":"","sources":["../src/peer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"peer.js","sourceRoot":"","sources":["../src/peer.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,31 +1,10 @@
|
|
|
1
|
-
export interface ProxyInfo {
|
|
2
|
-
ringCameraId: string;
|
|
3
|
-
streamSource: string;
|
|
4
|
-
snapshotSource: string;
|
|
5
|
-
pathName: string;
|
|
6
|
-
}
|
|
7
1
|
export interface RingHome {
|
|
8
2
|
name: string;
|
|
9
3
|
email: string;
|
|
10
4
|
password: string;
|
|
11
|
-
pin?: string;
|
|
12
5
|
token?: string;
|
|
13
6
|
}
|
|
14
7
|
export interface Config {
|
|
15
|
-
server: {
|
|
16
|
-
listen: number;
|
|
17
|
-
username?: string;
|
|
18
|
-
password?: string;
|
|
19
|
-
};
|
|
20
8
|
homes: RingHome[];
|
|
21
9
|
}
|
|
22
|
-
export
|
|
23
|
-
email: string;
|
|
24
|
-
password: string;
|
|
25
|
-
}
|
|
26
|
-
export interface TokenRequest {
|
|
27
|
-
email: string;
|
|
28
|
-
password: string;
|
|
29
|
-
code: string;
|
|
30
|
-
}
|
|
31
|
-
export type FormAction = 'onLogin';
|
|
10
|
+
export type FormAction = 'onLogin' | 'on2FA';
|
package/dist/types.js
CHANGED