@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/CHANGELOG +76 -76
- package/array.js +93 -90
- package/bank.js +20 -20
- package/contact_details.js +194 -194
- package/count_down.js +102 -102
- package/data_table.js +416 -416
- package/date_time.js +592 -592
- package/details_sub_array.js +123 -123
- package/draw.js +52 -52
- package/duration.js +198 -198
- package/event_bus.js +38 -38
- package/file.js +146 -146
- package/flash_message.js +35 -35
- package/form_date.js +610 -610
- package/form_helper.js +410 -410
- package/google_charts.js +347 -347
- package/google_maps.js +169 -169
- package/google_recaptcha.js +87 -87
- package/http_client.js +469 -469
- package/import_from_csv.js +273 -273
- package/index.js +55 -55
- package/jwt.js +288 -288
- package/list_box.js +112 -112
- package/location.js +431 -431
- package/media.js +218 -218
- package/multiple_action_in_table.js +336 -336
- package/network.js +756 -756
- package/number.js +99 -99
- package/open_street_map.js +142 -142
- package/package.json +15 -15
- package/paging.js +278 -278
- package/php.min.js +5 -5
- package/revolut.js +22 -22
- package/select_all.js +121 -121
- package/shopping_cart.js +31 -31
- package/social_network.js +109 -109
- package/sortable_list.js +37 -37
- package/string.js +162 -162
- package/util.js +16 -16
- package/visitor.js +77 -77
- package/web_rtc.js +114 -114
- package/web_socket.js +97 -97
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 };
|