Add consent-gated media exchange library

This commit is contained in:
jjbrunton committed 2026-08-09 19:24:38 +01:00
1 parent b8e4a1bb88
commit bf474dfe10
42 files changed
+2533 -9

No files matched your search

+32
View File
@@ -32,3 +32,35 @@ export const MediaSyncTriggerResponseSchema = z.union([
export type MediaItem = z.infer<typeof MediaItemSchema>;
export type MediaSyncStatus = z.infer<typeof MediaSyncStatusSchema>;
export const MediaLibraryTagSchema = z.enum(['penis', 'chest', 'selfie', 'topless', 'feet']);
export const MediaLibraryAssetSchema = z.strictObject({
id: z.string().uuid(),
tags: z.array(MediaLibraryTagSchema),
safety: z.enum(['sfw', 'nsfw', 'unknown']),
classificationStatus: z.enum(['ready', 'failed']),
description: z.string().nullable(),
confidence: z.number().min(0).max(1).nullable(),
fileName: z.string(),
mimeType: z.enum(['image/jpeg', 'image/png', 'image/webp']),
sizeBytes: z.number().int().nonnegative(),
width: z.number().int().positive(),
height: z.number().int().positive(),
enabled: z.boolean(),
consentConfirmedAt: z.number(),
createdAt: z.number(),
updatedAt: z.number(),
sendCount: z.number().int().nonnegative(),
lastSentAt: z.number().nullable(),
urlPath: z.string(),
});
export const MediaLibraryResponseSchema = z.array(MediaLibraryAssetSchema);
export const MediaLibraryUpdateSchema = z.strictObject({
tags: z.array(MediaLibraryTagSchema).min(1),
safety: z.enum(['sfw', 'nsfw']),
enabled: z.boolean(),
});
export type MediaLibraryTag = z.infer<typeof MediaLibraryTagSchema>;
export type MediaLibraryAsset = z.infer<typeof MediaLibraryAssetSchema>;
export type MediaLibraryUpdate = z.infer<typeof MediaLibraryUpdateSchema>;