diff --git a/components/hubspot/actions/add-contact-to-list/add-contact-to-list.mjs b/components/hubspot/actions/add-contact-to-list/add-contact-to-list.mjs index 31794556617fb..33e223eeb3ec5 100644 --- a/components/hubspot/actions/add-contact-to-list/add-contact-to-list.mjs +++ b/components/hubspot/actions/add-contact-to-list/add-contact-to-list.mjs @@ -4,7 +4,7 @@ export default { key: "hubspot-add-contact-to-list", name: "Add Contact to List", description: "Adds a contact to a specific static list. [See the documentation](https://legacydocs.hubspot.com/docs/methods/lists/add_contact_to_list)", - version: "0.0.15", + version: "0.0.16", type: "action", props: { hubspot, diff --git a/components/hubspot/actions/batch-create-or-update-contact/batch-create-or-update-contact.mjs b/components/hubspot/actions/batch-create-or-update-contact/batch-create-or-update-contact.mjs index 7f0318fcc4114..3d9ab4edb1bd0 100644 --- a/components/hubspot/actions/batch-create-or-update-contact/batch-create-or-update-contact.mjs +++ b/components/hubspot/actions/batch-create-or-update-contact/batch-create-or-update-contact.mjs @@ -4,7 +4,7 @@ export default { key: "hubspot-batch-create-or-update-contact", name: "Batch Create or Update Contact", description: "Create or update a batch of contacts by its ID or email. [See the documentation](https://developers.hubspot.com/docs/api/crm/contacts)", - version: "0.0.12", + version: "0.0.13", type: "action", props: { hubspot, diff --git a/components/hubspot/actions/common/common-get-object.mjs b/components/hubspot/actions/common/common-get-object.mjs index 2778189222b4a..1df10d5098c45 100644 --- a/components/hubspot/actions/common/common-get-object.mjs +++ b/components/hubspot/actions/common/common-get-object.mjs @@ -6,6 +6,8 @@ import { DEFAULT_TICKET_PROPERTIES, DEFAULT_PRODUCT_PROPERTIES, DEFAULT_LINE_ITEM_PROPERTIES, + DEFAULT_MEETING_PROPERTIES, + OBJECT_TYPE, } from "../../common/constants.mjs"; export default { @@ -62,18 +64,20 @@ export default { throw new Error("getObjectType is not implemented"); }, getDefaultProperties(objectType) { - if (objectType === "contact") { + if (objectType === OBJECT_TYPE.CONTACT) { return DEFAULT_CONTACT_PROPERTIES; - } else if (objectType === "company") { + } else if (objectType === OBJECT_TYPE.COMPANY) { return DEFAULT_COMPANY_PROPERTIES; - } else if (objectType === "deal") { + } else if (objectType === OBJECT_TYPE.DEAL) { return DEFAULT_DEAL_PROPERTIES; - } else if (objectType === "ticket") { + } else if (objectType === OBJECT_TYPE.TICKET) { return DEFAULT_TICKET_PROPERTIES; - } else if (objectType === "product") { + } else if (objectType === OBJECT_TYPE.PRODUCT) { return DEFAULT_PRODUCT_PROPERTIES; - } else if (objectType === "line_item") { + } else if (objectType === OBJECT_TYPE.LINE_ITEM) { return DEFAULT_LINE_ITEM_PROPERTIES; + } else if (objectType === OBJECT_TYPE.MEETING) { + return DEFAULT_MEETING_PROPERTIES; } else { return []; } diff --git a/components/hubspot/actions/create-associations/create-associations.mjs b/components/hubspot/actions/create-associations/create-associations.mjs index 82d5e01d202d7..d184ec969e660 100644 --- a/components/hubspot/actions/create-associations/create-associations.mjs +++ b/components/hubspot/actions/create-associations/create-associations.mjs @@ -5,7 +5,7 @@ export default { key: "hubspot-create-associations", name: "Create Associations", description: "Create associations between objects. [See the documentation](https://developers.hubspot.com/docs/api/crm/associations#endpoint?spec=POST-/crm/v3/associations/{fromObjectType}/{toObjectType}/batch/create)", - version: "1.0.1", + version: "1.0.2", type: "action", props: { hubspot, diff --git a/components/hubspot/actions/create-communication/create-communication.mjs b/components/hubspot/actions/create-communication/create-communication.mjs index 934de9e770b6e..b9f22a19fbb18 100644 --- a/components/hubspot/actions/create-communication/create-communication.mjs +++ b/components/hubspot/actions/create-communication/create-communication.mjs @@ -8,7 +8,7 @@ export default { key: "hubspot-create-communication", name: "Create Communication", description: "Create a WhatsApp, LinkedIn, or SMS message. [See the documentation](https://developers.hubspot.com/beta-docs/reference/api/crm/engagements/communications/v3#post-%2Fcrm%2Fv3%2Fobjects%2Fcommunications)", - version: "0.0.8", + version: "0.0.9", type: "action", props: { ...appProp.props, diff --git a/components/hubspot/actions/create-company/create-company.mjs b/components/hubspot/actions/create-company/create-company.mjs index 011d88d794144..f58e828ce7040 100644 --- a/components/hubspot/actions/create-company/create-company.mjs +++ b/components/hubspot/actions/create-company/create-company.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-create-company", name: "Create Company", description: "Create a company in Hubspot. [See the documentation](https://developers.hubspot.com/docs/api/crm/companies#endpoint?spec=POST-/crm/v3/objects/companies)", - version: "0.0.19", + version: "0.0.20", type: "action", methods: { ...common.methods, diff --git a/components/hubspot/actions/create-custom-object/create-custom-object.mjs b/components/hubspot/actions/create-custom-object/create-custom-object.mjs index b280efbac4465..a05e35439ec5c 100644 --- a/components/hubspot/actions/create-custom-object/create-custom-object.mjs +++ b/components/hubspot/actions/create-custom-object/create-custom-object.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-create-custom-object", name: "Create Custom Object", description: "Create a new custom object in Hubspot. [See the documentation](https://developers.hubspot.com/beta-docs/guides/api/crm/objects/custom-objects#create-a-custom-object)", - version: "1.0.1", + version: "1.0.2", type: "action", props: { ...appProp.props, diff --git a/components/hubspot/actions/create-deal/create-deal.mjs b/components/hubspot/actions/create-deal/create-deal.mjs index f1df111457484..6e8e89219d004 100644 --- a/components/hubspot/actions/create-deal/create-deal.mjs +++ b/components/hubspot/actions/create-deal/create-deal.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-create-deal", name: "Create Deal", description: "Create a deal in Hubspot. [See the documentation](https://developers.hubspot.com/docs/api/crm/deals#endpoint?spec=POST-/crm/v3/objects/deals)", - version: "0.0.19", + version: "0.0.20", type: "action", props: { ...common.props, diff --git a/components/hubspot/actions/create-engagement/create-engagement.mjs b/components/hubspot/actions/create-engagement/create-engagement.mjs index 4bd96746f2b1d..b62ee5d34278b 100644 --- a/components/hubspot/actions/create-engagement/create-engagement.mjs +++ b/components/hubspot/actions/create-engagement/create-engagement.mjs @@ -9,7 +9,7 @@ export default { key: "hubspot-create-engagement", name: "Create Engagement", description: "Create a new engagement for a contact. [See the documentation](https://developers.hubspot.com/docs/api/crm/engagements)", - version: "0.0.18", + version: "0.0.19", type: "action", props: { ...common.props, diff --git a/components/hubspot/actions/create-lead/create-lead.mjs b/components/hubspot/actions/create-lead/create-lead.mjs index 12dd920fda594..275d434fd8a83 100644 --- a/components/hubspot/actions/create-lead/create-lead.mjs +++ b/components/hubspot/actions/create-lead/create-lead.mjs @@ -9,7 +9,7 @@ export default { key: "hubspot-create-lead", name: "Create Lead", description: "Create a lead in Hubspot. [See the documentation](https://developers.hubspot.com/beta-docs/guides/api/crm/objects/leads#create-leads)", - version: "0.0.7", + version: "0.0.8", type: "action", props: { ...appProp.props, diff --git a/components/hubspot/actions/create-meeting/create-meeting.mjs b/components/hubspot/actions/create-meeting/create-meeting.mjs new file mode 100644 index 0000000000000..0ac0f2653419c --- /dev/null +++ b/components/hubspot/actions/create-meeting/create-meeting.mjs @@ -0,0 +1,115 @@ +/* eslint-disable no-unused-vars */ +import common from "../common/common-create.mjs"; +import { ConfigurationError } from "@pipedream/platform"; +import { + ASSOCIATION_CATEGORY, OBJECT_TYPE, +} from "../../common/constants.mjs"; + +export default { + ...common, + key: "hubspot-create-meeting", + name: "Create Meeting", + description: "Creates a new meeting with optional associations to other objects. [See the documentation](https://developers.hubspot.com/docs/reference/api/crm/engagements/meetings#post-%2Fcrm%2Fv3%2Fobjects%2Fmeetings)", + version: "0.0.1", + type: "action", + props: { + ...common.props, + toObjectType: { + propDefinition: [ + common.props.hubspot, + "objectType", + ], + label: "Associated Object Type", + description: "Type of object the meeting is being associated with", + }, + toObjectId: { + propDefinition: [ + common.props.hubspot, + "objectId", + (c) => ({ + objectType: c.toObjectType, + }), + ], + label: "Associated Object", + description: "ID of object the meeting is being associated with", + optional: true, + }, + associationType: { + propDefinition: [ + common.props.hubspot, + "associationType", + (c) => ({ + fromObjectType: "meetings", + toObjectType: c.toObjectType, + }), + ], + description: "A unique identifier to indicate the association type between the meeting and the other object", + optional: true, + }, + objectProperties: { + type: "object", + label: "Meeting Properties", + description: "Enter the meeting properties as a JSON object. Required properties: hs_meeting_title, hs_meeting_body, hs_meeting_start_time, hs_meeting_end_time. Optional: hs_meeting_status", + }, + }, + methods: { + ...common.methods, + getObjectType() { + return OBJECT_TYPE.MEETING; + }, + isRelevantProperty(property) { + return common.methods.isRelevantProperty(property); + }, + createMeeting(properties, associations, $) { + return this.hubspot.createMeeting({ + data: { + properties, + associations, + }, + $, + }); + }, + }, + async run({ $ }) { + const { + hubspot, + toObjectType, + toObjectId, + associationType, + 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 associations = toObjectId + ? [ + { + to: { + id: toObjectId, + }, + types: [ + { + associationTypeId: associationType, + associationCategory: ASSOCIATION_CATEGORY.HUBSPOT_DEFINED, + }, + ], + }, + ] + : undefined; + + const meeting = await this.createMeeting(properties, associations, $); + + $.export("$summary", `Successfully created meeting "${properties.hs_meeting_title}"`); + + return meeting; + }, +}; diff --git a/components/hubspot/actions/create-or-update-contact/create-or-update-contact.mjs b/components/hubspot/actions/create-or-update-contact/create-or-update-contact.mjs index 2046af949f9d6..ed107426ff734 100644 --- a/components/hubspot/actions/create-or-update-contact/create-or-update-contact.mjs +++ b/components/hubspot/actions/create-or-update-contact/create-or-update-contact.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-create-or-update-contact", name: "Create or Update Contact", description: "Create or update a contact in Hubspot. [See the documentation](https://developers.hubspot.com/docs/api/crm/contacts#endpoint?spec=POST-/crm/v3/objects/contacts)", - version: "0.0.17", + version: "0.0.18", type: "action", props: { ...common.props, diff --git a/components/hubspot/actions/create-ticket/create-ticket.mjs b/components/hubspot/actions/create-ticket/create-ticket.mjs index f5c8c8b1ca360..50b381c78a72f 100644 --- a/components/hubspot/actions/create-ticket/create-ticket.mjs +++ b/components/hubspot/actions/create-ticket/create-ticket.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-create-ticket", name: "Create Ticket", description: "Create a ticket in Hubspot. [See the documentation](https://developers.hubspot.com/docs/api/crm/tickets)", - version: "0.0.10", + version: "0.0.11", type: "action", props: { ...common.props, diff --git a/components/hubspot/actions/enroll-contact-into-workflow/enroll-contact-into-workflow.mjs b/components/hubspot/actions/enroll-contact-into-workflow/enroll-contact-into-workflow.mjs index 4b4828cf655e1..cf6741bbb4036 100644 --- a/components/hubspot/actions/enroll-contact-into-workflow/enroll-contact-into-workflow.mjs +++ b/components/hubspot/actions/enroll-contact-into-workflow/enroll-contact-into-workflow.mjs @@ -4,7 +4,7 @@ export default { key: "hubspot-enroll-contact-into-workflow", name: "Enroll Contact Into Workflow", description: "Add a contact to a workflow. Note: The Workflows API currently only supports contact-based workflows and is only available for Marketing Hub Enterprise accounts. [See the documentation](https://legacydocs.hubspot.com/docs/methods/workflows/add_contact)", - version: "0.0.15", + version: "0.0.16", type: "action", props: { hubspot, diff --git a/components/hubspot/actions/get-associated-meetings/get-associated-meetings.mjs b/components/hubspot/actions/get-associated-meetings/get-associated-meetings.mjs new file mode 100644 index 0000000000000..adec5bc1be5c8 --- /dev/null +++ b/components/hubspot/actions/get-associated-meetings/get-associated-meetings.mjs @@ -0,0 +1,311 @@ +import { DEFAULT_MEETING_PROPERTIES } from "../../common/constants.mjs"; +import { OBJECT_TYPE } from "../../common/object-types.mjs"; +import hubspot from "../../hubspot.app.mjs"; + +export default { + key: "hubspot-get-associated-meetings", + name: "Get Associated Meetings", + description: "Retrieves meetings associated with a specific object (contact, company, or deal) with optional time filtering. [See the documentation](https://developers.hubspot.com/docs/reference/api/crm/associations/association-details#get-%2Fcrm%2Fv4%2Fobjects%2F%7Bobjecttype%7D%2F%7Bobjectid%7D%2Fassociations%2F%7Btoobjecttype%7D)", + version: "0.0.1", + type: "action", + props: { + hubspot, + objectType: { + propDefinition: [ + hubspot, + "objectType", + () => ({ + includeCustom: true, + }), + ], + label: "From Object Type", + description: "The type of the object being associated", + }, + objectId: { + type: "string", + label: "Object ID", + description: "The ID of the object to get associated meetings for. For contacts, you can search by email.", + propDefinition: [ + hubspot, + "objectIds", + ({ objectType }) => ({ + objectType, + }), + ], + }, + timeframe: { + propDefinition: [ + hubspot, + "timeframe", + ], + }, + mostRecent: { + propDefinition: [ + hubspot, + "mostRecent", + ], + }, + additionalProperties: { + type: "string[]", + label: "Additional Properties", + description: "Additional properties to retrieve for the meetings", + optional: true, + }, + }, + additionalProps() { + const { timeframe } = this; + if (timeframe !== "custom") { + return {}; + } + return { + startDate: { + type: "string", + label: "Start Date", + description: "The start date to filter meetings from (ISO 8601 format). Eg. `2025-01-01T00:00:00Z`", + }, + endDate: { + type: "string", + label: "End Date", + description: "The end date to filter meetings to (ISO 8601 format). Eg. `2025-01-31T23:59:59Z`", + }, + }; + }, + methods: { + getMeetingTimeFilter(timeframe, startDate, endDate) { + const now = new Date(); + const startOfDay = new Date( + Date.UTC( + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate(), + 0, + 0, + 0, + 0, + ), + ).toISOString(); + const endOfDay = new Date( + Date.UTC( + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate(), + 23, + 59, + 59, + 999, + ), + ).toISOString(); + + switch (timeframe) { + case "today": + return { + hs_meeting_start_time: { + operator: "GTE", + value: startOfDay, + }, + hs_meeting_end_time: { + operator: "LTE", + value: endOfDay, + }, + }; + case "this_week": { + const dayOfWeek = now.getUTCDay(); + const startOfWeek = new Date( + Date.UTC( + now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() - dayOfWeek, 0, 0, 0, 0, + ), + ).toISOString(); + const endOfWeek = new Date( + Date.UTC( + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() + (6 - dayOfWeek), + 23, + 59, + 59, + 999, + ), + ).toISOString(); + return { + hs_meeting_start_time: { + operator: "GTE", + value: startOfWeek, + }, + hs_meeting_end_time: { + operator: "LTE", + value: endOfWeek, + }, + }; + } + case "this_month": { + const startOfMonth = new Date( + Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), 1, 0, 0, 0, 0), + ).toISOString(); + const endOfMonth = new Date( + Date.UTC(now.getUTCFullYear(), now.getUTCMonth() + 1, 0, 23, 59, 59, 999), + ).toISOString(); + return { + hs_meeting_start_time: { + value: startOfMonth, + operator: "GTE", + }, + hs_meeting_end_time: { + value: endOfMonth, + operator: "LTE", + }, + }; + } + case "last_month": { + const startOfLastMonth = new Date( + Date.UTC( + now.getUTCFullYear(), + now.getUTCMonth() - 1, + 1, + 0, + 0, + 0, + 0, + ), + ).toISOString(); + const endOfLastMonth = new Date( + Date.UTC( + now.getUTCFullYear(), + now.getUTCMonth(), + 0, + 23, + 59, + 59, + 999, + ), + ).toISOString(); + return { + hs_meeting_start_time: { + operator: "GTE", + value: startOfLastMonth, + }, + hs_meeting_end_time: { + operator: "LTE", + value: endOfLastMonth, + }, + }; + } + case "custom": + return { + hs_meeting_start_time: { + operator: "LTE", + value: startDate, + }, + hs_meeting_end_time: { + operator: "GTE", + value: endDate, + }, + }; + default: + return {}; + } + }, + async getAssociatedMeetings({ + objectType, + objectId, + timeframe, + startDate, + endDate, + mostRecent, + }) { + const { results: associations } = await this.hubspot.getAssociations({ + objectType, + objectId, + toObjectType: OBJECT_TYPE.MEETING, + }); + + if (!associations?.length) { + return []; + } + + const meetingIds = associations.map(({ toObjectId }) => toObjectId); + + const timeFilter = this.getMeetingTimeFilter(timeframe, startDate, endDate); + + const { results } = await this.hubspot.searchMeetings({ + data: { + properties: [ + ...DEFAULT_MEETING_PROPERTIES, + ...(this.additionalProperties || []), + ], + filterGroups: [ + { + filters: [ + { + propertyName: "id", + operator: "IN", + values: meetingIds, + }, + ...Object.entries(timeFilter) + .map(([ + propertyName, + filterProps, + ]) => ({ + propertyName, + ...filterProps, + })), + ], + }, + ], + sorts: [ + { + propertyName: "hs_meeting_start_time", + direction: "DESCENDING", + }, + ], + limit: mostRecent + ? 1 + : 100, + }, + }); + + return results; + }, + }, + async run({ $ }) { + let resolvedObjectId = this.objectId; + if (this.objectType === OBJECT_TYPE.CONTACT && this.objectId.includes("@")) { + const { results } = await this.hubspot.searchCRM({ + object: OBJECT_TYPE.CONTACT, + data: { + filterGroups: [ + { + filters: [ + { + propertyName: "email", + operator: "EQ", + value: this.objectId, + }, + ], + }, + ], + }, + }); + if (!results?.length) { + throw new Error(`No contact found with email: ${this.objectId}`); + } + resolvedObjectId = results[0].id; + } + + const meetings = await this.getAssociatedMeetings({ + objectType: this.objectType, + objectId: resolvedObjectId, + timeframe: this.timeframe, + startDate: this.startDate, + endDate: this.endDate, + mostRecent: this.mostRecent, + }); + + const summary = this.mostRecent + ? "Successfully retrieved most recent meeting" + : `Successfully retrieved ${meetings.length} meeting(s)`; + + $.export("$summary", summary); + + return meetings; + }, +}; diff --git a/components/hubspot/actions/get-company/get-company.mjs b/components/hubspot/actions/get-company/get-company.mjs index 576e7025fa73f..c5b9b71f0858f 100644 --- a/components/hubspot/actions/get-company/get-company.mjs +++ b/components/hubspot/actions/get-company/get-company.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-get-company", name: "Get Company", description: "Gets a company. [See the documentation](https://developers.hubspot.com/docs/api/crm/companies#endpoint?spec=GET-/crm/v3/objects/companies/{companyId})", - version: "0.0.15", + version: "0.0.16", type: "action", props: { ...common.props, diff --git a/components/hubspot/actions/get-contact/get-contact.mjs b/components/hubspot/actions/get-contact/get-contact.mjs index ca69096e5e8ce..f00da7bfb3c00 100644 --- a/components/hubspot/actions/get-contact/get-contact.mjs +++ b/components/hubspot/actions/get-contact/get-contact.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-get-contact", name: "Get Contact", description: "Gets a contact. [See the documentation](https://developers.hubspot.com/docs/api/crm/contacts#endpoint?spec=GET-/crm/v3/objects/contacts/{contactId})", - version: "0.0.15", + version: "0.0.16", type: "action", props: { ...common.props, diff --git a/components/hubspot/actions/get-deal/get-deal.mjs b/components/hubspot/actions/get-deal/get-deal.mjs index 613654e11afe5..6fefebf674eea 100644 --- a/components/hubspot/actions/get-deal/get-deal.mjs +++ b/components/hubspot/actions/get-deal/get-deal.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-get-deal", name: "Get Deal", description: "Gets a deal. [See the documentation](https://developers.hubspot.com/docs/api/crm/deals#endpoint?spec=GET-/crm/v3/objects/deals/{dealId})", - version: "0.0.15", + version: "0.0.16", type: "action", props: { ...common.props, diff --git a/components/hubspot/actions/get-file-public-url/get-file-public-url.mjs b/components/hubspot/actions/get-file-public-url/get-file-public-url.mjs index 4a2ebadb71e96..634529045826f 100644 --- a/components/hubspot/actions/get-file-public-url/get-file-public-url.mjs +++ b/components/hubspot/actions/get-file-public-url/get-file-public-url.mjs @@ -4,7 +4,7 @@ export default { key: "hubspot-get-file-public-url", name: "Get File Public URL", description: "Get a publicly available URL for a file that was uploaded using a Hubspot form. [See the documentation](https://developers.hubspot.com/docs/api/files/files#endpoint?spec=GET-/files/v3/files/{fileId}/signed-url)", - version: "0.0.15", + version: "0.0.16", type: "action", props: { hubspot, diff --git a/components/hubspot/actions/get-meeting/get-meeting.mjs b/components/hubspot/actions/get-meeting/get-meeting.mjs new file mode 100644 index 0000000000000..0505e7999a53e --- /dev/null +++ b/components/hubspot/actions/get-meeting/get-meeting.mjs @@ -0,0 +1,25 @@ +import { OBJECT_TYPE } from "../../common/constants.mjs"; +import common from "../common/common-get-object.mjs"; + +export default { + ...common, + key: "hubspot-get-meeting", + name: "Get Meeting", + description: "Retrieves a specific meeting by its ID. [See the documentation](https://developers.hubspot.com/docs/reference/api/crm/engagements/meetings#get-%2Fcrm%2Fv3%2Fobjects%2Fmeetings%2F%7Bmeetingid%7D)", + version: "0.0.1", + type: "action", + props: { + ...common.props, + objectId: { + ...common.props.objectId, + label: "Meeting ID", + description: "Hubspot's internal ID for the meeting", + }, + }, + methods: { + ...common.methods, + getObjectType() { + return OBJECT_TYPE.MEETING; + }, + }, +}; diff --git a/components/hubspot/actions/search-crm/search-crm.mjs b/components/hubspot/actions/search-crm/search-crm.mjs index e0bcbc837d568..4492a2fd5a438 100644 --- a/components/hubspot/actions/search-crm/search-crm.mjs +++ b/components/hubspot/actions/search-crm/search-crm.mjs @@ -16,7 +16,7 @@ export default { key: "hubspot-search-crm", name: "Search CRM", description: "Search companies, contacts, deals, feedback submissions, products, tickets, line-items, quotes, leads, or custom objects. [See the documentation](https://developers.hubspot.com/docs/api/crm/search)", - version: "1.0.1", + version: "1.0.2", type: "action", props: { hubspot, diff --git a/components/hubspot/actions/update-company/update-company.mjs b/components/hubspot/actions/update-company/update-company.mjs index 90ebf5d8811d1..9b53a5b68a88f 100644 --- a/components/hubspot/actions/update-company/update-company.mjs +++ b/components/hubspot/actions/update-company/update-company.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-update-company", name: "Update Company", description: "Update a company in Hubspot. [See the documentation](https://developers.hubspot.com/docs/api/crm/companies)", - version: "0.0.15", + version: "0.0.16", type: "action", methods: { ...common.methods, diff --git a/components/hubspot/actions/update-contact/update-contact.mjs b/components/hubspot/actions/update-contact/update-contact.mjs index a7fa361af4e26..6d091975db69b 100644 --- a/components/hubspot/actions/update-contact/update-contact.mjs +++ b/components/hubspot/actions/update-contact/update-contact.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-update-contact", name: "Update Contact", description: "Update a contact in Hubspot. [See the documentation](https://developers.hubspot.com/docs/api/crm/contacts#endpoint?spec=POST-/crm/v3/objects/contacts)", - version: "0.0.16", + version: "0.0.17", type: "action", methods: { ...common.methods, diff --git a/components/hubspot/actions/update-custom-object/update-custom-object.mjs b/components/hubspot/actions/update-custom-object/update-custom-object.mjs index 464210420b329..e9769ab54e1a2 100644 --- a/components/hubspot/actions/update-custom-object/update-custom-object.mjs +++ b/components/hubspot/actions/update-custom-object/update-custom-object.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-update-custom-object", name: "Update Custom Object", description: "Update a custom object in Hubspot. [See the documentation](https://developers.hubspot.com/beta-docs/guides/api/crm/objects/custom-objects#update-existing-custom-objects)", - version: "1.0.1", + version: "1.0.2", type: "action", methods: { ...common.methods, diff --git a/components/hubspot/actions/update-deal/update-deal.mjs b/components/hubspot/actions/update-deal/update-deal.mjs index 271cb2033ec61..2922dba69f011 100644 --- a/components/hubspot/actions/update-deal/update-deal.mjs +++ b/components/hubspot/actions/update-deal/update-deal.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-update-deal", name: "Update Deal", description: "Update a deal in Hubspot. [See the documentation](https://developers.hubspot.com/beta-docs/guides/api/crm/objects/deals#update-deals)", - version: "0.0.6", + version: "0.0.7", type: "action", methods: { ...common.methods, diff --git a/components/hubspot/actions/update-lead/update-lead.mjs b/components/hubspot/actions/update-lead/update-lead.mjs index f8815f3ba1422..152980866b57e 100644 --- a/components/hubspot/actions/update-lead/update-lead.mjs +++ b/components/hubspot/actions/update-lead/update-lead.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-update-lead", name: "Update Lead", description: "Update a lead in Hubspot. [See the documentation](https://developers.hubspot.com/beta-docs/guides/api/crm/objects/leads#update-leads)", - version: "0.0.7", + version: "0.0.8", type: "action", methods: { ...common.methods, diff --git a/components/hubspot/common/constants.mjs b/components/hubspot/common/constants.mjs index ee3cabcfcad7b..3301483f693cc 100644 --- a/components/hubspot/common/constants.mjs +++ b/components/hubspot/common/constants.mjs @@ -170,6 +170,19 @@ const DEFAULT_LEAD_PROPERTIES = [ "hs_associated_company_name", ]; +const DEFAULT_MEETING_PROPERTIES = [ + "hs_timestamp", + "hubspot_owner_id", + "hs_meeting_title", + "hs_meeting_body", + "hs_internal_meeting_notes", + "hs_meeting_external_url", + "hs_meeting_location", + "hs_meeting_start_time", + "hs_meeting_end_time", + "hs_meeting_outcome", +]; + const ENGAGEMENT_TYPE_OPTIONS = [ { label: "Note", @@ -210,4 +223,5 @@ export { DEFAULT_LINE_ITEM_PROPERTIES, DEFAULT_LEAD_PROPERTIES, ENGAGEMENT_TYPE_OPTIONS, + DEFAULT_MEETING_PROPERTIES, }; diff --git a/components/hubspot/hubspot.app.mjs b/components/hubspot/hubspot.app.mjs index df59641b285a1..fcd362280f7e1 100644 --- a/components/hubspot/hubspot.app.mjs +++ b/components/hubspot/hubspot.app.mjs @@ -448,6 +448,56 @@ export default { }) ) || []; }, }, + timeframe: { + type: "string", + label: "Time Frame", + description: "Filter meetings within a specific time frame", + optional: true, + reloadProps: true, + options: [ + { + label: "Today", + value: "today", + }, + { + label: "This Week", + value: "this_week", + }, + { + label: "This Month", + value: "this_month", + }, + { + label: "Last Month", + value: "last_month", + }, + { + label: "Custom Range", + value: "custom", + }, + ], + }, + mostRecent: { + type: "boolean", + label: "Most Recent Only", + description: "Only return the most recent meeting", + optional: true, + default: false, + }, + meetingId: { + type: "string", + label: "Meeting ID", + description: "The ID of the meeting to retrieve", + useQuery: true, + async options({ query }) { + const { results } = await this.searchMeetings({ + data: { + query, + }, + }); + return results.map(({ id }) => id); + }, + }, }, methods: { _getHeaders() { @@ -1042,5 +1092,55 @@ export default { ...opts, }); }, + getAssociations({ + objectType, objectId, toObjectType, ...opts + } = {}) { + return this.makeRequest({ + api: API_PATH.CRMV4, + endpoint: `/objects/${objectType}/${objectId}/associations/${toObjectType}`, + ...opts, + }); + }, + /** + * Get meeting by ID + * @param {string} meetingId - The ID of the meeting to retrieve + * @param {object} opts - Additional options to pass to the request + * @returns {Promise} The meeting object + */ + getMeeting({ + meetingId, ...opts + }) { + return this.makeRequest({ + api: API_PATH.CRMV3, + endpoint: `/objects/meetings/${meetingId}`, + ...opts, + }); + }, + /** + * Create a new meeting + * @param {object} opts - The meeting data and request options + * @returns {Promise} The created meeting object + */ + createMeeting(opts = {}) { + return this.makeRequest({ + api: API_PATH.CRMV3, + endpoint: "/objects/meetings", + method: "POST", + ...opts, + }); + }, + /** + * Search meetings using a filter + * @param {object} opts - Search parameters and request options + * @returns {Promise} Search results + */ + searchMeetings(opts = {}) { + return this.makeRequest({ + api: API_PATH.CRMV3, + endpoint: "/objects/meetings/search", + method: "POST", + ...opts, + }); + }, }, }; diff --git a/components/hubspot/package.json b/components/hubspot/package.json index d8c0d9e78b980..9e242344a99c9 100644 --- a/components/hubspot/package.json +++ b/components/hubspot/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/hubspot", - "version": "1.0.2", + "version": "1.1.0", "description": "Pipedream Hubspot Components", "main": "hubspot.app.mjs", "keywords": [ diff --git a/components/hubspot/sources/delete-blog-article/delete-blog-article.mjs b/components/hubspot/sources/delete-blog-article/delete-blog-article.mjs index ce8556ea9e947..50a707ea9cbae 100644 --- a/components/hubspot/sources/delete-blog-article/delete-blog-article.mjs +++ b/components/hubspot/sources/delete-blog-article/delete-blog-article.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-delete-blog-article", name: "Deleted Blog Posts", description: "Emit new event for each deleted blog post.", - version: "0.0.20", + version: "0.0.21", dedupe: "unique", type: "source", methods: { diff --git a/components/hubspot/sources/new-company-property-change/new-company-property-change.mjs b/components/hubspot/sources/new-company-property-change/new-company-property-change.mjs index 83840964d1fa9..939082c3e6dc8 100644 --- a/components/hubspot/sources/new-company-property-change/new-company-property-change.mjs +++ b/components/hubspot/sources/new-company-property-change/new-company-property-change.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-new-company-property-change", name: "New Company Property Change", description: "Emit new event when a specified property is provided or updated on a company. [See the documentation](https://developers.hubspot.com/docs/api/crm/companies)", - version: "0.0.13", + version: "0.0.14", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-contact-property-change/new-contact-property-change.mjs b/components/hubspot/sources/new-contact-property-change/new-contact-property-change.mjs index 712f73d16f8b6..a268d9e49ca42 100644 --- a/components/hubspot/sources/new-contact-property-change/new-contact-property-change.mjs +++ b/components/hubspot/sources/new-contact-property-change/new-contact-property-change.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-new-contact-property-change", name: "New Contact Property Change", description: "Emit new event when a specified property is provided or updated on a contact. [See the documentation](https://developers.hubspot.com/docs/api/crm/contacts)", - version: "0.0.15", + version: "0.0.16", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-custom-object-property-change/new-custom-object-property-change.mjs b/components/hubspot/sources/new-custom-object-property-change/new-custom-object-property-change.mjs index 3d97ce58a6deb..f692f1160544e 100644 --- a/components/hubspot/sources/new-custom-object-property-change/new-custom-object-property-change.mjs +++ b/components/hubspot/sources/new-custom-object-property-change/new-custom-object-property-change.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-new-custom-object-property-change", name: "New Custom Object Property Change", description: "Emit new event when a specified property is provided or updated on a custom object.", - version: "0.0.5", + version: "0.0.6", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-deal-in-stage/new-deal-in-stage.mjs b/components/hubspot/sources/new-deal-in-stage/new-deal-in-stage.mjs index a93b4266218e0..e724c5ac89bc2 100644 --- a/components/hubspot/sources/new-deal-in-stage/new-deal-in-stage.mjs +++ b/components/hubspot/sources/new-deal-in-stage/new-deal-in-stage.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-new-deal-in-stage", name: "New Deal In Stage", description: "Emit new event for each new deal in a stage.", - version: "0.0.25", + version: "0.0.26", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-deal-property-change/new-deal-property-change.mjs b/components/hubspot/sources/new-deal-property-change/new-deal-property-change.mjs index a85944a7e3a37..e136f3d7e2acb 100644 --- a/components/hubspot/sources/new-deal-property-change/new-deal-property-change.mjs +++ b/components/hubspot/sources/new-deal-property-change/new-deal-property-change.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-new-deal-property-change", name: "New Deal Property Change", description: "Emit new event when a specified property is provided or updated on a deal. [See the documentation](https://developers.hubspot.com/docs/api/crm/deals)", - version: "0.0.14", + version: "0.0.15", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-email-event/new-email-event.mjs b/components/hubspot/sources/new-email-event/new-email-event.mjs index 1cde692ef8ef3..889a3b8af7b25 100644 --- a/components/hubspot/sources/new-email-event/new-email-event.mjs +++ b/components/hubspot/sources/new-email-event/new-email-event.mjs @@ -8,7 +8,7 @@ export default { key: "hubspot-new-email-event", name: "New Email Event", description: "Emit new event for each new Hubspot email event.", - version: "0.0.23", + version: "0.0.24", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-email-subscriptions-timeline/new-email-subscriptions-timeline.mjs b/components/hubspot/sources/new-email-subscriptions-timeline/new-email-subscriptions-timeline.mjs index 1898515cfd9b7..94e08bdbadffd 100644 --- a/components/hubspot/sources/new-email-subscriptions-timeline/new-email-subscriptions-timeline.mjs +++ b/components/hubspot/sources/new-email-subscriptions-timeline/new-email-subscriptions-timeline.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-new-email-subscriptions-timeline", name: "New Email Subscriptions Timeline", description: "Emit new event when a new email timeline subscription is added for the portal.", - version: "0.0.20", + version: "0.0.21", dedupe: "unique", type: "source", methods: { diff --git a/components/hubspot/sources/new-engagement/new-engagement.mjs b/components/hubspot/sources/new-engagement/new-engagement.mjs index 4615cc874ab51..d39ee49b68491 100644 --- a/components/hubspot/sources/new-engagement/new-engagement.mjs +++ b/components/hubspot/sources/new-engagement/new-engagement.mjs @@ -8,7 +8,7 @@ export default { key: "hubspot-new-engagement", name: "New Engagement", description: "Emit new event for each new engagement created. This action returns a maximum of 5000 records at a time, make sure you set a correct time range so you don't miss any events", - version: "0.0.25", + version: "0.0.26", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-event/new-event.mjs b/components/hubspot/sources/new-event/new-event.mjs index 9ab19f511e643..4f2bf330f13ad 100644 --- a/components/hubspot/sources/new-event/new-event.mjs +++ b/components/hubspot/sources/new-event/new-event.mjs @@ -8,7 +8,7 @@ export default { key: "hubspot-new-event", name: "New Events", description: "Emit new event for each new Hubspot event. Note: Only available for Marketing Hub Enterprise, Sales Hub Enterprise, Service Hub Enterprise, or CMS Hub Enterprise accounts", - version: "0.0.24", + version: "0.0.25", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-form-submission/new-form-submission.mjs b/components/hubspot/sources/new-form-submission/new-form-submission.mjs index 9aa75bc9b87e5..80b5a64fd3422 100644 --- a/components/hubspot/sources/new-form-submission/new-form-submission.mjs +++ b/components/hubspot/sources/new-form-submission/new-form-submission.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-new-form-submission", name: "New Form Submission", description: "Emit new event for each new submission of a form.", - version: "0.0.25", + version: "0.0.26", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-note/new-note.mjs b/components/hubspot/sources/new-note/new-note.mjs index 52b9e7c937c55..434cba544e968 100644 --- a/components/hubspot/sources/new-note/new-note.mjs +++ b/components/hubspot/sources/new-note/new-note.mjs @@ -8,7 +8,7 @@ export default { key: "hubspot-new-note", name: "New Note Created", description: "Emit new event for each new note created. [See the documentation](https://developers.hubspot.com/docs/reference/api/crm/engagements/notes#get-%2Fcrm%2Fv3%2Fobjects%2Fnotes)", - version: "1.0.1", + version: "1.0.2", type: "source", dedupe: "unique", methods: { diff --git a/components/hubspot/sources/new-or-updated-blog-article/new-or-updated-blog-article.mjs b/components/hubspot/sources/new-or-updated-blog-article/new-or-updated-blog-article.mjs index 98317f171d703..0a00e00c3df5c 100644 --- a/components/hubspot/sources/new-or-updated-blog-article/new-or-updated-blog-article.mjs +++ b/components/hubspot/sources/new-or-updated-blog-article/new-or-updated-blog-article.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-new-or-updated-blog-article", name: "New or Updated Blog Post", description: "Emit new event for each new or updated blog post in Hubspot.", - version: "0.0.7", + version: "0.0.8", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-or-updated-company/new-or-updated-company.mjs b/components/hubspot/sources/new-or-updated-company/new-or-updated-company.mjs index 6a408d448821e..d1a553df48eae 100644 --- a/components/hubspot/sources/new-or-updated-company/new-or-updated-company.mjs +++ b/components/hubspot/sources/new-or-updated-company/new-or-updated-company.mjs @@ -9,7 +9,7 @@ export default { key: "hubspot-new-or-updated-company", name: "New or Updated Company", description: "Emit new event for each new or updated company in Hubspot.", - version: "0.0.7", + version: "0.0.8", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-or-updated-contact/new-or-updated-contact.mjs b/components/hubspot/sources/new-or-updated-contact/new-or-updated-contact.mjs index 7d00b5824d670..60e37d5a77dd8 100644 --- a/components/hubspot/sources/new-or-updated-contact/new-or-updated-contact.mjs +++ b/components/hubspot/sources/new-or-updated-contact/new-or-updated-contact.mjs @@ -9,7 +9,7 @@ export default { key: "hubspot-new-or-updated-contact", name: "New or Updated Contact", description: "Emit new event for each new or updated contact in Hubspot.", - version: "0.0.7", + version: "0.0.8", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-or-updated-crm-object/new-or-updated-crm-object.mjs b/components/hubspot/sources/new-or-updated-crm-object/new-or-updated-crm-object.mjs index dca63c21c8a99..a3114147e975d 100644 --- a/components/hubspot/sources/new-or-updated-crm-object/new-or-updated-crm-object.mjs +++ b/components/hubspot/sources/new-or-updated-crm-object/new-or-updated-crm-object.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-new-or-updated-crm-object", name: "New or Updated CRM Object", description: "Emit new event each time a CRM Object of the specified object type is updated.", - version: "0.0.20", + version: "0.0.21", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-or-updated-custom-object/new-or-updated-custom-object.mjs b/components/hubspot/sources/new-or-updated-custom-object/new-or-updated-custom-object.mjs index 227c0aee3017a..82e9592d3b08d 100644 --- a/components/hubspot/sources/new-or-updated-custom-object/new-or-updated-custom-object.mjs +++ b/components/hubspot/sources/new-or-updated-custom-object/new-or-updated-custom-object.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-new-or-updated-custom-object", name: "New or Updated Custom Object", description: "Emit new event each time a Custom Object of the specified schema is updated.", - version: "0.0.9", + version: "0.0.10", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-or-updated-deal/new-or-updated-deal.mjs b/components/hubspot/sources/new-or-updated-deal/new-or-updated-deal.mjs index 9840c94edcebc..74df6a269aa4a 100644 --- a/components/hubspot/sources/new-or-updated-deal/new-or-updated-deal.mjs +++ b/components/hubspot/sources/new-or-updated-deal/new-or-updated-deal.mjs @@ -9,7 +9,7 @@ export default { key: "hubspot-new-or-updated-deal", name: "New or Updated Deal", description: "Emit new event for each new or updated deal in Hubspot", - version: "0.0.7", + version: "0.0.8", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-or-updated-line-item/new-or-updated-line-item.mjs b/components/hubspot/sources/new-or-updated-line-item/new-or-updated-line-item.mjs index f85a0af48979e..7a0c6465f60d2 100644 --- a/components/hubspot/sources/new-or-updated-line-item/new-or-updated-line-item.mjs +++ b/components/hubspot/sources/new-or-updated-line-item/new-or-updated-line-item.mjs @@ -9,7 +9,7 @@ export default { key: "hubspot-new-or-updated-line-item", name: "New or Updated Line Item", description: "Emit new event for each new line item added or updated in Hubspot.", - version: "0.0.7", + version: "0.0.8", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-or-updated-product/new-or-updated-product.mjs b/components/hubspot/sources/new-or-updated-product/new-or-updated-product.mjs index 98892daa76223..b9ce476b44fed 100644 --- a/components/hubspot/sources/new-or-updated-product/new-or-updated-product.mjs +++ b/components/hubspot/sources/new-or-updated-product/new-or-updated-product.mjs @@ -9,7 +9,7 @@ export default { key: "hubspot-new-or-updated-product", name: "New or Updated Product", description: "Emit new event for each new or updated product in Hubspot.", - version: "0.0.7", + version: "0.0.8", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-social-media-message/new-social-media-message.mjs b/components/hubspot/sources/new-social-media-message/new-social-media-message.mjs index 6daea3cb5268c..405f7e69086c6 100644 --- a/components/hubspot/sources/new-social-media-message/new-social-media-message.mjs +++ b/components/hubspot/sources/new-social-media-message/new-social-media-message.mjs @@ -6,7 +6,7 @@ export default { key: "hubspot-new-social-media-message", name: "New Social Media Message", description: "Emit new event when a message is posted from HubSpot to the specified social media channel. Note: Only available for Marketing Hub Enterprise accounts", - version: "0.0.20", + version: "0.0.21", type: "source", dedupe: "unique", props: { diff --git a/components/hubspot/sources/new-task/new-task.mjs b/components/hubspot/sources/new-task/new-task.mjs index 591980731366a..edf79a0ebc41e 100644 --- a/components/hubspot/sources/new-task/new-task.mjs +++ b/components/hubspot/sources/new-task/new-task.mjs @@ -8,7 +8,7 @@ export default { key: "hubspot-new-task", name: "New Task Created", description: "Emit new event for each new task created. [See the documentation](https://developers.hubspot.com/docs/reference/api/crm/engagements/tasks#get-%2Fcrm%2Fv3%2Fobjects%2Ftasks)", - version: "1.0.1", + version: "1.0.2", type: "source", dedupe: "unique", methods: { diff --git a/components/hubspot/sources/new-ticket-property-change/new-ticket-property-change.mjs b/components/hubspot/sources/new-ticket-property-change/new-ticket-property-change.mjs index eb9c572e2c7fa..7b4001dd74a89 100644 --- a/components/hubspot/sources/new-ticket-property-change/new-ticket-property-change.mjs +++ b/components/hubspot/sources/new-ticket-property-change/new-ticket-property-change.mjs @@ -7,7 +7,7 @@ export default { key: "hubspot-new-ticket-property-change", name: "New Ticket Property Change", description: "Emit new event when a specified property is provided or updated on a ticket. [See the documentation](https://developers.hubspot.com/docs/api/crm/tickets)", - version: "0.0.14", + version: "0.0.15", dedupe: "unique", type: "source", props: { diff --git a/components/hubspot/sources/new-ticket/new-ticket.mjs b/components/hubspot/sources/new-ticket/new-ticket.mjs index 0eafbdfc4c0da..938e8a5df7a2f 100644 --- a/components/hubspot/sources/new-ticket/new-ticket.mjs +++ b/components/hubspot/sources/new-ticket/new-ticket.mjs @@ -9,7 +9,7 @@ export default { key: "hubspot-new-ticket", name: "New Ticket", description: "Emit new event for each new ticket created.", - version: "0.0.20", + version: "0.0.21", dedupe: "unique", type: "source", props: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 29c6699ad1c74..dbfc759b10a63 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34581,8 +34581,6 @@ snapshots: '@putout/operator-filesystem': 5.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3)) '@putout/operator-json': 2.2.0 putout: 36.13.1(eslint@8.57.1)(typescript@5.6.3) - transitivePeerDependencies: - - supports-color '@putout/operator-regexp@1.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3))': dependencies: