chore: wip

This commit is contained in:
izzy
2026-05-08 13:51:52 +01:00
parent 998d82643c
commit 173a6afda8
8 changed files with 98 additions and 30 deletions
+1 -1
View File
@@ -44,7 +44,7 @@
"exiftool-vendored": "^35.0.0",
"globals": "^17.0.0",
"luxon": "^3.4.4",
"orchestration-ui": "0.1.68",
"orchestration-ui": "0.1.69",
"pg": "^8.11.3",
"pngjs": "^7.0.0",
"prettier": "^3.7.4",
+19 -19
View File
@@ -253,8 +253,8 @@ importers:
specifier: ^3.4.4
version: 3.7.2
orchestration-ui:
specifier: 0.1.68
version: 0.1.68(svelte@5.55.1)
specifier: 0.1.69
version: 0.1.69(svelte@5.55.1)
pg:
specifier: ^8.11.3
version: 8.20.0
@@ -524,8 +524,8 @@ importers:
specifier: ^6.3.3
version: 6.8.2
orchestration-api:
specifier: 0.1.68
version: 0.1.68(@nestjs/platform-express@11.1.17)(class-transformer@0.5.1)(reflect-metadata@0.2.2)
specifier: 0.1.69
version: 0.1.69(@nestjs/platform-express@11.1.17)(class-transformer@0.5.1)(reflect-metadata@0.2.2)
pg:
specifier: ^8.11.3
version: 8.20.0
@@ -819,8 +819,8 @@ importers:
specifier: ^5.6.2
version: 5.21.0
orchestration-ui:
specifier: 0.1.68
version: 0.1.68(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)
specifier: 0.1.69
version: 0.1.69(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)
pmtiles:
specifier: ^4.3.0
version: 4.4.0
@@ -9687,11 +9687,11 @@ packages:
resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==}
engines: {node: '>=18'}
orchestration-api@0.1.68:
resolution: {integrity: sha512-AU0fBmsR+0ykyxnp22fjheF4Q6SWHyEw6/mk0OJos7xrZlxSJnb+DzzXjSiNm4fCyfODTCkSTWfHRnsPbxqQgA==}
orchestration-api@0.1.69:
resolution: {integrity: sha512-e178p+yfWV26RHNIKrGY8cnl0LgtbEal0BJhTdRTDrJy+bLjDw+MqzaVMYzMjCkAECML37dwAZjTR/qIwRfSwA==}
orchestration-ui@0.1.68:
resolution: {integrity: sha512-DFf7zYlWpvIxdfOtKiN+nhkpzKGXpGRLwls6erSuc1ZvAiZW6bc2+5lLktjBWi+ZRfl166Wkbb4c6a3eIiP2Dg==}
orchestration-ui@0.1.69:
resolution: {integrity: sha512-l7e8Xgf24rD1KblsdtcODBIk2UY1b/hSwry1tHEB/mpkZ+MUu4feXswa1+aSztP6WIP5RXk8CH4PHS/z5MFJmg==}
peerDependencies:
svelte: ^5.0.0
@@ -12651,8 +12651,8 @@ packages:
resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
engines: {node: '>=18'}
yucca-api-client@0.1.68:
resolution: {integrity: sha512-1FCFPa4dZ3wr5n+rpb0+rfCm4u9JSko4nXe3b/zYd/XWHzvLZteEYF3W8iO1LevJHgquEo9ZFkH8h/RU5TFKIg==}
yucca-api-client@0.1.69:
resolution: {integrity: sha512-GXRnvpTi7p8X+6R3E0ypBY+j7q5MrQQgH6bSi4ppB/h729VD6aAkwXLSK64i29Ge4jfyrQ4HymgQSwFd7avc8g==}
yup@1.7.1:
resolution: {integrity: sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==}
@@ -23027,7 +23027,7 @@ snapshots:
string-width: 7.2.0
strip-ansi: 7.2.0
orchestration-api@0.1.68(@nestjs/platform-express@11.1.17)(class-transformer@0.5.1)(reflect-metadata@0.2.2):
orchestration-api@0.1.69(@nestjs/platform-express@11.1.17)(class-transformer@0.5.1)(reflect-metadata@0.2.2):
dependencies:
'@futo-org/restic-wrapper': 1.2.0
'@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)
@@ -23049,7 +23049,7 @@ snapshots:
rxjs: 7.8.2
socket.io: 4.8.3
tail: 2.2.6
yucca-api-client: 0.1.68
yucca-api-client: 0.1.69
transitivePeerDependencies:
- '@nestjs/microservices'
- '@nestjs/platform-express'
@@ -23059,7 +23059,7 @@ snapshots:
- supports-color
- utf-8-validate
orchestration-ui@0.1.68(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1):
orchestration-ui@0.1.69(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1):
dependencies:
'@immich/ui': 0.59.0(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.1)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@6.0.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)
'@mdi/js': 7.4.47
@@ -23071,14 +23071,14 @@ snapshots:
luxon: 3.7.2
socket.io-client: 4.8.3
svelte: 5.55.1
yucca-api-client: 0.1.68
yucca-api-client: 0.1.69
transitivePeerDependencies:
- '@sveltejs/kit'
- bufferutil
- supports-color
- utf-8-validate
orchestration-ui@0.1.68(svelte@5.55.1):
orchestration-ui@0.1.69(svelte@5.55.1):
dependencies:
'@immich/ui': 0.59.0(svelte@5.55.1)
'@mdi/js': 7.4.47
@@ -23090,7 +23090,7 @@ snapshots:
luxon: 3.7.2
socket.io-client: 4.8.3
svelte: 5.55.1
yucca-api-client: 0.1.68
yucca-api-client: 0.1.69
transitivePeerDependencies:
- '@sveltejs/kit'
- bufferutil
@@ -26613,7 +26613,7 @@ snapshots:
yoctocolors@2.1.2: {}
yucca-api-client@0.1.68:
yucca-api-client@0.1.69:
dependencies:
'@oazapfts/runtime': 1.2.0
+1 -1
View File
@@ -99,7 +99,7 @@
"nestjs-zod": "^5.3.0",
"nodemailer": "^8.0.0",
"openid-client": "^6.3.3",
"orchestration-api": "0.1.68",
"orchestration-api": "0.1.69",
"pg": "^8.11.3",
"pg-connection-string": "^2.9.1",
"picomatch": "^4.0.2",
+4 -4
View File
@@ -10,7 +10,7 @@ import { OrchestrationApiModule } from 'orchestration-api/dist';
import { commandsAndQuestions } from 'src/commands';
import { IWorker } from 'src/constants';
import { controllers } from 'src/controllers';
import { ImmichEnvironment, ImmichWorker } from 'src/enum';
import { ImmichWorker } from 'src/enum';
import { MaintenanceAuthGuard } from 'src/maintenance/maintenance-auth.guard';
import { MaintenanceHealthRepository } from 'src/maintenance/maintenance-health.repository';
import { MaintenanceWebsocketRepository } from 'src/maintenance/maintenance-websocket.repository';
@@ -60,9 +60,9 @@ const apiMiddleware = [
];
const configRepository = new ConfigRepository();
const { bull, cls, database, environment, otel } = configRepository.getEnv();
const isYuccaDevelopmentMode =
environment === ImmichEnvironment.Development || environment === ImmichEnvironment.Testing;
const { bull, cls, database, otel } = configRepository.getEnv();
// TODO-DEV
const isYuccaDevelopmentMode = true;
const commonImports = [
ClsModule.forRoot(cls.config),
+1 -1
View File
@@ -51,7 +51,7 @@
"lodash-es": "^4.17.21",
"luxon": "^3.4.4",
"maplibre-gl": "^5.6.2",
"orchestration-ui": "0.1.68",
"orchestration-ui": "0.1.69",
"pmtiles": "^4.3.0",
"qrcode": "^1.5.4",
"simple-icons": "^16.0.0",
@@ -12,11 +12,22 @@
import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte';
import { Route } from '$lib/route';
import { getGlobalActions } from '$lib/services/app.service';
import { handleSetMaintenanceMode } from '$lib/services/maintenance.service';
import { mediaQueryManager } from '$lib/stores/media-query-manager.svelte';
import { notificationManager } from '$lib/stores/notification-manager.svelte';
import { sidebarStore } from '$lib/stores/sidebar.svelte';
import { MaintenanceAction } from '@immich/sdk';
import { ActionButton, Button, IconButton, Logo } from '@immich/ui';
import { mdiBellBadge, mdiBellOutline, mdiMagnify, mdiMenu, mdiTrayArrowUp } from '@mdi/js';
import {
mdiBellBadge,
mdiBellOutline,
mdiDeleteSweep,
mdiMagnify,
mdiMenu,
mdiProgressWrench,
mdiTrayArrowUp,
} from '@mdi/js';
import { sdk } from 'orchestration-ui';
import { onMount } from 'svelte';
import { t } from 'svelte-i18n';
import ThemeButton from '../theme-button.svelte';
@@ -102,6 +113,55 @@
/>
{/if}
<!-- TODO-DEV -->
{#if authManager.user.isAdmin}
<Button
leadingIcon={mdiProgressWrench}
onclick={() => handleSetMaintenanceMode({ action: MaintenanceAction.Start })}
class="hidden lg:flex"
variant="ghost"
size="medium"
color="danger"
>{$t('admin.maintenance_start')}
</Button>
<IconButton
color="danger"
shape="round"
variant="ghost"
size="medium"
onclick={() => handleSetMaintenanceMode({ action: MaintenanceAction.Start })}
title={$t('admin.maintenance_start')}
aria-label={$t('admin.maintenance_start')}
icon={mdiProgressWrench}
class="lg:hidden"
/>
<Button
leadingIcon={mdiDeleteSweep}
onclick={async () => {
await sdk.resetOrchestrator();
globalThis.location.reload();
}}
class="hidden lg:flex"
variant="ghost"
size="medium"
color="danger">Reset Backups</Button
>
<IconButton
color="danger"
shape="round"
variant="ghost"
size="medium"
onclick={async () => {
await sdk.resetOrchestrator();
globalThis.location.reload();
}}
title="Reset Backups"
aria-label="Reset Backups"
icon={mdiDeleteSweep}
class="lg:hidden"
/>
{/if}
{#if !page.url.pathname.includes('/admin') && onUploadClick}
<Button
leadingIcon={mdiTrayArrowUp}
+9 -1
View File
@@ -30,6 +30,11 @@
action: MaintenanceAction.End,
});
const startRestore = () =>
handleSetMaintenanceMode({
action: MaintenanceAction.SelectDatabaseRestore,
});
const error = $derived(
$status?.error
?.split('\n')
@@ -89,7 +94,10 @@
},
})}
</p>
<Button onclick={end}>{$t('maintenance_end')}</Button>
<div class="flex gap-2">
<Button color="secondary" onclick={startRestore}>{$t('maintenance_restore_from_backup')}</Button>
<Button onclick={end}>{$t('maintenance_end')}</Button>
</div>
{/if}
{/if}
</div>
@@ -2,7 +2,7 @@
import RestoreFlowDetectInstall from './RestoreFlowDetectInstall.svelte';
import RestoreFlowIntro from './RestoreFlowIntro.svelte';
import RestoreFlowSelectBackup from './RestoreFlowSelectBackup.svelte';
import { OnboardingGate } from 'orchestration-ui';
import { ImmichOnboardingRestoreFlow } from 'orchestration-ui';
type Props = {
end: () => void;
@@ -28,7 +28,7 @@
{#if stage === 0}
<RestoreFlowIntro flowToYucca={() => (stage = 1)} flowToDatabase={() => (stage = 2)} {end} />
{:else if stage === 1}
<OnboardingGate flow="immich-restore" onExit={previous} onFinish={() => stage++}></OnboardingGate>
<ImmichOnboardingRestoreFlow onExit={previous} onFinish={() => stage++} />
{:else if stage === 2}
<RestoreFlowDetectInstall {next} previous={() => (stage = 0)} />
{:else}