sasai-common-utils 1.0.53 → 1.0.54

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/index.d.ts CHANGED
@@ -1,88 +1,88 @@
1
- import { AxiosInstance } from "axios";
2
- import { Logger } from "winston";
3
- import { NextFunction, Request, Response } from "express";
4
- import { Logger as WinstonLogger } from "winston";
5
-
6
- // Extend the Winston Logger to include custom methods
7
- export interface ExtendedLogger extends WinstonLogger {
8
- logError: (data: Record<string, any>, req?: Record<string, any>) => void;
9
- logInfo: (message: string, data?: Record<string, any>) => void;
10
- logDebug: (message: string, data?: Record<string, any>) => void;
11
- }
12
-
13
- // Export the logger with the extended type
14
- export const logger: ExtendedLogger;
15
- /**
16
- * Logger configuration options.
17
- */
18
- export interface LoggerConfig {
19
- level?: string;
20
- SERVICE_NAME?: string;
21
- DEBUG_MODE?: string;
22
- LOG_LEVEL?: string;
23
- }
24
-
25
- /**
26
- * Context provider type for custom context setup.
27
- */
28
- export type ContextProvider = () => Record<string, any>;
29
-
30
- /**
31
- * Logs information-level messages.
32
- * @param message The message to log.
33
- * @param data Additional data to include in the log.
34
- */
35
- export function logInfo(message: string, data?: Record<string, any>): void;
36
-
37
- /**
38
- * Logs error-level messages.
39
- * @param error The error object or message to log.
40
- * @param data Additional data to include in the log.
41
- */
42
- export function logError(error: Error | string, data?: Record<string, any>): void;
43
-
44
- /**
45
- * Logs debug-level messages.
46
- * @param message The message to log.
47
- * @param data Additional data to include in the log.
48
- */
49
- export function logDebug(message: string, data?: Record<string, any>): void;
50
-
51
- /**
52
- * A shared logger instance configured with the provided settings.
53
- */
54
- // export const logger: Logger;
55
-
56
- /**
57
- * Creates a new logger instance.
58
- * @param config Optional configuration for the logger.
59
- */
60
- export function createLogger(config?: LoggerConfig): Logger;
61
-
62
- /**
63
- * Sets a context provider for adding custom context to logs.
64
- * @param provider A function that returns custom context as an object.
65
- */
66
- export function setContextProvider(provider: ContextProvider): void;
67
-
68
- /**
69
- * Middleware to log Express API requests and responses.
70
- */
71
- export function logExpressApis(logger: Logger): void;
72
-
73
- /**
74
- * Attaches Axios request and response interceptors for logging.
75
- * @param axiosInstance An Axios instance.
76
- * @param logger A logger instance.
77
- * @param apmTracing An object containing APM trace ID and span ID.
78
- */
79
- export function attachAxiosLogger(
80
- axiosInstance: AxiosInstance,
81
- logger: Logger,
82
- apmTracing?: Record<string, any>
83
- ): void;
84
-
85
- /**
86
- * Utility functions (future scope).
87
- */
88
- export const utils: Record<string, any>;
1
+ import { AxiosInstance } from "axios";
2
+ import { Logger } from "winston";
3
+ import { NextFunction, Request, Response } from "express";
4
+ import { Logger as WinstonLogger } from "winston";
5
+
6
+ // Extend the Winston Logger to include custom methods
7
+ export interface ExtendedLogger extends WinstonLogger {
8
+ logError: (data: Record<string, any>, req?: Record<string, any>) => void;
9
+ logInfo: (message: string, data?: Record<string, any>) => void;
10
+ logDebug: (message: string, data?: Record<string, any>) => void;
11
+ }
12
+
13
+ // Export the logger with the extended type
14
+ export const logger: ExtendedLogger;
15
+ /**
16
+ * Logger configuration options.
17
+ */
18
+ export interface LoggerConfig {
19
+ level?: string;
20
+ SERVICE_NAME?: string;
21
+ DEBUG_MODE?: string;
22
+ LOG_LEVEL?: string;
23
+ }
24
+
25
+ /**
26
+ * Context provider type for custom context setup.
27
+ */
28
+ export type ContextProvider = () => Record<string, any>;
29
+
30
+ /**
31
+ * Logs information-level messages.
32
+ * @param message The message to log.
33
+ * @param data Additional data to include in the log.
34
+ */
35
+ export function logInfo(message: string, data?: Record<string, any>): void;
36
+
37
+ /**
38
+ * Logs error-level messages.
39
+ * @param error The error object or message to log.
40
+ * @param data Additional data to include in the log.
41
+ */
42
+ export function logError(error: Error | string, data?: Record<string, any>): void;
43
+
44
+ /**
45
+ * Logs debug-level messages.
46
+ * @param message The message to log.
47
+ * @param data Additional data to include in the log.
48
+ */
49
+ export function logDebug(message: string, data?: Record<string, any>): void;
50
+
51
+ /**
52
+ * A shared logger instance configured with the provided settings.
53
+ */
54
+ // export const logger: Logger;
55
+
56
+ /**
57
+ * Creates a new logger instance.
58
+ * @param config Optional configuration for the logger.
59
+ */
60
+ export function createLogger(config?: LoggerConfig): Logger;
61
+
62
+ /**
63
+ * Sets a context provider for adding custom context to logs.
64
+ * @param provider A function that returns custom context as an object.
65
+ */
66
+ export function setContextProvider(provider: ContextProvider): void;
67
+
68
+ /**
69
+ * Middleware to log Express API requests and responses.
70
+ */
71
+ export function logExpressApis(logger: Logger): void;
72
+
73
+ /**
74
+ * Attaches Axios request and response interceptors for logging.
75
+ * @param axiosInstance An Axios instance.
76
+ * @param logger A logger instance.
77
+ * @param apmTracing An object containing APM trace ID and span ID.
78
+ */
79
+ export function attachAxiosLogger(
80
+ axiosInstance: AxiosInstance,
81
+ logger: Logger,
82
+ apmTracing?: Record<string, any>
83
+ ): void;
84
+
85
+ /**
86
+ * Utility functions (future scope).
87
+ */
88
+ export const utils: Record<string, any>;
package/package.json CHANGED
@@ -1,30 +1,30 @@
1
- {
2
- "name": "sasai-common-utils",
3
- "version": "1.0.53",
4
- "description": "Reusable utility library for common logging and other shared features.",
5
- "main": "src/index.js",
6
- "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1"
8
- },
9
- "keywords": [],
10
- "author": "",
11
- "license": "ISC",
12
- "dependencies": {
13
- "@elastic/ecs-winston-format": "^1.5.3",
14
- "@opentelemetry/api-logs": "^0.211.0",
15
- "@opentelemetry/exporter-logs-otlp-http": "^0.211.0",
16
- "@opentelemetry/resources": "^2.5.0",
17
- "@opentelemetry/sdk-logs": "^0.211.0",
18
- "jsonwebtoken": "^9.0.2",
19
- "klona": "^2.0.6",
20
- "pino": "^9.6.0",
21
- "pino-opentelemetry-transport": "^1.1.0",
22
- "pino-pretty": "^13.0.0",
23
- "traverse": "^0.6.11",
24
- "winston": "^3.17.0"
25
- },
26
- "devDependencies": {
27
- "eslint": "^9.15.0",
28
- "jest": "^29.7.0"
29
- }
30
- }
1
+ {
2
+ "name": "sasai-common-utils",
3
+ "version": "1.0.54",
4
+ "description": "Reusable utility library for common logging and other shared features.",
5
+ "main": "src/index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "keywords": [],
10
+ "author": "",
11
+ "license": "ISC",
12
+ "dependencies": {
13
+ "@elastic/ecs-winston-format": "^1.5.3",
14
+ "@opentelemetry/api-logs": "^0.211.0",
15
+ "@opentelemetry/exporter-logs-otlp-http": "^0.211.0",
16
+ "@opentelemetry/instrumentation-pino": "^0.55.0",
17
+ "@opentelemetry/resources": "^2.5.0",
18
+ "@opentelemetry/sdk-logs": "^0.211.0",
19
+ "jsonwebtoken": "^9.0.2",
20
+ "klona": "^2.0.6",
21
+ "pino": "^9.6.0",
22
+ "pino-pretty": "^13.0.0",
23
+ "traverse": "^0.6.11",
24
+ "winston": "^3.17.0"
25
+ },
26
+ "devDependencies": {
27
+ "eslint": "^9.15.0",
28
+ "jest": "^29.7.0"
29
+ }
30
+ }
@@ -1,108 +1,108 @@
1
- const { LOG_LEVELS } = require("../logger/constants");
2
-
3
- /**
4
- * Logs Axios requests.
5
- * @param {Object} request - Axios request object.
6
- * @param {Object} logger - Logger instance.
7
- */
8
- const logRequest = (request, logger) => {
9
- const { method, url, headers, data, params } = request;
10
- const api = "REQUEST";
11
-
12
- const logObject = {
13
- method,
14
- url,
15
- headers,
16
- requestBody: data,
17
- parameters: params,
18
- api,
19
- };
20
-
21
- logger.logInfo("Axios Request", logObject);
22
- return request;
23
- };
24
-
25
- /**
26
- * Logs Axios responses.
27
- * @param {Object} response - Axios response object.
28
- * @param {Object} logger - Logger instance.
29
- */
30
- const logResponse = (response, logger) => {
31
- const { status, config, data, headers: responseHeaders } = response;
32
- const { method, url, headers, data: requestBody, params } = config || {};
33
- const api = "RESPONSE";
34
-
35
- const logObject = {
36
- statusCode: status,
37
- method,
38
- url,
39
- headers, // request headers
40
- responseHeaders, // actual response headers
41
- requestBody,
42
- responseBody: data,
43
- parameters: params,
44
- api,
45
- };
46
-
47
- logger.logInfo("Axios Response", logObject);
48
- return response;
49
- };
50
-
51
- /**
52
- * Logs Axios errors.
53
- * @param {Object} error - Axios error object.
54
- * @param {Object} logger - Logger instance.
55
- */
56
- const logError = (error, logger) => {
57
- const { response, config } = error || {};
58
- const { method, url, headers, data: requestBody, params } = config || {};
59
-
60
- const logObject = {
61
- step: "Axios Error",
62
- error,
63
- method,
64
- url,
65
- headers,
66
- requestBody,
67
- parameters: params,
68
- responseBody: response?.data || {},
69
- statusCode: response?.status || "",
70
- responseHeaders: response?.headers || {},
71
- api: "ERROR",
72
- };
73
-
74
- logger.logError(logObject);
75
- return Promise.reject(error);
76
- };
77
-
78
- /**
79
- * Attaches logging interceptors to an Axios instance.
80
- * @param {Object} axiosInstance - Axios instance.
81
- * @param {Object} logger - Logger instance.
82
- * @param {Object} traceContext - Trace context provider.
83
- */
84
- const attachAxiosLogger = (axiosInstance, logger, traceContext) => {
85
- axiosInstance.interceptors.request.use(
86
- (request) => {
87
- const currentTraceContext =
88
- traceContext?.getCurrentTraceContext?.() || {};
89
-
90
- request.headers = {
91
- ...request.headers,
92
- "x-b3-traceid": currentTraceContext?.trace_id ?? "",
93
- "x-b3-spanid": currentTraceContext?.span_id ?? "",
94
- "x-b3-parentspanid": currentTraceContext?.parent_span_id ?? "",
95
- };
96
-
97
- return logRequest(request, logger);
98
- },
99
- (error) => logError(error, logger),
100
- );
101
-
102
- axiosInstance.interceptors.response.use(
103
- (response) => logResponse(response, logger),
104
- (error) => logError(error, logger),
105
- );
106
- };
107
-
108
- module.exports = { attachAxiosLogger };
1
+ const { LOG_LEVELS } = require("../logger/constants");
2
+
3
+ /**
4
+ * Logs Axios requests.
5
+ * @param {Object} request - Axios request object.
6
+ * @param {Object} logger - Logger instance.
7
+ */
8
+ const logRequest = (request, logger) => {
9
+ const { method, url, headers, data, params } = request;
10
+ const api = "REQUEST";
11
+
12
+ const logObject = {
13
+ method,
14
+ url,
15
+ headers,
16
+ requestBody: data,
17
+ parameters: params,
18
+ api,
19
+ };
20
+
21
+ logger.logInfo("Axios Request", logObject);
22
+ return request;
23
+ };
24
+
25
+ /**
26
+ * Logs Axios responses.
27
+ * @param {Object} response - Axios response object.
28
+ * @param {Object} logger - Logger instance.
29
+ */
30
+ const logResponse = (response, logger) => {
31
+ const { status, config, data, headers: responseHeaders } = response;
32
+ const { method, url, headers, data: requestBody, params } = config || {};
33
+ const api = "RESPONSE";
34
+
35
+ const logObject = {
36
+ statusCode: status,
37
+ method,
38
+ url,
39
+ headers, // request headers
40
+ responseHeaders, // actual response headers
41
+ requestBody,
42
+ responseBody: data,
43
+ parameters: params,
44
+ api,
45
+ };
46
+
47
+ logger.logInfo("Axios Response", logObject);
48
+ return response;
49
+ };
50
+
51
+ /**
52
+ * Logs Axios errors.
53
+ * @param {Object} error - Axios error object.
54
+ * @param {Object} logger - Logger instance.
55
+ */
56
+ const logError = (error, logger) => {
57
+ const { response, config } = error || {};
58
+ const { method, url, headers, data: requestBody, params } = config || {};
59
+
60
+ const logObject = {
61
+ step: "Axios Error",
62
+ error,
63
+ method,
64
+ url,
65
+ headers,
66
+ requestBody,
67
+ parameters: params,
68
+ responseBody: response?.data || {},
69
+ statusCode: response?.status || "",
70
+ responseHeaders: response?.headers || {},
71
+ api: "ERROR",
72
+ };
73
+
74
+ logger.logError(logObject);
75
+ return Promise.reject(error);
76
+ };
77
+
78
+ /**
79
+ * Attaches logging interceptors to an Axios instance.
80
+ * @param {Object} axiosInstance - Axios instance.
81
+ * @param {Object} logger - Logger instance.
82
+ * @param {Object} traceContext - Trace context provider.
83
+ */
84
+ const attachAxiosLogger = (axiosInstance, logger, traceContext) => {
85
+ axiosInstance.interceptors.request.use(
86
+ (request) => {
87
+ const currentTraceContext =
88
+ traceContext?.getCurrentTraceContext?.() || {};
89
+
90
+ request.headers = {
91
+ ...request.headers,
92
+ "x-b3-traceid": currentTraceContext?.trace_id ?? "",
93
+ "x-b3-spanid": currentTraceContext?.span_id ?? "",
94
+ "x-b3-parentspanid": currentTraceContext?.parent_span_id ?? "",
95
+ };
96
+
97
+ return logRequest(request, logger);
98
+ },
99
+ (error) => logError(error, logger),
100
+ );
101
+
102
+ axiosInstance.interceptors.response.use(
103
+ (response) => logResponse(response, logger),
104
+ (error) => logError(error, logger),
105
+ );
106
+ };
107
+
108
+ module.exports = { attachAxiosLogger };
@@ -1,5 +1,5 @@
1
- const { attachAxiosLogger } = require("./axiosLogger");
2
-
3
- module.exports = {
4
- attachAxiosLogger,
5
- };
1
+ const { attachAxiosLogger } = require("./axiosLogger");
2
+
3
+ module.exports = {
4
+ attachAxiosLogger,
5
+ };
@@ -1,46 +1,46 @@
1
- const { LOG_LEVELS } = require("../logger/constants");
2
-
3
- /**
4
- * Logs incoming HTTP requests.
5
- * @param {Object} request - Express request object.
6
- * @param {Object} logger - Logger instance.
7
- */
8
- const logRequest = (request, logger) => {
9
- const { method, url, headers, body, query, params } = request;
10
- const api = "REQUEST"
11
- const logObject = { method, url, headers, requestBody: body, query, parameters: query, api };
12
- logger.logInfo( "Incoming Request", logObject);
13
- };
14
-
15
- /**
16
- * Logs outgoing HTTP responses.
17
- * @param {Object} response - Express response object.
18
- * @param {Object} logger - Logger instance.
19
- */
20
- const logResponse = (response, logger) => {
21
- const originalJson = response.json;
22
- const api = "RESPONSE"
23
- // Override res.json to intercept response data
24
- response.json = function (data) {
25
- const { statusCode } = response;
26
- const { method, url, headers, body } = response.req;
27
- const logObject = { statusCode, method, url, responseHeaders: headers, headers, requestBody: body, responseBody: data, api };
28
- logger.logInfo("Outgoing Response", logObject);
29
-
30
- // Call the original res.json
31
- return originalJson.call(this, data);
32
- };
33
- };
34
-
35
- /**
36
- * Express middleware for logging requests and responses.
37
- * @param {Object} logger - Logger instance.
38
- * @returns {Function} Middleware function.
39
- */
40
- const logExpressApis = (logger) => (request, response, next) => {
41
- logRequest(request, logger);
42
- logResponse(response, logger);
43
- next();
44
- };
45
-
46
- module.exports = { logExpressApis };
1
+ const { LOG_LEVELS } = require("../logger/constants");
2
+
3
+ /**
4
+ * Logs incoming HTTP requests.
5
+ * @param {Object} request - Express request object.
6
+ * @param {Object} logger - Logger instance.
7
+ */
8
+ const logRequest = (request, logger) => {
9
+ const { method, url, headers, body, query, params } = request;
10
+ const api = "REQUEST"
11
+ const logObject = { method, url, headers, requestBody: body, query, parameters: query, api };
12
+ logger.logInfo( "Incoming Request", logObject);
13
+ };
14
+
15
+ /**
16
+ * Logs outgoing HTTP responses.
17
+ * @param {Object} response - Express response object.
18
+ * @param {Object} logger - Logger instance.
19
+ */
20
+ const logResponse = (response, logger) => {
21
+ const originalJson = response.json;
22
+ const api = "RESPONSE"
23
+ // Override res.json to intercept response data
24
+ response.json = function (data) {
25
+ const { statusCode } = response;
26
+ const { method, url, headers, body } = response.req;
27
+ const logObject = { statusCode, method, url, responseHeaders: headers, headers, requestBody: body, responseBody: data, api };
28
+ logger.logInfo("Outgoing Response", logObject);
29
+
30
+ // Call the original res.json
31
+ return originalJson.call(this, data);
32
+ };
33
+ };
34
+
35
+ /**
36
+ * Express middleware for logging requests and responses.
37
+ * @param {Object} logger - Logger instance.
38
+ * @returns {Function} Middleware function.
39
+ */
40
+ const logExpressApis = (logger) => (request, response, next) => {
41
+ logRequest(request, logger);
42
+ logResponse(response, logger);
43
+ next();
44
+ };
45
+
46
+ module.exports = { logExpressApis };
@@ -1,5 +1,5 @@
1
- const { logExpressApis } = require("./expressLogger");
2
-
3
- module.exports = {
4
- logExpressApis,
5
- };
1
+ const { logExpressApis } = require("./expressLogger");
2
+
3
+ module.exports = {
4
+ logExpressApis,
5
+ };
@@ -1,6 +1,6 @@
1
- const defaultConfig = {
2
- logLevel: "info",
3
- transports: [],
4
- };
5
-
6
- module.exports = { defaultConfig };
1
+ const defaultConfig = {
2
+ logLevel: "info",
3
+ transports: [],
4
+ };
5
+
6
+ module.exports = { defaultConfig };
@@ -1,36 +1,36 @@
1
- const LOG_LEVELS = {
2
- ERROR: "error",
3
- WARN: "warn",
4
- INFO: "info",
5
- DEBUG: "debug",
6
- };
7
-
8
- const DEBUG_MODES = {
9
- FILE: "file",
10
- CONSOLE: "console",
11
- BOTH: "both",
12
- DISABLE: "disable",
13
- };
14
-
15
- const API_LOG_MODE = {
16
- TRUE_VALUE: "true",
17
- };
18
-
19
- const API_CALL_TYPE = {
20
- REQUEST:"REQUEST",
21
- RESPONSE:"RESPONSE"
22
- }
23
-
24
- const HTTP_STATUS_CODES = {
25
- SUCCESS: 200,
26
- BAD_REQUEST: 400,
27
- NOT_FOUND: 404,
28
- INTERNAL_SERVER_ERROR: 500,
29
- UNAUTHORIZED: 401,
30
- FORBIDDEN: 403,
31
- BAD_GATEWAY: 502,
32
- SERVICE_UNAVAILABLE: 503,
33
- GATEWAY_TIMEOUT_ERROR: 504,
34
- };
35
-
36
- module.exports = { LOG_LEVELS, DEBUG_MODES, API_CALL_TYPE, API_LOG_MODE, HTTP_STATUS_CODES };
1
+ const LOG_LEVELS = {
2
+ ERROR: "error",
3
+ WARN: "warn",
4
+ INFO: "info",
5
+ DEBUG: "debug",
6
+ };
7
+
8
+ const DEBUG_MODES = {
9
+ FILE: "file",
10
+ CONSOLE: "console",
11
+ BOTH: "both",
12
+ DISABLE: "disable",
13
+ };
14
+
15
+ const API_LOG_MODE = {
16
+ TRUE_VALUE: "true",
17
+ };
18
+
19
+ const API_CALL_TYPE = {
20
+ REQUEST:"REQUEST",
21
+ RESPONSE:"RESPONSE"
22
+ }
23
+
24
+ const HTTP_STATUS_CODES = {
25
+ SUCCESS: 200,
26
+ BAD_REQUEST: 400,
27
+ NOT_FOUND: 404,
28
+ INTERNAL_SERVER_ERROR: 500,
29
+ UNAUTHORIZED: 401,
30
+ FORBIDDEN: 403,
31
+ BAD_GATEWAY: 502,
32
+ SERVICE_UNAVAILABLE: 503,
33
+ GATEWAY_TIMEOUT_ERROR: 504,
34
+ };
35
+
36
+ module.exports = { LOG_LEVELS, DEBUG_MODES, API_CALL_TYPE, API_LOG_MODE, HTTP_STATUS_CODES };