import { LivechatContacts, Statistics, Users } from '@rocket.chat/models'; import moment from 'moment'; import { LICENSE_VERSION } from './license'; import { Info } from '../../../app/utils/rocketchat.info'; import { settings } from '../../settings'; import { statistics } from '../statistics'; export type WorkspaceRegistrationData = { uniqueId: string; deploymentFingerprintHash: string; deploymentFingerprintVerified: boolean; workspaceId: string; address: string; contactName: string; contactEmail: T; seats: number; organizationType: string; industry: string; orgSize: string; country: string; language: string; allowMarketing: string; accountName: string; agreePrivacyTerms: string; website: string; siteName: string; workspaceType: unknown; deploymentMethod: string; deploymentPlatform: string; version: string; licenseVersion: number; license?: string; enterpriseReady: boolean; setupComplete: boolean; connectionDisable: boolean; npsEnabled: string; // TODO: Evaluate naming MAC: number; // activeContactsBillingMonth: number; // activeContactsYesterday: number; statsToken?: string; }; export async function buildWorkspaceRegistrationData(contactEmail: T): Promise> { const stats = (await Statistics.findLast()) || (await statistics.get()); const address = settings.get('Site_Url'); const siteName = settings.get('Site_Name'); const workspaceId = settings.get('Cloud_Workspace_Id'); const allowMarketing = settings.get('Allow_Marketing_Emails'); const accountName = settings.get('Organization_Name'); const website = settings.get('Website'); const npsEnabled = settings.get('NPS_survey_enabled'); const agreePrivacyTerms = settings.get('Cloud_Service_Agree_PrivacyTerms'); const setupWizardState = settings.get('Show_Setup_Wizard'); const deploymentFingerprintHash = settings.get('Deployment_FingerPrint_Hash'); const deploymentFingerprintVerified = settings.get('Deployment_FingerPrint_Verified'); const firstUser = await Users.getOldest({ projection: { name: 1, emails: 1 } }); const contactName = firstUser?.name || ''; const country = settings.get('Country'); const language = settings.get('Language'); const organizationType = settings.get('Organization_Type'); const industry = settings.get('Industry'); const orgSize = settings.get('Size'); const workspaceType = settings.get('Server_Type'); const seats = await Users.getActiveLocalUserCount(); const MAC = await LivechatContacts.countContactsOnPeriod(moment.utc().format('YYYY-MM')); const license = settings.get('Enterprise_License'); return { uniqueId: stats.uniqueId, deploymentFingerprintHash, deploymentFingerprintVerified, workspaceId, address, contactName, contactEmail, seats, allowMarketing, accountName, organizationType: String(organizationType), industry: String(industry), orgSize: String(orgSize), country: String(country), language: String(language), agreePrivacyTerms, website, siteName, workspaceType: String(workspaceType), deploymentMethod: stats.deploy.method, deploymentPlatform: stats.deploy.platform, version: stats.version ?? Info.version, licenseVersion: LICENSE_VERSION, ...(license && { license }), enterpriseReady: true, setupComplete: setupWizardState === 'completed', connectionDisable: false, npsEnabled, MAC, // activeContactsBillingMonth: stats.omnichannelContactsBySource.contactsCount, // activeContactsYesterday: stats.uniqueContactsOfYesterday.contactsCount, statsToken: stats.statsToken, }; }