diff --git a/packages/core/src/internal/bolt-agent/browser/bolt-agent.ts b/packages/core/src/internal/bolt-agent/browser/bolt-agent.ts index 69755f85f..ae29b1048 100644 --- a/packages/core/src/internal/bolt-agent/browser/bolt-agent.ts +++ b/packages/core/src/internal/bolt-agent/browser/bolt-agent.ts @@ -21,7 +21,7 @@ import { BoltAgent } from "../../../types"; interface SystemInfo { - appVersion: string + userAgent?: string } /** @@ -34,18 +34,23 @@ interface SystemInfo { export function fromVersion ( version: string, getSystemInfo: () => SystemInfo = () => ({ - // @ts-ignore: browser code so must be skipped by ts - get appVersion(): window.navigator.appVersion + get userAgent() { + // @ts-ignore: browser code so must be skipped by ts + return window.navigator.userAgent + } }) ): BoltAgent { const systemInfo = getSystemInfo() - //APP_VERSION looks like 5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 - const OS = systemInfo.appVersion.split("(")[1].split(")")[0]; + //USER_AGENT looks like 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' + + const platform = systemInfo.userAgent != null ? systemInfo.userAgent.split("(")[1].split(")")[0] : undefined + const languageDetails = systemInfo.userAgent || undefined return { product: `neo4j-javascript/${version}`, - platform: OS + platform, + languageDetails } } /* eslint-enable */ diff --git a/packages/core/test/internal/bolt-agent/browser/bolt-agent.test.ts b/packages/core/test/internal/bolt-agent/browser/bolt-agent.test.ts index e78020574..4f882ae75 100644 --- a/packages/core/test/internal/bolt-agent/browser/bolt-agent.test.ts +++ b/packages/core/test/internal/bolt-agent/browser/bolt-agent.test.ts @@ -22,9 +22,10 @@ describe('#unit boltAgent', () => { // This test is very fragile but the exact look of this string should not change without PM approval it('should return the correct bolt agent for specified version', () => { const version = '5.3' + const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' const getSystemInfo = (): any => { return { - appVersion: '5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36' + userAgent } } @@ -32,7 +33,37 @@ describe('#unit boltAgent', () => { expect(boltAgent).toEqual({ product: 'neo4j-javascript/5.3', - platform: 'Macintosh; Intel Mac OS X 10_15_7' + platform: 'Macintosh; Intel Mac OS X 10_15_7', + languageDetails: userAgent + }) + }) + + it('should handle null userAgent', () => { + const version = '5.3' + const getSystemInfo = (): any => { + return { + userAgent: null + } + } + + const boltAgent = fromVersion(version, getSystemInfo) + + expect(boltAgent).toEqual({ + product: 'neo4j-javascript/5.3' + }) + }) + + it('should handle undefined userAgent', () => { + const version = '5.3' + const getSystemInfo = (): any => { + return { + } + } + + const boltAgent = fromVersion(version, getSystemInfo) + + expect(boltAgent).toEqual({ + product: 'neo4j-javascript/5.3' }) }) }) diff --git a/packages/neo4j-driver-deno/lib/core/internal/bolt-agent/browser/bolt-agent.ts b/packages/neo4j-driver-deno/lib/core/internal/bolt-agent/browser/bolt-agent.ts index 69755f85f..ae29b1048 100644 --- a/packages/neo4j-driver-deno/lib/core/internal/bolt-agent/browser/bolt-agent.ts +++ b/packages/neo4j-driver-deno/lib/core/internal/bolt-agent/browser/bolt-agent.ts @@ -21,7 +21,7 @@ import { BoltAgent } from "../../../types"; interface SystemInfo { - appVersion: string + userAgent?: string } /** @@ -34,18 +34,23 @@ interface SystemInfo { export function fromVersion ( version: string, getSystemInfo: () => SystemInfo = () => ({ - // @ts-ignore: browser code so must be skipped by ts - get appVersion(): window.navigator.appVersion + get userAgent() { + // @ts-ignore: browser code so must be skipped by ts + return window.navigator.userAgent + } }) ): BoltAgent { const systemInfo = getSystemInfo() - //APP_VERSION looks like 5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 - const OS = systemInfo.appVersion.split("(")[1].split(")")[0]; + //USER_AGENT looks like 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' + + const platform = systemInfo.userAgent != null ? systemInfo.userAgent.split("(")[1].split(")")[0] : undefined + const languageDetails = systemInfo.userAgent || undefined return { product: `neo4j-javascript/${version}`, - platform: OS + platform, + languageDetails } } /* eslint-enable */