git LFS server implemented on Cloudflare Workers + R2
cloudflare git lfs workers r2
at main 58 lines 1.1 kB view raw
1export interface LfsBatchRequest { 2 operation: "download" | "upload"; 3 transfers?: string[]; 4 objects: LfsObject[]; 5} 6 7export interface LfsObject { 8 oid: string; 9 size: number; 10} 11 12export interface LfsBatchResponse { 13 transfer?: string; 14 objects: LfsObjectResult[]; 15} 16 17export interface LfsObjectResult { 18 oid: string; 19 size: number; 20 authenticated?: boolean; 21 actions?: LfsActions; 22 error?: LfsObjectError; 23} 24 25export interface LfsActions { 26 download?: LfsAction; 27 upload?: LfsAction; 28 verify?: LfsAction; 29} 30 31export interface LfsAction { 32 href: string; 33 header?: Record<string, string>; 34 expires_in?: number; 35} 36 37export interface LfsObjectError { 38 code: number; 39 message: string; 40} 41 42export interface LfsVerifyRequest { 43 oid: string; 44 size: number; 45} 46 47const LFS_CONTENT_TYPE = "application/vnd.git-lfs+json"; 48 49export function lfsJson(body: unknown, status = 200): Response { 50 return new Response(JSON.stringify(body), { 51 status, 52 headers: { "Content-Type": LFS_CONTENT_TYPE }, 53 }); 54} 55 56export function lfsError(code: number, message: string): Response { 57 return lfsJson({ message }, code); 58}