UNPKG

@memberjunction/actions-bizapps-crm

Version:

CRM system integration actions for MemberJunction

282 lines 10.8 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CreateCompanyAction = void 0; const global_1 = require("@memberjunction/global"); const hubspot_base_action_1 = require("../hubspot-base.action"); const actions_1 = require("@memberjunction/actions"); /** * Action to create a new company in HubSpot */ let CreateCompanyAction = class CreateCompanyAction extends hubspot_base_action_1.HubSpotBaseAction { /** * Create a new company */ async InternalRunAction(params) { const { Params, ContextUser } = params; this.params = Params; // Set params for base class to use try { // Extract and validate parameters const name = this.getParamValue(Params, 'Name'); const domain = this.getParamValue(Params, 'Domain'); const industry = this.getParamValue(Params, 'Industry'); const description = this.getParamValue(Params, 'Description'); const phone = this.getParamValue(Params, 'Phone'); const website = this.getParamValue(Params, 'Website'); const address = this.getParamValue(Params, 'Address'); const city = this.getParamValue(Params, 'City'); const state = this.getParamValue(Params, 'State'); const zip = this.getParamValue(Params, 'Zip'); const country = this.getParamValue(Params, 'Country'); const numberOfEmployees = this.getParamValue(Params, 'NumberOfEmployees'); const annualRevenue = this.getParamValue(Params, 'AnnualRevenue'); const type = this.getParamValue(Params, 'Type'); const lifecycleStage = this.getParamValue(Params, 'LifecycleStage') || 'lead'; const ownerId = this.getParamValue(Params, 'OwnerId'); const customProperties = this.getParamValue(Params, 'CustomProperties'); const associateWithContactIds = this.getParamValue(Params, 'AssociateWithContactIds'); if (!name) { return { Success: false, ResultCode: 'VALIDATION_ERROR', Message: 'Company name is required', Params }; } // Prepare company properties const properties = { name: name, lifecyclestage: lifecycleStage }; // Add optional fields if (domain) properties.domain = domain; if (industry) properties.industry = industry; if (description) properties.description = description; if (phone) properties.phone = this.formatPhoneNumber(phone); if (website) properties.website = website; if (address) properties.address = address; if (city) properties.city = city; if (state) properties.state = state; if (zip) properties.zip = zip; if (country) properties.country = country; if (numberOfEmployees) properties.numberofemployees = numberOfEmployees; if (annualRevenue) properties.annualrevenue = annualRevenue; if (type) properties.type = type; if (ownerId) properties.hubspot_owner_id = ownerId; // Add custom properties if provided if (customProperties && typeof customProperties === 'object') { Object.assign(properties, customProperties); } // Create company const newCompany = await this.makeHubSpotRequest('objects/companies', 'POST', { properties }, ContextUser); // Format company details const companyDetails = this.mapHubSpotProperties(newCompany); // Associate with contacts if requested let associationResults = null; if (associateWithContactIds && Array.isArray(associateWithContactIds)) { associationResults = []; for (const contactId of associateWithContactIds) { try { await this.associateObjects('companies', newCompany.id, 'contacts', contactId, undefined, ContextUser); associationResults.push({ success: true, contactId: contactId, message: 'Successfully associated' }); } catch (assocError) { associationResults.push({ success: false, contactId: contactId, error: assocError instanceof Error ? assocError.message : 'Association failed' }); } } } // Create summary const summary = { companyId: companyDetails.id, name: companyDetails.name, domain: companyDetails.domain, industry: companyDetails.industry, lifecycleStage: companyDetails.lifecyclestage, numberOfEmployees: companyDetails.numberofemployees, annualRevenue: companyDetails.annualrevenue, createdAt: companyDetails.createdAt, portalUrl: `https://app.hubspot.com/contacts/${companyDetails.id}`, associationResults: associationResults }; // Update output parameters const outputParams = [...Params]; const companyDetailsParam = outputParams.find(p => p.Name === 'CompanyDetails'); if (companyDetailsParam) companyDetailsParam.Value = companyDetails; const summaryParam = outputParams.find(p => p.Name === 'Summary'); if (summaryParam) summaryParam.Value = summary; return { Success: true, ResultCode: 'SUCCESS', Message: `Successfully created company ${companyDetails.name}`, Params: outputParams }; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; // Check for duplicate company error if (errorMessage.includes('Company already exists') || errorMessage.includes('CONFLICT')) { return { Success: false, ResultCode: 'DUPLICATE_COMPANY', Message: `Company with name ${this.getParamValue(Params, 'Name')} may already exist`, Params }; } return { Success: false, ResultCode: 'ERROR', Message: `Error creating company: ${errorMessage}`, Params }; } } /** * Define the parameters this action expects */ get Params() { const baseParams = this.getCommonCRMParams(); const specificParams = [ { Name: 'Name', Type: 'Input', Value: null }, { Name: 'Domain', Type: 'Input', Value: null }, { Name: 'Industry', Type: 'Input', Value: null }, { Name: 'Description', Type: 'Input', Value: null }, { Name: 'Phone', Type: 'Input', Value: null }, { Name: 'Website', Type: 'Input', Value: null }, { Name: 'Address', Type: 'Input', Value: null }, { Name: 'City', Type: 'Input', Value: null }, { Name: 'State', Type: 'Input', Value: null }, { Name: 'Zip', Type: 'Input', Value: null }, { Name: 'Country', Type: 'Input', Value: null }, { Name: 'NumberOfEmployees', Type: 'Input', Value: null }, { Name: 'AnnualRevenue', Type: 'Input', Value: null }, { Name: 'Type', Type: 'Input', Value: null }, { Name: 'LifecycleStage', Type: 'Input', Value: 'lead' }, { Name: 'OwnerId', Type: 'Input', Value: null }, { Name: 'CustomProperties', Type: 'Input', Value: null }, { Name: 'AssociateWithContactIds', Type: 'Input', Value: null }, { Name: 'CompanyDetails', Type: 'Output', Value: null }, { Name: 'Summary', Type: 'Output', Value: null } ]; return [...baseParams, ...specificParams]; } /** * Metadata about this action */ get Description() { return 'Creates a new company in HubSpot with optional contact associations'; } }; exports.CreateCompanyAction = CreateCompanyAction; exports.CreateCompanyAction = CreateCompanyAction = __decorate([ (0, global_1.RegisterClass)(actions_1.BaseAction, 'CreateCompanyAction') ], CreateCompanyAction); //# sourceMappingURL=create-company.action.js.map