grm-shared-library 1.1.37 → 1.1.38
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/cjs/constants/http-headers.js +15 -0
- package/dist/cjs/constants/http-headers.js.map +1 -0
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utilities/user-context-header.service.js +74 -0
- package/dist/cjs/utilities/user-context-header.service.js.map +1 -0
- package/dist/esm/constants/http-headers.js +12 -0
- package/dist/esm/constants/http-headers.js.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utilities/user-context-header.service.js +70 -0
- package/dist/esm/utilities/user-context-header.service.js.map +1 -0
- package/dist/types/constants/http-headers.d.ts +12 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/utilities/user-context-header.service.d.ts +19 -0
- package/package.json +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HTTP_HEADERS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Standard HTTP headers used across microservices for user context
|
|
6
|
+
*/
|
|
7
|
+
exports.HTTP_HEADERS = {
|
|
8
|
+
USER_CONTEXT: 'X-User-Context',
|
|
9
|
+
USER_ID: 'X-User-Id',
|
|
10
|
+
ACCESS_SCOPE: 'X-Access-Scope',
|
|
11
|
+
ORGANIZATION_ID: 'X-Organization-Id',
|
|
12
|
+
CONTROL_CENTRE_ID: 'X-Control-Centre-Id',
|
|
13
|
+
USER_ROLES: 'X-User-Roles'
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=http-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-headers.js","sourceRoot":"","sources":["../../../src/constants/http-headers.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,YAAY,GAAG;IACxB,YAAY,EAAE,gBAAgB;IAC9B,OAAO,EAAE,WAAW;IACpB,YAAY,EAAE,gBAAgB;IAC9B,eAAe,EAAE,mBAAmB;IACpC,iBAAiB,EAAE,qBAAqB;IACxC,UAAU,EAAE,cAAc;CACpB,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -33,10 +33,13 @@ __exportStar(require("./interfaces/i-request-with-user"), exports);
|
|
|
33
33
|
__exportStar(require("./interfaces/validated-user"), exports);
|
|
34
34
|
__exportStar(require("./interfaces/jwt-payload"), exports);
|
|
35
35
|
__exportStar(require("./interfaces/pagination"), exports);
|
|
36
|
+
// Constants
|
|
37
|
+
__exportStar(require("./constants/http-headers"), exports);
|
|
36
38
|
// Kafka
|
|
37
39
|
__exportStar(require("./kafka/index"), exports);
|
|
38
40
|
// Utilities
|
|
39
41
|
__exportStar(require("./decorators/case-decorators"), exports);
|
|
42
|
+
__exportStar(require("./utilities/user-context-header.service"), exports);
|
|
40
43
|
// Exceptions
|
|
41
44
|
__exportStar(require("./exceptions/index"), exports);
|
|
42
45
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,UAAU;AACV,uDAAqC;AACrC,+DAA6C;AAC7C,yDAAuC;AACvC,6DAA2C;AAC3C,uDAAqC;AACrC,uDAAqC;AACrC,iEAA+C;AAC/C,wDAAsC;AACtC,gEAA8C;AAC9C,2DAAyC;AACzC,2DAAyC;AACzC,sDAAoC;AAEpC,aAAa;AACb,8DAA4C;AAC5C,mEAAiD;AACjD,8DAA4C;AAC5C,2DAAyC;AACzC,0DAAwC;AAExC,QAAQ;AACR,gDAA8B;AAE9B,YAAY;AACZ,+DAA6C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,UAAU;AACV,uDAAqC;AACrC,+DAA6C;AAC7C,yDAAuC;AACvC,6DAA2C;AAC3C,uDAAqC;AACrC,uDAAqC;AACrC,iEAA+C;AAC/C,wDAAsC;AACtC,gEAA8C;AAC9C,2DAAyC;AACzC,2DAAyC;AACzC,sDAAoC;AAEpC,aAAa;AACb,8DAA4C;AAC5C,mEAAiD;AACjD,8DAA4C;AAC5C,2DAAyC;AACzC,0DAAwC;AAExC,YAAY;AACZ,2DAAyC;AAEzC,QAAQ;AACR,gDAA8B;AAE9B,YAAY;AACZ,+DAA6C;AAC7C,0EAAwD;AAExD,aAAa;AACb,qDAAmC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserContextHeaderService = void 0;
|
|
4
|
+
const http_headers_1 = require("../constants/http-headers");
|
|
5
|
+
/**
|
|
6
|
+
* Utility service for handling user context via HTTP headers
|
|
7
|
+
* This provides a consistent way to pass user context between API Gateway and microservices
|
|
8
|
+
*/
|
|
9
|
+
class UserContextHeaderService {
|
|
10
|
+
/**
|
|
11
|
+
* Convert UserContext to HTTP headers for microservice communication
|
|
12
|
+
*/
|
|
13
|
+
static buildHeaders(userContext) {
|
|
14
|
+
const headers = {};
|
|
15
|
+
headers[http_headers_1.HTTP_HEADERS.USER_ID] = userContext.userId.toString();
|
|
16
|
+
headers[http_headers_1.HTTP_HEADERS.USER_ROLES] = JSON.stringify(userContext.roles);
|
|
17
|
+
headers[http_headers_1.HTTP_HEADERS.ACCESS_SCOPE] = JSON.stringify(userContext.accessScope);
|
|
18
|
+
if (userContext.organizationId) {
|
|
19
|
+
headers[http_headers_1.HTTP_HEADERS.ORGANIZATION_ID] = userContext.organizationId.toString();
|
|
20
|
+
}
|
|
21
|
+
if (userContext.controlCentreId) {
|
|
22
|
+
headers[http_headers_1.HTTP_HEADERS.CONTROL_CENTRE_ID] = userContext.controlCentreId.toString();
|
|
23
|
+
}
|
|
24
|
+
// Also provide full context as single header for convenience
|
|
25
|
+
headers[http_headers_1.HTTP_HEADERS.USER_CONTEXT] = JSON.stringify(userContext);
|
|
26
|
+
return headers;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Extract UserContext from HTTP headers in microservices
|
|
30
|
+
*/
|
|
31
|
+
static extractFromHeaders(headers) {
|
|
32
|
+
try {
|
|
33
|
+
// First try to get full context from single header
|
|
34
|
+
const fullContextHeader = this.getHeaderValue(headers, http_headers_1.HTTP_HEADERS.USER_CONTEXT);
|
|
35
|
+
if (fullContextHeader) {
|
|
36
|
+
return JSON.parse(fullContextHeader);
|
|
37
|
+
}
|
|
38
|
+
// Fallback: reconstruct from individual headers
|
|
39
|
+
const userIdHeader = this.getHeaderValue(headers, http_headers_1.HTTP_HEADERS.USER_ID);
|
|
40
|
+
const rolesHeader = this.getHeaderValue(headers, http_headers_1.HTTP_HEADERS.USER_ROLES);
|
|
41
|
+
const accessScopeHeader = this.getHeaderValue(headers, http_headers_1.HTTP_HEADERS.ACCESS_SCOPE);
|
|
42
|
+
if (!userIdHeader || !rolesHeader || !accessScopeHeader) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const userId = parseInt(userIdHeader);
|
|
46
|
+
const roles = JSON.parse(rolesHeader);
|
|
47
|
+
const accessScope = JSON.parse(accessScopeHeader);
|
|
48
|
+
const organizationIdHeader = this.getHeaderValue(headers, http_headers_1.HTTP_HEADERS.ORGANIZATION_ID);
|
|
49
|
+
const controlCentreIdHeader = this.getHeaderValue(headers, http_headers_1.HTTP_HEADERS.CONTROL_CENTRE_ID);
|
|
50
|
+
return {
|
|
51
|
+
userId,
|
|
52
|
+
roles,
|
|
53
|
+
accessScope,
|
|
54
|
+
organizationId: organizationIdHeader ? parseInt(organizationIdHeader) : undefined,
|
|
55
|
+
controlCentreId: controlCentreIdHeader ? parseInt(controlCentreIdHeader) : undefined
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error('Error extracting user context from headers:', error);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Helper to get header value (handles string | string[] types)
|
|
65
|
+
*/
|
|
66
|
+
static getHeaderValue(headers, key) {
|
|
67
|
+
const value = headers[key.toLowerCase()] || headers[key];
|
|
68
|
+
if (!value)
|
|
69
|
+
return null;
|
|
70
|
+
return Array.isArray(value) ? value[0] : value;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.UserContextHeaderService = UserContextHeaderService;
|
|
74
|
+
//# sourceMappingURL=user-context-header.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-context-header.service.js","sourceRoot":"","sources":["../../../src/utilities/user-context-header.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard HTTP headers used across microservices for user context
|
|
3
|
+
*/
|
|
4
|
+
export const HTTP_HEADERS = {
|
|
5
|
+
USER_CONTEXT: 'X-User-Context',
|
|
6
|
+
USER_ID: 'X-User-Id',
|
|
7
|
+
ACCESS_SCOPE: 'X-Access-Scope',
|
|
8
|
+
ORGANIZATION_ID: 'X-Organization-Id',
|
|
9
|
+
CONTROL_CENTRE_ID: 'X-Control-Centre-Id',
|
|
10
|
+
USER_ROLES: 'X-User-Roles'
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=http-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-headers.js","sourceRoot":"","sources":["../../../src/constants/http-headers.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,YAAY,EAAE,gBAAgB;IAC9B,OAAO,EAAE,WAAW;IACpB,YAAY,EAAE,gBAAgB;IAC9B,eAAe,EAAE,mBAAmB;IACpC,iBAAiB,EAAE,qBAAqB;IACxC,UAAU,EAAE,cAAc;CACpB,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -17,10 +17,13 @@ export * from './interfaces/i-request-with-user';
|
|
|
17
17
|
export * from './interfaces/validated-user';
|
|
18
18
|
export * from './interfaces/jwt-payload';
|
|
19
19
|
export * from './interfaces/pagination';
|
|
20
|
+
// Constants
|
|
21
|
+
export * from './constants/http-headers';
|
|
20
22
|
// Kafka
|
|
21
23
|
export * from './kafka/index';
|
|
22
24
|
// Utilities
|
|
23
25
|
export * from './decorators/case-decorators';
|
|
26
|
+
export * from './utilities/user-context-header.service';
|
|
24
27
|
// Exceptions
|
|
25
28
|
export * from './exceptions/index';
|
|
26
29
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AAEpC,aAAa;AACb,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAExC,QAAQ;AACR,cAAc,eAAe,CAAC;AAE9B,YAAY;AACZ,cAAc,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AAEpC,aAAa;AACb,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAExC,YAAY;AACZ,cAAc,0BAA0B,CAAC;AAEzC,QAAQ;AACR,cAAc,eAAe,CAAC;AAE9B,YAAY;AACZ,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AAExD,aAAa;AACb,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { HTTP_HEADERS } from '../constants/http-headers';
|
|
2
|
+
/**
|
|
3
|
+
* Utility service for handling user context via HTTP headers
|
|
4
|
+
* This provides a consistent way to pass user context between API Gateway and microservices
|
|
5
|
+
*/
|
|
6
|
+
export class UserContextHeaderService {
|
|
7
|
+
/**
|
|
8
|
+
* Convert UserContext to HTTP headers for microservice communication
|
|
9
|
+
*/
|
|
10
|
+
static buildHeaders(userContext) {
|
|
11
|
+
const headers = {};
|
|
12
|
+
headers[HTTP_HEADERS.USER_ID] = userContext.userId.toString();
|
|
13
|
+
headers[HTTP_HEADERS.USER_ROLES] = JSON.stringify(userContext.roles);
|
|
14
|
+
headers[HTTP_HEADERS.ACCESS_SCOPE] = JSON.stringify(userContext.accessScope);
|
|
15
|
+
if (userContext.organizationId) {
|
|
16
|
+
headers[HTTP_HEADERS.ORGANIZATION_ID] = userContext.organizationId.toString();
|
|
17
|
+
}
|
|
18
|
+
if (userContext.controlCentreId) {
|
|
19
|
+
headers[HTTP_HEADERS.CONTROL_CENTRE_ID] = userContext.controlCentreId.toString();
|
|
20
|
+
}
|
|
21
|
+
// Also provide full context as single header for convenience
|
|
22
|
+
headers[HTTP_HEADERS.USER_CONTEXT] = JSON.stringify(userContext);
|
|
23
|
+
return headers;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Extract UserContext from HTTP headers in microservices
|
|
27
|
+
*/
|
|
28
|
+
static extractFromHeaders(headers) {
|
|
29
|
+
try {
|
|
30
|
+
// First try to get full context from single header
|
|
31
|
+
const fullContextHeader = this.getHeaderValue(headers, HTTP_HEADERS.USER_CONTEXT);
|
|
32
|
+
if (fullContextHeader) {
|
|
33
|
+
return JSON.parse(fullContextHeader);
|
|
34
|
+
}
|
|
35
|
+
// Fallback: reconstruct from individual headers
|
|
36
|
+
const userIdHeader = this.getHeaderValue(headers, HTTP_HEADERS.USER_ID);
|
|
37
|
+
const rolesHeader = this.getHeaderValue(headers, HTTP_HEADERS.USER_ROLES);
|
|
38
|
+
const accessScopeHeader = this.getHeaderValue(headers, HTTP_HEADERS.ACCESS_SCOPE);
|
|
39
|
+
if (!userIdHeader || !rolesHeader || !accessScopeHeader) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const userId = parseInt(userIdHeader);
|
|
43
|
+
const roles = JSON.parse(rolesHeader);
|
|
44
|
+
const accessScope = JSON.parse(accessScopeHeader);
|
|
45
|
+
const organizationIdHeader = this.getHeaderValue(headers, HTTP_HEADERS.ORGANIZATION_ID);
|
|
46
|
+
const controlCentreIdHeader = this.getHeaderValue(headers, HTTP_HEADERS.CONTROL_CENTRE_ID);
|
|
47
|
+
return {
|
|
48
|
+
userId,
|
|
49
|
+
roles,
|
|
50
|
+
accessScope,
|
|
51
|
+
organizationId: organizationIdHeader ? parseInt(organizationIdHeader) : undefined,
|
|
52
|
+
controlCentreId: controlCentreIdHeader ? parseInt(controlCentreIdHeader) : undefined
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error('Error extracting user context from headers:', error);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Helper to get header value (handles string | string[] types)
|
|
62
|
+
*/
|
|
63
|
+
static getHeaderValue(headers, key) {
|
|
64
|
+
const value = headers[key.toLowerCase()] || headers[key];
|
|
65
|
+
if (!value)
|
|
66
|
+
return null;
|
|
67
|
+
return Array.isArray(value) ? value[0] : value;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=user-context-header.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-context-header.service.js","sourceRoot":"","sources":["../../../src/utilities/user-context-header.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard HTTP headers used across microservices for user context
|
|
3
|
+
*/
|
|
4
|
+
export declare const HTTP_HEADERS: {
|
|
5
|
+
readonly USER_CONTEXT: "X-User-Context";
|
|
6
|
+
readonly USER_ID: "X-User-Id";
|
|
7
|
+
readonly ACCESS_SCOPE: "X-Access-Scope";
|
|
8
|
+
readonly ORGANIZATION_ID: "X-Organization-Id";
|
|
9
|
+
readonly CONTROL_CENTRE_ID: "X-Control-Centre-Id";
|
|
10
|
+
readonly USER_ROLES: "X-User-Roles";
|
|
11
|
+
};
|
|
12
|
+
export type HttpHeaders = typeof HTTP_HEADERS[keyof typeof HTTP_HEADERS];
|
package/dist/types/index.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ export * from './interfaces/i-request-with-user';
|
|
|
15
15
|
export * from './interfaces/validated-user';
|
|
16
16
|
export * from './interfaces/jwt-payload';
|
|
17
17
|
export * from './interfaces/pagination';
|
|
18
|
+
export * from './constants/http-headers';
|
|
18
19
|
export * from './kafka/index';
|
|
19
20
|
export * from './decorators/case-decorators';
|
|
21
|
+
export * from './utilities/user-context-header.service';
|
|
20
22
|
export * from './exceptions/index';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { UserContext } from '../modules/user/interfaces/user-context';
|
|
2
|
+
/**
|
|
3
|
+
* Utility service for handling user context via HTTP headers
|
|
4
|
+
* This provides a consistent way to pass user context between API Gateway and microservices
|
|
5
|
+
*/
|
|
6
|
+
export declare class UserContextHeaderService {
|
|
7
|
+
/**
|
|
8
|
+
* Convert UserContext to HTTP headers for microservice communication
|
|
9
|
+
*/
|
|
10
|
+
static buildHeaders(userContext: UserContext): Record<string, string>;
|
|
11
|
+
/**
|
|
12
|
+
* Extract UserContext from HTTP headers in microservices
|
|
13
|
+
*/
|
|
14
|
+
static extractFromHeaders(headers: Record<string, string | string[]>): UserContext | null;
|
|
15
|
+
/**
|
|
16
|
+
* Helper to get header value (handles string | string[] types)
|
|
17
|
+
*/
|
|
18
|
+
private static getHeaderValue;
|
|
19
|
+
}
|