Skip to content

Commit dd678cc

Browse files
zhu-xiaoweixiaoweii
andauthored
feat: support latest referrer (#9)
Co-authored-by: xiaoweii <xiaoweii@amazom.com>
1 parent deed372 commit dd678cc

File tree

5 files changed

+34
-0
lines changed

5 files changed

+34
-0
lines changed

src/browser/BrowserInfo.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { Logger } from '@aws-amplify/core';
2+
13
/**
24
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
35
*
@@ -10,6 +12,7 @@
1012
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
1113
* and limitations under the License.
1214
*/
15+
const logger = new Logger('BrowserInfo');
1316

1417
export class BrowserInfo {
1518
locale: string;
@@ -19,6 +22,8 @@ export class BrowserInfo {
1922
userAgent: string;
2023
zoneOffset: number;
2124
hostName: string;
25+
latestReferrer: string;
26+
latestReferrerHost: string;
2227

2328
constructor() {
2429
if (!BrowserInfo.isBrowser()) return;
@@ -29,6 +34,15 @@ export class BrowserInfo {
2934
this.userAgent = userAgent;
3035
this.zoneOffset = -new Date().getTimezoneOffset() * 60000;
3136
this.hostName = window.location.hostname;
37+
this.latestReferrer = window.document.referrer;
38+
if (this.latestReferrer && this.latestReferrer !== '') {
39+
try {
40+
const url = new URL(this.latestReferrer);
41+
this.latestReferrerHost = url.host;
42+
} catch (error) {
43+
logger.warn('parse latest referrer domain failed: ' + error);
44+
}
45+
}
3246
}
3347

3448
initLocalInfo(locale: string) {

src/provider/AnalyticsEventBuilder.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ export class AnalyticsEventBuilder {
5050
BrowserInfo.getCurrentPageTitle();
5151
attributes[Event.ReservedAttribute.PAGE_URL] =
5252
BrowserInfo.getCurrentPageUrl();
53+
attributes[Event.ReservedAttribute.LATEST_REFERRER] =
54+
browserInfo.latestReferrer;
55+
attributes[Event.ReservedAttribute.LATEST_REFERRER_HOST] =
56+
browserInfo.latestReferrerHost;
5357

5458
const items = this.getEventItemsWithCheck(event.items, attributes);
5559

src/provider/Event.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ export class Event {
5151
PAGE_TITLE: '_page_title',
5252
PAGE_REFERRER: '_page_referrer',
5353
PAGE_REFERRER_TITLE: '_page_referrer_title',
54+
LATEST_REFERRER: '_latest_referrer',
55+
LATEST_REFERRER_HOST: '_latest_referrer_host',
5456
ENTRANCES: '_entrances',
5557
SESSION_ID: '_session_id',
5658
SESSION_DURATION: '_session_duration',

test/browser/BrowserInfo.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,20 @@ import { BrowserInfo } from '../../src/browser';
1414

1515
describe('BrowserInfo test', () => {
1616
test('test create BrowserInfo', () => {
17+
const referrer = 'https://example.com/collect';
18+
Object.defineProperty(window.document, 'referrer', {
19+
writable: true,
20+
value: referrer,
21+
});
1722
const browserInfo = new BrowserInfo();
1823
expect(browserInfo.userAgent.length > 0).toBeTruthy();
1924
expect(browserInfo.hostName.length > 0).toBeTruthy();
2025
expect(browserInfo.locale.length > 0).toBeTruthy();
2126
expect(browserInfo.system_language.length > 0).toBeTruthy();
2227
expect(browserInfo.zoneOffset).not.toBeUndefined();
2328
expect(browserInfo.make.length > 0).toBeTruthy();
29+
expect(browserInfo.latestReferrer).toBe(referrer);
30+
expect(browserInfo.latestReferrerHost).toBe('example.com');
2431
});
2532

2633
test('test init locale', () => {

test/provider/AnalyticsEventBuilder.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ import { ClickstreamAttribute, Item } from '../../src/types';
2323

2424
describe('AnalyticsEventBuilder test', () => {
2525
test('test create event with common attributes', async () => {
26+
const referrer = 'https://example1.com/collect';
27+
Object.defineProperty(window.document, 'referrer', {
28+
writable: true,
29+
value: referrer,
30+
});
2631
const context = new ClickstreamContext(new BrowserInfo(), {
2732
appId: 'testApp',
2833
endpoint: 'https://example.com/collect',
@@ -56,6 +61,8 @@ describe('AnalyticsEventBuilder test', () => {
5661
expect(Event.ReservedAttribute.SESSION_DURATION in event.attributes);
5762
expect(Event.ReservedAttribute.SESSION_NUMBER in event.attributes);
5863
expect(Event.ReservedAttribute.SESSION_START_TIMESTAMP in event.attributes);
64+
expect(Event.ReservedAttribute.LATEST_REFERRER in event.attributes);
65+
expect(Event.ReservedAttribute.LATEST_REFERRER_HOST in event.attributes);
5966
});
6067

6168
test('test check event attribute reached max attribute number limit', () => {

0 commit comments

Comments
 (0)