Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
9005c24
chore(deps): bump immutable from 4.3.7 to 4.3.8
dependabot[bot] Mar 5, 2026
724559a
SYNC (#3379)
gdsantana Mar 13, 2026
6418895
fix: add domain validation for Let's Encrypt HTTP-01 certificate (#3378)
HerbertJulio Mar 13, 2026
9a41730
fix: fix OOM crash and reduce memory pressure in query cache encrypti…
HerbertJulio Mar 13, 2026
952b028
fix: improve navigation performance and navbar UX (ENG-36926) (#3382)
HerbertJulio Mar 13, 2026
4095939
feat: add routing support for dns zone and purge variants in activity…
pauloSF0 Mar 13, 2026
7d33654
feat: add routing support for dns zone records
pauloSF0 Mar 13, 2026
7293adf
fix: make resource labels domain-specific (#3383)
gdsantana Mar 13, 2026
608ffb3
Merge pull request #3384 from aziontech/ENG-36969-activity-history-re…
pauloSF0 Mar 13, 2026
e542057
Merge pull request #3347 from aziontech/dependabot/npm_and_yarn/immut…
robsongajunior Mar 13, 2026
ef10297
fix: remove unecessary code - formfieldshome
robsongajunior Mar 13, 2026
712f604
Merge pull request #3386 from aziontech/remove-home-formfield
robsongajunior Mar 13, 2026
96afa24
feat: set max width add popup support for resource name columns (#3389)
gdsantana Mar 16, 2026
fe9d9f4
fix: cleanning FielText flex div to label and input align
robsongajunior Mar 16, 2026
311a06c
fix: fix navbar flash on navigation and workload protocol error (ENG-…
HerbertJulio Mar 16, 2026
a9a4105
[ENG-36889] feat: add skeleton loading states for cached edit views (…
HerbertJulio Mar 16, 2026
d4b3fcd
fix: update sort and filter paths to use active field (#3392)
gdsantana Mar 17, 2026
bb082ab
chore: azion-theme to @aziontech/theme
robsongajunior Mar 17, 2026
7311380
fix: upgrade theme version
robsongajunior Mar 17, 2026
10bd69d
fix: theme version upgrade with fixed export
robsongajunior Mar 17, 2026
cdca38c
Merge pull request #3394 from aziontech/@aziontech/theme
robsongajunior Mar 17, 2026
4f7a3a1
Merge pull request #3390 from aziontech/clean-class-input
robsongajunior Mar 18, 2026
fceb3b3
chore: bump project version (#3397)
gdsantana Mar 18, 2026
d0f7c50
Merge pull request #3396 from aziontech/main
gdsantana Mar 18, 2026
54d842c
refactor: migrate jsonform renderers to webkit components and fix pro…
HerbertJulio Mar 19, 2026
88a7d67
fix: refactoring error page to reusable ErrorPage.vue
robsongajunior Mar 19, 2026
e213baa
fix: webkit bump dep
robsongajunior Mar 19, 2026
206be59
Merge pull request #3399 from aziontech/error-page
robsongajunior Mar 19, 2026
788d15f
chore(deps): bump flatted from 3.3.3 to 3.4.2
dependabot[bot] Mar 19, 2026
28f3454
fix: errorpage buttons default props
robsongajunior Mar 19, 2026
8e29f96
Merge pull request #3401 from aziontech/error-page
robsongajunior Mar 19, 2026
e63e544
chore: country flag from webkit
robsongajunior Mar 19, 2026
4f51ead
chore: remove flag.css
robsongajunior Mar 19, 2026
0dcc230
chore: remove compare with azion, not used more 2 years
robsongajunior Mar 19, 2026
4688dda
Merge pull request #3400 from aziontech/dependabot/npm_and_yarn/flatt…
robsongajunior Mar 19, 2026
db48a93
chore: remove /views/Playground/PlaygroundView.vue
robsongajunior Mar 19, 2026
ce9012b
Merge pull request #3404 from aziontech/remove-compare-with-azion
robsongajunior Mar 20, 2026
8ca567f
Merge pull request #3405 from aziontech/remove-playground
robsongajunior Mar 20, 2026
394e943
[ENG-36879] feat: use webkit testimonials-carousel component (#3398)
HerbertJulio Mar 20, 2026
b2d2ce2
feat: bump @aziontech/webkit to ^1.7.1
HerbertJulio Mar 20, 2026
bfe9765
chore: merge dev and resolve conflicts keeping webkit ^1.7.1
HerbertJulio Mar 20, 2026
9710aaa
Merge pull request #3403 from aziontech/refactor/ENG-36879-migrate-js…
robsongajunior Mar 20, 2026
1c61168
feat: rename table columns and update default values
pauloSF0 Mar 21, 2026
f551e27
feat: hide parent resource columns in last activities block
pauloSF0 Mar 21, 2026
3e525b8
fix: extend date filter range from 1 to 2 years
pauloSF0 Mar 22, 2026
5023cdc
fix: correct default page size to 50 and use store value
pauloSF0 Mar 23, 2026
69be2ea
feat: change the page size from 200 to 100 (#3407)
gdsantana Mar 23, 2026
4cbd442
feat: add support for larger data volume units (#3393)
gdsantana Mar 23, 2026
9160ae8
feat: include inactive certificates in mTLS filter (#3411)
gdsantana Mar 23, 2026
30ea192
Merge pull request #3408 from aziontech/ENG-37025-activity-history-re…
pauloSF0 Mar 23, 2026
4fa9c17
Merge pull request #3409 from aziontech/ENG-37026-activity-history-ho…
pauloSF0 Mar 23, 2026
6162674
Merge pull request #3410 from aziontech/ENG-36990-real-time-metrics-d…
pauloSF0 Mar 23, 2026
edb8cb9
Merge pull request #3412 from aziontech/ENG-37036-sql-database-table-…
pauloSF0 Mar 23, 2026
191882e
Merge branch 'dev' into webkit-country-flags
robsongajunior Mar 23, 2026
47c672f
Merge pull request #3402 from aziontech/webkit-country-flags
robsongajunior Mar 23, 2026
473c1e3
refactor: migrate copy-block to @aziontech/webkit
HerbertJulio Mar 24, 2026
71cd371
chore: bump version
robsongajunior Mar 24, 2026
0ea123a
Merge pull request #3414 from aziontech/feat/ENG-36882-copy-block-com…
robsongajunior Mar 24, 2026
6fcbedd
[ENG-36878] feat: migrate password fields to unified FieldPassword fr…
HerbertJulio Mar 24, 2026
741126e
[36882] refactor: remove clipboardWrite prop drilling and migrate to …
HerbertJulio Mar 24, 2026
0461601
chore: fix conflict
pauloSF0 Mar 25, 2026
7fd0b87
Merge pull request #3421 from aziontech/NO-ISSUE-fix-conflict
pauloSF0 Mar 25, 2026
ced677b
fix: unify button action-bar-block
robsongajunior Mar 26, 2026
b1fc9f6
chore: removing select theme from footer
robsongajunior Mar 26, 2026
9aea1ec
chore: yarn format
robsongajunior Mar 26, 2026
8b3f2dd
Merge pull request #3423 from aziontech/remove-selecttheme-footer
robsongajunior Mar 26, 2026
e533060
Merge pull request #3422 from aziontech/refactor/button-actionbarbloc…
robsongajunior Mar 26, 2026
da5d6e8
chore: fix conflict
pauloSF0 Mar 26, 2026
60894b4
Merge pull request #3425 from aziontech/fix-conflict-project-version
pauloSF0 Mar 26, 2026
0d583d7
Merge pull request #3420 from aziontech/main
robsongajunior Mar 26, 2026
08200d7
fix: fix button contact sales size
isaquebock Mar 27, 2026
ada6343
Merge pull request #3429 from aziontech/NO-ISSUE-fix-applications-button
isaquebock Mar 27, 2026
b42d8a5
[ENG-37079] feat: unify datatable components and remove legacy templa…
HerbertJulio Mar 30, 2026
d90ee20
chore: change project version
pauloSF0 Mar 30, 2026
2b5683e
Merge pull request #3433 from aziontech/fix-conflict-verions-main-int…
pauloSF0 Mar 30, 2026
e0f0d91
refactor: removing unused code
robsongajunior Mar 30, 2026
096a57c
Merge pull request #3434 from aziontech/delete-action-bar-unused
robsongajunior Mar 30, 2026
6ee4872
chore: remove extra left padding classes in switch uses
cesaroeduardo Mar 31, 2026
0843d9a
Merge pull request #3435 from aziontech/ENG-37179-remove-paddingleft-…
robsongajunior Apr 1, 2026
a8ee777
[ENG-37137] feat: migrate primevue imports to webkit wrappers (#3436)
HerbertJulio Apr 2, 2026
6c7cb76
[ENG-37137] refactor: migrate all primevue imports to @aziontech/webk…
HerbertJulio Apr 2, 2026
75a8b0d
feat: adding console storybook components (#3442)
robsongajunior Apr 6, 2026
6cf4a8e
chore(deps): bump lodash from 4.17.23 to 4.18.1 (#3439)
dependabot[bot] Apr 6, 2026
84721aa
chore(deps): bump lodash-es from 4.17.23 to 4.18.1 (#3438)
dependabot[bot] Apr 6, 2026
13d5456
chore: delete src/views/PersonalTokens/Dialog/CopyTokenDialog and rep…
robsongajunior Apr 6, 2026
62cc14b
feat: add theme (#3418)
isaquebock Apr 7, 2026
a65df49
chore: adjust storybook details (#3448)
robsongajunior Apr 7, 2026
c4ce878
chore(deps-dev): bump vite from 6.4.1 to 6.4.2 in /storybook (#3446)
dependabot[bot] Apr 7, 2026
492b533
fix: theme test (#3453)
isaquebock Apr 7, 2026
6831b76
fix: adjust column widths on last activities home and surface tokens …
cesaroeduardo Apr 7, 2026
79e21a2
fix: rename API field and improve domain error styling (#3449)
pauloSF0 Apr 8, 2026
c02f3c2
fix: inlinemessage export name (#3456)
robsongajunior Apr 9, 2026
16f653e
chore: storybook azion deploy, replace Dialog/CopyTokenDialog.vue to …
robsongajunior Apr 9, 2026
e3aa562
fix: replace @aziontech/webkit/accordion to primevue/accordion (#3458)
robsongajunior Apr 9, 2026
5027186
fix: rules engine #groupheader="slotProps" (#3459)
robsongajunior Apr 9, 2026
e57212a
fix: correct variable reference in onRowEditCancel (#3460)
pauloSF0 Apr 9, 2026
52044fe
chore: @aziontech/webkit bump version (#3461)
robsongajunior Apr 9, 2026
0cb04a7
chore(deps): bump axios from 1.13.6 to 1.15.0 (#3462)
dependabot[bot] Apr 9, 2026
4aa75cd
fix: fix sync main (#3464)
gdsantana Apr 10, 2026
354382e
SYNC Main (#3463)
gdsantana Apr 10, 2026
2115c8d
fix: user-flag add null safety checks to prevent TypeError (#3465)
pauloSF0 Apr 10, 2026
635b93a
chore: change project version
pauloSF0 Apr 10, 2026
1c1211e
Merge pull request #3466 from aziontech/chore-change-project-version
pauloSF0 Apr 10, 2026
7e5a6f7
chore(deps-dev): bump vite from 5.4.21 to 6.4.2 (#3451)
dependabot[bot] Apr 12, 2026
372b7fd
Merge branch 'main' into dev
robsongajunior Apr 13, 2026
2aff84d
feat: adding components folder to storybook (#3467)
robsongajunior Apr 13, 2026
fb23715
feat: add method and signupTypeFlags to login tracking
pauloSF0 Apr 15, 2026
4169ede
fix: populate user data before HubSpot tracking on login
pauloSF0 Apr 16, 2026
fdf9a0c
feat: merged with dev branch
pauloSF0 Apr 22, 2026
2cd10e2
feat: merged with dev branch
pauloSF0 Apr 22, 2026
4ce76a8
chore: remove empty-results-block template component
pauloSF0 Apr 22, 2026
dcd0feb
chore: remove EmptyResultsBlock storybook story
pauloSF0 Apr 22, 2026
a63fca1
feat: add validation and improve error handling in HubSpot form service
pauloSF0 Apr 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,4 @@ CLAUDE.md
.opencode/
.claude/

storybook/yarn.lock
storybook/yarn.lock
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
"eslint-plugin-xss": "^0.1.12",
"husky": "^8.0.0",
"jsdom": "^22.1.0",
"postcss": "^8.4.31",
"postcss": "^8.5.8",
"prettier": "^3.0.0",
"sass": "1.77.6",
"start-server-and-test": "^2.0.0",
Expand Down
4 changes: 4 additions & 0 deletions src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@
import { useThemeStore, DARK_SCHEME_QUERY } from '@/stores/theme'
import { storeToRefs } from 'pinia'
import { themeApply } from '@/helpers'
import { captureFirstSessionUrl } from '@/helpers/first-session-url'
import Layout from '@/layout'
import '@modules/real-time-metrics/helpers/convert-date'
import '@/helpers/store-handler'

// Capture the first session URL as early as possible
captureFirstSessionUrl()

const DEFAULT_TITLE = 'Azion Console'

/** @type {import('@/plugins/analytics/AnalyticsTrackerAdapter').AnalyticsTrackerAdapter} */
Expand Down
37 changes: 37 additions & 0 deletions src/helpers/first-session-url.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const FIRST_SESSION_URL_KEY = 'azion_first_session_url'

/**
* Captures the first session URL and stores it in localStorage.
* This should be called early in the application lifecycle.
* The URL is only stored once per user session.
*/
export const captureFirstSessionUrl = () => {
if (typeof window === 'undefined') return null

// Only capture if not already stored
if (!localStorage.getItem(FIRST_SESSION_URL_KEY)) {
const currentUrl = window.location.href
localStorage.setItem(FIRST_SESSION_URL_KEY, currentUrl)
return currentUrl
}

return getFirstSessionUrl()
}

/**
* Retrieves the first session URL from localStorage.
* @returns {string|null} The first session URL or null if not set.
*/
export const getFirstSessionUrl = () => {
if (typeof window === 'undefined') return null
return localStorage.getItem(FIRST_SESSION_URL_KEY)
}

/**
* Clears the first session URL from localStorage.
* This can be called after the signup flow is complete.
*/
export const clearFirstSessionUrl = () => {
if (typeof window === 'undefined') return
localStorage.removeItem(FIRST_SESSION_URL_KEY)
}
95 changes: 91 additions & 4 deletions src/plugins/analytics/trackers/SignInTracker.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
import { hubspotFormSubmitService } from '@/services/hubspot-services'

/**
* Maps signin type flags to the appropriate form_action value for HubSpot.
* @param {Object} signupTypeFlags - The signin type flags
* @returns {string} The form_action value
*/
const FORM_ACTION_PRIORITY = [
'login_sso_google',
'login_sso_github',
'login_email',
'signup_sso_google',
'signup_sso_github',
'signup_email'
]

const DEFAULT_FORM_ACTION = 'login_email'

const getFormAction = (signupTypeFlags) =>
FORM_ACTION_PRIORITY.find((action) => signupTypeFlags?.[action]) ?? DEFAULT_FORM_ACTION

export class SignInTracker {
/**
* Interface for TrackerAdapter.
Expand All @@ -14,23 +35,89 @@ export class SignInTracker {
}

/**
* @param {Object} payload
* @param {'google'|'azure'|'github'|'email'} payload.method
* @param {Object} [payload.signupTypeFlags] - Flags for signin type tracking
* @param {string} [payload.email] - User email for HubSpot
* @param {string} [payload.userId] - Console user ID for HubSpot
* @param {string} [payload.firstname] - User first name for HubSpot
* @param {string} [payload.lastname] - User last name for HubSpot
* @param {string} [payload.company] - Company name for HubSpot
* @param {string} [payload.githubHandle] - GitHub handle for HubSpot
* @param {string} [payload.phone] - User phone for HubSpot
*
* @returns {AnalyticsTrackerAdapter}
*/
userSignedIn() {
userSignedIn(payload) {
// Get form_action from flags for both Segment and HubSpot
const formAction = getFormAction(payload.signupTypeFlags)

this.#trackerAdapter.addEvent({
eventName: 'User Signed In',
props: {}
props: {
method: payload.method,
login_sso_google: payload.signupTypeFlags?.login_sso_google ?? false,
login_sso_github: payload.signupTypeFlags?.login_sso_github ?? false,
login_email: payload.signupTypeFlags?.login_email ?? false,
signup_sso_google: payload.signupTypeFlags?.signup_sso_google ?? false,
signup_sso_github: payload.signupTypeFlags?.signup_sso_github ?? false,
signup_email: payload.signupTypeFlags?.signup_email ?? false
}
})

// Submit to HubSpot if email and userId are provided
if (payload.email && payload.userId) {
hubspotFormSubmitService({
email: payload.email,
form_action: formAction,
user_id__rtm_: payload.userId,
segment_userid: payload.userId,
firstname: payload.firstname,
lastname: payload.lastname,
mobilephone: payload.phone,
company: payload.company,
github_handle: payload.githubHandle
})
}

return this.#trackerAdapter
}

/**
* @param {Object} payload
* @param {'google'|'azure'|'github'|'email'} payload.method
*
* @returns {AnalyticsTrackerAdapter}
*/
userClickedSignIn(payload) {
this.#trackerAdapter.addEvent({
eventName: 'User Clicked to Sign In',
props: {
method: payload.method
}
})
return this.#trackerAdapter
}

/**
* @param {Object} payload
* @param {'google'|'azure'|'github'|'email'} payload.method
* @param {Object} [payload.signupTypeFlags] - Flags for signup type tracking
*
* @returns {AnalyticsTrackerAdapter}
*/
userFailedSignIn() {
userFailedSignIn(payload) {
this.#trackerAdapter.addEvent({
eventName: 'User Failed to Sign In',
props: {}
props: {
method: payload.method,
login_sso_google: payload.signupTypeFlags?.login_sso_google ?? false,
login_sso_github: payload.signupTypeFlags?.login_sso_github ?? false,
login_email: payload.signupTypeFlags?.login_email ?? false,
signup_sso_google: payload.signupTypeFlags?.signup_sso_google ?? false,
signup_sso_github: payload.signupTypeFlags?.signup_sso_github ?? false,
signup_email: payload.signupTypeFlags?.signup_email ?? false
}
})
return this.#trackerAdapter
}
Expand Down
71 changes: 69 additions & 2 deletions src/plugins/analytics/trackers/SignUpTracker.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
import { hubspotFormSubmitService } from '@/services/hubspot-services'

const FORM_ACTION_PRIORITY = [
'signup_sso_google',
'signup_sso_github',
'signup_email',
'login_sso_google',
'login_sso_github',
'login_email'
]

const DEFAULT_FORM_ACTION = 'signup_email'

const getFormAction = (signupTypeFlags) =>
FORM_ACTION_PRIORITY.find((action) => signupTypeFlags?.[action]) ?? DEFAULT_FORM_ACTION

export class SignUpTracker {
/**
* Interface for TrackerAdapter.
* @typedef {Object} trackerAdapter
* @property {function({eventName: string, props: Object}): void} addEvent - Method to add an event.
* @property {function(): Object} getUserContext - Method to get user context for HubSpot.
*/
#trackerAdapter

Expand All @@ -16,16 +33,53 @@ export class SignUpTracker {
/**
* @param {Object} payload
* @param {'google'|'azure'|'github'|'email'} payload.method
* @param {string} [payload.firstSessionUrl] - The first session URL
* @param {Object} [payload.signupTypeFlags] - Flags for signup type tracking
* @param {string} [payload.email] - User email for HubSpot
* @param {string} [payload.userId] - Console user ID for HubSpot
* @param {string} [payload.firstname] - User first name for HubSpot
* @param {string} [payload.lastname] - User last name for HubSpot
* @param {string} [payload.company] - Company name for HubSpot
* @param {string} [payload.githubHandle] - GitHub handle for HubSpot
* @param {string} [payload.phone] - User phone for HubSpot
*
* @returns {AnalyticsTrackerAdapter}
*/
userSignedUp(payload) {
// Get signup_type from flags for both Segment and HubSpot
const signupType = getFormAction(payload.signupTypeFlags)

// Add Segment event
this.#trackerAdapter.addEvent({
eventName: 'User Signed Up',
props: {
method: payload.method
method: payload.method,
first_session_url: payload.firstSessionUrl,
signup_type: signupType,
login_sso_google: payload.signupTypeFlags?.login_sso_google ?? false,
login_sso_github: payload.signupTypeFlags?.login_sso_github ?? false,
login_email: payload.signupTypeFlags?.login_email ?? false,
signup_sso_google: payload.signupTypeFlags?.signup_sso_google ?? false,
signup_sso_github: payload.signupTypeFlags?.signup_sso_github ?? false,
signup_email: payload.signupTypeFlags?.signup_email ?? false
}
})

// Submit to HubSpot if email and userId are provided
if (payload.email && payload.userId) {
hubspotFormSubmitService({
email: payload.email,
form_action: signupType,
user_id__rtm_: payload.userId,
segment_userid: payload.userId,
firstname: payload.firstname,
lastname: payload.lastname,
mobilephone: payload.phone,
company: payload.company,
github_handle: payload.githubHandle
})
}

return this.#trackerAdapter
}

Expand All @@ -48,14 +102,27 @@ export class SignUpTracker {
/**
* @param {Object} payload
* @param {'google'|'azure'|'github'} payload.method
* @param {string} [payload.firstSessionUrl] - The first session URL
* @param {Object} [payload.signupTypeFlags] - Flags for signup type tracking
*
* @returns {AnalyticsTrackerAdapter}
*/
userAuthorizedSso(payload) {
// Get signup_type from flags for consistency
const signupType = getFormAction(payload.signupTypeFlags)

this.#trackerAdapter.addEvent({
eventName: 'User Authorized SSO',
props: {
method: payload.method
method: payload.method,
first_session_url: payload.firstSessionUrl,
signup_type: signupType,
login_sso_google: payload.signupTypeFlags?.login_sso_google ?? false,
login_sso_github: payload.signupTypeFlags?.login_sso_github ?? false,
login_email: payload.signupTypeFlags?.login_email ?? false,
signup_sso_google: payload.signupTypeFlags?.signup_sso_google ?? false,
signup_sso_github: payload.signupTypeFlags?.signup_sso_github ?? false,
signup_email: payload.signupTypeFlags?.signup_email ?? false
}
})
return this.#trackerAdapter
Expand Down
44 changes: 41 additions & 3 deletions src/router/routes/signup-routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as SignupService from '@/services/signup-services'
import { inject } from 'vue'
import { useAccountStore } from '@/stores/account'
import SignupView from '@/views/Signup/SignupView.vue'
import { getFirstSessionUrl } from '@/helpers/first-session-url'

/** @type {import('vue-router').RouteRecordRaw} */
export const signupRoutes = {
Expand Down Expand Up @@ -38,13 +39,50 @@ export const signupRoutes = {
beforeEnter: (__, ___, next) => {
const accountStore = useAccountStore()
const isFirstLogin = accountStore.isFirstLogin
const signupTypeFlags = accountStore.getSignupTypeFlags()

if (isFirstLogin && accountStore.ssoSignUpMethod) {
// Check if this is a first login with signup tracking needed
const isEmailSignup = signupTypeFlags.signup_email
const isSsoSignup = accountStore.ssoSignUpMethod

if (isFirstLogin && (isSsoSignup || isEmailSignup)) {
/** @type {import('@/plugins/adapters/AnalyticsTrackerAdapter').AnalyticsTrackerAdapter} */
const tracker = inject('tracker')
const signUpMethod = { method: accountStore.ssoSignUpMethod }

tracker.signUp.userSignedUp(signUpMethod).signUp.userAuthorizedSso(signUpMethod)
// Determine the method for tracking
const method = isSsoSignup || 'email'

// Get user data for HubSpot tracking
const { userId: consoleUserId, accountData } = accountStore
const userEmail = accountData?.email
const userName = accountData?.name || ''
const companyName = accountData?.company_name || ''

// Parse first and last name from full name
const nameParts = userName.split(' ')
const firstname = nameParts[0] || ''
const lastname = nameParts.slice(1).join(' ') || ''

const signUpPayload = {
method,
firstSessionUrl: getFirstSessionUrl(),
signupTypeFlags,
// HubSpot required fields
email: userEmail,
userId: consoleUserId,
firstname,
lastname,
company: companyName,
githubHandle: method === 'github' ? accountData?.github_handle : undefined
}

// Track user signup with Segment and HubSpot
tracker.signUp.userSignedUp(signUpPayload)

// For SSO, also track the SSO authorization event
if (isSsoSignup) {
tracker.signUp.userAuthorizedSso(signUpPayload)
}
}

if (isFirstLogin) {
Expand Down
Loading
Loading