@alanszp/express 6.0.4 → 7.0.1

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.
Files changed (47) hide show
  1. package/.env.test +5 -0
  2. package/babel.config.js +7 -0
  3. package/dist/helpers/now.d.ts +1 -0
  4. package/dist/helpers/now.js +8 -0
  5. package/dist/helpers/now.js.map +1 -0
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.js +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/middlewares/authenticateUser.d.ts +25 -0
  10. package/dist/middlewares/authenticateUser.js +114 -0
  11. package/dist/middlewares/authenticateUser.js.map +1 -0
  12. package/dist/middlewares/authenticateUser.test.d.ts +1 -0
  13. package/dist/middlewares/authenticateUser.test.js +308 -0
  14. package/dist/middlewares/authenticateUser.test.js.map +1 -0
  15. package/dist/test/mocks/authOptionsMocks.d.ts +8 -0
  16. package/dist/test/mocks/authOptionsMocks.js +30 -0
  17. package/dist/test/mocks/authOptionsMocks.js.map +1 -0
  18. package/dist/test/mocks/expressMocks.d.ts +5 -0
  19. package/dist/test/mocks/expressMocks.js +20 -0
  20. package/dist/test/mocks/expressMocks.js.map +1 -0
  21. package/dist/test/mocks/jwtUserMocks.d.ts +3 -0
  22. package/dist/test/mocks/jwtUserMocks.js +18 -0
  23. package/dist/test/mocks/jwtUserMocks.js.map +1 -0
  24. package/dist/test/setup.d.ts +1 -0
  25. package/dist/test/setup.js +5 -0
  26. package/dist/test/setup.js.map +1 -0
  27. package/dist/test/setup.test.d.ts +1 -0
  28. package/dist/test/setup.test.js +14 -0
  29. package/dist/test/setup.test.js.map +1 -0
  30. package/dist/types/AuthMethod.d.ts +1 -1
  31. package/jest.config.js +10 -0
  32. package/package.json +12 -7
  33. package/src/helpers/now.ts +3 -0
  34. package/src/index.ts +1 -1
  35. package/src/middlewares/authenticateUser.test.ts +403 -0
  36. package/src/middlewares/authenticateUser.ts +170 -0
  37. package/src/test/mocks/authOptionsMocks.ts +35 -0
  38. package/src/test/mocks/expressMocks.ts +17 -0
  39. package/src/test/mocks/jwtUserMocks.ts +17 -0
  40. package/src/test/setup.test.ts +15 -0
  41. package/src/test/setup.ts +3 -0
  42. package/src/types/AuthMethod.ts +4 -1
  43. package/tsconfig.json +5 -2
  44. package/dist/middlewares/authWithJWT.d.ts +0 -4
  45. package/dist/middlewares/authWithJWT.js +0 -56
  46. package/dist/middlewares/authWithJWT.js.map +0 -1
  47. package/src/middlewares/authWithJWT.ts +0 -54
package/.env.test ADDED
@@ -0,0 +1,5 @@
1
+ CONFIG_FROM_ENV=true
2
+ API_ORIGIN_NAME=chats
3
+ TZ=Etc/UTC
4
+ API_LOG_ENABLED=false
5
+ API_JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApmsYNSKkGFqU3TTmqRni\nZ7spL97ArlPprwm5CAUlFPsdhvxmxLhPZEDMfPEEzFYce5OBGMEs1sDSMlPgpz1g\nJefoHNE2udcl7Z4UeZ7VeIANq588Ns/l42ywMkjaaBZbNfVj9d4qkIoNRrzc3lwi\nf+FMWTsj05pSABuf0pEVdxbddF9UxnrNcYNTQ7V7pHl3rdBD3lYXxYEQXrb8DmCb\nfx47FVphb9iezQI8KNvnR8bG9Hgc8UHscd4qJjZEhcKIef2ovNRZltHGC/h/u3+3\n3OOCRHr6cQ5pHY/AP34Gq12LOvWXKLuWWbGj1pfNx3EzoWH7qPe3TELKSz4/KSNU\nykPYImBvcNj76QBYpf1dUhTRiWkWA8U3xHS48xsBek7ZG9yKiTCDOSJFsJilRl6w\nMikZD44RBB1hLEL2itX/eGStVMGsUaCN+blR+JY5s2CFvPx7wZHrmAtBj4Q72U3d\nDF1qsf4EjKsKNkp/5E3Wu8U1nJG+JnSEcQThpSutqs+wuJ/5KxVhOebkl76tUhJ8\niMYahSCV5RuOwiLXnlGokFztsMgft0y6ogFK3q8U8Lh+zi6iaCF6rS9XK40pcOqh\n2tK3tVwZKzJq5GNxzfs3jWwZINSA+zygB0dywibtQ0w5SCWVNu4MauOV1FZelJ5v\n3/5FVgq36hXtj0w8axz6x5UCAwEAAQ==\n-----END PUBLIC KEY-----"
@@ -0,0 +1,7 @@
1
+ // Used by Jest
2
+ module.exports = {
3
+ presets: [
4
+ ["@babel/preset-env", { targets: { node: "current" } }],
5
+ "@babel/preset-typescript",
6
+ ],
7
+ };
@@ -0,0 +1 @@
1
+ export declare function now(): Date;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.now = void 0;
4
+ function now() {
5
+ return new Date();
6
+ }
7
+ exports.now = now;
8
+ //# sourceMappingURL=now.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"now.js","sourceRoot":"","sources":["../../src/helpers/now.ts"],"names":[],"mappings":";;;AAAA,SAAgB,GAAG;IACjB,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAFD,kBAEC"}
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@ export * from "./middlewares/auditLog";
4
4
  export * from "./middlewares/accessLogger";
