@guildxyz/types
Version:
Types related to the Guild.xyz API
66 lines (60 loc) • 1.93 kB
text/typescript
import { z } from "zod";
import { nonEmptyRefine } from "../utils";
import {
DateLike,
LogicSchema,
PositiveInteger,
VisibilitySchema,
} from "./common";
import { RequirementCreationPayloadSchema } from "./requirement";
import {
RoleRewardCreationForGuildCreationPayloadSchema,
RoleRewardCreationPayloadSchema,
} from "./roleReward";
const RoleBaseSchema = z.object({
name: z.string().max(50),
description: z.string().max(1000).nullish(),
imageUrl: z.string().max(500).nullish(),
logic: LogicSchema.optional(),
visibility: VisibilitySchema.optional(),
anyOfNum: z.number().int().positive().nullish(),
hideFromEyes: z.boolean().optional(),
});
export const RoleSchema = RoleBaseSchema.extend({
id: PositiveInteger,
memberCount: z.number().int().nonnegative(),
position: z.number().int().nonnegative().nullish(),
createdAt: DateLike,
updatedAt: DateLike,
lastSyncedAt: DateLike.nullish(),
groupId: PositiveInteger.nullish(),
visibilityRoleId: PositiveInteger.nullish(),
});
export const RoleCreationPayloadSchema = z.intersection(
RoleBaseSchema,
z.object({
requirements: z.array(RequirementCreationPayloadSchema).min(1),
rolePlatforms: z.array(RoleRewardCreationPayloadSchema).optional(),
groupId: PositiveInteger.optional(),
visibilityRoleId: PositiveInteger.optional(),
})
);
export const RoleCreationForGuildCreationPayloadSchema = z.intersection(
RoleBaseSchema,
z.object({
requirements: z.array(RequirementCreationPayloadSchema).min(1),
rolePlatforms: z
.array(RoleRewardCreationForGuildCreationPayloadSchema)
.optional(),
})
);
export const RoleUpdatePayloadSchema = z
.intersection(
RoleBaseSchema.partial(),
z.object({
position: z.number().int().nonnegative().optional(),
groupId: PositiveInteger.optional(),
visibilityRoleId: PositiveInteger.optional(),
})
)
.refine(...nonEmptyRefine());