export interface ApiLfsBatchRequest { /// github.com/git-lfs/git-lfs/blob/master/docs/api/batch.md operation: "download" | "upload"; transfers?: string[]; /** * Optional object describing the server ref that the objects belong to. Note: Added in v2.4. * * We use this object for QOL and to fail early for users when they're trying to push to the wrong reference. * But it does nothing for security. */ ref?: { name: string; } | null; objects: { oid: string; /** * Integer byte size of the LFS object. Must be at least zero. */ size: number; }[]; /** * The hash algorithm used to name Git LFS objects. Optional; defaults to sha256 if not specified. * */ hash_algo?: string; } export interface ApiLfsBatchResponse { transfer?: ApiLfsResponseTransfer; objects: ApiLfsResponseObject[]; } export type ApiLfsResponseTransfer = "basic" | "multipart"; export interface ApiLfsCompleteMultipartRequest { oid: string; parts: { etag: string; partNumber: number }[]; } export interface ApiLfsResponseObject { /** * Optional boolean specifying whether the request * for this specific object is authenticated. * If omitted or false, Git LFS will attempt to find credentials for this URL. */ authenticated?: boolean; oid: string; /** * Integer byte size of the LFS object. Must be at least zero. */ size: number; /** * Applicable actions depend on which `operation` is specified in the request. * How these properties are interpreted depends on which transfer adapter * the client will be using. */ actions?: { /** * Download operations MUST specify a download action, * or an object error if the object cannot be downloaded for some reason */ download?: ApiLfsAction; /** * Upload operations can specify an upload and a verify action. * The upload action describes how to upload the object. */ upload?: ApiLfsAction; /** * The LFS client will hit this URL after a successful upload. * Servers can use this for extra verification, if needed. */ verify?: ApiLfsAction; }; /** * If there are problems accessing individual objects, servers should continue * to return a 200 status code, and provide per-object errors */ error?: { code: number; message: string; }; } export interface ApiLfsAction { href: string; /** * Optional hash of String HTTP header key/value pairs to apply to the request */ header?: { [key: string]: string } & { chunk_size?: string }; /** * Whole number of seconds after local client time when transfer will expire. * Preferred over `expires_at` if both are provided. * Maximum of 2147483647, minimum of -2147483647. */ expires_in?: number; /** * String uppercase RFC 3339-formatted timestamp with second precision * for when the given action expires (usually due to a temporary token). */ expires_at?: string; } export interface ApiPreuploadRequest { /** * Optional, otherwise takes the existing content of `.gitattributes` for the revision. * * Provide this parameter if you plan to modify `.gitattributes` yourself at the same * time as uploading LFS files. * * Note that this is not needed if you solely rely on automatic LFS detection from HF: the commit endpoint * will automatically edit the `.gitattributes` file to track the files passed to its `lfsFiles` param. */ gitAttributes?: string; files: Array<{ /** * Path of the LFS file */ path: string; /** * Full size of the LFS file */ size: number; /** * Base64-encoded sample of the first 512 bytes of the file */ sample: string; }>; } export interface ApiPreuploadResponse { files: Array<{ path: string; uploadMode: "lfs" | "regular"; }>; } export interface ApiCommitHeader { summary: string; description?: string; /** * Parent commit. Optional * * - When opening a PR: will use parentCommit as the parent commit * - When committing on a branch: Will make sure that there were no intermediate commits */ parentCommit?: string; } export interface ApiCommitDeletedEntry { path: string; } export interface ApiCommitLfsFile { path: string; oldPath?: string; /** Required if {@link oldPath} is not set */ algo?: "sha256"; /** Required if {@link oldPath} is not set */ oid?: string; size?: number; } export interface ApiCommitFile { /** Required if {@link oldPath} is not set */ content?: string; path: string; oldPath?: string; encoding?: "utf-8" | "base64"; } export type ApiCommitOperation = | { key: "file"; value: ApiCommitFile; } | { key: "lfsFile"; value: ApiCommitLfsFile; } | { key: "deletedFile"; value: ApiCommitDeletedEntry; }; export interface ApiCommitData { id: string; title: string; message: string; authors: Array<{ user: string; avatar: string }>; date: string; formatted?: string; }