mockrtc 0.1.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 (136) hide show
  1. package/.github/workflows/ci.yml +29 -0
  2. package/LICENSE +201 -0
  3. package/README.md +290 -0
  4. package/dist/admin-bin.d.ts +2 -0
  5. package/dist/admin-bin.js +67 -0
  6. package/dist/admin-bin.js.map +1 -0
  7. package/dist/client/mockrtc-client.d.ts +12 -0
  8. package/dist/client/mockrtc-client.js +67 -0
  9. package/dist/client/mockrtc-client.js.map +1 -0
  10. package/dist/client/mockrtc-remote-peer.d.ts +15 -0
  11. package/dist/client/mockrtc-remote-peer.js +246 -0
  12. package/dist/client/mockrtc-remote-peer.js.map +1 -0
  13. package/dist/control-channel.d.ts +8 -0
  14. package/dist/control-channel.js +11 -0
  15. package/dist/control-channel.js.map +1 -0
  16. package/dist/handling/handler-builder.d.ts +138 -0
  17. package/dist/handling/handler-builder.js +164 -0
  18. package/dist/handling/handler-builder.js.map +1 -0
  19. package/dist/handling/handler-step-definitions.d.ts +63 -0
  20. package/dist/handling/handler-step-definitions.js +123 -0
  21. package/dist/handling/handler-step-definitions.js.map +1 -0
  22. package/dist/handling/handler-steps.d.ts +48 -0
  23. package/dist/handling/handler-steps.js +218 -0
  24. package/dist/handling/handler-steps.js.map +1 -0
  25. package/dist/main-browser.d.ts +9 -0
  26. package/dist/main-browser.js +26 -0
  27. package/dist/main-browser.js.map +1 -0
  28. package/dist/main.d.ts +58 -0
  29. package/dist/main.js +67 -0
  30. package/dist/main.js.map +1 -0
  31. package/dist/mockrtc-admin-plugin.d.ts +56 -0
  32. package/dist/mockrtc-admin-plugin.js +151 -0
  33. package/dist/mockrtc-admin-plugin.js.map +1 -0
  34. package/dist/mockrtc-admin-server.d.ts +7 -0
  35. package/dist/mockrtc-admin-server.js +18 -0
  36. package/dist/mockrtc-admin-server.js.map +1 -0
  37. package/dist/mockrtc-client.d.ts +12 -0
  38. package/dist/mockrtc-client.js +64 -0
  39. package/dist/mockrtc-client.js.map +1 -0
  40. package/dist/mockrtc-handler-builder.d.ts +15 -0
  41. package/dist/mockrtc-handler-builder.js +24 -0
  42. package/dist/mockrtc-handler-builder.js.map +1 -0
  43. package/dist/mockrtc-peer.d.ts +147 -0
  44. package/dist/mockrtc-peer.js +7 -0
  45. package/dist/mockrtc-peer.js.map +1 -0
  46. package/dist/mockrtc-remote-peer.d.ts +15 -0
  47. package/dist/mockrtc-remote-peer.js +234 -0
  48. package/dist/mockrtc-remote-peer.js.map +1 -0
  49. package/dist/mockrtc-server-peer.d.ts +29 -0
  50. package/dist/mockrtc-server-peer.js +145 -0
  51. package/dist/mockrtc-server-peer.js.map +1 -0
  52. package/dist/mockrtc-server.d.ts +14 -0
  53. package/dist/mockrtc-server.js +53 -0
  54. package/dist/mockrtc-server.js.map +1 -0
  55. package/dist/mockrtc.d.ts +25 -0
  56. package/dist/mockrtc.js +7 -0
  57. package/dist/mockrtc.js.map +1 -0
  58. package/dist/package.json +52 -0
  59. package/dist/server/mockrtc-admin-plugin.d.ts +17 -0
  60. package/dist/server/mockrtc-admin-plugin.js +163 -0
  61. package/dist/server/mockrtc-admin-plugin.js.map +1 -0
  62. package/dist/server/mockrtc-admin-server.d.ts +7 -0
  63. package/dist/server/mockrtc-admin-server.js +18 -0
  64. package/dist/server/mockrtc-admin-server.js.map +1 -0
  65. package/dist/server/mockrtc-server-peer.d.ts +24 -0
  66. package/dist/server/mockrtc-server-peer.js +141 -0
  67. package/dist/server/mockrtc-server-peer.js.map +1 -0
  68. package/dist/server/mockrtc-server.d.ts +14 -0
  69. package/dist/server/mockrtc-server.js +53 -0
  70. package/dist/server/mockrtc-server.js.map +1 -0
  71. package/dist/src/main.d.ts +1 -0
  72. package/dist/src/main.js +24 -0
  73. package/dist/src/main.js.map +1 -0
  74. package/dist/src/mockrtc-peer.d.ts +0 -0
  75. package/dist/src/mockrtc-peer.js +2 -0
  76. package/dist/src/mockrtc-peer.js.map +1 -0
  77. package/dist/src/mockrtc.d.ts +0 -0
  78. package/dist/src/mockrtc.js +65 -0
  79. package/dist/src/mockrtc.js.map +1 -0
  80. package/dist/webrtc/control-channel.d.ts +8 -0
  81. package/dist/webrtc/control-channel.js +11 -0
  82. package/dist/webrtc/control-channel.js.map +1 -0
  83. package/dist/webrtc/datachannel-stream.d.ts +25 -0
  84. package/dist/webrtc/datachannel-stream.js +86 -0
  85. package/dist/webrtc/datachannel-stream.js.map +1 -0
  86. package/dist/webrtc/mediatrack-stream.d.ts +29 -0
  87. package/dist/webrtc/mediatrack-stream.js +109 -0
  88. package/dist/webrtc/mediatrack-stream.js.map +1 -0
  89. package/dist/webrtc/mockrtc-connection.d.ts +14 -0
  90. package/dist/webrtc/mockrtc-connection.js +147 -0
  91. package/dist/webrtc/mockrtc-connection.js.map +1 -0
  92. package/dist/webrtc/peer-connection.d.ts +16 -0
  93. package/dist/webrtc/peer-connection.js +81 -0
  94. package/dist/webrtc/peer-connection.js.map +1 -0
  95. package/dist/webrtc/rtc-connection.d.ts +47 -0
  96. package/dist/webrtc/rtc-connection.js +370 -0
  97. package/dist/webrtc/rtc-connection.js.map +1 -0
  98. package/dist/webrtc-hooks.d.ts +30 -0
  99. package/dist/webrtc-hooks.js +224 -0
  100. package/dist/webrtc-hooks.js.map +1 -0
  101. package/karma.conf.ts +89 -0
  102. package/ngi-eu-footer.png +0 -0
  103. package/package.json +86 -0
  104. package/src/admin-bin.ts +57 -0
  105. package/src/client/mockrtc-client.ts +79 -0
  106. package/src/client/mockrtc-remote-peer.ts +286 -0
  107. package/src/handling/handler-builder.ts +215 -0
  108. package/src/handling/handler-step-definitions.ts +142 -0
  109. package/src/handling/handler-steps.ts +254 -0
  110. package/src/main-browser.ts +44 -0
  111. package/src/main.ts +109 -0
  112. package/src/mockrtc-peer.ts +176 -0
  113. package/src/mockrtc.ts +36 -0
  114. package/src/server/mockrtc-admin-plugin.ts +196 -0
  115. package/src/server/mockrtc-admin-server.ts +17 -0
  116. package/src/server/mockrtc-server-peer.ts +159 -0
  117. package/src/server/mockrtc-server.ts +53 -0
  118. package/src/webrtc/control-channel.ts +13 -0
  119. package/src/webrtc/datachannel-stream.ts +102 -0
  120. package/src/webrtc/mediatrack-stream.ts +135 -0
  121. package/src/webrtc/mockrtc-connection.ts +164 -0
  122. package/src/webrtc/rtc-connection.ts +420 -0
  123. package/src/webrtc-hooks.ts +245 -0
  124. package/test/integration/close-steps.spec.ts +39 -0
  125. package/test/integration/connection-setup.spec.ts +230 -0
  126. package/test/integration/echo-steps.spec.ts +88 -0
  127. package/test/integration/proxy.spec.ts +526 -0
  128. package/test/integration/send-steps.spec.ts +76 -0
  129. package/test/integration/smoke-test.spec.ts +100 -0
  130. package/test/integration/wait-steps.spec.ts +225 -0
  131. package/test/start-test-admin-server.ts +12 -0
  132. package/test/test-setup.ts +136 -0
  133. package/test/tsconfig.json +11 -0
  134. package/tsconfig.json +14 -0
  135. package/typedoc.json +19 -0
  136. package/wallaby.js +41 -0
