api-logger-mongodb 1.0.0
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/LICENSE +21 -0
- package/README.md +353 -0
- package/dist/core/logger.d.ts +58 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +218 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/express.d.ts +8 -0
- package/dist/middleware/express.d.ts.map +1 -0
- package/dist/middleware/express.js +55 -0
- package/dist/middleware/express.js.map +1 -0
- package/dist/middleware/nestjs.d.ts +28 -0
- package/dist/middleware/nestjs.d.ts.map +1 -0
- package/dist/middleware/nestjs.js +77 -0
- package/dist/middleware/nestjs.js.map +1 -0
- package/dist/types/index.d.ts +75 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/filter.d.ts +23 -0
- package/dist/utils/filter.d.ts.map +1 -0
- package/dist/utils/filter.js +143 -0
- package/dist/utils/filter.js.map +1 -0
- package/dist/utils/mask.d.ts +16 -0
- package/dist/utils/mask.d.ts.map +1 -0
- package/dist/utils/mask.js +110 -0
- package/dist/utils/mask.js.map +1 -0
- package/dist/utils/standalone.d.ts +45 -0
- package/dist/utils/standalone.d.ts.map +1 -0
- package/dist/utils/standalone.js +115 -0
- package/dist/utils/standalone.js.map +1 -0
- package/dist/utils/validate.d.ts +6 -0
- package/dist/utils/validate.d.ts.map +1 -0
- package/dist/utils/validate.js +21 -0
- package/dist/utils/validate.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ApiLogger } from '../core/logger';
|
|
2
|
+
import { ApiLoggerOptions } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Standalone API Logger for use with axios or any HTTP client
|
|
5
|
+
*/
|
|
6
|
+
export declare class StandaloneApiLogger {
|
|
7
|
+
private logger;
|
|
8
|
+
private initialized;
|
|
9
|
+
private initPromise;
|
|
10
|
+
constructor(options: ApiLoggerOptions);
|
|
11
|
+
/**
|
|
12
|
+
* Initialize MongoDB connection (single-flight, concurrent-safe).
|
|
13
|
+
*/
|
|
14
|
+
init(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Log an HTTP request and response
|
|
17
|
+
*/
|
|
18
|
+
logRequest(url: string, method: string, requestData: {
|
|
19
|
+
headers?: Record<string, string>;
|
|
20
|
+
body?: any;
|
|
21
|
+
query?: Record<string, any>;
|
|
22
|
+
params?: Record<string, any>;
|
|
23
|
+
}, responseData: {
|
|
24
|
+
statusCode: number;
|
|
25
|
+
body?: any;
|
|
26
|
+
headers?: Record<string, string>;
|
|
27
|
+
}, userInfo?: any, durationMs?: number): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Close MongoDB connection
|
|
30
|
+
*/
|
|
31
|
+
close(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Get the underlying logger instance
|
|
34
|
+
*/
|
|
35
|
+
getLogger(): ApiLogger;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Axios interceptor factory for automatic logging
|
|
39
|
+
*/
|
|
40
|
+
export declare function createAxiosLogger(logger: StandaloneApiLogger, getUserInfo?: () => any): {
|
|
41
|
+
request: (config: any) => any;
|
|
42
|
+
response: (response: any) => Promise<any>;
|
|
43
|
+
error: (error: any) => Promise<never>;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=standalone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../../src/utils/standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAe,MAAM,UAAU,CAAC;AAEzD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;gBAErC,OAAO,EAAE,gBAAgB;IAIrC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B;;OAEG;IACG,UAAU,CACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,WAAW,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9B,EACD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,EACD,QAAQ,CAAC,EAAE,GAAG,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IA0BhB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,SAAS,IAAI,SAAS;CAGvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,mBAAmB,EAC3B,WAAW,CAAC,EAAE,MAAM,GAAG;sBAGH,GAAG;yBAIM,GAAG;mBAuBT,GAAG;EA0B3B"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StandaloneApiLogger = void 0;
|
|
4
|
+
exports.createAxiosLogger = createAxiosLogger;
|
|
5
|
+
const logger_1 = require("../core/logger");
|
|
6
|
+
/**
|
|
7
|
+
* Standalone API Logger for use with axios or any HTTP client
|
|
8
|
+
*/
|
|
9
|
+
class StandaloneApiLogger {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.initialized = false;
|
|
12
|
+
this.initPromise = null;
|
|
13
|
+
this.logger = new logger_1.ApiLogger(options);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Initialize MongoDB connection (single-flight, concurrent-safe).
|
|
17
|
+
*/
|
|
18
|
+
async init() {
|
|
19
|
+
if (this.initialized)
|
|
20
|
+
return;
|
|
21
|
+
if (this.initPromise) {
|
|
22
|
+
await this.initPromise;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.initPromise = this.logger.init();
|
|
26
|
+
try {
|
|
27
|
+
await this.initPromise;
|
|
28
|
+
this.initialized = true;
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
this.initPromise = null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Log an HTTP request and response
|
|
36
|
+
*/
|
|
37
|
+
async logRequest(url, method, requestData, responseData, userInfo, durationMs) {
|
|
38
|
+
await this.init();
|
|
39
|
+
const logEntry = {
|
|
40
|
+
url,
|
|
41
|
+
method: method.toUpperCase(),
|
|
42
|
+
request: {
|
|
43
|
+
headers: requestData.headers || {},
|
|
44
|
+
body: requestData.body || {},
|
|
45
|
+
query: requestData.query || {},
|
|
46
|
+
params: requestData.params || {}
|
|
47
|
+
},
|
|
48
|
+
response: {
|
|
49
|
+
statusCode: responseData.statusCode,
|
|
50
|
+
body: responseData.body
|
|
51
|
+
},
|
|
52
|
+
user: userInfo,
|
|
53
|
+
createdAt: new Date(),
|
|
54
|
+
durationMs: durationMs || 0,
|
|
55
|
+
ip: undefined,
|
|
56
|
+
userAgent: undefined
|
|
57
|
+
};
|
|
58
|
+
await this.logger.logEntry(logEntry);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Close MongoDB connection
|
|
62
|
+
*/
|
|
63
|
+
async close() {
|
|
64
|
+
await this.logger.close();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the underlying logger instance
|
|
68
|
+
*/
|
|
69
|
+
getLogger() {
|
|
70
|
+
return this.logger;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.StandaloneApiLogger = StandaloneApiLogger;
|
|
74
|
+
/**
|
|
75
|
+
* Axios interceptor factory for automatic logging
|
|
76
|
+
*/
|
|
77
|
+
function createAxiosLogger(logger, getUserInfo) {
|
|
78
|
+
return {
|
|
79
|
+
request: (config) => {
|
|
80
|
+
config.metadata = { startTime: Date.now() };
|
|
81
|
+
return config;
|
|
82
|
+
},
|
|
83
|
+
response: async (response) => {
|
|
84
|
+
const startTime = response?.config?.metadata?.startTime ?? Date.now();
|
|
85
|
+
const durationMs = Date.now() - startTime;
|
|
86
|
+
await logger.logRequest(response.config.url, response.config.method, {
|
|
87
|
+
headers: response.config.headers,
|
|
88
|
+
body: response.config.data,
|
|
89
|
+
query: response.config.params
|
|
90
|
+
}, {
|
|
91
|
+
statusCode: response.status,
|
|
92
|
+
body: response.data,
|
|
93
|
+
headers: response.headers
|
|
94
|
+
}, getUserInfo ? getUserInfo() : undefined, durationMs);
|
|
95
|
+
return response;
|
|
96
|
+
},
|
|
97
|
+
error: async (error) => {
|
|
98
|
+
if (error.response) {
|
|
99
|
+
const startTime = error?.config?.metadata?.startTime ?? Date.now();
|
|
100
|
+
const durationMs = Date.now() - startTime;
|
|
101
|
+
await logger.logRequest(error.config.url, error.config.method, {
|
|
102
|
+
headers: error.config.headers,
|
|
103
|
+
body: error.config.data,
|
|
104
|
+
query: error.config.params
|
|
105
|
+
}, {
|
|
106
|
+
statusCode: error.response.status,
|
|
107
|
+
body: error.response.data,
|
|
108
|
+
headers: error.response.headers
|
|
109
|
+
}, getUserInfo ? getUserInfo() : undefined, durationMs);
|
|
110
|
+
}
|
|
111
|
+
return Promise.reject(error);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/utils/standalone.ts"],"names":[],"mappings":";;;AAgGA,8CA0DC;AA1JD,2CAA2C;AAG3C;;GAEG;AACH,MAAa,mBAAmB;IAK9B,YAAY,OAAyB;QAH7B,gBAAW,GAAG,KAAK,CAAC;QACpB,gBAAW,GAAyB,IAAI,CAAC;QAG/C,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAS,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,GAAW,EACX,MAAc,EACd,WAKC,EACD,YAIC,EACD,QAAc,EACd,UAAmB;QAEnB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAElB,MAAM,QAAQ,GAAgB;YAC5B,GAAG;YACH,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;YAC5B,OAAO,EAAE;gBACP,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,EAAE;gBAClC,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;gBAC5B,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE;gBAC9B,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,EAAE;aACjC;YACD,QAAQ,EAAE;gBACR,UAAU,EAAE,YAAY,CAAC,UAAU;gBACnC,IAAI,EAAE,YAAY,CAAC,IAAI;aACxB;YACD,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,UAAU,EAAE,UAAU,IAAI,CAAC;YAC3B,EAAE,EAAE,SAAS;YACb,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AArFD,kDAqFC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,MAA2B,EAC3B,WAAuB;IAEvB,OAAO;QACL,OAAO,EAAE,CAAC,MAAW,EAAE,EAAE;YACvB,MAAM,CAAC,QAAQ,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,QAAa,EAAE,EAAE;YAChC,MAAM,SAAS,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACtE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE1C,MAAM,MAAM,CAAC,UAAU,CACrB,QAAQ,CAAC,MAAM,CAAC,GAAG,EACnB,QAAQ,CAAC,MAAM,CAAC,MAAM,EACtB;gBACE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;gBAChC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI;gBAC1B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;aAC9B,EACD;gBACE,UAAU,EAAE,QAAQ,CAAC,MAAM;gBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,EACD,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EACvC,UAAU,CACX,CAAC;YAEF,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE;YAC1B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAE1C,MAAM,MAAM,CAAC,UAAU,CACrB,KAAK,CAAC,MAAM,CAAC,GAAG,EAChB,KAAK,CAAC,MAAM,CAAC,MAAM,EACnB;oBACE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;oBAC7B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;oBACvB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;iBAC3B,EACD;oBACE,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;oBACjC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;oBACzB,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;iBAChC,EACD,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EACvC,UAAU,CACX,CAAC;YACJ,CAAC;YAED,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAarE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateLoggerOptions = validateLoggerOptions;
|
|
4
|
+
/**
|
|
5
|
+
* Validates API logger options at construction. Throws if invalid.
|
|
6
|
+
*/
|
|
7
|
+
function validateLoggerOptions(options) {
|
|
8
|
+
if (!options.mongoUri || typeof options.mongoUri !== 'string') {
|
|
9
|
+
throw new Error('ApiLoggerOptions.mongoUri is required and must be a non-empty string.');
|
|
10
|
+
}
|
|
11
|
+
if (options.mongoUri.trim().length === 0) {
|
|
12
|
+
throw new Error('ApiLoggerOptions.mongoUri cannot be blank.');
|
|
13
|
+
}
|
|
14
|
+
if (options.databaseName !== undefined && (typeof options.databaseName !== 'string' || options.databaseName.trim().length === 0)) {
|
|
15
|
+
throw new Error('ApiLoggerOptions.databaseName must be a non-empty string when provided.');
|
|
16
|
+
}
|
|
17
|
+
if (options.collectionName !== undefined && (typeof options.collectionName !== 'string' || options.collectionName.trim().length === 0)) {
|
|
18
|
+
throw new Error('ApiLoggerOptions.collectionName must be a non-empty string when provided.');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":";;AAKA,sDAaC;AAhBD;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAAyB;IAC7D,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACjI,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACvI,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "api-logger-mongodb",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A comprehensive API logging middleware for Node.js applications that logs requests and responses to MongoDB",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"require": "./dist/index.js",
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"test": "jest",
|
|
18
|
+
"test:watch": "jest --watch",
|
|
19
|
+
"lint": "eslint src/**/*.ts",
|
|
20
|
+
"lint:fix": "eslint src/**/*.ts --fix",
|
|
21
|
+
"prepublishOnly": "npm run build"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"api-logger",
|
|
25
|
+
"mongodb",
|
|
26
|
+
"express",
|
|
27
|
+
"nestjs",
|
|
28
|
+
"middleware",
|
|
29
|
+
"logging",
|
|
30
|
+
"audit",
|
|
31
|
+
"request-response",
|
|
32
|
+
"typescript"
|
|
33
|
+
],
|
|
34
|
+
"author": "Sayantan Roy",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "https://github.com/rick001/api-logger-mongodb.git"
|
|
39
|
+
},
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/rick001/api-logger-mongodb/issues"
|
|
42
|
+
},
|
|
43
|
+
"homepage": "https://github.com/rick001/api-logger-mongodb#readme",
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"mongodb": "^6.3.0"
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"express": ">=4.0.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/express": "^4.17.21",
|
|
52
|
+
"@types/jest": "^29.5.8",
|
|
53
|
+
"@types/node": "^20.10.0",
|
|
54
|
+
"@typescript-eslint/eslint-plugin": "^8.56.0",
|
|
55
|
+
"@typescript-eslint/parser": "^8.56.0",
|
|
56
|
+
"eslint": "^8.54.0",
|
|
57
|
+
"express": "^4.22.0",
|
|
58
|
+
"jest": "^29.7.0",
|
|
59
|
+
"ts-jest": "^29.1.1",
|
|
60
|
+
"typescript": "^5.3.2"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=16.0.0"
|
|
64
|
+
},
|
|
65
|
+
"files": [
|
|
66
|
+
"dist",
|
|
67
|
+
"README.md",
|
|
68
|
+
"LICENSE"
|
|
69
|
+
],
|
|
70
|
+
"publishConfig": {
|
|
71
|
+
"access": "public"
|
|
72
|
+
}
|
|
73
|
+
}
|