@@ -52,41 +52,14 @@ export class ReferrerParser {
52
52
* Parse a referrer URL to get source, medium and hostname
53
53
*
54
54
* @param referrerUrlStr - URL of the referrer
55
- * @returns Parsed referrer data with source, medium and URL
55
+ * @param referrerSource - Source of the referrer
56
+ * @param referrerMedium - Medium of the referrer
57
+ * @returns Parsed referrer data with source, medium and URL. Internal referrers return null values.
56
58
*/
57
- parse ( referrerUrlStr : string ) : ReferrerData {
58
- if ( ! referrerUrlStr ) {
59
- return {
60
- referrerSource : 'Direct' ,
61
- referrerMedium : null ,
62
- referrerUrl : null
63
- } ;
64
- }
65
-
59
+ parse ( referrerUrlStr : string , referrerSource ?: string , referrerMedium ?: string ) : ReferrerData {
66
60
const referrerUrl = this . getUrlFromStr ( referrerUrlStr ) ;
67
- if ( ! referrerUrl ) {
68
- return {
69
- referrerSource : 'Direct' ,
70
- referrerMedium : null ,
71
- referrerUrl : null
72
- } ;
73
- }
74
61
75
- // Skip Stripe checkout URLs
76
- if ( referrerUrl . hostname === 'checkout.stripe.com' ) {
77
- return {
78
- referrerSource : 'Direct' ,
79
- referrerMedium : null ,
80
- referrerUrl : null
81
- } ;
82
- }
83
-
84
- // Check for source/medium in query parameters
85
- const urlParams = new URLSearchParams ( referrerUrl . search ) ;
86
- const referrerSource = urlParams . get ( 'utm_source' ) || urlParams . get ( 'source' ) || null ;
87
- const referrerMedium = urlParams . get ( 'utm_medium' ) || urlParams . get ( 'medium' ) || null ;
88
-
89
- // If referrer is Ghost Explore
62
+ // Ghost-specific cases
90
63
if ( this . isGhostExploreRef ( { referrerUrl, referrerSource} ) ) {
91
64
return {
92
65
referrerSource : 'Ghost Explore' ,
@@ -100,14 +73,14 @@ export class ReferrerParser {
100
73
return {
101
74
referrerSource : 'Ghost.org' ,
102
75
referrerMedium : 'Ghost Network' ,
103
- referrerUrl : referrerUrl ?. hostname
76
+ referrerUrl : referrerUrl ?. hostname ?? null
104
77
} ;
105
78
}
106
79
107
80
// Check for Ghost Newsletter
108
- if ( this . isGhostNewsletter ( { referrerSource} ) ) {
81
+ if ( referrerSource && this . isGhostNewsletter ( { referrerSource} ) ) {
109
82
return {
110
- referrerSource : referrerSource ! . replace ( / - n e w s l e t t e r $ / , ' newsletter ' ) ,
83
+ referrerSource : referrerSource . replace ( / - / g , ' ' ) ,
111
84
referrerMedium : 'Email' ,
112
85
referrerUrl : referrerUrl ?. hostname ?? null
113
86
} ;
@@ -148,10 +121,10 @@ export class ReferrerParser {
148
121
}
149
122
150
123
return {
151
- referrerSource : 'Direct' ,
124
+ referrerSource : null ,
152
125
referrerMedium : null ,
153
126
referrerUrl : null
154
- } ;
127
+ }
155
128
}
156
129
157
130
/**
@@ -259,7 +232,6 @@ export class ReferrerParser {
259
232
* @returns True if the referrer is from Ghost Explore
260
233
*/
261
234
isGhostExploreRef ( { referrerUrl, referrerSource} : { referrerUrl : URL | null , referrerSource ?: string | null } ) : boolean {
262
- // Always check for ghost-explore source param
263
235
if ( referrerSource === 'ghost-explore' ) {
264
236
return true ;
265
237
}
@@ -268,12 +240,14 @@ export class ReferrerParser {
268
240
return false ;
269
241
}
270
242
271
- // Check domain for explore.ghost.io and try.ghost.org/explore
272
- if ( referrerUrl . hostname === 'explore.ghost.io' ) {
243
+ if ( referrerUrl ?. hostname
244
+ && this . adminUrl ?. hostname === referrerUrl ?. hostname
245
+ && referrerUrl ?. pathname ?. startsWith ( this . adminUrl ?. pathname )
246
+ ) {
273
247
return true ;
274
248
}
275
249
276
- if ( referrerUrl . hostname === 'try. ghost.org' && referrerUrl . pathname . startsWith ( '/explore' ) ) {
250
+ if ( referrerUrl . hostname === 'ghost.org' && referrerUrl . pathname . startsWith ( '/explore' ) ) {
277
251
return true ;
278
252
}
279
253
0 commit comments