mockrtc 0.1.0 → 0.2.0
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/README.md +2 -2
- package/dist/client/mockrtc-admin-request-builder.d.ts +21 -0
- package/dist/client/mockrtc-admin-request-builder.js +171 -0
- package/dist/client/mockrtc-admin-request-builder.js.map +1 -0
- package/dist/client/mockrtc-client.d.ts +5 -1
- package/dist/client/mockrtc-client.js +20 -16
- package/dist/client/mockrtc-client.js.map +1 -1
- package/dist/client/mockrtc-remote-peer.d.ts +3 -2
- package/dist/client/mockrtc-remote-peer.js.map +1 -1
- package/dist/handling/handler-step-definitions.d.ts +3 -2
- package/dist/handling/handler-step-definitions.js.map +1 -1
- package/dist/handling/handler-steps.js +1 -1
- package/dist/handling/handler-steps.js.map +1 -1
- package/dist/main-browser.d.ts +2 -0
- package/dist/main-browser.js +5 -1
- package/dist/main-browser.js.map +1 -1
- package/dist/main.d.ts +5 -4
- package/dist/main.js +5 -1
- package/dist/main.js.map +1 -1
- package/dist/mockrtc-peer.d.ts +37 -6
- package/dist/mockrtc.d.ts +138 -1
- package/dist/mockrtc.js +1 -0
- package/dist/mockrtc.js.map +1 -1
- package/dist/server/mockrtc-admin-plugin.d.ts +2 -2
- package/dist/server/mockrtc-admin-plugin.js +147 -2
- package/dist/server/mockrtc-admin-plugin.js.map +1 -1
- package/dist/server/mockrtc-server-peer.d.ts +8 -2
- package/dist/server/mockrtc-server-peer.js +106 -5
- package/dist/server/mockrtc-server-peer.js.map +1 -1
- package/dist/server/mockrtc-server.d.ts +11 -3
- package/dist/server/mockrtc-server.js +44 -6
- package/dist/server/mockrtc-server.js.map +1 -1
- package/dist/webrtc/datachannel-stream.d.ts +2 -0
- package/dist/webrtc/datachannel-stream.js +12 -0
- package/dist/webrtc/datachannel-stream.js.map +1 -1
- package/dist/webrtc/mediatrack-stream.d.ts +4 -0
- package/dist/webrtc/mediatrack-stream.js +13 -1
- package/dist/webrtc/mediatrack-stream.js.map +1 -1
- package/dist/webrtc/mockrtc-connection.d.ts +1 -1
- package/dist/webrtc/mockrtc-connection.js +77 -60
- package/dist/webrtc/mockrtc-connection.js.map +1 -1
- package/dist/webrtc/rtc-connection.d.ts +23 -4
- package/dist/webrtc/rtc-connection.js +45 -6
- package/dist/webrtc/rtc-connection.js.map +1 -1
- package/dist/webrtc-hooks.js +4 -2
- package/dist/webrtc-hooks.js.map +1 -1
- package/package.json +12 -6
- package/src/client/mockrtc-admin-request-builder.ts +184 -0
- package/src/client/mockrtc-client.ts +26 -22
- package/src/client/mockrtc-remote-peer.ts +9 -8
- package/src/handling/handler-step-definitions.ts +6 -4
- package/src/handling/handler-steps.ts +6 -5
- package/src/main-browser.ts +4 -0
- package/src/main.ts +18 -4
- package/src/mockrtc-peer.ts +41 -6
- package/src/mockrtc.ts +163 -1
- package/src/server/mockrtc-admin-plugin.ts +159 -6
- package/src/server/mockrtc-server-peer.ts +183 -6
- package/src/server/mockrtc-server.ts +75 -14
- package/src/webrtc/datachannel-stream.ts +16 -0
- package/src/webrtc/mediatrack-stream.ts +16 -3
- package/src/webrtc/mockrtc-connection.ts +21 -6
- package/src/webrtc/rtc-connection.ts +79 -14
- package/src/webrtc-hooks.ts +7 -4
- package/test/integration/events.spec.ts +536 -0
- package/test/integration/matching.spec.ts +68 -0
- package/test/integration/proxy.spec.ts +66 -1
- package/test/test-setup.ts +19 -0
package/dist/mockrtc.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import type { MockRTCHandlerBuilder } from "./handling/handler-builder";
|
|
2
|
-
import type { MockRTCPeer } from "./mockrtc-peer";
|
|
3
|
+
import type { ConnectionMetadata, MockRTCPeer } from "./mockrtc-peer";
|
|
3
4
|
export interface MockRTCPeerBuilder extends MockRTCHandlerBuilder<MockRTCPeer> {
|
|
4
5
|
}
|
|
5
6
|
export interface MockRTCOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Should the server print extra debug information?
|
|
9
|
+
*/
|
|
10
|
+
debug?: boolean;
|
|
6
11
|
/**
|
|
7
12
|
* Whether or not all DataChannel messages should be saved for later examination.
|
|
8
13
|
* This can be useful in quick testing, but may use large amounts of data if
|
|
@@ -12,14 +17,146 @@ export interface MockRTCOptions {
|
|
|
12
17
|
*/
|
|
13
18
|
recordMessages?: boolean;
|
|
14
19
|
}
|
|
20
|
+
export interface MockRTCSessionDescription {
|
|
21
|
+
type: 'offer' | 'answer';
|
|
22
|
+
sdp: string;
|
|
23
|
+
}
|
|
24
|
+
export interface SelectedRTCCandidate {
|
|
25
|
+
address: string;
|
|
26
|
+
port: number;
|
|
27
|
+
protocol: 'udp' | 'tcp';
|
|
28
|
+
type: RTCIceCandidateType;
|
|
29
|
+
}
|
|
30
|
+
export interface TimingEvents {
|
|
31
|
+
startTime: number;
|
|
32
|
+
connectTimestamp: number;
|
|
33
|
+
disconnectTimestamp?: number;
|
|
34
|
+
externalAttachTimestamp?: number;
|
|
35
|
+
}
|
|
36
|
+
export declare type MockRTCEventData = {
|
|
37
|
+
"peer-connected": {
|
|
38
|
+
peerId: string;
|
|
39
|
+
sessionId: string;
|
|
40
|
+
metadata: ConnectionMetadata;
|
|
41
|
+
localSessionDescription: MockRTCSessionDescription;
|
|
42
|
+
remoteSessionDescription: MockRTCSessionDescription;
|
|
43
|
+
selectedLocalCandidate: SelectedRTCCandidate;
|
|
44
|
+
selectedRemoteCandidate: SelectedRTCCandidate;
|
|
45
|
+
timingEvents: TimingEvents;
|
|
46
|
+
};
|
|
47
|
+
"peer-disconnected": {
|
|
48
|
+
peerId: string;
|
|
49
|
+
sessionId: string;
|
|
50
|
+
timingEvents: TimingEvents;
|
|
51
|
+
};
|
|
52
|
+
"external-peer-attached": {
|
|
53
|
+
peerId: string;
|
|
54
|
+
sessionId: string;
|
|
55
|
+
externalConnection: {
|
|
56
|
+
peerId: string;
|
|
57
|
+
sessionId: string;
|
|
58
|
+
localSessionDescription: MockRTCSessionDescription;
|
|
59
|
+
remoteSessionDescription: MockRTCSessionDescription;
|
|
60
|
+
selectedLocalCandidate: SelectedRTCCandidate;
|
|
61
|
+
selectedRemoteCandidate: SelectedRTCCandidate;
|
|
62
|
+
};
|
|
63
|
+
timingEvents: TimingEvents;
|
|
64
|
+
};
|
|
65
|
+
"data-channel-opened": {
|
|
66
|
+
peerId: string;
|
|
67
|
+
sessionId: string;
|
|
68
|
+
channelId: number;
|
|
69
|
+
channelLabel: string;
|
|
70
|
+
channelProtocol: string;
|
|
71
|
+
eventTimestamp: number;
|
|
72
|
+
timingEvents: TimingEvents;
|
|
73
|
+
};
|
|
74
|
+
"data-channel-message-sent": {
|
|
75
|
+
peerId: string;
|
|
76
|
+
sessionId: string;
|
|
77
|
+
channelId: number;
|
|
78
|
+
direction: 'sent';
|
|
79
|
+
content: Buffer;
|
|
80
|
+
isBinary: boolean;
|
|
81
|
+
eventTimestamp: number;
|
|
82
|
+
timingEvents: TimingEvents;
|
|
83
|
+
};
|
|
84
|
+
"data-channel-message-received": {
|
|
85
|
+
peerId: string;
|
|
86
|
+
sessionId: string;
|
|
87
|
+
channelId: number;
|
|
88
|
+
direction: 'received';
|
|
89
|
+
content: Buffer;
|
|
90
|
+
isBinary: boolean;
|
|
91
|
+
eventTimestamp: number;
|
|
92
|
+
timingEvents: TimingEvents;
|
|
93
|
+
};
|
|
94
|
+
"data-channel-closed": {
|
|
95
|
+
peerId: string;
|
|
96
|
+
sessionId: string;
|
|
97
|
+
channelId: number;
|
|
98
|
+
eventTimestamp: number;
|
|
99
|
+
timingEvents: TimingEvents;
|
|
100
|
+
};
|
|
101
|
+
"media-track-opened": {
|
|
102
|
+
peerId: string;
|
|
103
|
+
sessionId: string;
|
|
104
|
+
trackMid: string;
|
|
105
|
+
trackType: string;
|
|
106
|
+
trackDirection: string;
|
|
107
|
+
eventTimestamp: number;
|
|
108
|
+
timingEvents: TimingEvents;
|
|
109
|
+
};
|
|
110
|
+
"media-track-stats": {
|
|
111
|
+
peerId: string;
|
|
112
|
+
sessionId: string;
|
|
113
|
+
trackMid: string;
|
|
114
|
+
totalBytesSent: number;
|
|
115
|
+
totalBytesReceived: number;
|
|
116
|
+
eventTimestamp: number;
|
|
117
|
+
timingEvents: TimingEvents;
|
|
118
|
+
};
|
|
119
|
+
"media-track-closed": {
|
|
120
|
+
peerId: string;
|
|
121
|
+
sessionId: string;
|
|
122
|
+
trackMid: string;
|
|
123
|
+
eventTimestamp: number;
|
|
124
|
+
timingEvents: TimingEvents;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
export declare type MockRTCEvent = keyof MockRTCEventData;
|
|
15
128
|
export interface MockRTC {
|
|
16
129
|
/**
|
|
17
130
|
* Start creating a mock WebRTC peer. This method returns a builder, who
|
|
18
131
|
* must be configured with the mock peer's settings. Once configured the
|
|
19
132
|
* peer can be created by calling any `.thenX()` method to define the
|
|
20
133
|
* peer's behaviour.
|
|
134
|
+
*
|
|
135
|
+
* This API allows you to define a single set of handling steps, and then
|
|
136
|
+
* connect directly to the resulting peer to run those steps directly.
|
|
137
|
+
*
|
|
138
|
+
* To instead define multiple behaviours that match different conditions, and
|
|
139
|
+
* then connect clients who may each see different behaviour, define your
|
|
140
|
+
* rules using the `forX()` methods, and connect by using `getMatchingPeer()`.
|
|
21
141
|
*/
|
|
22
142
|
buildPeer(): MockRTCPeerBuilder;
|
|
143
|
+
/**
|
|
144
|
+
* Get the rule-matching peer.
|
|
145
|
+
*
|
|
146
|
+
* This peer accepts connections, matches them against defined rules (defined
|
|
147
|
+
* via the `.forX()` methods) and then handles them according to the steps
|
|
148
|
+
* for the defined rule.
|
|
149
|
+
*
|
|
150
|
+
* To more directly define a set of steps and make a connection that will
|
|
151
|
+
* follow those steps, define a peer with `.buildPeer()` and then connect
|
|
152
|
+
* to that directly.
|
|
153
|
+
*
|
|
154
|
+
* The default behaviour of this peer for unmatched connections is equivalent
|
|
155
|
+
* to `.thenPassThrough()` - it will accept all incoming data without response
|
|
156
|
+
* initially, and proxy all data to a remote peer if one is attached.
|
|
157
|
+
*/
|
|
158
|
+
getMatchingPeer(): MockRTCPeer;
|
|
23
159
|
start(): Promise<void>;
|
|
24
160
|
stop(): Promise<void>;
|
|
161
|
+
on<E extends MockRTCEvent>(event: E, callback: (param: MockRTCEventData[E]) => void): Promise<void>;
|
|
25
162
|
}
|
package/dist/mockrtc.js
CHANGED
package/dist/mockrtc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockrtc.js","sourceRoot":"","sources":["../src/mockrtc.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
1
|
+
{"version":3,"file":"mockrtc.js","sourceRoot":"","sources":["../src/mockrtc.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAkCF,CAAC"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import * as stream from 'stream';
|
|
3
3
|
import { PluggableAdmin } from 'mockttp';
|
|
4
4
|
import type { IResolvers } from "@graphql-tools/utils";
|
|
5
|
-
import { MockRTCOptions } from '../mockrtc';
|
|
5
|
+
import { MockRTCOptions, MockRTCSessionDescription } from '../mockrtc';
|
|
6
6
|
export interface SessionData {
|
|
7
7
|
id: string;
|
|
8
|
-
description:
|
|
8
|
+
description: MockRTCSessionDescription;
|
|
9
9
|
}
|
|
10
10
|
export declare class MockRTCAdminPlugin implements PluggableAdmin.AdminPlugin<MockRTCOptions, {}> {
|
|
11
11
|
private mockRTCServer;
|
|
@@ -14,11 +14,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
14
14
|
};
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.MockRTCAdminPlugin = void 0;
|
|
17
|
+
const _ = require("lodash");
|
|
17
18
|
const graphql_tag_1 = require("graphql-tag");
|
|
18
19
|
const mockttp_1 = require("mockttp");
|
|
20
|
+
const graphql_subscriptions_1 = require("graphql-subscriptions");
|
|
19
21
|
const handler_steps_1 = require("../handling/handler-steps");
|
|
20
22
|
const mockrtc_server_1 = require("./mockrtc-server");
|
|
21
23
|
const { deserialize } = mockttp_1.PluggableAdmin.Serialization;
|
|
24
|
+
const EVENTS = [
|
|
25
|
+
'peer-connected',
|
|
26
|
+
'peer-disconnected',
|
|
27
|
+
'external-peer-attached',
|
|
28
|
+
'data-channel-opened',
|
|
29
|
+
'data-channel-message-sent',
|
|
30
|
+
'data-channel-message-received',
|
|
31
|
+
'data-channel-closed',
|
|
32
|
+
'media-track-opened',
|
|
33
|
+
'media-track-stats',
|
|
34
|
+
'media-track-closed'
|
|
35
|
+
];
|
|
22
36
|
class MockRTCAdminPlugin {
|
|
23
37
|
constructor() {
|
|
24
38
|
this.schema = (0, graphql_tag_1.gql) `
|
|
@@ -61,17 +75,145 @@ class MockRTCAdminPlugin {
|
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
scalar HandlerStep
|
|
78
|
+
|
|
79
|
+
extend type Subscription {
|
|
80
|
+
peerConnected: RTCPeerConnectionEvent!
|
|
81
|
+
peerDisconnected: RTCPeerDisconnectionEvent!
|
|
82
|
+
externalPeerAttached: RTCAttachmentEvent!
|
|
83
|
+
|
|
84
|
+
dataChannelOpened: DataChannelOpenEvent!
|
|
85
|
+
dataChannelMessageSent: DataChannelMessageEvent!
|
|
86
|
+
dataChannelMessageReceived: DataChannelMessageEvent!
|
|
87
|
+
dataChannelClosed: DataChannelCloseEvent!
|
|
88
|
+
|
|
89
|
+
mediaTrackOpened: MediaTrackOpenEvent!
|
|
90
|
+
mediaTrackStats: MediaTrackStatsEvent!
|
|
91
|
+
mediaTrackClosed: MediaTrackCloseEvent!
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
type RTCPeerConnectionEvent {
|
|
95
|
+
peerId: ID!
|
|
96
|
+
sessionId: ID!
|
|
97
|
+
|
|
98
|
+
metadata: Raw!
|
|
99
|
+
timingEvents: Raw!
|
|
100
|
+
|
|
101
|
+
localSessionDescription: SessionDescriptionResult!
|
|
102
|
+
remoteSessionDescription: SessionDescriptionResult!
|
|
103
|
+
selectedLocalCandidate: RTCSelectedCandidate!
|
|
104
|
+
selectedRemoteCandidate: RTCSelectedCandidate!
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
type RTCSelectedCandidate {
|
|
108
|
+
address: String!
|
|
109
|
+
port: Int!
|
|
110
|
+
protocol: String!
|
|
111
|
+
type: String!
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
type RTCPeerDisconnectionEvent {
|
|
115
|
+
peerId: ID!
|
|
116
|
+
sessionId: ID!
|
|
117
|
+
timingEvents: Raw!
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
type RTCAttachmentEvent {
|
|
121
|
+
peerId: ID!
|
|
122
|
+
sessionId: ID!
|
|
123
|
+
externalConnection: RTCExternalPeerConnectionEvent!
|
|
124
|
+
timingEvents: Raw!
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
type RTCExternalPeerConnectionEvent {
|
|
128
|
+
sessionId: ID!
|
|
129
|
+
localSessionDescription: SessionDescriptionResult!
|
|
130
|
+
remoteSessionDescription: SessionDescriptionResult!
|
|
131
|
+
selectedLocalCandidate: RTCSelectedCandidate!
|
|
132
|
+
selectedRemoteCandidate: RTCSelectedCandidate!
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
type DataChannelOpenEvent {
|
|
136
|
+
peerId: ID!
|
|
137
|
+
sessionId: ID!
|
|
138
|
+
channelId: Int!
|
|
139
|
+
channelLabel: String!
|
|
140
|
+
channelProtocol: String!
|
|
141
|
+
|
|
142
|
+
eventTimestamp: Float!
|
|
143
|
+
timingEvents: Raw!
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
type DataChannelMessageEvent {
|
|
147
|
+
peerId: ID!
|
|
148
|
+
sessionId: ID!
|
|
149
|
+
channelId: Int!
|
|
150
|
+
direction: String!
|
|
151
|
+
content: Buffer!
|
|
152
|
+
isBinary: Boolean!
|
|
153
|
+
|
|
154
|
+
eventTimestamp: Float!
|
|
155
|
+
timingEvents: Raw!
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
type DataChannelCloseEvent {
|
|
159
|
+
peerId: ID!
|
|
160
|
+
sessionId: ID!
|
|
161
|
+
channelId: Int!
|
|
162
|
+
|
|
163
|
+
eventTimestamp: Float!
|
|
164
|
+
timingEvents: Raw!
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
type MediaTrackOpenEvent {
|
|
168
|
+
peerId: ID!
|
|
169
|
+
sessionId: ID!
|
|
170
|
+
trackMid: ID!
|
|
171
|
+
trackType: String!
|
|
172
|
+
trackDirection: String!
|
|
173
|
+
|
|
174
|
+
eventTimestamp: Float!
|
|
175
|
+
timingEvents: Raw!
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
type MediaTrackStatsEvent {
|
|
179
|
+
peerId: ID!
|
|
180
|
+
sessionId: ID!
|
|
181
|
+
trackMid: ID!
|
|
182
|
+
|
|
183
|
+
totalBytesSent: Int!
|
|
184
|
+
totalBytesReceived: Int!
|
|
185
|
+
|
|
186
|
+
eventTimestamp: Float!
|
|
187
|
+
timingEvents: Raw!
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
type MediaTrackCloseEvent {
|
|
191
|
+
peerId: ID!
|
|
192
|
+
sessionId: ID!
|
|
193
|
+
trackMid: ID!
|
|
194
|
+
|
|
195
|
+
eventTimestamp: Float!
|
|
196
|
+
timingEvents: Raw!
|
|
197
|
+
}
|
|
64
198
|
`;
|
|
65
199
|
}
|
|
66
200
|
start(options) {
|
|
67
201
|
this.mockRTCServer = new mockrtc_server_1.MockRTCServer(options);
|
|
68
202
|
return this.mockRTCServer.start();
|
|
69
203
|
}
|
|
70
|
-
reset() {
|
|
204
|
+
reset() {
|
|
205
|
+
this.mockRTCServer.reset();
|
|
206
|
+
}
|
|
71
207
|
stop() {
|
|
72
208
|
return this.mockRTCServer.stop();
|
|
73
209
|
}
|
|
74
210
|
buildResolvers(adminStream, ruleParams) {
|
|
211
|
+
const pubsub = new graphql_subscriptions_1.PubSub();
|
|
212
|
+
EVENTS.forEach((eventName) => {
|
|
213
|
+
this.mockRTCServer.on(eventName, (peer) => {
|
|
214
|
+
pubsub.publish(eventName, { [_.camelCase(eventName)]: peer });
|
|
215
|
+
});
|
|
216
|
+
});
|
|
75
217
|
return {
|
|
76
218
|
Mutation: {
|
|
77
219
|
createPeer: (__, { data: { steps } }) => {
|
|
@@ -155,7 +297,10 @@ class MockRTCAdminPlugin {
|
|
|
155
297
|
}
|
|
156
298
|
});
|
|
157
299
|
})
|
|
158
|
-
}
|
|
300
|
+
},
|
|
301
|
+
Subscription: Object.assign({}, (EVENTS.reduce((acc, eventName) => (Object.assign(Object.assign({}, acc), { [_.camelCase(eventName)]: {
|
|
302
|
+
subscribe: () => pubsub.asyncIterator(eventName)
|
|
303
|
+
} })), {})))
|
|
159
304
|
};
|
|
160
305
|
}
|
|
161
306
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockrtc-admin-plugin.js","sourceRoot":"","sources":["../../src/server/mockrtc-admin-plugin.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"mockrtc-admin-plugin.js","sourceRoot":"","sources":["../../src/server/mockrtc-admin-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from "events";
|
|
2
3
|
import { MockRTCPeer, MockRTCPeerOptions, MockRTCSession, MockRTCAnswerParams, MockRTCOfferParams, MockRTCExternalAnswerParams, MockRTCExternalOfferParams, OfferOptions, AnswerOptions } from "../mockrtc-peer";
|
|
3
4
|
import { HandlerStep } from '../handling/handler-steps';
|
|
5
|
+
import { RTCConnection } from '../webrtc/rtc-connection';
|
|
4
6
|
export declare class MockRTCServerPeer implements MockRTCPeer {
|
|
5
|
-
private
|
|
7
|
+
private getHandlerSteps;
|
|
6
8
|
private options;
|
|
9
|
+
private eventEmitter;
|
|
7
10
|
readonly peerId: string;
|
|
11
|
+
private debug;
|
|
8
12
|
private readonly connections;
|
|
9
13
|
private readonly unassignedExternalConnections;
|
|
10
|
-
constructor(
|
|
14
|
+
constructor(getHandlerSteps: (conn: RTCConnection) => HandlerStep[], options: MockRTCPeerOptions & {
|
|
15
|
+
peerId?: string;
|
|
16
|
+
}, eventEmitter: EventEmitter);
|
|
11
17
|
private trackConnection;
|
|
12
18
|
private getExternalConnection;
|
|
13
19
|
createExternalOffer(options?: OfferOptions): Promise<MockRTCExternalOfferParams>;
|
|
@@ -15,13 +15,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.MockRTCServerPeer = void 0;
|
|
17
17
|
const crypto_1 = require("crypto");
|
|
18
|
+
const now = require("performance-now");
|
|
18
19
|
const rtc_connection_1 = require("../webrtc/rtc-connection");
|
|
19
20
|
const mockrtc_connection_1 = require("../webrtc/mockrtc-connection");
|
|
20
21
|
class MockRTCServerPeer {
|
|
21
|
-
constructor(
|
|
22
|
-
this.
|
|
22
|
+
constructor(getHandlerSteps, options = {}, eventEmitter) {
|
|
23
|
+
this.getHandlerSteps = getHandlerSteps;
|
|
23
24
|
this.options = options;
|
|
25
|
+
this.eventEmitter = eventEmitter;
|
|
24
26
|
this.peerId = (0, crypto_1.randomUUID)();
|
|
27
|
+
this.debug = false;
|
|
25
28
|
// A list of all currently open connections managed by this peer
|
|
26
29
|
this.connections = {};
|
|
27
30
|
// A subset of the connections: external connections with no assigned internal connection
|
|
@@ -34,15 +37,96 @@ class MockRTCServerPeer {
|
|
|
34
37
|
return externalConn;
|
|
35
38
|
};
|
|
36
39
|
this.messages = {};
|
|
40
|
+
this.debug = !!options.debug;
|
|
41
|
+
if (options.peerId)
|
|
42
|
+
this.peerId = options.peerId;
|
|
37
43
|
}
|
|
38
44
|
trackConnection(conn) {
|
|
39
45
|
this.connections[conn.id] = conn;
|
|
40
46
|
conn.once('connection-closed', () => {
|
|
41
47
|
delete this.connections[conn.id];
|
|
42
48
|
});
|
|
49
|
+
if (conn instanceof mockrtc_connection_1.MockRTCConnection) {
|
|
50
|
+
// Here we listen to the various internal connection events, and convert them into
|
|
51
|
+
// their corresponding public-API events.
|
|
52
|
+
conn.once('connection-connected', () => {
|
|
53
|
+
const timingEvents = {
|
|
54
|
+
startTime: Date.now(),
|
|
55
|
+
connectTimestamp: now()
|
|
56
|
+
};
|
|
57
|
+
const connectionEventParams = {
|
|
58
|
+
peerId: this.peerId,
|
|
59
|
+
sessionId: conn.id,
|
|
60
|
+
timingEvents
|
|
61
|
+
};
|
|
62
|
+
const selectedCandidates = conn.getSelectedCandidates();
|
|
63
|
+
this.eventEmitter.emit('peer-connected', Object.assign(Object.assign({}, connectionEventParams), { localSessionDescription: conn.getLocalDescription(), remoteSessionDescription: conn.getRemoteDescription(), metadata: conn.metadata, selectedLocalCandidate: selectedCandidates.local, selectedRemoteCandidate: selectedCandidates.remote }));
|
|
64
|
+
conn.once('external-connection-attached', (externalConn) => {
|
|
65
|
+
timingEvents.externalAttachTimestamp = now();
|
|
66
|
+
const selectedExternalCandidates = externalConn.getSelectedCandidates();
|
|
67
|
+
this.eventEmitter.emit('external-peer-attached', Object.assign(Object.assign({}, connectionEventParams), { externalConnection: {
|
|
68
|
+
sessionId: externalConn.id,
|
|
69
|
+
localSessionDescription: externalConn.getLocalDescription(),
|
|
70
|
+
remoteSessionDescription: externalConn.getRemoteDescription(),
|
|
71
|
+
selectedLocalCandidate: selectedExternalCandidates.local,
|
|
72
|
+
selectedRemoteCandidate: selectedExternalCandidates.remote
|
|
73
|
+
} }));
|
|
74
|
+
});
|
|
75
|
+
const emitChannelEvents = (channelStream) => {
|
|
76
|
+
const channelEventParams = Object.assign(Object.assign({}, connectionEventParams), { channelId: channelStream.id });
|
|
77
|
+
this.eventEmitter.emit('data-channel-opened', Object.assign(Object.assign({}, channelEventParams), { channelLabel: channelStream.label, channelProtocol: channelStream.protocol, eventTimestamp: now() }));
|
|
78
|
+
const emitMessage = (direction) => (data) => {
|
|
79
|
+
const isBinary = Buffer.isBuffer(data);
|
|
80
|
+
const content = isBinary
|
|
81
|
+
? data
|
|
82
|
+
: Buffer.from(data, 'utf8');
|
|
83
|
+
this.eventEmitter.emit(`data-channel-message-${direction}`, Object.assign(Object.assign({}, channelEventParams), { direction,
|
|
84
|
+
content,
|
|
85
|
+
isBinary, eventTimestamp: now() }));
|
|
86
|
+
};
|
|
87
|
+
channelStream.on('read-data', emitMessage('received'));
|
|
88
|
+
channelStream.on('wrote-data', emitMessage('sent'));
|
|
89
|
+
channelStream.on('close', () => this.eventEmitter.emit('data-channel-closed', Object.assign(Object.assign({}, channelEventParams), { eventTimestamp: now() })));
|
|
90
|
+
};
|
|
91
|
+
conn.on('channel-open', emitChannelEvents);
|
|
92
|
+
// Due to race conditions somewhere (?) presumably in node-datachannel, channels can
|
|
93
|
+
// be created before the 'connected' event fires, so we need to handle already
|
|
94
|
+
// existing channels here too:
|
|
95
|
+
conn.channels.forEach(emitChannelEvents);
|
|
96
|
+
const emitTrackEvents = (mediaTrack) => {
|
|
97
|
+
const trackEventParams = Object.assign(Object.assign({}, connectionEventParams), { trackMid: mediaTrack.mid });
|
|
98
|
+
this.eventEmitter.emit('media-track-opened', Object.assign(Object.assign({}, trackEventParams), { trackType: mediaTrack.type, trackDirection: mediaTrack.direction, eventTimestamp: now() }));
|
|
99
|
+
let previousBytesSent = 0;
|
|
100
|
+
let previousBytesReceived = 0;
|
|
101
|
+
const statsInterval = setInterval(() => {
|
|
102
|
+
if (previousBytesSent === mediaTrack.totalBytesSent &&
|
|
103
|
+
previousBytesReceived === mediaTrack.totalBytesReceived)
|
|
104
|
+
return; // Skip zero-change events to limit traffic noise
|
|
105
|
+
this.eventEmitter.emit('media-track-stats', Object.assign(Object.assign({}, trackEventParams), { totalBytesSent: mediaTrack.totalBytesSent, totalBytesReceived: mediaTrack.totalBytesReceived, eventTimestamp: now() }));
|
|
106
|
+
previousBytesSent = mediaTrack.totalBytesSent;
|
|
107
|
+
previousBytesReceived = mediaTrack.totalBytesReceived;
|
|
108
|
+
}, 1000);
|
|
109
|
+
mediaTrack.on('close', () => {
|
|
110
|
+
clearInterval(statsInterval);
|
|
111
|
+
this.eventEmitter.emit('media-track-closed', Object.assign(Object.assign({}, trackEventParams), { eventTimestamp: now() }));
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
conn.on('track-open', emitTrackEvents);
|
|
115
|
+
// Due to race conditions somewhere (?) presumably in node-datachannel, tracks can
|
|
116
|
+
// be created before the 'connected' event fires, so we need to handle already
|
|
117
|
+
// existing tracks here too:
|
|
118
|
+
conn.mediaTracks.forEach(emitTrackEvents);
|
|
119
|
+
conn.once('connection-closed', () => {
|
|
120
|
+
timingEvents.disconnectTimestamp = now();
|
|
121
|
+
this.eventEmitter.emit('peer-disconnected', Object.assign({}, connectionEventParams));
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
43
125
|
}
|
|
44
126
|
createExternalOffer(options = {}) {
|
|
45
127
|
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
if (this.debug)
|
|
129
|
+
console.log(`Creating external peer offer for ${this.peerId}`);
|
|
46
130
|
const externalConn = new rtc_connection_1.RTCConnection();
|
|
47
131
|
this.unassignedExternalConnections[externalConn.id] = externalConn;
|
|
48
132
|
this.trackConnection(externalConn);
|
|
@@ -51,6 +135,8 @@ class MockRTCServerPeer {
|
|
|
51
135
|
offer: yield externalConn.sessionApi.createOffer(options),
|
|
52
136
|
session: externalConn.sessionApi,
|
|
53
137
|
setAnswer: (answer) => __awaiter(this, void 0, void 0, function* () {
|
|
138
|
+
if (this.debug)
|
|
139
|
+
console.log(`Accepting answer for external peer offer for ${this.peerId}`);
|
|
54
140
|
externalConn.sessionApi.completeOffer(answer);
|
|
55
141
|
})
|
|
56
142
|
};
|
|
@@ -58,6 +144,8 @@ class MockRTCServerPeer {
|
|
|
58
144
|
}
|
|
59
145
|
answerExternalOffer(offer, options) {
|
|
60
146
|
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
if (this.debug)
|
|
148
|
+
console.log(`Answering offer with external peer for ${this.peerId}`);
|
|
61
149
|
const externalConn = new rtc_connection_1.RTCConnection();
|
|
62
150
|
this.unassignedExternalConnections[externalConn.id] = externalConn;
|
|
63
151
|
this.trackConnection(externalConn);
|
|
@@ -76,7 +164,7 @@ class MockRTCServerPeer {
|
|
|
76
164
|
conn.close().catch(() => { });
|
|
77
165
|
});
|
|
78
166
|
if (this.options.recordMessages) {
|
|
79
|
-
|
|
167
|
+
const logChannelMessages = (channel) => {
|
|
80
168
|
var _a;
|
|
81
169
|
var _b;
|
|
82
170
|
const channelLabel = channel.label;
|
|
@@ -84,12 +172,16 @@ class MockRTCServerPeer {
|
|
|
84
172
|
channel.on('data', d => {
|
|
85
173
|
messageLog.push(d);
|
|
86
174
|
});
|
|
87
|
-
}
|
|
175
|
+
};
|
|
176
|
+
conn.channels.forEach(logChannelMessages);
|
|
177
|
+
conn.on('channel-open', logChannelMessages);
|
|
88
178
|
}
|
|
89
179
|
return conn;
|
|
90
180
|
}
|
|
91
181
|
createOffer(options = {}) {
|
|
92
182
|
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
if (this.debug)
|
|
184
|
+
console.log(`Creating mock offer for ${this.peerId}`);
|
|
93
185
|
const conn = this.createConnection();
|
|
94
186
|
return {
|
|
95
187
|
offer: yield conn.sessionApi.createOffer(options),
|
|
@@ -102,6 +194,8 @@ class MockRTCServerPeer {
|
|
|
102
194
|
}
|
|
103
195
|
answerOffer(offer, options = {}) {
|
|
104
196
|
return __awaiter(this, void 0, void 0, function* () {
|
|
197
|
+
if (this.debug)
|
|
198
|
+
console.log(`Answering offer for mocking for ${this.peerId}`);
|
|
105
199
|
const conn = this.createConnection();
|
|
106
200
|
return {
|
|
107
201
|
answer: yield conn.sessionApi.answerOffer(offer, options),
|
|
@@ -115,7 +209,8 @@ class MockRTCServerPeer {
|
|
|
115
209
|
handleConnection(conn) {
|
|
116
210
|
return __awaiter(this, void 0, void 0, function* () {
|
|
117
211
|
yield conn.waitUntilConnected();
|
|
118
|
-
|
|
212
|
+
const handlerSteps = this.getHandlerSteps(conn);
|
|
213
|
+
for (const step of handlerSteps) {
|
|
119
214
|
yield step.handle(conn);
|
|
120
215
|
}
|
|
121
216
|
yield conn.close();
|
|
@@ -128,11 +223,17 @@ class MockRTCServerPeer {
|
|
|
128
223
|
}
|
|
129
224
|
getAllMessages() {
|
|
130
225
|
return __awaiter(this, void 0, void 0, function* () {
|
|
226
|
+
if (!this.options.recordMessages) {
|
|
227
|
+
throw new Error("Can't query messages, as recordMessages was not enabled");
|
|
228
|
+
}
|
|
131
229
|
return Object.values(this.messages).flat();
|
|
132
230
|
});
|
|
133
231
|
}
|
|
134
232
|
getMessagesOnChannel(channelName) {
|
|
135
233
|
return __awaiter(this, void 0, void 0, function* () {
|
|
234
|
+
if (!this.options.recordMessages) {
|
|
235
|
+
throw new Error("Can't query messages, as recordMessages was not enabled");
|
|
236
|
+
}
|
|
136
237
|
return this.messages[channelName].flat();
|
|
137
238
|
});
|
|
138
239
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockrtc-server-peer.js","sourceRoot":"","sources":["../../src/server/mockrtc-server-peer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;AAEH,mCAAoC;
|
|
1
|
+
{"version":3,"file":"mockrtc-server-peer.js","sourceRoot":"","sources":["../../src/server/mockrtc-server-peer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
import { MockRTC, MockRTCOptions, MockRTCPeerBuilder } from "../mockrtc";
|
|
1
|
+
import { MockRTC, MockRTCEvent, MockRTCOptions, MockRTCPeerBuilder } from "../mockrtc";
|
|
2
2
|
import { MockRTCServerPeer } from "./mockrtc-server-peer";
|
|
3
3
|
import { HandlerStepDefinition } from "../handling/handler-step-definitions";
|
|
4
|
+
import { MockRTCPeer } from "../mockrtc-peer";
|
|
4
5
|
export declare class MockRTCServer implements MockRTC {
|
|
5
6
|
private options;
|
|
7
|
+
private debug;
|
|
6
8
|
constructor(options?: MockRTCOptions);
|
|
9
|
+
private eventEmitter;
|
|
7
10
|
start(): Promise<void>;
|
|
8
11
|
stop(): Promise<void>;
|
|
9
|
-
|
|
10
|
-
buildPeerFromData: (handlerStepDefinitions: HandlerStepDefinition[]) => Promise<MockRTCServerPeer>;
|
|
12
|
+
reset(): Promise<void>;
|
|
11
13
|
private _activePeers;
|
|
12
14
|
get activePeers(): Readonly<MockRTCServerPeer[]>;
|
|
13
15
|
getPeer(id: string): MockRTCServerPeer;
|
|
16
|
+
on(event: MockRTCEvent, callback: (...args: any) => void): Promise<void>;
|
|
17
|
+
private matchingPeer;
|
|
18
|
+
getMatchingPeer(): MockRTCPeer;
|
|
19
|
+
private matchConnection;
|
|
20
|
+
buildPeer(): MockRTCPeerBuilder;
|
|
21
|
+
buildPeerFromData: (handlerStepDefinitions: HandlerStepDefinition[]) => Promise<MockRTCServerPeer>;
|
|
14
22
|
}
|