typescript-express-starter 6.0.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.kr.md +133 -52
- package/README.md +134 -54
- package/bin/cli.js +4 -3
- package/lib/default/.swcrc +41 -0
- package/lib/default/Dockerfile +1 -1
- package/lib/default/ecosystem.config.js +40 -24
- package/lib/default/nodemon.json +2 -2
- package/lib/default/package.json +15 -8
- package/lib/default/src/app.ts +1 -2
- package/lib/default/src/http/auth.http +12 -15
- package/lib/default/src/http/users.http +12 -16
- package/lib/default/src/index.ts +1 -0
- package/lib/default/src/middlewares/auth.middleware.ts +3 -3
- package/lib/default/src/models/users.model.ts +5 -5
- package/lib/default/src/server.ts +1 -2
- package/lib/default/src/services/auth.service.ts +5 -5
- package/lib/default/src/services/users.service.ts +3 -3
- package/lib/default/src/tests/auth.test.ts +4 -4
- package/lib/default/src/tests/users.test.ts +4 -4
- package/lib/default/src/utils/logger.ts +5 -5
- package/lib/default/src/utils/util.ts +1 -1
- package/lib/default/tsconfig.json +2 -2
- package/lib/knex/.swcrc +39 -0
- package/lib/knex/Dockerfile +1 -1
- package/lib/knex/ecosystem.config.js +57 -43
- package/lib/knex/knexfile.ts +6 -6
- package/lib/knex/nodemon.json +2 -2
- package/lib/knex/package.json +14 -8
- package/lib/knex/src/app.ts +2 -3
- package/lib/knex/src/databases/index.ts +6 -6
- package/lib/knex/src/http/auth.http +12 -15
- package/lib/knex/src/http/users.http +12 -16
- package/lib/knex/src/index.ts +1 -0
- package/lib/knex/src/middlewares/auth.middleware.ts +4 -4
- package/lib/knex/src/server.ts +1 -2
- package/lib/knex/src/services/auth.service.ts +5 -5
- package/lib/knex/src/services/users.service.ts +3 -3
- package/lib/knex/src/tests/auth.test.ts +2 -2
- package/lib/knex/src/tests/index.test.ts +1 -1
- package/lib/knex/src/tests/users.test.ts +2 -2
- package/lib/knex/src/utils/logger.ts +5 -5
- package/lib/knex/src/utils/util.ts +1 -1
- package/lib/knex/tsconfig.json +2 -2
- package/lib/mongoose/.swcrc +39 -0
- package/lib/mongoose/Dockerfile +1 -1
- package/lib/mongoose/docker-compose.yml +0 -4
- package/lib/mongoose/ecosystem.config.js +42 -27
- package/lib/mongoose/nodemon.json +2 -2
- package/lib/mongoose/package.json +15 -8
- package/lib/mongoose/src/app.ts +2 -3
- package/lib/mongoose/src/configs/development.json +1 -1
- package/lib/mongoose/src/configs/production.json +1 -1
- package/lib/mongoose/src/configs/test.json +1 -1
- package/lib/mongoose/src/http/auth.http +32 -0
- package/lib/mongoose/src/http/users.http +34 -0
- package/lib/mongoose/src/index.ts +1 -0
- package/lib/mongoose/src/middlewares/auth.middleware.ts +3 -3
- package/lib/mongoose/src/server.ts +1 -2
- package/lib/mongoose/src/services/auth.service.ts +5 -5
- package/lib/mongoose/src/services/users.service.ts +3 -3
- package/lib/mongoose/src/utils/logger.ts +5 -5
- package/lib/mongoose/src/utils/util.ts +1 -1
- package/lib/mongoose/tsconfig.json +2 -2
- package/lib/prisma/.env +1 -1
- package/lib/prisma/.swcrc +37 -0
- package/lib/prisma/Dockerfile +1 -1
- package/lib/prisma/docker-compose.yml +1 -6
- package/lib/prisma/ecosystem.config.js +40 -24
- package/lib/prisma/nodemon.json +2 -2
- package/lib/prisma/package.json +17 -10
- package/lib/prisma/src/app.ts +2 -3
- package/lib/prisma/src/http/auth.http +12 -15
- package/lib/prisma/src/http/users.http +12 -16
- package/lib/prisma/src/index.ts +1 -0
- package/lib/prisma/src/middlewares/auth.middleware.ts +4 -4
- package/lib/prisma/src/server.ts +1 -2
- package/lib/prisma/src/services/auth.service.ts +5 -5
- package/lib/prisma/src/services/users.service.ts +3 -3
- package/lib/prisma/src/utils/logger.ts +5 -5
- package/lib/prisma/src/utils/util.ts +1 -1
- package/lib/prisma/tsconfig.json +2 -2
- package/lib/routing-controllers/.swcrc +37 -0
- package/lib/routing-controllers/Dockerfile +1 -1
- package/lib/routing-controllers/ecosystem.config.js +40 -24
- package/lib/routing-controllers/nodemon.json +2 -2
- package/lib/routing-controllers/package.json +18 -11
- package/lib/routing-controllers/src/app.ts +33 -6
- package/lib/routing-controllers/src/http/auth.http +12 -15
- package/lib/routing-controllers/src/http/users.http +12 -16
- package/lib/routing-controllers/src/index.ts +1 -0
- package/lib/routing-controllers/src/middlewares/auth.middleware.ts +3 -3
- package/lib/routing-controllers/src/middlewares/validation.middleware.ts +10 -2
- package/lib/routing-controllers/src/models/users.model.ts +5 -5
- package/lib/routing-controllers/src/server.ts +1 -3
- package/lib/routing-controllers/src/services/auth.service.ts +5 -5
- package/lib/routing-controllers/src/services/users.service.ts +3 -3
- package/lib/routing-controllers/src/utils/logger.ts +5 -5
- package/lib/routing-controllers/src/utils/util.ts +1 -1
- package/lib/routing-controllers/tsconfig.json +2 -2
- package/lib/sequelize/.swcrc +39 -0
- package/lib/sequelize/Dockerfile +1 -1
- package/lib/sequelize/docker-compose.yml +1 -6
- package/lib/sequelize/ecosystem.config.js +42 -27
- package/lib/sequelize/nodemon.json +2 -2
- package/lib/sequelize/package.json +15 -8
- package/lib/sequelize/src/app.ts +1 -2
- package/lib/sequelize/src/configs/development.json +2 -2
- package/lib/sequelize/src/configs/production.json +1 -1
- package/lib/sequelize/src/configs/test.json +1 -1
- package/lib/sequelize/src/http/auth.http +32 -0
- package/lib/sequelize/src/http/users.http +34 -0
- package/lib/sequelize/src/index.ts +1 -0
- package/lib/sequelize/src/middlewares/auth.middleware.ts +4 -4
- package/lib/sequelize/src/server.ts +1 -2
- package/lib/sequelize/src/services/auth.service.ts +5 -5
- package/lib/sequelize/src/services/users.service.ts +3 -3
- package/lib/sequelize/src/utils/logger.ts +5 -5
- package/lib/sequelize/src/utils/util.ts +1 -1
- package/lib/sequelize/tsconfig.json +2 -2
- package/lib/starter.js +8 -12
- package/lib/typeorm/.swcrc +39 -0
- package/lib/typeorm/Dockerfile +1 -1
- package/lib/typeorm/docker-compose.yml +1 -1
- package/lib/typeorm/ecosystem.config.js +42 -27
- package/lib/typeorm/nodemon.json +2 -2
- package/lib/typeorm/package.json +15 -8
- package/lib/typeorm/src/app.ts +1 -2
- package/lib/typeorm/src/configs/development.json +1 -1
- package/lib/typeorm/src/configs/production.json +1 -1
- package/lib/typeorm/src/configs/test.json +1 -1
- package/lib/typeorm/src/databases/index.ts +5 -5
- package/lib/typeorm/src/{entity → entities}/users.entity.ts +3 -3
- package/lib/typeorm/src/http/auth.http +12 -15
- package/lib/typeorm/src/http/users.http +12 -16
- package/lib/typeorm/src/index.ts +1 -0
- package/lib/typeorm/src/middlewares/auth.middleware.ts +5 -9
- package/lib/typeorm/src/server.ts +1 -2
- package/lib/typeorm/src/services/auth.service.ts +13 -17
- package/lib/typeorm/src/services/users.service.ts +16 -22
- package/lib/typeorm/src/utils/logger.ts +5 -5
- package/lib/typeorm/src/utils/util.ts +1 -1
- package/lib/typeorm/tsconfig.json +3 -3
- package/package.json +12 -4
|
@@ -1,43 +1,57 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @description pm2 configuration file.
|
|
3
|
+
* @example
|
|
4
|
+
* production mode :: pm2 start ecosystem.config.js --only prod
|
|
5
|
+
* development mode :: pm2 start ecosystem.config.js --only dev
|
|
6
|
+
*/
|
|
7
|
+
module.exports = {
|
|
8
|
+
apps: [
|
|
9
|
+
{
|
|
10
|
+
name: 'prod', // pm2 start App name
|
|
11
|
+
script: 'dist/server.js',
|
|
12
|
+
exec_mode: 'cluster', // 'cluster' or 'fork'
|
|
13
|
+
instance_var: 'INSTANCE_ID', // instance variable
|
|
14
|
+
instances: 2, // pm2 instance count
|
|
15
|
+
autorestart: true, // auto restart if process crash
|
|
16
|
+
watch: false, // files change automatic restart
|
|
17
|
+
ignore_watch: ['node_modules', 'logs'], // ignore files change
|
|
18
|
+
max_memory_restart: '1G', // restart if process use more than 1G memory
|
|
19
|
+
merge_logs: true, // if true, stdout and stderr will be merged and sent to pm2 log
|
|
20
|
+
output: './logs/access.log', // pm2 log file
|
|
21
|
+
error: './logs/error.log', // pm2 error log file
|
|
22
|
+
env: { // environment variable
|
|
23
|
+
PORT: 3000,
|
|
24
|
+
NODE_ENV: 'production',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'dev', // pm2 start App name
|
|
29
|
+
script: 'ts-node', // ts-node
|
|
30
|
+
args: '-r tsconfig-paths/register --transpile-only src/server.ts', // ts-node args
|
|
31
|
+
exec_mode: 'cluster', // 'cluster' or 'fork'
|
|
32
|
+
instance_var: 'INSTANCE_ID', // instance variable
|
|
33
|
+
instances: 2, // pm2 instance count
|
|
34
|
+
autorestart: true, // auto restart if process crash
|
|
35
|
+
watch: false, // files change automatic restart
|
|
36
|
+
ignore_watch: ['node_modules', 'logs'], // ignore files change
|
|
37
|
+
max_memory_restart: '1G', // restart if process use more than 1G memory
|
|
38
|
+
merge_logs: true, // if true, stdout and stderr will be merged and sent to pm2 log
|
|
39
|
+
output: './logs/access.log', // pm2 log file
|
|
40
|
+
error: './logs/error.log', // pm2 error log file
|
|
41
|
+
env: { // environment variable
|
|
42
|
+
PORT: 3000,
|
|
43
|
+
NODE_ENV: 'development',
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
deploy: {
|
|
48
|
+
production: {
|
|
49
|
+
user: 'user',
|
|
50
|
+
host: '0.0.0.0',
|
|
51
|
+
ref: 'origin/master',
|
|
52
|
+
repo: 'git@github.com:repo.git',
|
|
53
|
+
path: 'dist/server.js',
|
|
54
|
+
'post-deploy': 'npm install && npm run build && pm2 reload ecosystem.config.js --only prod',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
};
|
package/lib/knex/knexfile.ts
CHANGED
|
@@ -3,17 +3,17 @@ process.env['NODE_CONFIG_DIR'] = __dirname + '/src/configs';
|
|
|
3
3
|
import config from 'config';
|
|
4
4
|
import { dbConfig } from './src/interfaces/db.interface';
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const { host, user, password, database, port }: dbConfig = config.get('dbConfig');
|
|
7
7
|
export = {
|
|
8
8
|
client: 'mysql',
|
|
9
9
|
connection: {
|
|
10
10
|
charset: 'utf8',
|
|
11
11
|
timezone: 'UTC',
|
|
12
|
-
host:
|
|
13
|
-
user:
|
|
14
|
-
password:
|
|
15
|
-
database:
|
|
16
|
-
port:
|
|
12
|
+
host: host,
|
|
13
|
+
user: user,
|
|
14
|
+
password: password,
|
|
15
|
+
database: database,
|
|
16
|
+
port: port,
|
|
17
17
|
},
|
|
18
18
|
migrations: {
|
|
19
19
|
directory: 'src/databases/migrations',
|
package/lib/knex/nodemon.json
CHANGED
package/lib/knex/package.json
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
"scripts": {
|
|
8
8
|
"start": "npm run build && cross-env NODE_ENV=production node dist/server.js",
|
|
9
9
|
"dev": "cross-env NODE_ENV=development nodemon",
|
|
10
|
-
"build": "
|
|
10
|
+
"build": "swc src -d dist --source-maps --copy-files",
|
|
11
|
+
"build:tsc": "tsc && tsc-alias",
|
|
11
12
|
"test": "jest --forceExit --detectOpenHandles",
|
|
12
13
|
"lint": "eslint --ignore-path .gitignore --ext .ts src/",
|
|
13
14
|
"lint:fix": "npm run lint -- --fix",
|
|
@@ -15,7 +16,9 @@
|
|
|
15
16
|
"migrate": "knex migrate:latest --knexfile=knexfile.ts --verbose",
|
|
16
17
|
"rollback": "knex migrate:rollback --knexfile=knexfile.ts --verbose",
|
|
17
18
|
"make:seeder": "knex seed:make --knexfile=knexfile.ts -x ts --env development",
|
|
18
|
-
"make:migration": "knex migrate:make --knexfile=knexfile.ts -x ts --env development"
|
|
19
|
+
"make:migration": "knex migrate:make --knexfile=knexfile.ts -x ts --env development",
|
|
20
|
+
"deploy:prod": "npm run build && pm2 start ecosystem.config.js --only prod",
|
|
21
|
+
"deploy:dev": "pm2 start ecosystem.config.js --only dev"
|
|
19
22
|
},
|
|
20
23
|
"dependencies": {
|
|
21
24
|
"bcrypt": "^5.0.1",
|
|
@@ -25,7 +28,6 @@
|
|
|
25
28
|
"config": "^3.3.6",
|
|
26
29
|
"cookie-parser": "^1.4.5",
|
|
27
30
|
"cors": "^2.8.5",
|
|
28
|
-
"cross-env": "^7.0.3",
|
|
29
31
|
"dotenv": "^9.0.2",
|
|
30
32
|
"envalid": "^7.1.0",
|
|
31
33
|
"express": "^4.17.1",
|
|
@@ -42,6 +44,8 @@
|
|
|
42
44
|
"winston-daily-rotate-file": "^4.5.5"
|
|
43
45
|
},
|
|
44
46
|
"devDependencies": {
|
|
47
|
+
"@swc/cli": "^0.1.51",
|
|
48
|
+
"@swc/core": "^1.2.108",
|
|
45
49
|
"@types/bcrypt": "^5.0.0",
|
|
46
50
|
"@types/compression": "^1.7.0",
|
|
47
51
|
"@types/config": "0.0.38",
|
|
@@ -62,21 +66,23 @@
|
|
|
62
66
|
"@types/winston": "^2.4.4",
|
|
63
67
|
"@typescript-eslint/eslint-plugin": "^4.23.0",
|
|
64
68
|
"@typescript-eslint/parser": "^4.23.0",
|
|
69
|
+
"cross-env": "^7.0.3",
|
|
65
70
|
"eslint": "^7.26.0",
|
|
66
71
|
"eslint-config-prettier": "^8.3.0",
|
|
67
72
|
"eslint-plugin-prettier": "^3.4.0",
|
|
68
73
|
"husky": "^6.0.0",
|
|
69
74
|
"jest": "^27.0.6",
|
|
70
|
-
"jest-extended": "^0.11.5",
|
|
71
75
|
"lint-staged": "^11.0.0",
|
|
72
76
|
"node-config": "0.0.2",
|
|
73
77
|
"node-gyp": "^8.0.0",
|
|
74
78
|
"nodemon": "^2.0.7",
|
|
79
|
+
"pm2": "^5.1.0",
|
|
75
80
|
"prettier": "^2.3.0",
|
|
76
81
|
"supertest": "^6.1.3",
|
|
77
|
-
"ts-jest": "^27.0.
|
|
78
|
-
"ts-node": "^10.
|
|
79
|
-
"
|
|
80
|
-
"
|
|
82
|
+
"ts-jest": "^27.0.7",
|
|
83
|
+
"ts-node": "^10.4.0",
|
|
84
|
+
"tsc-alias": "^1.4.1",
|
|
85
|
+
"tsconfig-paths": "^3.10.1",
|
|
86
|
+
"typescript": "^4.5.2"
|
|
81
87
|
}
|
|
82
88
|
}
|
package/lib/knex/src/app.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import '@/index';
|
|
2
|
+
import config from 'config';
|
|
3
3
|
import compression from 'compression';
|
|
4
4
|
import cookieParser from 'cookie-parser';
|
|
5
5
|
import cors from 'cors';
|
|
6
|
-
import config from 'config';
|
|
7
6
|
import express from 'express';
|
|
8
7
|
import helmet from 'helmet';
|
|
9
8
|
import hpp from 'hpp';
|
|
@@ -2,17 +2,17 @@ import config from 'config';
|
|
|
2
2
|
import Knex from 'knex';
|
|
3
3
|
import { dbConfig } from '@interfaces/db.interface';
|
|
4
4
|
|
|
5
|
-
const
|
|
5
|
+
const { host, port, user, password, database }: dbConfig = config.get('dbConfig');
|
|
6
6
|
const dbConnection = {
|
|
7
7
|
client: 'mysql',
|
|
8
8
|
connection: {
|
|
9
9
|
charset: 'utf8',
|
|
10
10
|
timezone: 'UTC',
|
|
11
|
-
host:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
host: host,
|
|
12
|
+
port: port,
|
|
13
|
+
user: user,
|
|
14
|
+
password: password,
|
|
15
|
+
database: database,
|
|
16
16
|
},
|
|
17
17
|
pool: {
|
|
18
18
|
min: 2,
|
|
@@ -1,35 +1,32 @@
|
|
|
1
|
-
# auth API
|
|
2
|
-
|
|
3
|
-
###
|
|
4
1
|
# baseURL
|
|
5
2
|
@baseURL = http://localhost:3000
|
|
6
3
|
|
|
7
4
|
###
|
|
8
|
-
#
|
|
9
|
-
POST {{baseURL}}/signup
|
|
5
|
+
# User Signup
|
|
6
|
+
POST {{ baseURL }}/signup
|
|
10
7
|
Content-Type: application/json
|
|
11
8
|
|
|
12
9
|
{
|
|
13
|
-
"email": "example@
|
|
14
|
-
|
|
10
|
+
"email": "example@email.com",
|
|
11
|
+
"password": "password"
|
|
15
12
|
}
|
|
16
13
|
|
|
17
14
|
###
|
|
18
|
-
# Login
|
|
19
|
-
POST {{baseURL}}/login
|
|
15
|
+
# User Login
|
|
16
|
+
POST {{ baseURL }}/login
|
|
20
17
|
Content-Type: application/json
|
|
21
18
|
|
|
22
19
|
{
|
|
23
|
-
"email": "
|
|
24
|
-
|
|
20
|
+
"email": "example@email.com",
|
|
21
|
+
"password": "password"
|
|
25
22
|
}
|
|
26
23
|
|
|
27
24
|
###
|
|
28
|
-
# Logout
|
|
29
|
-
POST {{baseURL}}/logout
|
|
25
|
+
# User Logout
|
|
26
|
+
POST {{ baseURL }}/logout
|
|
30
27
|
Content-Type: application/json
|
|
31
28
|
|
|
32
29
|
{
|
|
33
|
-
"email": "
|
|
34
|
-
|
|
30
|
+
"email": "example@email.com",
|
|
31
|
+
"password": "password"
|
|
35
32
|
}
|
|
@@ -1,38 +1,34 @@
|
|
|
1
|
-
# users API
|
|
2
|
-
|
|
3
|
-
###
|
|
4
1
|
# baseURL
|
|
5
2
|
@baseURL = http://localhost:3000
|
|
6
3
|
|
|
7
4
|
###
|
|
8
5
|
# Find All Users
|
|
9
|
-
GET {{baseURL}}/users
|
|
6
|
+
GET {{ baseURL }}/users
|
|
10
7
|
|
|
11
8
|
###
|
|
12
9
|
# Find User By Id
|
|
13
|
-
GET {{baseURL}}/users/1
|
|
14
|
-
|
|
10
|
+
GET {{ baseURL }}/users/1
|
|
15
11
|
|
|
16
12
|
###
|
|
17
|
-
#
|
|
18
|
-
POST {{baseURL}}/users
|
|
13
|
+
# Create User
|
|
14
|
+
POST {{ baseURL }}/users
|
|
19
15
|
Content-Type: application/json
|
|
20
16
|
|
|
21
17
|
{
|
|
22
|
-
"email": "example@
|
|
23
|
-
|
|
18
|
+
"email": "example@email.com",
|
|
19
|
+
"password": "password"
|
|
24
20
|
}
|
|
25
21
|
|
|
26
22
|
###
|
|
27
|
-
#
|
|
28
|
-
PUT {{baseURL}}/users/1
|
|
23
|
+
# Modify User By Id
|
|
24
|
+
PUT {{ baseURL }}/users/1
|
|
29
25
|
Content-Type: application/json
|
|
30
26
|
|
|
31
27
|
{
|
|
32
|
-
"email": "example@
|
|
33
|
-
|
|
28
|
+
"email": "example@email.com",
|
|
29
|
+
"password": "password"
|
|
34
30
|
}
|
|
35
31
|
|
|
36
32
|
###
|
|
37
|
-
#
|
|
38
|
-
DELETE {{baseURL}}/users/1
|
|
33
|
+
# Delete User By Id
|
|
34
|
+
DELETE {{ baseURL }}/users/1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
process.env['NODE_CONFIG_DIR'] = __dirname + '/configs';
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import config from 'config';
|
|
2
2
|
import { NextFunction, Response } from 'express';
|
|
3
|
-
import
|
|
3
|
+
import { verify } from 'jsonwebtoken';
|
|
4
4
|
import { HttpException } from '@exceptions/HttpException';
|
|
5
5
|
import { DataStoredInToken, RequestWithUser } from '@interfaces/auth.interface';
|
|
6
|
-
import { User } from '
|
|
6
|
+
import { User } from '@interfaces/users.interface';
|
|
7
7
|
import { Users } from '@models/users.model';
|
|
8
8
|
|
|
9
9
|
const authMiddleware = async (req: RequestWithUser, res: Response, next: NextFunction) => {
|
|
10
10
|
try {
|
|
11
|
-
const Authorization = req.cookies['Authorization'] || req.header('Authorization').split('Bearer ')[1]
|
|
11
|
+
const Authorization = req.cookies['Authorization'] || (req.header('Authorization') ? req.header('Authorization').split('Bearer ')[1] : null);
|
|
12
12
|
|
|
13
13
|
if (Authorization) {
|
|
14
14
|
const secretKey: string = config.get('secretKey');
|
|
15
|
-
const verificationResponse = (await
|
|
15
|
+
const verificationResponse = (await verify(Authorization, secretKey)) as DataStoredInToken;
|
|
16
16
|
const userId = verificationResponse.id;
|
|
17
17
|
const findUser: User = await Users.query().findById(userId);
|
|
18
18
|
|
package/lib/knex/src/server.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { hash, compare } from 'bcrypt';
|
|
2
2
|
import config from 'config';
|
|
3
|
-
import
|
|
3
|
+
import { sign } from 'jsonwebtoken';
|
|
4
4
|
import { CreateUserDto } from '@dtos/users.dto';
|
|
5
5
|
import { HttpException } from '@exceptions/HttpException';
|
|
6
6
|
import { DataStoredInToken, TokenData } from '@interfaces/auth.interface';
|
|
@@ -15,7 +15,7 @@ class AuthService {
|
|
|
15
15
|
const findUser: Users = await Users.query().select().from('users').where('email', '=', userData.email).first();
|
|
16
16
|
if (findUser) throw new HttpException(409, `You're email ${userData.email} already exists`);
|
|
17
17
|
|
|
18
|
-
const hashedPassword = await
|
|
18
|
+
const hashedPassword = await hash(userData.password, 10);
|
|
19
19
|
const createUserData: User = await Users.query()
|
|
20
20
|
.insert({ ...userData, password: hashedPassword })
|
|
21
21
|
.into('users');
|
|
@@ -29,7 +29,7 @@ class AuthService {
|
|
|
29
29
|
const findUser: User = await Users.query().select().from('users').where('email', '=', userData.email).first();
|
|
30
30
|
if (!findUser) throw new HttpException(409, `You're email ${userData.email} not found`);
|
|
31
31
|
|
|
32
|
-
const isPasswordMatching: boolean = await
|
|
32
|
+
const isPasswordMatching: boolean = await compare(userData.password, findUser.password);
|
|
33
33
|
if (!isPasswordMatching) throw new HttpException(409, "You're password not matching");
|
|
34
34
|
|
|
35
35
|
const tokenData = this.createToken(findUser);
|
|
@@ -58,7 +58,7 @@ class AuthService {
|
|
|
58
58
|
const secretKey: string = config.get('secretKey');
|
|
59
59
|
const expiresIn: number = 60 * 60;
|
|
60
60
|
|
|
61
|
-
return { expiresIn, token:
|
|
61
|
+
return { expiresIn, token: sign(dataStoredInToken, secretKey, { expiresIn }) };
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
public createCookie(tokenData: TokenData): string {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { hash } from 'bcrypt';
|
|
2
2
|
import { CreateUserDto } from '@dtos/users.dto';
|
|
3
3
|
import { HttpException } from '@exceptions/HttpException';
|
|
4
4
|
import { User } from '@interfaces/users.interface';
|
|
@@ -24,7 +24,7 @@ class UserService {
|
|
|
24
24
|
const findUser: User = await Users.query().select().from('users').where('email', '=', userData.email).first();
|
|
25
25
|
if (findUser) throw new HttpException(409, `You're email ${userData.email} already exists`);
|
|
26
26
|
|
|
27
|
-
const hashedPassword = await
|
|
27
|
+
const hashedPassword = await hash(userData.password, 10);
|
|
28
28
|
const createUserData: User = await Users.query()
|
|
29
29
|
.insert({ ...userData, password: hashedPassword })
|
|
30
30
|
.into('users');
|
|
@@ -38,7 +38,7 @@ class UserService {
|
|
|
38
38
|
const findUser: User[] = await Users.query().select().from('users').where('id', '=', userId);
|
|
39
39
|
if (!findUser) throw new HttpException(409, "You're not user");
|
|
40
40
|
|
|
41
|
-
const hashedPassword = await
|
|
41
|
+
const hashedPassword = await hash(userData.password, 10);
|
|
42
42
|
await Users.query()
|
|
43
43
|
.update({ ...userData, password: hashedPassword })
|
|
44
44
|
.where('id', '=', userId)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import request from 'supertest';
|
|
2
2
|
import App from '@/app';
|
|
3
|
-
import { CreateUserDto } from '
|
|
4
|
-
import AuthRoute from '
|
|
3
|
+
import { CreateUserDto } from '@dtos/users.dto';
|
|
4
|
+
import AuthRoute from '@routes/auth.route';
|
|
5
5
|
|
|
6
6
|
afterAll(async () => {
|
|
7
7
|
await new Promise<void>(resolve => setTimeout(() => resolve(), 500));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import request from 'supertest';
|
|
2
2
|
import App from '@/app';
|
|
3
|
-
import { CreateUserDto } from '
|
|
4
|
-
import UserRoute from '
|
|
3
|
+
import { CreateUserDto } from '@dtos/users.dto';
|
|
4
|
+
import UserRoute from '@routes/users.route';
|
|
5
5
|
|
|
6
6
|
afterAll(async () => {
|
|
7
7
|
await new Promise<void>(resolve => setTimeout(() => resolve(), 500));
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import config from 'config';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
4
|
import winston from 'winston';
|
|
5
5
|
import winstonDaily from 'winston-daily-rotate-file';
|
|
6
6
|
|
|
7
7
|
// logs dir
|
|
8
|
-
const logDir: string =
|
|
8
|
+
const logDir: string = join(__dirname, config.get('log.dir'));
|
|
9
9
|
|
|
10
|
-
if (!
|
|
11
|
-
|
|
10
|
+
if (!existsSync(logDir)) {
|
|
11
|
+
mkdirSync(logDir);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
// Define log format
|
|
@@ -9,7 +9,7 @@ export const isEmpty = (value: string | number | object): boolean => {
|
|
|
9
9
|
return true;
|
|
10
10
|
} else if (typeof value !== 'number' && value === '') {
|
|
11
11
|
return true;
|
|
12
|
-
} else if (value === 'undefined' || value === undefined) {
|
|
12
|
+
} else if (typeof value === 'undefined' || value === undefined) {
|
|
13
13
|
return true;
|
|
14
14
|
} else if (value !== null && typeof value === 'object' && !Object.keys(value).length) {
|
|
15
15
|
return true;
|
package/lib/knex/tsconfig.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"pretty": true,
|
|
14
14
|
"sourceMap": true,
|
|
15
15
|
"declaration": true,
|
|
16
|
-
"outDir": "
|
|
16
|
+
"outDir": "dist",
|
|
17
17
|
"allowJs": true,
|
|
18
18
|
"noEmit": false,
|
|
19
19
|
"esModuleInterop": true,
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
"include": ["src/**/*.ts", "src/**/*.json", ".env"],
|
|
38
|
-
"exclude": ["node_modules"]
|
|
38
|
+
"exclude": ["node_modules", "src/http", "src/logs", "src/tests"]
|
|
39
39
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jsc": {
|
|
3
|
+
"parser": {
|
|
4
|
+
"syntax": "typescript",
|
|
5
|
+
"tsx": false,
|
|
6
|
+
"dynamicImport": true,
|
|
7
|
+
"decorators": true
|
|
8
|
+
},
|
|
9
|
+
"transform": {
|
|
10
|
+
"legacyDecorator": true,
|
|
11
|
+
"decoratorMetadata": true
|
|
12
|
+
},
|
|
13
|
+
"target": "es2017",
|
|
14
|
+
"externalHelpers": false,
|
|
15
|
+
"keepClassNames": true,
|
|
16
|
+
"loose": false,
|
|
17
|
+
"minify": {
|
|
18
|
+
"compress": false,
|
|
19
|
+
"mangle": false
|
|
20
|
+
},
|
|
21
|
+
"baseUrl": "src",
|
|
22
|
+
"paths": {
|
|
23
|
+
"@/*": ["*"],
|
|
24
|
+
"@controllers/*": ["controllers/*"],
|
|
25
|
+
"@databases": ["databases"],
|
|
26
|
+
"@dtos/*": ["dtos/*"],
|
|
27
|
+
"@exceptions/*": ["exceptions/*"],
|
|
28
|
+
"@interfaces/*": ["interfaces/*"],
|
|
29
|
+
"@middlewares/*": ["middlewares/*"],
|
|
30
|
+
"@models/*": ["models/*"],
|
|
31
|
+
"@routes/*": ["routes/*"],
|
|
32
|
+
"@services/*": ["services/*"],
|
|
33
|
+
"@utils/*": ["utils/*"]
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"module": {
|
|
37
|
+
"type": "commonjs"
|
|
38
|
+
}
|
|
39
|
+
}
|
package/lib/mongoose/Dockerfile
CHANGED