3939 * @module utils/Metrics
4040 */
4141define ( function ( require , exports , module ) {
42+ const KernalModeTrust = window . KernalModeTrust ;
43+ if ( ! KernalModeTrust ) {
44+ // integrated extensions will have access to kernal mode, but not external extensions
45+ throw new Error ( "Metrics should have access to KernalModeTrust. Cannot boot without trust ring" ) ;
46+ }
47+
4248 const MAX_AUDIT_ENTRIES = 3000 ,
4349 ONE_DAY = 24 * 60 * 60 * 1000 ;
4450 let initDone = false ,
4551 disabled = false ,
4652 loggedDataForAudit = new Map ( ) ;
4753
4854 let isFirstUseDay ;
49- let userID , isPowerUserFn ;
55+ let userID , isPowerUserFn , powerUserPrefix ;
5056 let cachedIsPowerUser = false ;
5157
5258 function _setUserID ( ) {
@@ -260,6 +266,25 @@ define(function (require, exports, module) {
260266 document . getElementsByTagName ( 'head' ) [ 0 ] . appendChild ( script ) ;
261267 }
262268
269+ async function _setPowerUserPrefix ( ) {
270+ powerUserPrefix = null ;
271+ const EntitlementsManager = KernalModeTrust . EntitlementsManager ;
272+ if ( cachedIsPowerUser ) {
273+ // A power user is someone who used Phoenix at least 3 days/8 hours in the last two weeks
274+ powerUserPrefix = "P" ;
275+ } else if ( ! isFirstUseDay ) {
276+ // A repeat user is a user who has used phoenix at least one other day before
277+ powerUserPrefix = "R" ;
278+ }
279+ if ( EntitlementsManager . isLoggedIn ( ) ) {
280+ if ( await EntitlementsManager . isPaidSubscriber ( ) ) {
281+ powerUserPrefix = "S" ; // subscriber
282+ return ;
283+ }
284+ powerUserPrefix = "L" ; // logged in user
285+ }
286+ }
287+
263288 /**
264289 * We are transitioning to our own analytics instead of google as we breached the free user threshold of google
265290 * and paid plans for GA starts at 100,000 USD.
@@ -275,10 +300,14 @@ define(function (require, exports, module) {
275300 if ( initOptions . isPowerUserFn ) {
276301 isPowerUserFn = initOptions . isPowerUserFn ;
277302 cachedIsPowerUser = isPowerUserFn ( ) ; // only call once to avoid heavy computations repeatedly
303+ _setPowerUserPrefix ( ) ;
278304 setInterval ( ( ) => {
279305 cachedIsPowerUser = isPowerUserFn ( ) ;
306+ _setPowerUserPrefix ( ) ;
280307 } , ONE_DAY ) ;
281308 }
309+ KernalModeTrust . EntitlementsManager . on ( KernalModeTrust . EntitlementsManager . EVENT_ENTITLEMENTS_CHANGED ,
310+ _setPowerUserPrefix ) ;
282311 }
283312
284313 // some events generate too many ga events that ga can't handle. ignore them.
@@ -363,12 +392,9 @@ define(function (require, exports, module) {
363392 * @type {function }
364393 */
365394 function countEvent ( eventType , eventCategory , eventSubCategory , count = 1 ) {
366- if ( cachedIsPowerUser ) {
395+ if ( powerUserPrefix ) {
367396 // emit power user metrics too
368- _countEvent ( `P-${ eventType } ` , eventCategory , eventSubCategory , count ) ;
369- } else if ( ! isFirstUseDay ) {
370- // emit repeat user metrics too
371- _countEvent ( `R-${ eventType } ` , eventCategory , eventSubCategory , count ) ;
397+ _countEvent ( `${ powerUserPrefix } -${ eventType } ` , eventCategory , eventSubCategory , count ) ;
372398 }
373399 _countEvent ( eventType , eventCategory , eventSubCategory , count ) ;
374400 }
@@ -394,12 +420,9 @@ define(function (require, exports, module) {
394420 * @type {function }
395421 */
396422 function valueEvent ( eventType , eventCategory , eventSubCategory , value ) {
397- if ( cachedIsPowerUser ) {
423+ if ( powerUserPrefix ) {
398424 // emit power user metrics too
399- _valueEvent ( `P-${ eventType } ` , eventCategory , eventSubCategory , value ) ;
400- } else if ( ! isFirstUseDay ) {
401- // emit repeat user metrics too
402- _valueEvent ( `R-${ eventType } ` , eventCategory , eventSubCategory , value ) ;
425+ _valueEvent ( `${ powerUserPrefix } -${ eventType } ` , eventCategory , eventSubCategory , value ) ;
403426 }
404427 _valueEvent ( eventType , eventCategory , eventSubCategory , value ) ;
405428 }
0 commit comments