feat: asset file apis (#25900)

* feat: asset file endpoints

* Update server/src/controllers/asset-file.controller.ts

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

* Update server/src/controllers/asset-file.controller.ts

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
This commit is contained in:
Jason Rasmussen
2026-08-21 13:55:25 +00:00
committed by GitHub
co-authored by Daniel Dietzler
parent 8ae98f2a04
commit caea849fee
18 changed files with 687 additions and 0 deletions
+87
View File
@@ -1005,6 +1005,23 @@ export type ApiKeyUpdateDto = {
/** List of permissions */
permissions?: Permission[];
};
export type AssetFileResponseDto = {
/** Creation date */
createdAt: string;
/** Asset file ID */
id: string;
/** The file was generated from an edit */
isEdited: boolean;
/** The file is a progressively encoded JPEG */
isProgressive: boolean;
/** The file is transparent */
isTransparent: boolean;
/** File path */
path: string;
"type": AssetFileType;
/** Update date */
updatedAt: string;
};
export type AssetBulkDeleteDto = {
/** Force delete even if in use */
force?: boolean;
@@ -4330,6 +4347,66 @@ export function rotateApiKey({ id }: {
method: "POST"
}));
}
/**
* Search asset files
*/
export function searchAssetFiles({ assetId, isEdited, isProgressive, isTransparent, $type }: {
assetId: string;
isEdited?: boolean;
isProgressive?: boolean;
isTransparent?: boolean;
$type?: AssetFileType;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: AssetFileResponseDto[];
}>(`/asset-files${QS.query(QS.explode({
assetId,
isEdited,
isProgressive,
isTransparent,
"type": $type
}))}`, {
...opts
}));
}
/**
* Delete an asset file
*/
export function deleteAssetFile({ id }: {
id: string;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText(`/asset-files/${encodeURIComponent(id)}`, {
...opts,
method: "DELETE"
}));
}
/**
* Retrieve an asset file
*/
export function getAssetFile({ id }: {
id: string;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: AssetFileResponseDto;
}>(`/asset-files/${encodeURIComponent(id)}`, {
...opts
}));
}
/**
* Download an asset file
*/
export function downloadAssetFile({ id }: {
id: string;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchBlob<{
status: 200;
data: Blob;
}>(`/asset-files/${encodeURIComponent(id)}/download`, {
...opts
}));
}
/**
* Delete assets
*/
@@ -7649,6 +7726,9 @@ export enum Permission {
AssetUpload = "asset.upload",
AssetCopy = "asset.copy",
AssetDerive = "asset.derive",
AssetFileRead = "assetFile.read",
AssetFileDelete = "assetFile.delete",
AssetFileDownload = "assetFile.download",
AssetEditGet = "asset.edit.get",
AssetEditCreate = "asset.edit.create",
AssetEditDelete = "asset.edit.delete",
@@ -7794,6 +7874,13 @@ export enum Permission {
AdminSessionRead = "adminSession.read",
AdminAuthUnlinkAll = "adminAuth.unlinkAll"
}
export enum AssetFileType {
Fullsize = "fullsize",
Preview = "preview",
Thumbnail = "thumbnail",
Sidecar = "sidecar",
EncodedVideo = "encoded_video"
}
export enum AssetMediaStatus {
Created = "created",
Duplicate = "duplicate"