Skip to content

Commit

Permalink
Merge pull request activepieces#6377 from kishanprmr/hubspot
Browse files Browse the repository at this point in the history
feat(hubspot): 18 triggers and 38 actions
  • Loading branch information
abuaboud authored Jan 5, 2025
2 parents df2d4fa + 695bf40 commit 0f2fa50
Show file tree
Hide file tree
Showing 83 changed files with 7,563 additions and 2,060 deletions.
83 changes: 83 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@
"@commitlint/cli": "17.7.1",
"@commitlint/config-conventional": "17.7.0",
"@faker-js/faker": "8.2.0",
"@hubspot/api-client": "12.0.1",
"@nx/esbuild": "20.0.1",
"@nx/eslint": "20.0.1",
"@nx/eslint-plugin": "20.0.1",
Expand Down Expand Up @@ -435,4 +436,4 @@
"rollup": "npm:@rollup/wasm-node"
}
}
}
}
2 changes: 1 addition & 1 deletion packages/pieces/community/hubspot/package.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"name": "@activepieces/piece-hubspot",
"version": "0.5.8"
"version": "0.6.0"
}
158 changes: 138 additions & 20 deletions packages/pieces/community/hubspot/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,70 @@ import { createCustomApiCallAction } from '@activepieces/pieces-common';
import { OAuth2PropertyValue, PieceAuth, createPiece } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { hubSpotListsAddContactAction } from './lib/actions/add-contact-to-list-action';
import { createHubspotContact } from './lib/actions/create-contact.action';
import { hubSpotContactsCreateOrUpdateAction } from './lib/actions/create-or-update-contact-action';
import { hubSpotGetOwnerByEmailAction } from './lib/actions/search-owner-by-email';
import { newCompanyAdded } from './lib/triggers/new-company-added';
import { newContactAdded } from './lib/triggers/new-contact-added';
import { newDealAdded } from './lib/triggers/new-deal-added';
import { newTaskAdded } from './lib/triggers/new-task-added';
import { newTicketAdded } from './lib/triggers/new-ticket-added';
import { newCompanyTrigger } from './lib/triggers/new-company';
import { newContactTrigger } from './lib/triggers/new-contact';
import { newDealTrigger } from './lib/triggers/new-deal';
import { newTaskTrigger } from './lib/triggers/new-task';
import { newTicketTrigger } from './lib/triggers/new-ticket';
import { createDealAction } from './lib/actions/create-deal';
import { updateDealAction } from './lib/actions/update-deal';
import { dealStageUpdatedTrigger } from './lib/triggers/deal-stage-updated';
import { getContactAction } from './lib/actions/get-contact';
import { getDealAction } from './lib/actions/get-deal';
import { getTicketAction } from './lib/actions/get-ticket';
import { getCompanyAction } from './lib/actions/get-company';
import { getPipelineStageDeatilsAction } from './lib/actions/get-pipeline-stage-details';
import { getProductAction } from './lib/actions/get-product';
import { addContactToWorkflowAction } from './lib/actions/add-contact-to-workflow';
import { createTicketAction } from './lib/actions/create-ticket';
import { updateTicketAction } from './lib/actions/update-ticket';
import { findTicketAction } from './lib/actions/find-ticket';
import { createContactAction } from './lib/actions/create-contact';
import { updateContactAction } from './lib/actions/update-contact';
import { findContactAction } from './lib/actions/find-contact';
import { createOrUpdateContactAction } from './lib/actions/create-or-update-contact';
import { createProductAction } from './lib/actions/create-product';
import { updateProductAction } from './lib/actions/update-product';
import { findProductAction } from './lib/actions/find-product';
import { createCompanyAction } from './lib/actions/create-company';
import { findCompanyAction } from './lib/actions/find-company';
import { updateCompanyAction } from './lib/actions/update-company';
import { createCustomObjectAction } from './lib/actions/create-custom-object';
import { updateCustomObjectAction } from './lib/actions/update-custom-object';
import { getCustomObjectAction } from './lib/actions/get-custom-object';
import { findCustomObjectAction } from './lib/actions/find-custom-object';
import { getOwnerByEmailAction } from './lib/actions/get-owner-by-email';
import { getOwnerByIdAction } from './lib/actions/get-owner-by-id';
import { findDealAction } from './lib/actions/find-deal';
import { createLineItemAction } from './lib/actions/create-line-item';
import { getLineItemAction } from './lib/actions/get-line-item';
import { updateLineItemAction } from './lib/actions/update-line-item';
import { findLineItemAction } from './lib/actions/find-line-item';
import { removeContactFromListAction } from './lib/actions/remove-contact-from-list';
import { uploadFileAction } from './lib/actions/upload-file';
import { removeEmailSubscriptionAction } from './lib/actions/remove-email-subscription';
import { createAssociationsAction } from './lib/actions/create-associations';
import { removeAssociationsAction } from './lib/actions/remove-associations';
import { findAssociationsAction } from './lib/actions/find-associations';
import { newOrUpdatedCompanyTrigger } from './lib/triggers/new-or-updated-company';
import { newOrUpdatedContactTrigger } from './lib/triggers/new-or-updated-contact';
import { newOrUpdatedProductTrigger } from './lib/triggers/new-or-updated-product';
import { newOrUpdatedLineItemTrigger } from './lib/triggers/new-or-updated-line-item';
import { newContactPropertyChangeTrigger } from './lib/triggers/new-contact-property-change';
import { newTicketPropertyChangeTrigger } from './lib/triggers/new-ticket-property-change';
import { newCompanyPropertyChangeTrigger } from './lib/triggers/new-company-propety-change';
import { newDealPropertyChangeTrigger } from './lib/triggers/new-deal-property-change';
import { newCustomObjectPropertyChangeTrigger } from './lib/triggers/new-custom-object-property-change';
import { newLineItemTrigger } from './lib/triggers/new-line-item';
import { newProductTrigger } from './lib/triggers/new-product';
import { newCustomObjectTrigger } from './lib/triggers/new-custom-object';
import { newFormSubmissionTrigger } from './lib/triggers/new-form-submission';
import { newEmailEventTrigger } from './lib/triggers/new-email-event';
import { newBlogArticleTrigger } from './lib/triggers/new-blog-article';
import { newContactInListTrigger } from './lib/triggers/new-contact-in-list';
import { newEngagementTrigger } from './lib/triggers/new-engagement';
import { newEmailSubscriptionsTimelineTrigger } from './lib/triggers/email-subscriptions-timeline';
import { createBlogPostAction } from './lib/actions/create-blog-post';

