Add endpoint to upload application file (#17270)

As title
This commit is contained in:
martmull
2026-01-20 15:10:34 +01:00
committed by GitHub
parent 801878cb2b
commit 02a181a49f
24 changed files with 302 additions and 39 deletions
@@ -3,8 +3,7 @@ import { Args, Mutation, Resolver } from '@nestjs/graphql';
import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs';
import { PermissionFlagType } from 'twenty-shared/constants';
import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { FileFolder } from 'twenty-shared/types';
import type { FileUpload } from 'graphql-upload/processRequest.mjs';
@@ -5,8 +5,7 @@ import DOMPurify from 'dompurify';
import FileType from 'file-type';
import sharp from 'sharp';
import { v4 } from 'uuid';
import { type FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { type FileFolder } from 'twenty-shared/types';
import { settings } from 'src/engine/constants/settings';
import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service';
@@ -1,17 +1,7 @@
import { registerEnumType } from '@nestjs/graphql';
import { type KebabCase } from 'type-fest';
export enum FileFolder {
ProfilePicture = 'profile-picture',
WorkspaceLogo = 'workspace-logo',
Attachment = 'attachment',
PersonPicture = 'person-picture',
ServerlessFunction = 'serverless-function',
ServerlessFunctionToDelete = 'serverless-function-to-delete',
File = 'file',
AgentChat = 'agent-chat',
}
import { FileFolder } from 'twenty-shared/types';
registerEnumType(FileFolder, {
name: 'FileFolder',
@@ -46,6 +36,18 @@ export const fileFolderConfigs: Record<FileFolder, FileFolderConfig> = {
[FileFolder.AgentChat]: {
ignoreExpirationToken: false,
},
[FileFolder.Functions]: {
ignoreExpirationToken: false,
},
[FileFolder.FrontComponents]: {
ignoreExpirationToken: false,
},
[FileFolder.Assets]: {
ignoreExpirationToken: true,
},
[FileFolder.SourceCode]: {
ignoreExpirationToken: false,
},
};
export type AllowedFolders = KebabCase<keyof typeof FileFolder>;
@@ -3,8 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm';
import { extractFolderPathFilenameAndTypeOrThrow } from 'twenty-shared/utils';
import { Repository } from 'typeorm';
import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { FileFolder } from 'twenty-shared/types';
import { type FileDTO } from 'src/engine/core-modules/file/dtos/file.dto';
import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity';
@@ -1,6 +1,6 @@
import { BadRequestException } from '@nestjs/common';
import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { FileFolder } from 'twenty-shared/types';
import { checkFileFolder } from 'src/engine/core-modules/file/utils/check-file-folder.utils';
@@ -1,4 +1,4 @@
import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { FileFolder } from 'twenty-shared/types';
import { checkFilename } from 'src/engine/core-modules/file/utils/check-file-name.utils';
@@ -1,4 +1,4 @@
import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { FileFolder } from 'twenty-shared/types';
import { checkFilePath } from 'src/engine/core-modules/file/utils/check-file-path.utils';
@@ -1,9 +1,8 @@
import { BadRequestException } from '@nestjs/common';
import {
type AllowedFolders,
FileFolder,
} from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { FileFolder } from 'twenty-shared/types';
import { type AllowedFolders } from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { kebabCase } from 'src/utils/kebab-case';
@@ -1,9 +1,8 @@
import { BadRequestException } from '@nestjs/common';
import {
type AllowedFolders,
FileFolder,
} from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { FileFolder } from 'twenty-shared/types';
import { type AllowedFolders } from 'src/engine/core-modules/file/interfaces/file-folder.interface';
import { kebabCase } from 'src/utils/kebab-case';
import { settings } from 'src/engine/constants/settings';