@qelos/api-kit 3.11.5 → 3.11.6

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/dist/app.js CHANGED
@@ -28,15 +28,18 @@ function createApp() {
28
28
  configureApp(_app);
29
29
  return _app;
30
30
  }
31
+ const HEALTH_PATH = '/internal-api/health';
31
32
  function configureApp(app) {
33
+ const morganSkip = (req) => req.path === HEALTH_PATH;
34
+ const morganOptions = { skip: morganSkip };
32
35
  if (process.env.NODE_ENV !== 'production') {
33
- app.use(require('morgan')('combined'));
36
+ app.use(require('morgan')('combined', morganOptions));
34
37
  app.get('/api/shutdown', () => {
35
38
  (0, shutdown_1.default)();
36
39
  });
37
40
  }
38
41
  else if (_config.showLogs) {
39
- app.use(require('morgan')('combined'));
42
+ app.use(require('morgan')('combined', morganOptions));
40
43
  }
41
44
  if (_config.cors) {
42
45
  app.use(require('cors')());
@@ -44,7 +47,7 @@ function configureApp(app) {
44
47
  if (_config.bodyParser) {
45
48
  app.use(express_1.default[_config.bodyParser]());
46
49
  }
47
- app.get('/internal-api/health', (_, res) => {
50
+ app.get(HEALTH_PATH, (_, res) => {
48
51
  res.status(200).send('ok');
49
52
  });
50
53
  }
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,23 @@ exports.verifyUser = verifyUser;
5
5
  exports.verifyInternalCall = verifyInternalCall;
6
6
  function populateUser(req, res, next) {
7
7
  try {
8
- req.user = req.headers.user ? JSON.parse(req.headers.user) : null;
8
+ if (req.headers.user) {
9
+ // Check if the user header is Base64 encoded (to handle non-ASCII characters)
10
+ const userHeader = req.headers.user;
11
+ let userJson;
12
+ try {
13
+ // Try to decode from Base64 first
14
+ userJson = Buffer.from(userHeader, 'base64').toString('utf8');
15
+ }
16
+ catch {
17
+ // If decoding fails, assume it's plain JSON (for backward compatibility)
18
+ userJson = userHeader;
19
+ }
20
+ req.user = JSON.parse(userJson);
21
+ }
22
+ else {
23
+ req.user = null;
24
+ }
9
25
  req.workspace = req.user?.workspace;
10
26
  next();
11
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"user-middlewares.js","sourceRoot":"","sources":["../src/user-middlewares.ts"],"names":[],"mappings":";;AAGA,oCAQC;AAED,gCAMC;AAED,gDAgBC;AAlCD,SAAgB,YAAY,CAAC,GAAoB,EAAE,GAAa,EAAE,IAAkB;IAClF,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;QACpC,IAAI,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,GAAoB,EAAE,GAAa,EAAE,IAAkB;IAChF,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,EAAE,CAAC;IACT,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAa,EAAE,IAAkB;IACvE,IACE,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe;QAC5B,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,OAAO,CAAC,GAAG,CAAC,eAAe;QAC3D,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EACnB,CAAC;QACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,IAAI,GAAG;QACT,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;KAC3B,CAAC;IACF,IAAI,EAAE,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"user-middlewares.js","sourceRoot":"","sources":["../src/user-middlewares.ts"],"names":[],"mappings":";;AAGA,oCAwBC;AAED,gCAMC;AAED,gDAgBC;AAlDD,SAAgB,YAAY,CAAC,GAAoB,EAAE,GAAa,EAAE,IAAkB;IAClF,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,8EAA8E;YAC9E,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,IAAc,CAAC;YAC9C,IAAI,QAAgB,CAAC;YAErB,IAAI,CAAC;gBACH,kCAAkC;gBAClC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,yEAAyE;gBACzE,QAAQ,GAAG,UAAU,CAAC;YACxB,CAAC;YAED,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;QACpC,IAAI,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,GAAoB,EAAE,GAAa,EAAE,IAAkB;IAChF,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,EAAE,CAAC;IACT,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAa,EAAE,IAAkB;IACvE,IACE,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe;QAC5B,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,OAAO,CAAC,GAAG,CAAC,eAAe;QAC3D,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EACnB,CAAC;QACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,IAAI,GAAG;QACT,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;KAC3B,CAAC;IACF,IAAI,EAAE,CAAC;AACT,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qelos/api-kit",
3
- "version": "3.11.5",
3
+ "version": "3.11.6",
4
4
  "description": "API-Kit package to help with qelos infrastructure and reuse capabilities across services",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/app.ts CHANGED
@@ -27,14 +27,18 @@ function createApp() {
27
27
  return _app;
28
28
  }
29
29
 
30
+ const HEALTH_PATH = '/internal-api/health';
31
+
30
32
  function configureApp(app: Express) {
33
+ const morganSkip = (req: express.Request) => req.path === HEALTH_PATH;
34
+ const morganOptions = { skip: morganSkip };
31
35
  if (process.env.NODE_ENV !== 'production') {
32
- app.use(require('morgan')('combined'))
36
+ app.use(require('morgan')('combined', morganOptions))
33
37
  app.get('/api/shutdown', () => {
34
38
  shutdown()
35
39
  })
36
40
  } else if (_config.showLogs) {
37
- app.use(require('morgan')('combined'));
41
+ app.use(require('morgan')('combined', morganOptions));
38
42
  }
39
43
  if (_config.cors) {
40
44
  app.use(require('cors')())
@@ -42,7 +46,7 @@ function configureApp(app: Express) {
42
46
  if (_config.bodyParser) {
43
47
  app.use(express[_config.bodyParser]())
44
48
  }
45
- app.get('/internal-api/health', (_, res) => {
49
+ app.get(HEALTH_PATH, (_, res) => {
46
50
  res.status(200).send('ok');
47
51
  })
48
52
  }
@@ -3,7 +3,23 @@ import type { RequestWithUser } from './types';
3
3
 
4
4
  export function populateUser(req: RequestWithUser, res: Response, next: NextFunction): void {
5
5
  try {
6
- req.user = req.headers.user ? JSON.parse(req.headers.user as string) : null;
6
+ if (req.headers.user) {
7
+ // Check if the user header is Base64 encoded (to handle non-ASCII characters)
8
+ const userHeader = req.headers.user as string;
9
+ let userJson: string;
10
+
11
+ try {
12
+ // Try to decode from Base64 first
13
+ userJson = Buffer.from(userHeader, 'base64').toString('utf8');
14
+ } catch {
15
+ // If decoding fails, assume it's plain JSON (for backward compatibility)
16
+ userJson = userHeader;
17
+ }
18
+
19
+ req.user = JSON.parse(userJson);
20
+ } else {
21
+ req.user = null;
22
+ }
7
23
  req.workspace = req.user?.workspace;
8
24
  next();
9
25
  } catch (e) {