UNPKG

@4players/odin-common

Version:

A collection of commonly used type definitions and utility functions across ODIN web projects

134 lines (133 loc) 4.3 kB
import * as z from 'zod'; import { MediaIdSchema } from './media'; import { PeerIdSchema, PeerSchema } from './peer'; import { ByteArraySchema, JsonSchema } from './serialization'; import { ChannelSetSchema } from './channels'; export var RoomV1; (function (RoomV1) { RoomV1.RoomIdSchema = z.string(); RoomV1.RoomSchema = z.object({ id: RoomV1.RoomIdSchema, customer: z.string(), user_data: ByteArraySchema, peers: z.array(PeerSchema), }); RoomV1.RoomUpdateSchema = z.discriminatedUnion('kind', [ z.object({ kind: z.literal('Joined'), room: RoomV1.RoomSchema, media_ids: z.array(MediaIdSchema), own_peer_id: PeerIdSchema, }), z.object({ kind: z.literal('Left'), reason: z.enum(['RoomClosing', 'ServerClosing', 'PeerKicked']), }), z.object({ kind: z.literal('UserDataChanged'), user_data: z.optional(ByteArraySchema), }), z.object({ kind: z.literal('PeerJoined'), peer: PeerSchema, }), z.object({ kind: z.literal('PeerLeft'), peer_id: 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 || (RoomV1 = {})); export var RoomV2; (function (RoomV2) { RoomV2.ParametersSchema = z.record(JsonSchema); RoomV2.PeerProperties = z.object({ user_data: 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: ChannelSetSchema, }), }); RoomV2.SendMessageSchema = z.object({ SendMessage: z.object({ peer_ids: z.number().array().default([]), message: 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: ByteArraySchema, }), }); RoomV2.ErrorSchema = z.object({ Error: z.object({ message: 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 || (RoomV2 = {}));