@reactoo/watchtogether-sdk-js 2.5.74 → 2.5.75
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/example/index.html
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
<button onclick="unpublish()">unpublish</button>
|
|
18
18
|
<button onclick="toggleVideo()">toggle video</button>
|
|
19
19
|
<button onclick="toggleAudio()">toggle audio</button>
|
|
20
|
+
<button onclick="hento()">sign to goole</button>
|
|
20
21
|
</div>
|
|
21
22
|
|
|
22
23
|
</div>
|
|
@@ -41,6 +42,14 @@
|
|
|
41
42
|
// });
|
|
42
43
|
// }
|
|
43
44
|
|
|
45
|
+
function hento() {
|
|
46
|
+
Instance.auth.socialAuth({provider: 'youtube', action: 'generateAuthUrl'})
|
|
47
|
+
.then(r => {
|
|
48
|
+
window.open(r.data.redirectUrl);
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
|
|
44
53
|
function createParticipant(data, isRemote = false) {
|
|
45
54
|
|
|
46
55
|
let id = `part_${data.id}`;
|
|
@@ -97,7 +106,7 @@
|
|
|
97
106
|
Instance.room.getSessionByConstructId(constructId).toggleAudio()
|
|
98
107
|
}
|
|
99
108
|
|
|
100
|
-
let Instance = WatchTogetherSDK({debug:true, apiUrl: 'https://api.reactoo.com/
|
|
109
|
+
let Instance = WatchTogetherSDK({debug:true, apiUrl: 'https://api.reactoo.com/stefan/swagger.json'})({instanceType:'reactooDemo'});
|
|
101
110
|
|
|
102
111
|
Instance.auth.$on('login', () => {
|
|
103
112
|
console.log('We are in');
|
|
@@ -122,9 +131,7 @@
|
|
|
122
131
|
Instance.auth.deviceLogin(true) // login as browser
|
|
123
132
|
.then(r => Instance.iot.iotLogin()) // login to mqtt
|
|
124
133
|
.then(r => {
|
|
125
|
-
|
|
126
134
|
if(roomId) {
|
|
127
|
-
console.log(roomId);
|
|
128
135
|
return Instance.room.getRoomById(roomId, pinHash).then((r) => {
|
|
129
136
|
Instance.iot?.subscribe(r.data.iotTopic);
|
|
130
137
|
return {roomId, pinHash}
|
|
@@ -136,9 +143,6 @@
|
|
|
136
143
|
.then(r => r.data.items.length ? r.data.items[0] : Instance.room.createRoom({title:'Demo Room'}).then(r => r.data))
|
|
137
144
|
.then(r => Instance.room.getInviteUrl(r._id)) // getting info about invite params
|
|
138
145
|
.then((r) => {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
146
|
roomId = r.data.roomId;
|
|
143
147
|
|
|
144
148
|
console.log('-----------------------------------------------------');
|
package/package.json
CHANGED
package/src/models/auth.js
CHANGED
|
@@ -90,6 +90,11 @@ let auth = function () {
|
|
|
90
90
|
.then(client => client.apis.auth.confirmForgotPassword({},{requestBody:{password, confirmationCode, username}}))
|
|
91
91
|
},
|
|
92
92
|
|
|
93
|
+
socialAuth: (data = {}) => {
|
|
94
|
+
return this.__privates.auth.__client
|
|
95
|
+
.then(client => client.apis.auth.socialAuth(data))
|
|
96
|
+
},
|
|
97
|
+
|
|
93
98
|
$on: (key, callback, that) => {
|
|
94
99
|
return this.__privates.auth.on(key, callback, that || this);
|
|
95
100
|
},
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
|
|
2
|
+
import {device} from 'aws-iot-device-sdk';
|
|
3
|
+
import emitter from './wt-emitter';
|
|
4
|
+
import {decodeJanusDisplay} from "./wt-utils";
|
|
5
|
+
|
|
6
|
+
class Iot {
|
|
7
|
+
|
|
8
|
+
constructor(enableDebugFlag) {
|
|
9
|
+
Object.assign(this, emitter());
|
|
10
|
+
this.device = null;
|
|
11
|
+
this.decoder = new TextDecoder('utf-8');
|
|
12
|
+
this.connectionActive = false;
|
|
13
|
+
this.log = Iot.noop;
|
|
14
|
+
this.debugFlag = enableDebugFlag;
|
|
15
|
+
this.credentialsExpirationCheckIntervalId = null;
|
|
16
|
+
this.currentCredentialsExpirationStamp = null
|
|
17
|
+
if(enableDebugFlag) {
|
|
18
|
+
this.enableDebug();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static noop() {}
|
|
23
|
+
|
|
24
|
+
enableDebug() {
|
|
25
|
+
this.log = console.log.bind(console);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
startCredentialsExpirationCheck(expiration) {
|
|
29
|
+
this.stopCredentialsExpirationCheck();
|
|
30
|
+
this.currentCredentialsExpirationStamp = new Date(expiration).getTime();
|
|
31
|
+
this.credentialsExpirationCheckIntervalId = setInterval(() => {
|
|
32
|
+
const curentTimeStamp = new Date().getTime();
|
|
33
|
+
if(this.currentCredentialsExpirationStamp - curentTimeStamp <= 300000) {
|
|
34
|
+
this.emit('updateCredentials');
|
|
35
|
+
}
|
|
36
|
+
}, 5000);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
stopCredentialsExpirationCheck() {
|
|
40
|
+
clearInterval(this.credentialsExpirationCheckIntervalId);
|
|
41
|
+
this.credentialsExpirationCheckIntervalId = null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
updateWebSocketCredentials(accessKeyId, secretAccessKey, sessionToken, expiration) {
|
|
45
|
+
if(this.device) {
|
|
46
|
+
this.device.updateWebSocketCredentials(accessKeyId, secretAccessKey, sessionToken);
|
|
47
|
+
this.startCredentialsExpirationCheck(expiration);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
connect(apiMqttUrl, apiMqttClientId, region, accessKeyId, secretAccessKey, sessionToken, expiration, forceDisconnect = false) {
|
|
52
|
+
return this.disconnect(forceDisconnect).then(() => {
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
this.device = device({
|
|
55
|
+
protocol:'wss',
|
|
56
|
+
clientId: apiMqttClientId,
|
|
57
|
+
region,
|
|
58
|
+
host: apiMqttUrl,
|
|
59
|
+
accessKeyId: accessKeyId,
|
|
60
|
+
secretKey: secretAccessKey,
|
|
61
|
+
sessionToken: sessionToken,
|
|
62
|
+
keepalive: 15,
|
|
63
|
+
maximumReconnectTimeMs: 8000,
|
|
64
|
+
enableMetrics: false,
|
|
65
|
+
debug: this.debugFlag,
|
|
66
|
+
autoResubscribe: true
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
this.startCredentialsExpirationCheck(expiration);
|
|
70
|
+
|
|
71
|
+
let __s = () => {
|
|
72
|
+
this.device?.off('connect', __s);
|
|
73
|
+
this.device?.off('error', __e);
|
|
74
|
+
resolve(this.device)
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
let __e = (e) => {
|
|
78
|
+
this.device?.off('connect', __s);
|
|
79
|
+
this.device?.off('error', __e);
|
|
80
|
+
reject(e);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
this.device.once('connect', __s);
|
|
84
|
+
this.device.once('error', __e);
|
|
85
|
+
|
|
86
|
+
this.device.on('message', this.__messageCb.bind(this));
|
|
87
|
+
this.device.on('connect', this.__connectCb.bind(this));
|
|
88
|
+
this.device.on('reconnect', this.__reconnectCb.bind(this));
|
|
89
|
+
this.device.on('error', this.__failureCb.bind(this));
|
|
90
|
+
this.device.on('close', this.__closeCb.bind(this));
|
|
91
|
+
this.device.on('offline', this.__offlineCb.bind(this));
|
|
92
|
+
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
disconnect(force = false) {
|
|
99
|
+
|
|
100
|
+
this.stopCredentialsExpirationCheck();
|
|
101
|
+
|
|
102
|
+
return new Promise((resolve, reject) => {
|
|
103
|
+
if(!this.device) {
|
|
104
|
+
resolve();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
let __i = null;
|
|
108
|
+
let __c = () => {
|
|
109
|
+
clearTimeout(__i);
|
|
110
|
+
this.device = null;
|
|
111
|
+
resolve();
|
|
112
|
+
};
|
|
113
|
+
__i = setTimeout(__c, 4000);
|
|
114
|
+
this.device.off('message', this.__messageCb.bind(this));
|
|
115
|
+
this.device.off('connect', this.__connectCb.bind(this));
|
|
116
|
+
this.device.off('reconnect', this.__reconnectCb.bind(this));
|
|
117
|
+
this.device.off('error', this.__failureCb.bind(this));
|
|
118
|
+
this.device.off('close', this.__closeCb.bind(this));
|
|
119
|
+
this.device.off('offline', this.__offlineCb.bind(this));
|
|
120
|
+
this.device.end(force, __c);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
isConnected() {
|
|
125
|
+
return this.connectionActive;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
subscribe(topic) {
|
|
129
|
+
return this.device && this.device.subscribe(topic);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
unsubscribe(topic) {
|
|
133
|
+
return this.device && this.device.unsubscribe(topic);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
send(topic, message) {
|
|
137
|
+
let msg = typeof message === 'object' ? JSON.stringify(message) : message;
|
|
138
|
+
return this.device && this.device.publish(topic, msg);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
__reconnectCb() {
|
|
142
|
+
this.emit('reconnect');
|
|
143
|
+
}
|
|
144
|
+
__connectCb() {
|
|
145
|
+
this.connectionActive = true;
|
|
146
|
+
this.emit('connect');
|
|
147
|
+
}
|
|
148
|
+
__failureCb(err) {
|
|
149
|
+
this.emit('error', err);
|
|
150
|
+
}
|
|
151
|
+
__closeCb(responseObject) {
|
|
152
|
+
this.connectionActive = false;
|
|
153
|
+
this.emit('close');
|
|
154
|
+
}
|
|
155
|
+
__offlineCb(responseObject) {
|
|
156
|
+
this.emit('offline');
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
__messageCb(t, message, packet) {
|
|
160
|
+
const topic = t.split('/');
|
|
161
|
+
let payload = JSON.parse(this.decoder.decode(message));
|
|
162
|
+
|
|
163
|
+
if(payload.display) {
|
|
164
|
+
const decodedDisplay = decodeJanusDisplay(payload.display);
|
|
165
|
+
if(decodedDisplay.userId) {
|
|
166
|
+
payload = {...payload, userId: decodedDisplay.userId, role: decodedDisplay.role, start: decodedDisplay.start};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if(topic[0] === 'user') { // user
|
|
171
|
+
const userId = topic[1].replace("_", ':');
|
|
172
|
+
this.emit('message', {userId, ...payload, event: payload.event ? `user:${payload.event}` : 'user'});
|
|
173
|
+
} else if(topic[0] === 'wt') {
|
|
174
|
+
const event = payload.event;
|
|
175
|
+
const roomId = topic[2];
|
|
176
|
+
if(topic[1] === 'room') { // room
|
|
177
|
+
if(
|
|
178
|
+
event === 'message' ||
|
|
179
|
+
event === 'template_updated' ||
|
|
180
|
+
event === 'record_start' ||
|
|
181
|
+
event === 'record_stop' ||
|
|
182
|
+
event === 'record_configured' ||
|
|
183
|
+
event === 'record_livestream_available' ||
|
|
184
|
+
event === 'record_livestream_kick' ||
|
|
185
|
+
event === 'user_update_displayname' ||
|
|
186
|
+
event === 'user_update_avatar' ||
|
|
187
|
+
event === 'user_update_customattributes' ||
|
|
188
|
+
event === 'user_update_privateattributes' ||
|
|
189
|
+
event === 'channel_changed' ||
|
|
190
|
+
event === "instance_homepage_changed" ||
|
|
191
|
+
event === "instance_settings_changed" ||
|
|
192
|
+
event === "externalmix_changed" ||
|
|
193
|
+
event === "video_uploaded" ||
|
|
194
|
+
event === "change_user_devices" ||
|
|
195
|
+
event === "queue" ||
|
|
196
|
+
event === "title_changed"
|
|
197
|
+
) {
|
|
198
|
+
this.emit('message', {event, ...payload, roomId})
|
|
199
|
+
}
|
|
200
|
+
else if(event === 'joined' || event === 'leaving') {
|
|
201
|
+
this.emit('message', {event, ...payload, isObserver:!!payload.isObserver, roomId});
|
|
202
|
+
}
|
|
203
|
+
else if(
|
|
204
|
+
event === 'left' || //user removed room a.k.a. left the room
|
|
205
|
+
event === 'kicked' ||
|
|
206
|
+
event === 'banned' ||
|
|
207
|
+
event === 'unbanned' ||
|
|
208
|
+
event === 'approved' ||
|
|
209
|
+
event === 'muted' ||
|
|
210
|
+
event === 'unmuted' ||
|
|
211
|
+
event === 'messageRemoved' ||
|
|
212
|
+
event === 'messageReported' ||
|
|
213
|
+
event === 'chatClear' ||
|
|
214
|
+
event === 'handRaised' || event === 'handLowered' || event === 'handsCleared'
|
|
215
|
+
) {
|
|
216
|
+
this.emit('message', {event, ...payload});
|
|
217
|
+
}
|
|
218
|
+
else if(event === 'volume_set') {
|
|
219
|
+
this.emit('message', {event, ...payload});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else if(topic[1] === 'instanceroom') { // instance
|
|
223
|
+
if(event === 'add_room' || event === 'remove_room' || event === 'set_room' || event === "instance_homepage_changed" || event === 'instance_settings_changed') {
|
|
224
|
+
this.emit('message', {event, ...payload});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else if(topic[1] === 'externalmix') {
|
|
228
|
+
const event = payload.event;
|
|
229
|
+
this.emit('message', {event, ...payload});
|
|
230
|
+
}
|
|
231
|
+
} else if(topic[0] === 'wtr') {
|
|
232
|
+
const recorderId = topic[1];
|
|
233
|
+
const sessionId = topic[2];
|
|
234
|
+
if(topic[3] === 'control') {
|
|
235
|
+
this.emit('message', {event: 'recorder_control', ...payload, recorderId, sessionId});
|
|
236
|
+
} // recorder control
|
|
237
|
+
else if(topic[3] === 'monitor') {
|
|
238
|
+
this.emit('message', {event: 'recorder_monitor', ...payload, recorderId, sessionId});
|
|
239
|
+
} // recorder monitor
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
export default Iot;
|