@4players/odin-common
Version:
A collection of commonly used type definitions and utility functions across ODIN web projects
30 lines (29 loc) • 874 B
JavaScript
import { z } from 'zod';
export const TokenAudienceSchema = z.enum(['sfu', 'gateway']);
export const TokenSubjectSchema = z.enum([
'connect',
'roomclose',
'roomupdate',
'roombanclient',
'roomsendmessage',
]);
export const TokenClaimsSchema = z.object({
uid: z.string(),
cid: z.optional(z.string()),
rid: oneOrMany(z.string()),
nsp: z.optional(z.string()),
adr: z.optional(z.string()),
aud: z.optional(oneOrMany(TokenAudienceSchema)),
sub: z.optional(oneOrMany(TokenSubjectSchema)),
exp: z.optional(z.number()),
nbf: z.optional(z.number()),
ups: z.optional(z.string()),
tgs: z.optional(oneOrMany(z.string())),
tsp: z.optional(z.number()),
internal: z.optional(z.object({
server: z.optional(z.string()),
})),
});
export function oneOrMany(type) {
return z.union([type, z.array(type)]);
}