export const hubspotAuth = PieceAuth.OAuth2({
authUrl: 'https://app.hubspot.com/oauth/authorize',
Expand All @@ -21,19 +74,31 @@ export const hubspotAuth = PieceAuth.OAuth2({
scope: [
'crm.lists.read',
'crm.lists.write',
'crm.objects.contacts.read',
'crm.objects.contacts.write',
'crm.objects.owners.read',
'crm.objects.companies.read',
'crm.objects.companies.write',
'crm.objects.contacts.read',
'crm.objects.contacts.write',
'crm.objects.custom.read',
'crm.objects.custom.write',
'crm.objects.deals.read',
'crm.objects.deals.write',
'crm.objects.line_items.read',
'crm.schemas.line_items.read',
'crm.objects.owners.read',
'crm.schemas.companies.read',
'crm.schemas.contacts.read',
'crm.schemas.custom.read',
'crm.schemas.deals.read',
'crm.schemas.line_items.read',
'automation',
'e-commerce',
'tickets',
'content',
'settings.currencies.read',
'settings.users.read',
'settings.users.teams.read',
'files',
'forms'
// 'business_units_view.read'
],
});

Expand All @@ -46,12 +111,47 @@ export const hubspot = createPiece({
categories: [PieceCategory.SALES_AND_CRM],
auth: hubspotAuth,
actions: [
createHubspotContact,
hubSpotContactsCreateOrUpdateAction,
hubSpotListsAddContactAction,
hubSpotGetOwnerByEmailAction,
addContactToWorkflowAction,
createAssociationsAction,
createCompanyAction,
createContactAction,
createBlogPostAction,
createCustomObjectAction,
createDealAction,
createLineItemAction,
createOrUpdateContactAction,
createProductAction,
createTicketAction,
getCompanyAction,
getContactAction,
getCustomObjectAction,
getDealAction,
getLineItemAction,
getProductAction,
getTicketAction,
removeAssociationsAction,
removeContactFromListAction,
removeEmailSubscriptionAction,
updateCompanyAction,
updateContactAction,
updateCustomObjectAction,
updateDealAction,
updateLineItemAction,
updateProductAction,
updateTicketAction,
uploadFileAction,
findAssociationsAction,
findCompanyAction,
findContactAction,
findCustomObjectAction,
findDealAction,
findLineItemAction,
findProductAction,
findTicketAction,
getOwnerByEmailAction,
getOwnerByIdAction,
getPipelineStageDeatilsAction,
createCustomApiCallAction({
baseUrl: () => 'https://api.hubapi.com',
auth: hubspotAuth,
Expand All @@ -61,11 +161,29 @@ export const hubspot = createPiece({
}),
],
triggers: [
newTaskAdded,
newCompanyAdded,
newContactAdded,
newDealAdded,
newTicketAdded,
newOrUpdatedCompanyTrigger,
newOrUpdatedContactTrigger,
newDealPropertyChangeTrigger,
newEmailSubscriptionsTimelineTrigger,
newOrUpdatedLineItemTrigger,
newCompanyTrigger,
newCompanyPropertyChangeTrigger,
newContactTrigger,
newContactInListTrigger,
newContactPropertyChangeTrigger,
newBlogArticleTrigger,
newCustomObjectTrigger,
newCustomObjectPropertyChangeTrigger,
newDealTrigger,
newEmailEventTrigger,
newEngagementTrigger,
newFormSubmissionTrigger,
newLineItemTrigger,
newProductTrigger,
newTicketTrigger,
newTicketPropertyChangeTrigger,
newOrUpdatedProductTrigger,
newTaskTrigger,
dealStageUpdatedTrigger,
],
});
Original file line number Diff line number Diff line change
@@ -1,35 +1,36 @@
import { hubSpotListIdDropdown } from '../common/props';
import { hubSpotClient } from '../common/client';
import { staticListsDropdown } from '../common/props';
import { createAction, Property } from '@activepieces/pieces-framework';
import { assertNotNullOrUndefined } from '@activepieces/shared';
import { hubspotAuth } from '../../';
import { AuthenticationType, httpClient, HttpMethod } from '@activepieces/pieces-common';

export const hubSpotListsAddContactAction = createAction({
auth: hubspotAuth,
name: 'add_contact_to_list',
displayName: 'Add contact To List',
description: 'Add contact to list',
props: {
listId: hubSpotListIdDropdown,
email: Property.ShortText({
displayName: 'Email',
description: 'Contact email',
required: true,
}),
},
auth: hubspotAuth,
name: 'add_contact_to_list',
displayName: 'Add contact To List',
description: 'Add contact to list',
props: {
listId: staticListsDropdown,
email: Property.ShortText({
displayName: 'Contact Email',
required: true,
}),
},

async run(context) {
const token = context.auth.access_token;
const { listId, email } = context.propsValue;
async run(context) {
const { listId, email } = context.propsValue;

assertNotNullOrUndefined(token, 'token');
assertNotNullOrUndefined(listId, 'list');
assertNotNullOrUndefined(email, 'email');
const response = await httpClient.sendRequest({
method: HttpMethod.POST,
url: `https://api.hubapi.com/contacts/v1/lists/${listId}/add`,
body: {
emails: [email],
},
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: context.auth.access_token,
},
})

return await hubSpotClient.lists.addContact({
token,
listId,
email,
});
},
return response.body;
},
});
Loading

0 comments on commit 0f2fa50

Please sign in to comment.