@qelos/api-kit 3.11.4 → 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 +6 -3
- package/dist/app.js.map +1 -1
- package/dist/user-middlewares.js +17 -1
- package/dist/user-middlewares.js.map +1 -1
- package/package.json +1 -1
- package/src/app.ts +7 -3
- package/src/user-middlewares.ts +17 -1
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(
|
|
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":";;;;;;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/user-middlewares.js
CHANGED
|
@@ -5,7 +5,23 @@ exports.verifyUser = verifyUser;
|
|
|
5
5
|
exports.verifyInternalCall = verifyInternalCall;
|
|
6
6
|
function populateUser(req, res, next) {
|
|
7
7
|
try {
|
|
8
|
-
|
|
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,
|
|
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
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(
|
|
49
|
+
app.get(HEALTH_PATH, (_, res) => {
|
|
46
50
|
res.status(200).send('ok');
|
|
47
51
|
})
|
|
48
52
|
}
|
package/src/user-middlewares.ts
CHANGED
|
@@ -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
|
-
|
|
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) {
|