You've already forked immich
							
							
				mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 00:18:28 +02:00 
			
		
		
		
	chore(server): bump server dependencies (#3899)
* chore(server): bump server dependencies * fix: test
This commit is contained in:
		
							
								
								
									
										6
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| { | ||||
|   "name": "immich", | ||||
|   "lockfileVersion": 2, | ||||
|   "requires": true, | ||||
|   "packages": {} | ||||
| } | ||||
							
								
								
									
										11589
									
								
								server/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										11589
									
								
								server/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -39,89 +39,90 @@ | ||||
|     "api:generate": "node ./bin/sync-spec-version.js && bash ./bin/generate-open-api.sh" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@babel/runtime": "^7.20.13", | ||||
|     "@nestjs/bullmq": "^1.1.0", | ||||
|     "@nestjs/common": "^9.2.1", | ||||
|     "@nestjs/config": "^2.2.0", | ||||
|     "@nestjs/core": "^9.2.1", | ||||
|     "@nestjs/platform-express": "^9.2.1", | ||||
|     "@nestjs/platform-socket.io": "^9.2.1", | ||||
|     "@nestjs/schedule": "^2.1.0", | ||||
|     "@nestjs/swagger": "^6.1.4", | ||||
|     "@nestjs/typeorm": "^9.0.1", | ||||
|     "@nestjs/websockets": "^9.2.1", | ||||
|     "@socket.io/redis-adapter": "^8.0.1", | ||||
|     "archiver": "^5.3.1", | ||||
|     "axios": "^0.26.0", | ||||
|     "bcrypt": "^5.0.1", | ||||
|     "bullmq": "^3.14.1", | ||||
|     "@babel/runtime": "^7.22.11", | ||||
|     "@nestjs/bullmq": "^10.0.1", | ||||
|     "@nestjs/common": "^10.2.2", | ||||
|     "@nestjs/config": "^3.0.0", | ||||
|     "@nestjs/core": "^10.2.2", | ||||
|     "@nestjs/platform-express": "^10.2.2", | ||||
|     "@nestjs/platform-socket.io": "^10.2.2", | ||||
|     "@nestjs/schedule": "^3.0.3", | ||||
|     "@nestjs/swagger": "^7.1.8", | ||||
|     "@nestjs/typeorm": "^10.0.0", | ||||
|     "@nestjs/websockets": "^10.2.2", | ||||
|     "@socket.io/redis-adapter": "^8.2.1", | ||||
|     "archiver": "^6.0.0", | ||||
|     "axios": "^1.5.0", | ||||
|     "bcrypt": "^5.1.1", | ||||
|     "bullmq": "^4.8.0", | ||||
|     "class-transformer": "^0.5.1", | ||||
|     "class-validator": "^0.14.0", | ||||
|     "cookie-parser": "^1.4.6", | ||||
|     "exiftool-vendored": "^22.0.0", | ||||
|     "exiftool-vendored.pl": "^12.54.0", | ||||
|     "exiftool-vendored.pl": "^12.62.0", | ||||
|     "fluent-ffmpeg": "^2.1.2", | ||||
|     "handlebars": "^4.7.7", | ||||
|     "i18n-iso-countries": "^7.5.0", | ||||
|     "handlebars": "^4.7.8", | ||||
|     "i18n-iso-countries": "^7.6.0", | ||||
|     "immich": "^0.41.0", | ||||
|     "ioredis": "^5.3.1", | ||||
|     "joi": "^17.5.0", | ||||
|     "local-reverse-geocoder": "0.12.5", | ||||
|     "ioredis": "^5.3.2", | ||||
|     "joi": "^17.10.0", | ||||
|     "local-reverse-geocoder": "0.16.5", | ||||
|     "lodash": "^4.17.21", | ||||
|     "luxon": "^3.0.3", | ||||
|     "luxon": "^3.4.2", | ||||
|     "mv": "^2.1.1", | ||||
|     "nest-commander": "^3.3.0", | ||||
|     "openid-client": "^5.2.1", | ||||
|     "pg": "^8.8.0", | ||||
|     "nest-commander": "^3.11.1", | ||||
|     "openid-client": "^5.4.3", | ||||
|     "pg": "^8.11.3", | ||||
|     "reflect-metadata": "^0.1.13", | ||||
|     "rxjs": "^7.2.0", | ||||
|     "rxjs": "^7.8.1", | ||||
|     "sanitize-filename": "^1.6.3", | ||||
|     "sharp": "^0.31.3", | ||||
|     "thumbhash": "^0.1.1", | ||||
|     "typeorm": "^0.3.11", | ||||
|     "typesense": "^1.5.3", | ||||
|     "typeorm": "^0.3.17", | ||||
|     "typesense": "^1.7.1", | ||||
|     "ua-parser-js": "^1.0.35" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@nestjs/cli": "^9.1.8", | ||||
|     "@nestjs/schematics": "^9.0.4", | ||||
|     "@nestjs/testing": "^9.2.1", | ||||
|     "@openapitools/openapi-generator-cli": "2.5.2", | ||||
|     "@types/archiver": "^5.3.1", | ||||
|     "@nestjs/cli": "^10.1.16", | ||||
|     "@nestjs/schematics": "^10.0.2", | ||||
|     "@nestjs/testing": "^10.2.2", | ||||
|     "@openapitools/openapi-generator-cli": "2.7.0", | ||||
|     "@testcontainers/postgresql": "^10.2.1", | ||||
|     "@types/archiver": "^5.3.2", | ||||
|     "@types/bcrypt": "^5.0.0", | ||||
|     "@types/cookie-parser": "^1.4.3", | ||||
|     "@types/cron": "^2.0.0", | ||||
|     "@types/express": "^4.17.13", | ||||
|     "@types/fluent-ffmpeg": "^2.1.20", | ||||
|     "@types/imagemin": "^8.0.0", | ||||
|     "@types/jest": "27.0.2", | ||||
|     "@types/cron": "^2.0.1", | ||||
|     "@types/express": "^4.17.17", | ||||
|     "@types/fluent-ffmpeg": "^2.1.21", | ||||
|     "@types/imagemin": "^8.0.1", | ||||
|     "@types/jest": "29.5.4", | ||||
|     "@types/jest-when": "^3.5.2", | ||||
|     "@types/lodash": "^4.14.178", | ||||
|     "@types/lodash": "^4.14.197", | ||||
|     "@types/multer": "^1.4.7", | ||||
|     "@types/mv": "^2.1.2", | ||||
|     "@types/node": "^18.0.0", | ||||
|     "@types/sharp": "^0.30.2", | ||||
|     "@types/supertest": "^2.0.11", | ||||
|     "@types/node": "^20.5.7", | ||||
|     "@types/sharp": "^0.31.1", | ||||
|     "@types/supertest": "^2.0.12", | ||||
|     "@types/ua-parser-js": "^0.7.36", | ||||
|     "@typescript-eslint/eslint-plugin": "^5.48.1", | ||||
|     "@typescript-eslint/parser": "^5.48.1", | ||||
|     "dotenv": "^14.2.0", | ||||
|     "eslint": "^8.31.0", | ||||
|     "eslint-config-prettier": "^8.3.0", | ||||
|     "eslint-plugin-prettier": "^4.0.0", | ||||
|     "jest": "^27.2.5", | ||||
|     "jest-when": "^3.5.2", | ||||
|     "prettier": "^2.3.2", | ||||
|     "prettier-plugin-organize-imports": "^3.2.2", | ||||
|     "rimraf": "^3.0.2", | ||||
|     "source-map-support": "^0.5.20", | ||||
|     "supertest": "^6.1.3", | ||||
|     "testcontainers": "^9.9.1", | ||||
|     "ts-jest": "^27.0.3", | ||||
|     "ts-loader": "^9.2.3", | ||||
|     "ts-node": "^10.0.0", | ||||
|     "tsconfig-paths": "^3.10.1", | ||||
|     "typescript": "^4.9.4" | ||||
|     "@typescript-eslint/eslint-plugin": "^6.4.1", | ||||
|     "@typescript-eslint/parser": "^6.4.1", | ||||
|     "dotenv": "^16.3.1", | ||||
|     "eslint": "^8.48.0", | ||||
|     "eslint-config-prettier": "^9.0.0", | ||||
|     "eslint-plugin-prettier": "^5.0.0", | ||||
|     "jest": "^29.6.4", | ||||
|     "jest-when": "^3.6.0", | ||||
|     "prettier": "^3.0.2", | ||||
|     "prettier-plugin-organize-imports": "^3.2.3", | ||||
|     "rimraf": "^5.0.1", | ||||
|     "source-map-support": "^0.5.21", | ||||
|     "supertest": "^6.3.3", | ||||
|     "testcontainers": "^10.2.1", | ||||
|     "ts-jest": "^29.1.1", | ||||
|     "ts-loader": "^9.4.4", | ||||
|     "ts-node": "^10.9.1", | ||||
|     "tsconfig-paths": "^4.2.0", | ||||
|     "typescript": "^5.2.2" | ||||
|   }, | ||||
|   "jest": { | ||||
|     "clearMocks": true, | ||||
|   | ||||
| @@ -6,7 +6,10 @@ import { Command, CommandRunner, InquirerService, Question, QuestionSet } from ' | ||||
|   description: 'Reset the admin password', | ||||
| }) | ||||
| export class ResetAdminPasswordCommand extends CommandRunner { | ||||
|   constructor(private userService: UserService, private readonly inquirer: InquirerService) { | ||||
|   constructor( | ||||
|     private userService: UserService, | ||||
|     private readonly inquirer: InquirerService, | ||||
|   ) { | ||||
|     super(); | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -99,8 +99,8 @@ export class AlbumService { | ||||
|       ownerId: authUser.id, | ||||
|       albumName: dto.albumName, | ||||
|       description: dto.description, | ||||
|       sharedUsers: dto.sharedWithUserIds?.map((value) => ({ id: value } as UserEntity)) ?? [], | ||||
|       assets: (dto.assetIds || []).map((id) => ({ id } as AssetEntity)), | ||||
|       sharedUsers: dto.sharedWithUserIds?.map((value) => ({ id: value }) as UserEntity) ?? [], | ||||
|       assets: (dto.assetIds || []).map((id) => ({ id }) as AssetEntity), | ||||
|       albumThumbnailAssetId: dto.assetIds?.[0] || null, | ||||
|     }); | ||||
|  | ||||
|   | ||||
| @@ -92,7 +92,7 @@ const sidecar: Record<string, string[]> = { | ||||
| const isType = (filename: string, r: Record<string, string[]>) => extname(filename).toLowerCase() in r; | ||||
|  | ||||
| const lookup = (filename: string) => | ||||
|   ({ ...image, ...video, ...sidecar }[extname(filename).toLowerCase()]?.[0] ?? 'application/octet-stream'); | ||||
|   ({ ...image, ...video, ...sidecar })[extname(filename).toLowerCase()]?.[0] ?? 'application/octet-stream'; | ||||
|  | ||||
| export const mimeTypes = { | ||||
|   image, | ||||
|   | ||||
| @@ -176,7 +176,10 @@ class BaseConfig implements VideoCodecSWConfig { | ||||
| export class BaseHWConfig extends BaseConfig implements VideoCodecHWConfig { | ||||
|   protected devices: string[]; | ||||
|  | ||||
|   constructor(protected config: SystemConfigFFmpegDto, devices: string[] = []) { | ||||
|   constructor( | ||||
|     protected config: SystemConfigFFmpegDto, | ||||
|     devices: string[] = [], | ||||
|   ) { | ||||
|     super(config); | ||||
|     this.devices = this.validateDevices(devices); | ||||
|   } | ||||
|   | ||||
| @@ -30,7 +30,7 @@ interface SyncQueue { | ||||
| export class SearchService { | ||||
|   private logger = new Logger(SearchService.name); | ||||
|   private enabled = false; | ||||
|   private timer: NodeJS.Timer | null = null; | ||||
|   private timer: NodeJS.Timeout | null = null; | ||||
|   private configCore: SystemConfigCore; | ||||
|  | ||||
|   private albumQueue: SyncQueue = { | ||||
|   | ||||
| @@ -65,7 +65,7 @@ export class SharedLinkService { | ||||
|       userId: authUser.id, | ||||
|       type: dto.type, | ||||
|       albumId: dto.albumId || null, | ||||
|       assets: (dto.assetIds || []).map((id) => ({ id } as AssetEntity)), | ||||
|       assets: (dto.assetIds || []).map((id) => ({ id }) as AssetEntity), | ||||
|       description: dto.description || null, | ||||
|       expiresAt: dto.expiresAt || null, | ||||
|       allowUpload: dto.allowUpload ?? true, | ||||
|   | ||||
| @@ -16,7 +16,10 @@ import { IUserRepository, UserListFilter } from './user.repository'; | ||||
| const SALT_ROUNDS = 10; | ||||
|  | ||||
| export class UserCore { | ||||
|   constructor(private userRepository: IUserRepository, private cryptoRepository: ICryptoRepository) {} | ||||
|   constructor( | ||||
|     private userRepository: IUserRepository, | ||||
|     private cryptoRepository: ICryptoRepository, | ||||
|   ) {} | ||||
|  | ||||
|   async updateUser(authUser: AuthUserDto, id: string, dto: Partial<UserEntity>): Promise<UserEntity> { | ||||
|     if (!authUser.isAdmin && authUser.id !== id) { | ||||
|   | ||||
| @@ -5,7 +5,10 @@ import { IAssetRepository } from './asset-repository'; | ||||
| import { CreateAssetDto, ImportAssetDto } from './dto/create-asset.dto'; | ||||
|  | ||||
| export class AssetCore { | ||||
|   constructor(private repository: IAssetRepository, private jobRepository: IJobRepository) {} | ||||
|   constructor( | ||||
|     private repository: IAssetRepository, | ||||
|     private jobRepository: IJobRepository, | ||||
|   ) {} | ||||
|  | ||||
|   async create( | ||||
|     authUser: AuthUserDto, | ||||
|   | ||||
| @@ -80,7 +80,10 @@ export interface AuthRequest extends Request { | ||||
| export class AppGuard implements CanActivate { | ||||
|   private logger = new Logger(AppGuard.name); | ||||
|  | ||||
|   constructor(private reflector: Reflector, private authService: AuthService) {} | ||||
|   constructor( | ||||
|     private reflector: Reflector, | ||||
|     private authService: AuthService, | ||||
|   ) {} | ||||
|  | ||||
|   async canActivate(context: ExecutionContext): Promise<boolean> { | ||||
|     const targets = [context.getHandler(), context.getClass()]; | ||||
|   | ||||
| @@ -60,7 +60,10 @@ export class FileUploadInterceptor implements NestInterceptor { | ||||
|   }; | ||||
|   private defaultStorage: StorageEngine; | ||||
|  | ||||
|   constructor(private reflect: Reflector, private assetService: AssetService) { | ||||
|   constructor( | ||||
|     private reflect: Reflector, | ||||
|     private assetService: AssetService, | ||||
|   ) { | ||||
|     this.defaultStorage = diskStorage({ | ||||
|       filename: this.filename.bind(this), | ||||
|       destination: this.destination.bind(this), | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| import { GenericContainer, PostgreSqlContainer } from 'testcontainers'; | ||||
|  | ||||
| import { GenericContainer } from 'testcontainers'; | ||||
| import { PostgreSqlContainer } from '@testcontainers/postgresql'; | ||||
| export default async () => { | ||||
|   process.env.NODE_ENV = 'development'; | ||||
|   process.env.TYPESENSE_API_KEY = 'abc123'; | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "compilerOptions": { | ||||
|     "module": "commonjs", | ||||
|     "module": "Node16", | ||||
|     "strict": true, | ||||
|     "declaration": true, | ||||
|     "removeComments": true, | ||||
| @@ -17,15 +17,35 @@ | ||||
|     "esModuleInterop": true, | ||||
|     "baseUrl": "./", | ||||
|     "paths": { | ||||
|       "@test": ["test"], | ||||
|       "@test/*": ["test/*"], | ||||
|       "@app/immich": ["src/immich"], | ||||
|       "@app/immich/*": ["src/immich/*"], | ||||
|       "@app/infra": ["src/infra"], | ||||
|       "@app/infra/*": ["src/infra/*"], | ||||
|       "@app/domain": ["src/domain"], | ||||
|       "@app/domain/*": ["src/domain/*"] | ||||
|       "@test": [ | ||||
|         "test" | ||||
|       ], | ||||
|       "@test/*": [ | ||||
|         "test/*" | ||||
|       ], | ||||
|       "@app/immich": [ | ||||
|         "src/immich" | ||||
|       ], | ||||
|       "@app/immich/*": [ | ||||
|         "src/immich/*" | ||||
|       ], | ||||
|       "@app/infra": [ | ||||
|         "src/infra" | ||||
|       ], | ||||
|       "@app/infra/*": [ | ||||
|         "src/infra/*" | ||||
|       ], | ||||
|       "@app/domain": [ | ||||
|         "src/domain" | ||||
|       ], | ||||
|       "@app/domain/*": [ | ||||
|         "src/domain/*" | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   "exclude": ["dist", "node_modules", "upload"] | ||||
| } | ||||
|   "exclude": [ | ||||
|     "dist", | ||||
|     "node_modules", | ||||
|     "upload" | ||||
|   ] | ||||
| } | ||||
		Reference in New Issue
	
	Block a user