@gbraver-burst-network/anonymous-browser-sdk 1.30.0-beta.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/LICENSE.txt +7 -0
- package/Readme.md +37 -0
- package/lib/http-api/frontend-log.d.ts +14 -0
- package/lib/http-api/frontend-log.js +33 -0
- package/lib/http-api/issue-auth-token.d.ts +7 -0
- package/lib/http-api/issue-auth-token.js +29 -0
- package/lib/http-api/issue-coturn-credential.d.ts +12 -0
- package/lib/http-api/issue-coturn-credential.js +36 -0
- package/lib/http-api/request/frontend-log.d.ts +30 -0
- package/lib/http-api/request/frontend-log.js +2 -0
- package/lib/http-api/response/issue-auth-token.d.ts +13 -0
- package/lib/http-api/response/issue-auth-token.js +9 -0
- package/lib/http-api/response/issue-coturn-credential.d.ts +13 -0
- package/lib/http-api/response/issue-coturn-credential.js +9 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +9 -0
- package/lib/json/parse.d.ts +7 -0
- package/lib/json/parse.js +20 -0
- package/lib/sdk/auth-token-manager.d.ts +23 -0
- package/lib/sdk/auth-token-manager.js +72 -0
- package/lib/sdk/battle-sdk.d.ts +25 -0
- package/lib/sdk/battle-sdk.js +2 -0
- package/lib/sdk/create-rtc-peer-connection.d.ts +13 -0
- package/lib/sdk/create-rtc-peer-connection.js +45 -0
- package/lib/sdk/frontend-log-manager.d.ts +23 -0
- package/lib/sdk/frontend-log-manager.js +65 -0
- package/lib/sdk/guest-battle-sdk.d.ts +36 -0
- package/lib/sdk/guest-battle-sdk.js +78 -0
- package/lib/sdk/guest-local-webrtc-sdk.d.ts +54 -0
- package/lib/sdk/guest-local-webrtc-sdk.js +194 -0
- package/lib/sdk/guest-webrtc-connection-manager.d.ts +33 -0
- package/lib/sdk/guest-webrtc-connection-manager.js +71 -0
- package/lib/sdk/host-battle-sdk.d.ts +39 -0
- package/lib/sdk/host-battle-sdk.js +108 -0
- package/lib/sdk/host-local-webrtc-sdk.d.ts +50 -0
- package/lib/sdk/host-local-webrtc-sdk.js +99 -0
- package/lib/sdk/host-webrtc-connection-manager.d.ts +37 -0
- package/lib/sdk/host-webrtc-connection-manager.js +84 -0
- package/lib/sdk/local-webrtc-room.d.ts +44 -0
- package/lib/sdk/local-webrtc-room.js +178 -0
- package/lib/sdk/websocket-connection-manager.d.ts +34 -0
- package/lib/sdk/websocket-connection-manager.js +92 -0
- package/lib/webrtc/gather-all-ice-candidate.d.ts +20 -0
- package/lib/webrtc/gather-all-ice-candidate.js +45 -0
- package/lib/webrtc/get-selected-ice-candidate-summary.d.ts +6 -0
- package/lib/webrtc/get-selected-ice-candidate-summary.js +36 -0
- package/lib/webrtc/guest/guest-message.d.ts +48 -0
- package/lib/webrtc/guest/guest-message.js +27 -0
- package/lib/webrtc/guest/receive-battle-progressed.d.ts +7 -0
- package/lib/webrtc/guest/receive-battle-progressed.js +29 -0
- package/lib/webrtc/guest/receive-battle-start.d.ts +7 -0
- package/lib/webrtc/guest/receive-battle-start.js +29 -0
- package/lib/webrtc/guest/receive-request-selected-player.d.ts +7 -0
- package/lib/webrtc/guest/receive-request-selected-player.js +29 -0
- package/lib/webrtc/guest/wait-until-data-channel.d.ts +6 -0
- package/lib/webrtc/guest/wait-until-data-channel.js +14 -0
- package/lib/webrtc/host/host-message.d.ts +1001 -0
- package/lib/webrtc/host/host-message.js +33 -0
- package/lib/webrtc/host/receive-send-command.d.ts +8 -0
- package/lib/webrtc/host/receive-send-command.js +31 -0
- package/lib/webrtc/host/request-selected-player.d.ts +16 -0
- package/lib/webrtc/host/request-selected-player.js +35 -0
- package/lib/webrtc/notify-connection-failed.d.ts +7 -0
- package/lib/webrtc/notify-connection-failed.js +11 -0
- package/lib/webrtc/rtc-ice-candidate-init-schema.d.ts +8 -0
- package/lib/webrtc/rtc-ice-candidate-init-schema.js +11 -0
- package/lib/webrtc/rtc-session-description-init-schema.d.ts +11 -0
- package/lib/webrtc/rtc-session-description-init-schema.js +9 -0
- package/lib/webrtc/wait-until-connected.d.ts +6 -0
- package/lib/webrtc/wait-until-connected.js +28 -0
- package/lib/webrtc/wait-until-data-channel-ready.d.ts +6 -0
- package/lib/webrtc/wait-until-data-channel-ready.js +28 -0
- package/lib/websocket-api/connect-ws-signal.d.ts +7 -0
- package/lib/websocket-api/connect-ws-signal.js +29 -0
- package/lib/websocket-api/create-room.d.ts +6 -0
- package/lib/websocket-api/create-room.js +37 -0
- package/lib/websocket-api/delete-signaling-channel.d.ts +11 -0
- package/lib/websocket-api/delete-signaling-channel.js +43 -0
- package/lib/websocket-api/join-room.d.ts +12 -0
- package/lib/websocket-api/join-room.js +40 -0
- package/lib/websocket-api/notify-ice-candidate-recieved.d.ts +7 -0
- package/lib/websocket-api/notify-ice-candidate-recieved.js +13 -0
- package/lib/websocket-api/request/create-room.d.ts +4 -0
- package/lib/websocket-api/request/create-room.js +2 -0
- package/lib/websocket-api/request/delete-signaling-channel.d.ts +6 -0
- package/lib/websocket-api/request/delete-signaling-channel.js +2 -0
- package/lib/websocket-api/request/index.d.ts +7 -0
- package/lib/websocket-api/request/index.js +2 -0
- package/lib/websocket-api/request/join-room.d.ts +6 -0
- package/lib/websocket-api/request/join-room.js +2 -0
- package/lib/websocket-api/request/send-ice-candidate.d.ts +8 -0
- package/lib/websocket-api/request/send-ice-candidate.js +2 -0
- package/lib/websocket-api/request/send-sdp.d.ts +8 -0
- package/lib/websocket-api/request/send-sdp.js +2 -0
- package/lib/websocket-api/response/delete-signaling-channel-accepted.d.ts +9 -0
- package/lib/websocket-api/response/delete-signaling-channel-accepted.js +8 -0
- package/lib/websocket-api/response/delete-signaling-channel-rejected.d.ts +9 -0
- package/lib/websocket-api/response/delete-signaling-channel-rejected.js +8 -0
- package/lib/websocket-api/response/join-room-accepted.d.ts +12 -0
- package/lib/websocket-api/response/join-room-accepted.js +9 -0
- package/lib/websocket-api/response/join-room-rejected.d.ts +9 -0
- package/lib/websocket-api/response/join-room-rejected.js +8 -0
- package/lib/websocket-api/response/matching.d.ts +12 -0
- package/lib/websocket-api/response/matching.js +9 -0
- package/lib/websocket-api/response/receive-ice-candidate.d.ts +20 -0
- package/lib/websocket-api/response/receive-ice-candidate.js +11 -0
- package/lib/websocket-api/response/receive-remote-sdp.d.ts +23 -0
- package/lib/websocket-api/response/receive-remote-sdp.js +11 -0
- package/lib/websocket-api/response/room-creation-result.d.ts +37 -0
- package/lib/websocket-api/response/room-creation-result.js +20 -0
- package/lib/websocket-api/response/send-sdp-rejected.d.ts +9 -0
- package/lib/websocket-api/response/send-sdp-rejected.js +8 -0
- package/lib/websocket-api/send-to-ws-signal.d.ts +7 -0
- package/lib/websocket-api/send-to-ws-signal.js +11 -0
- package/lib/websocket-api/wait-until-matching.d.ts +6 -0
- package/lib/websocket-api/wait-until-matching.js +29 -0
- package/lib/websocket-api/wait-until-sdp-recieve.d.ts +6 -0
- package/lib/websocket-api/wait-until-sdp-recieve.js +33 -0
- package/package.json +52 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendHostMessage = exports.BattleProgressedSchema = exports.BattleStartSchema = exports.RequestSelectedPlayerSchema = void 0;
|
|
4
|
+
const gbraver_burst_core_1 = require("gbraver-burst-core");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
/** RequestSelectedPlayer zod のスキーマ */
|
|
7
|
+
exports.RequestSelectedPlayerSchema = zod_1.z.object({
|
|
8
|
+
type: zod_1.z.literal("request-selected-player"),
|
|
9
|
+
flowID: zod_1.z.string(),
|
|
10
|
+
});
|
|
11
|
+
/** BattleStart zod のスキーマ */
|
|
12
|
+
exports.BattleStartSchema = zod_1.z.object({
|
|
13
|
+
type: zod_1.z.literal("battle-start"),
|
|
14
|
+
flowID: zod_1.z.string(),
|
|
15
|
+
hostPlayer: gbraver_burst_core_1.PlayerSchema,
|
|
16
|
+
guestPlayer: gbraver_burst_core_1.PlayerSchema,
|
|
17
|
+
update: zod_1.z.array(gbraver_burst_core_1.GameStateSchema),
|
|
18
|
+
});
|
|
19
|
+
/** BattleProgressed zod のスキーマ */
|
|
20
|
+
exports.BattleProgressedSchema = zod_1.z.object({
|
|
21
|
+
type: zod_1.z.literal("battle-progressed"),
|
|
22
|
+
flowID: zod_1.z.string(),
|
|
23
|
+
update: zod_1.z.array(gbraver_burst_core_1.GameStateSchema),
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* ホストメッセージをゲストに送信する
|
|
27
|
+
* @param dataChannel データチャンネル
|
|
28
|
+
* @param message メッセージ内容
|
|
29
|
+
*/
|
|
30
|
+
const sendHostMessage = (dataChannel, message) => {
|
|
31
|
+
dataChannel.send(JSON.stringify(message));
|
|
32
|
+
};
|
|
33
|
+
exports.sendHostMessage = sendHostMessage;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SendCommand } from "../guest/guest-message";
|
|
2
|
+
/**
|
|
3
|
+
* ゲストからflowIDが一致した「SendCommand」メッセージを待ち受ける
|
|
4
|
+
* @param dataChannel データチャネル
|
|
5
|
+
* @param flowID フローID
|
|
6
|
+
* @returns フローID
|
|
7
|
+
*/
|
|
8
|
+
export declare const receiveSendCommand: (dataChannel: RTCDataChannel, flowID: string) => Promise<SendCommand>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.receiveSendCommand = void 0;
|
|
4
|
+
const parse_1 = require("../../json/parse");
|
|
5
|
+
const guest_message_1 = require("../guest/guest-message");
|
|
6
|
+
/**
|
|
7
|
+
* ゲストからflowIDが一致した「SendCommand」メッセージを待ち受ける
|
|
8
|
+
* @param dataChannel データチャネル
|
|
9
|
+
* @param flowID フローID
|
|
10
|
+
* @returns フローID
|
|
11
|
+
*/
|
|
12
|
+
const receiveSendCommand = (dataChannel, flowID) => {
|
|
13
|
+
let handler = null;
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
handler = (event) => {
|
|
16
|
+
const data = (0, parse_1.parseJSON)(event.data);
|
|
17
|
+
const parsedSendCommand = guest_message_1.SendCommandSchema.safeParse(data);
|
|
18
|
+
if (parsedSendCommand.success &&
|
|
19
|
+
parsedSendCommand.data.flowID === flowID) {
|
|
20
|
+
resolve(parsedSendCommand.data);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
dataChannel.addEventListener("message", handler);
|
|
25
|
+
}).finally(() => {
|
|
26
|
+
if (handler) {
|
|
27
|
+
dataChannel.removeEventListener("message", handler);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
exports.receiveSendCommand = receiveSendCommand;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ArmdozerId, PilotId } from "gbraver-burst-core";
|
|
2
|
+
/** ホストが選択したプレイヤーの情報 */
|
|
3
|
+
type HostSelectedPlayer = {
|
|
4
|
+
/** ホストが選択したアームドーザーのID */
|
|
5
|
+
armdozerId: ArmdozerId;
|
|
6
|
+
/** ホストが選択したパイロットのID */
|
|
7
|
+
pilotId: PilotId;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* ホストに選択したプレイヤーを共有するようにリクエストする
|
|
11
|
+
* @param dataChannel データチャンネル
|
|
12
|
+
* @param flowID ゲームのフローID
|
|
13
|
+
* @returns ホストが選択したプレイヤー情報
|
|
14
|
+
*/
|
|
15
|
+
export declare const requestSelectedPlayer: (dataChannel: RTCDataChannel, flowID: string) => Promise<HostSelectedPlayer>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requestSelectedPlayer = void 0;
|
|
4
|
+
const parse_1 = require("../../json/parse");
|
|
5
|
+
const guest_message_1 = require("../guest/guest-message");
|
|
6
|
+
const host_message_1 = require("./host-message");
|
|
7
|
+
/**
|
|
8
|
+
* ホストに選択したプレイヤーを共有するようにリクエストする
|
|
9
|
+
* @param dataChannel データチャンネル
|
|
10
|
+
* @param flowID ゲームのフローID
|
|
11
|
+
* @returns ホストが選択したプレイヤー情報
|
|
12
|
+
*/
|
|
13
|
+
const requestSelectedPlayer = (dataChannel, flowID) => {
|
|
14
|
+
let handler = null;
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
handler = (event) => {
|
|
17
|
+
const data = (0, parse_1.parseJSON)(event.data);
|
|
18
|
+
const parsedSendPlayer = guest_message_1.SendPlayerSchema.safeParse(data);
|
|
19
|
+
if (parsedSendPlayer.success && parsedSendPlayer.data.flowID === flowID) {
|
|
20
|
+
const { armdozerId, pilotId } = parsedSendPlayer.data;
|
|
21
|
+
resolve({ armdozerId, pilotId });
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
dataChannel.addEventListener("message", handler);
|
|
25
|
+
(0, host_message_1.sendHostMessage)(dataChannel, {
|
|
26
|
+
type: "request-selected-player",
|
|
27
|
+
flowID,
|
|
28
|
+
});
|
|
29
|
+
}).finally(() => {
|
|
30
|
+
if (handler) {
|
|
31
|
+
dataChannel.removeEventListener("message", handler);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
exports.requestSelectedPlayer = requestSelectedPlayer;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
/**
|
|
3
|
+
* コネクションがfailed状態になったことを通知するObservableを返す
|
|
4
|
+
* @param connection WebRTCコネクション
|
|
5
|
+
* @returns failed状態になったことを通知するObservable
|
|
6
|
+
*/
|
|
7
|
+
export declare const notifyConnectionFailed: (connection: RTCPeerConnection) => Observable<unknown>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.notifyConnectionFailed = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
/**
|
|
6
|
+
* コネクションがfailed状態になったことを通知するObservableを返す
|
|
7
|
+
* @param connection WebRTCコネクション
|
|
8
|
+
* @returns failed状態になったことを通知するObservable
|
|
9
|
+
*/
|
|
10
|
+
const notifyConnectionFailed = (connection) => (0, rxjs_1.merge)((0, rxjs_1.fromEvent)(connection, "connectionstatechange").pipe((0, rxjs_1.map)(() => connection.connectionState)), (0, rxjs_1.fromEvent)(connection, "iceconnectionstatechange").pipe((0, rxjs_1.map)(() => connection.iceConnectionState))).pipe((0, rxjs_1.filter)((state) => state === "failed"));
|
|
11
|
+
exports.notifyConnectionFailed = notifyConnectionFailed;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** RTCIceCandidateInit の zod スキーマ */
|
|
3
|
+
export declare const RTCIceCandidateInitSchema: z.ZodObject<{
|
|
4
|
+
candidate: z.ZodOptional<z.ZodString>;
|
|
5
|
+
sdpMLineIndex: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
6
|
+
sdpMid: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
7
|
+
usernameFragment: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
8
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RTCIceCandidateInitSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/** RTCIceCandidateInit の zod スキーマ */
|
|
6
|
+
exports.RTCIceCandidateInitSchema = zod_1.z.object({
|
|
7
|
+
candidate: zod_1.z.string().optional(),
|
|
8
|
+
sdpMLineIndex: zod_1.z.number().nullable().optional(),
|
|
9
|
+
sdpMid: zod_1.z.string().nullable().optional(),
|
|
10
|
+
usernameFragment: zod_1.z.string().nullable().optional(),
|
|
11
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Session Descriptionのzodスキーマ */
|
|
3
|
+
export declare const RTCSessionDescriptionInitSchema: z.ZodObject<{
|
|
4
|
+
type: z.ZodEnum<{
|
|
5
|
+
offer: "offer";
|
|
6
|
+
pranswer: "pranswer";
|
|
7
|
+
answer: "answer";
|
|
8
|
+
rollback: "rollback";
|
|
9
|
+
}>;
|
|
10
|
+
sdp: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RTCSessionDescriptionInitSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/** Session Descriptionのzodスキーマ */
|
|
6
|
+
exports.RTCSessionDescriptionInitSchema = zod_1.z.object({
|
|
7
|
+
type: zod_1.z.enum(["offer", "pranswer", "answer", "rollback"]),
|
|
8
|
+
sdp: zod_1.z.string().optional(),
|
|
9
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.waitUntilConnected = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* WebRTCコネクションが接続されるまで待機する
|
|
6
|
+
* @param connection WebRTCコネクション
|
|
7
|
+
* @returns 接続されたら発火するPromise
|
|
8
|
+
*/
|
|
9
|
+
const waitUntilConnected = (connection) => {
|
|
10
|
+
let handler = null;
|
|
11
|
+
return new Promise((resolve) => {
|
|
12
|
+
if (connection.connectionState === "connected") {
|
|
13
|
+
resolve();
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
handler = () => {
|
|
17
|
+
if (connection.connectionState === "connected") {
|
|
18
|
+
resolve();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
connection.addEventListener("connectionstatechange", handler);
|
|
22
|
+
}).finally(() => {
|
|
23
|
+
if (handler) {
|
|
24
|
+
connection.removeEventListener("connectionstatechange", handler);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
exports.waitUntilConnected = waitUntilConnected;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.waitUntilDataChannelOpen = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* データチャンネルが開通するのを待つ
|
|
6
|
+
* @param dataChannel データチャンネル
|
|
7
|
+
* @returns データチャンネルが開通したら発火するPromise
|
|
8
|
+
*/
|
|
9
|
+
const waitUntilDataChannelOpen = (dataChannel) => {
|
|
10
|
+
let handler = null;
|
|
11
|
+
return new Promise((resolve) => {
|
|
12
|
+
if (dataChannel.readyState === "open") {
|
|
13
|
+
resolve();
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
handler = () => {
|
|
17
|
+
if (dataChannel.readyState === "open") {
|
|
18
|
+
resolve();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
dataChannel.addEventListener("open", handler);
|
|
22
|
+
}).finally(() => {
|
|
23
|
+
if (handler) {
|
|
24
|
+
dataChannel.removeEventListener("open", handler);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
exports.waitUntilDataChannelOpen = waitUntilDataChannelOpen;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.connectWSSignal = connectWSSignal;
|
|
4
|
+
/**
|
|
5
|
+
* WebSocketシグナルサーバーに接続する
|
|
6
|
+
* @param url 接続先のWebSocketシグナルサーバーのURL
|
|
7
|
+
* @param token 認証トークン
|
|
8
|
+
* @returns 接続に成功したWebSocket、接続に失敗した場合はPromiseがrejectされる
|
|
9
|
+
*/
|
|
10
|
+
function connectWSSignal(url, token) {
|
|
11
|
+
let handler = null;
|
|
12
|
+
let errorHandler = null;
|
|
13
|
+
const websocket = new WebSocket(`${url}?token=${token}`);
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
handler = () => {
|
|
16
|
+
resolve(websocket);
|
|
17
|
+
};
|
|
18
|
+
errorHandler = reject;
|
|
19
|
+
websocket.addEventListener("open", handler);
|
|
20
|
+
websocket.addEventListener("error", errorHandler);
|
|
21
|
+
}).finally(() => {
|
|
22
|
+
if (handler) {
|
|
23
|
+
websocket.removeEventListener("open", handler);
|
|
24
|
+
}
|
|
25
|
+
if (errorHandler) {
|
|
26
|
+
websocket.removeEventListener("error", errorHandler);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRoom = void 0;
|
|
4
|
+
const parse_1 = require("../json/parse");
|
|
5
|
+
const room_creation_result_1 = require("./response/room-creation-result");
|
|
6
|
+
const send_to_ws_signal_1 = require("./send-to-ws-signal");
|
|
7
|
+
/**
|
|
8
|
+
* ルームを生成する
|
|
9
|
+
* @param websocket WebSocketコネクション
|
|
10
|
+
* @returns 成功したらルームID、失敗したらnull
|
|
11
|
+
*/
|
|
12
|
+
const createRoom = (websocket) => {
|
|
13
|
+
let handler = null;
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
handler = (event) => {
|
|
16
|
+
const parsedData = (0, parse_1.parseJSON)(event.data);
|
|
17
|
+
const parsedRoomCreationSuccessSchema = room_creation_result_1.RoomCreationSuccessSchema.safeParse(parsedData);
|
|
18
|
+
if (parsedRoomCreationSuccessSchema.success) {
|
|
19
|
+
const roomCreationSuccess = parsedRoomCreationSuccessSchema.data;
|
|
20
|
+
resolve(roomCreationSuccess.roomID);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const parsedRoomCreationFailure = room_creation_result_1.RoomCreationFailureSchema.safeParse(parsedData);
|
|
24
|
+
if (parsedRoomCreationFailure.success) {
|
|
25
|
+
resolve(null);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
websocket.addEventListener("message", handler);
|
|
30
|
+
(0, send_to_ws_signal_1.sendToWSSignal)(websocket, { action: "create-room" });
|
|
31
|
+
}).finally(() => {
|
|
32
|
+
if (handler) {
|
|
33
|
+
websocket.removeEventListener("message", handler);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
exports.createRoom = createRoom;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* シグナリングチャネルを削除する
|
|
3
|
+
* @param options オプション
|
|
4
|
+
* @param options.websocket WebSocketコネクション
|
|
5
|
+
* @param options.signalingID 削除するシグナリングチャネルのID
|
|
6
|
+
* @return シグナリングチャネルの削除に成功したらtrue、失敗したらfalse
|
|
7
|
+
*/
|
|
8
|
+
export declare const deleteSignalingChannel: (options: {
|
|
9
|
+
websocket: WebSocket;
|
|
10
|
+
signalingID: string;
|
|
11
|
+
}) => Promise<boolean>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deleteSignalingChannel = void 0;
|
|
4
|
+
const parse_1 = require("../json/parse");
|
|
5
|
+
const delete_signaling_channel_accepted_1 = require("./response/delete-signaling-channel-accepted");
|
|
6
|
+
const delete_signaling_channel_rejected_1 = require("./response/delete-signaling-channel-rejected");
|
|
7
|
+
const send_to_ws_signal_1 = require("./send-to-ws-signal");
|
|
8
|
+
/**
|
|
9
|
+
* シグナリングチャネルを削除する
|
|
10
|
+
* @param options オプション
|
|
11
|
+
* @param options.websocket WebSocketコネクション
|
|
12
|
+
* @param options.signalingID 削除するシグナリングチャネルのID
|
|
13
|
+
* @return シグナリングチャネルの削除に成功したらtrue、失敗したらfalse
|
|
14
|
+
*/
|
|
15
|
+
const deleteSignalingChannel = (options) => {
|
|
16
|
+
const { websocket, signalingID } = options;
|
|
17
|
+
let handler = null;
|
|
18
|
+
return new Promise((resolve) => {
|
|
19
|
+
handler = (event) => {
|
|
20
|
+
const parsedData = (0, parse_1.parseJSON)(event.data);
|
|
21
|
+
const deleteSignalingChannelAccepted = delete_signaling_channel_accepted_1.DeleteSignalingChannelAcceptedSchema.safeParse(parsedData);
|
|
22
|
+
if (deleteSignalingChannelAccepted.success) {
|
|
23
|
+
resolve(true);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const deleteSignalingChannelRejected = delete_signaling_channel_rejected_1.DeleteSignalingChannelRejectedSchema.safeParse(parsedData);
|
|
27
|
+
if (deleteSignalingChannelRejected.success) {
|
|
28
|
+
resolve(false);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
websocket.addEventListener("message", handler);
|
|
33
|
+
(0, send_to_ws_signal_1.sendToWSSignal)(websocket, {
|
|
34
|
+
action: "delete-signaling-channel",
|
|
35
|
+
signalingID,
|
|
36
|
+
});
|
|
37
|
+
}).finally(() => {
|
|
38
|
+
if (handler) {
|
|
39
|
+
websocket.removeEventListener("message", handler);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
exports.deleteSignalingChannel = deleteSignalingChannel;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { JoinRoomAccepted } from "./response/join-room-accepted";
|
|
2
|
+
/**
|
|
3
|
+
* ルームに参加する
|
|
4
|
+
* @param options オプション
|
|
5
|
+
* @param options.websocket WebSocketコネクション
|
|
6
|
+
* @param options.roomID 参加するルームのID
|
|
7
|
+
* @return ルームへの参加に成功したらJoinRoomAccepted、失敗したらnull
|
|
8
|
+
*/
|
|
9
|
+
export declare const joinRoom: (options: {
|
|
10
|
+
websocket: WebSocket;
|
|
11
|
+
roomID: string;
|
|
12
|
+
}) => Promise<JoinRoomAccepted | null>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.joinRoom = void 0;
|
|
4
|
+
const parse_1 = require("../json/parse");
|
|
5
|
+
const join_room_accepted_1 = require("./response/join-room-accepted");
|
|
6
|
+
const join_room_rejected_1 = require("./response/join-room-rejected");
|
|
7
|
+
const send_to_ws_signal_1 = require("./send-to-ws-signal");
|
|
8
|
+
/**
|
|
9
|
+
* ルームに参加する
|
|
10
|
+
* @param options オプション
|
|
11
|
+
* @param options.websocket WebSocketコネクション
|
|
12
|
+
* @param options.roomID 参加するルームのID
|
|
13
|
+
* @return ルームへの参加に成功したらJoinRoomAccepted、失敗したらnull
|
|
14
|
+
*/
|
|
15
|
+
const joinRoom = (options) => {
|
|
16
|
+
const { websocket, roomID } = options;
|
|
17
|
+
let handler = null;
|
|
18
|
+
return new Promise((resolve) => {
|
|
19
|
+
handler = (event) => {
|
|
20
|
+
const parsedData = (0, parse_1.parseJSON)(event.data);
|
|
21
|
+
const parsedJoinRoomAccepted = join_room_accepted_1.JoinRoomAcceptedSchema.safeParse(parsedData);
|
|
22
|
+
if (parsedJoinRoomAccepted.success) {
|
|
23
|
+
resolve(parsedJoinRoomAccepted.data);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const parsedJoinRoomRejected = join_room_rejected_1.JoinRoomRejectedSchema.safeParse(parsedData);
|
|
27
|
+
if (parsedJoinRoomRejected.success) {
|
|
28
|
+
resolve(null);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
websocket.addEventListener("message", handler);
|
|
33
|
+
(0, send_to_ws_signal_1.sendToWSSignal)(websocket, { action: "join-room", roomID });
|
|
34
|
+
}).finally(() => {
|
|
35
|
+
if (handler) {
|
|
36
|
+
websocket.removeEventListener("message", handler);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
exports.joinRoom = joinRoom;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.notifyIceCandidateReceived = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const parse_1 = require("../json/parse");
|
|
6
|
+
const receive_ice_candidate_1 = require("./response/receive-ice-candidate");
|
|
7
|
+
/**
|
|
8
|
+
* ICE candidate を受信したことを通知する
|
|
9
|
+
* @param websocket WebSocketコネクション
|
|
10
|
+
* @returns 通知ストリーム
|
|
11
|
+
*/
|
|
12
|
+
const notifyIceCandidateReceived = (websocket) => (0, rxjs_1.fromEvent)(websocket, "message").pipe((0, rxjs_1.map)((event) => (0, parse_1.parseJSON)(event.data)), (0, rxjs_1.map)((data) => receive_ice_candidate_1.ReceiveICECandidateSchema.safeParse(data)), (0, rxjs_1.filter)((data) => data.success), (0, rxjs_1.map)((data) => data.data.iceCandidate));
|
|
13
|
+
exports.notifyIceCandidateReceived = notifyIceCandidateReceived;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CreateRoom } from "./create-room";
|
|
2
|
+
import { DeleteSignalingChannel } from "./delete-signaling-channel";
|
|
3
|
+
import { JoinRoom } from "./join-room";
|
|
4
|
+
import { SendICECandidate } from "./send-ice-candidate";
|
|
5
|
+
import { SendSDP } from "./send-sdp";
|
|
6
|
+
/** WebSocketシグナルサーバーへのリクエスト */
|
|
7
|
+
export type WSSignalRequest = CreateRoom | JoinRoom | SendSDP | SendICECandidate | DeleteSignalingChannel;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** シグナリングチャネルの削除に成功した */
|
|
3
|
+
export type DeleteSignalingChannelAccepted = {
|
|
4
|
+
type: "delete-signaling-channel-accepted";
|
|
5
|
+
};
|
|
6
|
+
/** DeleteSignalingChannelAccepted zodスキーマ */
|
|
7
|
+
export declare const DeleteSignalingChannelAcceptedSchema: z.ZodObject<{
|
|
8
|
+
type: z.ZodLiteral<"delete-signaling-channel-accepted">;
|
|
9
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeleteSignalingChannelAcceptedSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/** DeleteSignalingChannelAccepted zodスキーマ */
|
|
6
|
+
exports.DeleteSignalingChannelAcceptedSchema = zod_1.z.object({
|
|
7
|
+
type: zod_1.z.literal("delete-signaling-channel-accepted"),
|
|
8
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** シグナリングチャネルの削除が拒否された */
|
|
3
|
+
export type DeleteSignalingChannelRejected = {
|
|
4
|
+
type: "delete-signaling-channel-rejected";
|
|
5
|
+
};
|
|
6
|
+
/** DeleteSignalingChannelRejected zodスキーマ */
|
|
7
|
+
export declare const DeleteSignalingChannelRejectedSchema: z.ZodObject<{
|
|
8
|
+
type: z.ZodLiteral<"delete-signaling-channel-rejected">;
|
|
9
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeleteSignalingChannelRejectedSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/** DeleteSignalingChannelRejected zodスキーマ */
|
|
6
|
+
exports.DeleteSignalingChannelRejectedSchema = zod_1.z.object({
|
|
7
|
+
type: zod_1.z.literal("delete-signaling-channel-rejected"),
|
|
8
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** ルーム参加承認 */
|
|
3
|
+
export type JoinRoomAccepted = {
|
|
4
|
+
type: "join-room-accepted";
|
|
5
|
+
/** シグナリングID */
|
|
6
|
+
signalingID: string;
|
|
7
|
+
};
|
|
8
|
+
/** JoinRoomAccepted zod スキーマ */
|
|
9
|
+
export declare const JoinRoomAcceptedSchema: z.ZodObject<{
|
|
10
|
+
type: z.ZodLiteral<"join-room-accepted">;
|
|
11
|
+
signalingID: z.ZodString;
|
|
12
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JoinRoomAcceptedSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/** JoinRoomAccepted zod スキーマ */
|
|
6
|
+
exports.JoinRoomAcceptedSchema = zod_1.z.object({
|
|
7
|
+
type: zod_1.z.literal("join-room-accepted"),
|
|
8
|
+
signalingID: zod_1.z.string(),
|
|
9
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** 入室が拒否された */
|
|
3
|
+
export type JoinRoomRejected = {
|
|
4
|
+
type: "join-room-rejected";
|
|
5
|
+
};
|
|
6
|
+
/** JoinRoomRejected zod スキーマ */
|
|
7
|
+
export declare const JoinRoomRejectedSchema: z.ZodObject<{
|
|
8
|
+
type: z.ZodLiteral<"join-room-rejected">;
|
|
9
|
+
}, z.core.$strip>;
|