KO
베타 번역

@core / media

1.1.0 ▾
인증됨MIT
GitHub

미디어 라이브러리: 서명된 직접 업로드, 실제 파일 형식 확인, EXIF/GPS 제거, 대체 텍스트, 초점, srcset

코드파일 13개컨텍스트약 777토큰검사 통과

.genpmignore 적용 후 주입될 정확한 트리입니다. 고정 대상:

src/lib/media/adapters/http.ts읽기 전용 · 868490c
// Rutas de subida comunes: POST /uploads y POST /uploads/:id/confirm. `authorize` decide quién puede subir.
import { z } from 'zod';
import { confirmUpload, createUpload, MediaError } from '../index.ts';

export type Authorize = (req: Request) => Promise<{ userId: string } | null>;

const Body = z.object({ filename: z.string().min(1).max(200), mime: z.string().max(100), size: z.number().int().positive(), folder: z.string().optional(), alt: z.string().optional() });

const fail = (e: unknown) => {
  if (e instanceof MediaError) return Response.json({ error: e.code, message: e.message }, { status: e.code === 'not_found' ? 404 : 400 });
  if (e instanceof z.ZodError) return Response.json({ error: 'invalid_input' }, { status: 400 });
  throw e;
};

export async function handleCreateUpload(req: Request, authorize: Authorize): Promise<Response> {
  const who = await authorize(req);
  if (!who) return Response.json({ error: 'forbidden' }, { status: 403 });
  try {
    const body = Body.parse(await req.json());
    const { media, upload } = await createUpload({ ...body, uploadedBy: who.userId });
    return Response.json({ id: media.id, upload }, { status: 201 });
  } catch (e) {
    return fail(e);
  }
}

export async function handleConfirmUpload(req: Request, id: string, authorize: Authorize): Promise<Response> {
  if (!(await authorize(req))) return Response.json({ error: 'forbidden' }, { status: 403 });
  try {
    return Response.json(await confirmUpload(id));
  } catch (e) {
    return fail(e);
  }
}

@core/media 신고

패키지를 신고하려면 GitHub로 로그인하세요.