@@ -0,0 +1,234 @@
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.MockRTCRemotePeer = void 0;
17
+ const graphql_tag_1 = require("graphql-tag");
18
+ class MockRTCRemotePeer {
19
+ constructor(peerId, adminClient) {
20
+ this.peerId = peerId;
21
+ this.adminClient = adminClient;
22
+ this.completeOffer = (sessionId, answer) => __awaiter(this, void 0, void 0, function* () {
23
+ yield this.adminClient.sendQuery({
24
+ query: (0, graphql_tag_1.gql) `
25
+ mutation CompletePeerRTCOffer(
26
+ $peerId: ID!,
27
+ $sessionId: ID!,
28
+ $answer: SessionDescriptionInput!
29
+ ) {
30
+ completeOffer(peerId: $peerId, sessionId: $sessionId, answer: $answer)
31
+ }
32
+ `,
33
+ variables: {
34
+ peerId: this.peerId,
35
+ sessionId,
36
+ answer: answer
37
+ }
38
+ });
39
+ return new RemoteSessionApi(this.adminClient, this.peerId, sessionId);
40
+ });
41
+ }
42
+ createOffer() {
43
+ return this.adminClient.sendQuery({
44
+ query: (0, graphql_tag_1.gql) `
45
+ mutation GetPeerRTCOffer($peerId: ID!) {
46
+ createOffer(peerId: $peerId) {
47
+ id
48
+ description {
49
+ type
50
+ sdp
51
+ }
52
+ }
53
+ }
54
+ `,
55
+ variables: { peerId: this.peerId },
56
+ transformResponse: ({ createOffer }) => ({
57
+ offer: createOffer.description,
58
+ setAnswer: (answer) => this.completeOffer(createOffer.id, answer)
59
+ })
60
+ });
61
+ }
62
+ createExternalOffer() {
63
+ return this.adminClient.sendQuery({
64
+ query: (0, graphql_tag_1.gql) `
65
+ mutation GetPeerRTCExternalOffer($peerId: ID!) {
66
+ createExternalOffer(peerId: $peerId) {
67
+ id
68
+ description {
69
+ type
70
+ sdp
71
+ }
72
+ }
73
+ }
74
+ `,
75
+ variables: { peerId: this.peerId },
76
+ transformResponse: ({ createExternalOffer }) => ({
77
+ id: createExternalOffer.id,
78
+ offer: createExternalOffer.description,
79
+ setAnswer: (answer) => this.completeOffer(createExternalOffer.id, answer)
80
+ })
81
+ });
82
+ }
83
+ answerOffer(offer) {
84
+ return __awaiter(this, void 0, void 0, function* () {
85
+ return this.adminClient.sendQuery({
86
+ query: (0, graphql_tag_1.gql) `
87
+ mutation GetPeerRTCAnswer($peerId: ID!, $offer: SessionDescriptionInput!) {
88
+ answerOffer(peerId: $peerId, offer: $offer) {
89
+ id
90
+ description {
91
+ type
92
+ sdp
93
+ }
94
+ }
95
+ }
96
+ `,
97
+ variables: { peerId: this.peerId, offer },
98
+ transformResponse: ({ answerOffer }) => ({
99
+ answer: answerOffer.description,
100
+ session: new RemoteSessionApi(this.adminClient, this.peerId, answerOffer.id)
101
+ })
102
+ });
103
+ });
104
+ }
105
+ answerExternalOffer(offer) {
106
+ return __awaiter(this, void 0, void 0, function* () {
107
+ return this.adminClient.sendQuery({
108
+ query: (0, graphql_tag_1.gql) `
109
+ mutation GetPeerRTCExternalAnswer($peerId: ID!, $offer: SessionDescriptionInput!) {
110
+ answerExternalOffer(peerId: $peerId, offer: $offer) {
111
+ id
112
+ description {
113
+ type
114
+ sdp
115
+ }
116
+ }
117
+ }
118
+ `,
119
+ variables: { peerId: this.peerId, offer },
120
+ transformResponse: ({ answerExternalOffer }) => ({
121
+ id: answerExternalOffer.id,
122
+ answer: answerExternalOffer.description
123
+ })
124
+ });
125
+ });
126
+ }
127
+ getAllMessages() {
128
+ return this.adminClient.sendQuery({
129
+ query: (0, graphql_tag_1.gql) `
130
+ query GetPeerSeenMessages($peerId: ID!) {
131
+ getSeenMessages(peerId: $peerId)
132
+ }
133
+ `,
134
+ variables: { peerId: this.peerId },
135
+ transformResponse: ({ getSeenMessages }) => {
136
+ return getSeenMessages.map((message) => {
137
+ if (typeof message === 'string') {
138
+ return message;
139
+ }
140
+ else if (message.type === 'buffer') {
141
+ return Buffer.from(message.value, 'base64');
142
+ }
143
+ else {
144
+ throw new Error(`Unparseable message data: ${JSON.stringify(message)}`);
145
+ }
146
+ });
147
+ }
148
+ });
149
+ }
150
+ getMessagesOnChannel(channelName) {
151
+ return this.adminClient.sendQuery({
152
+ query: (0, graphql_tag_1.gql) `
153
+ query GetPeerSeenMessages($peerId: ID!, $channelName: String) {
154
+ getSeenMessages(peerId: $peerId, channelName: $channelName)
155
+ }
156
+ `,
157
+ variables: { peerId: this.peerId, channelName },
158
+ transformResponse: ({ getSeenMessages }) => {
159
+ return getSeenMessages.map((message) => {
160
+ if (typeof message === 'string') {
161
+ return message;
162
+ }
163
+ else if (message.type === 'buffer') {
164
+ return Buffer.from(message.value, 'base64');
165
+ }
166
+ else {
167
+ throw new Error(`Unparseable message data: ${JSON.stringify(message)}`);
168
+ }
169
+ });
170
+ }
171
+ });
172
+ }
173
+ }
174
+ exports.MockRTCRemotePeer = MockRTCRemotePeer;
175
+ class RemoteSessionApi {
176
+ constructor(adminClient, peerId, sessionId) {
177
+ this.adminClient = adminClient;
178
+ this.peerId = peerId;
179
+ this.sessionId = sessionId;
180
+ }
181
+ createOffer() {
182
+ return this.adminClient.sendQuery({
183
+ query: (0, graphql_tag_1.gql) `
184
+ mutation GetPeerRTCSessionOffer($peerId: ID!, $sessionId: ID!) {
185
+ createOffer(peerId: $peerId, sessionId: $sessionId) {
186
+ description {
187
+ type
188
+ sdp
189
+ }
190
+ }
191
+ }
192
+ `,
193
+ variables: { peerId: this.peerId, sessionId: this.sessionId },
194
+ transformResponse: ({ createOffer }) => createOffer.description
195
+ });
196
+ }
197
+ completeOffer(answer) {
198
+ return __awaiter(this, void 0, void 0, function* () {
199
+ yield this.adminClient.sendQuery({
200
+ query: (0, graphql_tag_1.gql) `
201
+ mutation CompletePeerRTCOffer(
202
+ $peerId: ID!,
203
+ $sessionId: ID!,
204
+ $answer: SessionDescriptionInput!
205
+ ) {
206
+ completeOffer(peerId: $peerId, sessionId: $sessionId, answer: $answer)
207
+ }
208
+ `,
209
+ variables: {
210
+ peerId: this.peerId,
211
+ sessionId: this.sessionId,
212
+ answer: answer
213
+ }
214
+ });
215
+ });
216
+ }
217
+ answerOffer(offer) {
218
+ return this.adminClient.sendQuery({
219
+ query: (0, graphql_tag_1.gql) `
220
+ mutation GetPeerRTCAnswer($peerId: ID!, $offer: SessionDescriptionInput!) {
221
+ answerOffer(peerId: $peerId, offer: $offer) {
222
+ description {
223
+ type
224
+ sdp
225
+ }
226
+ }
227
+ }
228
+ `,
229
+ variables: { peerId: this.peerId, offer },
230
+ transformResponse: ({ answerOffer }) => answerOffer.description
231
+ });
232
+ }
233
+ }
234
+ //# sourceMappingURL=mockrtc-remote-peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockrtc-remote-peer.js","sourceRoot":"","sources":["../src/mockrtc-remote-peer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;AAEH,6CAAkC;AAalC,MAAa,iBAAiB;IAE1B,YACa,MAAc,EACf,WAA2C;QAD1C,WAAM,GAAN,MAAM,CAAQ;QACf,gBAAW,GAAX,WAAW,CAAgC;QAoD/C,kBAAa,GAAG,CAAO,SAAiB,EAAE,MAAiC,EAAE,EAAE;YACnF,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAO;gBACnC,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;;;;;aAQT;gBACD,SAAS,EAAE;oBACP,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,SAAS;oBACT,MAAM,EAAE,MAAM;iBACjB;aACJ,CAAC,CAAC;YAEH,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1E,CAAC,CAAA,CAAA;IAtEE,CAAC;IAEJ,WAAW;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAG/B;YACE,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;;;;;;;aAUT;YACD,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YAClC,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;gBACrC,KAAK,EAAE,WAAW,CAAC,WAAW;gBAC9B,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC;aACpE,CAAC;SACL,CAAC,CAAC;IACP,CAAC;IAED,mBAAmB;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAG/B;YACE,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;;;;;;;aAUT;YACD,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YAClC,iBAAiB,EAAE,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7C,EAAE,EAAE,mBAAmB,CAAC,EAAE;gBAC1B,KAAK,EAAE,mBAAmB,CAAC,WAAW;gBACtC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC;aAC5E,CAAC;SACL,CAAC,CAAC;IACP,CAAC;IAuBK,WAAW,CAAC,KAAgC;;YAC9C,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAG/B;gBACE,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;;;;;;;aAUT;gBACD,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;gBACzC,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;oBACrC,MAAM,EAAE,WAAW,CAAC,WAAW;oBAC/B,OAAO,EAAE,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;iBAC/E,CAAC;aACL,CAAC,CAAC;QACP,CAAC;KAAA;IAEK,mBAAmB,CAAC,KAAgC;;YACtD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAG/B;gBACE,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;;;;;;;aAUT;gBACD,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;gBACzC,iBAAiB,EAAE,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC7C,EAAE,EAAE,mBAAmB,CAAC,EAAE;oBAC1B,MAAM,EAAE,mBAAmB,CAAC,WAAW;iBAC1C,CAAC;aACL,CAAC,CAAC;QACP,CAAC;KAAA;IAED,cAAc;QACV,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAG/B;YACE,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;aAIT;YACD,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YAClC,iBAAiB,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE;gBACvC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;oBACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;wBAC7B,OAAO,OAAO,CAAC;qBAClB;yBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;wBAClC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;qBAC/C;yBAAM;wBACH,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;qBAC3E;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,oBAAoB,CAAC,WAAmB;QACpC,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAG/B;YACE,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;aAIT;YACD,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;YAC/C,iBAAiB,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE;gBACvC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;oBACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;wBAC7B,OAAO,OAAO,CAAC;qBAClB;yBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;wBAClC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;qBAC/C;yBAAM;wBACH,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;qBAC3E;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CAEJ;AA/KD,8CA+KC;AAED,MAAM,gBAAgB;IAClB,YACY,WAA2C,EAC3C,MAAc,EACd,SAAiB;QAFjB,gBAAW,GAAX,WAAW,CAAgC;QAC3C,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAQ;IAC1B,CAAC;IAEJ,WAAW;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAG/B;YACE,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;;;;;;aAST;YACD,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;YAC7D,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW;SAClE,CAAC,CAAC;IACP,CAAC;IAEK,aAAa,CAAC,MAAiC;;YACjD,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAO;gBACnC,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;;;;;aAQT;gBACD,SAAS,EAAE;oBACP,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,MAAM;iBACjB;aACJ,CAAC,CAAC;QACP,CAAC;KAAA;IAED,WAAW,CAAC,KAAgC;QACxC,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAG/B;YACE,KAAK,EAAE,IAAA,iBAAG,EAAA;;;;;;;;;aAST;YACD,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;YACzC,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW;SAClE,CAAC,CAAC;IACP,CAAC;CAEJ"}
@@ -0,0 +1,29 @@
1
+ /// <reference types="node" />
2
+ import { MockRTCPeer, MockRTCPeerOptions, MockRTCSessionAPI, MockRTCAnswerParams, MockRTCOfferParams, MockRTCExternalAnswerParams, MockRTCExternalOfferParams } from "./mockrtc-peer";
3
+ import { HandlerStep } from './handling/handler-steps';
4
+ import { RTCConnection } from './webrtc/rtc-connection';
5
+ export declare class MockRTCServerPeer implements MockRTCPeer {
6
+ private handlerSteps;
7
+ private options;
8
+ readonly peerId: string;
9
+ private readonly connections;
10
+ private readonly unassignedExternalConnections;
11
+ constructor(handlerSteps: HandlerStep[], options?: MockRTCPeerOptions);
12
+ trackConnection(conn: RTCConnection): void;
13
+ private getExternalConnection;
14
+ createExternalOffer(): Promise<MockRTCExternalOfferParams>;
15
+ answerExternalOffer(offer: RTCSessionDescriptionInit): Promise<MockRTCExternalAnswerParams>;
16
+ private createConnection;
17
+ createOffer(): Promise<MockRTCOfferParams & {
18
+ _sessionId: string;
19
+ }>;
20
+ answerOffer(offer: RTCSessionDescriptionInit): Promise<MockRTCAnswerParams & {
21
+ _sessionId: string;
22
+ }>;
23
+ getSessionApi(id: string): MockRTCSessionAPI;
24
+ private handleConnection;
25
+ close(): Promise<void>;
26
+ private messages;
27
+ getAllMessages(): Promise<(string | Buffer)[]>;
28
+ getMessagesOnChannel(channelName: string): Promise<(string | Buffer)[]>;
29
+ }
@@ -0,0 +1,145 @@
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.MockRTCServerPeer = void 0;
17
+ const crypto_1 = require("crypto");
18
+ const rtc_connection_1 = require("./webrtc/rtc-connection");
19
+ const mockrtc_connection_1 = require("./webrtc/mockrtc-connection");
20
+ class MockRTCServerPeer {
21
+ constructor(handlerSteps, options = {}) {
22
+ this.handlerSteps = handlerSteps;
23
+ this.options = options;
24
+ this.peerId = (0, crypto_1.randomUUID)();
25
+ // A list of all currently open connections managed by this peer
26
+ this.connections = {};
27
+ // A subset of the connections: external connections with no assigned internal connection
28
+ this.unassignedExternalConnections = {};
29
+ this.getExternalConnection = (id) => {
30
+ const externalConn = this.unassignedExternalConnections[id];
31
+ if (!externalConn)
32
+ throw new Error(`Attempted to connect unknown external conn ${id}`);
33
+ delete this.unassignedExternalConnections[id];
34
+ return externalConn;
35
+ };
36
+ this.messages = {};
37
+ }
38
+ trackConnection(conn) {
39
+ this.connections[conn.id] = conn;
40
+ conn.once('connection-closed', () => {
41
+ delete this.connections[conn.id];
42
+ });
43
+ }
44
+ createExternalOffer() {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ const externalConn = new rtc_connection_1.RTCConnection();
47
+ this.unassignedExternalConnections[externalConn.id] = externalConn;
48
+ this.trackConnection(externalConn);
49
+ return {
50
+ id: externalConn.id,
51
+ offer: yield externalConn.getLocalDescription(),
52
+ setAnswer: (answer) => __awaiter(this, void 0, void 0, function* () {
53
+ externalConn.sessionApi.completeOffer(answer);
54
+ return externalConn.sessionApi;
55
+ })
56
+ };
57
+ });
58
+ }
59
+ answerExternalOffer(offer) {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ const externalConn = new rtc_connection_1.RTCConnection();
62
+ const externalConnId = (0, crypto_1.randomUUID)();
63
+ this.unassignedExternalConnections[externalConnId] = externalConn;
64
+ this.trackConnection(externalConn);
65
+ externalConn.setRemoteDescription(offer);
66
+ return {
67
+ id: externalConnId,
68
+ answer: yield externalConn.getLocalDescription()
69
+ };
70
+ });
71
+ }
72
+ createConnection() {
73
+ const conn = new mockrtc_connection_1.MockRTCConnection(this.getExternalConnection);
74
+ this.trackConnection(conn);
75
+ this.handleConnection(conn).catch((error) => {
76
+ console.error("Error handling WebRTC connection:", error);
77
+ conn.close().catch(() => { });
78
+ });
79
+ if (this.options.recordMessages) {
80
+ conn.on('channel-open', (channel) => {
81
+ var _a;
82
+ var _b;
83
+ const channelLabel = channel.label;
84
+ const messageLog = ((_a = (_b = this.messages)[channelLabel]) !== null && _a !== void 0 ? _a : (_b[channelLabel] = []));
85
+ channel.on('data', d => {
86
+ messageLog.push(d);
87
+ });
88
+ });
89
+ }
90
+ return conn;
91
+ }
92
+ createOffer() {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ const conn = this.createConnection();
95
+ return {
96
+ _sessionId: conn.id,
97
+ offer: yield conn.sessionApi.createOffer(),
98
+ setAnswer: (answer) => __awaiter(this, void 0, void 0, function* () {
99
+ conn.sessionApi.completeOffer(answer);
100
+ return conn.sessionApi;
101
+ })
102
+ };
103
+ });
104
+ }
105
+ answerOffer(offer) {
106
+ return __awaiter(this, void 0, void 0, function* () {
107
+ const conn = this.createConnection();
108
+ const answer = yield conn.sessionApi.answerOffer(offer);
109
+ return {
110
+ _sessionId: conn.id,
111
+ answer,
112
+ session: conn.sessionApi
113
+ };
114
+ });
115
+ }
116
+ getSessionApi(id) {
117
+ return this.connections[id].sessionApi;
118
+ }
119
+ handleConnection(conn) {
120
+ return __awaiter(this, void 0, void 0, function* () {
121
+ yield conn.waitUntilConnected();
122
+ for (const step of this.handlerSteps) {
123
+ yield step.handle(conn);
124
+ }
125
+ yield conn.close();
126
+ });
127
+ }
128
+ close() {
129
+ return __awaiter(this, void 0, void 0, function* () {
130
+ yield Promise.all(Object.values(this.connections).map(c => c.close()));
131
+ });
132
+ }
133
+ getAllMessages() {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ return Object.values(this.messages).flat();
136
+ });
137
+ }
138
+ getMessagesOnChannel(channelName) {
139
+ return __awaiter(this, void 0, void 0, function* () {
140
+ return this.messages[channelName].flat();
141
+ });
142
+ }
143
+ }
144
+ exports.MockRTCServerPeer = MockRTCServerPeer;
145
+ //# sourceMappingURL=mockrtc-server-peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockrtc-server-peer.js","sourceRoot":"","sources":["../src/mockrtc-server-peer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { MockRTC, MockRTCOptions, MockRTCPeerBuilder } from "./mockrtc";
2
+ import { MockRTCServerPeer } from "./mockrtc-server-peer";
3
+ import { HandlerStepDefinition } from "./handling/handler-step-definitions";
4
+ export declare class MockRTCServer implements MockRTC {
5
+ private options;
6
+ constructor(options?: MockRTCOptions);
7
+ start(): Promise<void>;
8
+ stop(): Promise<void>;
9
+ buildPeer(): MockRTCPeerBuilder;
10
+ buildPeerFromData: (handlerStepDefinitions: HandlerStepDefinition[]) => Promise<MockRTCServerPeer>;
11
+ private _activePeers;
12
+ get activePeers(): Readonly<MockRTCServerPeer[]>;
13
+ getPeer(id: string): MockRTCServerPeer;
14
+ }
@@ -0,0 +1,53 @@
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.MockRTCServer = void 0;
17
+ const mockrtc_server_peer_1 = require("./mockrtc-server-peer");
18
+ const handler_builder_1 = require("./handling/handler-builder");
19
+ const handler_steps_1 = require("./handling/handler-steps");
20
+ class MockRTCServer {
21
+ constructor(options = {}) {
22
+ this.options = options;
23
+ this.buildPeerFromData = (handlerStepDefinitions) => __awaiter(this, void 0, void 0, function* () {
24
+ const handlerSteps = handlerStepDefinitions.map((definition) => {
25
+ return Object.assign(Object.create(handler_steps_1.StepLookup[definition.type].prototype), definition);
26
+ });
27
+ const peer = new mockrtc_server_peer_1.MockRTCServerPeer(handlerSteps, this.options);
28
+ this._activePeers[peer.peerId] = peer;
29
+ return peer;
30
+ });
31
+ this._activePeers = {};
32
+ }
33
+ start() {
34
+ return __awaiter(this, void 0, void 0, function* () { });
35
+ }
36
+ stop() {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ yield Promise.all(this.activePeers.map(peer => peer.close()));
39
+ this._activePeers = {};
40
+ });
41
+ }
42
+ buildPeer() {
43
+ return new handler_builder_1.MockRTCHandlerBuilder(this.buildPeerFromData);
44
+ }
45
+ get activePeers() {
46
+ return Object.values(this._activePeers);
47
+ }
48
+ getPeer(id) {
49
+ return this._activePeers[id];
50
+ }
51
+ }
52
+ exports.MockRTCServer = MockRTCServer;
53
+ //# sourceMappingURL=mockrtc-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockrtc-server.js","sourceRoot":"","sources":["../src/mockrtc-server.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;AAGH,+DAA0D;AAC1D,gEAAmE;AAEnE,4DAAsD;AAEtD,MAAa,aAAa;IAEtB,YACY,UAA0B,EAAE;QAA5B,YAAO,GAAP,OAAO,CAAqB;QAiBxC,sBAAiB,GAAG,CAAO,sBAA+C,EAA8B,EAAE;YACtG,MAAM,YAAY,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBAC3D,OAAO,MAAM,CAAC,MAAM,CAChB,MAAM,CAAC,MAAM,CAAC,0BAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,EACpD,UAAU,CACb,CAAC;YACN,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,uCAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;YACtC,OAAO,IAAI,CAAC;QAChB,CAAC,CAAA,CAAA;QAEO,iBAAY,GAAwC,EAAE,CAAC;IA5B5D,CAAC;IAEE,KAAK;8DAAmB,CAAC;KAAA;IACzB,IAAI;;YACN,MAAM,OAAO,CAAC,GAAG,CACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACxB,IAAI,CAAC,KAAK,EAAE,CACf,CACJ,CAAC;YACF,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAC3B,CAAC;KAAA;IAED,SAAS;QACL,OAAO,IAAI,uCAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAeD,IAAI,WAAW;QACX,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;CAEJ;AAzCD,sCAyCC"}
@@ -0,0 +1,25 @@
1
+ import type { MockRTCHandlerBuilder } from "./handling/handler-builder";
2
+ import type { MockRTCPeer } from "./mockrtc-peer";
3
+ export interface MockRTCPeerBuilder extends MockRTCHandlerBuilder<MockRTCPeer> {
4
+ }
5
+ export interface MockRTCOptions {
6
+ /**
7
+ * Whether or not all DataChannel messages should be saved for later examination.
8
+ * This can be useful in quick testing, but may use large amounts of data if
9
+ * enabled when proxying lots of traffic.
10
+ *
11
+ * Defaults to false.
12
+ */
13
+ recordMessages?: boolean;
14
+ }
15
+ export interface MockRTC {
16
+ /**
17
+ * Start creating a mock WebRTC peer. This method returns a builder, who
18
+ * must be configured with the mock peer's settings. Once configured the
19
+ * peer can be created by calling any `.thenX()` method to define the
20
+ * peer's behaviour.
21
+ */
22
+ buildPeer(): MockRTCPeerBuilder;
23
+ start(): Promise<void>;
24
+ stop(): Promise<void>;
25
+ }
@@ -0,0 +1,7 @@
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
+ //# sourceMappingURL=mockrtc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockrtc.js","sourceRoot":"","sources":["../src/mockrtc.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "mockrtc",
3
+ "version": "0.1.0",
4
+ "description": "Powerful friendly WebRTC mock peer & proxy",
5
+ "main": "dist/main.js",
6
+ "types": "dist/main.d.ts",
7
+ "directories": {
8
+ "test": "test"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "pretest": "npm run build",
13
+ "test": "karma start"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/httptoolkit/mockrtc.git"
18
+ },
19
+ "keywords": [
20
+ "webrtc",
21
+ "rtc",
22
+ "mock",
23
+ "test",
24
+ "proxy"
25
+ ],
26
+ "author": "Tim Perry <tim@httptoolkit.tech>",
27
+ "license": "Apache-2.0",
28
+ "bugs": {
29
+ "url": "https://github.com/httptoolkit/mockrtc/issues"
30
+ },
31
+ "homepage": "https://github.com/httptoolkit/mockrtc#readme",
32
+ "devDependencies": {
33
+ "@esbuild-plugins/node-modules-polyfill": "^0.1.4",
34
+ "@types/chai": "^4.3.0",
35
+ "@types/mocha": "^9.1.0",
36
+ "chai": "^4.3.6",
37
+ "esbuild": "^0.14.23",
38
+ "esbuild-plugin-wasm": "^1.0.0",
39
+ "karma": "^6.3.16",
40
+ "karma-chai": "^0.1.0",
41
+ "karma-chrome-launcher": "^3.1.0",
42
+ "karma-esbuild": "^2.2.2",
43
+ "karma-mocha": "^2.0.1",
44
+ "karma-spec-reporter": "^0.0.33",
45
+ "mocha": "^9.2.0",
46
+ "ts-node": "^10.5.0",
47
+ "typescript": "^4.5.5"
48
+ },
49
+ "dependencies": {
50
+ "mockttp": "^2.6.0"
51
+ }
52
+ }
@@ -0,0 +1,17 @@
1
+ /// <reference types="node" />
2
+ import * as stream from 'stream';
3
+ import { PluggableAdmin } from 'mockttp';
4
+ import type { IResolvers } from "@graphql-tools/utils";
5
+ import { MockRTCOptions } from '../mockrtc';
6
+ export interface SessionData {
7
+ id: string;
8
+ description: RTCSessionDescriptionInit;
9
+ }
10
+ export declare class MockRTCAdminPlugin implements PluggableAdmin.AdminPlugin<MockRTCOptions, {}> {
11
+ private mockRTCServer;
12
+ start(options: MockRTCOptions): Promise<void>;
13
+ reset(): void;
14
+ stop(): Promise<void>;
15
+ schema: import("graphql").DocumentNode;
16
+ buildResolvers(adminStream: stream.Duplex, ruleParams: {}): IResolvers;
17
+ }