diff --git a/components/hubspot/actions/create-task/create-task.mjs b/components/hubspot/actions/create-task/create-task.mjs new file mode 100644 index 0000000000000..def50ebd4ec9b --- /dev/null +++ b/components/hubspot/actions/create-task/create-task.mjs @@ -0,0 +1,123 @@ +import common from "../common/common-create.mjs"; +import { ConfigurationError } from "@pipedream/platform"; +import { ASSOCIATION_CATEGORY } from "../../common/constants.mjs"; + +export default { + ...common, + key: "hubspot-create-task", + name: "Create Task", + description: "Create a new task. [See the documentation](https://developers.hubspot.com/docs/api/crm/engagements)", + version: "0.0.1", + type: "action", + props: { + ...common.props, + toObjectType: { + propDefinition: [ + common.props.hubspot, + "objectType", + ], + label: "Associated Object Type", + description: "Type of object the engagement is being associated with", + optional: true, + }, + toObjectId: { + propDefinition: [ + common.props.hubspot, + "objectId", + (c) => ({ + objectType: c.toObjectType, + }), + ], + label: "Associated Object", + description: "ID of object the engagement is being associated with", + optional: true, + }, + associationType: { + propDefinition: [ + common.props.hubspot, + "associationType", + (c) => ({ + fromObjectType: "tasks", + toObjectType: c.toObjectType, + }), + ], + description: "A unique identifier to indicate the association type between the task and the other object", + optional: true, + }, + objectProperties: { + type: "object", + label: "Object Properties", + description: "Enter the `engagement` properties as a JSON object", + }, + }, + methods: { + ...common.methods, + getObjectType() { + return "tasks"; + }, + isRelevantProperty(property) { + return common.methods.isRelevantProperty(property) && !property.name.includes("hs_pipeline"); + }, + createEngagement(objectType, properties, associations, $) { + return this.hubspot.createObject({ + objectType, + data: { + properties, + associations, + }, + $, + }); + }, + }, + async run({ $ }) { + const { + hubspot, + /* eslint-disable no-unused-vars */ + toObjectType, + toObjectId, + associationType, + $db, + objectProperties, + ...otherProperties + } = this; + + if ((toObjectId && !associationType) || (!toObjectId && associationType)) { + throw new ConfigurationError("Both `toObjectId` and `associationType` must be entered"); + } + + const properties = objectProperties + ? typeof objectProperties === "string" + ? JSON.parse(objectProperties) + : objectProperties + : otherProperties; + + const objectType = this.getObjectType(); + + const associations = toObjectId + ? [ + { + to: { + id: toObjectId, + }, + types: [ + { + associationTypeId: associationType, + associationCategory: ASSOCIATION_CATEGORY.HUBSPOT_DEFINED, + }, + ], + }, + ] + : undefined; + + if (properties.hs_task_reminders) { + properties.hs_task_reminders = Date.parse(properties.hs_task_reminders); + } + + const engagement = await this.createEngagement(objectType, properties, associations, $); + + const objectName = hubspot.getObjectTypeName(objectType); + $.export("$summary", `Successfully created ${objectName}`); + + return engagement; + }, +}; diff --git a/components/hubspot/package.json b/components/hubspot/package.json index 9e242344a99c9..67a7656a514fe 100644 --- a/components/hubspot/package.json +++ b/components/hubspot/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/hubspot", - "version": "1.1.0", + "version": "1.2.0", "description": "Pipedream Hubspot Components", "main": "hubspot.app.mjs", "keywords": [