From 555ec79b63caf6439914496f436a21c7d9b707cc Mon Sep 17 00:00:00 2001 From: Paul Nordlund Date: Fri, 21 Jun 2024 20:43:46 +0200 Subject: [PATCH 1/2] add auth, datadog skeleton --- package-lock.json | 79 ++++++++++++++++++++++++++++++++++++ package.json | 3 ++ src/components/Tabs.jsx | 38 +++++++++++++++-- src/services/auth.service.js | 18 ++++++++ 4 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 src/services/auth.service.js diff --git a/package-lock.json b/package-lock.json index 44d8559..a335fbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,12 @@ "name": "omicnavigatorwebapp", "version": "1.9.4", "dependencies": { + "@datadog/browser-rum": "^5.21.0", "@observablehq/stdlib": "^5.6.1", "array-move": "^2.2.2", "axios": "^0.21.4", "can-ndjson-stream": "^1.0.2", + "crypto": "^1.0.1", "d3": "^5.16.0", "d3-array": "^2.12.1", "d3-hexbin": "^0.2.2", @@ -22,6 +24,7 @@ "jquery": "^3.6.4", "json-to-txt": "^2.1.1", "jspdf": "^2.5.1", + "jwt-decode": "^4.0.0", "lodash-es": "^4.17.15", "npm-check-updates": "^16.10.9", "npm-run-all": "^4.1.5", @@ -2238,6 +2241,36 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, + "node_modules/@datadog/browser-core": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@datadog/browser-core/-/browser-core-5.21.0.tgz", + "integrity": "sha512-F0lZCwHwGCryhyRAg9x9Aeq8FsYMxA41vwyBeyFHbh+er5UrQl/LuKdrRMSxz3kpaBdHppLP920voTSvooHiug==" + }, + "node_modules/@datadog/browser-rum": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@datadog/browser-rum/-/browser-rum-5.21.0.tgz", + "integrity": "sha512-wSyaMgSCKOMtbqLiyiODTfFtq7wp79uIokhLkxwF34zq+y7Y7kqh5ZvR8tLXDlddJaKFKoNlUse5E817xd0ZjA==", + "dependencies": { + "@datadog/browser-core": "5.21.0", + "@datadog/browser-rum-core": "5.21.0" + }, + "peerDependencies": { + "@datadog/browser-logs": "5.21.0" + }, + "peerDependenciesMeta": { + "@datadog/browser-logs": { + "optional": true + } + } + }, + "node_modules/@datadog/browser-rum-core": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@datadog/browser-rum-core/-/browser-rum-core-5.21.0.tgz", + "integrity": "sha512-jHDnRX+SwXJrAFqgEJ+Eg9E6zC9R3RTYtSIIwNI+vWbuzZRC/Wb8BJmeG2focn0ooCCfdzMgpGZ0F37+0Qn0Zg==", + "dependencies": { + "@datadog/browser-core": "5.21.0" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -8086,6 +8119,12 @@ "node": ">= 8" } }, + "node_modules/crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." + }, "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -16445,6 +16484,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "engines": { + "node": ">=18" + } + }, "node_modules/kdbush": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", @@ -32464,6 +32511,28 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, + "@datadog/browser-core": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@datadog/browser-core/-/browser-core-5.21.0.tgz", + "integrity": "sha512-F0lZCwHwGCryhyRAg9x9Aeq8FsYMxA41vwyBeyFHbh+er5UrQl/LuKdrRMSxz3kpaBdHppLP920voTSvooHiug==" + }, + "@datadog/browser-rum": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@datadog/browser-rum/-/browser-rum-5.21.0.tgz", + "integrity": "sha512-wSyaMgSCKOMtbqLiyiODTfFtq7wp79uIokhLkxwF34zq+y7Y7kqh5ZvR8tLXDlddJaKFKoNlUse5E817xd0ZjA==", + "requires": { + "@datadog/browser-core": "5.21.0", + "@datadog/browser-rum-core": "5.21.0" + } + }, + "@datadog/browser-rum-core": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@datadog/browser-rum-core/-/browser-rum-core-5.21.0.tgz", + "integrity": "sha512-jHDnRX+SwXJrAFqgEJ+Eg9E6zC9R3RTYtSIIwNI+vWbuzZRC/Wb8BJmeG2focn0ooCCfdzMgpGZ0F37+0Qn0Zg==", + "requires": { + "@datadog/browser-core": "5.21.0" + } + }, "@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -37045,6 +37114,11 @@ "which": "^2.0.1" } }, + "crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -43602,6 +43676,11 @@ } } }, + "jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==" + }, "kdbush": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", diff --git a/package.json b/package.json index c6d102f..8dd06fd 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,12 @@ "version": "1.9.4", "private": true, "dependencies": { + "@datadog/browser-rum": "^5.21.0", "@observablehq/stdlib": "^5.6.1", "array-move": "^2.2.2", "axios": "^0.21.4", "can-ndjson-stream": "^1.0.2", + "crypto": "^1.0.1", "d3": "^5.16.0", "d3-array": "^2.12.1", "d3-hexbin": "^0.2.2", @@ -17,6 +19,7 @@ "jquery": "^3.6.4", "json-to-txt": "^2.1.1", "jspdf": "^2.5.1", + "jwt-decode": "^4.0.0", "lodash-es": "^4.17.15", "npm-check-updates": "^16.10.9", "npm-run-all": "^4.1.5", diff --git a/src/components/Tabs.jsx b/src/components/Tabs.jsx index fa80b21..fe1c14e 100644 --- a/src/components/Tabs.jsx +++ b/src/components/Tabs.jsx @@ -10,11 +10,14 @@ import { Header, } from 'semantic-ui-react'; import { omicNavigatorService } from '../services/omicNavigator.service'; +import { authService } from '../services/auth.service'; import Differential from './Differential/Differential'; import omicNavigatorIcon from '../resources/icon.png'; import Enrichment from './Enrichment/Enrichment'; import { updateUrl } from './Shared/UrlControl'; - +import { datadogRum } from '@datadog/browser-rum'; +import { jwtDecode } from 'jwt-decode'; +import { createHash } from 'crypto'; class Tabs extends Component { constructor(props) { super(props); @@ -74,6 +77,9 @@ class Tabs extends Component { } componentDidMount() { + if (process.env.NODE_ENV === 'development') { + this.initDatadog(); + } updateUrl( this.props, this.state, @@ -84,12 +90,38 @@ class Tabs extends Component { null, ); this.getStudies(); - window.addEventListener('resize', this.handleResize); + window.addEventListener('resizeDifferential', this.handleResize); } componentWillUnmount() { // Remove the event listener when the component is unmounted - window.removeEventListener('resize', this.handleResize); + window.removeEventListener('resizeDifferential', this.handleResize); + } + + async initDatadog() { + try { + let authToken = await authService.getAuthToken(); + let decodedToken = jwtDecode(authToken.token); + let userUpi = decodedToken?.upi || null; + let hashedUpi = createHash('md5').update(userUpi).digest('hex'); + datadogRum.setUser({ id: hashedUpi }); + datadogRum.init({ + applicationId: '3f3af9b9-aeee-4b6c-98bd-0903257b2d8b', + clientToken: 'pub2a6525f23ad2b41896b5e10578fdf044', + proxy: 'https://api-ds.ir-gateway.abbvienet.com/datadog-intake-proxy', + site: 'datadoghq.com', + service: 'omicnavigator-ui', + env: process.env.NODE_ENV, + sessionSampleRate: 100, + sessionReplaySampleRate: 20, + trackUserInteractions: true, + trackResources: true, + trackLongTasks: true, + defaultPrivacyLevel: 'allow', + }); + } catch (error) { + console.log(error); + } } handleResize() { diff --git a/src/services/auth.service.js b/src/services/auth.service.js new file mode 100644 index 0000000..e867a34 --- /dev/null +++ b/src/services/auth.service.js @@ -0,0 +1,18 @@ +import axios from 'axios'; + +class AuthService { + async getAuthToken() { + try { + const { data } = await axios({ + method: 'get', + url: `https://gprd-auth.abbvienet.com:8110/auth.service/auth/token`, + timeout: 10000, + withCredentials: true, + }); + return data; + } catch (error) { + return error; + } + } +} +export const authService = new AuthService(); From e6ee1a9986d0c9c5d075f28fc633e6088e6b103a Mon Sep 17 00:00:00 2001 From: Paul Nordlund Date: Fri, 21 Jun 2024 20:47:35 +0200 Subject: [PATCH 2/2] dev only --- src/components/Tabs.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Tabs.jsx b/src/components/Tabs.jsx index fe1c14e..3cbfe0b 100644 --- a/src/components/Tabs.jsx +++ b/src/components/Tabs.jsx @@ -111,7 +111,7 @@ class Tabs extends Component { proxy: 'https://api-ds.ir-gateway.abbvienet.com/datadog-intake-proxy', site: 'datadoghq.com', service: 'omicnavigator-ui', - env: process.env.NODE_ENV, + env: 'dev', sessionSampleRate: 100, sessionReplaySampleRate: 20, trackUserInteractions: true,