fix: update dependencies to latest
This commit is contained in:
parent
c583d987d3
commit
c4e9a2316e
@ -10,7 +10,6 @@
|
|||||||
"rules": {
|
"rules": {
|
||||||
"prettier/prettier": "error",
|
"prettier/prettier": "error",
|
||||||
"import/extensions": ["error", "always"],
|
"import/extensions": ["error", "always"],
|
||||||
"unicorn/prevent-abbreviations": "error",
|
"unicorn/prevent-abbreviations": "error"
|
||||||
"unicorn/prefer-node-protocol": "error"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@ -10,10 +10,10 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: 'actions/checkout@v3.0.0'
|
- uses: 'actions/checkout@v3.3.0'
|
||||||
|
|
||||||
- name: 'Use Node.js'
|
- name: 'Use Node.js'
|
||||||
uses: 'actions/setup-node@v3.0.0'
|
uses: 'actions/setup-node@v3.6.0'
|
||||||
with:
|
with:
|
||||||
node-version: '16.x'
|
node-version: '16.x'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -23,3 +23,5 @@ jobs:
|
|||||||
|
|
||||||
- name: 'Build'
|
- name: 'Build'
|
||||||
run: 'npm run build'
|
run: 'npm run build'
|
||||||
|
|
||||||
|
- run: 'npm run build:typescript'
|
||||||
|
8
.github/workflows/lint.yml
vendored
8
.github/workflows/lint.yml
vendored
@ -10,10 +10,10 @@ jobs:
|
|||||||
lint:
|
lint:
|
||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: 'actions/checkout@v3.0.0'
|
- uses: 'actions/checkout@v3.3.0'
|
||||||
|
|
||||||
- name: 'Use Node.js'
|
- name: 'Use Node.js'
|
||||||
uses: 'actions/setup-node@v3.0.0'
|
uses: 'actions/setup-node@v3.6.0'
|
||||||
with:
|
with:
|
||||||
node-version: '16.x'
|
node-version: '16.x'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -30,8 +30,8 @@ jobs:
|
|||||||
- name: 'lint:markdown'
|
- name: 'lint:markdown'
|
||||||
run: 'npm run lint:markdown'
|
run: 'npm run lint:markdown'
|
||||||
|
|
||||||
- name: 'lint:typescript'
|
- name: 'lint:eslint'
|
||||||
run: 'npm run lint:typescript'
|
run: 'npm run lint:eslint'
|
||||||
|
|
||||||
- name: 'lint:prettier'
|
- name: 'lint:prettier'
|
||||||
run: 'npm run lint:prettier'
|
run: 'npm run lint:prettier'
|
||||||
|
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
@ -8,7 +8,7 @@ jobs:
|
|||||||
release:
|
release:
|
||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: 'actions/checkout@v3.0.0'
|
- uses: 'actions/checkout@v3.3.0'
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
@ -21,7 +21,7 @@ jobs:
|
|||||||
git-commit-gpgsign: true
|
git-commit-gpgsign: true
|
||||||
|
|
||||||
- name: 'Use Node.js'
|
- name: 'Use Node.js'
|
||||||
uses: 'actions/setup-node@v3.0.0'
|
uses: 'actions/setup-node@v3.6.0'
|
||||||
with:
|
with:
|
||||||
node-version: '16.x'
|
node-version: '16.x'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -32,6 +32,8 @@ jobs:
|
|||||||
- name: 'Build'
|
- name: 'Build'
|
||||||
run: 'npm run build'
|
run: 'npm run build'
|
||||||
|
|
||||||
|
- run: 'npm run build:typescript'
|
||||||
|
|
||||||
- name: 'Release'
|
- name: 'Release'
|
||||||
run: 'npm run release'
|
run: 'npm run release'
|
||||||
env:
|
env:
|
||||||
|
@ -3,3 +3,4 @@
|
|||||||
|
|
||||||
npm run lint:staged
|
npm run lint:staged
|
||||||
npm run build
|
npm run build
|
||||||
|
npm run build:typescript
|
||||||
|
5
.markdownlint-cli2.jsonc
Normal file
5
.markdownlint-cli2.jsonc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"globs": ["**/*.{md,mdx}"],
|
||||||
|
"ignores": ["**/node_modules"],
|
||||||
|
"customRules": ["markdownlint-rule-relative-links"]
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"default": true,
|
"default": true,
|
||||||
"MD013": false,
|
"relative-links": true,
|
||||||
|
"extends": "markdownlint/style/prettier",
|
||||||
"MD033": false,
|
"MD033": false,
|
||||||
"MD041": false
|
"MD041": false
|
||||||
}
|
}
|
||||||
|
11821
package-lock.json
generated
11821
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
68
package.json
68
package.json
@ -13,62 +13,66 @@
|
|||||||
"npm": ">=8.0.0"
|
"npm": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "rimraf ./build && swc ./src --out-dir ./build && tsc",
|
"build": "rimraf ./build && swc ./src --out-dir ./build",
|
||||||
"build:dev": "swc ./src --out-dir ./build --watch",
|
"build:dev": "swc ./src --out-dir ./build --watch",
|
||||||
|
"build:typescript": "tsc",
|
||||||
"start": "node build/index.js",
|
"start": "node build/index.js",
|
||||||
"dev": "concurrently -k -n \"TypeScript,Node\" -p \"[{name}]\" -c \"blue,green\" \"npm run build:dev\" \"cross-env NODE_ENV=development nodemon build/index.js\"",
|
"dev": "concurrently -k -n \"TypeScript,Node\" -p \"[{name}]\" -c \"blue,green\" \"npm run build:dev\" \"cross-env NODE_ENV=development nodemon build/index.js\"",
|
||||||
"lint:commit": "commitlint",
|
"lint:commit": "commitlint",
|
||||||
"lint:editorconfig": "editorconfig-checker",
|
"lint:editorconfig": "editorconfig-checker",
|
||||||
"lint:markdown": "markdownlint \"**/*.md\" --dot --ignore-path \".gitignore\"",
|
"lint:markdown": "markdownlint-cli2",
|
||||||
"lint:typescript": "eslint \"**/*.{js,jsx,ts,tsx}\" --ignore-path \".gitignore\"",
|
"lint:eslint": "eslint \"**/*.{js,jsx,ts,tsx}\" --ignore-path \".gitignore\"",
|
||||||
"lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"",
|
"lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"",
|
||||||
"lint:staged": "lint-staged",
|
"lint:staged": "lint-staged",
|
||||||
"release": "semantic-release",
|
"release": "semantic-release",
|
||||||
"postinstall": "husky install"
|
"postinstall": "husky install"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sinclair/typebox": "0.23.5",
|
"@fastify/cors": "8.2.0",
|
||||||
"dotenv": "16.0.1",
|
"@fastify/helmet": "10.1.0",
|
||||||
"fastify": "4.2.0",
|
"@fastify/multipart": "7.3.0",
|
||||||
"@fastify/cors": "8.0.0",
|
"@fastify/rate-limit": "7.6.0",
|
||||||
"@fastify/helmet": "9.1.0",
|
"@fastify/sensible": "5.2.0",
|
||||||
"@fastify/multipart": "7.1.0",
|
"@fastify/static": "6.6.0",
|
||||||
"fastify-plugin": "3.0.1",
|
"@fastify/swagger": "8.2.1",
|
||||||
"@fastify/rate-limit": "7.0.0",
|
"@fastify/swagger-ui": "1.3.0",
|
||||||
"@fastify/sensible": "5.1.0",
|
"@sinclair/typebox": "0.25.20",
|
||||||
"@fastify/static": "6.4.0",
|
"dotenv": "16.0.3",
|
||||||
"@fastify/swagger": "7.4.0",
|
"fastify": "4.11.0",
|
||||||
|
"fastify-plugin": "4.4.0",
|
||||||
"http-errors": "2.0.0",
|
"http-errors": "2.0.0",
|
||||||
"read-pkg": "7.1.0"
|
"read-pkg": "7.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "17.0.3",
|
"@commitlint/cli": "17.4.1",
|
||||||
"@commitlint/config-conventional": "17.0.3",
|
"@commitlint/config-conventional": "17.4.0",
|
||||||
"@saithodev/semantic-release-backmerge": "2.1.2",
|
"@saithodev/semantic-release-backmerge": "2.1.2",
|
||||||
"@semantic-release/git": "10.0.1",
|
"@semantic-release/git": "10.0.1",
|
||||||
"@swc/cli": "0.1.57",
|
"@swc/cli": "0.1.57",
|
||||||
"@swc/core": "1.2.207",
|
"@swc/core": "1.3.25",
|
||||||
|
"@tsconfig/strictest": "1.0.2",
|
||||||
"@types/busboy": "1.5.0",
|
"@types/busboy": "1.5.0",
|
||||||
"@types/http-errors": "1.8.2",
|
"@types/http-errors": "1.8.2",
|
||||||
"@types/node": "18.0.0",
|
"@types/node": "18.11.18",
|
||||||
"@typescript-eslint/eslint-plugin": "5.30.0",
|
"@typescript-eslint/eslint-plugin": "5.48.1",
|
||||||
"concurrently": "7.2.2",
|
"concurrently": "7.6.0",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"editorconfig-checker": "4.0.2",
|
"editorconfig-checker": "4.0.2",
|
||||||
"eslint": "8.18.0",
|
"eslint": "8.31.0",
|
||||||
"eslint-config-conventions": "2.0.0",
|
"eslint-config-conventions": "6.0.0",
|
||||||
"eslint-config-prettier": "8.5.0",
|
"eslint-config-prettier": "8.6.0",
|
||||||
"eslint-plugin-import": "2.26.0",
|
"eslint-plugin-import": "2.26.0",
|
||||||
"eslint-plugin-prettier": "4.1.0",
|
"eslint-plugin-prettier": "4.2.1",
|
||||||
"eslint-plugin-promise": "6.0.0",
|
"eslint-plugin-promise": "6.1.1",
|
||||||
"eslint-plugin-unicorn": "42.0.0",
|
"eslint-plugin-unicorn": "45.0.2",
|
||||||
"husky": "8.0.1",
|
"husky": "8.0.3",
|
||||||
"lint-staged": "13.0.3",
|
"lint-staged": "13.1.0",
|
||||||
"markdownlint-cli": "0.31.1",
|
"markdownlint-cli2": "0.6.0",
|
||||||
"nodemon": "2.0.18",
|
"markdownlint-rule-relative-links": "1.1.1",
|
||||||
"prettier": "2.7.1",
|
"nodemon": "2.0.20",
|
||||||
|
"prettier": "2.8.2",
|
||||||
"rimraf": "3.0.2",
|
"rimraf": "3.0.2",
|
||||||
"semantic-release": "19.0.3",
|
"semantic-release": "19.0.3",
|
||||||
"typescript": "4.7.4"
|
"typescript": "4.9.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,18 +4,20 @@ import dotenv from 'dotenv'
|
|||||||
import fastify from 'fastify'
|
import fastify from 'fastify'
|
||||||
import fastifyCors from '@fastify/cors'
|
import fastifyCors from '@fastify/cors'
|
||||||
import fastifySwagger from '@fastify/swagger'
|
import fastifySwagger from '@fastify/swagger'
|
||||||
|
import fastifySwaggerUI from '@fastify/swagger-ui'
|
||||||
import fastifyHelmet from '@fastify/helmet'
|
import fastifyHelmet from '@fastify/helmet'
|
||||||
import fastifyRateLimit from '@fastify/rate-limit'
|
import fastifyRateLimit from '@fastify/rate-limit'
|
||||||
import fastifySensible from '@fastify/sensible'
|
import fastifySensible from '@fastify/sensible'
|
||||||
import fastifyStatic from '@fastify/static'
|
import fastifyStatic from '@fastify/static'
|
||||||
|
import { readPackage } from 'read-pkg'
|
||||||
|
|
||||||
import { services } from './services/index.js'
|
import { services } from './services/index.js'
|
||||||
import { swaggerOptions } from './tools/configurations/swaggerOptions.js'
|
import { UPLOADS_URL } from './tools/configurations.js'
|
||||||
import { UPLOADS_URL } from './tools/configurations/index.js'
|
|
||||||
|
|
||||||
dotenv.config()
|
dotenv.config()
|
||||||
|
const packageJSON = await readPackage()
|
||||||
export const application = fastify({
|
export const application = fastify({
|
||||||
logger: process.env.NODE_ENV === 'development',
|
logger: process.env['NODE_ENV'] === 'development',
|
||||||
ajv: {
|
ajv: {
|
||||||
customOptions: {
|
customOptions: {
|
||||||
strict: 'log',
|
strict: 'log',
|
||||||
@ -38,5 +40,28 @@ await application.register(fastifyStatic, {
|
|||||||
root: fileURLToPath(UPLOADS_URL),
|
root: fileURLToPath(UPLOADS_URL),
|
||||||
prefix: '/uploads/'
|
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)
|
await application.register(services)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { application } from './application.js'
|
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({
|
const address = await application.listen({
|
||||||
port: PORT,
|
port: PORT,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { FastifyPluginAsync } from 'fastify'
|
import type { FastifyPluginAsync } from 'fastify'
|
||||||
|
|
||||||
import { uploadsService } from './uploads/index.js'
|
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 { Type } from '@sinclair/typebox'
|
||||||
|
|
||||||
import { fastifyErrors } from '../../../models/utils.js'
|
import { fastifyErrors } from '../../../models/utils.js'
|
||||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||||
|
import type { DeleteParameters } from '../../../tools/utils/deleteUploadedFile.js'
|
||||||
import {
|
import {
|
||||||
DeleteParameters,
|
|
||||||
deleteParameters,
|
deleteParameters,
|
||||||
deleteUploadedFile
|
deleteUploadedFile
|
||||||
} from '../../../tools/utils/deleteUploadedFile.js'
|
} from '../../../tools/utils/deleteUploadedFile.js'
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
|
|
||||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||||
import { Static, Type } from '@sinclair/typebox'
|
import type { Static } from '@sinclair/typebox'
|
||||||
|
import { Type } from '@sinclair/typebox'
|
||||||
|
|
||||||
import { fastifyErrors } from '../../../models/utils.js'
|
import { fastifyErrors } from '../../../models/utils.js'
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Type } from '@sinclair/typebox'
|
import { Type } from '@sinclair/typebox'
|
||||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||||
import fastifyMultipart from '@fastify/multipart'
|
import fastifyMultipart from '@fastify/multipart'
|
||||||
|
|
||||||
import { fastifyErrors } from '../../../models/utils.js'
|
import { fastifyErrors } from '../../../models/utils.js'
|
||||||
@ -7,7 +7,7 @@ import { uploadFile } from '../../../tools/utils/uploadFile.js'
|
|||||||
import {
|
import {
|
||||||
MAXIMUM_IMAGE_SIZE,
|
MAXIMUM_IMAGE_SIZE,
|
||||||
SUPPORTED_IMAGE_MIMETYPE
|
SUPPORTED_IMAGE_MIMETYPE
|
||||||
} from '../../../tools/configurations/index.js'
|
} from '../../../tools/configurations.js'
|
||||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||||
|
|
||||||
const postServiceSchema: FastifySchema = {
|
const postServiceSchema: FastifySchema = {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { FastifyPluginAsync } from 'fastify'
|
import type { FastifyPluginAsync } from 'fastify'
|
||||||
|
|
||||||
import { deleteGuildsUploadsService } from './guilds/delete.js'
|
import { deleteGuildsUploadsService } from './guilds/delete.js'
|
||||||
import { getGuildsUploadsService } from './guilds/get.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 { Type } from '@sinclair/typebox'
|
||||||
|
|
||||||
import { fastifyErrors } from '../../../models/utils.js'
|
import { fastifyErrors } from '../../../models/utils.js'
|
||||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||||
|
import type { DeleteParameters } from '../../../tools/utils/deleteUploadedFile.js'
|
||||||
import {
|
import {
|
||||||
DeleteParameters,
|
|
||||||
deleteParameters,
|
deleteParameters,
|
||||||
deleteUploadedFile
|
deleteUploadedFile
|
||||||
} from '../../../tools/utils/deleteUploadedFile.js'
|
} from '../../../tools/utils/deleteUploadedFile.js'
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
|
|
||||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||||
import { Static, Type } from '@sinclair/typebox'
|
import type { Static } from '@sinclair/typebox'
|
||||||
|
import { Type } from '@sinclair/typebox'
|
||||||
|
|
||||||
import { fastifyErrors } from '../../../models/utils.js'
|
import { fastifyErrors } from '../../../models/utils.js'
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { Type } from '@sinclair/typebox'
|
import { Type } from '@sinclair/typebox'
|
||||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||||
import fastifyMultipart from '@fastify/multipart'
|
import fastifyMultipart from '@fastify/multipart'
|
||||||
|
|
||||||
import { fastifyErrors } from '../../../models/utils.js'
|
import { fastifyErrors } from '../../../models/utils.js'
|
||||||
import { uploadFile } from '../../../tools/utils/uploadFile.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'
|
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||||
|
|
||||||
const postServiceSchema: FastifySchema = {
|
const postServiceSchema: FastifySchema = {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||||
import { Type } from '@sinclair/typebox'
|
import { Type } from '@sinclair/typebox'
|
||||||
|
|
||||||
import { fastifyErrors } from '../../../models/utils.js'
|
import { fastifyErrors } from '../../../models/utils.js'
|
||||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||||
|
import type { DeleteParameters } from '../../../tools/utils/deleteUploadedFile.js'
|
||||||
import {
|
import {
|
||||||
DeleteParameters,
|
|
||||||
deleteParameters,
|
deleteParameters,
|
||||||
deleteUploadedFile
|
deleteUploadedFile
|
||||||
} from '../../../tools/utils/deleteUploadedFile.js'
|
} from '../../../tools/utils/deleteUploadedFile.js'
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
|
|
||||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||||
import { Static, Type } from '@sinclair/typebox'
|
import type { Static } from '@sinclair/typebox'
|
||||||
|
import { Type } from '@sinclair/typebox'
|
||||||
|
|
||||||
import { fastifyErrors } from '../../../models/utils.js'
|
import { fastifyErrors } from '../../../models/utils.js'
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Type } from '@sinclair/typebox'
|
import { Type } from '@sinclair/typebox'
|
||||||
import { FastifyPluginAsync, FastifySchema } from 'fastify'
|
import type { FastifyPluginAsync, FastifySchema } from 'fastify'
|
||||||
import fastifyMultipart from '@fastify/multipart'
|
import fastifyMultipart from '@fastify/multipart'
|
||||||
|
|
||||||
import { fastifyErrors } from '../../../models/utils.js'
|
import { fastifyErrors } from '../../../models/utils.js'
|
||||||
@ -7,7 +7,7 @@ import { uploadFile } from '../../../tools/utils/uploadFile.js'
|
|||||||
import {
|
import {
|
||||||
MAXIMUM_IMAGE_SIZE,
|
MAXIMUM_IMAGE_SIZE,
|
||||||
SUPPORTED_IMAGE_MIMETYPE
|
SUPPORTED_IMAGE_MIMETYPE
|
||||||
} from '../../../tools/configurations/index.js'
|
} from '../../../tools/configurations.js'
|
||||||
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
import verifyAPIKey from '../../../tools/plugins/verifyAPIKey.js'
|
||||||
|
|
||||||
const postServiceSchema: FastifySchema = {
|
const postServiceSchema: FastifySchema = {
|
||||||
|
@ -4,10 +4,10 @@ import dotenv from 'dotenv'
|
|||||||
|
|
||||||
dotenv.config()
|
dotenv.config()
|
||||||
|
|
||||||
export const PORT = parseInt(process.env.PORT ?? '8000', 10)
|
export const PORT = parseInt(process.env['PORT'] ?? '8000', 10)
|
||||||
export const HOST = process.env.HOST ?? '0.0.0.0'
|
export const HOST = process.env['HOST'] ?? '0.0.0.0'
|
||||||
export const API_URL = process.env.API_URL ?? `http://${HOST}:${PORT}`
|
export const API_URL = process.env['API_URL'] ?? `http://${HOST}:${PORT}`
|
||||||
export const API_KEY = process.env.API_KEY ?? 'apiKeySecret'
|
export const API_KEY = process.env['API_KEY'] ?? 'apiKeySecret'
|
||||||
|
|
||||||
export const SRC_URL = new URL('../../', import.meta.url)
|
export const SRC_URL = new URL('../../', import.meta.url)
|
||||||
export const ROOT_URL = new URL('../', SRC_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 fastifyPlugin from 'fastify-plugin'
|
||||||
import httpErrors from 'http-errors'
|
import httpErrors from 'http-errors'
|
||||||
|
|
||||||
import { API_KEY } from '../configurations/index.js'
|
import { API_KEY } from '../configurations.js'
|
||||||
|
|
||||||
const { Unauthorized, Forbidden } = httpErrors
|
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 { fileURLToPath } from 'node:url'
|
||||||
import fs from 'node:fs'
|
import fs from 'node:fs'
|
||||||
|
|
||||||
import { Static, Type } from '@sinclair/typebox'
|
import type { Static } from '@sinclair/typebox'
|
||||||
import {
|
import { Type } from '@sinclair/typebox'
|
||||||
|
import type {
|
||||||
|
FastifyBaseLogger,
|
||||||
FastifyInstance,
|
FastifyInstance,
|
||||||
FastifyLoggerInstance,
|
|
||||||
FastifyReply,
|
FastifyReply,
|
||||||
FastifyRequest,
|
FastifyRequest,
|
||||||
FastifyTypeProviderDefault
|
FastifyTypeProviderDefault
|
||||||
@ -22,10 +23,10 @@ export type DeleteParameters = Static<typeof deleteParameters>
|
|||||||
export interface DeleteUploadedFileOptions {
|
export interface DeleteUploadedFileOptions {
|
||||||
folder: 'guilds' | 'messages' | 'users'
|
folder: 'guilds' | 'messages' | 'users'
|
||||||
fastify: FastifyInstance<
|
fastify: FastifyInstance<
|
||||||
Server,
|
Server<typeof IncomingMessage, typeof ServerResponse>,
|
||||||
IncomingMessage,
|
IncomingMessage,
|
||||||
ServerResponse,
|
ServerResponse<IncomingMessage>,
|
||||||
FastifyLoggerInstance,
|
FastifyBaseLogger,
|
||||||
FastifyTypeProviderDefault
|
FastifyTypeProviderDefault
|
||||||
>
|
>
|
||||||
request: FastifyRequest<{ Params: DeleteParameters }>
|
request: FastifyRequest<{ Params: DeleteParameters }>
|
||||||
|
@ -2,10 +2,10 @@ import fs from 'node:fs'
|
|||||||
import { URL } from 'node:url'
|
import { URL } from 'node:url'
|
||||||
import { randomUUID } from 'node:crypto'
|
import { randomUUID } from 'node:crypto'
|
||||||
|
|
||||||
import { FastifyInstance, FastifyRequest } from 'fastify'
|
import type { FastifyInstance, FastifyRequest } from 'fastify'
|
||||||
import { Multipart } from '@fastify/multipart'
|
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 {
|
export interface UploadFileOptions {
|
||||||
folderInUploadsFolder: 'guilds' | 'messages' | 'users'
|
folderInUploadsFolder: 'guilds' | 'messages' | 'users'
|
||||||
@ -33,7 +33,7 @@ export const uploadFile = async (
|
|||||||
maximumFileSize,
|
maximumFileSize,
|
||||||
supportedFileMimetype
|
supportedFileMimetype
|
||||||
} = options
|
} = options
|
||||||
let files: Multipart[] = []
|
let files: SavedMultipartFile[] = []
|
||||||
try {
|
try {
|
||||||
files = await request.saveRequestFiles({
|
files = await request.saveRequestFiles({
|
||||||
limits: {
|
limits: {
|
||||||
@ -46,10 +46,10 @@ export const uploadFile = async (
|
|||||||
`File should be less than ${maximumFileSize}mb.`
|
`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.')
|
throw fastify.httpErrors.badRequest('You must upload at most one file.')
|
||||||
}
|
}
|
||||||
const file = files[0]
|
|
||||||
if (
|
if (
|
||||||
supportedFileMimetype != null &&
|
supportedFileMimetype != null &&
|
||||||
!supportedFileMimetype.includes(file.mimetype)
|
!supportedFileMimetype.includes(file.mimetype)
|
||||||
@ -60,6 +60,9 @@ export const uploadFile = async (
|
|||||||
}
|
}
|
||||||
const splitedMimetype = file.mimetype.split('/')
|
const splitedMimetype = file.mimetype.split('/')
|
||||||
const fileExtension = splitedMimetype[1]
|
const fileExtension = splitedMimetype[1]
|
||||||
|
if (fileExtension == null) {
|
||||||
|
throw fastify.httpErrors.badRequest('The file extension is not valid.')
|
||||||
|
}
|
||||||
const filePath = `uploads/${folderInUploadsFolder}/${randomUUID()}.${fileExtension}`
|
const filePath = `uploads/${folderInUploadsFolder}/${randomUUID()}.${fileExtension}`
|
||||||
const fileURL = new URL(filePath, ROOT_URL)
|
const fileURL = new URL(filePath, ROOT_URL)
|
||||||
const pathToStoreInDatabase = `${API_URL}/${filePath}`
|
const pathToStoreInDatabase = `${API_URL}/${filePath}`
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"extends": "@tsconfig/strictest/tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "ESNext",
|
"target": "ESNext",
|
||||||
"module": "ESNext",
|
"module": "ESNext",
|
||||||
@ -7,7 +8,7 @@
|
|||||||
"outDir": "./build",
|
"outDir": "./build",
|
||||||
"rootDir": "./src",
|
"rootDir": "./src",
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
"strict": true,
|
"exactOptionalPropertyTypes": false,
|
||||||
"esModuleInterop": true
|
"checkJs": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user