UNPKG

@akomalabs/kemono

Version:

A production-grade TypeScript API wrapper for the Kemono/Coomer platforms

108 lines 2.57 kB
import { z } from 'zod'; /** * Base URL schema */ export const KemonoBaseUrlSchema = z.enum(['https://kemono.su/api/v1', 'https://coomer.su/api/v1']); /** * Service schema */ export const KemonoServiceSchema = z.enum([ 'fanbox', 'patreon', 'gumroad', 'subscribestar', 'dlsite', 'fantia', 'onlyfans', 'fansly', ]); /** * Redis configuration schema */ export const RedisConfigSchema = z.object({ host: z.string(), port: z.number().int().positive(), password: z.string().optional(), }); /** * Cache configuration schema */ export const CacheConfigSchema = z.object({ enabled: z.boolean(), ttl: z.number().int().positive().optional(), redis: RedisConfigSchema.optional(), }); /** * Rate limit configuration schema */ export const RateLimitConfigSchema = z.object({ maxRequests: z.number().int().positive(), windowMs: z.number().int().positive(), }); /** * Logger configuration schema */ export const LoggerConfigSchema = z.object({ enabled: z.boolean(), level: z.enum(['error', 'warn', 'info', 'debug']).optional(), }); /** * Main configuration schema */ export const KemonoConfigSchema = z.object({ baseUrl: KemonoBaseUrlSchema.optional(), sessionKey: z.string().optional(), cache: CacheConfigSchema.optional(), rateLimit: RateLimitConfigSchema.optional(), logging: LoggerConfigSchema.optional(), }); /** * File schema */ export const FileSchema = z.object({ name: z.string(), path: z.string(), hash: z.string().optional(), size: z.number().optional(), }); /** * Attachment schema (extends File) */ export const AttachmentSchema = FileSchema.extend({ mimeType: z.string().optional(), }); /** * Post schema */ export const PostSchema = z.object({ id: z.string(), user: z.string(), service: KemonoServiceSchema, title: z.string(), content: z.string(), published: z.string(), edited: z.string().optional(), file: FileSchema.optional(), attachments: z.array(AttachmentSchema), embed: z.record(z.unknown()).optional(), }); /** * Creator schema */ export const CreatorSchema = z.object({ id: z.string(), name: z.string(), service: KemonoServiceSchema, indexed: z.string(), updated: z.string(), favorited: z.boolean().optional(), }); /** * Search parameters schema */ export const SearchParamsSchema = z.object({ q: z.string().optional(), o: z.number().int().nonnegative().optional(), limit: z.number().int().positive().optional(), }); //# sourceMappingURL=index.js.map