@6thbridge/utils 1.9.0-2 → 1.9.0-4
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/lib/middlewares/common.d.ts +2 -1
- package/lib/middlewares/common.js +23 -0
- package/lib/middlewares/common.js.map +1 -1
- package/lib/middlewares/express.d.ts +1 -1
- package/lib/middlewares/express.js +7 -17
- package/lib/middlewares/express.js.map +1 -1
- package/lib/middlewares/partner-context.test.d.ts +1 -0
- package/lib/middlewares/partner-context.test.js +109 -0
- package/lib/middlewares/partner-context.test.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/context.entity.d.ts +7 -11
- package/lib/types/context.entity.js +41 -39
- package/lib/types/context.entity.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ContextEntity, PFunctionResult } from '../types';
|
|
1
|
+
import { ContextEntity, PartnerContextEntity, PFunctionResult } from '../types';
|
|
2
2
|
import { ResourcePermission } from '../types';
|
|
3
3
|
import express from "express";
|
|
4
4
|
import { ValidateUserAccessResponseDTO } from "../types/authentication.entity";
|
|
@@ -10,6 +10,7 @@ export declare const AUTHENTICATION_TYPES: {
|
|
|
10
10
|
export declare function emptyMiddleware(req: any, res: any, next: any): any;
|
|
11
11
|
export declare function unless(middlewareName: string, paths: string[], middleware: any): typeof emptyMiddleware;
|
|
12
12
|
export declare class CommonMiddleware {
|
|
13
|
+
static getPartnerRequestContext(req: express.Request): PFunctionResult<PartnerContextEntity>;
|
|
13
14
|
static processAuthorizationCheck(req: express.Request): PFunctionResult<ValidateUserAccessResponseDTO>;
|
|
14
15
|
static getRequestContext(req: express.Request, supportedAuthenticationType?: string[], permissions?: ResourcePermission[]): Promise<{
|
|
15
16
|
data: ContextEntity;
|
|
@@ -49,6 +49,29 @@ function unless(middlewareName, paths, middleware) {
|
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
51
|
class CommonMiddleware {
|
|
52
|
+
static getPartnerRequestContext(req) {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
const failure = {
|
|
55
|
+
error: "You don't have permission to access this service. ",
|
|
56
|
+
statusCode: 403,
|
|
57
|
+
errorCode: "Forbidden"
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
if (req.headers['x-partner-data'] !== undefined) {
|
|
61
|
+
return { data: types_1.PartnerContextEntity.fromRequest(req) };
|
|
62
|
+
}
|
|
63
|
+
const apiKey = req.headers['x-partner-api-key'];
|
|
64
|
+
if (typeof apiKey !== 'string' || !apiKey.trim())
|
|
65
|
+
return failure;
|
|
66
|
+
const response = yield _axios.post('/internal/v1/partners/validate-api-key', { apiKey });
|
|
67
|
+
return { data: types_1.PartnerContextEntity.fromRequest(req, response.data.data) };
|
|
68
|
+
}
|
|
69
|
+
catch (_a) {
|
|
70
|
+
// Axios errors can contain the API key in their request configuration.
|
|
71
|
+
return failure;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
52
75
|
static processAuthorizationCheck(req) {
|
|
53
76
|
return __awaiter(this, void 0, void 0, function* () {
|
|
54
77
|
var _a, _b, _c, _d, _e;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/middlewares/common.ts"],"names":[],"mappings":";;;;;;;;;;;;AAuBA,0CAGC;AAED,wBAeC;AA3CD,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/middlewares/common.ts"],"names":[],"mappings":";;;;;;;;;;;;AAuBA,0CAGC;AAED,wBAeC;AA3CD,oCAAuI;AAEvI,mCAAiC;AACjC,sCAAmC;AACnC,mDAA8C;AAE9C,oCAAkC;AAIlC,MAAM,MAAM,GAAkB,gBAAQ,CAAC,gBAAgB,CAAC;IACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,qBAAqB;IAC9D,OAAO,EAAE;QACP,MAAM,EAAE,UAAU;KACnB;CACF,CAAC,CAAC;AAEU,QAAA,oBAAoB,GAAG;IAClC,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,eAAe;IAC9B,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,SAAgB,eAAe,CAAC,GAAQ,EAAE,GAAQ,EAAE,IAAS;IAC3D,eAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAClD,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,SAAgB,MAAM,CAAC,cAAsB,EAAE,KAAe,EAAE,UAAe;IAC7E,IAAI,CAAC,UAAU;QAAE,OAAO,eAAe,CAAC;IAExC,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,eAAe,CAAC;IAE1C,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,6BAAY,EAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,OAAO,UAAU,GAAQ,EAAE,GAAQ,EAAE,IAAS;QAC5C,KAAK,IAAI,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,eAAM,CAAC,KAAK,CAAC,gCAAgC,cAAc,eAAe,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;gBACvF,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAID,MAAa,gBAAgB;IAC3B,MAAM,CAAO,wBAAwB,CAAC,GAAoB;;YACxD,MAAM,OAAO,GAAG;gBACd,KAAK,EAAE,oDAAoD;gBAC3D,UAAU,EAAE,GAAG;gBACf,SAAS,EAAE,WAAW;aACvB,CAAC;YAEF,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,SAAS,EAAE,CAAC;oBAChD,OAAO,EAAE,IAAI,EAAE,4BAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzD,CAAC;gBAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;gBAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;oBAAE,OAAO,OAAO,CAAC;gBAEjE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,wCAAwC,EACxC,EAAE,MAAM,EAAE,CACX,CAAC;gBACF,OAAO,EAAE,IAAI,EAAE,4BAAoB,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7E,CAAC;YAAC,WAAM,CAAC;gBACP,uEAAuE;gBACvE,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;KAAA;IAED,MAAM,CAAO,yBAAyB,CAAC,GAAoB;;;YACzD,sGAAsG;YACtG,MAAM,QAAQ,GAAG,CAAA,MAAA,GAAG,CAAC,OAAO,0CAAG,WAAW,CAAC,MAAI,MAAA,GAAG,CAAC,OAAO,0CAAG,mBAAmB,CAAC,CAAA,KAAI,MAAA,GAAG,CAAC,OAAO,0CAAG,mBAAmB,CAAC,CAAA,CAAC;YACxH,8CAA8C;YAC9C,8FAA8F;YAC9F,MAAM,OAAO,GAA0B;gBACrC,MAAM,EAAE,MAAA,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAW;gBAClF,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAW;gBACtE,eAAe,EAAG,QAAQ;gBAC1B,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,QAAQ;gBAClF,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAW;gBAChD,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAW;gBAClD,KAAK,EAAE,EAAE;aACV,CAAC;YAEF,4CAA4C;YAE5C,IAAI,QAAQ,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACzC,OAAO,CAAC,eAAe,GAAG,QAAQ,CAAC;YACrC,CAAC;YAED,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACvB,eAAM,CAAC,GAAG,CAAC,+CAA+C,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAChF,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,QAAkB,CAAC;YACzD,CAAC;YAED,wFAAwF;YACxF,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,KAAI,MAAA,GAAG,CAAC,OAAO,0CAAG,YAAY,CAAC,CAAA,CAAC;YAE1F,IAAI,KAAK,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe;gBAAE,MAAM,IAAI,uBAAe,CAAC;oBACzE,OAAO,EAAE,iDAAiD;oBAC1D,UAAU,EAAE,GAAG;oBACf,SAAS,EAAE,WAAW;iBACvB,CAAC,CAAC;YACH,yEAAyE;YAEzE,IAAG,CAAC;gBACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC;gBAE9E,OAAO;oBACL,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;iBACzB,CAAC;YACJ,CAAC;YAAA,OAAO,CAAM,EAAE,CAAC;gBACf,eAAM,CAAC,SAAS,CAAC,CAAC,EAAE;oBAClB,UAAU,EAAE,gBAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBACzC,OAAO;iBACR,CAAC,CAAC;gBAEH,MAAM,IAAI,uBAAe,CAAC;oBACxB,OAAO,EAAE,iDAAiD;oBAC1D,UAAU,EAAE,GAAG;oBACf,SAAS,EAAE,WAAW;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KAAA;IACD,MAAM,CAAO,iBAAiB,CAAC,GAAoB,EAAE,2BAAsC,EAAE,WAAkC;;;YAC7H,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAW,CAAC;gBAE3F,IAAI,aAAa,KAAK,+BAAuB,EAAE,CAAC;oBAC9C,IAAI,OAAO,GAAG,qBAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBAE7C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;oBAE/E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC3B,CAAC;gBAED,IAAI,QAAuC,CAAC;gBAC5C,IAAG,CAAC,aAAa,IAAI,aAAa,KAAK,aAAa,EAAC,CAAC;oBACpD,eAAM,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;oBACxE,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;oBACzE,IAAG,UAAU,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,EAAC,CAAC;wBACvC,MAAM,IAAI,uBAAe,CAAC;4BACxB,OAAO,EAAE,UAAU,CAAC,KAAK,IAAI,iDAAiD;4BAC9E,UAAU,EAAE,UAAU,CAAC,UAAU;4BACjC,SAAS,EAAE,UAAU,CAAC,SAAS;yBAChC,CAAC,CAAA;oBACJ,CAAC;oBAED,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;gBAC7B,CAAC;qBAAI,CAAC;oBACJ,eAAM,CAAC,GAAG,CAAC,wDAAwD,EAAE,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;oBAC3G,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAW,CAAC,CAAC;gBACxE,CAAC;gBAGD,IAAI,OAAO,GAAG,qBAAa,CAAC,uBAAuB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACnE,IAAI,2BAA2B,IAAI,IAAI,IAAI,IAAA,gBAAO,EAAC,2BAA2B,CAAC,EAAE,CAAC;oBAChF,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;oBAE9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC3B,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBACrG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,2BAA2B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;oBACzF,MAAM,IAAI,uBAAe,CAAC;wBACxB,OAAO,EAAE,8CAA8C;wBACvD,UAAU,EAAE,GAAG;wBACf,SAAS,EAAE,WAAW;qBACvB,CAAC,CAAC;gBACL,CAAC;gBAED,oBAAoB;gBACpB,IAAI,OAAO,CAAC,kBAAkB,IAAI,4BAAoB,CAAC,GAAG,EAAE,CAAC;oBAC3D,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;oBAE5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC3B,CAAC;gBAED,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,CAAA,EAAE,CAAC;oBACzB,OAAO,CAAC,MAAM,CAAC,GAAG,CACd,wCAAwC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,MAAM,IAAI,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,GAAG,EAAE,CAC9F,CAAC;oBAEF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC3B,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,GAAG,CACd,8CAA8C,OAAO,CAAC,OAAO,CAAC,MAAM,eAAe,OAAO,CAAC,OAAO,CAAC,GAAG,gBAAgB,CACzH,CAAC;gBAEF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;oBACvE,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,eAAe,EAAC,OAAO,CAAC,eAAe;oBACvC,eAAe,EAAE,OAAO,CAAC,eAAe;oBACxC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;oBAC9C,2BAA2B;oBAC3B,UAAU,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,CAAC,CAAC;oBAC5B,mBAAmB,EAAE,WAAW;oBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,0CAAE,IAAI,CAAC,GAAG,CAAC;oBAC3C,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,aAAa,EAAE,OAAO,CAAC,aAAa;iBACrC,CAAC,CAAC;gBAEH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU;oBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAEpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;oBACtB,MAAM,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,MAAM;iBAC9B,CAAC,CAAC;gBAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO,CAA2B,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,gBAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACjD,eAAM,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAChC,eAAM,CAAC,GAAG,CAAC,mCAAmC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,QAAQ,0CAAE,IAAI,CAAC,CAAC;gBAEjF,OAAO;oBACL,KAAK,EAAE,CAAA,MAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,QAAQ,0CAAE,IAAI,0CAAE,KAAK,KAAI,mDAAmD;oBACtF,UAAU,EAAE,GAAG;oBACf,SAAS,EAAE,WAAW;iBACvB,CAAC;YACJ,CAAC;QACH,CAAC;KAAA;CACF;AA1LD,4CA0LC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Response, Request, NextFunction } from 'express';
|
|
2
2
|
import { ResourcePermission } from '../types/permission';
|
|
3
|
-
export declare const partnerContext: (req: Request, res: Response, next: NextFunction) => void |
|
|
3
|
+
export declare const partnerContext: (req: Request, res: Response, next: NextFunction) => Promise<void | Response<any, Record<string, any>>>;
|
|
4
4
|
export declare function internalOnly(req: Request, res: Response, next: NextFunction): void | Promise<Response<any, Record<string, any>>>;
|
|
5
5
|
export declare const can: (supportedAuthenticationType: string[], permissions: ResourcePermission[], options?: any) => (req: Request, res: Response, next: NextFunction) => Promise<void | Response<any, Record<string, any>>>;
|
|
6
6
|
export declare const registerLogger: (req: Request, res: Response, next: NextFunction) => void;
|
|
@@ -48,29 +48,19 @@ const response = __importStar(require("../responses/express"));
|
|
|
48
48
|
const common_1 = require("./common");
|
|
49
49
|
const logger_1 = require("../logger/logger");
|
|
50
50
|
const utils_1 = require("../utils");
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
let context;
|
|
55
|
-
try {
|
|
56
|
-
context = context_entity_1.PartnerContextEntity.fromRequest(req);
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
logger_1.logger.exception(error, {
|
|
60
|
-
payload: req.headers["x-partner-data"]
|
|
61
|
-
});
|
|
62
|
-
if (!(error instanceof custom_exception_1.CustomException))
|
|
63
|
-
return next(error);
|
|
51
|
+
const partnerContext = (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
52
|
+
const { data: context, error, statusCode, errorCode } = yield common_1.CommonMiddleware.getPartnerRequestContext(req);
|
|
53
|
+
if (error || !context) {
|
|
64
54
|
return response.failed(res, {
|
|
65
|
-
error: "You don't have permission to access this service. ",
|
|
66
|
-
statusCode: 403,
|
|
67
|
-
errorCode: 'InvalidAuthorization',
|
|
55
|
+
error: error || "You don't have permission to access this service. ",
|
|
56
|
+
statusCode: statusCode || 403,
|
|
57
|
+
errorCode: errorCode || 'InvalidAuthorization',
|
|
68
58
|
});
|
|
69
59
|
}
|
|
70
60
|
res.locals = context;
|
|
71
61
|
res.setHeader('x-request-id', context.requestId);
|
|
72
62
|
return next();
|
|
73
|
-
};
|
|
63
|
+
});
|
|
74
64
|
exports.partnerContext = partnerContext;
|
|
75
65
|
function internalOnly(req, res, next) {
|
|
76
66
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/middlewares/express.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/middlewares/express.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
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 http_1 = require("../utils/http");
|
|
13
|
+
const logger_1 = require("../logger/logger");
|
|
14
|
+
const context_entity_1 = require("../types/context.entity");
|
|
15
|
+
const express_1 = require("./express");
|
|
16
|
+
const common_1 = require("./common");
|
|
17
|
+
jest.mock('../utils/http', () => {
|
|
18
|
+
return { HttpUtil: { getAxiosInstance: jest.fn().mockReturnValue({ post: jest.fn() }) } };
|
|
19
|
+
});
|
|
20
|
+
const post = http_1.HttpUtil.getAxiosInstance().post;
|
|
21
|
+
const partner = { partnerId: '6ad13d858feb60cd7900aa63', name: 'AKI Angola', provider: 'aki-angola', status: 'active' };
|
|
22
|
+
const failure = {
|
|
23
|
+
error: "You don't have permission to access this service. ",
|
|
24
|
+
statusCode: 403,
|
|
25
|
+
errorCode: 'InvalidAuthorization',
|
|
26
|
+
};
|
|
27
|
+
function request(headers) {
|
|
28
|
+
return { headers, ip: '127.0.0.1', originalUrl: '/partners' };
|
|
29
|
+
}
|
|
30
|
+
function run(headers) {
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
const res = { locals: {}, setHeader: jest.fn(), status: jest.fn(), json: jest.fn() };
|
|
33
|
+
res.status.mockReturnValue(res);
|
|
34
|
+
res.json.mockReturnValue(res);
|
|
35
|
+
const next = jest.fn();
|
|
36
|
+
yield (0, express_1.partnerContext)(request(headers), res, next);
|
|
37
|
+
return { res, next };
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
describe('partner API key fallback', () => {
|
|
41
|
+
beforeEach(() => post.mockReset());
|
|
42
|
+
it('uses valid partner data without validating a supplied key', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
43
|
+
const { res, next } = yield run({ 'x-partner-data': JSON.stringify(partner), 'x-partner-api-key': 'ignored', 'x-request-id': 'header-123' });
|
|
44
|
+
const context = res.locals;
|
|
45
|
+
expect(context.partner).toEqual(partner);
|
|
46
|
+
expect(res.setHeader).toHaveBeenCalledWith('x-request-id', 'header-123');
|
|
47
|
+
expect(context.logger.getProps()).toMatchObject({ partnerId: partner.partnerId, provider: partner.provider, requestId: 'header-123' });
|
|
48
|
+
expect(post).not.toHaveBeenCalled();
|
|
49
|
+
expect(next).toHaveBeenCalledTimes(1);
|
|
50
|
+
}));
|
|
51
|
+
it('validates the partner API key and initializes the context and logger', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
52
|
+
post.mockResolvedValue({ data: { data: partner } });
|
|
53
|
+
const { res, next } = yield run({ 'x-partner-api-key': 'partner-secret', 'x-request-id': 'req-123' });
|
|
54
|
+
expect(post).toHaveBeenCalledWith('/internal/v1/partners/validate-api-key', { apiKey: 'partner-secret' });
|
|
55
|
+
expect(res.locals).toBeInstanceOf(context_entity_1.PartnerContextEntity);
|
|
56
|
+
const context = res.locals;
|
|
57
|
+
expect(context.partner).toEqual(partner);
|
|
58
|
+
expect(context.requestId).toBe('req-123');
|
|
59
|
+
expect(context.logger.getProps()).toMatchObject({ partnerId: partner.partnerId, provider: partner.provider, requestId: 'req-123' });
|
|
60
|
+
expect(res.setHeader).toHaveBeenCalledWith('x-request-id', 'req-123');
|
|
61
|
+
expect(next).toHaveBeenCalledTimes(1);
|
|
62
|
+
}));
|
|
63
|
+
it.each([undefined, '', ' ', ['one', 'two']])('rejects missing or invalid keys: %p', (key) => __awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
const { res, next } = yield run({ 'x-partner-api-key': key });
|
|
65
|
+
expect(post).not.toHaveBeenCalled();
|
|
66
|
+
expect(res.status).toHaveBeenCalledWith(403);
|
|
67
|
+
expect(res.json).toHaveBeenCalledWith(failure);
|
|
68
|
+
expect(next).not.toHaveBeenCalled();
|
|
69
|
+
}));
|
|
70
|
+
it.each(['', '{bad', 'null', '{}', '[]'])('rejects malformed partner data without fallback: %p', (header) => __awaiter(void 0, void 0, void 0, function* () {
|
|
71
|
+
const { res, next } = yield run({ 'x-partner-data': header, 'x-partner-api-key': 'secret' });
|
|
72
|
+
expect(post).not.toHaveBeenCalled();
|
|
73
|
+
expect(res.json).toHaveBeenCalledWith(failure);
|
|
74
|
+
expect(next).not.toHaveBeenCalled();
|
|
75
|
+
}));
|
|
76
|
+
it.each([undefined, null, {}, Object.assign(Object.assign({}, partner), { partnerId: 42 }), Object.assign(Object.assign({}, partner), { provider: '' })])('rejects invalid service data: %p', (data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
77
|
+
post.mockResolvedValue({ data: { data } });
|
|
78
|
+
const { res, next } = yield run({ 'x-partner-api-key': 'secret' });
|
|
79
|
+
expect(post).toHaveBeenCalledTimes(1);
|
|
80
|
+
expect(res.json).toHaveBeenCalledWith(failure);
|
|
81
|
+
expect(next).not.toHaveBeenCalled();
|
|
82
|
+
}));
|
|
83
|
+
it.each([401, 503])('rejects service errors without logging credentials: %p', (status) => __awaiter(void 0, void 0, void 0, function* () {
|
|
84
|
+
const exception = jest.spyOn(logger_1.Logger.prototype, 'exception').mockImplementation();
|
|
85
|
+
try {
|
|
86
|
+
post.mockRejectedValue(Object.assign(new Error('partner-secret'), {
|
|
87
|
+
config: { data: '{"apiKey":"partner-secret"}' },
|
|
88
|
+
response: { status, data: { error: 'partner-secret' } },
|
|
89
|
+
}));
|
|
90
|
+
const { res, next } = yield run({ 'x-partner-api-key': 'partner-secret' });
|
|
91
|
+
expect(post).toHaveBeenCalledTimes(1);
|
|
92
|
+
expect(res.json).toHaveBeenCalledWith(failure);
|
|
93
|
+
expect(next).not.toHaveBeenCalled();
|
|
94
|
+
expect(JSON.stringify(exception.mock.calls)).not.toContain('partner-secret');
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
exception.mockRestore();
|
|
98
|
+
}
|
|
99
|
+
}));
|
|
100
|
+
it('returns a function result from the common context helper', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
101
|
+
var _a, _b, _c;
|
|
102
|
+
post.mockResolvedValue({ data: { data: partner } });
|
|
103
|
+
const result = yield common_1.CommonMiddleware.getPartnerRequestContext(request({ 'x-partner-api-key': 'secret' }));
|
|
104
|
+
expect((_a = result.data) === null || _a === void 0 ? void 0 : _a.partner).toEqual(partner);
|
|
105
|
+
expect((_b = result.data) === null || _b === void 0 ? void 0 : _b.requestId).toMatch(/^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/);
|
|
106
|
+
expect((_c = result.data) === null || _c === void 0 ? void 0 : _c.locale).toBe('en');
|
|
107
|
+
}));
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=partner-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partner-context.test.js","sourceRoot":"","sources":["../../src/middlewares/partner-context.test.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,wCAAyC;AACzC,6CAA0C;AAC1C,4DAA+D;AAC/D,uCAA2C;AAC3C,qCAA4C;AAE5C,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,OAAO,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AAC5F,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,eAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAiB,CAAC;AAC3D,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,0BAA0B,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACxH,MAAM,OAAO,GAAG;IACd,KAAK,EAAE,oDAAoD;IAC3D,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,sBAAsB;CAClC,CAAC;AAEF,SAAS,OAAO,CAAC,OAA2B;IAC1C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAa,CAAC;AAC3E,CAAC;AAED,SAAe,GAAG,CAAC,OAA2B;;QAC5C,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;QACrF,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,IAAA,wBAAc,EAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAA0B,EAAE,IAAI,CAAC,CAAC;QACzE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACvB,CAAC;CAAA;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAEnC,EAAE,CAAC,2DAA2D,EAAE,GAAS,EAAE;QACzE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7I,MAAM,OAAO,GAAG,GAAG,CAAC,MAA8B,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACzE,MAAM,CAAE,OAAO,CAAC,MAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QACnJ,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAS,EAAE;QACpF,IAAI,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,wCAAwC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,qCAAoB,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,GAAG,CAAC,MAA8B,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAE,OAAO,CAAC,MAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAChJ,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,qCAAqC,EAAE,CAAO,GAAG,EAAE,EAAE;QAClG,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtC,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,qDAAqD,EAAE,CAAO,MAAM,EAAE,EAAE;QAChH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7F,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtC,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,kCAAO,OAAO,KAAE,SAAS,EAAE,EAAE,qCAAS,OAAO,KAAE,QAAQ,EAAE,EAAE,IAAG,CAAC,CAAC,kCAAkC,EAAE,CAAO,IAAI,EAAE,EAAE;QAC7I,IAAI,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtC,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,wDAAwD,EAAE,CAAO,MAAM,EAAE,EAAE;QAC7F,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,kBAAkB,EAAE,CAAC;QACjF,IAAI,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,EAAE;gBAChE,MAAM,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE;gBAC/C,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE;aACxD,CAAC,CAAC,CAAC;YACJ,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC3E,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC/E,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAS,EAAE;;QACxE,IAAI,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,yBAAgB,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3G,MAAM,CAAC,MAAA,MAAM,CAAC,IAAI,0CAAE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAA,MAAM,CAAC,IAAI,0CAAE,SAAS,CAAC,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;QACtF,MAAM,CAAC,MAAA,MAAM,CAAC,IAAI,0CAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|