@guildxyz/types
Version:
Types related to the Guild.xyz API
69 lines (61 loc) • 1.93 kB
text/typescript
import { z } from "zod";
import { AnyAddressSchema, DateLike, PositiveInteger } from "./common";
import { PlatformName, walletTypes } from "../consts";
import { ProfileSchema } from "./profile";
export const UserAddressSchema = z.object({
address: AnyAddressSchema,
userId: PositiveInteger,
identityId: PositiveInteger,
isPrimary: z.boolean(),
isDelegated: z.boolean(),
createdAt: DateLike,
walletType: z.enum(walletTypes),
});
export const PlatformUserDataSchema = z.object({
acessToken: z.string(),
scope: z.string(),
expiresIn: z.number(),
invalidToken: z.boolean(),
refreshToken: z.string(),
avatar: z.string(),
username: z.string(),
readonly: z.boolean(),
});
export const PlatformAccountDetailsSchema = z.object({
platformId: PositiveInteger,
platformName: z.enum(PlatformName),
platformUserId: z.string(),
platformUserData: PlatformUserDataSchema.partial().optional(),
username: z.string().optional(),
});
export const UserSharedSocialSchema = z.object({
userId: PositiveInteger,
guildId: PositiveInteger,
isShared: z.boolean().optional().nullable(),
});
export const FarcasterProfileSchema = z.object({
fid: PositiveInteger,
username: z.string().optional(),
avatar: z.string().optional(),
createdAt: DateLike,
userId: PositiveInteger,
});
export const PublicUserSchema = z.object({
id: PositiveInteger,
publicKey: z.string().optional(),
captchaVerifiedSince: DateLike,
});
export const UserSchema = PublicUserSchema.extend({
addresses: UserAddressSchema.array(),
platformUsers: PlatformAccountDetailsSchema.array(),
sharedSocials: UserSharedSocialSchema.array(),
isSuperAdmin: z.boolean(),
guildProfile: ProfileSchema.nullable(),
emails: z.object({
emailAddress: z.string().email(),
pending: z.boolean(),
createdAt: DateLike,
}),
farcasterProfiles: FarcasterProfileSchema.array(),
tosAccepted: DateLike.optional(),
});