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.
Files changed (84) hide show
  1. package/.github/workflows/ci.yml +2 -2
  2. package/dist/client/mockrtc-admin-request-builder.d.ts +7 -1
  3. package/dist/client/mockrtc-admin-request-builder.js +30 -0
  4. package/dist/client/mockrtc-admin-request-builder.js.map +1 -1
  5. package/dist/client/mockrtc-client.d.ts +8 -4
  6. package/dist/client/mockrtc-client.js +21 -9
  7. package/dist/client/mockrtc-client.js.map +1 -1
  8. package/dist/handling/handler-builder.d.ts +16 -9
  9. package/dist/handling/handler-builder.js +11 -1
  10. package/dist/handling/handler-builder.js.map +1 -1
  11. package/dist/handling/handler-step-definitions.d.ts +40 -23
  12. package/dist/handling/handler-step-definitions.js +61 -19
  13. package/dist/handling/handler-step-definitions.js.map +1 -1
  14. package/dist/handling/handler-steps.d.ts +11 -1
  15. package/dist/handling/handler-steps.js +33 -16
  16. package/dist/handling/handler-steps.js.map +1 -1
  17. package/dist/main-browser.d.ts +1 -0
  18. package/dist/main-browser.js +2 -1
  19. package/dist/main-browser.js.map +1 -1
  20. package/dist/main.d.ts +5 -3
  21. package/dist/main.js +2 -1
  22. package/dist/main.js.map +1 -1
  23. package/dist/matching/matcher-definitions.d.ts +51 -0
  24. package/dist/matching/matcher-definitions.js +94 -0
  25. package/dist/matching/matcher-definitions.js.map +1 -0
  26. package/dist/matching/matchers.d.ts +27 -0
  27. package/dist/matching/matchers.js +87 -0
  28. package/dist/matching/matchers.js.map +1 -0
  29. package/dist/mockrtc-base.d.ts +16 -0
  30. package/dist/mockrtc-base.js +19 -0
  31. package/dist/mockrtc-base.js.map +1 -0
  32. package/dist/mockrtc-peer.d.ts +9 -2
  33. package/dist/mockrtc.d.ts +62 -0
  34. package/dist/mockrtc.js.map +1 -1
  35. package/dist/rule-builder.d.ts +86 -0
  36. package/dist/rule-builder.js +113 -0
  37. package/dist/rule-builder.js.map +1 -0
  38. package/dist/server/mockrtc-admin-plugin.js +18 -1
  39. package/dist/server/mockrtc-admin-plugin.js.map +1 -1
  40. package/dist/server/mockrtc-server-peer.d.ts +1 -1
  41. package/dist/server/mockrtc-server-peer.js +19 -7
  42. package/dist/server/mockrtc-server-peer.js.map +1 -1
  43. package/dist/server/mockrtc-server.d.ts +12 -5
  44. package/dist/server/mockrtc-server.js +53 -18
  45. package/dist/server/mockrtc-server.js.map +1 -1
  46. package/dist/webrtc/datachannel-stream.d.ts +2 -0
  47. package/dist/webrtc/datachannel-stream.js +15 -1
  48. package/dist/webrtc/datachannel-stream.js.map +1 -1
  49. package/dist/webrtc/mediatrack-stream.d.ts +2 -0
  50. package/dist/webrtc/mediatrack-stream.js +15 -1
  51. package/dist/webrtc/mediatrack-stream.js.map +1 -1
  52. package/dist/webrtc/mockrtc-connection.js +1 -1
  53. package/dist/webrtc/mockrtc-connection.js.map +1 -1
  54. package/dist/webrtc/rtc-connection.d.ts +6 -2
  55. package/dist/webrtc/rtc-connection.js +21 -21
  56. package/dist/webrtc/rtc-connection.js.map +1 -1
  57. package/dist/webrtc-hooks.js +8 -2
  58. package/dist/webrtc-hooks.js.map +1 -1
  59. package/package.json +2 -2
  60. package/src/client/mockrtc-admin-request-builder.ts +49 -1
  61. package/src/client/mockrtc-client.ts +28 -10
  62. package/src/handling/handler-builder.ts +22 -10
  63. package/src/handling/handler-step-definitions.ts +81 -23
  64. package/src/handling/handler-steps.ts +42 -15
  65. package/src/main-browser.ts +1 -0
  66. package/src/main.ts +5 -1
  67. package/src/matching/matcher-definitions.ts +109 -0
  68. package/src/matching/matchers.ts +118 -0
  69. package/src/mockrtc-base.ts +49 -0
  70. package/src/mockrtc-peer.ts +9 -2
  71. package/src/mockrtc.ts +72 -0
  72. package/src/rule-builder.ts +142 -0
  73. package/src/server/mockrtc-admin-plugin.ts +41 -3
  74. package/src/server/mockrtc-server-peer.ts +28 -18
  75. package/src/server/mockrtc-server.ts +71 -15
  76. package/src/webrtc/datachannel-stream.ts +15 -1
  77. package/src/webrtc/mediatrack-stream.ts +15 -1
  78. package/src/webrtc/mockrtc-connection.ts +1 -1
  79. package/src/webrtc/rtc-connection.ts +37 -20
  80. package/src/webrtc-hooks.ts +8 -2
  81. package/test/integration/events.spec.ts +3 -1
  82. package/test/integration/matching.spec.ts +189 -0
  83. package/test/integration/proxy.spec.ts +4 -2
  84. 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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mockrtc.js","sourceRoot":"","sources":["../src/mockrtc.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAkCF,CAAC"}
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.buildPeerFromData(steps.map((stepData) => deserialize(stepData, adminStream, ruleParams, handler_steps_1.StepLookup)));
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":"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"}
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
- this.eventEmitter.emit('data-channel-opened', Object.assign(Object.assign({}, channelEventParams), { channelLabel: channelStream.label, channelProtocol: channelStream.protocol, eventTimestamp: now() }));
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-open', emitChannelEvents);
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
- this.eventEmitter.emit('media-track-opened', Object.assign(Object.assign({}, trackEventParams), { trackType: mediaTrack.type, trackDirection: mediaTrack.direction, eventTimestamp: now() }));
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-open', emitTrackEvents);
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-open', logChannelMessages);
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":"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"}
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, MockRTCPeerBuilder } from "../mockrtc";
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
- export declare class MockRTCServer implements MockRTC {
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
- buildPeer(): MockRTCPeerBuilder;
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 handler_builder_1 = require("../handling/handler-builder");
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.buildPeerFromData = (handlerStepDefinitions) => __awaiter(this, void 0, void 0, function* () {
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
- new handler_steps_1.DynamicProxyStep()
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
- buildPeer() {
87
- return new handler_builder_1.MockRTCHandlerBuilder(this.buildPeerFromData);
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;