import {z} from 'zod' export type SnowflakeType = unknown | number; export type CreateApiUsersMeGuildVisitsGuildIdJoinArgs = {guild_id: SnowflakeType}; export type CreateApiUsersMeGuildVisitsGuildIdJoinOptions = {baseUrl?: string | undefined, sessionToken?: string | undefined, fetch?: typeof fetch | undefined}; export const snowflakeStringType = z.string(); export const int32Type = z.number().int().gte(0).lte(2147483647); export const systemChannelFlags = z.number().int().gte(0).lte(2147483647); export const guildFeatureSchema = z.string(); export const customBadgeIdListResponse = z.array(snowflakeStringType); export const guildVerificationLevel = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]); export const guildMFALevel = z.union([z.literal(0), z.literal(1)]); export const nSFWLevel = z.union([z.literal(0), z.literal(3)]); export const contentWarningLevel = z.union([z.literal(0), z.literal(1)]); export const guildExplicitContentFilter = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const defaultMessageNotifications = z.union([z.literal(0), z.literal(1)]); export const guildOperations = z.number().int().gte(0).lte(2147483647); export const permissions = z.string(); export const guildRoleResponse = z.object({id: snowflakeStringType, name: z.string(), color: int32Type, position: int32Type, hoist_position: int32Type.nullable().optional(), permissions: permissions, hoist: z.boolean(), mentionable: z.boolean(), icon: z.string().nullable(), unicode_emoji: z.string().nullable()}); export const guildEmojiResponse = z.object({id: snowflakeStringType, name: z.string(), animated: z.boolean(), nsfw: z.boolean()}); export const guildStickerResponse = z.object({id: snowflakeStringType, name: z.string(), description: z.string(), tags: z.array(z.string()), animated: z.boolean(), nsfw: z.boolean()}); export const channelType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(10), z.literal(11), z.literal(12), z.literal(15), z.literal(16), z.literal(998), z.literal(999)]); export const channelOverwriteType = z.union([z.literal(0), z.literal(1)]); export const channelOverwriteResponse = z.object({id: snowflakeStringType, type: channelOverwriteType, allow: permissions, deny: permissions}); export const publicUserFlags = z.number().int().gte(0).lte(2147483647); export const mentionReplyPreferences = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const userPartialResponse = z.object({id: snowflakeStringType, username: z.string(), discriminator: z.string(), global_name: z.string().nullable(), avatar: z.string().nullable(), avatar_color: int32Type.nullable(), bot: z.boolean().optional(), system: z.boolean().optional(), flags: publicUserFlags, mention_flags: mentionReplyPreferences.optional()}); export const threadMetadataResponse = z.object({archived: z.boolean(), auto_archive_duration: int32Type, archive_timestamp: z.string(), locked: z.boolean(), invitable: z.boolean().optional(), create_timestamp: z.string()}); export const guildMemberProfileFlags = z.number().int().gte(0).lte(2147483647); export const guildMemberResponse = z.object({user: userPartialResponse, nick: z.string().nullable().optional(), avatar: z.string().nullable().optional(), banner: z.string().nullable().optional(), accent_color: int32Type.nullable().optional(), roles: z.array(z.string()), joined_at: z.string(), mute: z.boolean(), deaf: z.boolean(), communication_disabled_until: z.string().nullable().optional(), profile_flags: guildMemberProfileFlags.nullable().optional(), mention_flags: mentionReplyPreferences.nullable().optional()}); export const threadMemberResponse = z.object({id: snowflakeStringType.optional(), user_id: snowflakeStringType.optional(), join_timestamp: z.string(), flags: int32Type, muted: z.boolean().optional(), mute_config: z.object({end_time: z.string().nullable(), selected_time_window: int32Type}).nullable().optional(), member: guildMemberResponse.optional()}); export const forumTagResponse = z.object({id: snowflakeStringType, name: z.string().max(50), moderated: z.boolean(), emoji_id: snowflakeStringType.nullable(), emoji_name: z.string().nullable()}); export const defaultReactionEmojiResponse = z.object({emoji_id: snowflakeStringType.nullable(), emoji_name: z.string().nullable()}); export const channelResponse = z.object({id: snowflakeStringType, guild_id: snowflakeStringType.optional(), name: z.string().nullable().optional(), topic: z.string().nullable().optional(), url: z.string().nullable().optional(), icon: z.string().nullable().optional(), owner_id: snowflakeStringType.nullable().optional(), type: channelType, position: int32Type.optional(), parent_id: snowflakeStringType.nullable().optional(), bitrate: int32Type.nullable().optional(), user_limit: int32Type.nullable().optional(), voice_connection_limit: int32Type.nullable().optional(), rtc_region: z.string().nullable().optional(), rtc_p2p: z.boolean().optional(), last_message_id: snowflakeStringType.nullable().optional(), last_pin_timestamp: z.string().nullable().optional(), permission_overwrites: z.array(channelOverwriteResponse).optional(), recipients: z.array(userPartialResponse).optional(), nsfw: z.boolean().optional(), nsfw_override: z.boolean().nullable().optional(), content_warning_level: contentWarningLevel.optional(), content_warning_text: z.string().max(200).nullable().optional(), rate_limit_per_user: int32Type.optional(), nicks: z.record(z.string(), z.string().min(1).max(32)).optional(), flags: int32Type.optional(), thread_metadata: threadMetadataResponse.optional(), applied_tags: z.array(snowflakeStringType).optional(), message_count: int32Type.optional(), total_message_sent: int32Type.optional(), member_count: int32Type.optional(), member_ids_preview: z.array(snowflakeStringType).optional(), member: threadMemberResponse.optional(), default_auto_archive_duration: int32Type.nullable().optional(), default_thread_rate_limit_per_user: int32Type.optional(), available_tags: z.array(forumTagResponse).optional(), default_reaction_emoji: defaultReactionEmojiResponse.nullable().optional(), default_sort_order: int32Type.nullable().optional(), default_forum_layout: int32Type.optional(), default_tag_setting: z.enum(["match_some", "match_all"]).optional()}); export const guildResponse = z.object({id: snowflakeStringType, name: z.string(), icon: z.string().nullable().optional(), banner: z.string().nullable().optional(), banner_width: int32Type.nullable().optional(), banner_height: int32Type.nullable().optional(), splash: z.string().nullable().optional(), splash_width: int32Type.nullable().optional(), splash_height: int32Type.nullable().optional(), splash_card_alignment: z.union([z.literal(0), z.literal(1), z.literal(2)]), embed_splash: z.string().nullable().optional(), embed_splash_width: int32Type.nullable().optional(), embed_splash_height: int32Type.nullable().optional(), vanity_url_code: z.string().nullable().optional(), owner_id: snowflakeStringType, system_channel_id: snowflakeStringType.nullable().optional(), system_channel_flags: systemChannelFlags, rules_channel_id: snowflakeStringType.nullable().optional(), afk_channel_id: snowflakeStringType.nullable().optional(), afk_timeout: int32Type, features: z.array(guildFeatureSchema), badge_ids: customBadgeIdListResponse, verification_level: guildVerificationLevel, mfa_level: guildMFALevel, nsfw_level: nSFWLevel, nsfw: z.boolean(), content_warning_level: contentWarningLevel, content_warning_text: z.string().nullable().optional(), explicit_content_filter: guildExplicitContentFilter, default_message_notifications: defaultMessageNotifications, disabled_operations: guildOperations, message_history_cutoff: z.string().nullable().optional(), permissions: permissions.optional(), roles: z.array(guildRoleResponse).optional(), emojis: z.array(guildEmojiResponse).optional(), stickers: z.array(guildStickerResponse).optional(), channels: z.array(channelResponse).optional(), member_count: int32Type.optional(), online_count: int32Type.optional(), approximate_member_count: int32Type.optional(), approximate_presence_count: int32Type.optional(), threads_active: z.literal(true).optional(), visiting: z.literal(true).optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Join a visited guild * * POST /users/@me/guild-visits/{guild_id}/join */ export const createApiUsersMeGuildVisitsGuildIdJoin = async (args: CreateApiUsersMeGuildVisitsGuildIdJoinArgs, options?: CreateApiUsersMeGuildVisitsGuildIdJoinOptions) => { const {baseUrl = "https://web.fluxer.app/api/v1", fetch: fetchFn = fetch, sessionToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (sessionToken !== undefined) headers.set("Authorization", sessionToken) const url = `${baseUrl.replace(/\/+$/, '')}/users/@me/guild-visits/${encodeURIComponent(String(args.guild_id))}/join${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(guildResponse, await res.json()) };