mockrtc 0.2.0 → 0.3.1
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/.github/workflows/ci.yml +2 -2
- package/dist/client/mockrtc-admin-request-builder.d.ts +7 -1
- package/dist/client/mockrtc-admin-request-builder.js +30 -0
- package/dist/client/mockrtc-admin-request-builder.js.map +1 -1
- package/dist/client/mockrtc-client.d.ts +8 -4
- package/dist/client/mockrtc-client.js +21 -9
- package/dist/client/mockrtc-client.js.map +1 -1
- package/dist/handling/handler-builder.d.ts +16 -9
- package/dist/handling/handler-builder.js +11 -1
- package/dist/handling/handler-builder.js.map +1 -1
- package/dist/handling/handler-step-definitions.d.ts +40 -23
- package/dist/handling/handler-step-definitions.js +61 -19
- package/dist/handling/handler-step-definitions.js.map +1 -1
- package/dist/handling/handler-steps.d.ts +11 -1
- package/dist/handling/handler-steps.js +33 -16
- package/dist/handling/handler-steps.js.map +1 -1
- package/dist/main-browser.d.ts +1 -0
- package/dist/main-browser.js +2 -1
- package/dist/main-browser.js.map +1 -1
- package/dist/main.d.ts +5 -3
- package/dist/main.js +2 -1
- package/dist/main.js.map +1 -1
- package/dist/matching/matcher-definitions.d.ts +51 -0
- package/dist/matching/matcher-definitions.js +94 -0
- package/dist/matching/matcher-definitions.js.map +1 -0
- package/dist/matching/matchers.d.ts +27 -0
- package/dist/matching/matchers.js +87 -0
- package/dist/matching/matchers.js.map +1 -0
- package/dist/mockrtc-base.d.ts +16 -0
- package/dist/mockrtc-base.js +19 -0
- package/dist/mockrtc-base.js.map +1 -0
- package/dist/mockrtc-peer.d.ts +9 -2
- package/dist/mockrtc.d.ts +62 -0
- package/dist/mockrtc.js.map +1 -1
- package/dist/rule-builder.d.ts +86 -0
- package/dist/rule-builder.js +113 -0
- package/dist/rule-builder.js.map +1 -0
- package/dist/server/mockrtc-admin-plugin.js +18 -1
- package/dist/server/mockrtc-admin-plugin.js.map +1 -1
- package/dist/server/mockrtc-server-peer.d.ts +1 -1
- package/dist/server/mockrtc-server-peer.js +19 -7
- package/dist/server/mockrtc-server-peer.js.map +1 -1
- package/dist/server/mockrtc-server.d.ts +12 -5
- package/dist/server/mockrtc-server.js +53 -18
- package/dist/server/mockrtc-server.js.map +1 -1
- package/dist/webrtc/datachannel-stream.d.ts +2 -0
- package/dist/webrtc/datachannel-stream.js +15 -1
- package/dist/webrtc/datachannel-stream.js.map +1 -1
- package/dist/webrtc/mediatrack-stream.d.ts +2 -0
- package/dist/webrtc/mediatrack-stream.js +15 -1
- package/dist/webrtc/mediatrack-stream.js.map +1 -1
- package/dist/webrtc/mockrtc-connection.js +1 -1
- package/dist/webrtc/mockrtc-connection.js.map +1 -1
- package/dist/webrtc/rtc-connection.d.ts +6 -2
- package/dist/webrtc/rtc-connection.js +21 -21
- package/dist/webrtc/rtc-connection.js.map +1 -1
- package/dist/webrtc-hooks.js +8 -2
- package/dist/webrtc-hooks.js.map +1 -1
- package/package.json +2 -2
- package/src/client/mockrtc-admin-request-builder.ts +49 -1
- package/src/client/mockrtc-client.ts +28 -10
- package/src/handling/handler-builder.ts +22 -10
- package/src/handling/handler-step-definitions.ts +81 -23
- package/src/handling/handler-steps.ts +42 -15
- package/src/main-browser.ts +1 -0
- package/src/main.ts +5 -1
- package/src/matching/matcher-definitions.ts +109 -0
- package/src/matching/matchers.ts +118 -0
- package/src/mockrtc-base.ts +49 -0
- package/src/mockrtc-peer.ts +9 -2
- package/src/mockrtc.ts +72 -0
- package/src/rule-builder.ts +142 -0
- package/src/server/mockrtc-admin-plugin.ts +41 -3
- package/src/server/mockrtc-server-peer.ts +28 -18
- package/src/server/mockrtc-server.ts +71 -15
- package/src/webrtc/datachannel-stream.ts +15 -1
- package/src/webrtc/mediatrack-stream.ts +15 -1
- package/src/webrtc/mockrtc-connection.ts +1 -1
- package/src/webrtc/rtc-connection.ts +37 -20
- package/src/webrtc-hooks.ts +8 -2
- package/test/integration/events.spec.ts +3 -1
- package/test/integration/matching.spec.ts +189 -0
- package/test/integration/proxy.spec.ts +4 -2
- package/test/integration/send-steps.spec.ts +51 -0
package/dist/mockrtc.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { MockRTCHandlerBuilder } from "./handling/handler-builder";
|
|
3
|
+
import { HandlerStepDefinition } from "./handling/handler-step-definitions";
|
|
4
|
+
import { MatcherDefinition } from "./matching/matcher-definitions";
|
|
3
5
|
import type { ConnectionMetadata, MockRTCPeer } from "./mockrtc-peer";
|
|
6
|
+
import { MockRTCRuleBuilder } from "./rule-builder";
|
|
4
7
|
export interface MockRTCPeerBuilder extends MockRTCHandlerBuilder<MockRTCPeer> {
|
|
5
8
|
}
|
|
6
9
|
export interface MockRTCOptions {
|
|
@@ -125,6 +128,10 @@ export declare type MockRTCEventData = {
|
|
|
125
128
|
};
|
|
126
129
|
};
|
|
127
130
|
export declare type MockRTCEvent = keyof MockRTCEventData;
|
|
131
|
+
export declare type MockRTCRuleDefinition = {
|
|
132
|
+
matchers: MatcherDefinition[];
|
|
133
|
+
steps: HandlerStepDefinition[];
|
|
134
|
+
};
|
|
128
135
|
export interface MockRTC {
|
|
129
136
|
/**
|
|
130
137
|
* Start creating a mock WebRTC peer. This method returns a builder, who
|
|
@@ -140,6 +147,22 @@ export interface MockRTC {
|
|
|
140
147
|
* rules using the `forX()` methods, and connect by using `getMatchingPeer()`.
|
|
141
148
|
*/
|
|
142
149
|
buildPeer(): MockRTCPeerBuilder;
|
|
150
|
+
/**
|
|
151
|
+
* Starting defining a mock WebRTC rule. This methods returns a rule builder,
|
|
152
|
+
* which can be configured to define which incoming connections should be
|
|
153
|
+
* matched, with methods like `.fromPageHostname(hostname)`.
|
|
154
|
+
*
|
|
155
|
+
* Once the matching is configured, start calling handler methods like
|
|
156
|
+
* `.send()` to define a series of steps to run for matching connections,
|
|
157
|
+
* and then call a `.thenX()` method to complete the definition and
|
|
158
|
+
* define the rule.
|
|
159
|
+
*
|
|
160
|
+
* The rule definition is not complete until the returned promise resolves.
|
|
161
|
+
* Once it has resolved successfully, any future connections to the peer
|
|
162
|
+
* returned by `getMatchingPeer()` will be matched against these rules,
|
|
163
|
+
* and will run the steps for the first matching rule found.
|
|
164
|
+
*/
|
|
165
|
+
forConnections(): MockRTCRuleBuilder;
|
|
143
166
|
/**
|
|
144
167
|
* Get the rule-matching peer.
|
|
145
168
|
*
|
|
@@ -158,5 +181,44 @@ export interface MockRTC {
|
|
|
158
181
|
getMatchingPeer(): MockRTCPeer;
|
|
159
182
|
start(): Promise<void>;
|
|
160
183
|
stop(): Promise<void>;
|
|
184
|
+
/**
|
|
185
|
+
* Subscribe to events to monitor WebRTC interactions across all peers managed by
|
|
186
|
+
* this MockRTC session. The events available include:
|
|
187
|
+
*
|
|
188
|
+
* - `peer-connected`
|
|
189
|
+
* - `peer-disconnected`
|
|
190
|
+
* - `external-peer-attached`
|
|
191
|
+
* - `data-channel-opened`
|
|
192
|
+
* - `data-channel-message-sent`
|
|
193
|
+
* - `data-channel-message-received`
|
|
194
|
+
* - `data-channel-closed`
|
|
195
|
+
* - `media-track-opened`
|
|
196
|
+
* - `media-track-stats`
|
|
197
|
+
* - `media-track-closed`
|
|
198
|
+
*/
|
|
161
199
|
on<E extends MockRTCEvent>(event: E, callback: (param: MockRTCEventData[E]) => void): Promise<void>;
|
|
200
|
+
/**
|
|
201
|
+
* Create a peer from a set of step definitions.
|
|
202
|
+
*
|
|
203
|
+
* This API is only useful if you're building peers from data programmatically,
|
|
204
|
+
* rather than using `buildPeer()` and `MockRTCPeerBuilder`, which are generally
|
|
205
|
+
* preferable otherwise.
|
|
206
|
+
*/
|
|
207
|
+
buildPeerFromDefinition(handlerStepDefinitions: HandlerStepDefinition[]): Promise<MockRTCPeer>;
|
|
208
|
+
/**
|
|
209
|
+
* Create a connection-matching rule from a set of matchers and step definitions.
|
|
210
|
+
*
|
|
211
|
+
* This API is only useful if you're building rule from data programmatically,
|
|
212
|
+
* rather than using `forX()` and `MockRTCHandlerBuilder`, which are generally
|
|
213
|
+
* preferable otherwise.
|
|
214
|
+
*/
|
|
215
|
+
addRuleFromDefinition(matcherDefinitions: MatcherDefinition[], handlerStepDefinitions: HandlerStepDefinition[]): Promise<void>;
|
|
216
|
+
/**
|
|
217
|
+
* Create a connection-matching rule from a set of matchers and step definitions.
|
|
218
|
+
*
|
|
219
|
+
* This API is only useful if you're building rule from data programmatically,
|
|
220
|
+
* rather than using `forX()` and `MockRTCHandlerBuilder`, which are generally
|
|
221
|
+
* preferable otherwise.
|
|
222
|
+
*/
|
|
223
|
+
setRulesFromDefinitions(rules: Array<MockRTCRuleDefinition>): Promise<void>;
|
|
162
224
|
}
|
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;;AAqCF,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { MockRTCHandlerBuilder } from "./handling/handler-builder";
|
|
3
|
+
import { HandlerStepDefinition } from "./handling/handler-step-definitions";
|
|
4
|
+
import { MatcherDefinition } from "./matching/matcher-definitions";
|
|
5
|
+
export declare type RuleHandlerBuilder = MockRTCHandlerBuilder<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Rule builders allow you to combine sets of matchers, progressively
|
|
8
|
+
* building a set of matching conditions, before defining the resulting
|
|
9
|
+
* behaviour that will be applied to matching traffic.
|
|
10
|
+
*/
|
|
11
|
+
export declare class MockRTCRuleBuilder implements Omit<RuleHandlerBuilder, 'handlerSteps' | 'buildCallback'> {
|
|
12
|
+
private addRuleCallback;
|
|
13
|
+
constructor(addRuleCallback: (matcherDefinitions: MatcherDefinition[], handlerStepDefinitions: HandlerStepDefinition[]) => Promise<void>);
|
|
14
|
+
private matchers;
|
|
15
|
+
/**
|
|
16
|
+
* Match RTC connections whose initial negotiation includes a data channel.
|
|
17
|
+
*/
|
|
18
|
+
withDataChannels(): this;
|
|
19
|
+
/**
|
|
20
|
+
* Match RTC connections whose initial negotiation includes either an audio or video
|
|
21
|
+
* media track.
|
|
22
|
+
*/
|
|
23
|
+
withMedia(): this;
|
|
24
|
+
/**
|
|
25
|
+
* Match RTC connections whose initial negotiation includes a video media track
|
|
26
|
+
*/
|
|
27
|
+
withVideo(): this;
|
|
28
|
+
/**
|
|
29
|
+
* Match RTC connections whose initial negotiation includes an audio media track
|
|
30
|
+
*/
|
|
31
|
+
withAudio(): this;
|
|
32
|
+
/**
|
|
33
|
+
* Match RTC connections made from hooked JavaScript running on a given hostname.
|
|
34
|
+
*
|
|
35
|
+
* This only matches connections with explicit `sourceURL` metadata, which must be
|
|
36
|
+
* either added automatically (by using the `hookAllWebRTC` or `hookWebRTCConnection`
|
|
37
|
+
* methods) or manually (by providing `metadata: { sourceURL: '...' }` options
|
|
38
|
+
* during mock connection setup).
|
|
39
|
+
*
|
|
40
|
+
* @category Matcher
|
|
41
|
+
*/
|
|
42
|
+
fromPageHostname(hostname: string): this;
|
|
43
|
+
/**
|
|
44
|
+
* Match RTC connections made from hooked JavaScript running on a matching URL.
|
|
45
|
+
*
|
|
46
|
+
* This only matches connections with explicit `sourceURL` metadata, which must be
|
|
47
|
+
* either added automatically (by using the `hookAllWebRTC` or `hookWebRTCConnection`
|
|
48
|
+
* methods) or manually (by providing `metadata: { sourceURL: '...' }` options
|
|
49
|
+
* during mock connection setup).
|
|
50
|
+
*
|
|
51
|
+
* @category Matcher
|
|
52
|
+
*/
|
|
53
|
+
fromPageUrlMatching(urlRegex: RegExp): this;
|
|
54
|
+
/**
|
|
55
|
+
* Match RTC connections made by hooked JavaScript running within a browser with a
|
|
56
|
+
* matching user agent string.
|
|
57
|
+
*
|
|
58
|
+
* This only matches connections with explicit `userAgent` metadata, which must be
|
|
59
|
+
* either added automatically (by using the `hookAllWebRTC` or `hookWebRTCConnection`
|
|
60
|
+
* methods) or manually (by providing `metadata: { userAgent: '...' }` options
|
|
61
|
+
* during mock connection setup).
|
|
62
|
+
*
|
|
63
|
+
* @category Matcher
|
|
64
|
+
*/
|
|
65
|
+
fromUserAgentMatching(userAgentRegEx: RegExp): this;
|
|
66
|
+
private buildDefinitionMethod;
|
|
67
|
+
sleep: (duration: number) => MockRTCHandlerBuilder<void>;
|
|
68
|
+
waitForChannel: (channelLabel?: string | undefined) => MockRTCHandlerBuilder<void>;
|
|
69
|
+
waitForTrack: () => MockRTCHandlerBuilder<void>;
|
|
70
|
+
waitForNextMessage: () => MockRTCHandlerBuilder<void>;
|
|
71
|
+
waitForNextMedia: () => MockRTCHandlerBuilder<void>;
|
|
72
|
+
waitForNextMessageOnChannel: (channelLabel: string) => MockRTCHandlerBuilder<void>;
|
|
73
|
+
createDataChannel: (channelLabel: string) => MockRTCHandlerBuilder<void>;
|
|
74
|
+
send: {
|
|
75
|
+
(message: string | Buffer): MockRTCHandlerBuilder<void>;
|
|
76
|
+
(channel: string | undefined, message: string | Buffer): MockRTCHandlerBuilder<void>;
|
|
77
|
+
};
|
|
78
|
+
thenClose: () => Promise<void>;
|
|
79
|
+
thenSend: {
|
|
80
|
+
(message: string | Buffer): Promise<void>;
|
|
81
|
+
(channel: string, message: string | Buffer): Promise<void>;
|
|
82
|
+
};
|
|
83
|
+
thenEcho: () => Promise<void>;
|
|
84
|
+
thenForwardTo: (peer: RTCPeerConnection) => Promise<void>;
|
|
85
|
+
thenPassThrough: () => Promise<void>;
|
|
86
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* SPDX-FileCopyrightText: 2022 Tim Perry <tim@httptoolkit.tech>
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MockRTCRuleBuilder = void 0;
|
|
8
|
+
const handler_builder_1 = require("./handling/handler-builder");
|
|
9
|
+
const matcher_definitions_1 = require("./matching/matcher-definitions");
|
|
10
|
+
/**
|
|
11
|
+
* Rule builders allow you to combine sets of matchers, progressively
|
|
12
|
+
* building a set of matching conditions, before defining the resulting
|
|
13
|
+
* behaviour that will be applied to matching traffic.
|
|
14
|
+
*/
|
|
15
|
+
class MockRTCRuleBuilder {
|
|
16
|
+
constructor(addRuleCallback) {
|
|
17
|
+
this.addRuleCallback = addRuleCallback;
|
|
18
|
+
this.matchers = [];
|
|
19
|
+
// For all handler methods, return a handler builder - i.e. once you start calling
|
|
20
|
+
// any of these step-definition methods, you can't keep calling matcher methods:
|
|
21
|
+
this.buildDefinitionMethod = (methodName) => ((...args) => {
|
|
22
|
+
const handlerBuilder = new handler_builder_1.MockRTCHandlerBuilder((steps) => this.addRuleCallback(this.matchers, steps));
|
|
23
|
+
return handlerBuilder[methodName](...args);
|
|
24
|
+
});
|
|
25
|
+
this.sleep = this.buildDefinitionMethod('sleep');
|
|
26
|
+
this.waitForChannel = this.buildDefinitionMethod('waitForChannel');
|
|
27
|
+
this.waitForTrack = this.buildDefinitionMethod('waitForTrack');
|
|
28
|
+
this.waitForNextMessage = this.buildDefinitionMethod('waitForNextMessage');
|
|
29
|
+
this.waitForNextMedia = this.buildDefinitionMethod('waitForNextMedia');
|
|
30
|
+
this.waitForNextMessageOnChannel = this.buildDefinitionMethod('waitForNextMessageOnChannel');
|
|
31
|
+
this.createDataChannel = this.buildDefinitionMethod('createDataChannel');
|
|
32
|
+
this.send = this.buildDefinitionMethod('send');
|
|
33
|
+
this.thenClose = this.buildDefinitionMethod('thenClose');
|
|
34
|
+
this.thenSend = this.buildDefinitionMethod('thenSend');
|
|
35
|
+
this.thenEcho = this.buildDefinitionMethod('thenEcho');
|
|
36
|
+
this.thenForwardTo = this.buildDefinitionMethod('thenForwardTo');
|
|
37
|
+
this.thenPassThrough = this.buildDefinitionMethod('thenPassThrough');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Match RTC connections whose initial negotiation includes a data channel.
|
|
41
|
+
*/
|
|
42
|
+
withDataChannels() {
|
|
43
|
+
this.matchers.push(new matcher_definitions_1.HasDataChannelMatcherDefinition());
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Match RTC connections whose initial negotiation includes either an audio or video
|
|
48
|
+
* media track.
|
|
49
|
+
*/
|
|
50
|
+
withMedia() {
|
|
51
|
+
this.matchers.push(new matcher_definitions_1.HasMediaTrackMatcherDefinition());
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Match RTC connections whose initial negotiation includes a video media track
|
|
56
|
+
*/
|
|
57
|
+
withVideo() {
|
|
58
|
+
this.matchers.push(new matcher_definitions_1.HasVideoTrackMatcherDefinition());
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Match RTC connections whose initial negotiation includes an audio media track
|
|
63
|
+
*/
|
|
64
|
+
withAudio() {
|
|
65
|
+
this.matchers.push(new matcher_definitions_1.HasAudioTrackMatcherDefinition());
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Match RTC connections made from hooked JavaScript running on a given hostname.
|
|
70
|
+
*
|
|
71
|
+
* This only matches connections with explicit `sourceURL` metadata, which must be
|
|
72
|
+
* either added automatically (by using the `hookAllWebRTC` or `hookWebRTCConnection`
|
|
73
|
+
* methods) or manually (by providing `metadata: { sourceURL: '...' }` options
|
|
74
|
+
* during mock connection setup).
|
|
75
|
+
*
|
|
76
|
+
* @category Matcher
|
|
77
|
+
*/
|
|
78
|
+
fromPageHostname(hostname) {
|
|
79
|
+
this.matchers.push(new matcher_definitions_1.HostnameMatcherDefinition(hostname));
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Match RTC connections made from hooked JavaScript running on a matching URL.
|
|
84
|
+
*
|
|
85
|
+
* This only matches connections with explicit `sourceURL` metadata, which must be
|
|
86
|
+
* either added automatically (by using the `hookAllWebRTC` or `hookWebRTCConnection`
|
|
87
|
+
* methods) or manually (by providing `metadata: { sourceURL: '...' }` options
|
|
88
|
+
* during mock connection setup).
|
|
89
|
+
*
|
|
90
|
+
* @category Matcher
|
|
91
|
+
*/
|
|
92
|
+
fromPageUrlMatching(urlRegex) {
|
|
93
|
+
this.matchers.push(new matcher_definitions_1.UrlRegexMatcherDefinition(urlRegex));
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Match RTC connections made by hooked JavaScript running within a browser with a
|
|
98
|
+
* matching user agent string.
|
|
99
|
+
*
|
|
100
|
+
* This only matches connections with explicit `userAgent` metadata, which must be
|
|
101
|
+
* either added automatically (by using the `hookAllWebRTC` or `hookWebRTCConnection`
|
|
102
|
+
* methods) or manually (by providing `metadata: { userAgent: '...' }` options
|
|
103
|
+
* during mock connection setup).
|
|
104
|
+
*
|
|
105
|
+
* @category Matcher
|
|
106
|
+
*/
|
|
107
|
+
fromUserAgentMatching(userAgentRegEx) {
|
|
108
|
+
this.matchers.push(new matcher_definitions_1.UserAgentRegexMatcherDefinition(userAgentRegEx));
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.MockRTCRuleBuilder = MockRTCRuleBuilder;
|
|
113
|
+
//# sourceMappingURL=rule-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-builder.js","sourceRoot":"","sources":["../src/rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ const mockttp_1 = require("mockttp");
|
|
|
20
20
|
const graphql_subscriptions_1 = require("graphql-subscriptions");
|
|
21
21
|
const handler_steps_1 = require("../handling/handler-steps");
|
|
22
22
|
const mockrtc_server_1 = require("./mockrtc-server");
|
|
23
|
+
const matchers_1 = require("../matching/matchers");
|
|
23
24
|
const { deserialize } = mockttp_1.PluggableAdmin.Serialization;
|
|
24
25
|
const EVENTS = [
|
|
25
26
|
'peer-connected',
|
|
@@ -38,6 +39,8 @@ class MockRTCAdminPlugin {
|
|
|
38
39
|
this.schema = (0, graphql_tag_1.gql) `
|
|
39
40
|
extend type Mutation {
|
|
40
41
|
createPeer(data: RTCHandlerData!): MockedPeer!
|
|
42
|
+
addRTCRule(data: RTCRuleData!): Void
|
|
43
|
+
setRTCRules(data: [RTCRuleData!]!): Void
|
|
41
44
|
|
|
42
45
|
createOffer(peerId: ID!, sessionId: ID, options: Raw): Session!
|
|
43
46
|
createExternalOffer(peerId: ID!, options: Raw): Session!
|
|
@@ -51,6 +54,11 @@ class MockRTCAdminPlugin {
|
|
|
51
54
|
steps: [Raw!]!
|
|
52
55
|
}
|
|
53
56
|
|
|
57
|
+
input RTCRuleData {
|
|
58
|
+
matchers: [Raw!]!
|
|
59
|
+
steps: [Raw!]!
|
|
60
|
+
}
|
|
61
|
+
|
|
54
62
|
type MockedPeer {
|
|
55
63
|
peerId: ID!
|
|
56
64
|
}
|
|
@@ -217,7 +225,16 @@ class MockRTCAdminPlugin {
|
|
|
217
225
|
return {
|
|
218
226
|
Mutation: {
|
|
219
227
|
createPeer: (__, { data: { steps } }) => {
|
|
220
|
-
return this.mockRTCServer.
|
|
228
|
+
return this.mockRTCServer.buildPeerFromDefinition(steps.map((stepData) => deserialize(stepData, adminStream, ruleParams, handler_steps_1.StepLookup)));
|
|
229
|
+
},
|
|
230
|
+
addRTCRule: (__, { data: { steps, matchers } }) => {
|
|
231
|
+
return this.mockRTCServer.addRuleFromDefinition(matchers.map((matcherData) => deserialize(matcherData, adminStream, ruleParams, matchers_1.MatcherLookup)), steps.map((stepData) => deserialize(stepData, adminStream, ruleParams, handler_steps_1.StepLookup)));
|
|
232
|
+
},
|
|
233
|
+
setRTCRules: (__, { data: rules }) => {
|
|
234
|
+
return this.mockRTCServer.setRulesFromDefinitions(rules.map(({ matchers, steps }) => ({
|
|
235
|
+
matchers: matchers.map((matcherData) => deserialize(matcherData, adminStream, ruleParams, matchers_1.MatcherLookup)),
|
|
236
|
+
steps: steps.map((stepData) => deserialize(stepData, adminStream, ruleParams, handler_steps_1.StepLookup))
|
|
237
|
+
})));
|
|
221
238
|
},
|
|
222
239
|
createOffer: (__, { peerId, sessionId, options }) => __awaiter(this, void 0, void 0, function* () {
|
|
223
240
|
const peer = this.mockRTCServer.getPeer(peerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockrtc-admin-plugin.js","sourceRoot":"","sources":["../../src/server/mockrtc-admin-plugin.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;AAEH,4BAA4B;AAE5B,6CAAkC;AAClC,qCAAyC;AAEzC,iEAA+C;AAE/C,
|
|
1
|
+
{"version":3,"file":"mockrtc-admin-plugin.js","sourceRoot":"","sources":["../../src/server/mockrtc-admin-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ export declare class MockRTCServerPeer implements MockRTCPeer {
|
|
|
11
11
|
private debug;
|
|
12
12
|
private readonly connections;
|
|
13
13
|
private readonly unassignedExternalConnections;
|
|
14
|
-
constructor(getHandlerSteps: (conn: RTCConnection) => HandlerStep[], options: MockRTCPeerOptions & {
|
|
14
|
+
constructor(getHandlerSteps: (conn: RTCConnection) => (HandlerStep[] | Promise<HandlerStep[]>), options: MockRTCPeerOptions & {
|
|
15
15
|
peerId?: string;
|
|
16
16
|
}, eventEmitter: EventEmitter);
|
|
17
17
|
private trackConnection;
|
|
@@ -74,7 +74,13 @@ class MockRTCServerPeer {
|
|
|
74
74
|
});
|
|
75
75
|
const emitChannelEvents = (channelStream) => {
|
|
76
76
|
const channelEventParams = Object.assign(Object.assign({}, connectionEventParams), { channelId: channelStream.id });
|
|
77
|
-
|
|
77
|
+
const announceOpen = () => {
|
|
78
|
+
this.eventEmitter.emit('data-channel-opened', Object.assign(Object.assign({}, channelEventParams), { channelLabel: channelStream.label, channelProtocol: channelStream.protocol, eventTimestamp: now() }));
|
|
79
|
+
};
|
|
80
|
+
if (channelStream.isOpen)
|
|
81
|
+
announceOpen();
|
|
82
|
+
else
|
|
83
|
+
channelStream.on('channel-open', announceOpen);
|
|
78
84
|
const emitMessage = (direction) => (data) => {
|
|
79
85
|
const isBinary = Buffer.isBuffer(data);
|
|
80
86
|
const content = isBinary
|
|
@@ -88,14 +94,20 @@ class MockRTCServerPeer {
|
|
|
88
94
|
channelStream.on('wrote-data', emitMessage('sent'));
|
|
89
95
|
channelStream.on('close', () => this.eventEmitter.emit('data-channel-closed', Object.assign(Object.assign({}, channelEventParams), { eventTimestamp: now() })));
|
|
90
96
|
};
|
|
91
|
-
conn.on('channel-
|
|
97
|
+
conn.on('channel-created', emitChannelEvents);
|
|
92
98
|
// Due to race conditions somewhere (?) presumably in node-datachannel, channels can
|
|
93
99
|
// be created before the 'connected' event fires, so we need to handle already
|
|
94
100
|
// existing channels here too:
|
|
95
101
|
conn.channels.forEach(emitChannelEvents);
|
|
96
102
|
const emitTrackEvents = (mediaTrack) => {
|
|
97
103
|
const trackEventParams = Object.assign(Object.assign({}, connectionEventParams), { trackMid: mediaTrack.mid });
|
|
98
|
-
|
|
104
|
+
const announceOpen = () => {
|
|
105
|
+
this.eventEmitter.emit('media-track-opened', Object.assign(Object.assign({}, trackEventParams), { trackType: mediaTrack.type, trackDirection: mediaTrack.direction, eventTimestamp: now() }));
|
|
106
|
+
};
|
|
107
|
+
if (mediaTrack.isOpen)
|
|
108
|
+
announceOpen();
|
|
109
|
+
else
|
|
110
|
+
mediaTrack.on('track-open', announceOpen);
|
|
99
111
|
let previousBytesSent = 0;
|
|
100
112
|
let previousBytesReceived = 0;
|
|
101
113
|
const statsInterval = setInterval(() => {
|
|
@@ -111,7 +123,7 @@ class MockRTCServerPeer {
|
|
|
111
123
|
this.eventEmitter.emit('media-track-closed', Object.assign(Object.assign({}, trackEventParams), { eventTimestamp: now() }));
|
|
112
124
|
});
|
|
113
125
|
};
|
|
114
|
-
conn.on('track-
|
|
126
|
+
conn.on('track-created', emitTrackEvents);
|
|
115
127
|
// Due to race conditions somewhere (?) presumably in node-datachannel, tracks can
|
|
116
128
|
// be created before the 'connected' event fires, so we need to handle already
|
|
117
129
|
// existing tracks here too:
|
|
@@ -169,12 +181,12 @@ class MockRTCServerPeer {
|
|
|
169
181
|
var _b;
|
|
170
182
|
const channelLabel = channel.label;
|
|
171
183
|
const messageLog = ((_a = (_b = this.messages)[channelLabel]) !== null && _a !== void 0 ? _a : (_b[channelLabel] = []));
|
|
172
|
-
channel.on('data', d => {
|
|
184
|
+
channel.on('read-data', d => {
|
|
173
185
|
messageLog.push(d);
|
|
174
186
|
});
|
|
175
187
|
};
|
|
176
188
|
conn.channels.forEach(logChannelMessages);
|
|
177
|
-
conn.on('channel-
|
|
189
|
+
conn.on('channel-created', logChannelMessages);
|
|
178
190
|
}
|
|
179
191
|
return conn;
|
|
180
192
|
}
|
|
@@ -209,7 +221,7 @@ class MockRTCServerPeer {
|
|
|
209
221
|
handleConnection(conn) {
|
|
210
222
|
return __awaiter(this, void 0, void 0, function* () {
|
|
211
223
|
yield conn.waitUntilConnected();
|
|
212
|
-
const handlerSteps = this.getHandlerSteps(conn);
|
|
224
|
+
const handlerSteps = yield this.getHandlerSteps(conn);
|
|
213
225
|
for (const step of handlerSteps) {
|
|
214
226
|
yield step.handle(conn);
|
|
215
227
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockrtc-server-peer.js","sourceRoot":"","sources":["../../src/server/mockrtc-server-peer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;AAEH,mCAAoC;AAEpC,uCAAwC;AAexC,6DAAyD;AACzD,qEAAiE;AAKjE,MAAa,iBAAiB;IAY1B,YACY,
|
|
1
|
+
{"version":3,"file":"mockrtc-server-peer.js","sourceRoot":"","sources":["../../src/server/mockrtc-server-peer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { MockRTC, MockRTCEvent, MockRTCOptions
|
|
1
|
+
import { MockRTC, MockRTCEvent, MockRTCOptions } from "../mockrtc";
|
|
2
|
+
import { MockRTCBase } from "../mockrtc-base";
|
|
2
3
|
import { MockRTCServerPeer } from "./mockrtc-server-peer";
|
|
3
|
-
import { HandlerStepDefinition } from "../handling/handler-step-definitions";
|
|
4
4
|
import { MockRTCPeer } from "../mockrtc-peer";
|
|
5
|
-
|
|
5
|
+
import type { MatcherDefinition } from "../matching/matcher-definitions";
|
|
6
|
+
import type { HandlerStepDefinition } from "../handling/handler-step-definitions";
|
|
7
|
+
export declare class MockRTCServer extends MockRTCBase implements MockRTC {
|
|
6
8
|
private options;
|
|
7
9
|
private debug;
|
|
8
10
|
constructor(options?: MockRTCOptions);
|
|
@@ -16,7 +18,12 @@ export declare class MockRTCServer implements MockRTC {
|
|
|
16
18
|
on(event: MockRTCEvent, callback: (...args: any) => void): Promise<void>;
|
|
17
19
|
private matchingPeer;
|
|
18
20
|
getMatchingPeer(): MockRTCPeer;
|
|
21
|
+
private rules;
|
|
22
|
+
setRulesFromDefinitions(rules: Array<{
|
|
23
|
+
matchers: MatcherDefinition[];
|
|
24
|
+
steps: HandlerStepDefinition[];
|
|
25
|
+
}>): Promise<void>;
|
|
26
|
+
addRuleFromDefinition(matcherDefinitions: MatcherDefinition[], handlerStepDefinitions: HandlerStepDefinition[]): Promise<void>;
|
|
19
27
|
private matchConnection;
|
|
20
|
-
|
|
21
|
-
buildPeerFromData: (handlerStepDefinitions: HandlerStepDefinition[]) => Promise<MockRTCServerPeer>;
|
|
28
|
+
buildPeerFromDefinition(handlerStepDefinitions: HandlerStepDefinition[]): Promise<MockRTCServerPeer>;
|
|
22
29
|
}
|
|
@@ -15,27 +15,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.MockRTCServer = void 0;
|
|
17
17
|
const events_1 = require("events");
|
|
18
|
+
const mockrtc_base_1 = require("../mockrtc-base");
|
|
18
19
|
const mockrtc_server_peer_1 = require("./mockrtc-server-peer");
|
|
19
|
-
const
|
|
20
|
+
const matchers_1 = require("../matching/matchers");
|
|
20
21
|
const handler_steps_1 = require("../handling/handler-steps");
|
|
21
22
|
const MATCHING_PEER_ID = 'matching-peer';
|
|
22
|
-
class MockRTCServer {
|
|
23
|
+
class MockRTCServer extends mockrtc_base_1.MockRTCBase {
|
|
23
24
|
constructor(options = {}) {
|
|
25
|
+
super();
|
|
24
26
|
this.options = options;
|
|
25
27
|
this.debug = false;
|
|
26
28
|
this.eventEmitter = new events_1.EventEmitter();
|
|
27
29
|
this._activePeers = {};
|
|
28
|
-
this.
|
|
29
|
-
const handlerSteps = handlerStepDefinitions.map((definition) => {
|
|
30
|
-
return Object.assign(Object.create(handler_steps_1.StepLookup[definition.type].prototype), definition);
|
|
31
|
-
});
|
|
32
|
-
const peer = new mockrtc_server_peer_1.MockRTCServerPeer(() => handlerSteps, // Always runs a fixed set of steps
|
|
33
|
-
this.options, this.eventEmitter);
|
|
34
|
-
this._activePeers[peer.peerId] = peer;
|
|
35
|
-
if (this.debug)
|
|
36
|
-
console.log(`Built MockRTC peer ${peer.peerId} with steps: ${handlerStepDefinitions.map(d => d.type).join(', ')}`);
|
|
37
|
-
return peer;
|
|
38
|
-
});
|
|
30
|
+
this.rules = [];
|
|
39
31
|
this.debug = !!options.debug;
|
|
40
32
|
}
|
|
41
33
|
start() {
|
|
@@ -57,6 +49,7 @@ class MockRTCServer {
|
|
|
57
49
|
yield Promise.all(this.activePeers.map(peer => peer.close()));
|
|
58
50
|
this._activePeers = {};
|
|
59
51
|
this.matchingPeer = undefined;
|
|
52
|
+
this.rules = [];
|
|
60
53
|
this.eventEmitter.removeAllListeners();
|
|
61
54
|
});
|
|
62
55
|
}
|
|
@@ -77,14 +70,56 @@ class MockRTCServer {
|
|
|
77
70
|
}
|
|
78
71
|
return this.matchingPeer;
|
|
79
72
|
}
|
|
73
|
+
setRulesFromDefinitions(rules) {
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
this.rules = [];
|
|
76
|
+
yield Promise.all(rules.map(({ matchers, steps }) => this.addRuleFromDefinition(matchers, steps)));
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
addRuleFromDefinition(matcherDefinitions, handlerStepDefinitions) {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
const matchers = matcherDefinitions.map((definition) => {
|
|
82
|
+
return Object.assign(Object.create(matchers_1.MatcherLookup[definition.type].prototype), definition);
|
|
83
|
+
});
|
|
84
|
+
const handlerSteps = handlerStepDefinitions.map((definition) => {
|
|
85
|
+
return Object.assign(Object.create(handler_steps_1.StepLookup[definition.type].prototype), definition);
|
|
86
|
+
});
|
|
87
|
+
this.rules.push({ matchers, handlerSteps });
|
|
88
|
+
});
|
|
89
|
+
}
|
|
80
90
|
matchConnection(connection) {
|
|
81
|
-
return
|
|
82
|
-
|
|
83
|
-
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
if (this.debug)
|
|
93
|
+
console.log('Matching incoming RTC connection...');
|
|
94
|
+
yield connection.waitUntilConnected();
|
|
95
|
+
for (const rule of this.rules) {
|
|
96
|
+
const matches = rule.matchers.every(matcher => matcher.matches(connection));
|
|
97
|
+
if (matches) {
|
|
98
|
+
if (this.debug)
|
|
99
|
+
console.log(`Matched incoming RTC connection, running steps: ${rule.handlerSteps.map(s => s.type).join(', ')}`);
|
|
100
|
+
return rule.handlerSteps;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (this.debug)
|
|
104
|
+
console.log('RTC connection did not match any rules');
|
|
105
|
+
// Unmatched connections are proxied dynamically. In practice, that means they're accepted
|
|
106
|
+
// and ignored initially, unless an external peer also connects and is attached:
|
|
107
|
+
return [new handler_steps_1.DynamicProxyStep()];
|
|
108
|
+
});
|
|
84
109
|
}
|
|
85
110
|
// Peer definition API:
|
|
86
|
-
|
|
87
|
-
return
|
|
111
|
+
buildPeerFromDefinition(handlerStepDefinitions) {
|
|
112
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
const handlerSteps = handlerStepDefinitions.map((definition) => {
|
|
114
|
+
return Object.assign(Object.create(handler_steps_1.StepLookup[definition.type].prototype), definition);
|
|
115
|
+
});
|
|
116
|
+
const peer = new mockrtc_server_peer_1.MockRTCServerPeer(() => handlerSteps, // Always runs a fixed set of steps
|
|
117
|
+
this.options, this.eventEmitter);
|
|
118
|
+
this._activePeers[peer.peerId] = peer;
|
|
119
|
+
if (this.debug)
|
|
120
|
+
console.log(`Built MockRTC peer ${peer.peerId} with steps: ${handlerStepDefinitions.map(d => d.type).join(', ')}`);
|
|
121
|
+
return peer;
|
|
122
|
+
});
|
|
88
123
|
}
|
|
89
124
|
}
|
|
90
125
|
exports.MockRTCServer = MockRTCServer;
|