@next-k8s/auth 1.0.9

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/.dockerignore ADDED
@@ -0,0 +1 @@
1
+ node_modules
package/CHANGELOG.md ADDED
@@ -0,0 +1,72 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ ## [1.0.9](https://github.com/mathiscode/next-k8s-boilerplate/compare/@next-k8s/auth@1.0.8...@next-k8s/auth@1.0.9) (2022-07-06)
7
+
8
+ **Note:** Version bump only for package @next-k8s/auth
9
+
10
+
11
+
12
+
13
+
14
+ ## 1.0.8 (2022-07-06)
15
+
16
+ **Note:** Version bump only for package @next-k8s/auth
17
+
18
+
19
+
20
+
21
+
22
+ ## 1.0.7 (2022-07-06)
23
+
24
+ **Note:** Version bump only for package @next-k8s/auth
25
+
26
+
27
+
28
+
29
+
30
+ ## 1.0.6 (2022-07-06)
31
+
32
+ **Note:** Version bump only for package @next-k8s/auth
33
+
34
+
35
+
36
+
37
+
38
+ ## 1.0.5 (2022-07-05)
39
+
40
+ **Note:** Version bump only for package @next-k8s/auth
41
+
42
+
43
+
44
+
45
+
46
+ ## 1.0.4 (2022-07-05)
47
+
48
+ **Note:** Version bump only for package @next-k8s/auth
49
+
50
+
51
+
52
+
53
+
54
+ ## 1.0.3 (2022-07-05)
55
+
56
+ **Note:** Version bump only for package @next-k8s/auth
57
+
58
+
59
+
60
+
61
+
62
+ ## 1.0.2 (2022-07-05)
63
+
64
+ **Note:** Version bump only for package @next-k8s/auth
65
+
66
+
67
+
68
+
69
+
70
+ ## 1.0.1 (2022-07-05)
71
+
72
+ **Note:** Version bump only for package @next-k8s/auth
package/Dockerfile ADDED
@@ -0,0 +1,7 @@
1
+ FROM node:alpine
2
+ WORKDIR /app
3
+ COPY package.json .
4
+ RUN npm install --omit=dev
5
+ COPY . .
6
+
7
+ CMD ["npm", "start"]
package/build/app.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const express_1 = __importDefault(require("express"));
16
+ require("express-async-errors");
17
+ const body_parser_1 = require("body-parser");
18
+ const cookie_session_1 = __importDefault(require("cookie-session"));
19
+ const common_1 = require("@next-k8s/common");
20
+ const current_user_1 = __importDefault(require("./routes/current-user"));
21
+ const signin_1 = __importDefault(require("./routes/signin"));
22
+ const signout_1 = __importDefault(require("./routes/signout"));
23
+ const signup_1 = __importDefault(require("./routes/signup"));
24
+ if (!process.env.JWT_KEY)
25
+ throw new Error('JWT_KEY secret not set');
26
+ const app = (0, express_1.default)();
27
+ app.disable('x-powered-by');
28
+ app.set('trust proxy', true);
29
+ app.use((0, body_parser_1.json)());
30
+ app.use((0, cookie_session_1.default)({
31
+ signed: false,
32
+ secure: process.env.NODE_ENV !== 'test'
33
+ }));
34
+ app.use(current_user_1.default);
35
+ app.use(signin_1.default);
36
+ app.use(signout_1.default);
37
+ app.use(signup_1.default);
38
+ app.use('*', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
39
+ throw new common_1.NotFoundError();
40
+ }));
41
+ app.use(common_1.errorHandler);
42
+ exports.default = app;
package/build/index.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const mongoose_1 = __importDefault(require("mongoose"));
16
+ const app_1 = __importDefault(require("./app"));
17
+ const start = () => __awaiter(void 0, void 0, void 0, function* () {
18
+ try {
19
+ if (process.env.MONGO_URI)
20
+ yield mongoose_1.default.connect(process.env.MONGO_URI);
21
+ else
22
+ throw new Error('Auth: MONGO_URI is undefined');
23
+ console.log('Auth database connected!');
24
+ }
25
+ catch (err) {
26
+ console.error(err);
27
+ }
28
+ const port = process.env.PORT || 3000;
29
+ app_1.default.listen(port, () => {
30
+ console.log('Auth service running on port:', port);
31
+ });
32
+ });
33
+ start();
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UserModel = void 0;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ const mongoose_bcrypt_1 = __importDefault(require("mongoose-bcrypt"));
9
+ const userSchema = new mongoose_1.default.Schema({
10
+ email: {
11
+ type: String,
12
+ required: true
13
+ },
14
+ password: {
15
+ type: String,
16
+ required: true
17
+ }
18
+ }, {
19
+ toJSON: {
20
+ versionKey: false,
21
+ transform(doc, ret) {
22
+ ret.id = ret._id;
23
+ delete ret._id;
24
+ delete ret.password;
25
+ }
26
+ }
27
+ });
28
+ userSchema.plugin(mongoose_bcrypt_1.default);
29
+ exports.UserModel = mongoose_1.default.model('User', userSchema);
30
+ class User extends exports.UserModel {
31
+ constructor(attributes) {
32
+ super(attributes);
33
+ }
34
+ }
35
+ exports.default = User;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const supertest_1 = __importDefault(require("supertest"));
16
+ const app_1 = __importDefault(require("../../app"));
17
+ const utils_1 = require("../../test/utils");
18
+ describe('Route: /api/users/current', () => {
19
+ it('responds with the current user', () => __awaiter(void 0, void 0, void 0, function* () {
20
+ const cookie = yield (0, utils_1.getTokenCookie)();
21
+ const response = yield (0, supertest_1.default)(app_1.default)
22
+ .get('/api/users/current')
23
+ .set('Cookie', cookie)
24
+ .send()
25
+ .expect(200);
26
+ expect(response.body.user.email).toEqual('test@test.com');
27
+ }));
28
+ it('responds with null if not authenticated', () => __awaiter(void 0, void 0, void 0, function* () {
29
+ const response = yield (0, supertest_1.default)(app_1.default)
30
+ .get('/api/users/current')
31
+ .send()
32
+ .expect(401);
33
+ expect(response.body.user).toEqual(null);
34
+ }));
35
+ });
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const supertest_1 = __importDefault(require("supertest"));
16
+ const app_1 = __importDefault(require("../../app"));
17
+ beforeEach(() => {
18
+ return (0, supertest_1.default)(app_1.default)
19
+ .post('/api/users/signup')
20
+ .send({ email: 'test@test.com', password: 'testpass' });
21
+ });
22
+ describe('Route: /api/users/signin', () => {
23
+ it('responds with 200 to successful signin request', () => __awaiter(void 0, void 0, void 0, function* () {
24
+ return (0, supertest_1.default)(app_1.default)
25
+ .post('/api/users/signin')
26
+ .send({ email: 'test@test.com', password: 'testpass' })
27
+ .expect(200);
28
+ }));
29
+ it('throws error on invalid email address during signin', () => __awaiter(void 0, void 0, void 0, function* () {
30
+ return (0, supertest_1.default)(app_1.default)
31
+ .post('/api/users/signin')
32
+ .send({ email: 'test_test com', password: 'testpass' })
33
+ .expect(400);
34
+ }));
35
+ it('throws error on missing email or password during signin', () => __awaiter(void 0, void 0, void 0, function* () {
36
+ yield (0, supertest_1.default)(app_1.default)
37
+ .post('/api/users/signin')
38
+ .send({ email: 'test@test.com', password: '' })
39
+ .expect(400);
40
+ yield (0, supertest_1.default)(app_1.default)
41
+ .post('/api/users/signin')
42
+ .send({ email: '', password: 'testpass' })
43
+ .expect(400);
44
+ }));
45
+ it('sets a cookie after successful signin', () => __awaiter(void 0, void 0, void 0, function* () {
46
+ const response = yield (0, supertest_1.default)(app_1.default)
47
+ .post('/api/users/signin')
48
+ .send({ email: 'test@test.com', password: 'testpass' })
49
+ .expect(200);
50
+ expect(response.get('Set-Cookie')).toBeDefined();
51
+ }));
52
+ });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const supertest_1 = __importDefault(require("supertest"));
16
+ const app_1 = __importDefault(require("../../app"));
17
+ describe('Route: /api/users/signout', () => {
18
+ it('clears cookie after signout', () => __awaiter(void 0, void 0, void 0, function* () {
19
+ const response = yield (0, supertest_1.default)(app_1.default)
20
+ .get('/api/users/signout')
21
+ .expect(200);
22
+ expect(response.get('Set-Cookie')).toBeDefined();
23
+ }));
24
+ });
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const supertest_1 = __importDefault(require("supertest"));
16
+ const app_1 = __importDefault(require("../../app"));
17
+ describe('Route: /api/users/signup', () => {
18
+ it('responds with 201 to successful signup request', () => __awaiter(void 0, void 0, void 0, function* () {
19
+ return (0, supertest_1.default)(app_1.default)
20
+ .post('/api/users/signup')
21
+ .send({ email: 'test@test.com', password: 'testpass' })
22
+ .expect(201);
23
+ }));
24
+ it('throws error on invalid email address during signup', () => __awaiter(void 0, void 0, void 0, function* () {
25
+ return (0, supertest_1.default)(app_1.default)
26
+ .post('/api/users/signup')
27
+ .send({ email: 'test_test com', password: 'testpass' })
28
+ .expect(400);
29
+ }));
30
+ it('throws error on invalid password during signup', () => __awaiter(void 0, void 0, void 0, function* () {
31
+ return (0, supertest_1.default)(app_1.default)
32
+ .post('/api/users/signup')
33
+ .send({ email: 'test@test.com', password: 'te' })
34
+ .expect(400);
35
+ }));
36
+ it('throws error on missing email or password during signup', () => __awaiter(void 0, void 0, void 0, function* () {
37
+ yield (0, supertest_1.default)(app_1.default)
38
+ .post('/api/users/signup')
39
+ .send({ email: 'test@test.com', password: '' })
40
+ .expect(400);
41
+ yield (0, supertest_1.default)(app_1.default)
42
+ .post('/api/users/signup')
43
+ .send({ email: '', password: 'testpass' })
44
+ .expect(400);
45
+ }));
46
+ it('throws error on existing email during signup', () => __awaiter(void 0, void 0, void 0, function* () {
47
+ yield (0, supertest_1.default)(app_1.default)
48
+ .post('/api/users/signup')
49
+ .send({ email: 'test@test.com', password: 'testpass' })
50
+ .expect(201);
51
+ yield (0, supertest_1.default)(app_1.default)
52
+ .post('/api/users/signup')
53
+ .send({ email: 'test@test.com', password: 'testpass' })
54
+ .expect(400);
55
+ }));
56
+ it('sets a cookie after successful signup', () => __awaiter(void 0, void 0, void 0, function* () {
57
+ const response = yield (0, supertest_1.default)(app_1.default)
58
+ .post('/api/users/signup')
59
+ .send({ email: 'test@test.com', password: 'testpass' });
60
+ expect(response.get('Set-Cookie')).toBeDefined();
61
+ }));
62
+ });
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const express_1 = __importDefault(require("express"));
16
+ const common_1 = require("@next-k8s/common");
17
+ // import { currentUser } from '../../../common/src'
18
+ const router = express_1.default.Router();
19
+ router.get('/api/users/current', common_1.currentUser, (req, res) => __awaiter(void 0, void 0, void 0, function* () {
20
+ res.status(!req.currentUser ? 401 : 200).json({ user: req.currentUser || null });
21
+ }));
22
+ exports.default = router;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const express_1 = __importDefault(require("express"));
16
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
17
+ const express_validator_1 = require("express-validator");
18
+ const common_1 = require("@next-k8s/common");
19
+ const user_1 = __importDefault(require("../models/user"));
20
+ const validateInput = [
21
+ (0, express_validator_1.body)('email').isEmail().withMessage('Email must be a valid email address'),
22
+ (0, express_validator_1.body)('password').trim().notEmpty().withMessage('A password must be provided')
23
+ ];
24
+ const router = express_1.default.Router();
25
+ router.post('/api/users/signin', validateInput, common_1.validateRequest, (req, res) => __awaiter(void 0, void 0, void 0, function* () {
26
+ const user = yield user_1.default.findOne({ email: req.body.email }).exec();
27
+ if (!user)
28
+ throw new common_1.UnauthorizedError('Incorrect username or password', 401, req.body.email);
29
+ const validPassword = yield user.verifyPassword(req.body.password);
30
+ if (!validPassword)
31
+ throw new common_1.UnauthorizedError('Incorrect username or password', 401, req.body.email);
32
+ const token = jsonwebtoken_1.default.sign({
33
+ id: user.id,
34
+ email: user.email
35
+ }, process.env.JWT_KEY);
36
+ req.session = { jwt: token };
37
+ res.json({ user, jwt: token });
38
+ }));
39
+ exports.default = router;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const express_1 = __importDefault(require("express"));
7
+ const router = express_1.default.Router();
8
+ router.get('/api/users/signout', (req, res) => {
9
+ req.session = null;
10
+ res.json({});
11
+ });
12
+ exports.default = router;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const express_1 = __importDefault(require("express"));
16
+ const express_validator_1 = require("express-validator");
17
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
18
+ const common_1 = require("@next-k8s/common");
19
+ const user_1 = __importDefault(require("../models/user"));
20
+ const router = express_1.default.Router();
21
+ const validateInput = [
22
+ (0, express_validator_1.body)('email').isEmail().withMessage('Email is not valid'),
23
+ (0, express_validator_1.body)('password').trim().isLength({ min: 4, max: 32 }).withMessage('Password must be between 4 and 32 characters')
24
+ ];
25
+ router.post('/api/users/signup', validateInput, common_1.validateRequest, (req, res) => __awaiter(void 0, void 0, void 0, function* () {
26
+ const { email, password } = req.body;
27
+ const exists = yield user_1.default.exists({ email: email.toLowerCase() });
28
+ if (exists)
29
+ throw new common_1.BadRequestError('User already exists');
30
+ try {
31
+ const user = new user_1.default({ email: email.toLowerCase(), password });
32
+ yield user.save();
33
+ const token = jsonwebtoken_1.default.sign({
34
+ id: user.id,
35
+ email: user.email
36
+ }, process.env.JWT_KEY);
37
+ req.session = { jwt: token };
38
+ res.status(201).json({ user, jwt: token });
39
+ }
40
+ catch (err) {
41
+ console.error(err);
42
+ throw new common_1.DatabaseConnectionError('Failed to insert user');
43
+ }
44
+ }));
45
+ exports.default = router;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const mongodb_memory_server_1 = require("mongodb-memory-server");
16
+ const mongoose_1 = __importDefault(require("mongoose"));
17
+ let mongo;
18
+ process.env.JWT_KEY = '!SuperSecretDevToken!';
19
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
20
+ mongo = yield mongodb_memory_server_1.MongoMemoryServer.create();
21
+ const uri = yield mongo.getUri();
22
+ yield mongoose_1.default.connect(uri);
23
+ }));
24
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
25
+ const collections = yield mongoose_1.default.connection.db.collections();
26
+ for (const collection of collections)
27
+ yield collection.deleteMany({});
28
+ }));
29
+ afterAll(() => __awaiter(void 0, void 0, void 0, function* () {
30
+ yield mongoose_1.default.connection.close();
31
+ yield mongo.stop();
32
+ }));
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.getTokenCookie = void 0;
16
+ const supertest_1 = __importDefault(require("supertest"));
17
+ const app_1 = __importDefault(require("../app"));
18
+ const getTokenCookie = () => __awaiter(void 0, void 0, void 0, function* () {
19
+ const email = 'test@test.com';
20
+ const password = 'testpass';
21
+ const response = yield (0, supertest_1.default)(app_1.default)
22
+ .post('/api/users/signup')
23
+ .send({ email, password })
24
+ .expect(201);
25
+ return response.get('Set-Cookie');
26
+ });
27
+ exports.getTokenCookie = getTokenCookie;
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@next-k8s/auth",
3
+ "version": "1.0.9",
4
+ "main": "index.js",
5
+ "license": "MIT",
6
+ "scripts": {
7
+ "start": "ts-node-dev --transpile-only --exit-child --watch src src/index.ts",
8
+ "build": "tsc",
9
+ "test": "jest --no-cache",
10
+ "test:watch": "jest --watchAll --no-cache"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "jest": {
16
+ "preset": "ts-jest",
17
+ "testEnvironment": "node",
18
+ "testPathIgnorePatterns": [
19
+ "build"
20
+ ],
21
+ "setupFilesAfterEnv": [
22
+ "./src/test/setup.ts"
23
+ ]
24
+ },
25
+ "dependencies": {
26
+ "@next-k8s/common": "^0.1.23",
27
+ "@types/cookie-session": "^2.0.44",
28
+ "@types/express": "^4.17.13",
29
+ "@types/jsonwebtoken": "^8.5.8",
30
+ "body-parser": "^1.20.0",
31
+ "cookie-session": "^2.0.0",
32
+ "express": "^4.18.1",
33
+ "express-async-errors": "^3.1.1",
34
+ "express-validator": "^6.14.1",
35
+ "jsonwebtoken": "^8.5.1",
36
+ "mongoose": "^6.3.5",
37
+ "mongoose-bcrypt": "^1.9.0",
38
+ "ts-node-dev": "^2.0.0",
39
+ "typescript": "^4.7.3"
40
+ },
41
+ "devDependencies": {
42
+ "@types/body-parser": "^1.19.2",
43
+ "@types/jest": "^28.1.1",
44
+ "@types/mongoose": "^5.11.97",
45
+ "@types/supertest": "^2.0.12",
46
+ "jest": "^28.1.1",
47
+ "mongodb-memory-server": "^8.6.0",
48
+ "supertest": "^6.2.3",
49
+ "ts-jest": "^28.0.4"
50
+ },
51
+ "gitHead": "e28ae26195b5a105e974ff366741832500b17b31"
52
+ }