@guildxyz/bev3
Version:
Schemas and types related to the Guild.xyz v3 API
178 lines (175 loc) • 4.62 kB
text/typescript
import { z } from 'zod';
export const RoleFullSchema = z.object({
id: z
.string()
.regex(
new RegExp(
"^[0-9a-f]{8}-[0-9a-f]{4}-[45][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
),
)
.describe("Unique identifier (UUID v4 or v5 format)"),
legacyId: z
.string()
.max(50)
.describe("Legacy system unique identifier for backward compatibility")
.optional(),
createdAt: z
.number()
.int()
.gte(1)
.describe("Unix timestamp of creation date"),
updatedAt: z.number().int().gte(1).describe("Unix timestamp of last update"),
system: z
.object({})
.catchall(z.any())
.describe("System-managed settings for internal classification")
.optional(),
name: z
.string()
.min(1)
.max(255)
.describe("Name of the template (1-255 characters)"),
urlName: z
.string()
.max(255)
.describe("URL-friendly name (optional, max 255 characters)")
.optional(),
description: z
.string()
.max(3000)
.describe(
"Detailed description of the template (optional, max 3000 characters)",
)
.optional(),
imageUrl: z
.string()
.max(255)
.describe("URL to the template's primary image")
.optional(),
backgroundImageUrl: z
.string()
.max(255)
.describe("URL to the template's background image")
.optional(),
visibility: z
.object({})
.catchall(z.any())
.describe("Conditions that determine template visibility")
.optional(),
settings: z
.object({})
.catchall(z.any())
.describe("Template-specific settings")
.optional(),
searchTags: z
.array(z.string().max(50))
.max(20)
.describe("Tags used for template search functionality")
.optional(),
categoryTags: z
.array(z.string().max(30))
.max(10)
.describe("Category classification tags")
.optional(),
guildId: z.string().nullable().optional(),
groupId: z.string().nullable().optional(),
permissionsAncestor: z
.boolean()
.describe("Whether the role is an ancestor role")
.optional(),
permissions: z
.object({
read: z
.string()
.regex(
new RegExp(
"^[0-9a-f]{8}-[0-9a-f]{4}-[45][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
),
)
.describe("The reward ID that controls this permission action")
.optional(),
update: z
.string()
.regex(
new RegExp(
"^[0-9a-f]{8}-[0-9a-f]{4}-[45][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
),
)
.describe("The reward ID that controls this permission action")
.optional(),
delete: z
.string()
.regex(
new RegExp(
"^[0-9a-f]{8}-[0-9a-f]{4}-[45][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
),
)
.describe("The reward ID that controls this permission action")
.optional(),
})
.optional(),
memberCount: z
.number()
.int()
.gte(0)
.describe("The number of members assigned to this role"),
rewards: z
.array(
z.object({
rewardId: z
.string()
.regex(
new RegExp(
"^[0-9a-f]{8}-[0-9a-f]{4}-[45][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
),
)
.describe("TODO")
.optional(),
}),
)
.optional(),
topLevelAccessGroupId: z
.string()
.describe("The ID of the top-level access group"),
accessGroups: z.array(
z.object({
accessGroupId: z
.string()
.regex(
new RegExp(
"^[0-9a-f]{8}-[0-9a-f]{4}-[45][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
),
)
.describe("Access group ID")
.optional(),
gate: z
.enum(["AND", "OR", "ANY_OF"])
.describe("Access group gate")
.optional(),
rules: z
.array(
z.object({
accessRuleId: z
.string()
.regex(
new RegExp(
"^[0-9a-f]{8}-[0-9a-f]{4}-[45][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
),
)
.describe("Access rule ID")
.optional(),
integrationId: z.string().describe("Integration ID").optional(),
params: z
.record(z.any())
.describe("Access rule parameters")
.optional(),
}),
)
.optional(),
}),
),
})
.strict()
.describe(
"A role represents a grouping mechanism that can be assigned to members",
);