Make backend work with nodenext

This commit is contained in:
Caramel
2024-10-30 17:57:45 +01:00
parent 3128c3a249
commit 9098b963d8
98 changed files with 556 additions and 556 deletions

View File

@@ -3,15 +3,15 @@ import { ScheduleModule } from '@nestjs/schedule';
import { ServeStaticModule } from '@nestjs/serve-static';
import cors from 'cors';
import { IncomingMessage, ServerResponse } from 'http';
import { EarlyConfigModule } from './config/early/early-config.module';
import { ServeStaticConfigService } from './config/early/serve-static.config.service';
import { DatabaseModule } from './database/database.module';
import { PicsurLayersModule } from './layers/PicsurLayers.module';
import { PicsurLoggerModule } from './logger/logger.module';
import { AuthManagerModule } from './managers/auth/auth.module';
import { DemoManagerModule } from './managers/demo/demo.module';
import { UsageManagerModule } from './managers/usage/usage.module';
import { PicsurRoutesModule } from './routes/routes.module';
import { EarlyConfigModule } from './config/early/early-config.module.js';
import { ServeStaticConfigService } from './config/early/serve-static.config.service.js';
import { DatabaseModule } from './database/database.module.js';
import { PicsurLayersModule } from './layers/PicsurLayers.module.js';
import { PicsurLoggerModule } from './logger/logger.module.js';
import { AuthManagerModule } from './managers/auth/auth.module.js';
import { DemoManagerModule } from './managers/demo/demo.module.js';
import { UsageManagerModule } from './managers/usage/usage.module.js';
import { PicsurRoutesModule } from './routes/routes.module.js';
const mainCorsConfig = cors({
origin: '<origin>',

View File

@@ -1,7 +1,7 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { EApiKeyBackend } from '../../database/entities/apikey.entity';
import { ApiKeyDbService } from './apikey-db.service';
import { EApiKeyBackend } from '../../database/entities/apikey.entity.js';
import { ApiKeyDbService } from './apikey-db.service.js';
@Module({
imports: [TypeOrmModule.forFeature([EApiKeyBackend])],

View File

@@ -1,16 +1,16 @@
import { Injectable, Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
AsyncFailable,
Fail,
FT,
HasFailed,
} from 'picsur-shared/dist/types/failable';
import { FindResult } from 'picsur-shared/dist/types/find-result';
import { generateRandomString } from 'picsur-shared/dist/util/random';
import { Repository } from 'typeorm';
import { EApiKeyBackend } from '../../database/entities/apikey.entity';
import { EUserBackend } from '../../database/entities/users/user.entity';
import { EApiKeyBackend } from '../../database/entities/apikey.entity.js';
import { EUserBackend } from '../../database/entities/users/user.entity.js';
@Injectable()
export class ApiKeyDbService {

View File

@@ -1,10 +1,10 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { EImageDerivativeBackend } from '../../database/entities/images/image-derivative.entity';
import { EImageFileBackend } from '../../database/entities/images/image-file.entity';
import { EImageBackend } from '../../database/entities/images/image.entity';
import { ImageDBService } from './image-db.service';
import { ImageFileDBService } from './image-file-db.service';
import { EImageDerivativeBackend } from '../../database/entities/images/image-derivative.entity.js';
import { EImageFileBackend } from '../../database/entities/images/image-file.entity.js';
import { EImageBackend } from '../../database/entities/images/image.entity.js';
import { ImageDBService } from './image-db.service.js';
import { ImageFileDBService } from './image-file-db.service.js';
@Module({
imports: [

View File

@@ -4,7 +4,7 @@ import { AsyncFailable, Fail, FT } from 'picsur-shared/dist/types/failable';
import { FindResult } from 'picsur-shared/dist/types/find-result';
import { generateRandomString } from 'picsur-shared/dist/util/random';
import { In, LessThan, Repository } from 'typeorm';
import { EImageBackend } from '../../database/entities/images/image.entity';
import { EImageBackend } from '../../database/entities/images/image.entity.js';
@Injectable()
export class ImageDBService {

View File

@@ -2,14 +2,14 @@ import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ImageEntryVariant } from 'picsur-shared/dist/dto/image-entry-variant.enum';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
AsyncFailable,
Fail,
FT,
HasFailed,
} from 'picsur-shared/dist/types/failable';
import { LessThan, Repository } from 'typeorm';
import { EImageDerivativeBackend } from '../../database/entities/images/image-derivative.entity';
import { EImageFileBackend } from '../../database/entities/images/image-file.entity';
import { EImageDerivativeBackend } from '../../database/entities/images/image-derivative.entity.js';
import { EImageFileBackend } from '../../database/entities/images/image-file.entity.js';
const A_DAY_IN_SECONDS = 24 * 60 * 60;

View File

@@ -1,12 +1,12 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { EarlyConfigModule } from '../../config/early/early-config.module';
import { ESysPreferenceBackend } from '../../database/entities/system/sys-preference.entity';
import { EUsrPreferenceBackend } from '../../database/entities/system/usr-preference.entity';
import { PreferenceCommonService } from './preference-common.service';
import { PreferenceDefaultsService } from './preference-defaults.service';
import { SysPreferenceDbService } from './sys-preference-db.service';
import { UsrPreferenceDbService } from './usr-preference-db.service';
import { EarlyConfigModule } from '../../config/early/early-config.module.js';
import { ESysPreferenceBackend } from '../../database/entities/system/sys-preference.entity.js';
import { EUsrPreferenceBackend } from '../../database/entities/system/usr-preference.entity.js';
import { PreferenceCommonService } from './preference-common.service.js';
import { PreferenceDefaultsService } from './preference-defaults.service.js';
import { SysPreferenceDbService } from './sys-preference-db.service.js';
import { UsrPreferenceDbService } from './usr-preference-db.service.js';
@Module({
imports: [

View File

@@ -3,7 +3,7 @@ import { PrefValueType } from 'picsur-shared/dist/dto/preferences.dto';
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
import { UsrPreference } from 'picsur-shared/dist/dto/usr-preferences.enum';
import { generateRandomString } from 'picsur-shared/dist/util/random';
import { EarlyJwtConfigService } from '../../config/early/early-jwt.config.service';
import { EarlyJwtConfigService } from '../../config/early/early-jwt.config.service.js';
// This specific service holds the default values for system and user preferences
// It needs to be in a service because the values depend on the environment

View File

@@ -1,30 +1,30 @@
import { Injectable, Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import {
DecodedSysPref,
PrefValueType,
PrefValueTypeStrings,
DecodedSysPref,
PrefValueType,
PrefValueTypeStrings,
} from 'picsur-shared/dist/dto/preferences.dto';
import {
SysPreference,
SysPreferenceList,
SysPreferenceValidators,
SysPreferenceValueTypes,
SysPreference,
SysPreferenceList,
SysPreferenceValidators,
SysPreferenceValueTypes,
} from 'picsur-shared/dist/dto/sys-preferences.enum';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
AsyncFailable,
Fail,
FT,
HasFailed,
} from 'picsur-shared/dist/types/failable';
import { Repository } from 'typeorm';
import {
ESysPreferenceBackend,
ESysPreferenceSchema,
} from '../../database/entities/system/sys-preference.entity';
import { MutexFallBack } from '../../util/mutex-fallback';
import { PreferenceCommonService } from './preference-common.service';
import { PreferenceDefaultsService } from './preference-defaults.service';
ESysPreferenceBackend,
ESysPreferenceSchema,
} from '../../database/entities/system/sys-preference.entity.js';
import { MutexFallBack } from '../../util/mutex-fallback.js';
import { PreferenceCommonService } from './preference-common.service.js';
import { PreferenceDefaultsService } from './preference-defaults.service.js';
@Injectable()
export class SysPreferenceDbService {

View File

@@ -1,30 +1,30 @@
import { Injectable, Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import {
DecodedUsrPref,
PrefValueType,
PrefValueTypeStrings,
DecodedUsrPref,
PrefValueType,
PrefValueTypeStrings,
} from 'picsur-shared/dist/dto/preferences.dto';
import {
UsrPreference,
UsrPreferenceList,
UsrPreferenceValidators,
UsrPreferenceValueTypes,
UsrPreference,
UsrPreferenceList,
UsrPreferenceValidators,
UsrPreferenceValueTypes,
} from 'picsur-shared/dist/dto/usr-preferences.enum';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
AsyncFailable,
Fail,
FT,
HasFailed,
} from 'picsur-shared/dist/types/failable';
import { Repository } from 'typeorm';
import {
EUsrPreferenceBackend,
EUsrPreferenceSchema,
} from '../../database/entities/system/usr-preference.entity';
import { MutexFallBack } from '../../util/mutex-fallback';
import { PreferenceCommonService } from './preference-common.service';
import { PreferenceDefaultsService } from './preference-defaults.service';
EUsrPreferenceBackend,
EUsrPreferenceSchema,
} from '../../database/entities/system/usr-preference.entity.js';
import { MutexFallBack } from '../../util/mutex-fallback.js';
import { PreferenceCommonService } from './preference-common.service.js';
import { PreferenceDefaultsService } from './preference-defaults.service.js';
@Injectable()
export class UsrPreferenceDbService {

View File

@@ -1,15 +1,15 @@
import { Logger, Module, OnModuleInit } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { HasFailed } from 'picsur-shared/dist/types/failable';
import { EarlyConfigModule } from '../../config/early/early-config.module';
import { HostConfigService } from '../../config/early/host.config.service';
import { ERoleBackend } from '../../database/entities/users/role.entity';
import { EarlyConfigModule } from '../../config/early/early-config.module.js';
import { HostConfigService } from '../../config/early/host.config.service.js';
import { ERoleBackend } from '../../database/entities/users/role.entity.js';
import {
ImmutableRolesList,
SystemRoleDefaults,
SystemRolesList,
} from '../../models/constants/roles.const';
import { RoleDbService } from './role-db.service';
ImmutableRolesList,
SystemRoleDefaults,
SystemRolesList,
} from '../../models/constants/roles.const.js';
import { RoleDbService } from './role-db.service.js';
@Module({
imports: [EarlyConfigModule, TypeOrmModule.forFeature([ERoleBackend])],

View File

@@ -2,21 +2,21 @@ import { Injectable, Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ERoleSchema } from 'picsur-shared/dist/entities/role.entity';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
HasSuccess,
AsyncFailable,
Fail,
FT,
HasFailed,
HasSuccess,
} from 'picsur-shared/dist/types/failable';
import { makeUnique } from 'picsur-shared/dist/util/unique';
import { In, Repository } from 'typeorm';
import { ERoleBackend } from '../../database/entities/users/role.entity';
import { Permissions } from '../../models/constants/permissions.const';
import { ERoleBackend } from '../../database/entities/users/role.entity.js';
import { Permissions } from '../../models/constants/permissions.const.js';
import {
ImmutableRolesList,
RolePermissionsLocks,
UndeletableRolesList,
} from '../../models/constants/roles.const';
ImmutableRolesList,
RolePermissionsLocks,
UndeletableRolesList,
} from '../../models/constants/roles.const.js';
@Injectable()
export class RoleDbService {

View File

@@ -1,7 +1,7 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ESystemStateBackend } from '../../database/entities/system/system-state.entity';
import { SystemStateDbService } from './system-state-db.service';
import { ESystemStateBackend } from '../../database/entities/system/system-state.entity.js';
import { SystemStateDbService } from './system-state-db.service.js';
@Module({
imports: [TypeOrmModule.forFeature([ESystemStateBackend])],

View File

@@ -2,7 +2,7 @@ import { Injectable, Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { AsyncFailable, Fail, FT } from 'picsur-shared/dist/types/failable';
import { Repository } from 'typeorm';
import { ESystemStateBackend } from '../../database/entities/system/system-state.entity';
import { ESystemStateBackend } from '../../database/entities/system/system-state.entity.js';
@Injectable()
export class SystemStateDbService {

View File

@@ -2,12 +2,12 @@ import { Logger, Module, OnModuleInit } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { HasFailed } from 'picsur-shared/dist/types/failable';
import { generateRandomString } from 'picsur-shared/dist/util/random';
import { AuthConfigService } from '../../config/early/auth.config.service';
import { EarlyConfigModule } from '../../config/early/early-config.module';
import { EUserBackend } from '../../database/entities/users/user.entity';
import { PreferenceDbModule } from '../preference-db/preference-db.module';
import { RoleDbModule } from '../role-db/role-db.module';
import { UserDbService } from './user-db.service';
import { AuthConfigService } from '../../config/early/auth.config.service.js';
import { EarlyConfigModule } from '../../config/early/early-config.module.js';
import { EUserBackend } from '../../database/entities/users/user.entity.js';
import { PreferenceDbModule } from '../preference-db/preference-db.module.js';
import { RoleDbModule } from '../role-db/role-db.module.js';
import { UserDbService } from './user-db.service.js';
@Module({
imports: [

View File

@@ -3,29 +3,29 @@ import { InjectRepository } from '@nestjs/typeorm';
import * as bcrypt from 'bcrypt';
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
HasSuccess,
AsyncFailable,
Fail,
FT,
HasFailed,
HasSuccess,
} from 'picsur-shared/dist/types/failable';
import { FindResult } from 'picsur-shared/dist/types/find-result';
import { makeUnique } from 'picsur-shared/dist/util/unique';
import { Repository } from 'typeorm';
import { EUserBackend } from '../../database/entities/users/user.entity';
import { Permissions } from '../../models/constants/permissions.const';
import { EUserBackend } from '../../database/entities/users/user.entity.js';
import { Permissions } from '../../models/constants/permissions.const.js';
import {
DefaultRolesList,
SoulBoundRolesList,
} from '../../models/constants/roles.const';
DefaultRolesList,
SoulBoundRolesList,
} from '../../models/constants/roles.const.js';
import {
ImmutableUsersList,
LockedLoginUsersList,
UndeletableUsersList,
} from '../../models/constants/special-users.const';
import { GetCols } from '../../util/collection';
import { SysPreferenceDbService } from '../preference-db/sys-preference-db.service';
import { RoleDbService } from '../role-db/role-db.service';
ImmutableUsersList,
LockedLoginUsersList,
UndeletableUsersList,
} from '../../models/constants/special-users.const.js';
import { GetCols } from '../../util/collection.js';
import { SysPreferenceDbService } from '../preference-db/sys-preference-db.service.js';
import { RoleDbService } from '../role-db/role-db.service.js';
@Injectable()
export class UserDbService {

View File

@@ -1,7 +1,7 @@
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { ParseString } from 'picsur-shared/dist/util/parse-simple';
import { EnvPrefix } from '../config.static';
import { EnvPrefix } from '../config.static.js';
@Injectable()
export class AuthConfigService {

View File

@@ -1,12 +1,12 @@
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AuthConfigService } from './auth.config.service';
import { EarlyJwtConfigService } from './early-jwt.config.service';
import { HostConfigService } from './host.config.service';
import { MultipartConfigService } from './multipart.config.service';
import { RedisConfigService } from './redis.config.service';
import { ServeStaticConfigService } from './serve-static.config.service';
import { TypeOrmConfigService } from './type-orm.config.service';
import { AuthConfigService } from './auth.config.service.js';
import { EarlyJwtConfigService } from './early-jwt.config.service.js';
import { HostConfigService } from './host.config.service.js';
import { MultipartConfigService } from './multipart.config.service.js';
import { RedisConfigService } from './redis.config.service.js';
import { ServeStaticConfigService } from './serve-static.config.service.js';
import { TypeOrmConfigService } from './type-orm.config.service.js';
@Module({
imports: [

View File

@@ -1,7 +1,7 @@
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { ParseString } from 'picsur-shared/dist/util/parse-simple';
import { EnvPrefix } from '../config.static';
import { EnvPrefix } from '../config.static.js';
@Injectable()
export class EarlyJwtConfigService {

View File

@@ -1,11 +1,11 @@
import { Injectable, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import {
ParseBool,
ParseInt,
ParseString,
ParseBool,
ParseInt,
ParseString,
} from 'picsur-shared/dist/util/parse-simple';
import { EnvPrefix } from '../config.static';
import { EnvPrefix } from '../config.static.js';
@Injectable()
export class HostConfigService {

View File

@@ -1,7 +1,7 @@
import { Injectable, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { ParseInt } from 'picsur-shared/dist/util/parse-simple';
import { EnvPrefix } from '../config.static';
import { EnvPrefix } from '../config.static.js';
@Injectable()
export class MultipartConfigService {

View File

@@ -1,7 +1,7 @@
import { Injectable, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { ParseString } from 'picsur-shared/dist/util/parse-simple';
import { EnvPrefix } from '../config.static';
import { EnvPrefix } from '../config.static.js';
@Injectable()
export class RedisConfigService {

View File

@@ -1,12 +1,12 @@
import { Injectable, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import {
ServeStaticModuleOptions,
ServeStaticModuleOptionsFactory,
ServeStaticModuleOptions,
ServeStaticModuleOptionsFactory,
} from '@nestjs/serve-static';
import { join } from 'path';
import { ParseString } from 'picsur-shared/dist/util/parse-simple';
import { EnvPrefix, PackageRoot } from '../config.static';
import { EnvPrefix, PackageRoot } from '../config.static.js';
@Injectable()
export class ServeStaticConfigService

View File

@@ -2,10 +2,10 @@ import { Injectable, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from '@nestjs/typeorm';
import { ParseInt, ParseString } from 'picsur-shared/dist/util/parse-simple';
import { EntityList } from '../../database/entities/index';
import { MigrationList } from '../../database/migrations/index';
import { DefaultName, EnvPrefix } from '../config.static';
import { HostConfigService } from './host.config.service';
import { EntityList } from '../../database/entities/index.js';
import { MigrationList } from '../../database/migrations/index.js';
import { DefaultName, EnvPrefix } from '../config.static.js';
import { HostConfigService } from './host.config.service.js';
@Injectable()
export class TypeOrmConfigService implements TypeOrmOptionsFactory {

View File

@@ -1,7 +1,7 @@
import { Injectable, Logger } from '@nestjs/common';
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
import { HasFailed } from 'picsur-shared/dist/types/failable';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service.js';
@Injectable()
export class InfoConfigService {

View File

@@ -2,7 +2,7 @@ import { FactoryProvider, Injectable, Logger } from '@nestjs/common';
import { JwtModuleOptions, JwtOptionsFactory } from '@nestjs/jwt';
import ms from 'ms';
import { ThrowIfFailed } from 'picsur-shared/dist/types/failable';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service.js';
@Injectable()
export class JwtConfigService implements JwtOptionsFactory {

View File

@@ -1,11 +1,11 @@
import { Logger, Module, OnModuleInit } from '@nestjs/common';
import { PreferenceDbModule } from '../../collections/preference-db/preference-db.module';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service';
import { EarlyConfigModule } from '../early/early-config.module';
import { EarlyJwtConfigService } from '../early/early-jwt.config.service';
import { InfoConfigService } from './info.config.service';
import { JwtConfigService } from './jwt.config.service';
import { UsageConfigService } from './usage.config.service';
import { PreferenceDbModule } from '../../collections/preference-db/preference-db.module.js';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service.js';
import { EarlyConfigModule } from '../early/early-config.module.js';
import { EarlyJwtConfigService } from '../early/early-jwt.config.service.js';
import { InfoConfigService } from './info.config.service.js';
import { JwtConfigService } from './jwt.config.service.js';
import { UsageConfigService } from './usage.config.service.js';
// This module contains all configservices that depend on the syspref module
// The syspref module can only be used when connected to the database

View File

@@ -1,14 +1,14 @@
import { Injectable } from '@nestjs/common';
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
AsyncFailable,
Fail,
FT,
HasFailed,
} from 'picsur-shared/dist/types/failable';
import { URLRegex, UUIDRegex } from 'picsur-shared/dist/util/common-regex';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service';
import { ReportInterval, ReportUrl } from '../config.static';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service.js';
import { ReportInterval, ReportUrl } from '../config.static.js';
@Injectable()
export class UsageConfigService {

View File

@@ -1,7 +1,7 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { EarlyConfigModule } from '../config/early/early-config.module';
import { TypeOrmConfigService } from '../config/early/type-orm.config.service';
import { EarlyConfigModule } from '../config/early/early-config.module.js';
import { TypeOrmConfigService } from '../config/early/type-orm.config.service.js';
@Module({
imports: [

View File

@@ -1,13 +1,13 @@
import { EApiKeySchema } from 'picsur-shared/dist/entities/apikey.entity';
import {
Column,
Entity,
Index,
ManyToOne,
PrimaryGeneratedColumn,
Column,
Entity,
Index,
ManyToOne,
PrimaryGeneratedColumn,
} from 'typeorm';
import { z } from 'zod';
import { EUserBackend } from './users/user.entity';
import { EUserBackend } from './users/user.entity.js';
const OverriddenEApiKeySchema = EApiKeySchema.omit({ user: true }).merge(
z.object({

View File

@@ -1,13 +1,13 @@
import {
Column,
Entity,
Index,
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Unique,
Column,
Entity,
Index,
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Unique,
} from 'typeorm';
import { EImageBackend } from './image.entity';
import { EImageBackend } from './image.entity.js';
@Entity()
@Unique(['image_id', 'key'])

View File

@@ -1,14 +1,14 @@
import { ImageEntryVariant } from 'picsur-shared/dist/dto/image-entry-variant.enum';
import {
Column,
Entity,
Index,
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Unique,
Column,
Entity,
Index,
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Unique,
} from 'typeorm';
import { EImageBackend } from './image.entity';
import { EImageBackend } from './image.entity.js';
@Entity()
@Unique(['image_id', 'variant'])

View File

@@ -1,7 +1,7 @@
import { EImage } from 'picsur-shared/dist/entities/image.entity';
import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm';
import { EImageDerivativeBackend } from './image-derivative.entity';
import { EImageFileBackend } from './image-file.entity';
import { EImageDerivativeBackend } from './image-derivative.entity.js';
import { EImageFileBackend } from './image-file.entity.js';
@Entity()
export class EImageBackend implements EImage {

View File

@@ -1,12 +1,12 @@
import { EApiKeyBackend } from './apikey.entity';
import { EImageDerivativeBackend } from './images/image-derivative.entity';
import { EImageFileBackend } from './images/image-file.entity';
import { EImageBackend } from './images/image.entity';
import { ESysPreferenceBackend } from './system/sys-preference.entity';
import { ESystemStateBackend } from './system/system-state.entity';
import { EUsrPreferenceBackend } from './system/usr-preference.entity';
import { ERoleBackend } from './users/role.entity';
import { EUserBackend } from './users/user.entity';
import { EApiKeyBackend } from './apikey.entity.js';
import { EImageDerivativeBackend } from './images/image-derivative.entity.js';
import { EImageFileBackend } from './images/image-file.entity.js';
import { EImageBackend } from './images/image.entity.js';
import { ESysPreferenceBackend } from './system/sys-preference.entity.js';
import { ESystemStateBackend } from './system/system-state.entity.js';
import { EUsrPreferenceBackend } from './system/usr-preference.entity.js';
import { ERoleBackend } from './users/role.entity.js';
import { EUserBackend } from './users/user.entity.js';
export const EntityList = [
EImageBackend,

View File

@@ -1,15 +1,15 @@
import { IsEntityID } from 'picsur-shared/dist/validators/entity-id.validator';
import {
Column,
Entity,
Index,
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Unique,
Column,
Entity,
Index,
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Unique,
} from 'typeorm';
import * as z from 'zod';
import { EUserBackend } from '../users/user.entity';
import { EUserBackend } from '../users/user.entity.js';
export const EUsrPreferenceSchema = z.object({
id: IsEntityID().optional(),

View File

@@ -1,6 +1,6 @@
import { ERole } from 'picsur-shared/dist/entities/role.entity';
import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm';
import type { Permissions } from '../../../models/constants/permissions.const';
import type { Permissions } from '../../../models/constants/permissions.const.js';
@Entity()
export class ERoleBackend implements ERole {

View File

@@ -1,14 +1,14 @@
import { EUserSchema } from 'picsur-shared/dist/entities/user.entity';
import {
Column,
Entity,
Index,
OneToMany,
PrimaryGeneratedColumn,
Column,
Entity,
Index,
OneToMany,
PrimaryGeneratedColumn,
} from 'typeorm';
import { z } from 'zod';
import { EApiKeyBackend } from '../apikey.entity';
import { EUsrPreferenceBackend } from '../system/usr-preference.entity';
import { EApiKeyBackend } from '../apikey.entity.js';
import { EUsrPreferenceBackend } from '../system/usr-preference.entity.js';
// Different data for public and private
const OverriddenEUserSchema = EUserSchema.omit({ hashedPassword: true }).merge(

View File

@@ -1,12 +1,12 @@
import { Newable } from 'picsur-shared/dist/types/newable';
import { MigrationInterface } from 'typeorm';
import { V030A1661692206479 } from './1661692206479-V_0_3_0_a';
import { V032A1662029904716 } from './1662029904716-V_0_3_2_a';
import { V040A1662314197741 } from './1662314197741-V_0_4_0_a';
import { V040B1662485374471 } from './1662485374471-V_0_4_0_b';
import { V040C1662535484200 } from './1662535484200-V_0_4_0_c';
import { V040D1662728275448 } from './1662728275448-V_0_4_0_d';
import { V050A1672154027079 } from './1672154027079-V_0_5_0_a';
import { Newable } from 'picsur-shared/dist/types/newable.js';
import { V030A1661692206479 } from './1661692206479-V_0_3_0_a.js';
import { V032A1662029904716 } from './1662029904716-V_0_3_2_a.js';
import { V040A1662314197741 } from './1662314197741-V_0_4_0_a.js';
import { V040B1662485374471 } from './1662485374471-V_0_4_0_b.js';
import { V040C1662535484200 } from './1662535484200-V_0_4_0_c.js';
import { V040D1662728275448 } from './1662728275448-V_0_4_0_d.js';
import { V050A1672154027079 } from './1672154027079-V_0_5_0_a.js';
export const MigrationList: Newable<MigrationInterface>[] = [
V030A1661692206479,

View File

@@ -1,11 +1,11 @@
import { NestFactory } from '@nestjs/core';
import {
FastifyAdapter,
NestFastifyApplication,
FastifyAdapter,
NestFastifyApplication,
} from '@nestjs/platform-fastify';
import { DataSource } from 'typeorm';
import { TypeOrmConfigService } from './config/early/type-orm.config.service';
import { DatabaseModule } from './database/database.module';
import { TypeOrmConfigService } from './config/early/type-orm.config.service.js';
import { DatabaseModule } from './database/database.module.js';
async function createDataSource() {
// Create nest app

View File

@@ -1,8 +1,8 @@
import { Module } from '@nestjs/common';
import { EarlyConfigModule } from '../config/early/early-config.module';
import { ImageIdPipe } from './image-id/image-id.pipe';
import { PostFilePipe } from './multipart/postfile.pipe';
import { MultiPartPipe } from './multipart/postfiles.pipe';
import { EarlyConfigModule } from '../config/early/early-config.module.js';
import { ImageIdPipe } from './image-id/image-id.pipe.js';
import { PostFilePipe } from './multipart/postfile.pipe.js';
import { MultiPartPipe } from './multipart/postfiles.pipe.js';
@Module({
imports: [EarlyConfigModule],

View File

@@ -1,5 +1,5 @@
import { Param, PipeTransform, Type } from '@nestjs/common';
import { ImageFullIdPipe } from './image-full-id.pipe';
import { ImageFullIdPipe } from './image-full-id.pipe.js';
export const ImageFullIdParam = (
...pipes: (PipeTransform<any, any> | Type<PipeTransform<any, any>>)[]

View File

@@ -2,7 +2,7 @@ import { Injectable, PipeTransform } from '@nestjs/common';
import { Ext2FileType } from 'picsur-shared/dist/dto/mimes.dto';
import { FT, Fail, HasFailed } from 'picsur-shared/dist/types/failable';
import { UUIDRegex } from 'picsur-shared/dist/util/common-regex';
import { ImageFullId } from '../../models/constants/image-full-id.const';
import { ImageFullId } from '../../models/constants/image-full-id.const.js';
@Injectable()
export class ImageFullIdPipe implements PipeTransform<string, ImageFullId> {

View File

@@ -1,5 +1,5 @@
import { Param, PipeTransform, Type } from '@nestjs/common';
import { ImageIdPipe } from './image-id.pipe';
import { ImageIdPipe } from './image-id.pipe.js';
export const ImageIdParam = (
...pipes: (PipeTransform<any, any> | Type<PipeTransform<any, any>>)[]

View File

@@ -1,6 +1,6 @@
import { InjectRequest } from './inject-request.decorator';
import { PostFilePipe } from './postfile.pipe';
import { MultiPartPipe } from './postfiles.pipe';
import { InjectRequest } from './inject-request.decorator.js';
import { PostFilePipe } from './postfile.pipe.js';
import { MultiPartPipe } from './postfiles.pipe.js';
export const PostFile = () => InjectRequest(PostFilePipe);

View File

@@ -2,7 +2,7 @@ import { Multipart, MultipartFile } from '@fastify/multipart';
import { Injectable, Logger, PipeTransform, Scope } from '@nestjs/common';
import { FastifyRequest } from 'fastify';
import { Fail, FT } from 'picsur-shared/dist/types/failable';
import { MultipartConfigService } from '../../config/early/multipart.config.service';
import { MultipartConfigService } from '../../config/early/multipart.config.service.js';
@Injectable({ scope: Scope.REQUEST })
export class PostFilePipe implements PipeTransform {

View File

@@ -2,7 +2,7 @@ import { MultipartFile } from '@fastify/multipart';
import { Injectable, Logger, PipeTransform, Scope } from '@nestjs/common';
import { FastifyRequest } from 'fastify';
import { FT, Fail } from 'picsur-shared/dist/types/failable';
import { MultipartConfigService } from '../../config/early/multipart.config.service';
import { MultipartConfigService } from '../../config/early/multipart.config.service.js';
export type FileIterator = AsyncIterableIterator<MultipartFile>;

View File

@@ -1,14 +1,14 @@
import {
createParamDecorator,
ExecutionContext,
SetMetadata,
UseGuards,
createParamDecorator,
ExecutionContext,
SetMetadata,
UseGuards,
} from '@nestjs/common';
import { Fail, FT } from 'picsur-shared/dist/types/failable';
import { CombineFCDecorators } from 'picsur-shared/dist/util/decorator';
import { LocalAuthGuard } from '../managers/auth/guards/local-auth.guard';
import { Permission, Permissions } from '../models/constants/permissions.const';
import AuthFastifyRequest from '../models/interfaces/authrequest.dto';
import { LocalAuthGuard } from '../managers/auth/guards/local-auth.guard.js';
import { Permission, Permissions } from '../models/constants/permissions.const.js';
import AuthFastifyRequest from '../models/interfaces/authrequest.dto.js';
export const RequiredPermissions = (...permissions: Permissions) => {
return SetMetadata('permissions', permissions);

View File

@@ -1,6 +1,6 @@
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { Fail, FT } from 'picsur-shared/dist/types/failable';
import AuthFastifyRequest from '../models/interfaces/authrequest.dto';
import AuthFastifyRequest from '../models/interfaces/authrequest.dto.js';
export const ReqUser = createParamDecorator(
(input: any, ctx: ExecutionContext) => {

View File

@@ -1,9 +1,9 @@
import { Module } from '@nestjs/common';
import { ThrottlerModule } from '@nestjs/throttler';
import { MainExceptionFilter } from './exception/exception.filter';
import { SuccessInterceptor } from './success/success.interceptor';
import { PicsurThrottlerGuard } from './throttler/PicsurThrottler.guard';
import { ZodValidationPipe } from './validate/zod-validator.pipe';
import { MainExceptionFilter } from './exception/exception.filter.js';
import { SuccessInterceptor } from './success/success.interceptor.js';
import { PicsurThrottlerGuard } from './throttler/PicsurThrottler.guard.js';
import { ZodValidationPipe } from './validate/zod-validator.pipe.js';
@Module({
imports: [

View File

@@ -1,6 +1,6 @@
import { Module } from '@nestjs/common';
import { EarlyConfigModule } from '../config/early/early-config.module';
import { PicsurLoggerService } from './logger.service';
import { EarlyConfigModule } from '../config/early/early-config.module.js';
import { PicsurLoggerService } from './logger.service.js';
@Module({
imports: [EarlyConfigModule],

View File

@@ -1,5 +1,5 @@
import { ConsoleLogger, Injectable, Scope } from '@nestjs/common';
import { HostConfigService } from '../config/early/host.config.service';
import { HostConfigService } from '../config/early/host.config.service.js';
@Injectable({ scope: Scope.DEFAULT })
export class PicsurLoggerService extends ConsoleLogger {

View File

@@ -3,18 +3,18 @@ import multipart from '@fastify/multipart';
import fastifyReplyFrom from '@fastify/reply-from';
import { NestFactory } from '@nestjs/core';
import {
FastifyAdapter,
NestFastifyApplication,
FastifyAdapter,
NestFastifyApplication,
} from '@nestjs/platform-fastify';
import { AppModule } from './app.module';
import { HostConfigService } from './config/early/host.config.service';
import { MainExceptionFilter } from './layers/exception/exception.filter';
import { SuccessInterceptor } from './layers/success/success.interceptor';
import { PicsurThrottlerGuard } from './layers/throttler/PicsurThrottler.guard';
import { ZodValidationPipe } from './layers/validate/zod-validator.pipe';
import { PicsurLoggerService } from './logger/logger.service';
import { MainAuthGuard } from './managers/auth/guards/main.guard';
import { HelmetOptions } from './security';
import { AppModule } from './app.module.js';
import { HostConfigService } from './config/early/host.config.service.js';
import { MainExceptionFilter } from './layers/exception/exception.filter.js';
import { SuccessInterceptor } from './layers/success/success.interceptor.js';
import { PicsurThrottlerGuard } from './layers/throttler/PicsurThrottler.guard.js';
import { ZodValidationPipe } from './layers/validate/zod-validator.pipe.js';
import { PicsurLoggerService } from './logger/logger.service.js';
import { MainAuthGuard } from './managers/auth/guards/main.guard.js';
import { HelmetOptions } from './security.js';
async function bootstrap() {
const isProduction = process.env['PICSUR_PRODUCTION'] !== undefined;

View File

@@ -1,22 +1,22 @@
import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { ApiKeyDbModule } from '../../collections/apikey-db/apikey-db.module';
import { PreferenceDbModule } from '../../collections/preference-db/preference-db.module';
import { UserDbModule } from '../../collections/user-db/user-db.module';
import { ApiKeyDbModule } from '../../collections/apikey-db/apikey-db.module.js';
import { PreferenceDbModule } from '../../collections/preference-db/preference-db.module.js';
import { UserDbModule } from '../../collections/user-db/user-db.module.js';
import {
JwtConfigService,
JwtSecretProvider,
} from '../../config/late/jwt.config.service';
import { LateConfigModule } from '../../config/late/late-config.module';
import { AuthManagerService } from './auth.service';
import { ApiKeyStrategy } from './guards/apikey.strategy';
import { GuestStrategy } from './guards/guest.strategy';
import { JwtStrategy } from './guards/jwt.strategy';
import { LocalAuthGuard } from './guards/local-auth.guard';
import { LocalAuthStrategy } from './guards/local-auth.strategy';
import { MainAuthGuard } from './guards/main.guard';
import { GuestService } from './guest.service';
JwtConfigService,
JwtSecretProvider,
} from '../../config/late/jwt.config.service.js';
import { LateConfigModule } from '../../config/late/late-config.module.js';
import { AuthManagerService } from './auth.service.js';
import { ApiKeyStrategy } from './guards/apikey.strategy.js';
import { GuestStrategy } from './guards/guest.strategy.js';
import { JwtStrategy } from './guards/jwt.strategy.js';
import { LocalAuthGuard } from './guards/local-auth.guard.js';
import { LocalAuthStrategy } from './guards/local-auth.strategy.js';
import { MainAuthGuard } from './guards/main.guard.js';
import { GuestService } from './guest.service.js';
@Module({
imports: [

View File

@@ -4,8 +4,8 @@ import { HeaderAPIKeyStrategy } from 'passport-headerapikey';
import { EUser, EUserSchema } from 'picsur-shared/dist/entities/user.entity';
import { HasFailed } from 'picsur-shared/dist/types/failable';
import { IsApiKey } from 'picsur-shared/dist/validators/api-key.validator';
import { ApiKeyDbService } from '../../../collections/apikey-db/apikey-db.service';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer';
import { ApiKeyDbService } from '../../../collections/apikey-db/apikey-db.service.js';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer.js';
@Injectable()
export class ApiKeyStrategy extends PassportStrategy(

View File

@@ -3,8 +3,8 @@ import { PassportStrategy } from '@nestjs/passport';
import { FastifyRequest } from 'fastify';
import { Strategy } from 'passport-strategy';
import { EUser } from 'picsur-shared/dist/entities/user.entity';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer';
import { GuestService } from '../guest.service';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer.js';
import { GuestService } from '../guest.service.js';
class GuestPassportStrategy extends Strategy {
// Will be overridden by the nest implementation

View File

@@ -4,8 +4,8 @@ import { ExtractJwt, Strategy as JwtPassportStrategy } from 'passport-jwt';
import { JwtDataSchema } from 'picsur-shared/dist/dto/jwt.dto';
import { EUser } from 'picsur-shared/dist/entities/user.entity';
import { ThrowIfFailed } from 'picsur-shared/dist/types/failable';
import { UserDbService } from '../../../collections/user-db/user-db.service';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer';
import { UserDbService } from '../../../collections/user-db/user-db.service.js';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer.js';
@Injectable()
export class JwtStrategy extends PassportStrategy(JwtPassportStrategy, 'jwt') {

View File

@@ -3,11 +3,11 @@ import { PassportStrategy } from '@nestjs/passport';
import { Strategy } from 'passport-local';
import { EUser } from 'picsur-shared/dist/entities/user.entity';
import {
AsyncFailable,
ThrowIfFailed,
AsyncFailable,
ThrowIfFailed,
} from 'picsur-shared/dist/types/failable';
import { UserDbService } from '../../../collections/user-db/user-db.service';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer';
import { UserDbService } from '../../../collections/user-db/user-db.service.js';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer.js';
@Injectable()
export class LocalAuthStrategy extends PassportStrategy(Strategy, 'local') {

View File

@@ -3,17 +3,17 @@ import { Reflector } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport';
import { EUser, EUserSchema } from 'picsur-shared/dist/entities/user.entity';
import {
AsyncFailable,
FT,
Fail,
Failable,
HasFailed,
ThrowIfFailed,
AsyncFailable,
FT,
Fail,
Failable,
HasFailed,
ThrowIfFailed,
} from 'picsur-shared/dist/types/failable';
import { makeUnique } from 'picsur-shared/dist/util/unique';
import { UserDbService } from '../../../collections/user-db/user-db.service';
import { Permissions } from '../../../models/constants/permissions.const';
import { isPermissionsArray } from '../../../models/validators/permissions.validator';
import { UserDbService } from '../../../collections/user-db/user-db.service.js';
import { Permissions } from '../../../models/constants/permissions.const.js';
import { isPermissionsArray } from '../../../models/validators/permissions.validator.js';
// This guard extends both the jwt authenticator and the guest authenticator
// The order matters here, because this results in the guest authenticator being used as a fallback

View File

@@ -1,7 +1,7 @@
import { Injectable } from '@nestjs/common';
import { HasFailed } from 'picsur-shared/dist/types/failable';
import { UserDbService } from '../../collections/user-db/user-db.service';
import { EUserBackend } from '../../database/entities/users/user.entity';
import { UserDbService } from '../../collections/user-db/user-db.service.js';
import { EUserBackend } from '../../database/entities/users/user.entity.js';
@Injectable()
export class GuestService {

View File

@@ -1,10 +1,10 @@
import { Logger, Module, OnModuleInit } from '@nestjs/common';
import { SchedulerRegistry } from '@nestjs/schedule';
import { ImageDBModule } from '../../collections/image-db/image-db.module';
import { RoleDbModule } from '../../collections/role-db/role-db.module';
import { EarlyConfigModule } from '../../config/early/early-config.module';
import { HostConfigService } from '../../config/early/host.config.service';
import { DemoManagerService } from './demo.service';
import { ImageDBModule } from '../../collections/image-db/image-db.module.js';
import { RoleDbModule } from '../../collections/role-db/role-db.module.js';
import { EarlyConfigModule } from '../../config/early/early-config.module.js';
import { HostConfigService } from '../../config/early/host.config.service.js';
import { DemoManagerService } from './demo.service.js';
@Module({
imports: [ImageDBModule, EarlyConfigModule, RoleDbModule],

View File

@@ -1,7 +1,7 @@
import { Injectable, Logger } from '@nestjs/common';
import { ImageDBService } from '../../collections/image-db/image-db.service';
import { RoleDbService } from '../../collections/role-db/role-db.service';
import { Permission } from '../../models/constants/permissions.const';
import { ImageDBService } from '../../collections/image-db/image-db.service.js';
import { RoleDbService } from '../../collections/role-db/role-db.service.js';
import { Permission } from '../../models/constants/permissions.const.js';
@Injectable()
export class DemoManagerService {

View File

@@ -2,20 +2,20 @@ import { Injectable } from '@nestjs/common';
import ms from 'ms';
import { ImageRequestParams } from 'picsur-shared/dist/dto/api/image.dto';
import {
FileType,
SupportedFileTypeCategory,
FileType,
SupportedFileTypeCategory,
} from 'picsur-shared/dist/dto/mimes.dto';
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
AsyncFailable,
Fail,
FT,
HasFailed,
} from 'picsur-shared/dist/types/failable';
import { SharpOptions } from 'sharp';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service';
import { SharpWrapper } from '../../workers/sharp.wrapper';
import { ImageResult } from './imageresult';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service.js';
import { SharpWrapper } from '../../workers/sharp.wrapper.js';
import { ImageResult } from './imageresult.js';
@Injectable()
export class ImageConverterService {

View File

@@ -3,14 +3,14 @@ import { Interval } from '@nestjs/schedule';
import ms from 'ms';
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
import { HasFailed } from 'picsur-shared/dist/types/failable';
import { ImageDBModule } from '../../collections/image-db/image-db.module';
import { ImageDBService } from '../../collections/image-db/image-db.service';
import { ImageFileDBService } from '../../collections/image-db/image-file-db.service';
import { PreferenceDbModule } from '../../collections/preference-db/preference-db.module';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service';
import { ImageConverterService } from './image-converter.service';
import { ImageProcessorService } from './image-processor.service';
import { ImageManagerService } from './image.service';
import { ImageDBModule } from '../../collections/image-db/image-db.module.js';
import { ImageDBService } from '../../collections/image-db/image-db.service.js';
import { ImageFileDBService } from '../../collections/image-db/image-file-db.service.js';
import { PreferenceDbModule } from '../../collections/preference-db/preference-db.module.js';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service.js';
import { ImageConverterService } from './image-converter.service.js';
import { ImageProcessorService } from './image-processor.service.js';
import { ImageManagerService } from './image.service.js';
@Module({
imports: [ImageDBModule, PreferenceDbModule],

View File

@@ -1,19 +1,19 @@
import { Injectable } from '@nestjs/common';
import {
FileType,
ImageFileType,
SupportedFileTypeCategory,
FileType,
ImageFileType,
SupportedFileTypeCategory,
} from 'picsur-shared/dist/dto/mimes.dto';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
AsyncFailable,
Fail,
FT,
HasFailed,
} from 'picsur-shared/dist/types/failable';
import { ParseFileType } from 'picsur-shared/dist/util/parse-mime';
import { ImageConverterService } from './image-converter.service';
import { ImageResult } from './imageresult';
import { ImageConverterService } from './image-converter.service.js';
import { ImageResult } from './imageresult.js';
@Injectable()
export class ImageProcessorService {

View File

@@ -4,33 +4,33 @@ import { fileTypeFromBuffer, FileTypeResult } from 'file-type';
import { ImageRequestParams } from 'picsur-shared/dist/dto/api/image.dto';
import { ImageEntryVariant } from 'picsur-shared/dist/dto/image-entry-variant.enum';
import {
AnimFileType,
FileType,
ImageFileType,
Mime2FileType,
AnimFileType,
FileType,
ImageFileType,
Mime2FileType,
} from 'picsur-shared/dist/dto/mimes.dto';
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
import { UsrPreference } from 'picsur-shared/dist/dto/usr-preferences.enum';
import {
AsyncFailable,
Fail,
FT,
HasFailed,
AsyncFailable,
Fail,
FT,
HasFailed,
} from 'picsur-shared/dist/types/failable';
import { FindResult } from 'picsur-shared/dist/types/find-result';
import { ParseFileType } from 'picsur-shared/dist/util/parse-mime';
import { IsQOI } from 'qoi-img';
import { ImageDBService } from '../../collections/image-db/image-db.service';
import { ImageFileDBService } from '../../collections/image-db/image-file-db.service';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service';
import { UsrPreferenceDbService } from '../../collections/preference-db/usr-preference-db.service';
import { EImageDerivativeBackend } from '../../database/entities/images/image-derivative.entity';
import { EImageFileBackend } from '../../database/entities/images/image-file.entity';
import { EImageBackend } from '../../database/entities/images/image.entity';
import { MutexFallBack } from '../../util/mutex-fallback';
import { ImageConverterService } from './image-converter.service';
import { ImageProcessorService } from './image-processor.service';
import { WebPInfo } from './webpinfo/webpinfo';
import { ImageDBService } from '../../collections/image-db/image-db.service.js';
import { ImageFileDBService } from '../../collections/image-db/image-file-db.service.js';
import { SysPreferenceDbService } from '../../collections/preference-db/sys-preference-db.service.js';
import { UsrPreferenceDbService } from '../../collections/preference-db/usr-preference-db.service.js';
import { EImageDerivativeBackend } from '../../database/entities/images/image-derivative.entity.js';
import { EImageFileBackend } from '../../database/entities/images/image-file.entity.js';
import { EImageBackend } from '../../database/entities/images/image.entity.js';
import { MutexFallBack } from '../../util/mutex-fallback.js';
import { ImageConverterService } from './image-converter.service.js';
import { ImageProcessorService } from './image-processor.service.js';
import { WebPInfo } from './webpinfo/webpinfo.js';
@Injectable()
export class ImageManagerService {

View File

@@ -32,7 +32,7 @@ THE SOFTWARE.
import thunks from 'thunks';
import { StreamParserWritable } from './stream-parser';
import { StreamParserWritable } from './stream-parser.js';
const { thunk } = thunks;

View File

@@ -1,11 +1,11 @@
import { Logger, Module, OnModuleInit } from '@nestjs/common';
import { SchedulerRegistry } from '@nestjs/schedule';
import { ImageDBModule } from '../../collections/image-db/image-db.module';
import { SystemStateDbModule } from '../../collections/system-state-db/system-state-db.module';
import { UserDbModule } from '../../collections/user-db/user-db.module';
import { LateConfigModule } from '../../config/late/late-config.module';
import { UsageConfigService } from '../../config/late/usage.config.service';
import { UsageService } from './usage.service';
import { ImageDBModule } from '../../collections/image-db/image-db.module.js';
import { SystemStateDbModule } from '../../collections/system-state-db/system-state-db.module.js';
import { UserDbModule } from '../../collections/user-db/user-db.module.js';
import { LateConfigModule } from '../../config/late/late-config.module.js';
import { UsageConfigService } from '../../config/late/usage.config.service.js';
import { UsageService } from './usage.service.js';
@Module({
imports: [LateConfigModule, SystemStateDbModule, ImageDBModule, UserDbModule],

View File

@@ -4,11 +4,11 @@ import fetch from 'node-fetch';
import * as os from 'os';
import { FallbackIfFailed, HasFailed } from 'picsur-shared/dist/types/failable';
import { UUIDRegex } from 'picsur-shared/dist/util/common-regex';
import { ImageDBService } from '../../collections/image-db/image-db.service';
import { SystemStateDbService } from '../../collections/system-state-db/system-state-db.service';
import { UserDbService } from '../../collections/user-db/user-db.service';
import { HostConfigService } from '../../config/early/host.config.service';
import { UsageConfigService } from '../../config/late/usage.config.service';
import { ImageDBService } from '../../collections/image-db/image-db.service.js';
import { SystemStateDbService } from '../../collections/system-state-db/system-state-db.service.js';
import { UserDbService } from '../../collections/user-db/user-db.service.js';
import { HostConfigService } from '../../config/early/host.config.service.js';
import { UsageConfigService } from '../../config/late/usage.config.service.js';
interface UsageData {
id?: string;

View File

@@ -1,5 +1,5 @@
import tuple from 'picsur-shared/dist/types/tuple';
import { Permission, Permissions, PermissionsList } from './permissions.const';
import { Permission, Permissions, PermissionsList } from './permissions.const.js';
// Config

View File

@@ -1,6 +1,6 @@
import { FastifyRequest } from 'fastify';
import { EUser } from 'picsur-shared/dist/entities/user.entity';
import { Permissions } from '../constants/permissions.const';
import { Permissions } from '../constants/permissions.const.js';
// Add typing to FastifyRequest to make using the user object easier
export default interface AuthFastifyRequest extends FastifyRequest {

View File

@@ -1,5 +1,5 @@
import { EUser } from 'picsur-shared/dist/entities/user.entity';
import { EUserBackend } from '../../database/entities/users/user.entity';
import { EUserBackend } from '../../database/entities/users/user.entity.js';
export function EUserBackend2EUser(eUser: EUserBackend): EUser {
if (eUser.hashed_password === undefined) return eUser as EUser;

View File

@@ -1,5 +1,5 @@
import { isPermissionsArray as isPArr } from 'picsur-shared/dist/validators/permissions.validator';
import { Permissions, PermissionsList } from '../constants/permissions.const';
import { Permissions, PermissionsList } from '../constants/permissions.const.js';
export function isPermissionsArray(value: any): value is Permissions {
return isPArr(value, PermissionsList);

View File

@@ -1,11 +1,11 @@
import { Module } from '@nestjs/common';
import { ApiKeysModule } from './apikeys/apikeys.module';
import { ExperimentModule } from './experiment/experiment.module';
import { InfoModule } from './info/info.module';
import { PrefModule } from './pref/pref.module';
import { RolesApiModule } from './roles/roles.module';
import { UsageApiModule } from './usage/usage.module';
import { UserApiModule } from './user/user.module';
import { ApiKeysModule } from './apikeys/apikeys.module.js';
import { ExperimentModule } from './experiment/experiment.module.js';
import { InfoModule } from './info/info.module.js';
import { PrefModule } from './pref/pref.module.js';
import { RolesApiModule } from './roles/roles.module.js';
import { UsageApiModule } from './usage/usage.module.js';
import { UserApiModule } from './user/user.module.js';
@Module({
imports: [

View File

@@ -1,25 +1,25 @@
import { Body, Controller, Post } from '@nestjs/common';
import {
ApiKeyCreateResponse,
ApiKeyDeleteRequest,
ApiKeyDeleteResponse,
ApiKeyInfoRequest,
ApiKeyInfoResponse,
ApiKeyListRequest,
ApiKeyListResponse,
ApiKeyUpdateRequest,
ApiKeyUpdateResponse,
ApiKeyCreateResponse,
ApiKeyDeleteRequest,
ApiKeyDeleteResponse,
ApiKeyInfoRequest,
ApiKeyInfoResponse,
ApiKeyListRequest,
ApiKeyListResponse,
ApiKeyUpdateRequest,
ApiKeyUpdateResponse,
} from 'picsur-shared/dist/dto/api/apikeys.dto';
import { Permission } from 'picsur-shared/dist/dto/permissions.enum';
import { ThrowIfFailed } from 'picsur-shared/dist/types/failable';
import { ApiKeyDbService } from '../../../collections/apikey-db/apikey-db.service';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator';
import { ApiKeyDbService } from '../../../collections/apikey-db/apikey-db.service.js';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator.js';
import {
HasPermission,
RequiredPermissions,
} from '../../../decorators/permissions.decorator';
import { ReqUserID } from '../../../decorators/request-user.decorator';
import { Returns } from '../../../decorators/returns.decorator';
HasPermission,
RequiredPermissions,
} from '../../../decorators/permissions.decorator.js';
import { ReqUserID } from '../../../decorators/request-user.decorator.js';
import { Returns } from '../../../decorators/returns.decorator.js';
@Controller('api/apikeys')
@RequiredPermissions(Permission.ApiKey)

View File

@@ -1,6 +1,6 @@
import { Module } from '@nestjs/common';
import { ApiKeyDbModule } from '../../../collections/apikey-db/apikey-db.module';
import { ApiKeysController } from './apikeys.controller';
import { ApiKeyDbModule } from '../../../collections/apikey-db/apikey-db.module.js';
import { ApiKeysController } from './apikeys.controller.js';
@Module({
imports: [ApiKeyDbModule],

View File

@@ -1,5 +1,5 @@
import { Controller } from '@nestjs/common';
import { NoPermissions } from '../../../decorators/permissions.decorator';
import { NoPermissions } from '../../../decorators/permissions.decorator.js';
@Controller('api/experiment')
@NoPermissions()
export class ExperimentController {

View File

@@ -1,5 +1,5 @@
import { Module } from '@nestjs/common';
import { ExperimentController } from './experiment.controller';
import { ExperimentController } from './experiment.controller.js';
// This is comletely useless module, but is used for testing
// TODO: remove when out of beta

View File

@@ -1,23 +1,23 @@
import { Controller, Get } from '@nestjs/common';
import {
AllFormatsResponse,
AllPermissionsResponse,
InfoResponse,
AllFormatsResponse,
AllPermissionsResponse,
InfoResponse,
} from 'picsur-shared/dist/dto/api/info.dto';
import {
FileType2Ext,
FileType2Mime,
SupportedAnimFileTypes,
SupportedImageFileTypes,
FileType2Ext,
FileType2Mime,
SupportedAnimFileTypes,
SupportedImageFileTypes,
} from 'picsur-shared/dist/dto/mimes.dto';
import { TrackingState } from 'picsur-shared/dist/dto/tracking-state.enum';
import { FallbackIfFailed } from 'picsur-shared/dist/types/failable';
import { HostConfigService } from '../../../config/early/host.config.service';
import { InfoConfigService } from '../../../config/late/info.config.service';
import { UsageConfigService } from '../../../config/late/usage.config.service';
import { NoPermissions } from '../../../decorators/permissions.decorator';
import { Returns } from '../../../decorators/returns.decorator';
import { PermissionsList } from '../../../models/constants/permissions.const';
import { HostConfigService } from '../../../config/early/host.config.service.js';
import { InfoConfigService } from '../../../config/late/info.config.service.js';
import { UsageConfigService } from '../../../config/late/usage.config.service.js';
import { NoPermissions } from '../../../decorators/permissions.decorator.js';
import { Returns } from '../../../decorators/returns.decorator.js';
import { PermissionsList } from '../../../models/constants/permissions.const.js';
@Controller('api/info')
@NoPermissions()

View File

@@ -1,6 +1,6 @@
import { Module } from '@nestjs/common';
import { LateConfigModule } from '../../../config/late/late-config.module';
import { InfoController } from './info.controller';
import { LateConfigModule } from '../../../config/late/late-config.module.js';
import { InfoController } from './info.controller.js';
@Module({
imports: [LateConfigModule],

View File

@@ -1,7 +1,7 @@
import { Module } from '@nestjs/common';
import { PreferenceDbModule } from '../../../collections/preference-db/preference-db.module';
import { SysPrefController } from './sys-pref.controller';
import { UsrPrefController } from './usr-pref.controller';
import { PreferenceDbModule } from '../../../collections/preference-db/preference-db.module.js';
import { SysPrefController } from './sys-pref.controller.js';
import { UsrPrefController } from './usr-pref.controller.js';
@Module({
imports: [PreferenceDbModule],

View File

@@ -1,16 +1,16 @@
import { Body, Controller, Get, Logger, Param, Post } from '@nestjs/common';
import {
GetPreferenceResponse,
MultiplePreferencesResponse,
UpdatePreferenceRequest,
UpdatePreferenceResponse,
GetPreferenceResponse,
MultiplePreferencesResponse,
UpdatePreferenceRequest,
UpdatePreferenceResponse,
} from 'picsur-shared/dist/dto/api/pref.dto';
import { ThrowIfFailed } from 'picsur-shared/dist/types/failable';
import { SysPreferenceDbService } from '../../../collections/preference-db/sys-preference-db.service';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator';
import { RequiredPermissions } from '../../../decorators/permissions.decorator';
import { Returns } from '../../../decorators/returns.decorator';
import { Permission } from '../../../models/constants/permissions.const';
import { SysPreferenceDbService } from '../../../collections/preference-db/sys-preference-db.service.js';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator.js';
import { RequiredPermissions } from '../../../decorators/permissions.decorator.js';
import { Returns } from '../../../decorators/returns.decorator.js';
import { Permission } from '../../../models/constants/permissions.const.js';
@Controller('api/pref/sys')
@RequiredPermissions(Permission.SysPrefAdmin)

View File

@@ -1,17 +1,17 @@
import { Body, Controller, Get, Logger, Param, Post } from '@nestjs/common';
import {
GetPreferenceResponse,
MultiplePreferencesResponse,
UpdatePreferenceRequest,
UpdatePreferenceResponse,
GetPreferenceResponse,
MultiplePreferencesResponse,
UpdatePreferenceRequest,
UpdatePreferenceResponse,
} from 'picsur-shared/dist/dto/api/pref.dto';
import { ThrowIfFailed } from 'picsur-shared/dist/types/failable';
import { UsrPreferenceDbService } from '../../../collections/preference-db/usr-preference-db.service';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator';
import { RequiredPermissions } from '../../../decorators/permissions.decorator';
import { ReqUserID } from '../../../decorators/request-user.decorator';
import { Returns } from '../../../decorators/returns.decorator';
import { Permission } from '../../../models/constants/permissions.const';
import { UsrPreferenceDbService } from '../../../collections/preference-db/usr-preference-db.service.js';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator.js';
import { RequiredPermissions } from '../../../decorators/permissions.decorator.js';
import { ReqUserID } from '../../../decorators/request-user.decorator.js';
import { Returns } from '../../../decorators/returns.decorator.js';
import { Permission } from '../../../models/constants/permissions.const.js';
@Controller('api/pref/usr')
@RequiredPermissions(Permission.Settings)

View File

@@ -1,31 +1,31 @@
import { Body, Controller, Get, Logger, Post } from '@nestjs/common';
import {
RoleCreateRequest,
RoleCreateResponse,
RoleDeleteRequest,
RoleDeleteResponse,
RoleInfoRequest,
RoleInfoResponse,
RoleListResponse,
RoleUpdateRequest,
RoleUpdateResponse,
SpecialRolesResponse,
RoleCreateRequest,
RoleCreateResponse,
RoleDeleteRequest,
RoleDeleteResponse,
RoleInfoRequest,
RoleInfoResponse,
RoleListResponse,
RoleUpdateRequest,
RoleUpdateResponse,
SpecialRolesResponse,
} from 'picsur-shared/dist/dto/api/roles.dto';
import { FT, Fail, ThrowIfFailed } from 'picsur-shared/dist/types/failable';
import { RoleDbService } from '../../../collections/role-db/role-db.service';
import { UserDbService } from '../../../collections/user-db/user-db.service';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator';
import { RequiredPermissions } from '../../../decorators/permissions.decorator';
import { Returns } from '../../../decorators/returns.decorator';
import { Permission } from '../../../models/constants/permissions.const';
import { RoleDbService } from '../../../collections/role-db/role-db.service.js';
import { UserDbService } from '../../../collections/user-db/user-db.service.js';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator.js';
import { RequiredPermissions } from '../../../decorators/permissions.decorator.js';
import { Returns } from '../../../decorators/returns.decorator.js';
import { Permission } from '../../../models/constants/permissions.const.js';
import {
DefaultRolesList,
ImmutableRolesList,
RolePermissionsLocks,
SoulBoundRolesList,
UndeletableRolesList,
} from '../../../models/constants/roles.const';
import { isPermissionsArray } from '../../../models/validators/permissions.validator';
DefaultRolesList,
ImmutableRolesList,
RolePermissionsLocks,
SoulBoundRolesList,
UndeletableRolesList,
} from '../../../models/constants/roles.const.js';
import { isPermissionsArray } from '../../../models/validators/permissions.validator.js';
@Controller('api/roles')
@RequiredPermissions(Permission.RoleAdmin)

View File

@@ -1,7 +1,7 @@
import { Module } from '@nestjs/common';
import { RoleDbModule } from '../../../collections/role-db/role-db.module';
import { UserDbModule } from '../../../collections/user-db/user-db.module';
import { RolesController } from './roles.controller';
import { RoleDbModule } from '../../../collections/role-db/role-db.module.js';
import { UserDbModule } from '../../../collections/user-db/user-db.module.js';
import { RolesController } from './roles.controller.js';
@Module({
imports: [RoleDbModule, UserDbModule],

View File

@@ -1,10 +1,10 @@
import { Controller, Logger, Post, Req, Res } from '@nestjs/common';
import type { FastifyReply, FastifyRequest } from 'fastify';
import { FT, Fail, ThrowIfFailed } from 'picsur-shared/dist/types/failable';
import { UsageConfigService } from '../../../config/late/usage.config.service';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator';
import { NoPermissions } from '../../../decorators/permissions.decorator';
import { ReturnsAnything } from '../../../decorators/returns.decorator';
import { UsageConfigService } from '../../../config/late/usage.config.service.js';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator.js';
import { NoPermissions } from '../../../decorators/permissions.decorator.js';
import { ReturnsAnything } from '../../../decorators/returns.decorator.js';
@Controller('api/usage')
@NoPermissions()

View File

@@ -1,6 +1,6 @@
import { Module } from '@nestjs/common';
import { LateConfigModule } from '../../../config/late/late-config.module';
import { UsageController } from './usage.controller';
import { LateConfigModule } from '../../../config/late/late-config.module.js';
import { UsageController } from './usage.controller.js';
@Module({
imports: [LateConfigModule],

View File

@@ -1,29 +1,29 @@
import { Body, Controller, Get, Logger, Post } from '@nestjs/common';
import {
GetSpecialUsersResponse,
UserCreateRequest,
UserCreateResponse,
UserDeleteRequest,
UserDeleteResponse,
UserInfoRequest,
UserInfoResponse,
UserListRequest,
UserListResponse,
UserUpdateRequest,
UserUpdateResponse,
GetSpecialUsersResponse,
UserCreateRequest,
UserCreateResponse,
UserDeleteRequest,
UserDeleteResponse,
UserInfoRequest,
UserInfoResponse,
UserListRequest,
UserListResponse,
UserUpdateRequest,
UserUpdateResponse,
} from 'picsur-shared/dist/dto/api/user-manage.dto';
import { ThrowIfFailed } from 'picsur-shared/dist/types/failable';
import { UserDbService } from '../../../collections/user-db/user-db.service';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator';
import { RequiredPermissions } from '../../../decorators/permissions.decorator';
import { Returns } from '../../../decorators/returns.decorator';
import { Permission } from '../../../models/constants/permissions.const';
import { UserDbService } from '../../../collections/user-db/user-db.service.js';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator.js';
import { RequiredPermissions } from '../../../decorators/permissions.decorator.js';
import { Returns } from '../../../decorators/returns.decorator.js';
import { Permission } from '../../../models/constants/permissions.const.js';
import {
ImmutableUsersList,
LockedLoginUsersList,
UndeletableUsersList,
} from '../../../models/constants/special-users.const';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer';
ImmutableUsersList,
LockedLoginUsersList,
UndeletableUsersList,
} from '../../../models/constants/special-users.const.js';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer.js';
@Controller('api/user')
@RequiredPermissions(Permission.UserAdmin)

View File

@@ -1,27 +1,27 @@
import { Body, Controller, Get, Logger, Post } from '@nestjs/common';
import {
UserCheckNameRequest,
UserCheckNameResponse,
UserLoginResponse,
UserMePermissionsResponse,
UserMeResponse,
UserRegisterRequest,
UserRegisterResponse,
UserCheckNameRequest,
UserCheckNameResponse,
UserLoginResponse,
UserMePermissionsResponse,
UserMeResponse,
UserRegisterRequest,
UserRegisterResponse,
} from 'picsur-shared/dist/dto/api/user.dto';
import type { EUser } from 'picsur-shared/dist/entities/user.entity';
import { ThrowIfFailed } from 'picsur-shared/dist/types/failable';
import { UserDbService } from '../../../collections/user-db/user-db.service';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator';
import { UserDbService } from '../../../collections/user-db/user-db.service.js';
import { EasyThrottle } from '../../../decorators/easy-throttle.decorator.js';
import {
NoPermissions,
RequiredPermissions,
UseLocalAuth,
} from '../../../decorators/permissions.decorator';
import { ReqUser, ReqUserID } from '../../../decorators/request-user.decorator';
import { Returns } from '../../../decorators/returns.decorator';
import { AuthManagerService } from '../../../managers/auth/auth.service';
import { Permission } from '../../../models/constants/permissions.const';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer';
NoPermissions,
RequiredPermissions,
UseLocalAuth,
} from '../../../decorators/permissions.decorator.js';
import { ReqUser, ReqUserID } from '../../../decorators/request-user.decorator.js';
import { Returns } from '../../../decorators/returns.decorator.js';
import { AuthManagerService } from '../../../managers/auth/auth.service.js';
import { Permission } from '../../../models/constants/permissions.const.js';
import { EUserBackend2EUser } from '../../../models/transformers/user.transformer.js';
@Controller('api/user')
export class UserController {

View File

@@ -1,7 +1,7 @@
import { Module } from '@nestjs/common';
import { AuthManagerModule } from '../../../managers/auth/auth.module';
import { UserAdminController } from './user-manage.controller';
import { UserController } from './user.controller';
import { AuthManagerModule } from '../../../managers/auth/auth.module.js';
import { UserAdminController } from './user-manage.controller.js';
import { UserController } from './user.controller.js';
@Module({
imports: [AuthManagerModule],

View File

@@ -1,42 +1,42 @@
import {
Body,
Controller,
Get,
Logger,
Param,
Post,
Res,
Body,
Controller,
Get,
Logger,
Param,
Post,
Res,
} from '@nestjs/common';
import type { FastifyReply } from 'fastify';
import {
ImageDeleteRequest,
ImageDeleteResponse,
ImageDeleteWithKeyRequest,
ImageDeleteWithKeyResponse,
ImageListRequest,
ImageListResponse,
ImageUpdateRequest,
ImageUpdateResponse,
ImageUploadResponse,
ImageDeleteRequest,
ImageDeleteResponse,
ImageDeleteWithKeyRequest,
ImageDeleteWithKeyResponse,
ImageListRequest,
ImageListResponse,
ImageUpdateRequest,
ImageUpdateResponse,
ImageUploadResponse,
} from 'picsur-shared/dist/dto/api/image-manage.dto';
import { Permission } from 'picsur-shared/dist/dto/permissions.enum';
import {
FT,
Fail,
HasFailed,
ThrowIfFailed,
FT,
Fail,
HasFailed,
ThrowIfFailed,
} from 'picsur-shared/dist/types/failable';
import { EasyThrottle } from '../../decorators/easy-throttle.decorator';
import { PostFiles } from '../../decorators/multipart/multipart.decorator';
import type { FileIterator } from '../../decorators/multipart/postfiles.pipe';
import { EasyThrottle } from '../../decorators/easy-throttle.decorator.js';
import { PostFiles } from '../../decorators/multipart/multipart.decorator.js';
import type { FileIterator } from '../../decorators/multipart/postfiles.pipe.js';
import {
HasPermission,
RequiredPermissions,
} from '../../decorators/permissions.decorator';
import { ReqUserID } from '../../decorators/request-user.decorator';
import { Returns } from '../../decorators/returns.decorator';
import { ImageManagerService } from '../../managers/image/image.service';
import { GetNextAsync } from '../../util/iterator';
HasPermission,
RequiredPermissions,
} from '../../decorators/permissions.decorator.js';
import { ReqUserID } from '../../decorators/request-user.decorator.js';
import { Returns } from '../../decorators/returns.decorator.js';
import { ImageManagerService } from '../../managers/image/image.service.js';
import { GetNextAsync } from '../../util/iterator.js';
@Controller('api/image')
@RequiredPermissions(Permission.ImageUpload)

View File

@@ -2,26 +2,26 @@ import { Controller, Get, Head, Logger, Query, Res } from '@nestjs/common';
import { SkipThrottle } from '@nestjs/throttler';
import type { FastifyReply } from 'fastify';
import {
ImageMetaResponse,
ImageRequestParams,
ImageMetaResponse,
ImageRequestParams,
} from 'picsur-shared/dist/dto/api/image.dto';
import { ImageEntryVariant } from 'picsur-shared/dist/dto/image-entry-variant.enum';
import { FileType2Mime } from 'picsur-shared/dist/dto/mimes.dto';
import {
FT,
IsFailure,
ThrowIfFailed,
FT,
IsFailure,
ThrowIfFailed,
} from 'picsur-shared/dist/types/failable';
import { UserDbService } from '../../collections/user-db/user-db.service';
import { ImageFullIdParam } from '../../decorators/image-id/image-full-id.decorator';
import { ImageIdParam } from '../../decorators/image-id/image-id.decorator';
import { RequiredPermissions } from '../../decorators/permissions.decorator';
import { Returns } from '../../decorators/returns.decorator';
import { ImageManagerService } from '../../managers/image/image.service';
import type { ImageFullId } from '../../models/constants/image-full-id.const';
import { Permission } from '../../models/constants/permissions.const';
import { EUserBackend2EUser } from '../../models/transformers/user.transformer';
import { BrandMessageType, GetBrandMessage } from '../../util/branding';
import { UserDbService } from '../../collections/user-db/user-db.service.js';
import { ImageFullIdParam } from '../../decorators/image-id/image-full-id.decorator.js';
import { ImageIdParam } from '../../decorators/image-id/image-id.decorator.js';
import { RequiredPermissions } from '../../decorators/permissions.decorator.js';
import { Returns } from '../../decorators/returns.decorator.js';
import { ImageManagerService } from '../../managers/image/image.service.js';
import type { ImageFullId } from '../../models/constants/image-full-id.const.js';
import { Permission } from '../../models/constants/permissions.const.js';
import { EUserBackend2EUser } from '../../models/transformers/user.transformer.js';
import { BrandMessageType, GetBrandMessage } from '../../util/branding.js';
// This is the only controller with CORS enabled
@Controller('i')

View File

@@ -1,9 +1,9 @@
import { Module } from '@nestjs/common';
import { UserDbModule } from '../../collections/user-db/user-db.module';
import { DecoratorsModule } from '../../decorators/decorators.module';
import { ImageManagerModule } from '../../managers/image/image-manager.module';
import { ImageManageController } from './image-manage.controller';
import { ImageController } from './image.controller';
import { UserDbModule } from '../../collections/user-db/user-db.module.js';
import { DecoratorsModule } from '../../decorators/decorators.module.js';
import { ImageManagerModule } from '../../managers/image/image-manager.module.js';
import { ImageManageController } from './image-manage.controller.js';
import { ImageController } from './image.controller.js';
@Module({
imports: [ImageManagerModule, UserDbModule, DecoratorsModule],

View File

@@ -1,6 +1,6 @@
import { Module } from '@nestjs/common';
import { PicsurApiModule } from './api/api.module';
import { ImageModule } from './image/image.module';
import { PicsurApiModule } from './api/api.module.js';
import { ImageModule } from './image/image.module.js';
@Module({
imports: [PicsurApiModule, ImageModule],

View File

@@ -1,7 +1,7 @@
import { readFile } from 'fs/promises';
import { resolve } from 'path';
import { AsyncFailable, Fail, FT } from 'picsur-shared/dist/types/failable';
import { PackageRoot } from '../config/config.static';
import { PackageRoot } from '../config/config.static.js';
export const BrandingPath = resolve(PackageRoot, '../branding');

View File

@@ -18,8 +18,8 @@ import {
SharpWorkerResultMessage,
SharpWorkerSendMessage,
SupportedSharpWorkerFunctions,
} from './sharp/sharp.message';
import { SharpResult } from './sharp/universal-sharp';
} from './sharp/sharp.message.js';
import { SharpResult } from './sharp/universal-sharp.js';
const moduleURL = new URL(import.meta.url);
const __dirname = dirname(moduleURL.pathname);

View File

@@ -1,6 +1,6 @@
import { FileType } from 'picsur-shared/dist/dto/mimes.dto';
import { Sharp, SharpOptions } from 'sharp';
import { SharpResult } from './universal-sharp';
import { SharpResult } from './universal-sharp.js';
type MapSharpFunctions<T extends keyof Sharp> = T extends any
? Sharp[T] extends (...args: any) => any

View File

@@ -7,8 +7,8 @@ import {
SharpWorkerOperationMessage,
SharpWorkerRecieveMessage,
SharpWorkerSendMessage,
} from './sharp.message';
import { UniversalSharpIn, UniversalSharpOut } from './universal-sharp';
} from './sharp.message.js';
import { UniversalSharpIn, UniversalSharpOut } from './universal-sharp.js';
export class SharpWorker {
private startTime = 0;

View File

@@ -4,7 +4,7 @@
"exclude": ["node_modules", "dist", "test", "**/*spec.ts"],
"compilerOptions": {
"lib": ["es2022"],
"module": "ES2022",
"module": "NodeNext",
"target": "es2022",
"outDir": "./dist",