diff --git a/components/intercom/actions/add-tag-to-contact/add-tag-to-contact.mjs b/components/intercom/actions/add-tag-to-contact/add-tag-to-contact.mjs new file mode 100644 index 0000000000000..96b52e3297ce3 --- /dev/null +++ b/components/intercom/actions/add-tag-to-contact/add-tag-to-contact.mjs @@ -0,0 +1,75 @@ +import intercom from "../../intercom.app.mjs"; + +export default { + key: "intercom-add-tag-to-contact", + name: "Add Tag To Contact", + description: "Adds a specific tag to a contact in Intercom. [See the documentation](https://developers.intercom.com/docs/references/rest-api/api.intercom.io/contacts/attachtagtocontact).", + version: "0.0.1", + type: "action", + props: { + intercom, + contactId: { + type: "string", + label: "Contact ID", + description: "The unique identifier for the contact which is given by Intercom. Eg. `63a07ddf05a32042dffac965`.", + propDefinition: [ + intercom, + "userIds", + () => ({ + data: { + query: { + operator: "OR", + value: [ + { + field: "role", + operator: "=", + value: "user", + }, + { + field: "role", + operator: "=", + value: "lead", + }, + ], + }, + }, + }), + ], + }, + tagId: { + propDefinition: [ + intercom, + "tagId", + ], + }, + }, + methods: { + addTagToContact({ + contactId, ...args + } = {}) { + return this.intercom.makeRequest({ + method: "POST", + endpoint: `contacts/${contactId}/tags`, + ...args, + }); + }, + }, + async run({ $ }) { + const { + addTagToContact, + contactId, + tagId, + } = this; + + const response = await addTagToContact({ + $, + contactId, + data: { + id: tagId, + }, + }); + + $.export("$summary", `Successfully added tag to contact with ID \`${response.id}\`.`); + return response; + }, +}; diff --git a/components/intercom/actions/create-note/create-note.mjs b/components/intercom/actions/create-note/create-note.mjs index 978dad18d5a79..983acec13b55b 100644 --- a/components/intercom/actions/create-note/create-note.mjs +++ b/components/intercom/actions/create-note/create-note.mjs @@ -4,7 +4,7 @@ export default { key: "intercom-create-note", name: "Create Note", description: "Creates a note for a specific user. [See the docs here](https://developers.intercom.com/intercom-api-reference/reference/create-note-for-contact)", - version: "0.0.4", + version: "0.0.5", type: "action", props: { intercom, diff --git a/components/intercom/actions/reply-to-conversation/reply-to-conversation.mjs b/components/intercom/actions/reply-to-conversation/reply-to-conversation.mjs new file mode 100644 index 0000000000000..845dd7ef6270b --- /dev/null +++ b/components/intercom/actions/reply-to-conversation/reply-to-conversation.mjs @@ -0,0 +1,203 @@ +import intercom from "../../intercom.app.mjs"; + +export default { + key: "intercom-reply-to-conversation", + name: "Reply To Conversation", + description: "Add a reply or a note to an existing conversation thread. [See the documentation](https://developers.intercom.com/docs/references/rest-api/api.intercom.io/conversations/replyconversation).", + version: "0.0.1", + type: "action", + props: { + intercom, + conversationId: { + propDefinition: [ + intercom, + "conversationId", + ], + }, + replyType: { + type: "string", + label: "Reply Type", + description: "The type of the reply.", + options: [ + { + label: "Contact Reply", + value: "user", + }, + { + label: "Admin Reply", + value: "admin", + }, + ], + reloadProps: true, + }, + messageType: { + propDefinition: [ + intercom, + "messageType", + ({ replyType: type }) => ({ + type, + }), + ], + }, + body: { + type: "string", + label: "Body", + description: "The text body of the comment.", + }, + attachmentUrls: { + type: "string[]", + label: "Attachment URLs", + description: "A list of image URLs that will be added as attachments. You can include up to 10 URLs.", + optional: true, + }, + }, + additionalProps() { + const { + replyType, + replyOnBehalfOf, + } = this; + + if (replyType === "admin") { + return { + adminId: { + type: "string", + label: "Admin ID", + description: "The id of the admin who is authoring the comment.", + options: async () => { + const { admins } = await this.intercom.listAdmins(); + return admins.map((admin) => ({ + label: admin.name, + value: admin.id, + })); + }, + }, + }; + } + + return { + replyOnBehalfOf: { + type: "string", + label: "Reply On Behalf Of", + description: "The user ID of the user on whose behalf the reply is being made.", + options: [ + { + label: "Intercom User ID", + value: "intercom_user_id", + }, + { + label: "Email", + value: "email", + }, + { + label: "User ID", + value: "user_id", + }, + ], + reloadProps: true, + }, + ...(replyOnBehalfOf === "intercom_user_id" && { + intercomUserId: { + type: "string", + label: "Intercom User ID", + description: "The identifier for the contact as given by Intercom.", + options: async () => { + const results = await this.intercom.searchContacts({ + query: { + field: "role", + operator: "=", + value: "user", + }, + }); + return results.map((user) => ({ + label: user.name || user.id, + value: user.id, + })); + }, + }, + }), + ...(replyOnBehalfOf === "email" && { + email: { + type: "string", + label: "Email", + description: "The email you have defined for the user.", + options: async () => { + const results = await this.intercom.searchContacts({ + query: { + field: "role", + operator: "=", + value: "user", + }, + }); + return results.map((user) => ({ + label: user.name || user.id, + value: user.email, + })); + }, + }, + }), + ...(replyOnBehalfOf === "user_id" && { + userId: { + type: "string", + label: "User ID", + description: "The external ID you have defined for the contact.", + options: async () => { + const results = await this.intercom.searchContacts({ + query: { + field: "role", + operator: "=", + value: "user", + }, + }); + return results.map((user) => ({ + label: user.name || user.id, + value: user.external_id, + })); + }, + }, + }), + }; + }, + methods: { + replyToConversation({ + conversationId, ...args + } = {}) { + return this.intercom.makeRequest({ + method: "POST", + endpoint: `conversations/${conversationId}/parts`, + ...args, + }); + }, + }, + async run({ $ }) { + const { + replyToConversation, + conversationId, + body, + attachmentUrls, + replyType, + adminId, + intercomUserId, + email, + userId, + messageType, + } = this; + + const response = await replyToConversation({ + $, + conversationId, + data: { + body, + attachment_urls: attachmentUrls, + admin_id: adminId, + intercom_user_id: intercomUserId, + email, + user_id: userId, + message_type: messageType, + type: replyType, + }, + }); + + $.export("$summary", "Reply or note added successfully"); + return response; + }, +}; diff --git a/components/intercom/actions/send-incoming-message/send-incoming-message.mjs b/components/intercom/actions/send-incoming-message/send-incoming-message.mjs index 516f3563c1e06..f376b64dc4eed 100644 --- a/components/intercom/actions/send-incoming-message/send-incoming-message.mjs +++ b/components/intercom/actions/send-incoming-message/send-incoming-message.mjs @@ -4,7 +4,7 @@ export default { key: "intercom-send-incoming-message", name: "Send Incoming Message", description: "Send a message from a user into your Intercom app. [See the docs here](https://developers.intercom.com/intercom-api-reference/reference/create-a-conversation)", - version: "0.0.4", + version: "0.0.5", type: "action", props: { intercom, diff --git a/components/intercom/actions/send-message-to-contact/send-message-to-contact.mjs b/components/intercom/actions/send-message-to-contact/send-message-to-contact.mjs new file mode 100644 index 0000000000000..0a41b5f7ebace --- /dev/null +++ b/components/intercom/actions/send-message-to-contact/send-message-to-contact.mjs @@ -0,0 +1,111 @@ +import intercom from "../../intercom.app.mjs"; + +export default { + key: "intercom-send-message-to-contact", + name: "Send Message To Contact", + description: "Send a message to a contact in Intercom. [See the documentation](https://developers.intercom.com/docs/references/rest-api/api.intercom.io/messages/createmessage).", + version: "0.0.1", + type: "action", + props: { + intercom, + messageType: { + type: "string", + label: "Message Type", + description: "The kind of message being created.", + options: [ + "in_app", + "email", + ], + }, + subject: { + type: "string", + label: "Subject", + description: "The title of the email.", + }, + body: { + description: "The content of the message. HTML and plaintext are supported.", + propDefinition: [ + intercom, + "body", + ], + }, + template: { + type: "string", + label: "Template", + description: "The style of the outgoing message.", + options: [ + "plain", + "personal", + ], + }, + fromId: { + type: "string", + label: "From ID", + description: "The sender of the message. The identifier for the admin which is given by Intercom. If not provided, the default sender will be used.", + propDefinition: [ + intercom, + "adminId", + ], + }, + toType: { + type: "string", + label: "To Type", + description: "The type of the recipient of the message.", + options: [ + "user", + "lead", + ], + }, + toId: { + type: "string", + label: "To ID", + description: "The recipient of the message. The identifier for the contact which is given by Intercom. Eg. `536e564f316c83104c000020`.", + propDefinition: [ + intercom, + "userIds", + ], + }, + }, + methods: { + sendMessage(args = {}) { + return this.intercom.makeRequest({ + method: "POST", + endpoint: "messages", + ...args, + }); + }, + }, + async run({ $ }) { + const { + sendMessage, + messageType, + subject, + body, + template, + fromId, + toType, + toId, + } = this; + + const response = await sendMessage({ + $, + data: { + message_type: messageType, + subject, + body, + template, + from: { + type: "admin", + id: fromId, + }, + to: { + type: toType, + id: toId, + }, + }, + }); + + $.export("$summary", `Successfully sent message with ID \`${response.id}\`.`); + return response; + }, +}; diff --git a/components/intercom/actions/upsert-contact/upsert-contact.mjs b/components/intercom/actions/upsert-contact/upsert-contact.mjs index 673dbf8a5a567..dc5540ca3b2b9 100644 --- a/components/intercom/actions/upsert-contact/upsert-contact.mjs +++ b/components/intercom/actions/upsert-contact/upsert-contact.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-upsert-contact", name: "Upsert Contact", description: "Create a new contact. If there is already a contact with the email provided, the existing contact will be updated. [See the docs here](https://developers.intercom.com/docs/references/rest-api/api.intercom.io/contacts/createcontact)", - version: "0.0.1", + version: "0.0.2", type: "action", props: { intercom, diff --git a/components/intercom/intercom.app.mjs b/components/intercom/intercom.app.mjs index b432e2e3e4f33..957211a1489ea 100644 --- a/components/intercom/intercom.app.mjs +++ b/components/intercom/intercom.app.mjs @@ -8,14 +8,15 @@ export default { type: "string[]", label: "Users", description: "Users to watch for new events", - async options() { - const data = { + async options({ + data = { query: { field: "role", operator: "=", value: "user", }, - }; + }, + }) { const results = await this.searchContacts(data); return results.map((user) => ({ label: user.name || user.id, @@ -28,6 +29,80 @@ export default { label: "Body", description: "The text of the note.", }, + tagId: { + type: "string", + label: "Tag ID", + description: "The unique identifier for the tag which is given by Intercom. Eg. `7522907`.", + async options() { + const { data: tags } = await this.listTags(); + return tags.map(({ + id: value, name: label, + }) => ({ + label, + value, + })); + }, + }, + conversationId: { + type: "string", + label: "Conversation ID", + description: "The Intercom provisioned identifier for the conversation or the string `last` to reply to the last part of the conversation.", + async options({ prevContext: { startingAfter } }) { + if (startingAfter === null) { + return []; + } + const response = await this.listConversations({ + params: { + per_page: 20, + starting_after: startingAfter, + }, + }); + const options = response.conversations.map((conversation) => ({ + label: conversation.title || conversation.id, + value: conversation.id, + })); + return { + options, + context: { + startingAfter: response.pages.next?.starting_after || null, + }, + }; + }, + }, + messageType: { + type: "string", + label: "Message Type", + description: "The kind of message being created.", + options({ type = "user" }) { + if (type === "user") { + return [ + "comment", + ]; + } + + if (type === "admin") { + return [ + "comment", + "note", + ]; + } + return []; + }, + }, + adminId: { + type: "string", + label: "Admin ID", + description: "The unique identifier for the admin which is given by Intercom. Eg. `25`.", + async options() { + const { admins } = await this.listAdmins(); + return admins.map(({ + id: value, name: label, + }) => ({ + label, + value, + })); + }, + }, }, methods: { monthAgo() { @@ -56,8 +131,9 @@ export default { method, url: url ?? `https://api.intercom.io/${endpoint}`, headers: { - Authorization: `Bearer ${this.$auth.oauth_access_token}`, - Accept: "application/json", + "Authorization": `Bearer ${this.$auth.oauth_access_token}`, + "Accept": "application/json", + "Intercom-Version": "2.12", }, ...opts, }; @@ -246,5 +322,24 @@ export default { $, }); }, + listTags() { + return this.makeRequest({ + endpoint: "tags", + }); + }, + searchTickets(data) { + return this.paginate("tickets", "POST", data, true, null, "tickets"); + }, + listConversations(args = {}) { + return this.makeRequest({ + endpoint: "conversations", + ...args, + }); + }, + listAdmins() { + return this.makeRequest({ + endpoint: "admins", + }); + }, }, }; diff --git a/components/intercom/package.json b/components/intercom/package.json index 7f4c0cd330f9d..dda100fd76c39 100644 --- a/components/intercom/package.json +++ b/components/intercom/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/intercom", - "version": "0.5.0", + "version": "0.6.0", "description": "Pipedream Intercom Components", "main": "intercom.app.mjs", "keywords": [ diff --git a/components/intercom/sources/conversation-closed/conversation-closed.mjs b/components/intercom/sources/conversation-closed/conversation-closed.mjs index e5f7fcca44126..e078aa6b739cf 100644 --- a/components/intercom/sources/conversation-closed/conversation-closed.mjs +++ b/components/intercom/sources/conversation-closed/conversation-closed.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-conversation-closed", name: "New Closed Conversation", description: "Emit new event each time a conversation is closed.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/lead-added-email/lead-added-email.mjs b/components/intercom/sources/lead-added-email/lead-added-email.mjs index 50d4d45f846eb..708899ad07513 100644 --- a/components/intercom/sources/lead-added-email/lead-added-email.mjs +++ b/components/intercom/sources/lead-added-email/lead-added-email.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-lead-added-email", name: "Lead Added Email", description: "Emit new event each time a lead adds their email address.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/new-admin-reply/new-admin-reply.mjs b/components/intercom/sources/new-admin-reply/new-admin-reply.mjs index 3eef629455950..d698ef3f7cbd1 100644 --- a/components/intercom/sources/new-admin-reply/new-admin-reply.mjs +++ b/components/intercom/sources/new-admin-reply/new-admin-reply.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-new-admin-reply", name: "New Reply From Admin", description: "Emit new event each time an admin replies to a conversation.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/new-company/new-company.mjs b/components/intercom/sources/new-company/new-company.mjs index b6de1a661f35c..f8568a187e959 100644 --- a/components/intercom/sources/new-company/new-company.mjs +++ b/components/intercom/sources/new-company/new-company.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-new-company", name: "New Companies", description: "Emit new event each time a new company is added.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/new-conversation-rating-added/new-conversation-rating-added.mjs b/components/intercom/sources/new-conversation-rating-added/new-conversation-rating-added.mjs index d4de8c5b9e826..2fffd96a24f15 100644 --- a/components/intercom/sources/new-conversation-rating-added/new-conversation-rating-added.mjs +++ b/components/intercom/sources/new-conversation-rating-added/new-conversation-rating-added.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-new-conversation-rating-added", name: "New Conversation Rating Added", description: "Emit new event each time a new rating is added to a conversation.", - version: "0.0.2", + version: "0.0.3", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/new-conversation/new-conversation.mjs b/components/intercom/sources/new-conversation/new-conversation.mjs index 6a1c0315b020c..f0d37d11c44cb 100644 --- a/components/intercom/sources/new-conversation/new-conversation.mjs +++ b/components/intercom/sources/new-conversation/new-conversation.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-new-conversation", name: "New Conversations", description: "Emit new event each time a new conversation is added.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/new-event/new-event.mjs b/components/intercom/sources/new-event/new-event.mjs index b3f7ba6c7c4a0..3294e3355ed09 100644 --- a/components/intercom/sources/new-event/new-event.mjs +++ b/components/intercom/sources/new-event/new-event.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-new-event", name: "New Event", description: "Emit new event for each new Intercom event for a user.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", props: { diff --git a/components/intercom/sources/new-lead/new-lead.mjs b/components/intercom/sources/new-lead/new-lead.mjs index 64a999cd8d86b..15a85d31d94a0 100644 --- a/components/intercom/sources/new-lead/new-lead.mjs +++ b/components/intercom/sources/new-lead/new-lead.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-new-lead", name: "New Leads", description: "Emit new event each time a new lead is added.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/new-ticket/new-ticket.mjs b/components/intercom/sources/new-ticket/new-ticket.mjs new file mode 100644 index 0000000000000..d47b534341fd9 --- /dev/null +++ b/components/intercom/sources/new-ticket/new-ticket.mjs @@ -0,0 +1,49 @@ +import common from "../common/common.mjs"; + +export default { + ...common, + key: "intercom-new-ticket", + name: "New Tickets", + description: "Emit new event when a new ticket is created in Intercom.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + generateMeta({ + id, ticket_attributes, created_at: createdAt, + }) { + return { + id, + summary: ticket_attributes?._default_title_ || `New Ticket ${id}`, + ts: createdAt, + }; + }, + }, + async run() { + let lastTicketCreatedAt = this._getLastUpdate(); + const data = { + query: { + operator: "AND", + value: [ + { + field: "created_at", + operator: ">", + value: lastTicketCreatedAt, + }, + ], + }, + }; + + const results = await this.intercom.searchTickets(data); + for (const ticket of results) { + if (ticket.created_at > lastTicketCreatedAt) { + lastTicketCreatedAt = ticket.created_at; + } + const meta = this.generateMeta(ticket); + this.$emit(ticket, meta); + } + + this._setLastUpdate(lastTicketCreatedAt); + }, +}; diff --git a/components/intercom/sources/new-topic/new-topic.mjs b/components/intercom/sources/new-topic/new-topic.mjs index 2c1a431e49b15..cf6adf2d330c7 100644 --- a/components/intercom/sources/new-topic/new-topic.mjs +++ b/components/intercom/sources/new-topic/new-topic.mjs @@ -6,7 +6,7 @@ export default { key: "intercom-new-topic", name: "New Topic (Instant)", description: "Emit new event for each new topic that you subscribed in your webhook. [See more here](https://developers.intercom.com/building-apps/docs/setting-up-webhooks).", - version: "0.0.3", + version: "0.0.4", type: "source", dedupe: "unique", props: { diff --git a/components/intercom/sources/new-unsubscription/new-unsubscription.mjs b/components/intercom/sources/new-unsubscription/new-unsubscription.mjs index be8e1eef2fd32..19c0c46552022 100644 --- a/components/intercom/sources/new-unsubscription/new-unsubscription.mjs +++ b/components/intercom/sources/new-unsubscription/new-unsubscription.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-new-unsubscription", name: "New Unsubscriptions", description: "Emit new event each time a user unsubscribes from receiving emails.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/new-user-reply/new-user-reply.mjs b/components/intercom/sources/new-user-reply/new-user-reply.mjs index 44be581762364..df3a240511ec8 100644 --- a/components/intercom/sources/new-user-reply/new-user-reply.mjs +++ b/components/intercom/sources/new-user-reply/new-user-reply.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-new-user-reply", name: "New Reply From User", description: "Emit new event each time a user replies to a conversation.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/new-user/new-user.mjs b/components/intercom/sources/new-user/new-user.mjs index 09fc3c0172a58..605c7c5789a4c 100644 --- a/components/intercom/sources/new-user/new-user.mjs +++ b/components/intercom/sources/new-user/new-user.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-new-user", name: "New Users", description: "Emit new event each time a new user is added.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/tag-added-to-conversation/tag-added-to-conversation.mjs b/components/intercom/sources/tag-added-to-conversation/tag-added-to-conversation.mjs index bede6b1036d92..26ac2540cf88a 100644 --- a/components/intercom/sources/tag-added-to-conversation/tag-added-to-conversation.mjs +++ b/components/intercom/sources/tag-added-to-conversation/tag-added-to-conversation.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-tag-added-to-conversation", name: "Tag Added To Conversation", description: "Emit new event each time a new tag is added to a conversation.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/tag-added-to-lead/tag-added-to-lead.mjs b/components/intercom/sources/tag-added-to-lead/tag-added-to-lead.mjs index 31bf4134855ab..64cfcb39681b1 100644 --- a/components/intercom/sources/tag-added-to-lead/tag-added-to-lead.mjs +++ b/components/intercom/sources/tag-added-to-lead/tag-added-to-lead.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-tag-added-to-lead", name: "Tag Added To Lead", description: "Emit new event each time a new tag is added to a lead.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/components/intercom/sources/tag-added-to-user/tag-added-to-user.mjs b/components/intercom/sources/tag-added-to-user/tag-added-to-user.mjs index 648c2d1455870..11e0c9871df69 100644 --- a/components/intercom/sources/tag-added-to-user/tag-added-to-user.mjs +++ b/components/intercom/sources/tag-added-to-user/tag-added-to-user.mjs @@ -5,7 +5,7 @@ export default { key: "intercom-tag-added-to-user", name: "Tag Added To User", description: "Emit new event each time a new tag is added to a user.", - version: "0.0.6", + version: "0.0.7", type: "source", dedupe: "unique", methods: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0175fcf2a536f..15094660cdb6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5884,8 +5884,7 @@ importers: specifier: ^1.2.1 version: 1.6.6 - components/lightpanda: - specifiers: {} + components/lightpanda: {} components/lightspeed_retail_pos: dependencies: @@ -31745,8 +31744,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: