Merge branch 'main' into refactor/nonnegative-rating

This commit is contained in:
Mees Frensel
2026-04-29 16:14:20 +02:00
851 changed files with 39426 additions and 10740 deletions
+178 -94
View File
@@ -7359,6 +7359,38 @@
"x-immich-state": "Stable"
}
},
"/oauth/backchannel-logout": {
"post": {
"description": "Logout the OAuth account and invalidate the session specified by the sid claim or all sessions if the sid claim is not present.",
"operationId": "logoutOAuth",
"parameters": [],
"requestBody": {
"content": {
"application/x-www-form-urlencoded": {
"schema": {
"$ref": "#/components/schemas/OAuthBackchannelLogoutDto"
}
}
},
"required": true
},
"responses": {
"200": {
"description": ""
}
},
"summary": "Backchannel OAuth logout",
"tags": [
"Authentication"
],
"x-immich-history": [
{
"version": "v2",
"state": "Added"
}
]
}
},
"/oauth/callback": {
"post": {
"description": "Complete the OAuth authorization process by exchanging the authorization code for a session token.",
@@ -7932,8 +7964,9 @@
"description": "Page number for pagination",
"schema": {
"minimum": 1,
"maximum": 9007199254740991,
"default": 1,
"type": "number"
"type": "integer"
}
},
{
@@ -7945,7 +7978,7 @@
"minimum": 1,
"maximum": 1000,
"default": 500,
"type": "number"
"type": "integer"
}
},
{
@@ -9346,7 +9379,7 @@
"x-immich-state": "Stable",
"schema": {
"type": "integer",
"minimum": 1,
"minimum": 0,
"maximum": 5,
"nullable": true
}
@@ -9359,7 +9392,7 @@
"schema": {
"minimum": 1,
"maximum": 1000,
"type": "number"
"type": "integer"
}
},
{
@@ -10555,44 +10588,6 @@
"x-immich-state": "Stable"
}
},
"/server/theme": {
"get": {
"description": "Retrieve the custom CSS, if existent.",
"operationId": "getTheme",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServerThemeDto"
}
}
},
"description": ""
}
},
"summary": "Get theme",
"tags": [
"Server"
],
"x-immich-history": [
{
"version": "v1",
"state": "Added"
},
{
"version": "v1",
"state": "Beta"
},
{
"version": "v2",
"state": "Stable"
}
],
"x-immich-state": "Stable"
}
},
"/server/version": {
"get": {
"description": "Retrieve the current server version in semantic versioning (semver) format.",
@@ -15290,9 +15285,11 @@
"type": "string"
},
"albumUsers": {
"description": "First entry is always the album owner. Second entry is the auth user, if it differs from the owner. The rest are ordered alphabetically.",
"items": {
"$ref": "#/components/schemas/AlbumUserResponseDto"
},
"minItems": 1,
"type": "array"
},
"assetCount": {
@@ -15341,13 +15338,6 @@
"order": {
"$ref": "#/components/schemas/AssetOrder"
},
"owner": {
"$ref": "#/components/schemas/UserResponseDto"
},
"ownerId": {
"description": "Owner user ID",
"type": "string"
},
"shared": {
"description": "Is shared album",
"type": "boolean"
@@ -15373,8 +15363,6 @@
"hasSharedLink",
"id",
"isActivityEnabled",
"owner",
"ownerId",
"shared",
"updatedAt"
],
@@ -15464,6 +15452,7 @@
"description": "Album user role",
"enum": [
"editor",
"owner",
"viewer"
],
"type": "string"
@@ -15653,7 +15642,9 @@
},
"dateTimeRelative": {
"description": "Relative time offset in seconds",
"type": "number"
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"description": {
"description": "Asset description",
@@ -16364,7 +16355,6 @@
"description": "Upload status",
"enum": [
"created",
"replaced",
"duplicate"
],
"type": "string"
@@ -16673,9 +16663,10 @@
},
"height": {
"description": "Asset height",
"maximum": 9007199254740991,
"minimum": 0,
"nullable": true,
"type": "number"
"type": "integer"
},
"id": {
"description": "Asset ID",
@@ -16818,9 +16809,10 @@
},
"width": {
"description": "Asset width",
"maximum": 9007199254740991,
"minimum": 0,
"nullable": true,
"type": "number"
"type": "integer"
}
},
"required": [
@@ -17237,23 +17229,27 @@
"properties": {
"height": {
"description": "Height of the crop",
"maximum": 9007199254740991,
"minimum": 1,
"type": "number"
"type": "integer"
},
"width": {
"description": "Width of the crop",
"maximum": 9007199254740991,
"minimum": 1,
"type": "number"
"type": "integer"
},
"x": {
"description": "Top-Left X coordinate of crop",
"maximum": 9007199254740991,
"minimum": 0,
"type": "number"
"type": "integer"
},
"y": {
"description": "Top-Left Y coordinate of crop",
"maximum": 9007199254740991,
"minimum": 0,
"type": "number"
"type": "integer"
}
},
"required": [
@@ -17277,8 +17273,9 @@
},
"keepLastAmount": {
"description": "Keep last amount",
"maximum": 9007199254740991,
"minimum": 1,
"type": "number"
"type": "integer"
}
},
"required": [
@@ -17311,7 +17308,9 @@
},
"filesize": {
"description": "Backup file size",
"type": "number"
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"timezone": {
"description": "Backup timezone",
@@ -17650,16 +17649,18 @@
"exifImageHeight": {
"default": null,
"description": "Image height in pixels",
"maximum": 9007199254740991,
"minimum": 0,
"nullable": true,
"type": "number"
"type": "integer"
},
"exifImageWidth": {
"default": null,
"description": "Image width in pixels",
"maximum": 9007199254740991,
"minimum": 0,
"nullable": true,
"type": "number"
"type": "integer"
},
"exposureTime": {
"default": null,
@@ -17690,8 +17691,10 @@
"iso": {
"default": null,
"description": "ISO sensitivity",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"nullable": true,
"type": "number"
"type": "integer"
},
"latitude": {
"default": null,
@@ -18175,10 +18178,14 @@
"type": "boolean"
},
"interval": {
"type": "number"
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"timeout": {
"type": "number"
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
@@ -18228,7 +18235,9 @@
"properties": {
"files": {
"description": "Number of files in the folder",
"type": "number"
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"folder": {
"$ref": "#/components/schemas/StorageFolder"
@@ -18271,7 +18280,9 @@
"type": "string"
},
"progress": {
"type": "number"
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"task": {
"type": "string"
@@ -18748,8 +18759,9 @@
},
"page": {
"description": "Page number",
"maximum": 9007199254740991,
"minimum": 1,
"type": "number"
"type": "integer"
},
"personIds": {
"description": "Filter by person IDs",
@@ -18767,7 +18779,7 @@
"rating": {
"description": "Filter by rating [1-5], or null for unrated",
"maximum": 5,
"minimum": 1,
"minimum": 0,
"nullable": true,
"type": "integer",
"x-immich-history": [
@@ -18796,7 +18808,7 @@
"description": "Number of results to return",
"maximum": 1000,
"minimum": 1,
"type": "number"
"type": "integer"
},
"state": {
"description": "Filter by state/province name",
@@ -19086,6 +19098,18 @@
],
"type": "object"
},
"OAuthBackchannelLogoutDto": {
"properties": {
"logout_token": {
"description": "OAuth logout token",
"type": "string"
}
},
"required": [
"logout_token"
],
"type": "object"
},
"OAuthCallbackDto": {
"properties": {
"codeVerifier": {
@@ -20613,7 +20637,7 @@
"rating": {
"description": "Filter by rating [1-5], or null for unrated",
"maximum": 5,
"minimum": 1,
"minimum": 0,
"nullable": true,
"type": "integer",
"x-immich-history": [
@@ -20642,7 +20666,7 @@
"description": "Number of results to return",
"maximum": 1000,
"minimum": 1,
"type": "number"
"type": "integer"
},
"state": {
"description": "Filter by state/province name",
@@ -21395,18 +21419,6 @@
],
"type": "object"
},
"ServerThemeDto": {
"properties": {
"customCss": {
"description": "Custom CSS for theming",
"type": "string"
}
},
"required": [
"customCss"
],
"type": "object"
},
"ServerVersionHistoryResponseDto": {
"properties": {
"createdAt": {
@@ -21472,8 +21484,9 @@
},
"duration": {
"description": "Session duration in seconds",
"maximum": 9007199254740991,
"minimum": 1,
"type": "number"
"type": "integer"
}
},
"type": "object"
@@ -21987,8 +22000,9 @@
},
"page": {
"description": "Page number",
"maximum": 9007199254740991,
"minimum": 1,
"type": "number"
"type": "integer"
},
"personIds": {
"description": "Filter by person IDs",
@@ -22012,7 +22026,7 @@
"rating": {
"description": "Filter by rating [1-5], or null for unrated",
"maximum": 5,
"minimum": 1,
"minimum": 0,
"nullable": true,
"type": "integer",
"x-immich-history": [
@@ -22041,7 +22055,7 @@
"description": "Number of results to return",
"maximum": 1000,
"minimum": 1,
"type": "number"
"type": "integer"
},
"state": {
"description": "Filter by state/province name",
@@ -22277,7 +22291,7 @@
"rating": {
"description": "Filter by rating [1-5], or null for unrated",
"maximum": 5,
"minimum": 1,
"minimum": 0,
"nullable": true,
"type": "integer",
"x-immich-history": [
@@ -22570,6 +22584,59 @@
],
"type": "object"
},
"SyncAlbumV2": {
"properties": {
"createdAt": {
"description": "Created at",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"description": {
"description": "Album description",
"type": "string"
},
"id": {
"description": "Album ID",
"type": "string"
},
"isActivityEnabled": {
"description": "Is activity enabled",
"type": "boolean"
},
"name": {
"description": "Album name",
"type": "string"
},
"order": {
"$ref": "#/components/schemas/AssetOrder"
},
"thumbnailAssetId": {
"description": "Thumbnail asset ID",
"nullable": true,
"type": "string"
},
"updatedAt": {
"description": "Updated at",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
}
},
"required": [
"createdAt",
"description",
"id",
"isActivityEnabled",
"name",
"order",
"thumbnailAssetId",
"updatedAt"
],
"type": "object"
},
"SyncAssetDeleteV1": {
"properties": {
"assetId": {
@@ -23255,6 +23322,7 @@
"PartnerStackDeleteV1",
"PartnerStackV1",
"AlbumV1",
"AlbumV2",
"AlbumDeleteV1",
"AlbumUserV1",
"AlbumUserBackfillV1",
@@ -23549,6 +23617,7 @@
"description": "Sync request type",
"enum": [
"AlbumsV1",
"AlbumsV2",
"AlbumUsersV1",
"AlbumToAssetsV1",
"AlbumAssetsV1",
@@ -24361,14 +24430,19 @@
},
"defaultStorageQuota": {
"description": "Default storage quota",
"maximum": 9007199254740991,
"minimum": 0,
"nullable": true,
"type": "number"
"type": "integer"
},
"enabled": {
"description": "Enabled",
"type": "boolean"
},
"endSessionEndpoint": {
"description": "End session endpoint",
"type": "string"
},
"issuerUrl": {
"description": "Issuer URL",
"type": "string"
@@ -24385,6 +24459,10 @@
"description": "Profile signing algorithm",
"type": "string"
},
"prompt": {
"description": "OAuth prompt parameter (e.g. select_account, login, consent)",
"type": "string"
},
"roleClaim": {
"description": "Role claim",
"type": "string"
@@ -24424,10 +24502,12 @@
"clientSecret",
"defaultStorageQuota",
"enabled",
"endSessionEndpoint",
"issuerUrl",
"mobileOverrideEnabled",
"mobileRedirectUri",
"profileSigningAlgorithm",
"prompt",
"roleClaim",
"scope",
"signingAlgorithm",
@@ -24528,7 +24608,7 @@
"description": "SMTP server port",
"maximum": 65535,
"minimum": 0,
"type": "number"
"type": "integer"
},
"secure": {
"description": "Whether to use secure connection (TLS/SSL)",
@@ -25951,7 +26031,9 @@
},
"order": {
"description": "Action order",
"type": "number"
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"pluginActionId": {
"description": "Plugin action ID",
@@ -26050,7 +26132,9 @@
},
"order": {
"description": "Filter order",
"type": "number"
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"pluginFilterId": {
"description": "Plugin filter ID",
+1 -1
View File
@@ -1 +1 @@
24.14.1
24.15.0
+1 -1
View File
@@ -28,6 +28,6 @@
"directory": "open-api/typescript-sdk"
},
"volta": {
"node": "24.14.1"
"node": "24.15.0"
}
}
+41 -19
View File
@@ -457,6 +457,7 @@ export type AlbumResponseDto = {
albumName: string;
/** Thumbnail asset ID */
albumThumbnailAssetId: string | null;
/** First entry is always the album owner. Second entry is the auth user, if it differs from the owner. The rest are ordered alphabetically. */
albumUsers: AlbumUserResponseDto[];
/** Number of assets */
assetCount: number;
@@ -476,9 +477,6 @@ export type AlbumResponseDto = {
/** Last modified asset timestamp */
lastModifiedAssetTimestamp?: string;
order?: AssetOrder;
owner: UserResponseDto;
/** Owner user ID */
ownerId: string;
/** Is shared album */
shared: boolean;
/** Start date (earliest asset) */
@@ -1409,6 +1407,10 @@ export type OAuthAuthorizeResponseDto = {
/** OAuth authorization URL */
url: string;
};
export type OAuthBackchannelLogoutDto = {
/** OAuth logout token */
logout_token: string;
};
export type OAuthCallbackDto = {
/** OAuth code verifier (PKCE) */
codeVerifier?: string;
@@ -2123,10 +2125,6 @@ export type ServerStorageResponseDto = {
/** Used disk space in bytes */
diskUseRaw: number;
};
export type ServerThemeDto = {
/** Custom CSS for theming */
customCss: string;
};
export type ServerVersionResponseDto = {
/** Major version number */
major: number;
@@ -2518,6 +2516,8 @@ export type SystemConfigOAuthDto = {
defaultStorageQuota: number | null;
/** Enabled */
enabled: boolean;
/** End session endpoint */
endSessionEndpoint: string;
/** Issuer URL */
issuerUrl: string;
/** Mobile override enabled */
@@ -2526,6 +2526,8 @@ export type SystemConfigOAuthDto = {
mobileRedirectUri: string;
/** Profile signing algorithm */
profileSigningAlgorithm: string;
/** OAuth prompt parameter (e.g. select_account, login, consent) */
prompt: string;
/** Role claim */
roleClaim: string;
/** Scope */
@@ -2877,6 +2879,23 @@ export type SyncAlbumV1 = {
/** Updated at */
updatedAt: string;
};
export type SyncAlbumV2 = {
/** Created at */
createdAt: string;
/** Album description */
description: string;
/** Album ID */
id: string;
/** Is activity enabled */
isActivityEnabled: boolean;
/** Album name */
name: string;
order: AssetOrder;
/** Thumbnail asset ID */
thumbnailAssetId: string | null;
/** Updated at */
updatedAt: string;
};
export type SyncAssetDeleteV1 = {
/** Asset ID */
assetId: string;
@@ -4913,6 +4932,18 @@ export function startOAuth({ oAuthConfigDto }: {
body: oAuthConfigDto
})));
}
/**
* Backchannel OAuth logout
*/
export function logoutOAuth({ oAuthBackchannelLogoutDto }: {
oAuthBackchannelLogoutDto: OAuthBackchannelLogoutDto;
}, opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText("/oauth/backchannel-logout", oazapfts.form({
...opts,
method: "POST",
body: oAuthBackchannelLogoutDto
})));
}
/**
* Finish OAuth
*/
@@ -5643,17 +5674,6 @@ export function getStorage(opts?: Oazapfts.RequestOpts) {
...opts
}));
}
/**
* Get theme
*/
export function getTheme(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: ServerThemeDto;
}>("/server/theme", {
...opts
}));
}
/**
* Get server version
*/
@@ -6726,6 +6746,7 @@ export enum AssetVisibility {
}
export enum AlbumUserRole {
Editor = "editor",
Owner = "owner",
Viewer = "viewer"
}
export enum BulkIdErrorReason {
@@ -6894,7 +6915,6 @@ export enum Permission {
}
export enum AssetMediaStatus {
Created = "created",
Replaced = "replaced",
Duplicate = "duplicate"
}
export enum AssetUploadAction {
@@ -7106,6 +7126,7 @@ export enum SyncEntityType {
PartnerStackDeleteV1 = "PartnerStackDeleteV1",
PartnerStackV1 = "PartnerStackV1",
AlbumV1 = "AlbumV1",
AlbumV2 = "AlbumV2",
AlbumDeleteV1 = "AlbumDeleteV1",
AlbumUserV1 = "AlbumUserV1",
AlbumUserBackfillV1 = "AlbumUserBackfillV1",
@@ -7138,6 +7159,7 @@ export enum SyncEntityType {
}
export enum SyncRequestType {
AlbumsV1 = "AlbumsV1",
AlbumsV2 = "AlbumsV2",
AlbumUsersV1 = "AlbumUsersV1",
AlbumToAssetsV1 = "AlbumToAssetsV1",
AlbumAssetsV1 = "AlbumAssetsV1",