@akomalabs/kemono
Version:
A production-grade TypeScript API wrapper for the Kemono/Coomer platforms
108 lines • 2.57 kB
JavaScript
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