refactoring to a better nodejs template and adding
better filtering using sample data
This commit is contained in:
parent
a141e18120
commit
fa15cce2e1
5
.env
5
.env
@ -2,6 +2,9 @@ EO_API_USERNAME = apiclient
|
||||
EO_API_PASSWORD = apiclient12345
|
||||
EO_API_SCOPE = oidc tags context_entitlements content_entitlements em_api_access
|
||||
EO_API_CLIENT_ID = default
|
||||
EO_API_CLIENT_SECRET =
|
||||
EO_API_CLIENT_SECRET = asd
|
||||
EO_API_ACCESS_TOKEN_URL = https://em5.verint.training/oidc-token-service/default/token
|
||||
EO_API_UDG_URL = https://em5.verint.training/unified-data-gateway/default/graphql
|
||||
|
||||
JWT_SECRET = 12356789
|
||||
PORT = 3000
|
||||
@ -10,12 +10,13 @@ module.exports = {
|
||||
},
|
||||
files: [".eslintrc.{js,cjs}"],
|
||||
parserOptions: {
|
||||
sourceType: "script",
|
||||
sourceType: "module",
|
||||
},
|
||||
},
|
||||
],
|
||||
parserOptions: {
|
||||
ecmaVersion: "latest",
|
||||
sourceType: "module",
|
||||
},
|
||||
rules: {},
|
||||
};
|
||||
|
||||
16
nodemon.json
Normal file
16
nodemon.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"restartable": "rs",
|
||||
"watch": ["src", ".env"],
|
||||
"ext": "js,ts,json",
|
||||
"execMap": {
|
||||
"js": "node --harmony"
|
||||
},
|
||||
"ignore": [".git", "node_modules/**/node_modules"],
|
||||
"events": {
|
||||
"restart": "osascript -e 'display notification \"App restarted due to:\n'$FILENAME'\" with title \"nodemon\"'"
|
||||
},
|
||||
"verbose": true,
|
||||
"env": {
|
||||
"NODE_ENV": "development"
|
||||
}
|
||||
}
|
||||
528
package-lock.json
generated
528
package-lock.json
generated
@ -10,13 +10,16 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"axios": "^1.1.2",
|
||||
"compression": "^1.7.4",
|
||||
"cors": "^2.8.5",
|
||||
"dotenv": "^16.0.3",
|
||||
"express": "^4.18.2",
|
||||
"express-session": "^1.17.3",
|
||||
"helmet": "^7.0.0",
|
||||
"morgan": "^1.10.0",
|
||||
"nodemon": "^1.14.9",
|
||||
"query-string": "^7.1.1"
|
||||
"query-string": "^7.1.1",
|
||||
"winston": "^3.9.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.43.0",
|
||||
@ -28,6 +31,24 @@
|
||||
"prettier": "2.8.8"
|
||||
}
|
||||
},
|
||||
"node_modules/@colors/colors": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
|
||||
"integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
|
||||
"engines": {
|
||||
"node": ">=0.1.90"
|
||||
}
|
||||
},
|
||||
"node_modules/@dabh/diagnostics": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
|
||||
"integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
|
||||
"dependencies": {
|
||||
"colorspace": "1.1.x",
|
||||
"enabled": "2.0.x",
|
||||
"kuler": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint-community/eslint-utils": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
|
||||
@ -204,6 +225,11 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/triple-beam": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz",
|
||||
"integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g=="
|
||||
},
|
||||
"node_modules/abbrev": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
||||
@ -411,6 +437,11 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/async": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
|
||||
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
|
||||
},
|
||||
"node_modules/async-each": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz",
|
||||
@ -883,6 +914,15 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/color": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
|
||||
"integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
|
||||
"dependencies": {
|
||||
"color-convert": "^1.9.3",
|
||||
"color-string": "^1.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
@ -898,8 +938,38 @@
|
||||
"node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"node_modules/color-string": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
|
||||
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
|
||||
"dependencies": {
|
||||
"color-name": "^1.0.0",
|
||||
"simple-swizzle": "^0.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/color/node_modules/color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"dependencies": {
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
},
|
||||
"node_modules/color/node_modules/color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
|
||||
},
|
||||
"node_modules/colorspace": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
|
||||
"integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
|
||||
"dependencies": {
|
||||
"color": "^3.1.3",
|
||||
"text-hex": "1.0.x"
|
||||
}
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
@ -917,6 +987,47 @@
|
||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
||||
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
|
||||
},
|
||||
"node_modules/compressible": {
|
||||
"version": "2.0.18",
|
||||
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
|
||||
"integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
|
||||
"dependencies": {
|
||||
"mime-db": ">= 1.43.0 < 2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/compression": {
|
||||
"version": "1.7.4",
|
||||
"resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
|
||||
"integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
|
||||
"dependencies": {
|
||||
"accepts": "~1.3.5",
|
||||
"bytes": "3.0.0",
|
||||
"compressible": "~2.0.16",
|
||||
"debug": "2.6.9",
|
||||
"on-headers": "~1.0.2",
|
||||
"safe-buffer": "5.1.2",
|
||||
"vary": "~1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/compression/node_modules/bytes": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
|
||||
"integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/compression/node_modules/safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"node_modules/concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
@ -1152,6 +1263,11 @@
|
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||
},
|
||||
"node_modules/enabled": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
|
||||
"integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
|
||||
},
|
||||
"node_modules/encodeurl": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||
@ -1936,6 +2052,11 @@
|
||||
"reusify": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/fecha": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
|
||||
"integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="
|
||||
},
|
||||
"node_modules/file-entry-cache": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
||||
@ -2028,6 +2149,11 @@
|
||||
"integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/fn.name": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
|
||||
"integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
@ -2444,6 +2570,14 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/helmet": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/helmet/-/helmet-7.0.0.tgz",
|
||||
"integrity": "sha512-MsIgYmdBh460ZZ8cJC81q4XJknjG567wzEmv46WOBblDb6TUd3z8/GhgmsM9pn8g2B80tAJ4m5/d3Bi1KrSUBQ==",
|
||||
"engines": {
|
||||
"node": ">=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/http-errors": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
|
||||
@ -2591,6 +2725,11 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/is-arrayish": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
||||
},
|
||||
"node_modules/is-bigint": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
|
||||
@ -3043,6 +3182,11 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/kuler": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
|
||||
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
|
||||
},
|
||||
"node_modules/latest-version": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
|
||||
@ -3088,6 +3232,24 @@
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/logform": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz",
|
||||
"integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==",
|
||||
"dependencies": {
|
||||
"@colors/colors": "1.5.0",
|
||||
"@types/triple-beam": "^1.3.2",
|
||||
"fecha": "^4.2.0",
|
||||
"ms": "^2.1.1",
|
||||
"safe-stable-stringify": "^2.3.1",
|
||||
"triple-beam": "^1.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/logform/node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
},
|
||||
"node_modules/lowercase-keys": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
|
||||
@ -3643,6 +3805,14 @@
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"node_modules/one-time": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
|
||||
"integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
|
||||
"dependencies": {
|
||||
"fn.name": "1.x.x"
|
||||
}
|
||||
},
|
||||
"node_modules/optionator": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
|
||||
@ -4233,6 +4403,14 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/safe-stable-stringify": {
|
||||
"version": "2.4.3",
|
||||
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
|
||||
"integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
@ -4357,6 +4535,14 @@
|
||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
|
||||
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
|
||||
},
|
||||
"node_modules/simple-swizzle": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
|
||||
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
|
||||
"dependencies": {
|
||||
"is-arrayish": "^0.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/snapdragon": {
|
||||
"version": "0.8.2",
|
||||
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
||||
@ -4533,6 +4719,14 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/stack-trace": {
|
||||
"version": "0.0.10",
|
||||
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
|
||||
"integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/static-extend": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
|
||||
@ -4779,6 +4973,11 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/text-hex": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
|
||||
"integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
|
||||
},
|
||||
"node_modules/text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||
@ -4872,6 +5071,11 @@
|
||||
"nodetouch": "bin/nodetouch.js"
|
||||
}
|
||||
},
|
||||
"node_modules/triple-beam": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
|
||||
"integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
|
||||
},
|
||||
"node_modules/tsconfig-paths": {
|
||||
"version": "3.14.2",
|
||||
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
|
||||
@ -5241,6 +5445,77 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/winston": {
|
||||
"version": "3.9.0",
|
||||
"resolved": "https://registry.npmjs.org/winston/-/winston-3.9.0.tgz",
|
||||
"integrity": "sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==",
|
||||
"dependencies": {
|
||||
"@colors/colors": "1.5.0",
|
||||
"@dabh/diagnostics": "^2.0.2",
|
||||
"async": "^3.2.3",
|
||||
"is-stream": "^2.0.0",
|
||||
"logform": "^2.4.0",
|
||||
"one-time": "^1.0.0",
|
||||
"readable-stream": "^3.4.0",
|
||||
"safe-stable-stringify": "^2.3.1",
|
||||
"stack-trace": "0.0.x",
|
||||
"triple-beam": "^1.3.0",
|
||||
"winston-transport": "^4.5.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/winston-transport": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz",
|
||||
"integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==",
|
||||
"dependencies": {
|
||||
"logform": "^2.3.2",
|
||||
"readable-stream": "^3.6.0",
|
||||
"triple-beam": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/winston-transport/node_modules/readable-stream": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
|
||||
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/winston/node_modules/is-stream": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
|
||||
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/winston/node_modules/readable-stream": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
|
||||
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/word-wrap": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||
@ -5294,6 +5569,21 @@
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@colors/colors": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
|
||||
"integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="
|
||||
},
|
||||
"@dabh/diagnostics": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
|
||||
"integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
|
||||
"requires": {
|
||||
"colorspace": "1.1.x",
|
||||
"enabled": "2.0.x",
|
||||
"kuler": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@eslint-community/eslint-utils": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
|
||||
@ -5421,6 +5711,11 @@
|
||||
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/triple-beam": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz",
|
||||
"integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g=="
|
||||
},
|
||||
"abbrev": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
||||
@ -5573,6 +5868,11 @@
|
||||
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
|
||||
"integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw=="
|
||||
},
|
||||
"async": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
|
||||
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
|
||||
},
|
||||
"async-each": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz",
|
||||
@ -5944,6 +6244,30 @@
|
||||
"object-visit": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"color": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
|
||||
"integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
|
||||
"requires": {
|
||||
"color-convert": "^1.9.3",
|
||||
"color-string": "^1.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"requires": {
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
@ -5956,8 +6280,25 @@
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"color-string": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
|
||||
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
|
||||
"requires": {
|
||||
"color-name": "^1.0.0",
|
||||
"simple-swizzle": "^0.2.2"
|
||||
}
|
||||
},
|
||||
"colorspace": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
|
||||
"integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
|
||||
"requires": {
|
||||
"color": "^3.1.3",
|
||||
"text-hex": "1.0.x"
|
||||
}
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
@ -5972,6 +6313,40 @@
|
||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
||||
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
|
||||
},
|
||||
"compressible": {
|
||||
"version": "2.0.18",
|
||||
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
|
||||
"integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
|
||||
"requires": {
|
||||
"mime-db": ">= 1.43.0 < 2"
|
||||
}
|
||||
},
|
||||
"compression": {
|
||||
"version": "1.7.4",
|
||||
"resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
|
||||
"integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
|
||||
"requires": {
|
||||
"accepts": "~1.3.5",
|
||||
"bytes": "3.0.0",
|
||||
"compressible": "~2.0.16",
|
||||
"debug": "2.6.9",
|
||||
"on-headers": "~1.0.2",
|
||||
"safe-buffer": "5.1.2",
|
||||
"vary": "~1.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"bytes": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
|
||||
"integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw=="
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
@ -6146,6 +6521,11 @@
|
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||
},
|
||||
"enabled": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
|
||||
"integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
|
||||
},
|
||||
"encodeurl": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||
@ -6752,6 +7132,11 @@
|
||||
"reusify": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"fecha": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
|
||||
"integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="
|
||||
},
|
||||
"file-entry-cache": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
||||
@ -6823,6 +7208,11 @@
|
||||
"integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
|
||||
"dev": true
|
||||
},
|
||||
"fn.name": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
|
||||
"integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
@ -7113,6 +7503,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"helmet": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/helmet/-/helmet-7.0.0.tgz",
|
||||
"integrity": "sha512-MsIgYmdBh460ZZ8cJC81q4XJknjG567wzEmv46WOBblDb6TUd3z8/GhgmsM9pn8g2B80tAJ4m5/d3Bi1KrSUBQ=="
|
||||
},
|
||||
"http-errors": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
|
||||
@ -7226,6 +7621,11 @@
|
||||
"is-typed-array": "^1.1.10"
|
||||
}
|
||||
},
|
||||
"is-arrayish": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
||||
},
|
||||
"is-bigint": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
|
||||
@ -7543,6 +7943,11 @@
|
||||
"is-buffer": "^1.1.5"
|
||||
}
|
||||
},
|
||||
"kuler": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
|
||||
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
|
||||
},
|
||||
"latest-version": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
|
||||
@ -7576,6 +7981,26 @@
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
||||
"dev": true
|
||||
},
|
||||
"logform": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz",
|
||||
"integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==",
|
||||
"requires": {
|
||||
"@colors/colors": "1.5.0",
|
||||
"@types/triple-beam": "^1.3.2",
|
||||
"fecha": "^4.2.0",
|
||||
"ms": "^2.1.1",
|
||||
"safe-stable-stringify": "^2.3.1",
|
||||
"triple-beam": "^1.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"lowercase-keys": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
|
||||
@ -7996,6 +8421,14 @@
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"one-time": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
|
||||
"integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
|
||||
"requires": {
|
||||
"fn.name": "1.x.x"
|
||||
}
|
||||
},
|
||||
"optionator": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
|
||||
@ -8404,6 +8837,11 @@
|
||||
"is-regex": "^1.1.4"
|
||||
}
|
||||
},
|
||||
"safe-stable-stringify": {
|
||||
"version": "2.4.3",
|
||||
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
|
||||
"integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g=="
|
||||
},
|
||||
"safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
@ -8506,6 +8944,14 @@
|
||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
|
||||
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
|
||||
},
|
||||
"simple-swizzle": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
|
||||
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
|
||||
"requires": {
|
||||
"is-arrayish": "^0.3.1"
|
||||
}
|
||||
},
|
||||
"snapdragon": {
|
||||
"version": "0.8.2",
|
||||
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
||||
@ -8646,6 +9092,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"stack-trace": {
|
||||
"version": "0.0.10",
|
||||
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
|
||||
"integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg=="
|
||||
},
|
||||
"static-extend": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
|
||||
@ -8828,6 +9279,11 @@
|
||||
"execa": "^0.7.0"
|
||||
}
|
||||
},
|
||||
"text-hex": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
|
||||
"integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
|
||||
},
|
||||
"text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||
@ -8899,6 +9355,11 @@
|
||||
"nopt": "~1.0.10"
|
||||
}
|
||||
},
|
||||
"triple-beam": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
|
||||
"integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
|
||||
},
|
||||
"tsconfig-paths": {
|
||||
"version": "3.14.2",
|
||||
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
|
||||
@ -9182,6 +9643,63 @@
|
||||
"string-width": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"winston": {
|
||||
"version": "3.9.0",
|
||||
"resolved": "https://registry.npmjs.org/winston/-/winston-3.9.0.tgz",
|
||||
"integrity": "sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==",
|
||||
"requires": {
|
||||
"@colors/colors": "1.5.0",
|
||||
"@dabh/diagnostics": "^2.0.2",
|
||||
"async": "^3.2.3",
|
||||
"is-stream": "^2.0.0",
|
||||
"logform": "^2.4.0",
|
||||
"one-time": "^1.0.0",
|
||||
"readable-stream": "^3.4.0",
|
||||
"safe-stable-stringify": "^2.3.1",
|
||||
"stack-trace": "0.0.x",
|
||||
"triple-beam": "^1.3.0",
|
||||
"winston-transport": "^4.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"is-stream": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
|
||||
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
|
||||
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"winston-transport": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz",
|
||||
"integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==",
|
||||
"requires": {
|
||||
"logform": "^2.3.2",
|
||||
"readable-stream": "^3.6.0",
|
||||
"triple-beam": "^1.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"readable-stream": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
|
||||
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"word-wrap": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||
|
||||
13
package.json
13
package.json
@ -5,10 +5,9 @@
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"lint": "eslint --ext .js,.cjs --ignore-path .gitignore --fix .",
|
||||
"lint": "eslint --ext .js,.cjs --ignore-path .gitignore --fix src/",
|
||||
"format": "prettier . --write",
|
||||
"start": "node index.js",
|
||||
"dev": "nodemon index.js",
|
||||
"start": "nodemon src/app.js",
|
||||
"build": "docker buildx bake",
|
||||
"push": "docker buildx bake --push"
|
||||
},
|
||||
@ -17,13 +16,16 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"axios": "^1.1.2",
|
||||
"compression": "^1.7.4",
|
||||
"cors": "^2.8.5",
|
||||
"dotenv": "^16.0.3",
|
||||
"express": "^4.18.2",
|
||||
"express-session": "^1.17.3",
|
||||
"helmet": "^7.0.0",
|
||||
"morgan": "^1.10.0",
|
||||
"nodemon": "^1.14.9",
|
||||
"query-string": "^7.1.1"
|
||||
"query-string": "^7.1.1",
|
||||
"winston": "^3.9.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.43.0",
|
||||
@ -33,5 +35,6 @@
|
||||
"eslint-plugin-n": "^16.0.1",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"prettier": "2.8.8"
|
||||
}
|
||||
},
|
||||
"type": "module"
|
||||
}
|
||||
|
||||
@ -1,227 +0,0 @@
|
||||
const express = require("express");
|
||||
const router = express.Router();
|
||||
|
||||
router.get("/", (req, res) => {
|
||||
const data = {
|
||||
nodes: [
|
||||
{
|
||||
name: "Email",
|
||||
category: "Channel",
|
||||
},
|
||||
{
|
||||
name: "Messaging",
|
||||
category: "Channel",
|
||||
},
|
||||
{
|
||||
name: "Legacy Live Chat",
|
||||
category: "Channel",
|
||||
},
|
||||
{
|
||||
name: "Live Chat",
|
||||
category: "Sub-Channel",
|
||||
},
|
||||
{
|
||||
name: "Facebook Messenger",
|
||||
category: "Sub-Channel",
|
||||
},
|
||||
{
|
||||
name: "Twitter DM",
|
||||
category: "Sub-Channel",
|
||||
},
|
||||
{
|
||||
name: "WhatsApp",
|
||||
category: "Sub-Channel",
|
||||
},
|
||||
{
|
||||
name: "Other",
|
||||
category: "Sub-Channel",
|
||||
},
|
||||
{
|
||||
name: "Default",
|
||||
category: "Queue",
|
||||
},
|
||||
{
|
||||
name: "General Enquires",
|
||||
category: "Queue",
|
||||
},
|
||||
{
|
||||
name: "Complaints",
|
||||
category: "Queue",
|
||||
},
|
||||
{
|
||||
name: "Case Closed",
|
||||
category: "Outcome",
|
||||
},
|
||||
{
|
||||
name: "Case Updated",
|
||||
category: "Outcome",
|
||||
},
|
||||
{
|
||||
name: "Completed",
|
||||
category: "Outcome",
|
||||
},
|
||||
{
|
||||
name: "Escalated to Manager",
|
||||
category: "Outcome",
|
||||
},
|
||||
{
|
||||
name: "No need for response",
|
||||
category: "Outcome",
|
||||
},
|
||||
],
|
||||
links: [
|
||||
{
|
||||
source: "Email",
|
||||
target: "Default",
|
||||
value: 342,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "Live Chat",
|
||||
value: 232,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "Facebook Messenger",
|
||||
value: 623,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "Twitter DM",
|
||||
value: 434,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "WhatsApp",
|
||||
value: 1243,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "Other",
|
||||
value: 150,
|
||||
},
|
||||
{
|
||||
source: "Live Chat",
|
||||
target: "Default",
|
||||
value: 132,
|
||||
},
|
||||
{
|
||||
source: "Live Chat",
|
||||
target: "Complaints",
|
||||
value: 90,
|
||||
},
|
||||
{
|
||||
source: "Live Chat",
|
||||
target: "General Enquires",
|
||||
value: 42,
|
||||
},
|
||||
{
|
||||
source: "WhatsApp",
|
||||
target: "Default",
|
||||
value: 343,
|
||||
},
|
||||
{
|
||||
source: "WhatsApp",
|
||||
target: "Complaints",
|
||||
value: 300,
|
||||
},
|
||||
{
|
||||
source: "WhatsApp",
|
||||
target: "General Enquires",
|
||||
value: 523,
|
||||
},
|
||||
{
|
||||
source: "Facebook Messenger",
|
||||
target: "Default",
|
||||
value: 143,
|
||||
},
|
||||
{
|
||||
source: "Facebook Messenger",
|
||||
target: "Complaints",
|
||||
value: 200,
|
||||
},
|
||||
{
|
||||
source: "Facebook Messenger",
|
||||
target: "General Enquires",
|
||||
value: 323,
|
||||
},
|
||||
{
|
||||
source: "Twitter DM",
|
||||
target: "Default",
|
||||
value: 143,
|
||||
},
|
||||
{
|
||||
source: "Twitter DM",
|
||||
target: "Complaints",
|
||||
value: 50,
|
||||
},
|
||||
{
|
||||
source: "Twitter DM",
|
||||
target: "General Enquires",
|
||||
value: 223,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "Case Closed",
|
||||
value: 421,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "Completed",
|
||||
value: 612,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "Escalated to Manager",
|
||||
value: 23,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "No need for response",
|
||||
value: 241,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "Case Closed",
|
||||
value: 21,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "Completed",
|
||||
value: 12,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "Escalated to Manager",
|
||||
value: 3,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "No need for response",
|
||||
value: 41,
|
||||
},
|
||||
{
|
||||
source: "Default",
|
||||
target: "Completed",
|
||||
value: 41,
|
||||
},
|
||||
{
|
||||
source: "Default",
|
||||
target: "Case Updated",
|
||||
value: 410,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "Case Updated",
|
||||
value: 50,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "Case Updated",
|
||||
value: 410,
|
||||
},
|
||||
],
|
||||
};
|
||||
res.send(data)
|
||||
});
|
||||
module.exports = router;
|
||||
@ -1,5 +1,5 @@
|
||||
const express = require("express");
|
||||
const router = express.Router();
|
||||
import { Router } from "express";
|
||||
const router = Router();
|
||||
|
||||
router.get("/", (req, res) => {
|
||||
const config = {
|
||||
@ -15,6 +15,6 @@ router.get("/", (req, res) => {
|
||||
udg: process.env.EO_API_UDG_URL,
|
||||
},
|
||||
};
|
||||
res.send(config)
|
||||
res.send(config);
|
||||
});
|
||||
module.exports = router;
|
||||
export default router;
|
||||
11
src/api/routes/index.js
Normal file
11
src/api/routes/index.js
Normal file
@ -0,0 +1,11 @@
|
||||
import { Router } from "express";
|
||||
import config from "./config.js";
|
||||
import interactionsFlows from "./interactions-flow.js";
|
||||
import udg from "./unified-data-gateway.js";
|
||||
const router = Router();
|
||||
|
||||
router.use("/config", config);
|
||||
router.use("/interactions-flow", interactionsFlows);
|
||||
router.use("/unified-data-gateway", udg);
|
||||
|
||||
export default router;
|
||||
157
src/api/routes/interactions-flow.js
Normal file
157
src/api/routes/interactions-flow.js
Normal file
@ -0,0 +1,157 @@
|
||||
import { Router } from "express";
|
||||
import sampleFlow from "../../utils/sampleFlow.js";
|
||||
import sampleUDG from "../../utils/sampleUDGresponse.js";
|
||||
import { logger } from "../../utils/index.js";
|
||||
const router = Router();
|
||||
|
||||
router.get("/", (req, res) => {
|
||||
const filter = req.query.filter;
|
||||
|
||||
// nodes
|
||||
var channels = [];
|
||||
var queues = [];
|
||||
var outcomes = [];
|
||||
|
||||
// links
|
||||
var channel_queue_links = {};
|
||||
var channel_outcome_links = {};
|
||||
var queue_outcome_links = {};
|
||||
|
||||
sampleUDG.data.findContactsCompletedBetween.edges.forEach((value) => {
|
||||
const hasChannel = value.node.interaction.__typename ? true : false;
|
||||
const hasQueue = value.node.queue ? true : false;
|
||||
const hasOutcome = value.node.outcome ? true : false;
|
||||
|
||||
// NODES
|
||||
if (
|
||||
hasChannel &&
|
||||
channels.indexOf(value.node.interaction.__typename) == -1
|
||||
) {
|
||||
channels.push(value.node.interaction.__typename);
|
||||
}
|
||||
|
||||
if (hasQueue) {
|
||||
const queue = JSON.stringify(value.node.queue);
|
||||
if (queues.indexOf(queue) == -1) {
|
||||
queues.push(queue);
|
||||
}
|
||||
|
||||
if (hasChannel) {
|
||||
const key =
|
||||
value.node.interaction.__typename + JSON.stringify(value.node.queue);
|
||||
|
||||
if (channel_queue_links[key]) {
|
||||
channel_queue_links[key].value++;
|
||||
} else {
|
||||
channel_queue_links[key] = {
|
||||
source: value.node.interaction.__typename,
|
||||
target: JSON.stringify(value.node.queue),
|
||||
value: 1,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hasOutcome) {
|
||||
value.node.outcome.edges.forEach((element) => {
|
||||
var outcome = element.node.text;
|
||||
|
||||
if (outcomes.indexOf(outcome) == -1) {
|
||||
outcomes.push(outcome);
|
||||
}
|
||||
|
||||
if (hasQueue) {
|
||||
var key = outcome+JSON.stringify(value.node.queue);
|
||||
|
||||
if (queue_outcome_links[key]) {
|
||||
queue_outcome_links[key].value++;
|
||||
} else {
|
||||
queue_outcome_links[key] = {
|
||||
source: JSON.stringify(value.node.queue),
|
||||
target: outcome,
|
||||
value: 1,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (hasChannel) {
|
||||
key = outcome+value.node.interaction.__typename;
|
||||
|
||||
if (channel_outcome_links[key]) {
|
||||
channel_outcome_links[key].value++;
|
||||
} else {
|
||||
channel_outcome_links[key] = {
|
||||
source: value.node.interaction.__typename,
|
||||
target: outcome,
|
||||
value: 1,
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
logger.debug(`channels: ${JSON.stringify(channels)}`);
|
||||
logger.debug(`queues: ${JSON.stringify(queues)}`);
|
||||
logger.debug(`channel_queue_links: ${JSON.stringify(channel_queue_links)}`);
|
||||
logger.debug(`outcomes: ${JSON.stringify(outcomes)}`);
|
||||
|
||||
if (req.query.useSampleData) {
|
||||
const data = sampleFlow(filter);
|
||||
res.send(data);
|
||||
return;
|
||||
}
|
||||
|
||||
var data = {
|
||||
nodes: [],
|
||||
links: [],
|
||||
};
|
||||
|
||||
if (filter.includes("Channel")) {
|
||||
channels.forEach((value) => {
|
||||
data.nodes.push({
|
||||
name: value,
|
||||
category: "Channel",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.includes("Queue")) {
|
||||
queues.forEach((value) => {
|
||||
data.nodes.push({
|
||||
name: value,
|
||||
category: "Queue",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.includes("Outcome")) {
|
||||
outcomes.forEach((value) => {
|
||||
data.nodes.push({
|
||||
name: value,
|
||||
category: "Outcome",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.includes("Channel") && filter.includes("Queue")) {
|
||||
Object.values(channel_queue_links).forEach((element) => {
|
||||
data.links.push(element);
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.includes("Queue") && filter.includes("Outcome")) {
|
||||
Object.values(queue_outcome_links).forEach((element) => {
|
||||
data.links.push(element);
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.includes("Channel") && filter.includes("Outcome") && !filter.includes("Queue")) {
|
||||
Object.values(channel_outcome_links).forEach((element) => {
|
||||
data.links.push(element);
|
||||
});
|
||||
}
|
||||
|
||||
res.send(data);
|
||||
});
|
||||
export default router;
|
||||
@ -1,8 +1,9 @@
|
||||
const express = require("express");
|
||||
const router = express.Router();
|
||||
const axios = require("axios");
|
||||
const url = require("url");
|
||||
const util = require("util");
|
||||
import { Router } from "express";
|
||||
import axios from "axios";
|
||||
import { URLSearchParams } from "url";
|
||||
import { inspect } from "util";
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get("/", (req, res) => {
|
||||
// token in session -> get user data and send it back to the vue app
|
||||
@ -11,7 +12,7 @@ router.get("/", (req, res) => {
|
||||
}
|
||||
// no token -> send nothing
|
||||
else {
|
||||
const params = new url.URLSearchParams({
|
||||
const params = new URLSearchParams({
|
||||
grant_type: "password",
|
||||
username: process.env.EO_API_USERNAME,
|
||||
password: process.env.EO_API_PASSWORD,
|
||||
@ -212,7 +213,7 @@ router.get("/", (req, res) => {
|
||||
|
||||
if (result.data) {
|
||||
console.log(
|
||||
util.inspect(summary, {
|
||||
inspect(summary, {
|
||||
showHidden: false,
|
||||
depth: null,
|
||||
colors: true,
|
||||
@ -235,7 +236,6 @@ router.get("/", (req, res) => {
|
||||
});
|
||||
}
|
||||
});
|
||||
module.exports = router;
|
||||
function sendError(err, res) {
|
||||
console.error(err);
|
||||
let errStatus = 500;
|
||||
@ -250,3 +250,4 @@ function sendError(err, res) {
|
||||
],
|
||||
});
|
||||
}
|
||||
export default router;
|
||||
17
src/app.js
Normal file
17
src/app.js
Normal file
@ -0,0 +1,17 @@
|
||||
import express from "express";
|
||||
import config from "./config/index.js";
|
||||
import loader from "./loaders/index.js";
|
||||
|
||||
const app = express();
|
||||
|
||||
loader(app);
|
||||
|
||||
app.listen(config.port, (err) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
return process.exit(1);
|
||||
}
|
||||
console.log(`Server is running on ${config.port}`);
|
||||
});
|
||||
|
||||
export default app;
|
||||
38
src/config/index.js
Normal file
38
src/config/index.js
Normal file
@ -0,0 +1,38 @@
|
||||
import dotenv from 'dotenv';
|
||||
|
||||
// Set the NODE_ENV to 'development' by default
|
||||
process.env.NODE_ENV = process.env.NODE_ENV || "development";
|
||||
|
||||
const envFound = dotenv.config();
|
||||
if (envFound.error) {
|
||||
// This error should crash whole process
|
||||
|
||||
throw new Error("⚠️ Couldn't find .env file ⚠️");
|
||||
}
|
||||
|
||||
export default {
|
||||
/**
|
||||
* Your favorite port
|
||||
*/
|
||||
port: parseInt(process.env.PORT, 10),
|
||||
|
||||
/**
|
||||
* Your secret sauce
|
||||
*/
|
||||
jwtSecret: process.env.JWT_SECRET,
|
||||
jwtAlgorithm: process.env.JWT_ALGO,
|
||||
|
||||
/**
|
||||
* Used by winston logger
|
||||
*/
|
||||
logs: {
|
||||
level: process.env.LOG_LEVEL || "silly",
|
||||
},
|
||||
|
||||
/**
|
||||
* API configs
|
||||
*/
|
||||
api: {
|
||||
prefix: "/api",
|
||||
},
|
||||
};
|
||||
99
src/loaders/express.js
Normal file
99
src/loaders/express.js
Normal file
@ -0,0 +1,99 @@
|
||||
import express from "express";
|
||||
import cors from "cors";
|
||||
import compression from "compression";
|
||||
import morgan from "morgan";
|
||||
import helmet from "helmet";
|
||||
import config from "./../config/index.js";
|
||||
import routes from "./../api/routes/index.js";
|
||||
import { logger } from "../utils/index.js";
|
||||
// import { rateLimiter } from '../api/middlewares/index.js';
|
||||
import bodyParser from "body-parser";
|
||||
import session from "express-session";
|
||||
|
||||
export default (app) => {
|
||||
logger.info("Loading Express ...");
|
||||
process.on("uncaughtException", async (error) => {
|
||||
logger.error(error);
|
||||
});
|
||||
|
||||
process.on("unhandledRejection", async (ex) => {
|
||||
logger.error(ex);
|
||||
});
|
||||
|
||||
if (!config.jwtSecret) {
|
||||
logger.crit("Jwtprivatekey is not defined");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
app.enable("trust proxy");
|
||||
// app.use(cors());
|
||||
|
||||
app.use(cors({ origin: true, credentials: true }));
|
||||
app.use(bodyParser.urlencoded({ extended: false }));
|
||||
app.use(bodyParser.json());
|
||||
app.use(morgan("dev"));
|
||||
app.use(helmet());
|
||||
app.use(compression());
|
||||
app.use(express.static("public"));
|
||||
app.disable("x-powered-by");
|
||||
app.disable("etag");
|
||||
app.use(
|
||||
session({
|
||||
secret: "1234567890", // don't use this secret in prod :)
|
||||
resave: false,
|
||||
saveUninitialized: false,
|
||||
cookie: {
|
||||
secure: "auto",
|
||||
httpOnly: true,
|
||||
maxAge: 3600000,
|
||||
},
|
||||
})
|
||||
);
|
||||
|
||||
// app.use(rateLimiter);
|
||||
logger.info(`Mounting routes on ${config.api.prefix}`);
|
||||
app.use(config.api.prefix, routes);
|
||||
|
||||
app.get("/", (_req, res) => {
|
||||
return res
|
||||
.status(200)
|
||||
.json({
|
||||
resultMessage: {
|
||||
en: "Project is successfully working...",
|
||||
},
|
||||
resultCode: "00004",
|
||||
})
|
||||
.end();
|
||||
});
|
||||
|
||||
app.use((req, res, next) => {
|
||||
// res.header("Access-Control-Allow-Origin", "*");
|
||||
// res.header(
|
||||
// "Access-Control-Allow-Headers",
|
||||
// "Origin, X-Requested-With, Content-Type, Accept, Authorization"
|
||||
// );
|
||||
// res.header("Content-Security-Policy-Report-Only", "default-src: https:");
|
||||
// if (req.method === "OPTIONS") {
|
||||
// res.header("Access-Control-Allow-Methods", "PUT POST PATCH DELETE GET");
|
||||
// return res.status(200).json({});
|
||||
// }
|
||||
next();
|
||||
});
|
||||
|
||||
app.use((_req, _res, next) => {
|
||||
const error = new Error("Endpoint could not find!");
|
||||
error.status = 404;
|
||||
next(error);
|
||||
});
|
||||
|
||||
app.use((error, req, res) => {
|
||||
res.status(error.status || 500);
|
||||
logger.error(error.message);
|
||||
return res.json({
|
||||
resultMessage: {
|
||||
en: error.message,
|
||||
tr: error.message,
|
||||
},
|
||||
});
|
||||
});
|
||||
};
|
||||
5
src/loaders/index.js
Normal file
5
src/loaders/index.js
Normal file
@ -0,0 +1,5 @@
|
||||
import expressLoader from "./express.js";
|
||||
|
||||
export default async (app) => {
|
||||
expressLoader(app);
|
||||
};
|
||||
1
src/utils/index.js
Normal file
1
src/utils/index.js
Normal file
@ -0,0 +1 @@
|
||||
export { default as logger } from "./logger.js";
|
||||
32
src/utils/logger.js
Normal file
32
src/utils/logger.js
Normal file
@ -0,0 +1,32 @@
|
||||
import winston from "winston";
|
||||
import config from "../config/index.js";
|
||||
|
||||
const transports = [];
|
||||
if (process.env.NODE_ENV !== "development") {
|
||||
transports.push(new winston.transports.Console());
|
||||
} else {
|
||||
transports.push(
|
||||
new winston.transports.Console({
|
||||
format: winston.format.combine(
|
||||
winston.format.cli(),
|
||||
winston.format.splat()
|
||||
),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
const LoggerInstance = winston.createLogger({
|
||||
level: config.logs.level,
|
||||
levels: winston.config.npm.levels,
|
||||
format: winston.format.combine(
|
||||
winston.format.timestamp({
|
||||
format: "YYYY-MM-DD HH:mm:ss",
|
||||
}),
|
||||
winston.format.errors({ stack: true }),
|
||||
winston.format.splat(),
|
||||
winston.format.json()
|
||||
),
|
||||
transports,
|
||||
});
|
||||
|
||||
export default LoggerInstance;
|
||||
207
src/utils/sampleFlow.js
Normal file
207
src/utils/sampleFlow.js
Normal file
@ -0,0 +1,207 @@
|
||||
import { logger } from "../utils/index.js";
|
||||
|
||||
export default function generate(filter) {
|
||||
filter = filter ? filter : "Channel, Sub-Channel, Queue, Outcome";
|
||||
logger.info(`Generating sample data for ${filter}`);
|
||||
|
||||
var data = {
|
||||
nodes: [],
|
||||
links: [],
|
||||
};
|
||||
|
||||
const channels = ["Email", "Messaging", "Legacy Live Chat"];
|
||||
const subChannels = ["Live Chat", "Facebook Messenger", "Twitter DM", "WhatsApp","Other"];
|
||||
const queues = ["General Enquiries", "Complaints", "Default"];
|
||||
const outcomes = ["No need for response", "Case Updated", "Escalated to Manager"];
|
||||
|
||||
if (filter.includes("Channel")) {
|
||||
channels.forEach((value) => {
|
||||
data.nodes.push({
|
||||
name: value,
|
||||
category: "Channel",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.includes("Sub-Channel")) {
|
||||
subChannels.forEach((value) => {
|
||||
data.nodes.push({
|
||||
name: value,
|
||||
category: "Sub-Channel",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.includes("Queue")) {
|
||||
queues.forEach((value) => {
|
||||
data.nodes.push({
|
||||
name: value,
|
||||
category: "Queue",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.includes("Outcome")) {
|
||||
outcomes.forEach((value) => {
|
||||
data.nodes.push({
|
||||
name: value,
|
||||
category: "Outcome",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
data.links.push(
|
||||
{
|
||||
source: "Email",
|
||||
target: "Default",
|
||||
value: 342,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "Live Chat",
|
||||
value: 232,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "Facebook Messenger",
|
||||
value: 623,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "Twitter DM",
|
||||
value: 434,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "WhatsApp",
|
||||
value: 1243,
|
||||
},
|
||||
{
|
||||
source: "Messaging",
|
||||
target: "Other",
|
||||
value: 150,
|
||||
},
|
||||
{
|
||||
source: "Live Chat",
|
||||
target: "Default",
|
||||
value: 132,
|
||||
},
|
||||
{
|
||||
source: "Live Chat",
|
||||
target: "Complaints",
|
||||
value: 90,
|
||||
},
|
||||
{
|
||||
source: "Live Chat",
|
||||
target: "General Enquires",
|
||||
value: 42,
|
||||
},
|
||||
{
|
||||
source: "WhatsApp",
|
||||
target: "Default",
|
||||
value: 343,
|
||||
},
|
||||
{
|
||||
source: "WhatsApp",
|
||||
target: "Complaints",
|
||||
value: 300,
|
||||
},
|
||||
{
|
||||
source: "WhatsApp",
|
||||
target: "General Enquires",
|
||||
value: 523,
|
||||
},
|
||||
{
|
||||
source: "Facebook Messenger",
|
||||
target: "Default",
|
||||
value: 143,
|
||||
},
|
||||
{
|
||||
source: "Facebook Messenger",
|
||||
target: "Complaints",
|
||||
value: 200,
|
||||
},
|
||||
{
|
||||
source: "Facebook Messenger",
|
||||
target: "General Enquires",
|
||||
value: 323,
|
||||
},
|
||||
{
|
||||
source: "Twitter DM",
|
||||
target: "Default",
|
||||
value: 143,
|
||||
},
|
||||
{
|
||||
source: "Twitter DM",
|
||||
target: "Complaints",
|
||||
value: 50,
|
||||
},
|
||||
{
|
||||
source: "Twitter DM",
|
||||
target: "General Enquires",
|
||||
value: 223,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "Case Closed",
|
||||
value: 421,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "Completed",
|
||||
value: 612,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "Escalated to Manager",
|
||||
value: 23,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "No need for response",
|
||||
value: 241,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "Case Closed",
|
||||
value: 21,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "Completed",
|
||||
value: 12,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "Escalated to Manager",
|
||||
value: 3,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "No need for response",
|
||||
value: 41,
|
||||
},
|
||||
{
|
||||
source: "Default",
|
||||
target: "Completed",
|
||||
value: 41,
|
||||
},
|
||||
{
|
||||
source: "Default",
|
||||
target: "Case Updated",
|
||||
value: 410,
|
||||
},
|
||||
{
|
||||
source: "General Enquires",
|
||||
target: "Case Updated",
|
||||
value: 50,
|
||||
},
|
||||
{
|
||||
source: "Complaints",
|
||||
target: "Case Updated",
|
||||
value: 410,
|
||||
}
|
||||
);
|
||||
|
||||
return data;
|
||||
}
|
||||
21746
src/utils/sampleUDGresponse.js
Normal file
21746
src/utils/sampleUDGresponse.js
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user