@vworlds/dgram-server 1.0.7 → 1.0.9
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/dgram-server/src/server/server-options.d.ts +4 -0
- package/dgram-server/src/server/server-socket.js +10 -3
- package/dgram-server/src/server/server-socket.js.map +1 -1
- package/dgram-server/src/webrtc/datachannel/connections-manager.d.ts +5 -1
- package/dgram-server/src/webrtc/datachannel/connections-manager.js +7 -12
- package/dgram-server/src/webrtc/datachannel/connections-manager.js.map +1 -1
- package/dgram-server/src/webrtc/datachannel/webrtc-connection.d.ts +8 -1
- package/dgram-server/src/webrtc/datachannel/webrtc-connection.js +5 -2
- package/dgram-server/src/webrtc/datachannel/webrtc-connection.js.map +1 -1
- package/dgram-server/src/webrtc/http/routes.js +32 -1
- package/dgram-server/src/webrtc/http/routes.js.map +1 -1
- package/node_modules/@vworlds/dgram-common/package.json +1 -1
- package/package.json +2 -2
|
@@ -17,6 +17,10 @@ export interface ServerOptions {
|
|
|
17
17
|
label: string;
|
|
18
18
|
/** Enables node-datachannel's UDP mux support when available. */
|
|
19
19
|
enableIceUdpMux?: boolean;
|
|
20
|
+
/** Public host advertised in UDP host ICE candidates, useful behind Docker or NAT. */
|
|
21
|
+
advertisedUdpHost?: string;
|
|
22
|
+
/** Public port advertised in UDP host ICE candidates, useful behind Docker or NAT. */
|
|
23
|
+
advertisedUdpPort?: number;
|
|
20
24
|
/** The maximum number of milliseconds that attempts to transfer a message may take in unreliable mode. While this value is a 16-bit unsigned number, each user agent may clamp it to whatever maximum it deems appropriate. Default: undefined. */
|
|
21
25
|
maxPacketLifeTime?: number;
|
|
22
26
|
/** options.maxRetransmits The maximum number of times the user agent should attempt to retransmit a message which fails the first time in unreliable mode. While this value is a16-bit unsigned number, each user agent may clamp it to whatever maximum it deems appropriate. Default: 0. */
|
|
@@ -10,15 +10,22 @@ export class ServerSocket extends Socket {
|
|
|
10
10
|
constructor(connection) {
|
|
11
11
|
super();
|
|
12
12
|
this.connection = connection;
|
|
13
|
+
let disconnected = false;
|
|
14
|
+
const emitDisconnect = () => {
|
|
15
|
+
if (disconnected) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
disconnected = true;
|
|
19
|
+
this.emit('disconnect');
|
|
20
|
+
};
|
|
13
21
|
this.connection.on(EVENTS.DATA_CHANNEL_IS_OPEN, (err) => {
|
|
14
22
|
this.emit('connect', err);
|
|
15
23
|
});
|
|
16
24
|
this.connection.on(EVENTS.MESSAGE, (data) => {
|
|
17
25
|
this.emit('receive', data);
|
|
18
26
|
});
|
|
19
|
-
this.connection.on(EVENTS.DISCONNECTED,
|
|
20
|
-
|
|
21
|
-
});
|
|
27
|
+
this.connection.on(EVENTS.DISCONNECTED, emitDisconnect);
|
|
28
|
+
this.connection.on(EVENTS.ERROR, emitDisconnect);
|
|
22
29
|
}
|
|
23
30
|
/** Connection id assigned by the server connection manager. */
|
|
24
31
|
get id() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-socket.js","sourceRoot":"","sources":["../../../../src/server/server-socket.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EACN,MAAM,GACP,MAAM,oCAAoC,CAAC;AAE5C,gEAAgE;AAChE,MAAM,OAAO,YAAa,SAAQ,MAAM;IAMnB;IALnB;;;;OAIG;IACH,YAAmB,UAA4B;QAC7C,KAAK,EAAE,CAAC;QADS,eAAU,GAAV,UAAU,CAAkB;QAG7C,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,GAAoB,EAAE,EAAE;YACvE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAgB,EAAE,EAAE;YACtD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"server-socket.js","sourceRoot":"","sources":["../../../../src/server/server-socket.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EACN,MAAM,GACP,MAAM,oCAAoC,CAAC;AAE5C,gEAAgE;AAChE,MAAM,OAAO,YAAa,SAAQ,MAAM;IAMnB;IALnB;;;;OAIG;IACH,YAAmB,UAA4B;QAC7C,KAAK,EAAE,CAAC;QADS,eAAU,GAAV,UAAU,CAAkB;QAG7C,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,GAAoB,EAAE,EAAE;YACvE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAgB,EAAE,EAAE;YACtD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAExD,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACnD,CAAC;IAED,+DAA+D;IAC/D,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5B,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,IAAgB;QACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,+DAA+D;IAC/D,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -8,7 +8,11 @@ export default class ConnectionsManager extends EventEmitter {
|
|
|
8
8
|
private connections;
|
|
9
9
|
/** @param options WebRTC and data channel settings applied to new connections. */
|
|
10
10
|
constructor(options: ServerOptions);
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Creates a cryptographically strong connection id used by signaling
|
|
13
|
+
* routes. The id is the only credential controlling per-connection
|
|
14
|
+
* signaling endpoints, so it must be unguessable.
|
|
15
|
+
*/
|
|
12
16
|
private createId;
|
|
13
17
|
/** Looks up an active server connection by id. */
|
|
14
18
|
getConnection(id: string): WebRTCConnection | undefined;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ReliabilityType, } from '../../server/server-options.js';
|
|
2
2
|
import WebRTCConnection from './webrtc-connection.js';
|
|
3
3
|
import { EventEmitter } from 'events';
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
4
5
|
import { EVENTS } from '@vworlds/dgram-common';
|
|
5
6
|
/** Creates, stores, and deletes server-side WebRTC connections. */
|
|
6
7
|
export default class ConnectionsManager extends EventEmitter {
|
|
@@ -12,14 +13,13 @@ export default class ConnectionsManager extends EventEmitter {
|
|
|
12
13
|
super();
|
|
13
14
|
this.options = options;
|
|
14
15
|
}
|
|
15
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Creates a cryptographically strong connection id used by signaling
|
|
18
|
+
* routes. The id is the only credential controlling per-connection
|
|
19
|
+
* signaling endpoints, so it must be unguessable.
|
|
20
|
+
*/
|
|
16
21
|
createId() {
|
|
17
|
-
|
|
18
|
-
let id = '';
|
|
19
|
-
for (let i = 0; i < 24; i++) {
|
|
20
|
-
id += possible.charAt(Math.floor(Math.random() * possible.length));
|
|
21
|
-
}
|
|
22
|
-
return id;
|
|
22
|
+
return randomUUID();
|
|
23
23
|
}
|
|
24
24
|
/** Looks up an active server connection by id. */
|
|
25
25
|
getConnection(id) {
|
|
@@ -62,9 +62,6 @@ export default class ConnectionsManager extends EventEmitter {
|
|
|
62
62
|
reject(undefined);
|
|
63
63
|
}
|
|
64
64
|
this.connections.set(connection.id, connection);
|
|
65
|
-
pc.onDataChannel((dc) => {
|
|
66
|
-
// do nothing
|
|
67
|
-
});
|
|
68
65
|
pc.onStateChange(async (state) => {
|
|
69
66
|
if (state === 'disconnected' ||
|
|
70
67
|
state === 'failed' ||
|
|
@@ -73,13 +70,11 @@ export default class ConnectionsManager extends EventEmitter {
|
|
|
73
70
|
}
|
|
74
71
|
connection.setState(state);
|
|
75
72
|
});
|
|
76
|
-
pc.onGatheringStateChange((state) => { });
|
|
77
73
|
pc.onLocalDescription((sdp, type) => {
|
|
78
74
|
connection.localDescription = { sdp, type };
|
|
79
75
|
resolve(connection);
|
|
80
76
|
});
|
|
81
77
|
pc.onLocalCandidate((candidate, mid) => {
|
|
82
|
-
// @ts-ignore
|
|
83
78
|
connection.iceCandidates.push({ candidate, sdpMid: mid });
|
|
84
79
|
});
|
|
85
80
|
await connection.setupDataChannel(label, dcConfig);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connections-manager.js","sourceRoot":"","sources":["../../../../../src/webrtc/datachannel/connections-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,eAAe,GAEhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,mEAAmE;AACnE,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,YAAY;IAKvC;IAJnB,oEAAoE;IAC5D,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE1D,kFAAkF;IAClF,YAAmB,OAAsB;QACvC,KAAK,EAAE,CAAC;QADS,YAAO,GAAP,OAAO,CAAe;IAEzC,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"connections-manager.js","sourceRoot":"","sources":["../../../../../src/webrtc/datachannel/connections-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,13 @@ export interface LocalDescription {
|
|
|
8
8
|
/** SDP description type, usually `offer`. */
|
|
9
9
|
type: string;
|
|
10
10
|
}
|
|
11
|
+
/** ICE candidate payload returned by the HTTP signaling API. */
|
|
12
|
+
export interface IceCandidatePayload {
|
|
13
|
+
/** Raw SDP candidate line gathered by node-datachannel. */
|
|
14
|
+
candidate: string;
|
|
15
|
+
/** SDP media section id for the candidate. */
|
|
16
|
+
sdpMid: string;
|
|
17
|
+
}
|
|
11
18
|
/** Low-level server-side WebRTC peer and data channel wrapper. */
|
|
12
19
|
export default class WebRTCConnection extends EventEmitter {
|
|
13
20
|
id: string;
|
|
@@ -22,7 +29,7 @@ export default class WebRTCConnection extends EventEmitter {
|
|
|
22
29
|
/** Current local SDP description sent to the browser during signaling. */
|
|
23
30
|
localDescription: LocalDescription;
|
|
24
31
|
/** ICE candidates gathered since the browser last polled the signaling API. */
|
|
25
|
-
iceCandidates:
|
|
32
|
+
iceCandidates: IceCandidatePayload[];
|
|
26
33
|
/**
|
|
27
34
|
* Creates a low-level server WebRTC connection wrapper.
|
|
28
35
|
*
|
|
@@ -41,9 +41,12 @@ export default class WebRTCConnection extends EventEmitter {
|
|
|
41
41
|
this.emit(EVENTS.CONNECT);
|
|
42
42
|
}
|
|
43
43
|
else if (state === 'failed') {
|
|
44
|
-
this.
|
|
44
|
+
if (this.listenerCount(EVENTS.ERROR) > 0) {
|
|
45
|
+
this.emit(EVENTS.ERROR);
|
|
46
|
+
}
|
|
47
|
+
this.emit(EVENTS.DISCONNECTED);
|
|
45
48
|
}
|
|
46
|
-
else if (state === 'closed') {
|
|
49
|
+
else if (state === 'disconnected' || state === 'closed') {
|
|
47
50
|
this.emit(EVENTS.DISCONNECTED);
|
|
48
51
|
}
|
|
49
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webrtc-connection.js","sourceRoot":"","sources":["../../../../../src/webrtc/datachannel/webrtc-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"webrtc-connection.js","sourceRoot":"","sources":["../../../../../src/webrtc/datachannel/webrtc-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ export function getIceCandidates(connectionMgr, req, res) {
|
|
|
66
66
|
sendStatus(res, 404, 'Connection not found');
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
|
-
const iceCandidates =
|
|
69
|
+
const iceCandidates = withAdvertisedIceCandidates(conn.iceCandidates, connectionMgr.options ?? {});
|
|
70
70
|
conn.iceCandidates = [];
|
|
71
71
|
sendJson(res, iceCandidates);
|
|
72
72
|
}
|
|
@@ -75,4 +75,35 @@ export function getIceCandidates(connectionMgr, req, res) {
|
|
|
75
75
|
sendStatus(res, 500, '');
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
+
function withAdvertisedIceCandidates(candidates, options) {
|
|
79
|
+
return candidates.flatMap((candidate) => {
|
|
80
|
+
const advertisedCandidate = createAdvertisedIceCandidate(candidate, options);
|
|
81
|
+
return advertisedCandidate === undefined
|
|
82
|
+
? [candidate]
|
|
83
|
+
: [advertisedCandidate, candidate];
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function createAdvertisedIceCandidate(candidate, options) {
|
|
87
|
+
if (options.advertisedUdpHost === undefined &&
|
|
88
|
+
options.advertisedUdpPort === undefined) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
const fields = candidate.candidate.split(' ');
|
|
92
|
+
if (!isUdpHostCandidate(fields)) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
fields[4] = options.advertisedUdpHost ?? fields[4];
|
|
96
|
+
fields[5] = String(options.advertisedUdpPort ?? fields[5]);
|
|
97
|
+
const advertisedCandidate = fields.join(' ');
|
|
98
|
+
if (advertisedCandidate === candidate.candidate) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
return { ...candidate, candidate: advertisedCandidate };
|
|
102
|
+
}
|
|
103
|
+
function isUdpHostCandidate(fields) {
|
|
104
|
+
return (fields.length >= 8 &&
|
|
105
|
+
fields[2]?.toLowerCase() === 'udp' &&
|
|
106
|
+
fields[6] === 'typ' &&
|
|
107
|
+
fields[7] === 'host');
|
|
108
|
+
}
|
|
78
109
|
//# sourceMappingURL=routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../../../src/webrtc/http/routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../../../src/webrtc/http/routes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vworlds/dgram-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dgram-server/src/index.js",
|
|
6
6
|
"types": "./dgram-server/src/index.d.ts",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"url": "https://github.com/vworlds/dgram"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@vworlds/dgram-common": "1.0.
|
|
18
|
+
"@vworlds/dgram-common": "1.0.9",
|
|
19
19
|
"eventemitter3": "^5.0.4",
|
|
20
20
|
"express": "^4.18.2",
|
|
21
21
|
"node-datachannel": "^0.32.3"
|