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.
- package/.github/workflows/ci.yml +29 -0
- package/LICENSE +201 -0
- package/README.md +290 -0
- package/dist/admin-bin.d.ts +2 -0
- package/dist/admin-bin.js +67 -0
- package/dist/admin-bin.js.map +1 -0
- package/dist/client/mockrtc-client.d.ts +12 -0
- package/dist/client/mockrtc-client.js +67 -0
- package/dist/client/mockrtc-client.js.map +1 -0
- package/dist/client/mockrtc-remote-peer.d.ts +15 -0
- package/dist/client/mockrtc-remote-peer.js +246 -0
- package/dist/client/mockrtc-remote-peer.js.map +1 -0
- package/dist/control-channel.d.ts +8 -0
- package/dist/control-channel.js +11 -0
- package/dist/control-channel.js.map +1 -0
- package/dist/handling/handler-builder.d.ts +138 -0
- package/dist/handling/handler-builder.js +164 -0
- package/dist/handling/handler-builder.js.map +1 -0
- package/dist/handling/handler-step-definitions.d.ts +63 -0
- package/dist/handling/handler-step-definitions.js +123 -0
- package/dist/handling/handler-step-definitions.js.map +1 -0
- package/dist/handling/handler-steps.d.ts +48 -0
- package/dist/handling/handler-steps.js +218 -0
- package/dist/handling/handler-steps.js.map +1 -0
- package/dist/main-browser.d.ts +9 -0
- package/dist/main-browser.js +26 -0
- package/dist/main-browser.js.map +1 -0
- package/dist/main.d.ts +58 -0
- package/dist/main.js +67 -0
- package/dist/main.js.map +1 -0
- package/dist/mockrtc-admin-plugin.d.ts +56 -0
- package/dist/mockrtc-admin-plugin.js +151 -0
- package/dist/mockrtc-admin-plugin.js.map +1 -0
- package/dist/mockrtc-admin-server.d.ts +7 -0
- package/dist/mockrtc-admin-server.js +18 -0
- package/dist/mockrtc-admin-server.js.map +1 -0
- package/dist/mockrtc-client.d.ts +12 -0
- package/dist/mockrtc-client.js +64 -0
- package/dist/mockrtc-client.js.map +1 -0
- package/dist/mockrtc-handler-builder.d.ts +15 -0
- package/dist/mockrtc-handler-builder.js +24 -0
- package/dist/mockrtc-handler-builder.js.map +1 -0
- package/dist/mockrtc-peer.d.ts +147 -0
- package/dist/mockrtc-peer.js +7 -0
- package/dist/mockrtc-peer.js.map +1 -0
- package/dist/mockrtc-remote-peer.d.ts +15 -0
- package/dist/mockrtc-remote-peer.js +234 -0
- package/dist/mockrtc-remote-peer.js.map +1 -0
- package/dist/mockrtc-server-peer.d.ts +29 -0
- package/dist/mockrtc-server-peer.js +145 -0
- package/dist/mockrtc-server-peer.js.map +1 -0
- package/dist/mockrtc-server.d.ts +14 -0
- package/dist/mockrtc-server.js +53 -0
- package/dist/mockrtc-server.js.map +1 -0
- package/dist/mockrtc.d.ts +25 -0
- package/dist/mockrtc.js +7 -0
- package/dist/mockrtc.js.map +1 -0
- package/dist/package.json +52 -0
- package/dist/server/mockrtc-admin-plugin.d.ts +17 -0
- package/dist/server/mockrtc-admin-plugin.js +163 -0
- package/dist/server/mockrtc-admin-plugin.js.map +1 -0
- package/dist/server/mockrtc-admin-server.d.ts +7 -0
- package/dist/server/mockrtc-admin-server.js +18 -0
- package/dist/server/mockrtc-admin-server.js.map +1 -0
- package/dist/server/mockrtc-server-peer.d.ts +24 -0
- package/dist/server/mockrtc-server-peer.js +141 -0
- package/dist/server/mockrtc-server-peer.js.map +1 -0
- package/dist/server/mockrtc-server.d.ts +14 -0
- package/dist/server/mockrtc-server.js +53 -0
- package/dist/server/mockrtc-server.js.map +1 -0
- package/dist/src/main.d.ts +1 -0
- package/dist/src/main.js +24 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/mockrtc-peer.d.ts +0 -0
- package/dist/src/mockrtc-peer.js +2 -0
- package/dist/src/mockrtc-peer.js.map +1 -0
- package/dist/src/mockrtc.d.ts +0 -0
- package/dist/src/mockrtc.js +65 -0
- package/dist/src/mockrtc.js.map +1 -0
- package/dist/webrtc/control-channel.d.ts +8 -0
- package/dist/webrtc/control-channel.js +11 -0
- package/dist/webrtc/control-channel.js.map +1 -0
- package/dist/webrtc/datachannel-stream.d.ts +25 -0
- package/dist/webrtc/datachannel-stream.js +86 -0
- package/dist/webrtc/datachannel-stream.js.map +1 -0
- package/dist/webrtc/mediatrack-stream.d.ts +29 -0
- package/dist/webrtc/mediatrack-stream.js +109 -0
- package/dist/webrtc/mediatrack-stream.js.map +1 -0
- package/dist/webrtc/mockrtc-connection.d.ts +14 -0
- package/dist/webrtc/mockrtc-connection.js +147 -0
- package/dist/webrtc/mockrtc-connection.js.map +1 -0
- package/dist/webrtc/peer-connection.d.ts +16 -0
- package/dist/webrtc/peer-connection.js +81 -0
- package/dist/webrtc/peer-connection.js.map +1 -0
- package/dist/webrtc/rtc-connection.d.ts +47 -0
- package/dist/webrtc/rtc-connection.js +370 -0
- package/dist/webrtc/rtc-connection.js.map +1 -0
- package/dist/webrtc-hooks.d.ts +30 -0
- package/dist/webrtc-hooks.js +224 -0
- package/dist/webrtc-hooks.js.map +1 -0
- package/karma.conf.ts +89 -0
- package/ngi-eu-footer.png +0 -0
- package/package.json +86 -0
- package/src/admin-bin.ts +57 -0
- package/src/client/mockrtc-client.ts +79 -0
- package/src/client/mockrtc-remote-peer.ts +286 -0
- package/src/handling/handler-builder.ts +215 -0
- package/src/handling/handler-step-definitions.ts +142 -0
- package/src/handling/handler-steps.ts +254 -0
- package/src/main-browser.ts +44 -0
- package/src/main.ts +109 -0
- package/src/mockrtc-peer.ts +176 -0
- package/src/mockrtc.ts +36 -0
- package/src/server/mockrtc-admin-plugin.ts +196 -0
- package/src/server/mockrtc-admin-server.ts +17 -0
- package/src/server/mockrtc-server-peer.ts +159 -0
- package/src/server/mockrtc-server.ts +53 -0
- package/src/webrtc/control-channel.ts +13 -0
- package/src/webrtc/datachannel-stream.ts +102 -0
- package/src/webrtc/mediatrack-stream.ts +135 -0
- package/src/webrtc/mockrtc-connection.ts +164 -0
- package/src/webrtc/rtc-connection.ts +420 -0
- package/src/webrtc-hooks.ts +245 -0
- package/test/integration/close-steps.spec.ts +39 -0
- package/test/integration/connection-setup.spec.ts +230 -0
- package/test/integration/echo-steps.spec.ts +88 -0
- package/test/integration/proxy.spec.ts +526 -0
- package/test/integration/send-steps.spec.ts +76 -0
- package/test/integration/smoke-test.spec.ts +100 -0
- package/test/integration/wait-steps.spec.ts +225 -0
- package/test/start-test-admin-server.ts +12 -0
- package/test/test-setup.ts +136 -0
- package/test/tsconfig.json +11 -0
- package/tsconfig.json +14 -0
- package/typedoc.json +19 -0
- package/wallaby.js +41 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as stream from 'stream';
|
|
3
|
+
import { PluggableAdmin } from 'mockttp';
|
|
4
|
+
import { SerializedValue } from 'mockttp/dist/util/serialization';
|
|
5
|
+
import { HandlerStep } from './handling/handler-steps';
|
|
6
|
+
import { MockRTCOptions } from './mockrtc';
|
|
7
|
+
export interface SessionData {
|
|
8
|
+
id: string;
|
|
9
|
+
description: RTCSessionDescriptionInit;
|
|
10
|
+
}
|
|
11
|
+
export declare class MockRTCAdminPlugin implements PluggableAdmin.AdminPlugin<MockRTCOptions, {}> {
|
|
12
|
+
private mockRTCServer;
|
|
13
|
+
start(options: MockRTCOptions): Promise<void>;
|
|
14
|
+
reset(): void;
|
|
15
|
+
stop(): Promise<void>;
|
|
16
|
+
schema: import("graphql/language/ast").DocumentNode;
|
|
17
|
+
buildResolvers(adminStream: stream.Duplex, ruleParams: {}): {
|
|
18
|
+
Mutation: {
|
|
19
|
+
createPeer: (__: any, { data: { steps } }: {
|
|
20
|
+
data: {
|
|
21
|
+
steps: Array<SerializedValue<HandlerStep>>;
|
|
22
|
+
};
|
|
23
|
+
}) => Promise<import("./mockrtc-server-peer").MockRTCServerPeer>;
|
|
24
|
+
createOffer: (__: any, { peerId, sessionId }: {
|
|
25
|
+
peerId: string;
|
|
26
|
+
sessionId?: string | undefined;
|
|
27
|
+
}) => Promise<SessionData>;
|
|
28
|
+
createExternalOffer: (__: any, { peerId }: {
|
|
29
|
+
peerId: string;
|
|
30
|
+
}) => Promise<SessionData>;
|
|
31
|
+
completeOffer: (__: any, { peerId, sessionId, answer }: {
|
|
32
|
+
peerId: string;
|
|
33
|
+
sessionId: string;
|
|
34
|
+
answer: RTCSessionDescriptionInit;
|
|
35
|
+
}) => Promise<void>;
|
|
36
|
+
answerOffer: (__: any, { peerId, sessionId, offer }: {
|
|
37
|
+
peerId: string;
|
|
38
|
+
sessionId?: string | undefined;
|
|
39
|
+
offer: RTCSessionDescriptionInit;
|
|
40
|
+
}) => Promise<SessionData>;
|
|
41
|
+
answerExternalOffer: (__: any, { peerId, offer }: {
|
|
42
|
+
peerId: string;
|
|
43
|
+
offer: RTCSessionDescriptionInit;
|
|
44
|
+
}) => Promise<SessionData>;
|
|
45
|
+
};
|
|
46
|
+
Query: {
|
|
47
|
+
getSeenMessages: (__: any, { peerId, channelName }: {
|
|
48
|
+
peerId: string;
|
|
49
|
+
channelName?: string | undefined;
|
|
50
|
+
}) => Promise<(string | {
|
|
51
|
+
type: string;
|
|
52
|
+
value: string;
|
|
53
|
+
})[]>;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
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.MockRTCAdminPlugin = void 0;
|
|
17
|
+
const graphql_tag_1 = require("graphql-tag");
|
|
18
|
+
const serialization_1 = require("mockttp/dist/util/serialization");
|
|
19
|
+
const handler_steps_1 = require("./handling/handler-steps");
|
|
20
|
+
const mockrtc_server_1 = require("./mockrtc-server");
|
|
21
|
+
class MockRTCAdminPlugin {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.schema = (0, graphql_tag_1.gql) `
|
|
24
|
+
extend type Mutation {
|
|
25
|
+
createPeer(data: RTCHandlerData!): MockedPeer!
|
|
26
|
+
|
|
27
|
+
createOffer(peerId: ID!, sessionId: ID): Session!
|
|
28
|
+
createExternalOffer(peerId: ID!): Session!
|
|
29
|
+
completeOffer(peerId: ID!, sessionId: ID!, answer: SessionDescriptionInput!): Void
|
|
30
|
+
|
|
31
|
+
answerOffer(peerId: ID!, sessionId: ID, offer: SessionDescriptionInput!): Session!
|
|
32
|
+
answerExternalOffer(peerId: ID!, offer: SessionDescriptionInput!): Session!
|
|
33
|
+
answerRenegotiationOffer(sessionId: ID!, offer: SessionDescriptionInput!): Session!
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
input RTCHandlerData {
|
|
37
|
+
steps: [Raw!]!
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
type MockedPeer {
|
|
41
|
+
peerId: ID!
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
input SessionDescriptionInput {
|
|
45
|
+
type: String!
|
|
46
|
+
sdp: String!
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
type SessionDescriptionResult {
|
|
50
|
+
type: String!
|
|
51
|
+
sdp: String!
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
type Session {
|
|
55
|
+
id: ID!
|
|
56
|
+
description: SessionDescriptionResult
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
extend type Query {
|
|
60
|
+
getSeenMessages(peerId: ID!, channelName: String): [Raw!]
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
scalar HandlerStep
|
|
64
|
+
`;
|
|
65
|
+
}
|
|
66
|
+
start(options) {
|
|
67
|
+
this.mockRTCServer = new mockrtc_server_1.MockRTCServer(options);
|
|
68
|
+
return this.mockRTCServer.start();
|
|
69
|
+
}
|
|
70
|
+
reset() { }
|
|
71
|
+
stop() {
|
|
72
|
+
return this.mockRTCServer.stop();
|
|
73
|
+
}
|
|
74
|
+
buildResolvers(adminStream, ruleParams) {
|
|
75
|
+
return {
|
|
76
|
+
Mutation: {
|
|
77
|
+
createPeer: (__, { data: { steps } }) => {
|
|
78
|
+
return this.mockRTCServer.buildPeerFromData(steps.map((stepData) => (0, serialization_1.deserialize)(stepData, adminStream, ruleParams, handler_steps_1.StepLookup)));
|
|
79
|
+
},
|
|
80
|
+
createOffer: (__, { peerId, sessionId }) => __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
const peer = this.mockRTCServer.getPeer(peerId);
|
|
82
|
+
if (!peer)
|
|
83
|
+
throw new Error("Id matches no active peer");
|
|
84
|
+
if (sessionId) {
|
|
85
|
+
const session = peer.getSessionApi(sessionId);
|
|
86
|
+
return {
|
|
87
|
+
id: sessionId,
|
|
88
|
+
description: yield session.createOffer()
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const offerParams = yield peer.createOffer();
|
|
93
|
+
return { id: offerParams._sessionId, description: offerParams.offer };
|
|
94
|
+
}
|
|
95
|
+
}),
|
|
96
|
+
createExternalOffer: (__, { peerId }) => __awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
const peer = this.mockRTCServer.getPeer(peerId);
|
|
98
|
+
if (!peer)
|
|
99
|
+
throw new Error("Id matches no active peer");
|
|
100
|
+
const offerParams = yield peer.createExternalOffer();
|
|
101
|
+
return { id: offerParams.id, description: offerParams.offer };
|
|
102
|
+
}),
|
|
103
|
+
completeOffer: (__, { peerId, sessionId, answer }) => __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
const session = this.mockRTCServer.getPeer(peerId).getSessionApi(sessionId);
|
|
105
|
+
yield session.completeOffer(answer);
|
|
106
|
+
}),
|
|
107
|
+
answerOffer: (__, { peerId, sessionId, offer }) => __awaiter(this, void 0, void 0, function* () {
|
|
108
|
+
const peer = this.mockRTCServer.getPeer(peerId);
|
|
109
|
+
if (!peer)
|
|
110
|
+
throw new Error("Id matches no active peer");
|
|
111
|
+
if (sessionId) {
|
|
112
|
+
const session = peer.getSessionApi(sessionId);
|
|
113
|
+
const answer = yield session.answerOffer(offer);
|
|
114
|
+
return { id: sessionId, description: answer };
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const answerParams = yield peer.answerOffer(offer);
|
|
118
|
+
return { id: answerParams._sessionId, description: answerParams.answer };
|
|
119
|
+
}
|
|
120
|
+
}),
|
|
121
|
+
answerExternalOffer: (__, { peerId, offer }) => __awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
const peer = this.mockRTCServer.getPeer(peerId);
|
|
123
|
+
if (!peer)
|
|
124
|
+
throw new Error("Id matches no active peer");
|
|
125
|
+
const answerParams = yield peer.answerExternalOffer(offer);
|
|
126
|
+
return { id: answerParams.id, description: answerParams.answer };
|
|
127
|
+
})
|
|
128
|
+
},
|
|
129
|
+
Query: {
|
|
130
|
+
getSeenMessages: (__, { peerId, channelName }) => __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
const peer = this.mockRTCServer.getPeer(peerId);
|
|
132
|
+
if (!peer)
|
|
133
|
+
throw new Error("Id matches no active peer");
|
|
134
|
+
const messages = yield (channelName != undefined
|
|
135
|
+
? peer.getMessagesOnChannel(channelName)
|
|
136
|
+
: peer.getAllMessages());
|
|
137
|
+
return messages.map((message) => {
|
|
138
|
+
if (Buffer.isBuffer(message)) {
|
|
139
|
+
return { type: 'buffer', value: message.toString('base64') };
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
return message;
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
})
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.MockRTCAdminPlugin = MockRTCAdminPlugin;
|
|
151
|
+
//# sourceMappingURL=mockrtc-admin-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockrtc-admin-plugin.js","sourceRoot":"","sources":["../src/mockrtc-admin-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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.MockRTCAdminServer = void 0;
|
|
8
|
+
const mockttp_1 = require("mockttp");
|
|
9
|
+
const mockrtc_admin_plugin_1 = require("./mockrtc-admin-plugin");
|
|
10
|
+
class MockRTCAdminServer extends mockttp_1.PluggableAdmin.AdminServer {
|
|
11
|
+
constructor() {
|
|
12
|
+
super({
|
|
13
|
+
adminPlugins: { webrtc: mockrtc_admin_plugin_1.MockRTCAdminPlugin }
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.MockRTCAdminServer = MockRTCAdminServer;
|
|
18
|
+
//# sourceMappingURL=mockrtc-admin-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockrtc-admin-server.js","sourceRoot":"","sources":["../src/mockrtc-admin-server.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qCAAyC;AACzC,iEAA4D;AAE5D,MAAa,kBAAmB,SAAQ,wBAAc,CAAC,WAA2C;IAE9F;QACI,KAAK,CAAC;YACF,YAAY,EAAE,EAAE,MAAM,EAAE,yCAAkB,EAAE;SAC/C,CAAC,CAAC;IACP,CAAC;CAEJ;AARD,gDAQC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PluggableAdmin } from 'mockttp';
|
|
2
|
+
import { MockRTC, MockRTCOptions, MockRTCPeerBuilder } from "./mockrtc";
|
|
3
|
+
export declare type MockRTCClientOptions = PluggableAdmin.AdminClientOptions & MockRTCOptions;
|
|
4
|
+
export declare class MockRTCClient implements MockRTC {
|
|
5
|
+
private options;
|
|
6
|
+
private adminClient;
|
|
7
|
+
constructor(options?: MockRTCClientOptions);
|
|
8
|
+
buildPeer(): MockRTCPeerBuilder;
|
|
9
|
+
private buildPeerFromData;
|
|
10
|
+
start(): Promise<void>;
|
|
11
|
+
stop(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
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.MockRTCClient = void 0;
|
|
17
|
+
const graphql_tag_1 = require("graphql-tag");
|
|
18
|
+
const mockttp_1 = require("mockttp");
|
|
19
|
+
const serialization_1 = require("mockttp/dist/util/serialization");
|
|
20
|
+
const mockrtc_remote_peer_1 = require("./mockrtc-remote-peer");
|
|
21
|
+
const handler_builder_1 = require("./handling/handler-builder");
|
|
22
|
+
class MockRTCClient {
|
|
23
|
+
constructor(options = {}) {
|
|
24
|
+
this.options = options;
|
|
25
|
+
this.buildPeerFromData = (handlerSteps) => __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
const { adminStream } = this.adminClient;
|
|
27
|
+
const peerData = yield this.adminClient.sendQuery({
|
|
28
|
+
query: (0, graphql_tag_1.default) `
|
|
29
|
+
mutation CreatePeer($peerData: RTCHandlerData!) {
|
|
30
|
+
createPeer(data: $peerData) {
|
|
31
|
+
peerId
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
`,
|
|
35
|
+
variables: {
|
|
36
|
+
peerData: {
|
|
37
|
+
steps: handlerSteps.map(step => (0, serialization_1.serialize)(step, adminStream))
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
transformResponse: ({ createPeer }) => createPeer
|
|
41
|
+
});
|
|
42
|
+
const { peerId } = peerData;
|
|
43
|
+
return new mockrtc_remote_peer_1.MockRTCRemotePeer(peerId, this.adminClient);
|
|
44
|
+
});
|
|
45
|
+
this.adminClient = new mockttp_1.PluggableAdmin.AdminClient(options);
|
|
46
|
+
}
|
|
47
|
+
buildPeer() {
|
|
48
|
+
return new handler_builder_1.MockRTCHandlerBuilder(this.buildPeerFromData);
|
|
49
|
+
}
|
|
50
|
+
start() {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
yield this.adminClient.start({
|
|
53
|
+
webrtc: this.options
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
stop() {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
yield this.adminClient.stop();
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.MockRTCClient = MockRTCClient;
|
|
64
|
+
//# sourceMappingURL=mockrtc-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockrtc-client.js","sourceRoot":"","sources":["../src/mockrtc-client.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;AAEH,6CAA8B;AAC9B,qCAAyC;AACzC,mEAA4D;AAM5D,+DAA0D;AAC1D,gEAAmE;AAOnE,MAAa,aAAa;IAItB,YACY,UAAgC,EAAE;QAAlC,YAAO,GAAP,OAAO,CAA2B;QAStC,sBAAiB,GAAG,CAAO,YAAqC,EAAwB,EAAE;YAC9F,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;YAEzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAG/C;gBACE,KAAK,EAAE,IAAA,qBAAG,EAAA;;;;;;aAMT;gBACD,SAAS,EAAE;oBACP,QAAQ,EAAE;wBACN,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,yBAAS,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;qBAChE;iBACJ;gBACD,iBAAiB,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU;aACpD,CAAC,CAAC;YAEH,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;YAE5B,OAAO,IAAI,uCAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3D,CAAC,CAAA,CAAA;QAhCG,IAAI,CAAC,WAAW,GAAG,IAAI,wBAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,SAAS;QACL,OAAO,IAAI,uCAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IA6BK,KAAK;;YACP,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO;aACvB,CAAC,CAAC;QACP,CAAC;KAAA;IAEK,IAAI;;YACN,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;KAAA;CACJ;AAlDD,sCAkDC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/**
|
|
3
|
+
* The builder logic for composing RTC handling behaviour for both mock peers and rules,
|
|
4
|
+
* by internally queuing defined actions until a `.thenX()` method is called to compile
|
|
5
|
+
* the actions into either a peer or a rule (handled by an abstract method).
|
|
6
|
+
*/
|
|
7
|
+
export declare class MockRTCHandlerBuilder<R> {
|
|
8
|
+
private buildCallback;
|
|
9
|
+
private handlerSteps;
|
|
10
|
+
constructor(buildCallback: (handlerSteps: HandlerStep[]) => Promise<R>);
|
|
11
|
+
waitForMessage(): this;
|
|
12
|
+
thenReply(response: string | Buffer): Promise<R>;
|
|
13
|
+
}
|
|
14
|
+
export interface HandlerStep {
|
|
15
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockRTCHandlerBuilder = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The builder logic for composing RTC handling behaviour for both mock peers and rules,
|
|
6
|
+
* by internally queuing defined actions until a `.thenX()` method is called to compile
|
|
7
|
+
* the actions into either a peer or a rule (handled by an abstract method).
|
|
8
|
+
*/
|
|
9
|
+
class MockRTCHandlerBuilder {
|
|
10
|
+
constructor(buildCallback) {
|
|
11
|
+
this.buildCallback = buildCallback;
|
|
12
|
+
this.handlerSteps = [];
|
|
13
|
+
}
|
|
14
|
+
waitForMessage() {
|
|
15
|
+
// Handler logic not yet implemented
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
thenReply(response) {
|
|
19
|
+
// Handler logic not yet implemented
|
|
20
|
+
return this.buildCallback(this.handlerSteps);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.MockRTCHandlerBuilder = MockRTCHandlerBuilder;
|
|
24
|
+
//# sourceMappingURL=mockrtc-handler-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockrtc-handler-builder.js","sourceRoot":"","sources":["../src/mockrtc-handler-builder.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,MAAa,qBAAqB;IAI9B,YACY,aAA0D;QAA1D,kBAAa,GAAb,aAAa,CAA6C;QAH9D,iBAAY,GAAkB,EAAE,CAAC;IAItC,CAAC;IAEJ,cAAc;QACV,oCAAoC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,QAAyB;QAC/B,oCAAoC;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;CAEJ;AAlBD,sDAkBC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export interface MockRTCPeerOptions {
|
|
3
|
+
recordMessages?: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* A MockRTC peer represents a target you can connect to, and exposes an API to create
|
|
7
|
+
* offers or answers to create new connections.
|
|
8
|
+
*
|
|
9
|
+
* Peers have defined behaviour, and each connection will be handled accordingly and
|
|
10
|
+
* independently.
|
|
11
|
+
*
|
|
12
|
+
* Peers can also optionally track all the messages and metadata across all their
|
|
13
|
+
* connections.
|
|
14
|
+
*/
|
|
15
|
+
export interface MockRTCPeer {
|
|
16
|
+
readonly peerId: string;
|
|
17
|
+
/**
|
|
18
|
+
* Creates an offer for a new connection to this mock peer.
|
|
19
|
+
*
|
|
20
|
+
* Returns a set of offer parameters: the offer itself, a session to renegotiate
|
|
21
|
+
* the connection in future, and a setAnswer callback to call with an answer
|
|
22
|
+
* once you have one.
|
|
23
|
+
*/
|
|
24
|
+
createOffer(options?: OfferOptions): Promise<MockRTCOfferParams>;
|
|
25
|
+
/**
|
|
26
|
+
* Takes an offer for a WebRTC connection elsewhere, and creates an answer to
|
|
27
|
+
* connect that to this peer.
|
|
28
|
+
*
|
|
29
|
+
* Returns a set of answer parameters: the answer itself, and a session to renegotiate
|
|
30
|
+
* the connection in future.
|
|
31
|
+
*/
|
|
32
|
+
answerOffer(offer: RTCSessionDescriptionInit, options?: AnswerOptions): Promise<MockRTCAnswerParams>;
|
|
33
|
+
/**
|
|
34
|
+
* Creates an offer for a new external connection to this mock peer.
|
|
35
|
+
*
|
|
36
|
+
* External connections are used for proxying traffic. They do not do anything
|
|
37
|
+
* by default (so they ignore this peer's configured steps) but a mock connection
|
|
38
|
+
* can be connected to an external connection using methods like
|
|
39
|
+
* {@link MockRTCHandlerBuilder.thenPassThrough thenPassThrough}.
|
|
40
|
+
*
|
|
41
|
+
* Returns a set of offer parameters: an external connection id, the offer itself,
|
|
42
|
+
* a session to renegotiate the connection in future, and a setAnswer callback to
|
|
43
|
+
* call with an answer once you have one.
|
|
44
|
+
*/
|
|
45
|
+
createExternalOffer(options?: OfferOptions): Promise<MockRTCExternalOfferParams>;
|
|
46
|
+
/**
|
|
47
|
+
* Takes an offer for a WebRTC connection elsewhere, and creates an answer to create
|
|
48
|
+
* an external connection to this peer.
|
|
49
|
+
*
|
|
50
|
+
* External connections are used for proxying traffic. They do not do anything
|
|
51
|
+
* by default (so they ignore this peer's configured steps) but a mock connection
|
|
52
|
+
* can be connected to an external connection using methods like
|
|
53
|
+
* {@link MockRTCHandlerBuilder.thenPassThrough thenPassThrough}.
|
|
54
|
+
*
|
|
55
|
+
* Returns a set of answer parameters: an external connection id, the answer itself,
|
|
56
|
+
* and a session to renegotiate the connection in future.
|
|
57
|
+
*/
|
|
58
|
+
answerExternalOffer(offer: RTCSessionDescriptionInit, options?: AnswerOptions): Promise<MockRTCExternalAnswerParams>;
|
|
59
|
+
/**
|
|
60
|
+
* Takes a connection id, and returns the associated session.
|
|
61
|
+
*
|
|
62
|
+
* This is useful for advanced use cases, where keeping the session returned by other
|
|
63
|
+
* setup methods is inconvenient, and it's easier to keep ids and look up sessions
|
|
64
|
+
* on demand instead.
|
|
65
|
+
*/
|
|
66
|
+
getSession(id: string): MockRTCSession;
|
|
67
|
+
/**
|
|
68
|
+
* Retrieve an array of all data channel messages that this peer has received on
|
|
69
|
+
* all connections.
|
|
70
|
+
*/
|
|
71
|
+
getAllMessages(): Promise<Array<string | Buffer>>;
|
|
72
|
+
/**
|
|
73
|
+
* Retrieve an array of all data channel messages on a specific channel that this
|
|
74
|
+
* peer has received on all connections.
|
|
75
|
+
*/
|
|
76
|
+
getMessagesOnChannel(channelName: string): Promise<Array<string | Buffer>>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Once a connection has been created, you can access its session API. This allows
|
|
80
|
+
* for renegotiation of an existing session, while persisting the same connection
|
|
81
|
+
* and ongoing handling process.
|
|
82
|
+
*/
|
|
83
|
+
export interface MockRTCSession {
|
|
84
|
+
/**
|
|
85
|
+
* For most use cases explicitly using the session ID isn't necessary.
|
|
86
|
+
*
|
|
87
|
+
* For some advanced use cases though, it's more convenient to store session ids and use
|
|
88
|
+
* peer.getSession, rather than using the session property from the setup methods directly.
|
|
89
|
+
*/
|
|
90
|
+
readonly sessionId: string;
|
|
91
|
+
/**
|
|
92
|
+
* Create a new offer for this session, to renegotiate the existing connection.
|
|
93
|
+
*/
|
|
94
|
+
createOffer(options?: OfferOptions): Promise<RTCSessionDescriptionInit>;
|
|
95
|
+
/**
|
|
96
|
+
* Provide an answer to complete an offer for this session, to renegotiate the existing connection.
|
|
97
|
+
*/
|
|
98
|
+
completeOffer(answer: RTCSessionDescriptionInit): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Get an answer given an offer from elsewhere, to renegotiate the existing connection.
|
|
101
|
+
*/
|
|
102
|
+
answerOffer(offer: RTCSessionDescriptionInit, options?: AnswerOptions): Promise<RTCSessionDescriptionInit>;
|
|
103
|
+
}
|
|
104
|
+
export interface MockRTCOfferParams {
|
|
105
|
+
offer: RTCSessionDescriptionInit;
|
|
106
|
+
setAnswer: (answer: RTCSessionDescriptionInit) => Promise<void>;
|
|
107
|
+
session: MockRTCSession;
|
|
108
|
+
}
|
|
109
|
+
export interface MockRTCAnswerParams {
|
|
110
|
+
answer: RTCSessionDescriptionInit;
|
|
111
|
+
session: MockRTCSession;
|
|
112
|
+
}
|
|
113
|
+
export interface OfferOptions {
|
|
114
|
+
/**
|
|
115
|
+
* A raw SDP string that should be mirrored (best efforts) where possible to
|
|
116
|
+
* create an equivalent offer, including the same media with the same params.
|
|
117
|
+
*/
|
|
118
|
+
mirrorSDP?: string;
|
|
119
|
+
/**
|
|
120
|
+
* When using mirrorSDP, for SDP that only defines video/audio media we will
|
|
121
|
+
* receive an offer with no data stream attached. This can be a problem for
|
|
122
|
+
* proxied connections, which need a data stream to hook up the external
|
|
123
|
+
* connection later. If addDataStream is set to true, a data stream will always
|
|
124
|
+
* be created even if not present in the mirrored SDP.
|
|
125
|
+
*
|
|
126
|
+
* This option has no effect if mirrorSDP is not set.
|
|
127
|
+
*/
|
|
128
|
+
addDataStream?: boolean;
|
|
129
|
+
}
|
|
130
|
+
export interface AnswerOptions {
|
|
131
|
+
/**
|
|
132
|
+
* A raw SDP string that should be mirrored (best efforts) where possible to
|
|
133
|
+
* create an equivalent answer, including the same media params.
|
|
134
|
+
*/
|
|
135
|
+
mirrorSDP?: string;
|
|
136
|
+
}
|
|
137
|
+
export interface MockRTCExternalOfferParams {
|
|
138
|
+
id: string;
|
|
139
|
+
offer: RTCSessionDescriptionInit;
|
|
140
|
+
setAnswer: (answer: RTCSessionDescriptionInit) => Promise<void>;
|
|
141
|
+
session: MockRTCSession;
|
|
142
|
+
}
|
|
143
|
+
export interface MockRTCExternalAnswerParams {
|
|
144
|
+
id: string;
|
|
145
|
+
answer: RTCSessionDescriptionInit;
|
|
146
|
+
session: MockRTCSession;
|
|
147
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockrtc-peer.js","sourceRoot":"","sources":["../src/mockrtc-peer.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { PluggableAdmin } from 'mockttp';
|
|
3
|
+
import { MockRTCPeer, MockRTCOfferParams, MockRTCExternalOfferParams, MockRTCExternalAnswerParams, MockRTCAnswerParams } from "./mockrtc-peer";
|
|
4
|
+
export declare class MockRTCRemotePeer implements MockRTCPeer {
|
|
5
|
+
readonly peerId: string;
|
|
6
|
+
private adminClient;
|
|
7
|
+
constructor(peerId: string, adminClient: PluggableAdmin.AdminClient<{}>);
|
|
8
|
+
createOffer(): Promise<MockRTCOfferParams>;
|
|
9
|
+
createExternalOffer(): Promise<MockRTCExternalOfferParams>;
|
|
10
|
+
private completeOffer;
|
|
11
|
+
answerOffer(offer: RTCSessionDescriptionInit): Promise<MockRTCAnswerParams>;
|
|
12
|
+
answerExternalOffer(offer: RTCSessionDescriptionInit): Promise<MockRTCExternalAnswerParams>;
|
|
13
|
+
getAllMessages(): Promise<(string | Buffer)[]>;
|
|
14
|
+
getMessagesOnChannel(channelName: string): Promise<Array<string | Buffer>>;
|
|
15
|
+
}
|