1+ import { hubspotFormSubmitService } from '@/services/hubspot-services'
2+
3+ const FORM_ACTION_PRIORITY = [
4+ 'signup_sso_google' ,
5+ 'signup_sso_github' ,
6+ 'signup_email' ,
7+ 'login_sso_google' ,
8+ 'login_sso_github' ,
9+ 'login_email'
10+ ]
11+
12+ const DEFAULT_FORM_ACTION = 'signup_email'
13+
14+ const getFormAction = ( signupTypeFlags ) =>
15+ FORM_ACTION_PRIORITY . find ( ( action ) => signupTypeFlags ?. [ action ] ) ?? DEFAULT_FORM_ACTION
16+
117export class SignUpTracker {
218 /**
319 * Interface for TrackerAdapter.
420 * @typedef {Object } trackerAdapter
521 * @property {function({eventName: string, props: Object}): void } addEvent - Method to add an event.
22+ * @property {function(): Object } getUserContext - Method to get user context for HubSpot.
623 */
724 #trackerAdapter
825
@@ -17,18 +34,28 @@ export class SignUpTracker {
1734 * @param {Object } payload
1835 * @param {'google'|'azure'|'github'|'email' } payload.method
1936 * @param {string } [payload.firstSessionUrl] - The first session URL
20- * @param {string } [payload.signupType] - 'sso' or 'email'
2137 * @param {Object } [payload.signupTypeFlags] - Flags for signup type tracking
38+ * @param {string } [payload.email] - User email for HubSpot
39+ * @param {string } [payload.userId] - Console user ID for HubSpot
40+ * @param {string } [payload.firstname] - User first name for HubSpot
41+ * @param {string } [payload.lastname] - User last name for HubSpot
42+ * @param {string } [payload.company] - Company name for HubSpot
43+ * @param {string } [payload.githubHandle] - GitHub handle for HubSpot
44+ * @param {string } [payload.phone] - User phone for HubSpot
2245 *
2346 * @returns {AnalyticsTrackerAdapter }
2447 */
2548 userSignedUp ( payload ) {
49+ // Get signup_type from flags for both Segment and HubSpot
50+ const signupType = getFormAction ( payload . signupTypeFlags )
51+
52+ // Add Segment event
2653 this . #trackerAdapter. addEvent ( {
2754 eventName : 'User Signed Up' ,
2855 props : {
2956 method : payload . method ,
3057 first_session_url : payload . firstSessionUrl ,
31- signup_type : payload . signupType ,
58+ signup_type : signupType ,
3259 login_sso_google : payload . signupTypeFlags ?. login_sso_google ?? false ,
3360 login_sso_github : payload . signupTypeFlags ?. login_sso_github ?? false ,
3461 login_email : payload . signupTypeFlags ?. login_email ?? false ,
@@ -37,6 +64,22 @@ export class SignUpTracker {
3764 signup_email : payload . signupTypeFlags ?. signup_email ?? false
3865 }
3966 } )
67+
68+ // Submit to HubSpot if email and userId are provided
69+ if ( payload . email && payload . userId ) {
70+ hubspotFormSubmitService ( {
71+ email : payload . email ,
72+ form_action : signupType ,
73+ user_id__rtm_ : payload . userId ,
74+ segment_userid : payload . userId ,
75+ firstname : payload . firstname ,
76+ lastname : payload . lastname ,
77+ mobilephone : payload . phone ,
78+ company : payload . company ,
79+ github_handle : payload . githubHandle
80+ } )
81+ }
82+
4083 return this . #trackerAdapter
4184 }
4285
@@ -60,18 +103,20 @@ export class SignUpTracker {
60103 * @param {Object } payload
61104 * @param {'google'|'azure'|'github' } payload.method
62105 * @param {string } [payload.firstSessionUrl] - The first session URL
63- * @param {string } [payload.signupType] - 'sso' or 'email'
64106 * @param {Object } [payload.signupTypeFlags] - Flags for signup type tracking
65107 *
66108 * @returns {AnalyticsTrackerAdapter }
67109 */
68110 userAuthorizedSso ( payload ) {
111+ // Get signup_type from flags for consistency
112+ const signupType = getFormAction ( payload . signupTypeFlags )
113+
69114 this . #trackerAdapter. addEvent ( {
70115 eventName : 'User Authorized SSO' ,
71116 props : {
72117 method : payload . method ,
73118 first_session_url : payload . firstSessionUrl ,
74- signup_type : payload . signupType ,
119+ signup_type : signupType ,
75120 login_sso_google : payload . signupTypeFlags ?. login_sso_google ?? false ,
76121 login_sso_github : payload . signupTypeFlags ?. login_sso_github ?? false ,
77122 login_email : payload . signupTypeFlags ?. login_email ?? false ,
0 commit comments