@osimatic/helpers-js 1.1.77 → 1.1.78

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/web_rtc.js CHANGED
@@ -1,115 +1,115 @@
1
- class WebRTC {
2
- static setIceServers(turnUrl, stunUrl) {
3
- this.turnUrl = turnUrl;
4
- this.stunUrl = stunUrl;
5
- }
6
-
7
- static setTurnSecret(turnSecret) {
8
- this.turnSecret = turnSecret;
9
- }
10
-
11
- static setSignalingBus(signalingBus) {
12
- this.signalingBus = signalingBus;
13
- }
14
-
15
- static offer(videoBroadcasterId, stream, iceCandidateCallback, connectionStateChangeCallback) {
16
- return new Promise(async (resolve, reject) => {
17
- try {
18
- let { username, password } = this.getTurnCredentials();
19
- let peerConn = new RTCPeerConnection({
20
- iceServers: [{
21
- urls: [this.turnUrl + '?transport=udp', this.turnUrl + '?transport=tcp'],
22
- username: username,
23
- credential: password
24
- }, {
25
- urls: this.stunUrl
26
- }]
27
- });
28
-
29
- peerConn.onconnectionstatechange = (event) => connectionStateChangeCallback(event, peerConn.connectionState);
30
- peerConn.onicecandidate = (event) => iceCandidateCallback(event);
31
-
32
- stream.getTracks().forEach(track => peerConn.addTrack(track, stream));
33
- await peerConn.setLocalDescription(await peerConn.createOffer());
34
-
35
- this.signalingBus.subscribe('answer', (payload) => peerConn.setRemoteDescription(payload.description));
36
- this.signalingBus.subscribe('candidate', (payload) => peerConn.addIceCandidate(new RTCIceCandidate(payload.candidate)));
37
- this.signalingBus.publish('offer', { id: videoBroadcasterId, description: peerConn.localDescription });
38
-
39
- resolve(peerConn);
40
- } catch (error) {
41
- console.error(error);
42
- reject(error);
43
- }
44
- });
45
- }
46
-
47
- static answer(videoBroadcasterId, remoteDescription, onTrackCallback, iceCandidateCallback, connectionStateChangeCallback) {
48
- return new Promise(async (resolve, reject) => {
49
- try {
50
- let { username, password } = this.getTurnCredentials();
51
- let peerConn = new RTCPeerConnection({
52
- iceServers: [{
53
- urls: [this.turnUrl + '?transport=udp', this.turnUrl + '?transport=tcp'],
54
- username: username,
55
- credential: password
56
- }, {
57
- urls: this.stunUrl
58
- }]
59
- });
60
-
61
- peerConn.onconnectionstatechange = (event) => connectionStateChangeCallback(event, peerConn.connectionState);
62
- peerConn.onicecandidate = async (event) => iceCandidateCallback(event);
63
- peerConn.ontrack = (event) => onTrackCallback(event.streams);
64
-
65
- peerConn.setRemoteDescription(new RTCSessionDescription(remoteDescription));
66
- await peerConn.setLocalDescription(await peerConn.createAnswer());
67
-
68
- this.signalingBus.subscribe('candidate', (payload) => peerConn.addIceCandidate(new RTCIceCandidate(payload.candidate)));
69
- this.signalingBus.publish('answer', { id: videoBroadcasterId, description: peerConn.localDescription });
70
-
71
- resolve(peerConn);
72
- } catch (error) {
73
- console.error(error);
74
- reject(error);
75
- }
76
- });
77
- }
78
-
79
- static disconnectPeer(peerConn) {
80
- if (peerConn) {
81
- peerConn.oniceconnectionstatechange = null;
82
- peerConn.onicecandidateerror = null;
83
- peerConn.onicecandidate = null;
84
- peerConn.ontrack = null;
85
-
86
- if (peerConn.signalingState != 'closed') {
87
- peerConn.getSenders().forEach(sender => peerConn.removeTrack(sender));
88
- peerConn.close();
89
- }
90
-
91
- peerConn = null;
92
- }
93
-
94
- return peerConn;
95
- }
96
-
97
- /*
98
- static-auth credentials
99
- https://eturnal.net/documentation/
100
- https://datatracker.ietf.org/doc/html/draft-uberti-behave-turn-rest-00
101
- */
102
- static getTurnCredentials() {
103
- let crypto = require('crypto');
104
- let username = String(parseInt(Date.now() / 1000) + 24 * 3600); //ttl: 24h
105
- let hmac = crypto.createHmac('sha1', this.turnSecret);
106
-
107
- hmac.setEncoding('base64');
108
- hmac.write(username);
109
- hmac.end();
110
-
111
- return { username: username, password: hmac.read() };
112
- }
113
- }
114
-
1
+ class WebRTC {
2
+ static setIceServers(turnUrl, stunUrl) {
3
+ this.turnUrl = turnUrl;
4
+ this.stunUrl = stunUrl;
5
+ }
6
+
7
+ static setTurnSecret(turnSecret) {
8
+ this.turnSecret = turnSecret;
9
+ }
10
+
11
+ static setSignalingBus(signalingBus) {
12
+ this.signalingBus = signalingBus;
13
+ }
14
+
15
+ static offer(videoBroadcasterId, stream, iceCandidateCallback, connectionStateChangeCallback) {
16
+ return new Promise(async (resolve, reject) => {
17
+ try {
18
+ let { username, password } = this.getTurnCredentials();
19
+ let peerConn = new RTCPeerConnection({
20
+ iceServers: [{
21
+ urls: [this.turnUrl + '?transport=udp', this.turnUrl + '?transport=tcp'],
22
+ username: username,
23
+ credential: password
24
+ }, {
25
+ urls: this.stunUrl
26
+ }]
27
+ });
28
+
29
+ peerConn.onconnectionstatechange = (event) => connectionStateChangeCallback(event, peerConn.connectionState);
30
+ peerConn.onicecandidate = (event) => iceCandidateCallback(event);
31
+
32
+ stream.getTracks().forEach(track => peerConn.addTrack(track, stream));
33
+ await peerConn.setLocalDescription(await peerConn.createOffer());
34
+
35
+ this.signalingBus.subscribe('answer', (payload) => peerConn.setRemoteDescription(payload.description));
36
+ this.signalingBus.subscribe('candidate', (payload) => peerConn.addIceCandidate(new RTCIceCandidate(payload.candidate)));
37
+ this.signalingBus.publish('offer', { id: videoBroadcasterId, description: peerConn.localDescription });
38
+
39
+ resolve(peerConn);
40
+ } catch (error) {
41
+ console.error(error);
42
+ reject(error);
43
+ }
44
+ });
45
+ }
46
+
47
+ static answer(videoBroadcasterId, remoteDescription, onTrackCallback, iceCandidateCallback, connectionStateChangeCallback) {
48
+ return new Promise(async (resolve, reject) => {
49
+ try {
50
+ let { username, password } = this.getTurnCredentials();
51
+ let peerConn = new RTCPeerConnection({
52
+ iceServers: [{
53
+ urls: [this.turnUrl + '?transport=udp', this.turnUrl + '?transport=tcp'],
54
+ username: username,
55
+ credential: password
56
+ }, {
57
+ urls: this.stunUrl
58
+ }]
59
+ });
60
+
61
+ peerConn.onconnectionstatechange = (event) => connectionStateChangeCallback(event, peerConn.connectionState);
62
+ peerConn.onicecandidate = async (event) => iceCandidateCallback(event);
63
+ peerConn.ontrack = (event) => onTrackCallback(event.streams);
64
+
65
+ peerConn.setRemoteDescription(new RTCSessionDescription(remoteDescription));
66
+ await peerConn.setLocalDescription(await peerConn.createAnswer());
67
+
68
+ this.signalingBus.subscribe('candidate', (payload) => peerConn.addIceCandidate(new RTCIceCandidate(payload.candidate)));
69
+ this.signalingBus.publish('answer', { id: videoBroadcasterId, description: peerConn.localDescription });
70
+
71
+ resolve(peerConn);
72
+ } catch (error) {
73
+ console.error(error);
74
+ reject(error);
75
+ }
76
+ });
77
+ }
78
+
79
+ static disconnectPeer(peerConn) {
80
+ if (peerConn) {
81
+ peerConn.oniceconnectionstatechange = null;
82
+ peerConn.onicecandidateerror = null;
83
+ peerConn.onicecandidate = null;
84
+ peerConn.ontrack = null;
85
+
86
+ if (peerConn.signalingState != 'closed') {
87
+ peerConn.getSenders().forEach(sender => peerConn.removeTrack(sender));
88
+ peerConn.close();
89
+ }
90
+
91
+ peerConn = null;
92
+ }
93
+
94
+ return peerConn;
95
+ }
96
+
97
+ /*
98
+ static-auth credentials
99
+ https://eturnal.net/documentation/
100
+ https://datatracker.ietf.org/doc/html/draft-uberti-behave-turn-rest-00
101
+ */
102
+ static getTurnCredentials() {
103
+ let crypto = require('crypto');
104
+ let username = String(parseInt(Date.now() / 1000) + 24 * 3600); //ttl: 24h
105
+ let hmac = crypto.createHmac('sha1', this.turnSecret);
106
+
107
+ hmac.setEncoding('base64');
108
+ hmac.write(username);
109
+ hmac.end();
110
+
111
+ return { username: username, password: hmac.read() };
112
+ }
113
+ }
114
+
115
115
  module.exports = { WebRTC };
