@guildxyz/bev3
Version:
Schemas and types related to the Guild.xyz v3 API
455 lines (450 loc) • 10.8 kB
text/typescript
//import type {
// AccessCheckParams,
// AccessCheckResult,
// AccessFlowResult,
// AccessJobContent,
// AccessLogicResult,
// AccessPreparationResult,
// AccessResultResult,
// BaseJobParams,
// CreateAccessJobOptions,
// ManagedJobFields,
// StatusUpdateJobContent,
//} from "@guildxyz/queues";
import { z } from "zod";
import * as consts from "./consts";
//import { RequirementSchema } from "./schemas";
//import requirements from "./schemas/requirements";
//import { RequirementCustomizationSchema } from "./schemas/requirements/common";
//export type {
// DynamicAmount,
// DynamicAmountOperations,
// DynamicAmountToCreate,
// InputSource,
//} from "./schemas/dynamicReward";
type SchemasImport = typeof import("./schemas");
type SchemaNames = keyof SchemasImport;
type TypeNames = SchemaNames extends `${infer TypeName}Schema`
? TypeName
: SchemaNames;
// Contains every type for the zod schemas exported from "./schemas"
export type Schemas = {
[Key in TypeNames]: z.input<SchemasImport[`${Key}Schema`]>;
};
//const reqTypes = z
// .object({ data: RequirementCustomizationSchema.optional() })
// .and(z.discriminatedUnion("type", requirements));
//
//export type RequirementUpdatePayload = Omit<
// Schemas["RequirementUpdatePayload"],
// "data"
//> & { data?: z.input<typeof reqTypes>["data"] | Record<string, any> };
//
//export type GetGuildMembersResponse = {
// roleId: number;
// members: string[];
//}[];
//
//export type GetGuildMemberAccessResponse = {
// roleId: number;
// access: boolean;
//}[];
//
//export type Chain = (typeof consts.Chain)[number];
//
//export type Visibility = (typeof consts.Visibility)[number];
//
//export type Logic = (typeof consts.Logic)[number];
//
//export type SocialLinks = Partial<
// Record<(typeof consts.SocialLinks)[number], string>
//>;
//
//export type Requirement = z.output<typeof RequirementSchema> & {
// visibility: Visibility;
// id: number;
//};
//
//export type RoleReward = {
// id: number;
// guildPlatformId: number;
// platformRoleId: string;
// visibility: Visibility;
// platformRoleData?: Record<string, string>;
// createdAt: Date;
// updatedAt: Date;
//};
//
//export type Role = {
// id: number;
// name: string;
// description: string;
// imageUrl: string;
// logic: Logic;
// memberCount: number;
// visibility: Visibility;
// hideFromEyes: boolean;
// position: number;
// anyOfNum: number;
// createdAt: Date;
// updatedAt: Date;
//};
//
//export type Guild = {
// id: number;
// name: string;
// urlName: string;
// createdAt: Date;
// updatedAt: Date;
// description: string;
// imageUrl: string;
// showMembers: boolean;
// hideFromExplorer: boolean;
// socialLinks: SocialLinks;
// onboardingComplete: boolean;
// memberCount: number;
// theme: {
// mode: "DARK" | "LIGHT";
// color: string;
// backgroundImage: string;
// backgroundCss: string;
// updatedAt: Date;
// };
//};
//
//export type PlatformGuildData = {
// // Discord
// inviteChannel?: string;
// invite?: string;
// joinButton?: boolean;
// needCaptcha?: boolean;
// // Google
// role?: "reader" | "commenter" | "writer";
// mimeType?: string;
// iconLink?: string;
// // Github
// platformUserId?: string;
// // Contract call
// chain?: Chain;
// contractAddress?: string;
// function?: string;
// argsToSign?: string[];
// name?: string;
// symbol?: string;
// imageUrl?: string;
// description?: string;
// // Unique text
// texts?: string[];
// // Text
// text?: string;
// // Poap
// eventId?: number;
// fancyId?: string;
// // Form
// formId?: number;
// // Gather Town
// gatherApiKey?: string;
// gatherSpaceId?: string;
// gatherRole?: string;
// gatherAffiliation?: string;
// // ERC20
// poolId?: number;
// tokenAddress?: string;
//};
//
//export type PlatformInfo = {
// name: string;
// invite: string;
//};
//
//export type GuildReward = {
// id: number;
// platformId: number;
// platformGuildId: string;
// platformGuildData: PlatformGuildData;
// platformGuildName?: string;
// invite?: string;
//};
//
//export type PinAction = (typeof consts.GuildPinAction)[number];
//
//export type IssueGuildPinResponse = {
// userAddress: string;
// guildAction: number;
// userId: number;
// guildId: number;
// guildName: string;
// createdAt: Date;
// timestamp: number;
// cid: string;
// signature: string;
//};
//
//export type GuildAdmin = {
// guildId: number;
// userId: number;
// isOwner: boolean;
// createdAt: Date;
//};
//
//export type GuildContactType = (typeof consts.ContactType)[number];
//
//export type GuildContact = {
// id: number;
// type: GuildContactType;
// guildId: number;
// contact: string;
//};
//
//export type GuildCreationResponse = Guild & {
// contacts: GuildContact[];
// admins: Array<{ id: number; address: string; isOwner: boolean }>;
// featureFlags: string[];
// roles: Array<
// Role & {
// rolePlatforms: RoleReward[];
// requirements: Requirement[];
// }
// >;
// guildPlatforms: GuildReward[];
//};
//
//export type RoleCreationResponse = Role & {
// requirements: Requirement[];
// rolePlatforms?: RoleReward[];
// createdGuildPlatforms?: GuildReward[];
//};
//
//export type AvailableTextsResponse = {
// count: number;
//};
//
//export type RolePlatformClaimResponse = { uniqueValue: string };
//
//export type User = {
// id: number;
// createdAt: Date;
// captchaVerifiedSince?: Date;
//};
//
//export type UserAddress = {
// address: string;
// userId: number;
// identityId?: number;
// isPrimary: boolean;
// isDelegated: boolean;
// createdAt: Date;
// // for now we have to keep it this way, we can't access the type from prisma
// walletType: "EVM" | "FUEL";
//};
//
//export type UserSharedSocial = {
// userId: number;
// guildId: number;
// isShared?: boolean | null;
//};
//
//export type PlatformUser = {
// userId: number;
// identityId: number;
// platformId: number;
// platformUserId: string;
// platformUserData: any;
// createdAt: Date;
//};
//
//export type UserProfile = User & {
// addresses: UserAddress[];
// publicKey: string;
// isSuperAdmin?: boolean;
// sharedSocials: UserSharedSocial[];
// platformUsers: Array<PlatformUser & { platformName: string }>;
// guildProfile: Schemas["Profile"];
//};
//
//export type PublicUserProfile = {
// id: number;
// publicKey: string;
// captchaVerifiedSince?: Date;
//};
//
//export type PlatformName = (typeof consts.PlatformName)[number];
//
//export type MembershipResult = {
// guildId: number;
// roleIds: number[];
// isAdmin: boolean;
// isOwner: boolean;
// joinedAt: Date;
//};
//
//type VisibilityFilterable<
// IdField extends string = "id",
// VisibilityField extends string = "visibility",
//> = {
// [K in VisibilityField]: Visibility;
//} & {
// [K in IdField]: number;
//};
//
//type GuildPrepareInput = {
// id: number;
// admins: Array<{ id: number }>;
// guildPlatforms: {
// id: number;
// }[];
// roles: (VisibilityFilterable & {
// requirements: VisibilityFilterable[];
// rolePlatforms: (VisibilityFilterable & { guildPlatformId: number })[];
// })[];
//};
//
//type FilteredGuild<G extends GuildPrepareInput> = Omit<G, "roles"> & {
// hiddenRoles: boolean;
// roles: (G["roles"][number] & {
// hiddenRequirements: boolean;
// hiddenRewards: boolean;
// })[];
//};
//
//export type GuildByPlatformResponse = FilteredGuild<GuildCreationResponse>;
//
//type PlatformRoleResponse = {
// roleName: string;
// platformRoleId: string;
// platformRoleData: any;
//};
//
//export type UserGuildAccessesByPlatformResponse = {
// guildName: string;
// platformGuildId: string;
// roles: PlatformRoleResponse[];
//};
//
//export type JoinJob = AccessJobContent;
//
//// didn't work with Omit or Without, so we save time and copy-paste the AccessJobContent with the modifications
//export type AccessCheckJob = CreateAccessJobOptions &
// BaseJobParams &
// ManagedJobFields &
// AccessFlowResult &
// Omit<AccessPreparationResult, "nextQueue"> &
// Omit<AccessLogicResult, "nextQueue"> &
// Omit<AccessResultResult, "nextQueue"> & {
// "children:access-check:jobs": (AccessCheckParams &
// AccessCheckResult &
// BaseJobParams &
// ManagedJobFields)[];
// };
//
//export type StatusUpdateJob = StatusUpdateJobContent;
//
//export type LeaderboardItem = {
// userId: number;
// roleIds: number[];
// totalPoints: number;
// oldestRoleDate: Date;
// address?: string;
// rank?: number;
// secondaryAddresses?: string[];
//};
//
//export type Leaderboard = LeaderboardItem[];
//
//export type GetLeaderboardResponse = {
// leaderboard: Leaderboard;
// aroundUser?: Leaderboard;
// isRevalidating: boolean;
//};
//
//export type UserPointsItem = {
// guildId: number;
// guildPlatformId: number;
// totalPoints: number;
// rank: number;
// roleIds: number[];
//};
//
//export type UserPointsResponse = UserPointsItem[];
//
//export type SyncCycle = {
// id: number;
// status: "CREATED" | "STARTED" | "PAUSED" | "FINISHED";
// createdAt: Date;
// updatedAt: Date;
// startedAt: Date | null;
// finishedAt: Date | null;
//};
//
//export type SyncJob = {
// id: number;
// cycleId: number;
// status: "CREATED" | "STARTED" | "FINISHED" | "SKIPPED";
// position: number | null;
// priorityInfo: {
// vip: boolean;
// syncable: boolean;
// guildMemberCount: number;
// requirementTypes: string[];
// notSyncableReason: string;
// };
// roleId: number;
// roleName: string;
// guildId: number;
// guildName: string;
// guildUrlName: string;
// jobIds: string[];
// result: any;
// createdAt: Date;
// updatedAt: Date;
// startedAt: Date | null;
// finishedAt: Date | null;
//};
//
//export type SyncStatus = "ready" | "running" | "stopping" | "stopped";
//export type PeriodicSyncSummary = {
// syncStatus: SyncStatus;
// syncQueueUpdaterStatus: SyncStatus;
// syncerErrorMsg?: string;
// jobs?: SyncJob[];
//};
//
//// Types of gateable entities
//
//export type BaseGateable = {
// isGuilded: boolean;
// guildId?: number;
//};
//
//export type DiscordGateable = BaseGateable & {
// img: string;
// name: string;
// owner: boolean;
// id: string;
//};
//
//export type GitHubGateable = BaseGateable & {
// avatarUrl: string;
// description?: string;
// platformGuildId: string;
// repositoryName: string;
// url: string;
//};
//
//export type GoogleGateable = BaseGateable & {
// name: string;
// mimeType: string;
// webViewLink: string;
// iconLink: string;
// platformGuildId: string;
//};
//
//export type Gateables = DiscordGateable[] | GitHubGateable[] | GoogleGateable[];
//
//export type FarcasterProfile = {
// fid: number;
// username?: string;
// avatar?: string;
// createdAt: Date;
// userId: number;
//};