5
5
  export * from "./middlewares/authedForOrg";
6
6
  export * from "./middlewares/createContext";
7
- export * from "./middlewares/authWithJWT";
7
+ export * from "./middlewares/authenticateUser";
8
8
  export * from "./middlewares/returnInternalServerError";
9
9
  export * from "./middlewares/returnNotFound";
10
10
  export * from "./middlewares/jsonBodyParser";
package/dist/index.js CHANGED
@@ -16,7 +16,7 @@ __exportStar(require("./middlewares/auditLog"), exports);
16
16
  __exportStar(require("./middlewares/accessLogger"), exports);
17
17
  __exportStar(require("./middlewares/authedForOrg"), exports);
18
18
  __exportStar(require("./middlewares/createContext"), exports);
19
- __exportStar(require("./middlewares/authWithJWT"), exports);
19
+ __exportStar(require("./middlewares/authenticateUser"), exports);
20
20
  __exportStar(require("./middlewares/returnInternalServerError"), exports);
21
21
  __exportStar(require("./middlewares/returnNotFound"), exports);
22
22
  __exportStar(require("./middlewares/jsonBodyParser"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAkC;AAClC,qDAAmC;AACnC,yDAAuC;AACvC,6DAA2C;AAC3C,6DAA2C;AAC3C,8DAA4C;AAC5C,4DAA0C;AAC1C,0EAAwD;AACxD,+DAA6C;AAC7C,+DAA6C;AAC7C,yDAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAkC;AAClC,qDAAmC;AACnC,yDAAuC;AACvC,6DAA2C;AAC3C,6DAA2C;AAC3C,8DAA4C;AAC5C,iEAA+C;AAC/C,0EAAwD;AACxD,+DAA6C;AAC7C,+DAA6C;AAC7C,yDAAuC"}
@@ -0,0 +1,25 @@
1
+ import { VerifyOptions } from "@alanszp/jwt";
2
+ import { NextFunction, Response } from "express";
3
+ import { GenericRequest } from "../types/GenericRequest";
4
+ export declare enum AuthMethods {
5
+ JWT = "JWT",
6
+ API_KEY = "API_KEY"
7
+ }
8
+ export interface JWTVerifyOptions extends Partial<VerifyOptions> {
9
+ publicKey: string;
10
+ }
11
+ export interface JWTOptions {
12
+ jwtVerifyOptions: JWTVerifyOptions;
13
+ types: [AuthMethods.JWT];
14
+ }
15
+ export interface ApiKeyOptions {
16
+ validApiKeys: string[];
17
+ types: [AuthMethods.API_KEY];
18
+ }
19
+ export interface BothMethodsOptions {
20
+ jwtVerifyOptions: JWTVerifyOptions;
21
+ validApiKeys: string[];
22
+ types: [AuthMethods.JWT, AuthMethods.API_KEY] | [AuthMethods.API_KEY, AuthMethods.JWT];
23
+ }
24
+ export declare type AuthOptions = JWTOptions | ApiKeyOptions | BothMethodsOptions;
25
+ export declare function createAuthContext<Options extends AuthOptions>(options: Options): (authMethods: Options["types"][number][]) => (req: GenericRequest, res: Response, next: NextFunction) => Promise<void>;
@@ -0,0 +1,114 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createAuthContext = exports.AuthMethods = void 0;
13
+ const jwt_1 = require("@alanszp/jwt");
14
+ const errors_1 = require("@alanszp/errors");
15
+ const errorView_1 = require("../views/errorView");
16
+ const getRequestLogger_1 = require("../helpers/getRequestLogger");
17
+ const lodash_1 = require("lodash");
18
+ function parseAuthorizationHeader(authorization) {
19
+ if (!authorization)
20
+ return undefined;
21
+ const [bearer, jwt, ...other] = authorization.split(" ");
22
+ if (bearer !== "Bearer" || other.length > 0)
23
+ return undefined;
24
+ return jwt;
25
+ }
26
+ var AuthMethods;
27
+ (function (AuthMethods) {
28
+ AuthMethods["JWT"] = "JWT";
29
+ AuthMethods["API_KEY"] = "API_KEY";
30
+ })(AuthMethods = exports.AuthMethods || (exports.AuthMethods = {}));
31
+ const middlewareGetterByAuthType = {
32
+ [AuthMethods.JWT]: (jwt, options, logger) => __awaiter(void 0, void 0, void 0, function* () {
33
+ try {
34
+ if (!jwt)
35
+ return undefined;
36
+ const jwtUser = yield (0, jwt_1.verifyJWT)(options.jwtVerifyOptions.publicKey, jwt, (0, lodash_1.omit)(options.jwtVerifyOptions, "publicKey"));
37
+ logger.debug("auth.authWithJwt.authed", {
38
+ user: jwtUser.id,
39
+ org: jwtUser.organizationReference,
40
+ });
41
+ return jwtUser;
42
+ }
43
+ catch (error) {
44
+ logger.info("auth.authWithJwt.invalidJwt", { jwt, error });
45
+ return null;
46
+ }
47
+ }),
48
+ [AuthMethods.API_KEY]: (token, options, logger) => __awaiter(void 0, void 0, void 0, function* () {
49
+ try {
50
+ if (!token)
51
+ return undefined;
52
+ if (options.validApiKeys.includes(token)) {
53
+ logger.debug("auth.authWithApiKey.authed", {
54
+ user: "0",
55
+ org: "lara",
56
+ });
57
+ return Promise.resolve({
58
+ id: "0",
59
+ employeeReference: "0",
60
+ organizationReference: "lara",
61
+ roles: [],
62
+ permissions: [],
63
+ });
64
+ }
65
+ else {
66
+ return null;
67
+ }
68
+ }
69
+ catch (error) {
70
+ logger.info("auth.authWithApiKey.invalidApiKey", { token, error });
71
+ return null;
72
+ }
73
+ }),
74
+ };
75
+ function createAuthContext(options) {
76
+ return function getMiddlewareForMethods(authMethods) {
77
+ return function authWithGivenMethods(req, res, next) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ const logger = (0, getRequestLogger_1.getRequestLogger)(req);
80
+ const cookies = req.cookies || {};
81
+ const jwt = cookies.jwt || parseAuthorizationHeader(req.headers.authorization);
82
+ try {
83
+ const authAttempts = yield Promise.all(authMethods.map((method) => middlewareGetterByAuthType[method](method === AuthMethods.JWT ? jwt : req.headers.authorization, options, logger)));
84
+ const successfulAuthAttempts = (0, lodash_1.compact)(authAttempts);
85
+ if ((0, lodash_1.isEmpty)(successfulAuthAttempts)) {
86
+ res
87
+ .status(401)
88
+ .json((0, errorView_1.errorView)(new errors_1.UnauthorizedError([
89
+ authAttempts.includes(null)
90
+ ? `Token invalid for methods ${authMethods}`
91
+ : `Token not set for methods ${authMethods}`,
92
+ ])));
93
+ return;
94
+ }
95
+ const jwtUser = successfulAuthAttempts[0];
96
+ req.context.jwtUser = jwtUser;
97
+ req.context.authenticated.push(jwtUser.employeeReference !== "0" ? "jwt" : "api_key");
98
+ next();
99
+ }
100
+ catch (error) {
101
+ logger.info("auth.authenticateUser.error", {
102
+ jwt,
103
+ token: req.headers.authorization,
104
+ methods: AuthMethods,
105
+ error,
106
+ });
107
+ res.status(401).json((0, errorView_1.errorView)(new errors_1.UnauthorizedError(authMethods)));
108
+ }
109
+ });
110
+ };
111
+ };
112
+ }
113
+ exports.createAuthContext = createAuthContext;
114
+ //# sourceMappingURL=authenticateUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticateUser.js","sourceRoot":"","sources":["../../src/middlewares/authenticateUser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,308 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const authenticateUser_1 = require("./authenticateUser");
13
+ const jwt_1 = require("@alanszp/jwt");
14
+ const expressMocks_1 = require("../test/mocks/expressMocks");
15
+ const jwtUserMocks_1 = require("../test/mocks/jwtUserMocks");
16
+ const authOptionsMocks_1 = require("../test/mocks/authOptionsMocks");
17
+ jest.mock("@alanszp/jwt");
18
+ describe("AuthenticateUser", () => {
19
+ describe("authentication with only JWT", () => {
20
+ describe("when jwt verifies correctly", () => {
21
+ it("should authenticate correctly and call next", () => __awaiter(void 0, void 0, void 0, function* () {
22
+ jwt_1.verifyJWT.mockResolvedValueOnce(jwtUserMocks_1.userJwtUserMock);
23
+ const req = (0, expressMocks_1.mockRequest)("Bearer token");
24
+ const res = (0, expressMocks_1.mockResponse)();
25
+ const next = (0, expressMocks_1.mockNext)();
26
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.jwtAuthOptions)([authenticateUser_1.AuthMethods.JWT])(req, res, next);
27
+ expect(jwt_1.verifyJWT).toBeCalledWith("publicKey", "token", authOptionsMocks_1.verifyOptions);
28
+ expect(res.status).toHaveBeenCalledTimes(0);
29
+ expect(res.json).toHaveBeenCalledTimes(0);
30
+ expect(req.context.jwtUser).toMatchObject(jwtUserMocks_1.userJwtUserMock);
31
+ expect(req.context.authenticated).toStrictEqual(["jwt"]);
32
+ expect(next).toBeCalledWith();
33
+ }));
34
+ });
35
+ describe("when jwt verifies incorrectly", () => {
36
+ it("should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
37
+ jwt_1.verifyJWT.mockResolvedValueOnce(undefined);
38
+ const req = (0, expressMocks_1.mockRequest)("Bearer token");
39
+ const res = (0, expressMocks_1.mockResponse)();
40
+ const next = (0, expressMocks_1.mockNext)();
41
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.jwtAuthOptions)([authenticateUser_1.AuthMethods.JWT])(req, res, next);
42
+ expect(jwt_1.verifyJWT).toBeCalledWith("publicKey", "token", authOptionsMocks_1.verifyOptions);
43
+ expect(res.status).toHaveBeenCalledWith(401);
44
+ expect(res.json).toHaveBeenCalledTimes(1);
45
+ expect(req.context.jwtUser).toBe(undefined);
46
+ expect(req.context.authenticated).toEqual([]);
47
+ expect(next).toHaveBeenCalledTimes(0);
48
+ }));
49
+ });
50
+ describe("when jwt doesn't exist", () => {
51
+ it("should not verify JWT, should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
52
+ const req = (0, expressMocks_1.mockRequest)("aa");
53
+ const res = (0, expressMocks_1.mockResponse)();
54
+ const next = (0, expressMocks_1.mockNext)();
55
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.jwtAuthOptions)([authenticateUser_1.AuthMethods.JWT])(req, res, next);
56
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
57
+ expect(res.status).toHaveBeenCalledWith(401);
58
+ expect(res.json).toHaveBeenCalledTimes(1);
59
+ expect(req.context.jwtUser).toBe(undefined);
60
+ expect(req.context.authenticated).toEqual([]);
61
+ expect(next).toHaveBeenCalledTimes(0);
62
+ }));
63
+ });
64
+ });
65
+ describe("authentication with only API KEY", () => {
66
+ describe("when api key verifies correctly", () => {
67
+ it("should authenticate correctly and call next", () => __awaiter(void 0, void 0, void 0, function* () {
68
+ const req = (0, expressMocks_1.mockRequest)("token");
69
+ const res = (0, expressMocks_1.mockResponse)();
70
+ const next = (0, expressMocks_1.mockNext)();
71
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.apiKeyAuthOptions)([authenticateUser_1.AuthMethods.API_KEY])(req, res, next);
72
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
73
+ expect(res.status).toHaveBeenCalledTimes(0);
74
+ expect(res.json).toHaveBeenCalledTimes(0);
75
+ expect(req.context.jwtUser).toMatchObject(jwtUserMocks_1.laraJwtUserMock);
76
+ expect(req.context.authenticated).toStrictEqual(["api_key"]);
77
+ expect(next).toBeCalledWith();
78
+ }));
79
+ });
80
+ describe("when api key verifies incorrectly", () => {
81
+ it("should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
82
+ const req = (0, expressMocks_1.mockRequest)("invalidToken");
83
+ const res = (0, expressMocks_1.mockResponse)();
84
+ const next = (0, expressMocks_1.mockNext)();
85
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.apiKeyAuthOptions)([authenticateUser_1.AuthMethods.API_KEY])(req, res, next);
86
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
87
+ expect(res.status).toHaveBeenCalledWith(401);
88
+ expect(res.json).toHaveBeenCalledTimes(1);
89
+ expect(req.context.jwtUser).toBe(undefined);
90
+ expect(req.context.authenticated).toEqual([]);
91
+ expect(next).toHaveBeenCalledTimes(0);
92
+ }));
93
+ });
94
+ describe("when api key doesn't exist", () => {
95
+ it("should not verify api key, should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
96
+ const req = (0, expressMocks_1.mockRequest)(undefined);
97
+ const res = (0, expressMocks_1.mockResponse)();
98
+ const next = (0, expressMocks_1.mockNext)();
99
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.apiKeyAuthOptions)([authenticateUser_1.AuthMethods.API_KEY])(req, res, next);
100
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
101
+ expect(res.status).toHaveBeenCalledWith(401);
102
+ expect(res.json).toHaveBeenCalledTimes(1);
103
+ expect(req.context.jwtUser).toBe(undefined);
104
+ expect(req.context.authenticated).toEqual([]);
105
+ expect(next).toHaveBeenCalledTimes(0);
106
+ }));
107
+ });
108
+ });
109
+ describe("authentication with JWT and API KEY", () => {
110
+ describe("using both methods", () => {
111
+ describe("when api key verifies correctly", () => {
112
+ it("should authenticate correctly and call next", () => __awaiter(void 0, void 0, void 0, function* () {
113
+ const req = (0, expressMocks_1.mockRequest)("token");
114
+ const res = (0, expressMocks_1.mockResponse)();
115
+ const next = (0, expressMocks_1.mockNext)();
116
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([
117
+ authenticateUser_1.AuthMethods.API_KEY,
118
+ authenticateUser_1.AuthMethods.JWT,
119
+ ])(req, res, next);
120
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
121
+ expect(res.status).toHaveBeenCalledTimes(0);
122
+ expect(res.json).toHaveBeenCalledTimes(0);
123
+ expect(req.context.jwtUser).toMatchObject(jwtUserMocks_1.laraJwtUserMock);
124
+ expect(req.context.authenticated).toStrictEqual(["api_key"]);
125
+ expect(next).toHaveBeenCalledWith();
126
+ }));
127
+ });
128
+ describe("when api key verifies incorrectly", () => {
129
+ it("should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
130
+ const req = (0, expressMocks_1.mockRequest)("invalidToken");
131
+ const res = (0, expressMocks_1.mockResponse)();
132
+ const next = (0, expressMocks_1.mockNext)();
133
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([
134
+ authenticateUser_1.AuthMethods.API_KEY,
135
+ authenticateUser_1.AuthMethods.JWT,
136
+ ])(req, res, next);
137
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
138
+ expect(res.status).toHaveBeenCalledWith(401);
139
+ expect(res.json).toHaveBeenCalledTimes(1);
140
+ expect(req.context.jwtUser).toBe(undefined);
141
+ expect(req.context.authenticated).toEqual([]);
142
+ expect(next).toHaveBeenCalledTimes(0);
143
+ }));
144
+ });
145
+ describe("when jwt verifies correctly", () => {
146
+ it("should authenticate correctly and call next", () => __awaiter(void 0, void 0, void 0, function* () {
147
+ jwt_1.verifyJWT.mockResolvedValueOnce(jwtUserMocks_1.userJwtUserMock);
148
+ const req = (0, expressMocks_1.mockRequest)("Bearer token");
149
+ const res = (0, expressMocks_1.mockResponse)();
150
+ const next = (0, expressMocks_1.mockNext)();
151
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([
152
+ authenticateUser_1.AuthMethods.API_KEY,
153
+ authenticateUser_1.AuthMethods.JWT,
154
+ ])(req, res, next);
155
+ expect(jwt_1.verifyJWT).toBeCalledWith("publicKey", "token", {
156
+ issuer: "issuer",
157
+ audience: "audience",
158
+ });
159
+ expect(res.status).toHaveBeenCalledTimes(0);
160
+ expect(res.json).toHaveBeenCalledTimes(0);
161
+ expect(req.context.jwtUser).toMatchObject(jwtUserMocks_1.userJwtUserMock);
162
+ expect(req.context.authenticated).toStrictEqual(["jwt"]);
163
+ expect(next).toHaveBeenCalledWith();
164
+ }));
165
+ });
166
+ describe("when jwt verifies incorrectly", () => {
167
+ it("should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
168
+ jwt_1.verifyJWT.mockResolvedValueOnce(undefined);
169
+ const req = (0, expressMocks_1.mockRequest)("Bearer token");
170
+ const res = (0, expressMocks_1.mockResponse)();
171
+ const next = (0, expressMocks_1.mockNext)();
172
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([
173
+ authenticateUser_1.AuthMethods.API_KEY,
174
+ authenticateUser_1.AuthMethods.JWT,
175
+ ])(req, res, next);
176
+ expect(jwt_1.verifyJWT).toBeCalledWith("publicKey", "token", {
177
+ issuer: "issuer",
178
+ audience: "audience",
179
+ });
180
+ expect(res.status).toHaveBeenCalledWith(401);
181
+ expect(res.json).toHaveBeenCalledTimes(1);
182
+ expect(req.context.jwtUser).toBe(undefined);
183
+ expect(req.context.authenticated).toEqual([]);
184
+ expect(next).toHaveBeenCalledTimes(0);
185
+ }));
186
+ });
187
+ describe("when jwt doesnt exist", () => {
188
+ it("should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
189
+ const req = (0, expressMocks_1.mockRequest)(undefined);
190
+ const res = (0, expressMocks_1.mockResponse)();
191
+ const next = (0, expressMocks_1.mockNext)();
192
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([
193
+ authenticateUser_1.AuthMethods.API_KEY,
194
+ authenticateUser_1.AuthMethods.JWT,
195
+ ])(req, res, next);
196
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
197
+ expect(res.status).toHaveBeenCalledWith(401);
198
+ expect(res.json).toHaveBeenCalledTimes(1);
199
+ expect(req.context.jwtUser).toBe(undefined);
200
+ expect(req.context.authenticated).toEqual([]);
201
+ expect(next).toHaveBeenCalledTimes(0);
202
+ }));
203
+ });
204
+ });
205
+ describe("using jwt method", () => {
206
+ describe("when jwt verifies correctly", () => {
207
+ it("should authenticate correctly and call next", () => __awaiter(void 0, void 0, void 0, function* () {
208
+ jwt_1.verifyJWT.mockResolvedValueOnce(jwtUserMocks_1.userJwtUserMock);
209
+ const req = (0, expressMocks_1.mockRequest)("Bearer token");
210
+ const res = (0, expressMocks_1.mockResponse)();
211
+ const next = (0, expressMocks_1.mockNext)();
212
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([authenticateUser_1.AuthMethods.JWT])(req, res, next);
213
+ expect(jwt_1.verifyJWT).toBeCalledWith("publicKey", "token", {
214
+ issuer: "issuer",
215
+ audience: "audience",
216
+ });
217
+ expect(res.status).toHaveBeenCalledTimes(0);
218
+ expect(res.json).toHaveBeenCalledTimes(0);
219
+ expect(req.context.jwtUser).toMatchObject(jwtUserMocks_1.userJwtUserMock);
220
+ expect(req.context.authenticated).toStrictEqual(["jwt"]);
221
+ expect(next).toHaveBeenCalledWith();
222
+ }));
223
+ });
224
+ describe("when jwt verifies incorrectly", () => {
225
+ it("should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
226
+ jwt_1.verifyJWT.mockResolvedValueOnce(undefined);
227
+ const req = (0, expressMocks_1.mockRequest)("Bearer invalidToken");
228
+ const res = (0, expressMocks_1.mockResponse)();
229
+ const next = (0, expressMocks_1.mockNext)();
230
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([authenticateUser_1.AuthMethods.JWT])(req, res, next);
231
+ expect(jwt_1.verifyJWT).toBeCalledWith("publicKey", "invalidToken", {
232
+ issuer: "issuer",
233
+ audience: "audience",
234
+ });
235
+ expect(res.status).toHaveBeenCalledWith(401);
236
+ expect(res.json).toHaveBeenCalledTimes(1);
237
+ expect(req.context.jwtUser).toBe(undefined);
238
+ expect(req.context.authenticated).toEqual([]);
239
+ expect(next).toHaveBeenCalledTimes(0);
240
+ }));
241
+ });
242
+ describe("when api key verifies correctly", () => {
243
+ it("should authenticate correctly and call next", () => __awaiter(void 0, void 0, void 0, function* () {
244
+ const req = (0, expressMocks_1.mockRequest)("token");
245
+ const res = (0, expressMocks_1.mockResponse)();
246
+ const next = (0, expressMocks_1.mockNext)();
247
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([
248
+ authenticateUser_1.AuthMethods.API_KEY,
249
+ ])(req, res, next);
250
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
251
+ expect(res.status).toHaveBeenCalledTimes(0);
252
+ expect(res.json).toHaveBeenCalledTimes(0);
253
+ expect(req.context.jwtUser).toMatchObject(jwtUserMocks_1.laraJwtUserMock);
254
+ expect(req.context.authenticated).toStrictEqual(["api_key"]);
255
+ expect(next).toHaveBeenCalledWith();
256
+ }));
257
+ });
258
+ describe("when api key verifies incorrectly", () => {
259
+ it("should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
260
+ const req = (0, expressMocks_1.mockRequest)("invalidToken");
261
+ const res = (0, expressMocks_1.mockResponse)();
262
+ const next = (0, expressMocks_1.mockNext)();
263
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([
264
+ authenticateUser_1.AuthMethods.API_KEY,
265
+ authenticateUser_1.AuthMethods.JWT,
266
+ ])(req, res, next);
267
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
268
+ expect(res.status).toHaveBeenCalledWith(401);
269
+ expect(res.json).toHaveBeenCalledTimes(1);
270
+ expect(req.context.jwtUser).toBe(undefined);
271
+ expect(req.context.authenticated).toEqual([]);
272
+ expect(next).toHaveBeenCalledTimes(0);
273
+ }));
274
+ });
275
+ describe("when jwt doesnt exist", () => {
276
+ it("should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
277
+ const req = (0, expressMocks_1.mockRequest)("aaa");
278
+ const res = (0, expressMocks_1.mockResponse)();
279
+ const next = (0, expressMocks_1.mockNext)();
280
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([authenticateUser_1.AuthMethods.JWT])(req, res, next);
281
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
282
+ expect(res.status).toHaveBeenCalledWith(401);
283
+ expect(res.json).toHaveBeenCalledTimes(1);
284
+ expect(req.context.jwtUser).toBe(undefined);
285
+ expect(req.context.authenticated).toEqual([]);
286
+ expect(next).toHaveBeenCalledTimes(0);
287
+ }));
288
+ });
289
+ describe("when api key doesnt exist", () => {
290
+ it("should not authenticate, should not call next, and it should return 401", () => __awaiter(void 0, void 0, void 0, function* () {
291
+ const req = (0, expressMocks_1.mockRequest)(undefined);
292
+ const res = (0, expressMocks_1.mockResponse)();
293
+ const next = (0, expressMocks_1.mockNext)();
294
+ yield (0, authenticateUser_1.createAuthContext)(authOptionsMocks_1.bothMethodsAuthOptions)([
295
+ authenticateUser_1.AuthMethods.API_KEY,
296
+ ])(req, res, next);
297
+ expect(jwt_1.verifyJWT).toHaveBeenCalledTimes(0);
298
+ expect(res.status).toHaveBeenCalledWith(401);
299
+ expect(res.json).toHaveBeenCalledTimes(1);
300
+ expect(req.context.jwtUser).toBe(undefined);
301
+ expect(req.context.authenticated).toEqual([]);
302
+ expect(next).toHaveBeenCalledTimes(0);
303
+ }));
304
+ });
305
+ });
306
+ });
307
+ });
308
+ //# sourceMappingURL=authenticateUser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticateUser.test.js","sourceRoot":"","sources":["../../src/middlewares/authenticateUser.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,yDAAoE;AACpE,sCAAyC;AACzC,6DAIoC;AACpC,6DAA8E;AAC9E,qEAKwC;AAExC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAE1B,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;YAC3C,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;gBAC1D,eAAuB,CAAC,qBAAqB,CAAC,8BAAe,CAAC,CAAC;gBAEhE,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,cAAc,CAAC,CAAC;gBACxC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;gBAExB,MAAM,IAAA,oCAAiB,EAAC,iCAAc,CAAC,CAAC,CAAC,8BAAW,CAAC,GAAG,CAAC,CAAC,CACxD,GAAG,EACH,GAAG,EACH,IAAI,CACL,CAAC;gBAEF,MAAM,CAAC,eAAS,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,gCAAa,CAAC,CAAC;gBACtE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,8BAAe,CAAC,CAAC;gBAC3D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YAChC,CAAC,CAAA,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;YAC7C,EAAE,CAAC,yEAAyE,EAAE,GAAS,EAAE;gBACtF,eAAuB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;gBAE1D,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,cAAc,CAAC,CAAC;gBACxC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;gBAExB,MAAM,IAAA,oCAAiB,EAAC,iCAAc,CAAC,CAAC,CAAC,8BAAW,CAAC,GAAG,CAAC,CAAC,CACxD,GAAG,EACH,GAAG,EACH,IAAI,CACL,CAAC;gBAEF,MAAM,CAAC,eAAS,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,gCAAa,CAAC,CAAC;gBACtE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC,CAAA,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;YACtC,EAAE,CAAC,gGAAgG,EAAE,GAAS,EAAE;gBAC9G,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,IAAI,CAAC,CAAC;gBAC9B,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;gBAExB,MAAM,IAAA,oCAAiB,EAAC,iCAAc,CAAC,CAAC,CAAC,8BAAW,CAAC,GAAG,CAAC,CAAC,CACxD,GAAG,EACH,GAAG,EACH,IAAI,CACL,CAAC;gBAEF,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC,CAAA,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;YAC/C,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;gBAC3D,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,OAAO,CAAC,CAAC;gBACjC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;gBAExB,MAAM,IAAA,oCAAiB,EAAC,oCAAiB,CAAC,CAAC,CAAC,8BAAW,CAAC,OAAO,CAAC,CAAC,CAC/D,GAAG,EACH,GAAG,EACH,IAAI,CACL,CAAC;gBAEF,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,8BAAe,CAAC,CAAC;gBAC3D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YAChC,CAAC,CAAA,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;YACjD,EAAE,CAAC,yEAAyE,EAAE,GAAS,EAAE;gBACvF,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,cAAc,CAAC,CAAC;gBACxC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;gBAExB,MAAM,IAAA,oCAAiB,EAAC,oCAAiB,CAAC,CAAC,CAAC,8BAAW,CAAC,OAAO,CAAC,CAAC,CAC/D,GAAG,EACH,GAAG,EACH,IAAI,CACL,CAAC;gBAEF,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC,CAAA,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,EAAE,CAAC,oGAAoG,EAAE,GAAS,EAAE;gBAClH,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,SAAgB,CAAC,CAAC;gBAC1C,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;gBAExB,MAAM,IAAA,oCAAiB,EAAC,oCAAiB,CAAC,CAAC,CAAC,8BAAW,CAAC,OAAO,CAAC,CAAC,CAC/D,GAAG,EACH,GAAG,EACH,IAAI,CACL,CAAC;gBAEF,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC,CAAA,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;QACnD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;gBAC/C,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;oBAC3D,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,OAAO,CAAC,CAAC;oBACjC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC;wBAC9C,8BAAW,CAAC,OAAO;wBACnB,8BAAW,CAAC,GAAG;qBAChB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAEnB,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,8BAAe,CAAC,CAAC;oBAC3D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;gBACtC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBACjD,EAAE,CAAC,yEAAyE,EAAE,GAAS,EAAE;oBACvF,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,cAAc,CAAC,CAAC;oBACxC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC;wBAC9C,8BAAW,CAAC,OAAO;wBACnB,8BAAW,CAAC,GAAG;qBAChB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAEnB,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;gBAC3C,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;oBAC1D,eAAuB,CAAC,qBAAqB,CAAC,8BAAe,CAAC,CAAC;oBAEhE,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,cAAc,CAAC,CAAC;oBACxC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC;wBAC9C,8BAAW,CAAC,OAAO;wBACnB,8BAAW,CAAC,GAAG;qBAChB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAEnB,MAAM,CAAC,eAAS,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE;wBACrD,MAAM,EAAE,QAAQ;wBAChB,QAAQ,EAAE,UAAU;qBACrB,CAAC,CAAC;oBACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAE1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,8BAAe,CAAC,CAAC;oBAE3D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAEzD,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;gBACtC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBAC7C,EAAE,CAAC,yEAAyE,EAAE,GAAS,EAAE;oBACtF,eAAuB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;oBAE1D,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,cAAc,CAAC,CAAC;oBACxC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC;wBAC9C,8BAAW,CAAC,OAAO;wBACnB,8BAAW,CAAC,GAAG;qBAChB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAEnB,MAAM,CAAC,eAAS,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE;wBACrD,MAAM,EAAE,QAAQ;wBAChB,QAAQ,EAAE,UAAU;qBACrB,CAAC,CAAC;oBACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;gBACrC,EAAE,CAAC,yEAAyE,EAAE,GAAS,EAAE;oBACvF,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,SAAgB,CAAC,CAAC;oBAC1C,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC;wBAC9C,8BAAW,CAAC,OAAO;wBACnB,8BAAW,CAAC,GAAG;qBAChB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAEnB,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAChC,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;gBAC3C,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;oBAC1D,eAAuB,CAAC,qBAAqB,CAAC,8BAAe,CAAC,CAAC;oBAEhE,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,cAAc,CAAC,CAAC;oBACxC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC,CAAC,8BAAW,CAAC,GAAG,CAAC,CAAC,CAChE,GAAG,EACH,GAAG,EACH,IAAI,CACL,CAAC;oBAEF,MAAM,CAAC,eAAS,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE;wBACrD,MAAM,EAAE,QAAQ;wBAChB,QAAQ,EAAE,UAAU;qBACrB,CAAC,CAAC;oBACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,8BAAe,CAAC,CAAC;oBAC3D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzD,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;gBACtC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBAC7C,EAAE,CAAC,yEAAyE,EAAE,GAAS,EAAE;oBACtF,eAAuB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;oBAE1D,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,qBAAqB,CAAC,CAAC;oBAC/C,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC,CAAC,8BAAW,CAAC,GAAG,CAAC,CAAC,CAChE,GAAG,EACH,GAAG,EACH,IAAI,CACL,CAAC;oBAEF,MAAM,CAAC,eAAS,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,cAAc,EAAE;wBAC5D,MAAM,EAAE,QAAQ;wBAChB,QAAQ,EAAE,UAAU;qBACrB,CAAC,CAAC;oBACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;gBAC/C,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;oBAC3D,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,OAAO,CAAC,CAAC;oBACjC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC;wBAC9C,8BAAW,CAAC,OAAO;qBACpB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAEnB,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAE1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,8BAAe,CAAC,CAAC;oBAC3D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;gBACtC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBACjD,EAAE,CAAC,yEAAyE,EAAE,GAAS,EAAE;oBACvF,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,cAAc,CAAC,CAAC;oBACxC,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC;wBAC9C,8BAAW,CAAC,OAAO;wBACnB,8BAAW,CAAC,GAAG;qBAChB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAEnB,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;gBACrC,EAAE,CAAC,yEAAyE,EAAE,GAAS,EAAE;oBACvF,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,KAAK,CAAC,CAAC;oBAC/B,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC,CAAC,8BAAW,CAAC,GAAG,CAAC,CAAC,CAChE,GAAG,EACH,GAAG,EACH,IAAI,CACL,CAAC;oBAEF,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;gBACzC,EAAE,CAAC,yEAAyE,EAAE,GAAS,EAAE;oBACvF,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,SAAgB,CAAC,CAAC;oBAC1C,MAAM,GAAG,GAAG,IAAA,2BAAY,GAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAA,uBAAQ,GAAE,CAAC;oBAExB,MAAM,IAAA,oCAAiB,EAAC,yCAAsB,CAAC,CAAC;wBAC9C,8BAAW,CAAC,OAAO;qBACpB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAEnB,MAAM,CAAC,eAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAA,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { ApiKeyOptions, BothMethodsOptions, JWTOptions } from "../../middlewares/authenticateUser";
2
+ export declare const jwtAuthOptions: JWTOptions;
3
+ export declare const verifyOptions: {
4
+ issuer: string;
5
+ audience: string;
6
+ };
7
+ export declare const apiKeyAuthOptions: ApiKeyOptions;
8
+ export declare const bothMethodsAuthOptions: BothMethodsOptions;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bothMethodsAuthOptions = exports.apiKeyAuthOptions = exports.verifyOptions = exports.jwtAuthOptions = void 0;
4
+ const authenticateUser_1 = require("../../middlewares/authenticateUser");
5
+ exports.jwtAuthOptions = {
6
+ jwtVerifyOptions: {
7
+ publicKey: "publicKey",
8
+ issuer: "issuer",
9
+ audience: "audience",
10
+ },
11
+ types: [authenticateUser_1.AuthMethods.JWT],
12
+ };
13
+ exports.verifyOptions = {
14
+ issuer: "issuer",
15
+ audience: "audience",
16
+ };
17
+ exports.apiKeyAuthOptions = {
18
+ validApiKeys: ["token", "tooooken"],
19
+ types: [authenticateUser_1.AuthMethods.API_KEY],
20
+ };
21
+ exports.bothMethodsAuthOptions = {
22
+ jwtVerifyOptions: {
23
+ publicKey: "publicKey",
24
+ issuer: "issuer",
25
+ audience: "audience",
26
+ },
27
+ validApiKeys: ["token", "tooooken"],
28
+ types: [authenticateUser_1.AuthMethods.API_KEY, authenticateUser_1.AuthMethods.JWT],
29
+ };
30
+ //# sourceMappingURL=authOptionsMocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authOptionsMocks.js","sourceRoot":"","sources":["../../../src/test/mocks/authOptionsMocks.ts"],"names":[],"mappings":";;;AAAA,yEAK4C;AAE/B,QAAA,cAAc,GAAG;IAC5B,gBAAgB,EAAE;QAChB,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,UAAU;KACrB;IACD,KAAK,EAAE,CAAC,8BAAW,CAAC,GAAG,CAAC;CACJ,CAAC;AAEV,QAAA,aAAa,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEW,QAAA,iBAAiB,GAAkB;IAC9C,YAAY,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;IACnC,KAAK,EAAE,CAAC,8BAAW,CAAC,OAAO,CAAC;CAC7B,CAAC;AAEW,QAAA,sBAAsB,GAAuB;IACxD,gBAAgB,EAAE;QAChB,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,UAAU;KACrB;IACD,YAAY,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;IACnC,KAAK,EAAE,CAAC,8BAAW,CAAC,OAAO,EAAE,8BAAW,CAAC,GAAG,CAAC;CAC9C,CAAC"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="jest" />
2
+ import { GenericRequest } from "../../types/GenericRequest";
3
+ export declare const mockRequest: (authorization: string) => GenericRequest;
4
+ export declare const mockResponse: () => any;
5
+ export declare const mockNext: () => jest.Mock<any, any>;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mockNext = exports.mockResponse = exports.mockRequest = void 0;
4
+ const mockRequest = (authorization) => {
5
+ return {
6
+ headers: { authorization },
7
+ context: { jwtUser: undefined, authenticated: [] },
8
+ };
9
+ };
10
+ exports.mockRequest = mockRequest;
11
+ const mockResponse = () => {
12
+ const res = {};
13
+ res.status = jest.fn().mockReturnValue(res);
14
+ res.json = jest.fn().mockReturnValue(res);
15
+ return res;
16
+ };
17
+ exports.mockResponse = mockResponse;
18
+ const mockNext = () => jest.fn();
19
+ exports.mockNext = mockNext;
20
+ //# sourceMappingURL=expressMocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressMocks.js","sourceRoot":"","sources":["../../../src/test/mocks/expressMocks.ts"],"names":[],"mappings":";;;AAEO,MAAM,WAAW,GAAG,CAAC,aAAqB,EAAkB,EAAE;IACnE,OAAO;QACL,OAAO,EAAE,EAAE,aAAa,EAAE;QAC1B,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,EAAE;KAC1B,CAAC;AAC7B,CAAC,CAAC;AALW,QAAA,WAAW,eAKtB;AAEK,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,MAAM,GAAG,GAAG,EAAS,CAAC;IACtB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC5C,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AALW,QAAA,YAAY,gBAKvB;AAEK,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAA3B,QAAA,QAAQ,YAAmB"}
@@ -0,0 +1,3 @@
1
+ import { JWTUser } from "@alanszp/jwt";
2
+ export declare const userJwtUserMock: JWTUser;
3
+ export declare const laraJwtUserMock: JWTUser;