package/web_socket.js CHANGED
@@ -1,98 +1,98 @@
1
- class WebSocket {
2
- /**
3
- * socketEvents : events en provenance de la socket qui seront dispatchés à travers le bus event
4
- * busEvents : events en provenance de l'event bus qui seront dispatchés vers la socket
5
- * customBusEvents : events "spéciaux" en provenance de l'event bus qui seront dispatchés vers la socket : array({ 'custom_name' => 'event_name' }, ...)
6
- */
7
- static setEventListeners(socketEvents, busEvents, customBusEvents) {
8
- const { EventBus } = require('./event_bus');
9
-
10
- this.eventBus = new EventBus();
11
- this.socketConnectionErrors = ['connect_error', 'connect_timeout', 'reconnect_error', 'reconnect_failed'];
12
- this.socketEvents = socketEvents;
13
- this.busEvents = busEvents;
14
- this.customBusEvents = customBusEvents;
15
- }
16
-
17
- static connect(url, options, connectInitPayload, onUnavailableCallback, onConnectionAckCallback) {
18
- const { io } = require('socket.io-client');
19
-
20
- this.logged = false;
21
- this.instance = io(url, options);
22
-
23
- this.registerErrorListeners(onUnavailableCallback);
24
- this.registerEventListeners(connectInitPayload, onConnectionAckCallback, onUnavailableCallback);
25
- }
26
-
27
- static registerErrorListeners(onUnavailableCallback) {
28
- var self = this;
29
-
30
- self.socketConnectionErrors.forEach(function(event) {
31
- self.instance.on(event, function() {
32
- self.clear(onUnavailableCallback, event);
33
- });
34
- });
35
-
36
- self.instance.on('error', function(error) {
37
- self.clear(onUnavailableCallback, error);
38
- });
39
- }
40
-
41
- static registerEventListeners(connectInitPayload, onConnectionAckCallback, onUnavailableCallback) {
42
- var self = this;
43
-
44
- self.instance.on('connect', function() {
45
- if (self.logged) { //reconnexion avant timeout : on supprime les listeners de l'event bus
46
- self.clear();
47
- }
48
-
49
- self.logged = true;
50
-
51
- self.instance.emit('connect_init', connectInitPayload, onConnectionAckCallback);
52
- });
53
-
54
- self.instance.on('disconnect', function() {
55
- self.clear(onUnavailableCallback);
56
- });
57
-
58
- self.socketEvents.forEach(function (event) {
59
- self.instance.on(event, function(payload) {
60
- self.eventBus.publish(event, payload);
61
- });
62
- });
63
-
64
- self.busEvents.forEach(function(event) {
65
- self.eventBus.subscribe(event, function(payload) {
66
- self.instance.emit(event, payload);
67
- });
68
- });
69
-
70
- self.customBusEvents.forEach(function(object) {
71
- self.eventBus.subscribe(object.custom_name, function(payload) {
72
- self.instance.emit(object.event_name, payload)
73
- });
74
- });
75
- }
76
-
77
- static unregisterEventListener() {
78
- var self = this;
79
-
80
- self.busEvents.forEach(function (event) {
81
- self.eventBus.unsubscribe(event, {});
82
- });
83
-
84
- self.customBusEvents.forEach(function(object) {
85
- self.eventBus.unsubscribe(object.custom_name, {});
86
- });
87
- }
88
-
89
- static clear(onUnavailableCallback, error) {
90
- this.unregisterEventListener();
91
-
92
- if (typeof onUnavailableCallback !== 'undefined') {
93
- onUnavailableCallback(error);
94
- }
95
- }
96
- }
97
-
1
+ class WebSocket {
2
+ /**
3
+ * socketEvents : events en provenance de la socket qui seront dispatchés à travers le bus event
4
+ * busEvents : events en provenance de l'event bus qui seront dispatchés vers la socket
5
+ * customBusEvents : events "spéciaux" en provenance de l'event bus qui seront dispatchés vers la socket : array({ 'custom_name' => 'event_name' }, ...)
6
+ */
7
+ static setEventListeners(socketEvents, busEvents, customBusEvents) {
8
+ const { EventBus } = require('./event_bus');
9
+
10
+ this.eventBus = new EventBus();
11
+ this.socketConnectionErrors = ['connect_error', 'connect_timeout', 'reconnect_error', 'reconnect_failed'];
12
+ this.socketEvents = socketEvents;
13
+ this.busEvents = busEvents;
14
+ this.customBusEvents = customBusEvents;
15
+ }
16
+
17
+ static connect(url, options, connectInitPayload, onUnavailableCallback, onConnectionAckCallback) {
18
+ const { io } = require('socket.io-client');
19
+
20
+ this.logged = false;
21
+ this.instance = io(url, options);
22
+
23
+ this.registerErrorListeners(onUnavailableCallback);
24
+ this.registerEventListeners(connectInitPayload, onConnectionAckCallback, onUnavailableCallback);
25
+ }
26
+
27
+ static registerErrorListeners(onUnavailableCallback) {
28
+ var self = this;
29
+
30
+ self.socketConnectionErrors.forEach(function(event) {
31
+ self.instance.on(event, function() {
32
+ self.clear(onUnavailableCallback, event);
33
+ });
34
+ });
35
+
36
+ self.instance.on('error', function(error) {
37
+ self.clear(onUnavailableCallback, error);
38
+ });
39
+ }
40
+
41
+ static registerEventListeners(connectInitPayload, onConnectionAckCallback, onUnavailableCallback) {
42
+ var self = this;
43
+
44
+ self.instance.on('connect', function() {
45
+ if (self.logged) { //reconnexion avant timeout : on supprime les listeners de l'event bus
46
+ self.clear();
47
+ }
48
+
49
+ self.logged = true;
50
+
51
+ self.instance.emit('connect_init', connectInitPayload, onConnectionAckCallback);
52
+ });
53
+
54
+ self.instance.on('disconnect', function() {
55
+ self.clear(onUnavailableCallback);
56
+ });
57
+
58
+ self.socketEvents.forEach(function (event) {
59
+ self.instance.on(event, function(payload) {
60
+ self.eventBus.publish(event, payload);
61
+ });
62
+ });
63
+
64
+ self.busEvents.forEach(function(event) {
65
+ self.eventBus.subscribe(event, function(payload) {
66
+ self.instance.emit(event, payload);
67
+ });
68
+ });
69
+
70
+ self.customBusEvents.forEach(function(object) {
71
+ self.eventBus.subscribe(object.custom_name, function(payload) {
72
+ self.instance.emit(object.event_name, payload)
73
+ });
74
+ });
75
+ }
76
+
77
+ static unregisterEventListener() {
78
+ var self = this;
79
+
80
+ self.busEvents.forEach(function (event) {
81
+ self.eventBus.unsubscribe(event, {});
82
+ });
83
+
84
+ self.customBusEvents.forEach(function(object) {
85
+ self.eventBus.unsubscribe(object.custom_name, {});
86
+ });
87
+ }
88
+
89
+ static clear(onUnavailableCallback, error) {
90
+ this.unregisterEventListener();
91
+
92
+ if (typeof onUnavailableCallback !== 'undefined') {
93
+ onUnavailableCallback(error);
94
+ }
95
+ }
96
+ }
97
+
98
98
  module.exports = { WebSocket };