@4players/odin-common
Version:
A collection of commonly used type definitions and utility functions across ODIN web projects
137 lines (136 loc) • 4.56 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RoomV2 = exports.RoomV1 = void 0;
const z = require("zod");
const media_1 = require("./media");
const peer_1 = require("./peer");
const serialization_1 = require("./serialization");
const channels_1 = require("./channels");
var RoomV1;
(function (RoomV1) {
RoomV1.RoomIdSchema = z.string();
RoomV1.RoomSchema = z.object({
id: RoomV1.RoomIdSchema,
customer: z.string(),
user_data: serialization_1.ByteArraySchema,
peers: z.array(peer_1.PeerSchema),
});
RoomV1.RoomUpdateSchema = z.discriminatedUnion('kind', [
z.object({
kind: z.literal('Joined'),
room: RoomV1.RoomSchema,
media_ids: z.array(media_1.MediaIdSchema),
own_peer_id: peer_1.PeerIdSchema,
}),
z.object({
kind: z.literal('Left'),
reason: z.enum(['RoomClosing', 'ServerClosing', 'PeerKicked']),
}),
z.object({
kind: z.literal('UserDataChanged'),
user_data: z.optional(serialization_1.ByteArraySchema),
}),
z.object({
kind: z.literal('PeerJoined'),
peer: peer_1.PeerSchema,
}),
z.object({
kind: z.literal('PeerLeft'),
peer_id: peer_1.PeerIdSchema,
}),
]);
RoomV1.RoomUpdatesSchema = z.object({
updates: z.array(RoomV1.RoomUpdateSchema),
});
RoomV1.RoomStatusSchema = z.enum(['Joining', 'Joined', 'Closed']);
RoomV1.RoomStatusChangedSchema = z.object({
status: RoomV1.RoomStatusSchema,
message: z.optional(z.string()),
});
})(RoomV1 || (exports.RoomV1 = RoomV1 = {}));
var RoomV2;
(function (RoomV2) {
RoomV2.ParametersSchema = z.record(serialization_1.JsonSchema);
RoomV2.PeerProperties = z.object({
user_data: serialization_1.ByteArraySchema.optional(),
tags: z.array(z.string()).optional(),
audio_parameters: RoomV2.ParametersSchema.optional(),
video_parameters: RoomV2.ParametersSchema.optional(),
});
RoomV2.PingSchema = z.object({
Ping: z.object({ id: z.number() }),
});
RoomV2.ChangeSelfSchema = z.object({
ChangeSelf: RoomV2.PeerProperties.omit({ tags: true }),
});
RoomV2.SetAudioMaskSchema = z.object({
SetAudioMask: z.object({
peer_id: z.number(),
mask: channels_1.ChannelSetSchema,
}),
});
RoomV2.SendMessageSchema = z.object({
SendMessage: z.object({
peer_ids: z.number().array().default([]),
message: serialization_1.ByteArraySchema,
}),
});
RoomV2.CallSchema = RoomV2.PingSchema.or(RoomV2.ChangeSelfSchema)
.or(RoomV2.SetAudioMaskSchema)
.or(RoomV2.SendMessageSchema);
RoomV2.PongSchema = z.object({
Pong: z.object({ id: z.number() }),
});
RoomV2.JoinedSchema = z.object({
Joined: z.object({
own_peer_id: z.number(),
room_id: z.string(),
customer: z.string(),
}),
});
RoomV2.LeftSchema = z.object({
Left: z.object({
reason: z.enum(['room_closing', 'server_closing', 'peer_kicked']),
}),
});
RoomV2.PeerJoinedSchema = z.object({
PeerJoined: RoomV2.PeerProperties.extend({
peer_id: z.number(),
user_id: z.string(),
}),
});
RoomV2.PeerLeftSchema = z.object({
PeerLeft: z.object({
peer_id: z.number(),
}),
});
RoomV2.PeerChangedSchema = z.object({
PeerChanged: RoomV2.PeerProperties.extend({
peer_id: z.number(),
}),
});
RoomV2.NewReconnectTokenSchema = z.object({
NewReconnectToken: z.object({
token: z.string(),
}),
});
RoomV2.MessageReceivedSchema = z.object({
MessageReceived: z.object({
sender_peer_id: z.number(),
message: serialization_1.ByteArraySchema,
}),
});
RoomV2.ErrorSchema = z.object({
Error: z.object({
message: serialization_1.ByteArraySchema,
}),
});
RoomV2.EventSchema = RoomV2.PongSchema.or(RoomV2.JoinedSchema)
.or(RoomV2.LeftSchema)
.or(RoomV2.PeerJoinedSchema)
.or(RoomV2.PeerLeftSchema)
.or(RoomV2.PeerChangedSchema)
.or(RoomV2.NewReconnectTokenSchema)
.or(RoomV2.MessageReceivedSchema)
.or(RoomV2.ErrorSchema);
})(RoomV2 || (exports.RoomV2 = RoomV2 = {}));