From 9619012268e693346a215abedefd06f31ea36b67 Mon Sep 17 00:00:00 2001 From: Laeeqdev Date: Tue, 23 Apr 2024 15:39:29 +0530 Subject: [PATCH 1/6] exposed metrics --- package-lock.json | 34 ++++++++++++++++++++++++++++++++++ package.json | 3 ++- src/server.ts | 9 ++++++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 164b47c..76bf59a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "mustache": "^3.0.1", "notifme-sdk": "^1.14.1", "pg": "^8.2.1", + "prom-client": "^15.1.2", "reflect-metadata": "^0.1.13", "typeorm": "0.3.17", "winston": "^3.2.1" @@ -148,6 +149,14 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@opentelemetry/api": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", + "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@parse/node-apn": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/@parse/node-apn/-/node-apn-5.2.3.tgz", @@ -547,6 +556,11 @@ "node": ">=8" } }, + "node_modules/bintrees": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" + }, "node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", @@ -2382,6 +2396,18 @@ "node": ">=0.10.0" } }, + "node_modules/prom-client": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.2.tgz", + "integrity": "sha512-on3h1iXb04QFLLThrmVYg1SChBQ9N1c+nKAjebBjokBqipddH3uxmOUcEkTnzmJ8Jh/5TSUnUqS40i2QB2dJHQ==", + "dependencies": { + "@opentelemetry/api": "^1.4.0", + "tdigest": "^0.1.1" + }, + "engines": { + "node": "^16 || ^18 || >=20" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -2764,6 +2790,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tdigest": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "dependencies": { + "bintrees": "1.0.2" + } + }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", diff --git a/package.json b/package.json index 67eb97f..46677b3 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,8 @@ "@types/mustache": "^0.8.32", "@types/node": "^12.0.2", "@types/request": "^2.48.1", - "body-parser": "^1.20.2", "axios": "1.6.8", + "body-parser": "^1.20.2", "express": "^4.19.2", "js-yaml": "^3.13.1", "json-rules-engine": "^2.3.6", @@ -36,6 +36,7 @@ "mustache": "^3.0.1", "notifme-sdk": "^1.14.1", "pg": "^8.2.1", + "prom-client": "^15.1.2", "reflect-metadata": "^0.1.13", "typeorm": "0.3.17", "winston": "^3.2.1" diff --git a/src/server.ts b/src/server.ts index 7ed2516..93c1173 100644 --- a/src/server.ts +++ b/src/server.ts @@ -29,6 +29,7 @@ import { WebhookService } from './destination/destinationHandlers/webhookHandler import { WebhookConfig } from './entities/webhookconfig'; import * as process from "process"; import bodyParser from 'body-parser'; +import {register,collectDefaultMetrics} from "prom-client"; const app = express(); app.use(bodyParser.json({ limit: '10mb' })); @@ -83,7 +84,7 @@ let dbOptions: ConnectionOptions = { database: db, entities: [NotificationSettings, NotifierEventLog, Event, NotificationTemplates, SlackConfig, SesConfig, SMTPConfig, WebhookConfig, Users] } - +collectDefaultMetrics(); createConnection(dbOptions).then(async connection => { logger.info("Connected to DB") }).catch(error => { @@ -108,5 +109,11 @@ app.post('/notify', (req, res) => { notificationService.sendNotification(req.body) res.send('notifications sent') }); +// Endpoint to expose metrics +app.get('/metrics', (req, res) => { + logger.info("metrics exposed") + res.set('Content-Type', register.contentType); + res.end(register.metrics()); +}); app.listen(3000, () => logger.info('Notifier app listening on port 3000!')) \ No newline at end of file From 1e0bdd75d0f8207eb572657c2a6df7d888862ecd Mon Sep 17 00:00:00 2001 From: Laeeqdev Date: Tue, 23 Apr 2024 16:20:29 +0530 Subject: [PATCH 2/6] resolved exposed matrics error --- package-lock.json | 33 +++++++++++++++++++++++++++++++++ package.json | 1 + src/server.ts | 19 ++++++++++++++----- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 76bf59a..e1f8c35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "axios": "1.6.8", "body-parser": "^1.20.2", "express": "^4.19.2", + "express-promise-router": "^4.1.1", "js-yaml": "^3.13.1", "json-rules-engine": "^2.3.6", "moment-timezone": "^0.5.31", @@ -1216,6 +1217,28 @@ "node": ">= 0.10.0" } }, + "node_modules/express-promise-router": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/express-promise-router/-/express-promise-router-4.1.1.tgz", + "integrity": "sha512-Lkvcy/ZGrBhzkl3y7uYBHLMtLI4D6XQ2kiFg9dq7fbktBch5gjqJ0+KovX0cvCAvTJw92raWunRLM/OM+5l4fA==", + "dependencies": { + "is-promise": "^4.0.0", + "lodash.flattendeep": "^4.0.0", + "methods": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/express": "^4.0.0", + "express": "^4.0.0" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, "node_modules/extsprintf": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", @@ -1654,6 +1677,11 @@ "node": ">=0.12.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -1744,6 +1772,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" + }, "node_modules/lodash.isobjectlike": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/lodash.isobjectlike/-/lodash.isobjectlike-4.0.0.tgz", diff --git a/package.json b/package.json index 46677b3..1b07862 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "axios": "1.6.8", "body-parser": "^1.20.2", "express": "^4.19.2", + "express-promise-router": "^4.1.1", "js-yaml": "^3.13.1", "json-rules-engine": "^2.3.6", "moment-timezone": "^0.5.31", diff --git a/src/server.ts b/src/server.ts index 93c1173..8a4076e 100644 --- a/src/server.ts +++ b/src/server.ts @@ -29,7 +29,9 @@ import { WebhookService } from './destination/destinationHandlers/webhookHandler import { WebhookConfig } from './entities/webhookconfig'; import * as process from "process"; import bodyParser from 'body-parser'; -import {register,collectDefaultMetrics} from "prom-client"; +import {register,collectDefaultMetrics} from 'prom-client'; +import expressPromiseRouter from 'express-promise-router'; + const app = express(); app.use(bodyParser.json({ limit: '10mb' })); @@ -84,7 +86,7 @@ let dbOptions: ConnectionOptions = { database: db, entities: [NotificationSettings, NotifierEventLog, Event, NotificationTemplates, SlackConfig, SesConfig, SMTPConfig, WebhookConfig, Users] } -collectDefaultMetrics(); + createConnection(dbOptions).then(async connection => { logger.info("Connected to DB") }).catch(error => { @@ -109,11 +111,18 @@ app.post('/notify', (req, res) => { notificationService.sendNotification(req.body) res.send('notifications sent') }); +const router = expressPromiseRouter(); + +// Initialize Prometheus metrics +collectDefaultMetrics(); + // Endpoint to expose metrics -app.get('/metrics', (req, res) => { - logger.info("metrics exposed") +router.get('/metrics', async (req, res) => { res.set('Content-Type', register.contentType); - res.end(register.metrics()); + res.end(await register.metrics()); }); +// Mount the router to the app +app.use(router); + app.listen(3000, () => logger.info('Notifier app listening on port 3000!')) \ No newline at end of file From 25382bdb159328eab365cf6ca94647d8b757b19a Mon Sep 17 00:00:00 2001 From: Laeeqdev Date: Tue, 7 May 2024 14:55:00 +0530 Subject: [PATCH 3/6] customized code --- src/server.ts | 61 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/src/server.ts b/src/server.ts index 8a4076e..136e22c 100644 --- a/src/server.ts +++ b/src/server.ts @@ -29,7 +29,8 @@ import { WebhookService } from './destination/destinationHandlers/webhookHandler import { WebhookConfig } from './entities/webhookconfig'; import * as process from "process"; import bodyParser from 'body-parser'; -import {register,collectDefaultMetrics} from 'prom-client'; +import {collectDefaultMetrics, Registry, Counter, Histogram} from 'prom-client'; +import promClient from 'prom-client'; import expressPromiseRouter from 'express-promise-router'; const app = express(); @@ -94,35 +95,69 @@ createConnection(dbOptions).then(async connection => { logger.error("shutting down notifier due to un-successful database connection...") process.exit(1) }); +// create a registry to hold metrics +const registry = new Registry() +// Initialize Prometheus metrics +collectDefaultMetrics({register:registry}); + +const requestCounter = new Counter({ + name: 'http_requests_total', + help: 'Total number of HTTP requests', + registers: [registry], + labelNames: ['method', 'path', 'status'], +}) +const httpRequestTimer = new Histogram({ + name: 'http_request_duration_ms', + help: 'Duration of HTTP requests in ms', + labelNames: ['method', 'path', 'status'], + registers: [registry], +}); app.get('/', (req, res) => res.send('Welcome to notifier Notifier!')) app.get('/health', (req, res) =>{ - res.status(200).send("healthy") + requestCounter.labels(req.method, req.path, res.statusCode.toString()).inc() + const start = Date.now(); + try{res.status(200).send("healthy")} +finally { + const responseTimeInMs = Date.now() - start; + httpRequestTimer.labels(req.method, req.route.path, res.statusCode.toString()).observe(responseTimeInMs); + } }) app.get('/test', (req, res) => { - send(); + requestCounter.labels(req.method, req.path, res.statusCode.toString()).inc() + const start = Date.now(); + try{send();} +finally { + const responseTimeInMs = Date.now() - start; + httpRequestTimer.labels(req.method, req.route.path, res.statusCode.toString()).observe(responseTimeInMs); + } res.send('Test!'); }) app.post('/notify', (req, res) => { + requestCounter.labels(req.method, req.path, res.statusCode.toString()).inc() + const start = Date.now(); logger.info("notifications Received") - notificationService.sendNotification(req.body) - res.send('notifications sent') + try{ + notificationService.sendNotification(req.body) + res.send('notifications sent') + }finally { + const responseTimeInMs = Date.now() - start; + httpRequestTimer.labels(req.method, req.route.path, res.statusCode.toString()).observe(responseTimeInMs); + } }); -const router = expressPromiseRouter(); -// Initialize Prometheus metrics -collectDefaultMetrics(); + + // Endpoint to expose metrics -router.get('/metrics', async (req, res) => { - res.set('Content-Type', register.contentType); - res.end(await register.metrics()); +app.get('/metrics', async (req, res) => { + const result = await registry.metrics() + res.send(result) }); -// Mount the router to the app -app.use(router); + app.listen(3000, () => logger.info('Notifier app listening on port 3000!')) \ No newline at end of file From 81ec3d30c8200c7de62fed988841799cfc170dce Mon Sep 17 00:00:00 2001 From: Laeeqdev Date: Tue, 7 May 2024 14:57:57 +0530 Subject: [PATCH 4/6] removed unnecessary import --- src/server.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/server.ts b/src/server.ts index 136e22c..d5570c1 100644 --- a/src/server.ts +++ b/src/server.ts @@ -30,8 +30,7 @@ import { WebhookConfig } from './entities/webhookconfig'; import * as process from "process"; import bodyParser from 'body-parser'; import {collectDefaultMetrics, Registry, Counter, Histogram} from 'prom-client'; -import promClient from 'prom-client'; -import expressPromiseRouter from 'express-promise-router'; + const app = express(); app.use(bodyParser.json({ limit: '10mb' })); From 342088e952801ec6aee318475044c82e16d740a0 Mon Sep 17 00:00:00 2001 From: Laeeqdev Date: Tue, 7 May 2024 15:07:56 +0530 Subject: [PATCH 5/6] removed unused dependency --- package-lock.json | 75 ++++------------------------------------------- package.json | 3 -- 2 files changed, 5 insertions(+), 73 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1f8c35..d7543ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,12 +12,9 @@ "@types/express": "^4.16.1", "@types/mustache": "^0.8.32", "@types/node": "^12.0.2", - "@types/request": "^2.48.1", "axios": "1.6.8", "body-parser": "^1.20.2", "express": "^4.19.2", - "express-promise-router": "^4.1.1", - "js-yaml": "^3.13.1", "json-rules-engine": "^2.3.6", "moment-timezone": "^0.5.31", "mustache": "^3.0.1", @@ -231,11 +228,6 @@ "@types/node": "*" } }, - "node_modules/@types/caseless": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==" - }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -296,17 +288,6 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, - "node_modules/@types/request": { - "version": "2.48.12", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", - "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", - "dependencies": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } - }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", @@ -326,11 +307,6 @@ "@types/node": "*" } }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" - }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", @@ -463,6 +439,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -1152,6 +1129,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1217,28 +1195,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express-promise-router": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/express-promise-router/-/express-promise-router-4.1.1.tgz", - "integrity": "sha512-Lkvcy/ZGrBhzkl3y7uYBHLMtLI4D6XQ2kiFg9dq7fbktBch5gjqJ0+KovX0cvCAvTJw92raWunRLM/OM+5l4fA==", - "dependencies": { - "is-promise": "^4.0.0", - "lodash.flattendeep": "^4.0.0", - "methods": "^1.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/express": "^4.0.0", - "express": "^4.0.0" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, "node_modules/extsprintf": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", @@ -1310,19 +1266,6 @@ } } }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1677,11 +1620,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -1703,6 +1641,7 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1772,11 +1711,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" - }, "node_modules/lodash.isobjectlike": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/lodash.isobjectlike/-/lodash.isobjectlike-4.0.0.tgz", @@ -2749,7 +2683,8 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "node_modules/stack-trace": { "version": "0.0.10", diff --git a/package.json b/package.json index 1b07862..70852ef 100644 --- a/package.json +++ b/package.json @@ -26,12 +26,9 @@ "@types/express": "^4.16.1", "@types/mustache": "^0.8.32", "@types/node": "^12.0.2", - "@types/request": "^2.48.1", "axios": "1.6.8", "body-parser": "^1.20.2", "express": "^4.19.2", - "express-promise-router": "^4.1.1", - "js-yaml": "^3.13.1", "json-rules-engine": "^2.3.6", "moment-timezone": "^0.5.31", "mustache": "^3.0.1", From 242360fce1a8480b389e7b712534cc485396c3cb Mon Sep 17 00:00:00 2001 From: Laeeqdev Date: Tue, 7 May 2024 15:09:46 +0530 Subject: [PATCH 6/6] added required dependency --- package-lock.json | 78 +++++++++++++++++++++++++++++++++++++++-------- package.json | 2 ++ 2 files changed, 67 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index d7543ff..0757e5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,11 @@ "@types/express": "^4.16.1", "@types/mustache": "^0.8.32", "@types/node": "^12.0.2", + "@types/request": "^2.48.12", "axios": "1.6.8", "body-parser": "^1.20.2", "express": "^4.19.2", + "js-yaml": "^4.1.0", "json-rules-engine": "^2.3.6", "moment-timezone": "^0.5.31", "mustache": "^3.0.1", @@ -228,6 +230,11 @@ "@types/node": "*" } }, + "node_modules/@types/caseless": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==" + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -288,6 +295,17 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, + "node_modules/@types/request": { + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", + "dependencies": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", @@ -307,6 +325,11 @@ "@types/node": "*" } }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", @@ -436,13 +459,9 @@ "devOptional": true }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-flatten": { "version": "1.1.1", @@ -1266,6 +1285,19 @@ } } }, + "node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1638,13 +1670,11 @@ "dev": true }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -2914,6 +2944,28 @@ "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" } }, + "node_modules/tslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/tslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/tslint/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", diff --git a/package.json b/package.json index 70852ef..e6cf16f 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,11 @@ "@types/express": "^4.16.1", "@types/mustache": "^0.8.32", "@types/node": "^12.0.2", + "@types/request": "^2.48.12", "axios": "1.6.8", "body-parser": "^1.20.2", "express": "^4.19.2", + "js-yaml": "^4.1.0", "json-rules-engine": "^2.3.6", "moment-timezone": "^0.5.31", "mustache": "^3.0.1",