diff --git a/packages/sui-js/src/ua-parser/index.js b/packages/sui-js/src/ua-parser/index.js index af9308f62..df5cb5cee 100644 --- a/packages/sui-js/src/ua-parser/index.js +++ b/packages/sui-js/src/ua-parser/index.js @@ -6,7 +6,8 @@ export const LEGITIMATE_CRAWLER_USER_AGENTS = [ 'bingbot', 'linkedinbot', 'mediapartners-google', - 'debugbear' + 'debugbear', + 'spider' ] export const stats = userAgent => { diff --git a/packages/sui-react-web-vitals/src/index.js b/packages/sui-react-web-vitals/src/index.js index 9ba2d2d14..d137e816b 100644 --- a/packages/sui-react-web-vitals/src/index.js +++ b/packages/sui-react-web-vitals/src/index.js @@ -197,6 +197,14 @@ export default function WebVitalsReporter({ } ] : []), + ...(typeof browser?.isBot === 'boolean' + ? [ + { + key: 'is_bot', + value: browser.isBot + } + ] + : []), { key: 'browserEngine', value: browserEngine diff --git a/packages/sui-react-web-vitals/test/browser/indexSpec.js b/packages/sui-react-web-vitals/test/browser/indexSpec.js index c939c949c..580ad5def 100644 --- a/packages/sui-react-web-vitals/test/browser/indexSpec.js +++ b/packages/sui-react-web-vitals/test/browser/indexSpec.js @@ -250,6 +250,79 @@ describe('WebVitalsReporter', () => { }) }) + it('should not include isBot tag when browser.isBot is not set', async () => { + const logger = {distribution: sinon.spy()} + const reporter = { + onTTFB: fn => { + fn({name: 'TTFB', value: 10, entries: [], attribution: {}}) + } + } + render(, {logger}) + await waitFor(() => [ + expect( + logger.distribution.calledWith({ + name: 'cwv', + amount: 10, + tags: [ + {key: 'name', value: 'ttfb'}, + {key: 'pathname', value: '/'}, + {key: 'browserEngine', value: 'Other'} + ] + }) + ).to.be.true + ]) + }) + + it('should include isBot: true tag when browser.isBot is true', async () => { + const logger = {distribution: sinon.spy()} + const reporter = { + onTTFB: fn => { + fn({name: 'TTFB', value: 10, entries: [], attribution: {}}) + } + } + const browser = {isBot: true} + render(, {logger, browser}) + await waitFor(() => [ + expect( + logger.distribution.calledWith({ + name: 'cwv', + amount: 10, + tags: [ + {key: 'name', value: 'ttfb'}, + {key: 'pathname', value: '/'}, + {key: 'is_bot', value: true}, + {key: 'browserEngine', value: 'Other'} + ] + }) + ).to.be.true + ]) + }) + + it('should include isBot: false tag when browser.isBot is false', async () => { + const logger = {distribution: sinon.spy()} + const reporter = { + onTTFB: fn => { + fn({name: 'TTFB', value: 10, entries: [], attribution: {}}) + } + } + const browser = {isBot: false} + render(, {logger, browser}) + await waitFor(() => [ + expect( + logger.distribution.calledWith({ + name: 'cwv', + amount: 10, + tags: [ + {key: 'name', value: 'ttfb'}, + {key: 'pathname', value: '/'}, + {key: 'is_bot', value: false}, + {key: 'browserEngine', value: 'Other'} + ] + }) + ).to.be.true + ]) + }) + it('should track TTFB using logger distribution with browser in context', async () => { const logger = { distribution: sinon.spy()