mockrtc 0.3.2 → 0.5.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.
Files changed (60) hide show
  1. package/.github/workflows/ci.yml +5 -3
  2. package/README.md +2 -10
  3. package/dist/handling/handler-builder.js +13 -13
  4. package/dist/handling/handler-builder.js.map +1 -1
  5. package/dist/handling/handler-step-definitions.d.ts +36 -22
  6. package/dist/handling/handler-step-definitions.js +47 -34
  7. package/dist/handling/handler-step-definitions.js.map +1 -1
  8. package/dist/handling/handler-step-impls.d.ts +56 -0
  9. package/dist/handling/handler-step-impls.js +228 -0
  10. package/dist/handling/handler-step-impls.js.map +1 -0
  11. package/dist/main-browser.d.ts +2 -2
  12. package/dist/main-browser.js +3 -3
  13. package/dist/main-browser.js.map +1 -1
  14. package/dist/main.d.ts +3 -3
  15. package/dist/main.js +3 -3
  16. package/dist/main.js.map +1 -1
  17. package/dist/matching/matcher-definition-impls.d.ts +51 -0
  18. package/dist/matching/matcher-definition-impls.js +94 -0
  19. package/dist/matching/matcher-definition-impls.js.map +1 -0
  20. package/dist/matching/matcher-definition.d.ts +51 -0
  21. package/dist/matching/matcher-definition.js +94 -0
  22. package/dist/matching/matcher-definition.js.map +1 -0
  23. package/dist/matching/matcher-definitions.d.ts +14 -14
  24. package/dist/matching/matcher-definitions.js +22 -22
  25. package/dist/matching/matcher-definitions.js.map +1 -1
  26. package/dist/matching/matcher-impls.d.ts +27 -0
  27. package/dist/matching/matcher-impls.js +87 -0
  28. package/dist/matching/matcher-impls.js.map +1 -0
  29. package/dist/matching/matchers.d.ts +9 -9
  30. package/dist/matching/matchers.js +23 -23
  31. package/dist/matching/matchers.js.map +1 -1
  32. package/dist/rule-builder.js +7 -7
  33. package/dist/rule-builder.js.map +1 -1
  34. package/dist/server/mockrtc-admin-plugin.d.ts +1 -1
  35. package/dist/server/mockrtc-admin-plugin.js +7 -7
  36. package/dist/server/mockrtc-admin-plugin.js.map +1 -1
  37. package/dist/server/mockrtc-server-peer.d.ts +2 -2
  38. package/dist/server/mockrtc-server-peer.js.map +1 -1
  39. package/dist/server/mockrtc-server.js +6 -6
  40. package/dist/server/mockrtc-server.js.map +1 -1
  41. package/dist/webrtc/mockrtc-connection.d.ts +1 -1
  42. package/dist/webrtc/mockrtc-connection.js +1 -0
  43. package/dist/webrtc/mockrtc-connection.js.map +1 -1
  44. package/dist/webrtc/rtc-connection.d.ts +3 -3
  45. package/dist/webrtc/rtc-connection.js +3 -6
  46. package/dist/webrtc/rtc-connection.js.map +1 -1
  47. package/package.json +5 -6
  48. package/src/handling/handler-builder.ts +24 -24
  49. package/src/handling/handler-step-definitions.ts +38 -22
  50. package/src/handling/{handler-steps.ts → handler-step-impls.ts} +36 -39
  51. package/src/main-browser.ts +2 -2
  52. package/src/main.ts +3 -3
  53. package/src/matching/matcher-definitions.ts +14 -14
  54. package/src/matching/{matchers.ts → matcher-impls.ts} +22 -22
  55. package/src/rule-builder.ts +14 -14
  56. package/src/server/mockrtc-admin-plugin.ts +8 -8
  57. package/src/server/mockrtc-server-peer.ts +3 -3
  58. package/src/server/mockrtc-server.ts +8 -8
  59. package/src/webrtc/mockrtc-connection.ts +1 -0
  60. package/src/webrtc/rtc-connection.ts +9 -20
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ /*
3
+ * SPDX-FileCopyrightText: 2022 Tim Perry <tim@httptoolkit.tech>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
+ return new (P || (P = Promise))(function (resolve, reject) {
9
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
13
+ });
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.StepLookup = exports.DynamicProxyStepImpl = exports.PeerProxyStepImpl = exports.EchoStepImpl = exports.CloseStepImpl = exports.SendStepImpl = exports.CreateChannelStepImpl = exports.WaitForMediaStepImpl = exports.WaitForTrackStepImpl = exports.WaitForMessageStepImpl = exports.WaitForChannelStepImpl = exports.WaitForDurationStepImpl = void 0;
17
+ const rtc_connection_1 = require("../webrtc/rtc-connection");
18
+ const handler_step_definitions_1 = require("./handler-step-definitions");
19
+ class WaitForDurationStepImpl extends handler_step_definitions_1.WaitForDurationStep {
20
+ handle() {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ return new Promise((resolve) => setTimeout(resolve, this.durationMs));
23
+ });
24
+ }
25
+ }
26
+ exports.WaitForDurationStepImpl = WaitForDurationStepImpl;
27
+ class WaitForChannelStepImpl extends handler_step_definitions_1.WaitForChannelStep {
28
+ matchesChannel(channel) {
29
+ return this.channelLabel === undefined || this.channelLabel === channel.label;
30
+ }
31
+ handle(connection) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ return new Promise((resolve) => {
34
+ const channelOpened = (channel) => {
35
+ if (this.matchesChannel(channel)) {
36
+ connection.removeListener('remote-channel-open', channelOpened);
37
+ resolve();
38
+ }
39
+ };
40
+ connection.on('remote-channel-open', channelOpened);
41
+ connection.remoteChannels.forEach(channelOpened);
42
+ });
43
+ });
44
+ }
45
+ }
46
+ exports.WaitForChannelStepImpl = WaitForChannelStepImpl;
47
+ class WaitForMessageStepImpl extends handler_step_definitions_1.WaitForMessageStep {
48
+ matchesChannel(channel) {
49
+ return this.channelLabel === undefined || this.channelLabel === channel.label;
50
+ }
51
+ handle(connection) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ return new Promise((resolve) => {
54
+ const messageReceived = () => {
55
+ connection.removeListener('channel-created', listenForMessage);
56
+ connection.channels.forEach((channel) => {
57
+ channel.removeListener('data', messageReceived);
58
+ channel.pause();
59
+ });
60
+ resolve();
61
+ };
62
+ const listenForMessage = (channel) => {
63
+ if (this.matchesChannel(channel)) {
64
+ channel.once('data', messageReceived);
65
+ }
66
+ };
67
+ connection.on('channel-created', listenForMessage);
68
+ connection.channels.forEach(listenForMessage);
69
+ });
70
+ });
71
+ }
72
+ }
73
+ exports.WaitForMessageStepImpl = WaitForMessageStepImpl;
74
+ class WaitForTrackStepImpl extends handler_step_definitions_1.WaitForTrackStep {
75
+ handle(connection) {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ yield new Promise((resolve) => {
78
+ if (connection.remoteMediaTracks.length)
79
+ resolve();
80
+ else
81
+ connection.once('remote-track-open', () => resolve());
82
+ });
83
+ });
84
+ }
85
+ }
86
+ exports.WaitForTrackStepImpl = WaitForTrackStepImpl;
87
+ class WaitForMediaStepImpl extends handler_step_definitions_1.WaitForMediaStep {
88
+ handle(connection) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ return new Promise((resolve) => {
91
+ const messageReceived = () => {
92
+ connection.removeListener('track-created', listenForData);
93
+ connection.mediaTracks.forEach((track) => {
94
+ track.removeListener('data', messageReceived);
95
+ track.pause();
96
+ });
97
+ resolve();
98
+ };
99
+ const listenForData = (track) => {
100
+ track.once('data', messageReceived);
101
+ };
102
+ connection.on('track-created', listenForData);
103
+ connection.mediaTracks.forEach(listenForData);
104
+ });
105
+ });
106
+ }
107
+ }
108
+ exports.WaitForMediaStepImpl = WaitForMediaStepImpl;
109
+ class CreateChannelStepImpl extends handler_step_definitions_1.CreateChannelStep {
110
+ handle(conn) {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ const channel = conn.createDataChannel(this.channelLabel);
113
+ return new Promise((resolve) => channel.once('channel-open', resolve));
114
+ });
115
+ }
116
+ }
117
+ exports.CreateChannelStepImpl = CreateChannelStepImpl;
118
+ class SendStepImpl extends handler_step_definitions_1.SendStep {
119
+ matchesChannel(channel) {
120
+ return this.channelLabel === undefined || this.channelLabel === channel.label;
121
+ }
122
+ handle({ channels }) {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ yield Promise.all(channels
125
+ .filter((channel) => this.matchesChannel(channel))
126
+ .map((channel) => {
127
+ return new Promise((resolve, reject) => {
128
+ channel.write(this.message, (error) => {
129
+ if (error)
130
+ reject(error);
131
+ else
132
+ resolve();
133
+ });
134
+ });
135
+ }));
136
+ });
137
+ }
138
+ static deserialize(data) {
139
+ return new handler_step_definitions_1.SendStep(data.channelLabel, typeof data.message === 'string'
140
+ ? data.message
141
+ // Buffers are serialized very roughly, so here we
142
+ // turn them back into real Buffer instances:
143
+ : Buffer.from(data.message.data));
144
+ }
145
+ }
146
+ exports.SendStepImpl = SendStepImpl;
147
+ class CloseStepImpl extends handler_step_definitions_1.CloseStep {
148
+ handle(connection) {
149
+ return __awaiter(this, void 0, void 0, function* () {
150
+ yield connection.close();
151
+ });
152
+ }
153
+ }
154
+ exports.CloseStepImpl = CloseStepImpl;
155
+ class EchoStepImpl extends handler_step_definitions_1.EchoStep {
156
+ handle(connection) {
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ const echoContent = (stream) => {
159
+ stream.pipe(stream);
160
+ };
161
+ connection.on('channel-created', echoContent);
162
+ connection.on('track-created', echoContent);
163
+ connection.channels.forEach(echoContent);
164
+ connection.mediaTracks.forEach(echoContent);
165
+ // This step keeps running indefinitely, until the connection closes
166
+ return new Promise((resolve) => connection.on('connection-closed', resolve));
167
+ });
168
+ }
169
+ }
170
+ exports.EchoStepImpl = EchoStepImpl;
171
+ class PeerProxyStepImpl extends handler_step_definitions_1.PeerProxyStep {
172
+ handle(connection) {
173
+ return __awaiter(this, void 0, void 0, function* () {
174
+ const externalConn = new rtc_connection_1.RTCConnection();
175
+ this.externalConnections.push(externalConn);
176
+ // We mirror the internal peer's SDP as an offer to the given connection:
177
+ const externalOffer = yield externalConn.getMirroredLocalOffer(connection.getRemoteDescription().sdp);
178
+ externalConn.setRemoteDescription(yield this.getAnswer(externalOffer));
179
+ yield connection.proxyTrafficTo(externalConn);
180
+ // This step keeps running indefinitely, until the connection closes
181
+ return new Promise((resolve) => connection.on('connection-closed', resolve));
182
+ });
183
+ }
184
+ serialize(channel) {
185
+ channel.onRequest((msg) => __awaiter(this, void 0, void 0, function* () {
186
+ return { answer: yield this.getAnswer(msg.offer) };
187
+ }));
188
+ return { type: this.type };
189
+ }
190
+ static deserialize(_data, channel) {
191
+ return new handler_step_definitions_1.PeerProxyStep((offer) => __awaiter(this, void 0, void 0, function* () {
192
+ const response = yield channel.request({ offer });
193
+ return response.answer;
194
+ }));
195
+ }
196
+ dispose() {
197
+ this.externalConnections.forEach(conn => conn.close());
198
+ }
199
+ }
200
+ exports.PeerProxyStepImpl = PeerProxyStepImpl;
201
+ class DynamicProxyStepImpl extends handler_step_definitions_1.DynamicProxyStep {
202
+ handle(connection) {
203
+ return __awaiter(this, void 0, void 0, function* () {
204
+ const externalConn = yield connection.proxyTrafficToExternalConnection();
205
+ this.externalConnections.push(externalConn);
206
+ // This step keeps running indefinitely, until the connection closes
207
+ return new Promise((resolve) => connection.on('connection-closed', resolve));
208
+ });
209
+ }
210
+ dispose() {
211
+ this.externalConnections.forEach(conn => conn.close());
212
+ }
213
+ }
214
+ exports.DynamicProxyStepImpl = DynamicProxyStepImpl;
215
+ exports.StepLookup = {
216
+ 'wait-for-duration': WaitForDurationStepImpl,
217
+ 'wait-for-rtc-data-channel': WaitForChannelStepImpl,
218
+ 'wait-for-rtc-track': WaitForTrackStepImpl,
219
+ 'wait-for-rtc-media': WaitForMediaStepImpl,
220
+ 'wait-for-rtc-message': WaitForMessageStepImpl,
221
+ 'create-rtc-data-channel': CreateChannelStepImpl,
222
+ 'send-rtc-data-message': SendStepImpl,
223
+ 'close-rtc-connection': CloseStepImpl,
224
+ 'echo-rtc': EchoStepImpl,
225
+ 'rtc-peer-proxy': PeerProxyStepImpl,
226
+ 'rtc-dynamic-proxy': DynamicProxyStepImpl
227
+ };
228
+ //# sourceMappingURL=handler-step-impls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-step-impls.js","sourceRoot":"","sources":["../../src/handling/handler-step-impls.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { MockRTC, MockRTCOptions } from "./mockrtc";
2
2
  import { MockRTCClientOptions } from "./client/mockrtc-client";
3
- export * as HandlerStepDefinitions from "./handling/handler-step-definitions";
4
- export * as MatcherDefinitions from "./matching/matcher-definitions";
3
+ export * as steps from "./handling/handler-step-definitions";
4
+ export * as matchers from "./matching/matcher-definitions";
5
5
  export { MockRTCAdminRequestBuilder } from "./client/mockrtc-admin-request-builder";
6
6
  export type { MockRTC, MockRTCOptions };
7
7
  export type { MockRTCPeer, MockRTCSession, MockRTCOfferParams, MockRTCAnswerParams, MockRTCExternalOfferParams, MockRTCExternalAnswerParams, OfferOptions, AnswerOptions } from './mockrtc-peer';
@@ -4,11 +4,11 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.getAdminServer = exports.getRemote = exports.getLocal = exports.hookAllWebRTC = exports.hookWebRTCConnection = exports.MOCKRTC_CONTROL_CHANNEL = exports.MockRTCAdminRequestBuilder = exports.MatcherDefinitions = exports.HandlerStepDefinitions = void 0;
7
+ exports.getAdminServer = exports.getRemote = exports.getLocal = exports.hookAllWebRTC = exports.hookWebRTCConnection = exports.MOCKRTC_CONTROL_CHANNEL = exports.MockRTCAdminRequestBuilder = exports.matchers = exports.steps = void 0;
8
8
  const mockrtc_client_1 = require("./client/mockrtc-client");
9
9
  // Export the required structures to remotely build and send rules to the admin API:
10
- exports.HandlerStepDefinitions = require("./handling/handler-step-definitions");
11
- exports.MatcherDefinitions = require("./matching/matcher-definitions");
10
+ exports.steps = require("./handling/handler-step-definitions");
11
+ exports.matchers = require("./matching/matcher-definitions");
12
12
  var mockrtc_admin_request_builder_1 = require("./client/mockrtc-admin-request-builder");
13
13
  Object.defineProperty(exports, "MockRTCAdminRequestBuilder", { enumerable: true, get: function () { return mockrtc_admin_request_builder_1.MockRTCAdminRequestBuilder; } });
14
14
  var control_channel_1 = require("./webrtc/control-channel");
@@ -1 +1 @@
1
- {"version":3,"file":"main-browser.js","sourceRoot":"","sources":["../src/main-browser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAMH,4DAA8E;AAE9E,oFAAoF;AACpF,gFAA8E;AAC9E,uEAAqE;AACrE,wFAAoF;AAA3E,2IAAA,0BAA0B,OAAA;AAkBnC,4DAAmE;AAA1D,0HAAA,uBAAuB,OAAA;AAChC,+CAGwB;AAFpB,oHAAA,oBAAoB,OAAA;AACpB,6GAAA,aAAa,OAAA;AAGjB,SAAgB,QAAQ;IACpB,OAAO,IAAI,8BAAa,EAAE,CAAC;AAC/B,CAAC;AAFD,4BAEC;AAED,SAAgB,SAAS,CAAC,UAAgC,EAAE;IACxD,OAAO,IAAI,8BAAa,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAFD,8BAEC;AAED,SAAgB,cAAc;IAC1B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;AACjE,CAAC;AAFD,wCAEC"}
1
+ {"version":3,"file":"main-browser.js","sourceRoot":"","sources":["../src/main-browser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAMH,4DAA8E;AAE9E,oFAAoF;AACpF,+DAA6D;AAC7D,6DAA2D;AAC3D,wFAAoF;AAA3E,2IAAA,0BAA0B,OAAA;AAkBnC,4DAAmE;AAA1D,0HAAA,uBAAuB,OAAA;AAChC,+CAGwB;AAFpB,oHAAA,oBAAoB,OAAA;AACpB,6GAAA,aAAa,OAAA;AAGjB,SAAgB,QAAQ;IACpB,OAAO,IAAI,8BAAa,EAAE,CAAC;AAC/B,CAAC;AAFD,4BAEC;AAED,SAAgB,SAAS,CAAC,UAAgC,EAAE;IACxD,OAAO,IAAI,8BAAa,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAFD,8BAEC;AAED,SAAgB,cAAc;IAC1B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;AACjE,CAAC;AAFD,wCAEC"}
package/dist/main.d.ts CHANGED
@@ -2,10 +2,10 @@ import { MockRTC, MockRTCOptions, MockRTCPeerBuilder, MockRTCEvent, MockRTCEvent
2
2
  import { MockRTCAdminServer } from "./server/mockrtc-admin-server";
3
3
  export { MockRTCAdminPlugin } from "./server/mockrtc-admin-plugin";
4
4
  import { MockRTCClientOptions } from "./client/mockrtc-client";
5
- export * as HandlerStepDefinitions from "./handling/handler-step-definitions";
6
- export * as MatcherDefinitions from "./matching/matcher-definitions";
5
+ export * as steps from "./handling/handler-step-definitions";
6
+ export * as matchers from "./matching/matcher-definitions";
7
7
  export { MockRTCAdminRequestBuilder } from "./client/mockrtc-admin-request-builder";
8
- export type { HandlerStep } from "./handling/handler-steps";
8
+ export type { HandlerStepImpl as HandlerStep } from "./handling/handler-step-impls";
9
9
  export type { MockRTCHandlerBuilder } from "./handling/handler-builder";
10
10
  export type { MockRTCRuleBuilder, RuleHandlerBuilder } from "./rule-builder";
11
11
  export type { MockRTCServerPeer } from "./server/mockrtc-server-peer";
package/dist/main.js CHANGED
@@ -4,15 +4,15 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.getAdminServer = exports.getRemote = exports.getLocal = exports.hookAllWebRTC = exports.hookWebRTCConnection = exports.MOCKRTC_CONTROL_CHANNEL = exports.MockRTCAdminRequestBuilder = exports.MatcherDefinitions = exports.HandlerStepDefinitions = exports.MockRTCAdminPlugin = void 0;
7
+ exports.getAdminServer = exports.getRemote = exports.getLocal = exports.hookAllWebRTC = exports.hookWebRTCConnection = exports.MOCKRTC_CONTROL_CHANNEL = exports.MockRTCAdminRequestBuilder = exports.matchers = exports.steps = exports.MockRTCAdminPlugin = void 0;
8
8
  const mockrtc_server_1 = require("./server/mockrtc-server");
9
9
  const mockrtc_admin_server_1 = require("./server/mockrtc-admin-server");
10
10
  var mockrtc_admin_plugin_1 = require("./server/mockrtc-admin-plugin");
11
11
  Object.defineProperty(exports, "MockRTCAdminPlugin", { enumerable: true, get: function () { return mockrtc_admin_plugin_1.MockRTCAdminPlugin; } });
12
12
  const mockrtc_client_1 = require("./client/mockrtc-client");
13
13
  // Export the required structures to remotely build and send rules to the admin API:
14
- exports.HandlerStepDefinitions = require("./handling/handler-step-definitions");
15
- exports.MatcherDefinitions = require("./matching/matcher-definitions");
14
+ exports.steps = require("./handling/handler-step-definitions");
15
+ exports.matchers = require("./matching/matcher-definitions");
16
16
  var mockrtc_admin_request_builder_1 = require("./client/mockrtc-admin-request-builder");
17
17
  Object.defineProperty(exports, "MockRTCAdminRequestBuilder", { enumerable: true, get: function () { return mockrtc_admin_request_builder_1.MockRTCAdminRequestBuilder; } });
18
18
  var control_channel_1 = require("./webrtc/control-channel");
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAcH,4DAAwD;AACxD,wEAAmE;AACnE,sEAAmE;AAA1D,0HAAA,kBAAkB,OAAA;AAE3B,4DAA8E;AAE9E,oFAAoF;AACpF,gFAA8E;AAC9E,uEAAqE;AACrE,wFAAoF;AAA3E,2IAAA,0BAA0B,OAAA;AA4CnC,4DAGkC;AAF9B,0HAAA,uBAAuB,OAAA;AAG3B,+CAGwB;AAFpB,oHAAA,oBAAoB,OAAA;AACpB,6GAAA,aAAa,OAAA;AAGjB;;;;;;;;;;;;;GAaG;AACH,SAAgB,QAAQ;IACpB,OAAO,IAAI,8BAAa,EAAE,CAAC;AAC/B,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,UAAgC,EAAE;IACxD,OAAO,IAAI,8BAAa,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAFD,8BAEC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,cAAc;IAC1B,OAAO,IAAI,yCAAkB,EAAE,CAAC;AACpC,CAAC;AAFD,wCAEC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAcH,4DAAwD;AACxD,wEAAmE;AACnE,sEAAmE;AAA1D,0HAAA,kBAAkB,OAAA;AAE3B,4DAA8E;AAE9E,oFAAoF;AACpF,+DAA6D;AAC7D,6DAA2D;AAC3D,wFAAoF;AAA3E,2IAAA,0BAA0B,OAAA;AA4CnC,4DAGkC;AAF9B,0HAAA,uBAAuB,OAAA;AAG3B,+CAGwB;AAFpB,oHAAA,oBAAoB,OAAA;AACpB,6GAAA,aAAa,OAAA;AAGjB;;;;;;;;;;;;;GAaG;AACH,SAAgB,QAAQ;IACpB,OAAO,IAAI,8BAAa,EAAE,CAAC;AAC/B,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,UAAgC,EAAE;IACxD,OAAO,IAAI,8BAAa,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAFD,8BAEC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,cAAc;IAC1B,OAAO,IAAI,yCAAkB,EAAE,CAAC;AACpC,CAAC;AAFD,wCAEC"}
@@ -0,0 +1,51 @@
1
+ import * as PluggableAdmin from 'mockttp/dist/pluggable-admin-api/pluggable-admin.browser';
2
+ export declare type Serializable = PluggableAdmin.Serialization.Serializable;
3
+ export declare const Serializable: typeof PluggableAdmin.Serialization.Serializable;
4
+ export interface MatcherDefinition extends Serializable {
5
+ readonly type: keyof typeof MatcherDefinitionLookup;
6
+ }
7
+ export declare class HasDataChannelMatcher extends Serializable implements MatcherDefinition {
8
+ readonly type = "has-rtc-data-channel";
9
+ explain(): string;
10
+ }
11
+ export declare class HasVideoTrackMatcher extends Serializable implements MatcherDefinition {
12
+ readonly type = "has-rtc-video-track";
13
+ explain(): string;
14
+ }
15
+ export declare class HasAudioTrackMatcher extends Serializable implements MatcherDefinition {
16
+ readonly type = "has-rtc-audio-track";
17
+ explain(): string;
18
+ }
19
+ export declare class HasMediaTrackMatcher extends Serializable implements MatcherDefinition {
20
+ readonly type = "has-rtc-media-track";
21
+ explain(): string;
22
+ }
23
+ export declare class HostnameMatcher extends Serializable implements MatcherDefinition {
24
+ readonly hostname: string;
25
+ readonly type = "rtc-page-hostname";
26
+ constructor(hostname: string);
27
+ explain(): string;
28
+ }
29
+ export declare class UrlRegexMatcher extends Serializable implements MatcherDefinition {
30
+ readonly type = "rtc-page-regex";
31
+ readonly regexSource: string;
32
+ readonly regexFlags: string;
33
+ constructor(regex: RegExp);
34
+ explain(): string;
35
+ }
36
+ export declare class UserAgentRegexMatcher extends Serializable implements MatcherDefinition {
37
+ readonly type = "rtc-user-agent-regex";
38
+ readonly regexSource: string;
39
+ readonly regexFlags: string;
40
+ constructor(regex: RegExp);
41
+ explain(): string;
42
+ }
43
+ export declare const MatcherDefinitionLookup: {
44
+ 'has-rtc-data-channel': typeof HasDataChannelMatcher;
45
+ 'has-rtc-video-track': typeof HasVideoTrackMatcher;
46
+ 'has-rtc-audio-track': typeof HasAudioTrackMatcher;
47
+ 'has-rtc-media-track': typeof HasMediaTrackMatcher;
48
+ 'rtc-page-hostname': typeof HostnameMatcher;
49
+ 'rtc-page-regex': typeof UrlRegexMatcher;
50
+ 'rtc-user-agent-regex': typeof UserAgentRegexMatcher;
51
+ };
@@ -0,0 +1,94 @@
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.MatcherDefinitionLookup = exports.UserAgentRegexMatcher = exports.UrlRegexMatcher = exports.HostnameMatcher = exports.HasMediaTrackMatcher = exports.HasAudioTrackMatcher = exports.HasVideoTrackMatcher = exports.HasDataChannelMatcher = exports.Serializable = void 0;
8
+ const PluggableAdmin = require("mockttp/dist/pluggable-admin-api/pluggable-admin.browser");
9
+ exports.Serializable = PluggableAdmin.Serialization.Serializable;
10
+ class HasDataChannelMatcher extends exports.Serializable {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.type = 'has-rtc-data-channel';
14
+ }
15
+ explain() {
16
+ return `with a data channel`;
17
+ }
18
+ }
19
+ exports.HasDataChannelMatcher = HasDataChannelMatcher;
20
+ class HasVideoTrackMatcher extends exports.Serializable {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.type = 'has-rtc-video-track';
24
+ }
25
+ explain() {
26
+ return `with a video track`;
27
+ }
28
+ }
29
+ exports.HasVideoTrackMatcher = HasVideoTrackMatcher;
30
+ class HasAudioTrackMatcher extends exports.Serializable {
31
+ constructor() {
32
+ super(...arguments);
33
+ this.type = 'has-rtc-audio-track';
34
+ }
35
+ explain() {
36
+ return `with an audio track`;
37
+ }
38
+ }
39
+ exports.HasAudioTrackMatcher = HasAudioTrackMatcher;
40
+ class HasMediaTrackMatcher extends exports.Serializable {
41
+ constructor() {
42
+ super(...arguments);
43
+ this.type = 'has-rtc-media-track';
44
+ }
45
+ explain() {
46
+ return `with any media track`;
47
+ }
48
+ }
49
+ exports.HasMediaTrackMatcher = HasMediaTrackMatcher;
50
+ class HostnameMatcher extends exports.Serializable {
51
+ constructor(hostname) {
52
+ super();
53
+ this.hostname = hostname;
54
+ this.type = 'rtc-page-hostname';
55
+ }
56
+ explain() {
57
+ return `from a page on ${this.hostname}`;
58
+ }
59
+ }
60
+ exports.HostnameMatcher = HostnameMatcher;
61
+ class UrlRegexMatcher extends exports.Serializable {
62
+ constructor(regex) {
63
+ super();
64
+ this.type = 'rtc-page-regex';
65
+ this.regexSource = regex.source;
66
+ this.regexFlags = regex.flags;
67
+ }
68
+ explain() {
69
+ return `from a page with URL matching /${this.regexSource}/${this.regexFlags}`;
70
+ }
71
+ }
72
+ exports.UrlRegexMatcher = UrlRegexMatcher;
73
+ class UserAgentRegexMatcher extends exports.Serializable {
74
+ constructor(regex) {
75
+ super();
76
+ this.type = 'rtc-user-agent-regex';
77
+ this.regexSource = regex.source;
78
+ this.regexFlags = regex.flags;
79
+ }
80
+ explain() {
81
+ return `from a user agent matching /${this.regexSource}/${this.regexFlags}`;
82
+ }
83
+ }
84
+ exports.UserAgentRegexMatcher = UserAgentRegexMatcher;
85
+ exports.MatcherDefinitionLookup = {
86
+ 'has-rtc-data-channel': HasDataChannelMatcher,
87
+ 'has-rtc-video-track': HasVideoTrackMatcher,
88
+ 'has-rtc-audio-track': HasAudioTrackMatcher,
89
+ 'has-rtc-media-track': HasMediaTrackMatcher,
90
+ 'rtc-page-hostname': HostnameMatcher,
91
+ 'rtc-page-regex': UrlRegexMatcher,
92
+ 'rtc-user-agent-regex': UserAgentRegexMatcher
93
+ };
94
+ //# sourceMappingURL=matcher-definition-impls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher-definition-impls.js","sourceRoot":"","sources":["../../src/matching/matcher-definition-impls.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2FAA2F;AAG5E,oBAAY,GAAK,cAAc,CAAC,aAAa,cAAC;AAM7D,MAAa,qBAAsB,SAAQ,oBAAY;IAAvD;;QACa,SAAI,GAAG,sBAAsB,CAAC;IAK3C,CAAC;IAHG,OAAO;QACH,OAAO,qBAAqB,CAAC;IACjC,CAAC;CACJ;AAND,sDAMC;AAED,MAAa,oBAAqB,SAAQ,oBAAY;IAAtD;;QACa,SAAI,GAAG,qBAAqB,CAAC;IAK1C,CAAC;IAHG,OAAO;QACH,OAAO,oBAAoB,CAAC;IAChC,CAAC;CACJ;AAND,oDAMC;AAED,MAAa,oBAAqB,SAAQ,oBAAY;IAAtD;;QACa,SAAI,GAAG,qBAAqB,CAAC;IAK1C,CAAC;IAHG,OAAO;QACH,OAAO,qBAAqB,CAAC;IACjC,CAAC;CACJ;AAND,oDAMC;AAED,MAAa,oBAAqB,SAAQ,oBAAY;IAAtD;;QACa,SAAI,GAAG,qBAAqB,CAAC;IAK1C,CAAC;IAHG,OAAO;QACH,OAAO,sBAAsB,CAAC;IAClC,CAAC;CACJ;AAND,oDAMC;AAED,MAAa,eAAgB,SAAQ,oBAAY;IAI7C,YACoB,QAAgB;QAEhC,KAAK,EAAE,CAAC;QAFQ,aAAQ,GAAR,QAAQ,CAAQ;QAH3B,SAAI,GAAG,mBAAmB,CAAC;IAMpC,CAAC;IAED,OAAO;QACH,OAAO,kBAAkB,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7C,CAAC;CAEJ;AAdD,0CAcC;AAED,MAAa,eAAgB,SAAQ,oBAAY;IAO7C,YAAY,KAAa;QACrB,KAAK,EAAE,CAAC;QANH,SAAI,GAAG,gBAAgB,CAAC;QAO7B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,OAAO;QACH,OAAO,kCAAkC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IACnF,CAAC;CAEJ;AAjBD,0CAiBC;AAED,MAAa,qBAAuB,SAAQ,oBAAY;IAOpD,YAAY,KAAa;QACrB,KAAK,EAAE,CAAC;QANH,SAAI,GAAG,sBAAsB,CAAC;QAOnC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,OAAO;QACH,OAAO,+BAA+B,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IAChF,CAAC;CAEJ;AAjBD,sDAiBC;AAEY,QAAA,uBAAuB,GAAG;IACnC,sBAAsB,EAAE,qBAAqB;IAC7C,qBAAqB,EAAE,oBAAoB;IAC3C,qBAAqB,EAAE,oBAAoB;IAC3C,qBAAqB,EAAE,oBAAoB;IAC3C,mBAAmB,EAAE,eAAe;IACpC,gBAAgB,EAAE,eAAe;IACjC,sBAAsB,EAAE,qBAAqB;CAChD,CAAC"}
@@ -0,0 +1,51 @@
1
+ import * as PluggableAdmin from 'mockttp/dist/pluggable-admin-api/pluggable-admin.browser';
2
+ export declare type Serializable = PluggableAdmin.Serialization.Serializable;
3
+ export declare const Serializable: typeof PluggableAdmin.Serialization.Serializable;
4
+ export interface MatcherDefinition extends Serializable {
5
+ readonly type: keyof typeof MatcherDefinitionLookup;
6
+ }
7
+ export declare class HasDataChannelMatcher extends Serializable implements MatcherDefinition {
8
+ readonly type = "has-rtc-data-channel";
9
+ explain(): string;
10
+ }
11
+ export declare class HasVideoTrackMatcher extends Serializable implements MatcherDefinition {
12
+ readonly type = "has-rtc-video-track";
13
+ explain(): string;
14
+ }
15
+ export declare class HasAudioTrackMatcher extends Serializable implements MatcherDefinition {
16
+ readonly type = "has-rtc-audio-track";
17
+ explain(): string;
18
+ }
19
+ export declare class HasMediaTrackMatcher extends Serializable implements MatcherDefinition {
20
+ readonly type = "has-rtc-media-track";
21
+ explain(): string;
22
+ }
23
+ export declare class HostnameMatcher extends Serializable implements MatcherDefinition {
24
+ readonly hostname: string;
25
+ readonly type = "rtc-page-hostname";
26
+ constructor(hostname: string);
27
+ explain(): string;
28
+ }
29
+ export declare class UrlRegexMatcher extends Serializable implements MatcherDefinition {
30
+ readonly type = "rtc-page-regex";
31
+ readonly regexSource: string;
32
+ readonly regexFlags: string;
33
+ constructor(regex: RegExp);
34
+ explain(): string;
35
+ }
36
+ export declare class UserAgentRegexMatcher extends Serializable implements MatcherDefinition {
37
+ readonly type = "rtc-user-agent-regex";
38
+ readonly regexSource: string;
39
+ readonly regexFlags: string;
40
+ constructor(regex: RegExp);
41
+ explain(): string;
42
+ }
43
+ export declare const MatcherDefinitionLookup: {
44
+ 'has-rtc-data-channel': typeof HasDataChannelMatcher;
45
+ 'has-rtc-video-track': typeof HasVideoTrackMatcher;
46
+ 'has-rtc-audio-track': typeof HasAudioTrackMatcher;
47
+ 'has-rtc-media-track': typeof HasMediaTrackMatcher;
48
+ 'rtc-page-hostname': typeof HostnameMatcher;
49
+ 'rtc-page-regex': typeof UrlRegexMatcher;
50
+ 'rtc-user-agent-regex': typeof UserAgentRegexMatcher;
51
+ };
@@ -0,0 +1,94 @@
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.MatcherDefinitionLookup = exports.UserAgentRegexMatcher = exports.UrlRegexMatcher = exports.HostnameMatcher = exports.HasMediaTrackMatcher = exports.HasAudioTrackMatcher = exports.HasVideoTrackMatcher = exports.HasDataChannelMatcher = exports.Serializable = void 0;
8
+ const PluggableAdmin = require("mockttp/dist/pluggable-admin-api/pluggable-admin.browser");
9
+ exports.Serializable = PluggableAdmin.Serialization.Serializable;
10
+ class HasDataChannelMatcher extends exports.Serializable {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.type = 'has-rtc-data-channel';
14
+ }
15
+ explain() {
16
+ return `with a data channel`;
17
+ }
18
+ }
19
+ exports.HasDataChannelMatcher = HasDataChannelMatcher;
20
+ class HasVideoTrackMatcher extends exports.Serializable {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.type = 'has-rtc-video-track';
24
+ }
25
+ explain() {
26
+ return `with a video track`;
27
+ }
28
+ }
29
+ exports.HasVideoTrackMatcher = HasVideoTrackMatcher;
30
+ class HasAudioTrackMatcher extends exports.Serializable {
31
+ constructor() {
32
+ super(...arguments);
33
+ this.type = 'has-rtc-audio-track';
34
+ }
35
+ explain() {
36
+ return `with an audio track`;
37
+ }
38
+ }
39
+ exports.HasAudioTrackMatcher = HasAudioTrackMatcher;
40
+ class HasMediaTrackMatcher extends exports.Serializable {
41
+ constructor() {
42
+ super(...arguments);
43
+ this.type = 'has-rtc-media-track';
44
+ }
45
+ explain() {
46
+ return `with any media track`;
47
+ }
48
+ }
49
+ exports.HasMediaTrackMatcher = HasMediaTrackMatcher;
50
+ class HostnameMatcher extends exports.Serializable {
51
+ constructor(hostname) {
52
+ super();
53
+ this.hostname = hostname;
54
+ this.type = 'rtc-page-hostname';
55
+ }
56
+ explain() {
57
+ return `from a page on ${this.hostname}`;
58
+ }
59
+ }
60
+ exports.HostnameMatcher = HostnameMatcher;
61
+ class UrlRegexMatcher extends exports.Serializable {
62
+ constructor(regex) {
63
+ super();
64
+ this.type = 'rtc-page-regex';
65
+ this.regexSource = regex.source;
66
+ this.regexFlags = regex.flags;
67
+ }
68
+ explain() {
69
+ return `from a page with URL matching /${this.regexSource}/${this.regexFlags}`;
70
+ }
71
+ }
72
+ exports.UrlRegexMatcher = UrlRegexMatcher;
73
+ class UserAgentRegexMatcher extends exports.Serializable {
74
+ constructor(regex) {
75
+ super();
76
+ this.type = 'rtc-user-agent-regex';
77
+ this.regexSource = regex.source;
78
+ this.regexFlags = regex.flags;
79
+ }
80
+ explain() {
81
+ return `from a user agent matching /${this.regexSource}/${this.regexFlags}`;
82
+ }
83
+ }
84
+ exports.UserAgentRegexMatcher = UserAgentRegexMatcher;
85
+ exports.MatcherDefinitionLookup = {
86
+ 'has-rtc-data-channel': HasDataChannelMatcher,
87
+ 'has-rtc-video-track': HasVideoTrackMatcher,
88
+ 'has-rtc-audio-track': HasAudioTrackMatcher,
89
+ 'has-rtc-media-track': HasMediaTrackMatcher,
90
+ 'rtc-page-hostname': HostnameMatcher,
91
+ 'rtc-page-regex': UrlRegexMatcher,
92
+ 'rtc-user-agent-regex': UserAgentRegexMatcher
93
+ };
94
+ //# sourceMappingURL=matcher-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher-definition.js","sourceRoot":"","sources":["../../src/matching/matcher-definition.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2FAA2F;AAG5E,oBAAY,GAAK,cAAc,CAAC,aAAa,cAAC;AAM7D,MAAa,qBAAsB,SAAQ,oBAAY;IAAvD;;QACa,SAAI,GAAG,sBAAsB,CAAC;IAK3C,CAAC;IAHG,OAAO;QACH,OAAO,qBAAqB,CAAC;IACjC,CAAC;CACJ;AAND,sDAMC;AAED,MAAa,oBAAqB,SAAQ,oBAAY;IAAtD;;QACa,SAAI,GAAG,qBAAqB,CAAC;IAK1C,CAAC;IAHG,OAAO;QACH,OAAO,oBAAoB,CAAC;IAChC,CAAC;CACJ;AAND,oDAMC;AAED,MAAa,oBAAqB,SAAQ,oBAAY;IAAtD;;QACa,SAAI,GAAG,qBAAqB,CAAC;IAK1C,CAAC;IAHG,OAAO;QACH,OAAO,qBAAqB,CAAC;IACjC,CAAC;CACJ;AAND,oDAMC;AAED,MAAa,oBAAqB,SAAQ,oBAAY;IAAtD;;QACa,SAAI,GAAG,qBAAqB,CAAC;IAK1C,CAAC;IAHG,OAAO;QACH,OAAO,sBAAsB,CAAC;IAClC,CAAC;CACJ;AAND,oDAMC;AAED,MAAa,eAAgB,SAAQ,oBAAY;IAI7C,YACoB,QAAgB;QAEhC,KAAK,EAAE,CAAC;QAFQ,aAAQ,GAAR,QAAQ,CAAQ;QAH3B,SAAI,GAAG,mBAAmB,CAAC;IAMpC,CAAC;IAED,OAAO;QACH,OAAO,kBAAkB,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7C,CAAC;CAEJ;AAdD,0CAcC;AAED,MAAa,eAAgB,SAAQ,oBAAY;IAO7C,YAAY,KAAa;QACrB,KAAK,EAAE,CAAC;QANH,SAAI,GAAG,gBAAgB,CAAC;QAO7B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,OAAO;QACH,OAAO,kCAAkC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IACnF,CAAC;CAEJ;AAjBD,0CAiBC;AAED,MAAa,qBAAuB,SAAQ,oBAAY;IAOpD,YAAY,KAAa;QACrB,KAAK,EAAE,CAAC;QANH,SAAI,GAAG,sBAAsB,CAAC;QAOnC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,OAAO;QACH,OAAO,+BAA+B,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IAChF,CAAC;CAEJ;AAjBD,sDAiBC;AAEY,QAAA,uBAAuB,GAAG;IACnC,sBAAsB,EAAE,qBAAqB;IAC7C,qBAAqB,EAAE,oBAAoB;IAC3C,qBAAqB,EAAE,oBAAoB;IAC3C,qBAAqB,EAAE,oBAAoB;IAC3C,mBAAmB,EAAE,eAAe;IACpC,gBAAgB,EAAE,eAAe;IACjC,sBAAsB,EAAE,qBAAqB;CAChD,CAAC"}