fix: update dependencies to latest
This commit is contained in:
@ -4,18 +4,20 @@ import dotenv from 'dotenv'
|
||||
import fastify from 'fastify'
|
||||
import fastifyCors from '@fastify/cors'
|
||||
import fastifySwagger from '@fastify/swagger'
|
||||
import fastifySwaggerUI from '@fastify/swagger-ui'
|
||||
import fastifyHelmet from '@fastify/helmet'
|
||||
import fastifyRateLimit from '@fastify/rate-limit'
|
||||
import fastifySensible from '@fastify/sensible'
|
||||
import fastifyStatic from '@fastify/static'
|
||||
import { readPackage } from 'read-pkg'
|
||||
|
||||
import { services } from './services/index.js'
|
||||
import { swaggerOptions } from './tools/configurations/swaggerOptions.js'
|
||||
import { UPLOADS_URL } from './tools/configurations/index.js'
|
||||
import { UPLOADS_URL } from './tools/configurations.js'
|
||||
|
||||
dotenv.config()
|
||||
const packageJSON = await readPackage()
|
||||
export const application = fastify({
|
||||
logger: process.env.NODE_ENV === 'development',
|
||||
logger: process.env['NODE_ENV'] === 'development',
|
||||
ajv: {
|
||||
customOptions: {
|
||||
strict: 'log',
|
||||
@ -38,5 +40,28 @@ await application.register(fastifyStatic, {
|
||||
root: fileURLToPath(UPLOADS_URL),
|
||||
prefix: '/uploads/'
|
||||
})
|
||||
await application.register(fastifySwagger, swaggerOptions)
|
||||
await application.register(fastifySwagger, {
|
||||
openapi: {
|
||||
info: {
|
||||
title: packageJSON.name,
|
||||
description: packageJSON.description,
|
||||
version: packageJSON.version
|
||||
},
|
||||
tags: [{ name: 'users' }, { name: 'guilds' }, { name: 'messages' }],
|
||||
components: {
|
||||
securitySchemes: {
|
||||
apiKeyAuth: {
|
||||
type: 'apiKey',
|
||||
name: 'X-API-KEY',
|
||||
in: 'header'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
hideUntagged: true
|
||||
})
|
||||
await application.register(fastifySwaggerUI, {
|
||||
routePrefix: '/documentation',
|
||||
staticCSP: true
|
||||
})
|
||||
await application.register(services)
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { application } from './application.js'
|
||||
import { HOST, PORT } from './tools/configurations/index.js'
|
||||
import { HOST, PORT } from './tools/configurations.js'
|
||||
|
||||
const address = await application.listen({
|
||||
port: PORT,
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { FastifyPluginAsync } from 'fastify'
|
||||
import type { FastifyPluginAsync } from 'fastify'
|
||||
|
||||
import { uploadsService } from './uploads/index.js'
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import { Type } from '@sinclair/typebox'
|
||||
|
||||
import { fastifyErrors } from '../../../models/utils.js'
|
||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||
import type { DeleteParameters } from '../../../tools/utils/deleteUploadedFile.js'
|
||||
import {
|
||||
DeleteParameters,
|
||||
deleteParameters,
|
||||
deleteUploadedFile
|
||||
} from '../../../tools/utils/deleteUploadedFile.js'
|
||||
|
@ -1,7 +1,8 @@
|
||||
import path from 'node:path'
|
||||
|
||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import { Static, Type } from '@sinclair/typebox'
|
||||
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import type { Static } from '@sinclair/typebox'
|
||||
import { Type } from '@sinclair/typebox'
|
||||
|
||||
import { fastifyErrors } from '../../../models/utils.js'
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { Type } from '@sinclair/typebox'
|
||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import fastifyMultipart from '@fastify/multipart'
|
||||
|
||||
import { fastifyErrors } from '../../../models/utils.js'
|
||||
@ -7,7 +7,7 @@ import { uploadFile } from '../../../tools/utils/uploadFile.js'
|
||||
import {
|
||||
MAXIMUM_IMAGE_SIZE,
|
||||
SUPPORTED_IMAGE_MIMETYPE
|
||||
} from '../../../tools/configurations/index.js'
|
||||
} from '../../../tools/configurations.js'
|
||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||
|
||||
const postServiceSchema: FastifySchema = {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { FastifyPluginAsync } from 'fastify'
|
||||
import type { FastifyPluginAsync } from 'fastify'
|
||||
|
||||
import { deleteGuildsUploadsService } from './guilds/delete.js'
|
||||
import { getGuildsUploadsService } from './guilds/get.js'
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import { Type } from '@sinclair/typebox'
|
||||
|
||||
import { fastifyErrors } from '../../../models/utils.js'
|
||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||
import type { DeleteParameters } from '../../../tools/utils/deleteUploadedFile.js'
|
||||
import {
|
||||
DeleteParameters,
|
||||
deleteParameters,
|
||||
deleteUploadedFile
|
||||
} from '../../../tools/utils/deleteUploadedFile.js'
|
||||
|
@ -1,7 +1,8 @@
|
||||
import path from 'node:path'
|
||||
|
||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import { Static, Type } from '@sinclair/typebox'
|
||||
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import type { Static } from '@sinclair/typebox'
|
||||
import { Type } from '@sinclair/typebox'
|
||||
|
||||
import { fastifyErrors } from '../../../models/utils.js'
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { Type } from '@sinclair/typebox'
|
||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import fastifyMultipart from '@fastify/multipart'
|
||||
|
||||
import { fastifyErrors } from '../../../models/utils.js'
|
||||
import { uploadFile } from '../../../tools/utils/uploadFile.js'
|
||||
import { MAXIMUM_IMAGE_SIZE } from '../../../tools/configurations/index.js'
|
||||
import { MAXIMUM_IMAGE_SIZE } from '../../../tools/configurations.js'
|
||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||
|
||||
const postServiceSchema: FastifySchema = {
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import { Type } from '@sinclair/typebox'
|
||||
|
||||
import { fastifyErrors } from '../../../models/utils.js'
|
||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||
import type { DeleteParameters } from '../../../tools/utils/deleteUploadedFile.js'
|
||||
import {
|
||||
DeleteParameters,
|
||||
deleteParameters,
|
||||
deleteUploadedFile
|
||||
} from '../../../tools/utils/deleteUploadedFile.js'
|
||||
|
@ -1,7 +1,8 @@
|
||||
import path from 'node:path'
|
||||
|
||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import { Static, Type } from '@sinclair/typebox'
|
||||
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import type { Static } from '@sinclair/typebox'
|
||||
import { Type } from '@sinclair/typebox'
|
||||
|
||||
import { fastifyErrors } from '../../../models/utils.js'
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { Type } from '@sinclair/typebox'
|
||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||
import fastifyMultipart from '@fastify/multipart'
|
||||
|
||||
import { fastifyErrors } from '../../../models/utils.js'
|
||||
@ -7,7 +7,7 @@ import { uploadFile } from '../../../tools/utils/uploadFile.js'
|
||||
import {
|
||||
MAXIMUM_IMAGE_SIZE,
|
||||
SUPPORTED_IMAGE_MIMETYPE
|
||||
} from '../../../tools/configurations/index.js'
|
||||
} from '../../../tools/configurations.js'
|
||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||
|
||||
const postServiceSchema: FastifySchema = {
|
||||
|
@ -4,10 +4,10 @@ import dotenv from 'dotenv'
|
||||
|
||||
dotenv.config()
|
||||
|
||||
export const PORT = parseInt(process.env.PORT ?? '8000', 10)
|
||||
export const HOST = process.env.HOST ?? '0.0.0.0'
|
||||
export const API_URL = process.env.API_URL ?? `http://${HOST}:${PORT}`
|
||||
export const API_KEY = process.env.API_KEY ?? 'apiKeySecret'
|
||||
export const PORT = parseInt(process.env['PORT'] ?? '8000', 10)
|
||||
export const HOST = process.env['HOST'] ?? '0.0.0.0'
|
||||
export const API_URL = process.env['API_URL'] ?? `http://${HOST}:${PORT}`
|
||||
export const API_KEY = process.env['API_KEY'] ?? 'apiKeySecret'
|
||||
|
||||
export const SRC_URL = new URL('../../', import.meta.url)
|
||||
export const ROOT_URL = new URL('../', SRC_URL)
|
@ -1,31 +0,0 @@
|
||||
import dotenv from 'dotenv'
|
||||
import { readPackage } from 'read-pkg'
|
||||
import { FastifyDynamicSwaggerOptions } from '@fastify/swagger'
|
||||
|
||||
dotenv.config()
|
||||
|
||||
const packageJSON = await readPackage()
|
||||
|
||||
export const swaggerOptions: FastifyDynamicSwaggerOptions = {
|
||||
routePrefix: '/documentation',
|
||||
openapi: {
|
||||
info: {
|
||||
title: packageJSON.name,
|
||||
description: packageJSON.description,
|
||||
version: packageJSON.version
|
||||
},
|
||||
tags: [{ name: 'guilds' }, { name: 'messages' }, { name: 'users' }],
|
||||
components: {
|
||||
securitySchemes: {
|
||||
apiKeyAuth: {
|
||||
type: 'apiKey',
|
||||
name: 'X-API-KEY',
|
||||
in: 'header'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
exposeRoute: true,
|
||||
staticCSP: true,
|
||||
hideUntagged: true
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
import fastifyPlugin from 'fastify-plugin'
|
||||
import httpErrors from 'http-errors'
|
||||
|
||||
import { API_KEY } from '../configurations/index.js'
|
||||
import { API_KEY } from '../configurations.js'
|
||||
|
||||
const { Unauthorized, Forbidden } = httpErrors
|
||||
|
||||
|
@ -1,11 +1,12 @@
|
||||
import { IncomingMessage, Server, ServerResponse } from 'node:http'
|
||||
import type { IncomingMessage, Server, ServerResponse } from 'node:http'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import fs from 'node:fs'
|
||||
|
||||
import { Static, Type } from '@sinclair/typebox'
|
||||
import {
|
||||
import type { Static } from '@sinclair/typebox'
|
||||
import { Type } from '@sinclair/typebox'
|
||||
import type {
|
||||
FastifyBaseLogger,
|
||||
FastifyInstance,
|
||||
FastifyLoggerInstance,
|
||||
FastifyReply,
|
||||
FastifyRequest,
|
||||
FastifyTypeProviderDefault
|
||||
@ -22,10 +23,10 @@ export type DeleteParameters = Static<typeof deleteParameters>
|
||||
export interface DeleteUploadedFileOptions {
|
||||
folder: 'guilds' | 'messages' | 'users'
|
||||
fastify: FastifyInstance<
|
||||
Server,
|
||||
Server<typeof IncomingMessage, typeof ServerResponse>,
|
||||
IncomingMessage,
|
||||
ServerResponse,
|
||||
FastifyLoggerInstance,
|
||||
ServerResponse<IncomingMessage>,
|
||||
FastifyBaseLogger,
|
||||
FastifyTypeProviderDefault
|
||||
>
|
||||
request: FastifyRequest<{ Params: DeleteParameters }>
|
||||
|
@ -2,10 +2,10 @@ import fs from 'node:fs'
|
||||
import { URL } from 'node:url'
|
||||
import { randomUUID } from 'node:crypto'
|
||||
|
||||
import { FastifyInstance, FastifyRequest } from 'fastify'
|
||||
import { Multipart } from '@fastify/multipart'
|
||||
import type { FastifyInstance, FastifyRequest } from 'fastify'
|
||||
import type { SavedMultipartFile } from '@fastify/multipart'
|
||||
|
||||
import { API_URL, ROOT_URL } from '../configurations/index.js'
|
||||
import { API_URL, ROOT_URL } from '../configurations.js'
|
||||
|
||||
export interface UploadFileOptions {
|
||||
folderInUploadsFolder: 'guilds' | 'messages' | 'users'
|
||||
@ -33,7 +33,7 @@ export const uploadFile = async (
|
||||
maximumFileSize,
|
||||
supportedFileMimetype
|
||||
} = options
|
||||
let files: Multipart[] = []
|
||||
let files: SavedMultipartFile[] = []
|
||||
try {
|
||||
files = await request.saveRequestFiles({
|
||||
limits: {
|
||||
@ -46,10 +46,10 @@ export const uploadFile = async (
|
||||
`File should be less than ${maximumFileSize}mb.`
|
||||
)
|
||||
}
|
||||
if (files.length !== 1) {
|
||||
const file = files[0]
|
||||
if (files.length !== 1 || file == null) {
|
||||
throw fastify.httpErrors.badRequest('You must upload at most one file.')
|
||||
}
|
||||
const file = files[0]
|
||||
if (
|
||||
supportedFileMimetype != null &&
|
||||
!supportedFileMimetype.includes(file.mimetype)
|
||||
@ -60,6 +60,9 @@ export const uploadFile = async (
|
||||
}
|
||||
const splitedMimetype = file.mimetype.split('/')
|
||||
const fileExtension = splitedMimetype[1]
|
||||
if (fileExtension == null) {
|
||||
throw fastify.httpErrors.badRequest('The file extension is not valid.')
|
||||
}
|
||||
const filePath = `uploads/${folderInUploadsFolder}/${randomUUID()}.${fileExtension}`
|
||||
const fileURL = new URL(filePath, ROOT_URL)
|
||||
const pathToStoreInDatabase = `${API_URL}/${filePath}`
|
||||
|
Reference in New Issue
Block a user