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