diff --git a/components/elevenlabs/actions/add-voice/add-voice.mjs b/components/elevenlabs/actions/add-voice/add-voice.mjs index d2134b135633b..cc5805389168c 100644 --- a/components/elevenlabs/actions/add-voice/add-voice.mjs +++ b/components/elevenlabs/actions/add-voice/add-voice.mjs @@ -5,7 +5,7 @@ import elevenlabs from "../../elevenlabs.app.mjs"; export default { key: "elevenlabs-add-voice", name: "Add Voice", - version: "0.0.1", + version: "0.0.2", description: "Add a voice from one or more audio files. [See the documentation](https://elevenlabs.io/docs/api-reference/add-voice)", type: "action", props: { @@ -59,7 +59,7 @@ export default { data, }); - $.export("$summary", `Sucessfully added voice (ID: ${response.voice_id})`); + $.export("$summary", `Successfully added voice (ID: ${response.voice_id})`); return response; }, }; diff --git a/components/elevenlabs/actions/create-agent/create-agent.mjs b/components/elevenlabs/actions/create-agent/create-agent.mjs new file mode 100644 index 0000000000000..ed0400416fb01 --- /dev/null +++ b/components/elevenlabs/actions/create-agent/create-agent.mjs @@ -0,0 +1,133 @@ +import elevenlabs from "../../elevenlabs.app.mjs"; + +export default { + key: "elevenlabs-create-agent", + name: "Create Agent", + description: "Create an agent in Eleventlabs. [See the documentation](https://elevenlabs.io/docs/api-reference/agents/create-agent)", + version: "0.0.1", + type: "action", + props: { + elevenlabs, + prompt: { + type: "string", + label: "Prompt", + description: "The prompt for the agent", + }, + name: { + type: "string", + label: "Name", + description: "A name to make the agent easier to find", + optional: true, + }, + llm: { + type: "string", + label: "LLM", + description: "The LLM to query with the prompt and the chat history", + options: [ + "gpt-4o-mini", + "gpt-4o", + "gpt-4", + "gpt-4-turbo", + "gpt-3.5-turbo", + "gemini-1.5-pro", + "gemini-1.5-flash", + "gemini-2.0-flash-001", + "gemini-2.0-flash-lite", + "gemini-1.0-pro", + "claude-3-7-sonnet", + "claude-3-5-sonnet", + ], + optional: true, + }, + temperature: { + type: "string", + label: "Temperature", + description: "The temperature for the LLM. Defaults to `0`", + optional: true, + }, + maxTokens: { + type: "integer", + label: "Max Tokens", + description: "If greater than 0, maximum number of tokens the LLM can predict", + optional: true, + }, + firstMessage: { + type: "string", + label: "First Message", + description: "If non-empty, the first message the agent will say. If empty, the agent waits for the user to start the discussion.", + optional: true, + }, + language: { + type: "string", + label: "Language", + description: "Language of the agent - used for ASR and TTS. Defaults to `en`", + optional: true, + }, + maxDurationSeconds: { + type: "integer", + label: "Max Duration in Seconds", + description: "The maximum duration of a conversation in seconds. Defaults to `600`", + optional: true, + }, + turnTimeout: { + type: "string", + label: "Turn Timeout", + description: "Maximum wait time for the user’s reply before re-engaging the user. Defaults to `7`", + optional: true, + }, + voiceId: { + propDefinition: [ + elevenlabs, + "voiceId", + ], + description: "The voice ID to use for TTS", + optional: true, + }, + ttsModelId: { + type: "string", + label: "TTS Model ID", + description: "The model to use for TTS", + options: [ + "eleven_turbo_v2", + "eleven_turbo_v2_5", + "eleven_flash_v2", + "eleven_flash_v2_5", + ], + optional: true, + }, + }, + async run({ $ }) { + const response = await this.elevenlabs.createAgent({ + $, + data: { + conversation_config: { + conversation: { + max_duration_seconds: this.maxDurationSeconds, + }, + turn: { + turn_timeout: this.turnTimeout && +this.turnTimeout, + }, + agent: { + first_message: this.firstMessage, + language: this.language, + prompt: { + prompt: this.prompt, + llm: this.llm, + temperature: this.temperature && +this.temperature, + max_tokens: this.maxTokens, + }, + }, + tts: { + voice_id: this.voiceId, + model_id: this.ttsModelId, + }, + }, + name: this.name, + }, + }); + if (response?.agent_id) { + $.export("$summary", `Successfully created agent with ID: ${response.agent_id}`); + } + return response; + }, +}; diff --git a/components/elevenlabs/actions/download-history-items/download-history-items.mjs b/components/elevenlabs/actions/download-history-items/download-history-items.mjs index 0340e3f4a3d31..918a9f49ceff9 100644 --- a/components/elevenlabs/actions/download-history-items/download-history-items.mjs +++ b/components/elevenlabs/actions/download-history-items/download-history-items.mjs @@ -6,7 +6,7 @@ import elevenlabs from "../../elevenlabs.app.mjs"; export default { key: "elevenlabs-download-history-items", name: "Download History Items", - version: "0.0.2", + version: "0.0.3", description: "Download one or more history items to your workflow's `tmp` directory. If one history item ID is provided, we will return a single audio file. If more than one history item IDs are provided, we will provide the history items packed into a .zip file. [See the documentation](https://docs.elevenlabs.io/api-reference/history-download)", type: "action", props: { diff --git a/components/elevenlabs/actions/get-audio-from-history-item/get-audio-from-history-item.mjs b/components/elevenlabs/actions/get-audio-from-history-item/get-audio-from-history-item.mjs index c194717a1b988..840e5c76290c1 100644 --- a/components/elevenlabs/actions/get-audio-from-history-item/get-audio-from-history-item.mjs +++ b/components/elevenlabs/actions/get-audio-from-history-item/get-audio-from-history-item.mjs @@ -6,7 +6,7 @@ import elevenlabs from "../../elevenlabs.app.mjs"; export default { key: "elevenlabs-get-audio-from-history-item", name: "Get Audio From History Item", - version: "0.0.2", + version: "0.0.3", description: "Returns the audio of an history item and converts it to a file. [See the documentation](https://docs.elevenlabs.io/api-reference/history-audio)", type: "action", props: { diff --git a/components/elevenlabs/actions/list-models/list-models.mjs b/components/elevenlabs/actions/list-models/list-models.mjs index e4c6947331859..eca320243edf6 100644 --- a/components/elevenlabs/actions/list-models/list-models.mjs +++ b/components/elevenlabs/actions/list-models/list-models.mjs @@ -3,7 +3,7 @@ import elevenlabs from "../../elevenlabs.app.mjs"; export default { key: "elevenlabs-list-models", name: "Get Models", - version: "0.0.2", + version: "0.0.3", description: "Gets a list of available models. [See the documentation](https://docs.elevenlabs.io/api-reference/models-get)", type: "action", props: { diff --git a/components/elevenlabs/actions/make-outbound-call/make-outbound-call.mjs b/components/elevenlabs/actions/make-outbound-call/make-outbound-call.mjs new file mode 100644 index 0000000000000..2c2eec591ed94 --- /dev/null +++ b/components/elevenlabs/actions/make-outbound-call/make-outbound-call.mjs @@ -0,0 +1,43 @@ +import elevenlabs from "../../elevenlabs.app.mjs"; + +export default { + key: "elevenlabs-make-outbound-call", + name: "Make Outbound Call", + description: "Handle an outbound call via Twilio with Elevenlabs. [See the documentation](https://elevenlabs.io/docs/api-reference/conversations/twilio-outbound-call)", + version: "0.0.1", + type: "action", + props: { + elevenlabs, + agentId: { + propDefinition: [ + elevenlabs, + "agentId", + ], + }, + agentPhoneNumberId: { + propDefinition: [ + elevenlabs, + "phoneNumberId", + ], + }, + toNumber: { + type: "string", + label: "To Number", + description: "The recipient phone number", + }, + }, + async run({ $ }) { + const response = await this.elevenlabs.makeOutboundCall({ + $, + data: { + agent_id: this.agentId, + agent_phone_number: this.agentPhoneNumberId, + to_number: this.toNumber, + }, + }); + if (response?.success) { + $.export("$summary", `Successfully made outbound call to ${this.toNumber}`); + } + return response; + }, +}; diff --git a/components/elevenlabs/actions/text-to-speech/text-to-speech.mjs b/components/elevenlabs/actions/text-to-speech/text-to-speech.mjs index 6b1ba4fdb5ae9..973f42f66654b 100644 --- a/components/elevenlabs/actions/text-to-speech/text-to-speech.mjs +++ b/components/elevenlabs/actions/text-to-speech/text-to-speech.mjs @@ -6,7 +6,7 @@ import elevenlabs from "../../elevenlabs.app.mjs"; export default { key: "elevenlabs-text-to-speech", name: "Text To Speech", - version: "0.0.2", + version: "0.0.3", description: "Retrieve an audio file. [See the documentation](https://docs.elevenlabs.io/api-reference/text-to-speech)", type: "action", props: { diff --git a/components/elevenlabs/elevenlabs.app.mjs b/components/elevenlabs/elevenlabs.app.mjs index b511f8a83a8a2..dc7d459934d53 100644 --- a/components/elevenlabs/elevenlabs.app.mjs +++ b/components/elevenlabs/elevenlabs.app.mjs @@ -6,7 +6,7 @@ export default { propDefinitions: { historyItemId: { type: "string", - label: "History Item Id", + label: "History Item ID", description: "History item ID to be used.", async options({ prevContext }) { const { @@ -34,7 +34,7 @@ export default { }, voiceId: { type: "string", - label: "Voice Id", + label: "Voice ID", description: "Identifier of the voice that will be used.", async options() { const { voices } = await this.listVoices(); @@ -49,7 +49,7 @@ export default { }, modelId: { type: "string", - label: "Model Id", + label: "Model ID", description: "Identifier of the model that will be used. Default: `eleven_monolingual_v1`", async options() { const models = await this.listModels(); @@ -62,6 +62,47 @@ export default { })); }, }, + phoneNumberId: { + type: "string", + label: "Phone Number ID", + description: "Identifier of a phone number to use for the agent", + async options() { + const phoneNumbers = await this.listPhoneNumbers(); + return phoneNumbers?.map(({ + phone_number_id: value, phone_number: label, + }) => ({ + label, + value, + })) || []; + }, + }, + agentId: { + type: "string", + label: "Agent ID", + description: "Identifier of an agent to use for the outbound call", + async options({ prevContext }) { + const { + agents, next_cursor: cursor, + } = await this.listAgents({ + params: { + cursor: prevContext?.cursor, + page_size: 30, + }, + }); + const options = agents?.map(({ + agent_id: value, name: label, + }) => ({ + label, + value, + })) || []; + return { + options, + context: { + cursor, + }, + }; + }, + }, }, methods: { _apiUrl() { @@ -139,6 +180,32 @@ export default { ...args, }); }, + listPhoneNumbers(args = {}) { + return this._makeRequest({ + path: "convai/phone-numbers/", + ...args, + }); + }, + listAgents(args = {}) { + return this._makeRequest({ + path: "convai/agents", + ...args, + }); + }, + createAgent(args = {}) { + return this._makeRequest({ + method: "POST", + path: "convai/agents/create", + ...args, + }); + }, + makeOutboundCall(args = {}) { + return this._makeRequest({ + method: "POST", + path: "convai/twilio/outbound_call", + ...args, + }); + }, async *paginate({ fn, params = {}, maxResults = null, }) { diff --git a/components/elevenlabs/package.json b/components/elevenlabs/package.json index 85d6c414749e5..cffce33444702 100644 --- a/components/elevenlabs/package.json +++ b/components/elevenlabs/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/elevenlabs", - "version": "0.2.0", + "version": "0.3.0", "description": "Pipedream ElevenLabs Components", "main": "elevenlabs.app.mjs", "keywords": [ @@ -13,7 +13,7 @@ "access": "public" }, "dependencies": { - "@pipedream/platform": "^1.6.0", + "@pipedream/platform": "^3.0.3", "form-data": "^4.0.0" } } diff --git a/components/elevenlabs/sources/new-history-item/new-history-item.mjs b/components/elevenlabs/sources/new-history-item/new-history-item.mjs index f76b9d6fbec6d..9dc3889682407 100644 --- a/components/elevenlabs/sources/new-history-item/new-history-item.mjs +++ b/components/elevenlabs/sources/new-history-item/new-history-item.mjs @@ -4,7 +4,7 @@ import elevenlabs from "../../elevenlabs.app.mjs"; export default { key: "elevenlabs-new-history-item", name: "New History Item Created", - version: "0.0.2", + version: "0.0.3", description: "Emit new event when a new history item is created.", type: "source", dedupe: "unique", diff --git a/components/highlevel_oauth/actions/add-contact-to-campaign/add-contact-to-campaign.mjs b/components/highlevel_oauth/actions/add-contact-to-campaign/add-contact-to-campaign.mjs new file mode 100644 index 0000000000000..8cdb162326c22 --- /dev/null +++ b/components/highlevel_oauth/actions/add-contact-to-campaign/add-contact-to-campaign.mjs @@ -0,0 +1,36 @@ +import common from "../../common/base.mjs"; + +export default { + ...common, + key: "highlevel_oauth-add-contact-to-campaign", + name: "Add Contact to Campaign", + description: "Adds an existing contact to a campaign. [See the documentation](https://highlevel.stoplight.io/docs/integrations/ecf9b5b45deaf-add-contact-to-campaign)", + version: "0.0.1", + type: "action", + props: { + ...common.props, + contactId: { + propDefinition: [ + common.props.app, + "contactId", + ], + }, + campaignId: { + propDefinition: [ + common.props.app, + "campaignId", + ], + }, + }, + async run({ $ }) { + const response = await this.app.addContactToCampaign({ + $, + contactId: this.contactId, + campaignId: this.campaignId, + }); + if (response?.succeded) { + $.export("$summary", `Successfully added contact to campaign with ID: ${this.campaignId}`); + } + return response; + }, +}; diff --git a/components/highlevel_oauth/actions/common/common.mjs b/components/highlevel_oauth/actions/common/common-contacts.mjs similarity index 73% rename from components/highlevel_oauth/actions/common/common.mjs rename to components/highlevel_oauth/actions/common/common-contacts.mjs index 3d4308d2478b0..94e7322cbfa92 100644 --- a/components/highlevel_oauth/actions/common/common.mjs +++ b/components/highlevel_oauth/actions/common/common-contacts.mjs @@ -1,13 +1,10 @@ -import { ConfigurationError } from "@pipedream/platform"; import { parseObjectEntries } from "../../common/utils.mjs"; -import app from "../../highlevel_oauth.app.mjs"; +import common from "../../common/base.mjs"; export default { + ...common, props: { - app: { - ...app, - reloadProps: true, - }, + ...common.props, name: { type: "string", label: "Name", @@ -34,15 +31,8 @@ export default { optional: true, }, }, - async additionalProps() { - const locationId = this.app.getLocationId(); - if (!locationId) { - throw new ConfigurationError("This component requires you to authenticate as a **location**, not as an agency/company. *(`locationId` field is missing from `$auth`)*"); - } - - return {}; - }, methods: { + ...common.methods, getData(useLocation = true) { const { app, additionalOptions, locationId, ...data diff --git a/components/highlevel_oauth/actions/create-contact/create-contact.mjs b/components/highlevel_oauth/actions/create-contact/create-contact.mjs index 288d0bf1a2a9e..09ddab4f6d8b6 100644 --- a/components/highlevel_oauth/actions/create-contact/create-contact.mjs +++ b/components/highlevel_oauth/actions/create-contact/create-contact.mjs @@ -1,4 +1,4 @@ -import common from "../common/common.mjs"; +import common from "../common/common-contacts.mjs"; const { props: { @@ -11,7 +11,7 @@ export default { key: "highlevel_oauth-create-contact", name: "Create Contact", description: "Creates a new contact on HighLevel. [See the documentation](https://highlevel.stoplight.io/docs/integrations/4c8362223c17b-create-contact)", - version: "0.0.1", + version: "0.0.2", type: "action", props: { app, diff --git a/components/highlevel_oauth/actions/update-contact/update-contact.mjs b/components/highlevel_oauth/actions/update-contact/update-contact.mjs index 6637abe890535..477b6097a5d50 100644 --- a/components/highlevel_oauth/actions/update-contact/update-contact.mjs +++ b/components/highlevel_oauth/actions/update-contact/update-contact.mjs @@ -1,4 +1,4 @@ -import common from "../common/common.mjs"; +import common from "../common/common-contacts.mjs"; const { props: { @@ -11,7 +11,7 @@ export default { key: "highlevel_oauth-update-contact", name: "Update Contact", description: "Updates a selected contact on HighLevel. [See the documentation](https://highlevel.stoplight.io/docs/integrations/9ce5a739d4fb9-update-contact)", - version: "0.0.1", + version: "0.0.2", type: "action", props: { app, diff --git a/components/highlevel_oauth/actions/upsert-contact/upsert-contact.mjs b/components/highlevel_oauth/actions/upsert-contact/upsert-contact.mjs index 524125f93b504..c553f9d9be9e4 100644 --- a/components/highlevel_oauth/actions/upsert-contact/upsert-contact.mjs +++ b/components/highlevel_oauth/actions/upsert-contact/upsert-contact.mjs @@ -1,4 +1,4 @@ -import common from "../common/common.mjs"; +import common from "../common/common-contacts.mjs"; const { props: { @@ -11,7 +11,7 @@ export default { key: "highlevel_oauth-upsert-contact", name: "Upsert Contact", description: "Creates or updates a contact on HighLevel. [See the documentation](https://highlevel.stoplight.io/docs/integrations/f71bbdd88f028-upsert-contact)", - version: "0.0.1", + version: "0.0.2", type: "action", props: { app, diff --git a/components/highlevel_oauth/common/base.mjs b/components/highlevel_oauth/common/base.mjs new file mode 100644 index 0000000000000..0076c9538186f --- /dev/null +++ b/components/highlevel_oauth/common/base.mjs @@ -0,0 +1,19 @@ +import { ConfigurationError } from "@pipedream/platform"; +import app from "../highlevel_oauth.app.mjs"; + +export default { + props: { + app: { + ...app, + reloadProps: true, + }, + }, + async additionalProps() { + const locationId = this.app.getLocationId(); + if (!locationId) { + throw new ConfigurationError("This component requires you to authenticate as a **location**, not as an agency/company. *(`locationId` field is missing from `$auth`)*"); + } + + return {}; + }, +}; diff --git a/components/highlevel_oauth/highlevel_oauth.app.mjs b/components/highlevel_oauth/highlevel_oauth.app.mjs index f960606db53e5..36530d866e838 100644 --- a/components/highlevel_oauth/highlevel_oauth.app.mjs +++ b/components/highlevel_oauth/highlevel_oauth.app.mjs @@ -31,6 +31,24 @@ export default { })); }, }, + campaignId: { + type: "string", + label: "Campaign ID", + description: "The ID of the campaign to add contact to", + async options() { + const { campaigns } = await this.listCampaigns({ + params: { + locationId: this.getLocationId(), + }, + }); + return campaigns?.map(({ + id: value, name: label, + }) => ({ + label, + value, + })) || []; + }, + }, }, methods: { getLocationId() { @@ -39,7 +57,7 @@ export default { _baseUrl() { return "https://services.leadconnectorhq.com"; }, - async _makeRequest({ + _makeRequest({ $ = this, headers, ...otherOpts @@ -54,14 +72,14 @@ export default { ...otherOpts, }); }, - async createContact(args) { + createContact(args = {}) { return this._makeRequest({ method: "POST", url: "/contacts/", ...args, }); }, - async updateContact({ + updateContact({ contactId, ...args }) { return this._makeRequest({ @@ -70,18 +88,39 @@ export default { ...args, }); }, - async upsertContact(args) { + upsertContact(args = {}) { return this._makeRequest({ method: "POST", url: "/contacts/upsert", ...args, }); }, - async searchContacts(args) { + searchContacts(args = {}) { return this._makeRequest({ url: "/contacts/", ...args, }); }, + listCampaigns(args = {}) { + return this._makeRequest({ + url: "/campaigns/", + ...args, + }); + }, + listFormSubmissions(args = {}) { + return this._makeRequest({ + url: "/forms/submissions", + ...args, + }); + }, + addContactToCampaign({ + contactId, campaignId, ...args + }) { + return this._makeRequest({ + method: "POST", + url: `/contacts/${contactId}/campaigns/${campaignId}`, + ...args, + }); + }, }, }; diff --git a/components/highlevel_oauth/package.json b/components/highlevel_oauth/package.json index e3a641a3c9d26..259966e71e7ab 100644 --- a/components/highlevel_oauth/package.json +++ b/components/highlevel_oauth/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/highlevel_oauth", - "version": "0.1.0", + "version": "0.2.0", "description": "Pipedream HighLevel (OAuth) Components", "main": "highlevel_oauth.app.mjs", "keywords": [ @@ -13,6 +13,6 @@ "access": "public" }, "dependencies": { - "@pipedream/platform": "^1.6.2" + "@pipedream/platform": "^3.0.3" } } diff --git a/components/highlevel_oauth/sources/common/base-polling.mjs b/components/highlevel_oauth/sources/common/base-polling.mjs new file mode 100644 index 0000000000000..e353d2646aee9 --- /dev/null +++ b/components/highlevel_oauth/sources/common/base-polling.mjs @@ -0,0 +1,25 @@ +import common from "../../common/base.mjs"; +import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; + +export default { + ...common, + props: { + ...common.props, + db: "$.service.db", + timer: { + type: "$.interface.timer", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + }, + methods: { + ...common.methods, + _getLastDate() { + return this.db.get("lastDate"); + }, + _setLastDate(lastDate) { + this.db.set("lastDate", lastDate); + }, + }, +}; diff --git a/components/highlevel_oauth/sources/new-contact-created/new-contact-created.mjs b/components/highlevel_oauth/sources/new-contact-created/new-contact-created.mjs new file mode 100644 index 0000000000000..6da0999f6b6c4 --- /dev/null +++ b/components/highlevel_oauth/sources/new-contact-created/new-contact-created.mjs @@ -0,0 +1,50 @@ +import common from "../common/base-polling.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "highlevel_oauth-new-contact-created", + name: "New Contact Created", + description: "Emit new event when a new contact is created. [See the documentation](https://highlevel.stoplight.io/docs/integrations/ab55933a57f6f-get-contacts)", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + generateMeta(contact) { + return { + id: contact.id, + summary: `New Contact ID: ${contact.id}`, + ts: Date.parse(contact.dateAdded), + }; + }, + }, + async run() { + const results = []; + const params = { + limit: 100, + startAfter: this._getLastDate(), + locationId: this.app.getLocationId(), + }; + let total; + + do { + const { + contacts, meta, + } = await this.app.searchContacts({ + params, + }); + results.push(...contacts); + params.startAfter = meta?.startAfter; + total = meta?.total; + } while (results.length < total); + + this._setLastDate(params.startAfter); + + results.forEach((contact) => { + const meta = this.generateMeta(contact); + this.$emit(contact, meta); + }); + }, + sampleEmit, +}; diff --git a/components/highlevel_oauth/sources/new-contact-created/test-event.mjs b/components/highlevel_oauth/sources/new-contact-created/test-event.mjs new file mode 100644 index 0000000000000..37fb4c7bf80d9 --- /dev/null +++ b/components/highlevel_oauth/sources/new-contact-created/test-event.mjs @@ -0,0 +1,35 @@ +export default { + "id": "jLxz55idEps7XRAgsWMz", + "locationId": "t8lsEHvfdlZugCobd4t7", + "contactName": "(example) casey morgan", + "firstName": "(example) casey", + "lastName": "morgan", + "firstNameRaw": "(Example) Casey", + "lastNameRaw": "Morgan", + "companyName": "(Example) Dunder Mifflin", + "email": null, + "phone": "+16541234567", + "dnd": false, + "dndSettings": {}, + "type": "lead", + "source": null, + "assignedTo": null, + "city": null, + "state": null, + "postalCode": null, + "address1": null, + "dateAdded": "2025-04-04T16:00:08.369Z", + "dateUpdated": "2025-04-04T16:00:12.888Z", + "dateOfBirth": null, + "businessId": "67f001fe6b2c160e6f140161", + "tags": [ + "high priority", + "follow-up" + ], + "followers": [], + "country": "US", + "website": null, + "timezone": null, + "additionalEmails": [], + "customFields": [] +} \ No newline at end of file diff --git a/components/highlevel_oauth/sources/new-form-submission/new-form-submission.mjs b/components/highlevel_oauth/sources/new-form-submission/new-form-submission.mjs new file mode 100644 index 0000000000000..854924310b91a --- /dev/null +++ b/components/highlevel_oauth/sources/new-form-submission/new-form-submission.mjs @@ -0,0 +1,59 @@ +import common from "../common/base-polling.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "highlevel_oauth-new-form-submission", + name: "New Form Submission", + description: "Emit new event when a new form submission is created. [See the documentation](https://highlevel.stoplight.io/docs/integrations/a6114bd7685d1-get-forms-submissions)", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + generateMeta(submission) { + return { + id: submission.id, + summary: `New Submission ID: ${submission.id}`, + ts: Date.parse(submission.createdAt), + }; + }, + }, + async run() { + const lastDate = this._getLastDate(); + let maxDate = lastDate; + + const results = []; + const params = { + limit: 100, + page: 1, + startAt: lastDate, + locationId: this.app.getLocationId(), + }; + let total; + + do { + const { + submissions = [], meta, + } = await this.app.listFormSubmissions({ + params, + }); + for (const submission of submissions) { + results.push(submission); + if (!maxDate || Date.parse(submission.createdAt) > Date.parse(maxDate)) { + maxDate = submission.createdAt.slice(0, 10); + } + } + total = meta?.total; + params.page++; + } while (results.length < total); + + this._setLastDate(maxDate); + + results.forEach((submission) => { + const meta = this.generateMeta(submission); + this.$emit(submission, meta); + }); + }, + sampleEmit, +}; diff --git a/components/highlevel_oauth/sources/new-form-submission/test-event.mjs b/components/highlevel_oauth/sources/new-form-submission/test-event.mjs new file mode 100644 index 0000000000000..e6526fb3cd822 --- /dev/null +++ b/components/highlevel_oauth/sources/new-form-submission/test-event.mjs @@ -0,0 +1,59 @@ +export default { + "id": "67f029b5735c5378f6ba3b8a", + "contactId": "2N41CyHhuw4dUROfablK", + "formId": "AhRYrvMdMFRmZ7GxDlDS", + "name": "", + "email": "email@email.com", + "others": { + "first_name": "", + "last_name": "", + "phone": "", + "email": "email@email.com", + "terms_and_conditions": "By checking this box, I consent to receive transactional messages related to my account, orders, or services I have requested. These messages may include appointment reminders, order confirmations, and account notifications among others. Message frequency may vary. Message & Data rates may apply.Reply HELP for help or STOP to opt-out.; By checking this box, I consent to receive marketing and promotional messages, including special offers, discounts, new product updates among others. Message frequency may vary. Message & Data rates may apply. Reply HELP for help or STOP to opt-out.", + "formId": "AhRYrvMdMFRmZ7GxDlDS", + "location_id": "t8lsEHvfdlZugCobd4t7", + "sessionId": "59cdf305-4ac2-402d-bdbd-6e1e99be33cc", + "eventData": { + "source": "Direct traffic", + "referrer": "https://app.gohighlevel.com", + "adSource": "", + "page": { + "url": "https://link.apisystem.tech/widget/form/AhRYrvMdMFRmZ7GxDlDS", + "title": "" + }, + "timestamp": 1743792563661, + "contactSessionIds": { + "ids": [ + "59cdf305-4ac2-402d-bdbd-6e1e99be33cc" + ] + }, + "fbp": "", + "fbc": "", + "type": "page-visit", + "parentId": "AhRYrvMdMFRmZ7GxDlDS", + "pageVisitType": "form", + "domain": "link.apisystem.tech", + "version": "v3", + "parentName": "Form 0", + "fingerprint": null, + "documentURL": "https://link.apisystem.tech/widget/form/AhRYrvMdMFRmZ7GxDlDS", + "fbEventId": "024451af-ea45-4e6e-8b83-3385fb5eaff1", + "medium": "form", + "mediumId": "AhRYrvMdMFRmZ7GxDlDS" + }, + "Timezone": "America/Detroit (GMT-04:00)", + "fieldsOriSequance": [ + "first_name", + "last_name", + "phone", + "email", + "terms_and_conditions", + "button", + "header" + ], + "submissionId": "4e3e3cef-2ed9-421e-b939-2200e68ec3e8", + "signatureHash": "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", + "ip": "47.225.143.157" + }, + "createdAt": "2025-04-04T18:49:25.568Z" +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f65d684873cb5..ee66ff47f5321 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -379,8 +379,7 @@ importers: specifier: ^20.0.0 version: 20.0.0 - components/adyntel: - specifiers: {} + components/adyntel: {} components/aerisweather: dependencies: @@ -3994,8 +3993,8 @@ importers: components/elevenlabs: dependencies: '@pipedream/platform': - specifier: ^1.6.0 - version: 1.6.6 + specifier: ^3.0.3 + version: 3.0.3 form-data: specifier: ^4.0.0 version: 4.0.1 @@ -5968,8 +5967,8 @@ importers: components/highlevel_oauth: dependencies: '@pipedream/platform': - specifier: ^1.6.2 - version: 1.6.6 + specifier: ^3.0.3 + version: 3.0.3 components/highrise: dependencies: @@ -14895,8 +14894,8 @@ importers: docs-v2: dependencies: '@docsearch/react': - specifier: ^3.6.1 - version: 3.8.0(@algolia/client-search@5.17.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) + specifier: ^3.8.1 + version: 3.9.0(@algolia/client-search@5.17.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) '@vercel/analytics': specifier: ^1.3.1 version: 1.4.1(next@14.2.19(@babel/core@8.0.0-alpha.13)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(vue@2.7.16) @@ -15191,126 +15190,74 @@ packages: resolution: {integrity: sha512-C+jj5XBTCNs7AFwufOkPLhuqn9bdgSDcqLB6b/Ppi9Fujwt613vWmA1hxeG76RX49vzHZIDJLq6N/v0o2SY1sA==} engines: {node: '>=18'} - '@algolia/autocomplete-core@1.17.7': - resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + '@algolia/autocomplete-core@1.17.9': + resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==} - '@algolia/autocomplete-plugin-algolia-insights@1.17.7': - resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} + '@algolia/autocomplete-plugin-algolia-insights@1.17.9': + resolution: {integrity: sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==} peerDependencies: search-insights: '>= 1 < 3' - '@algolia/autocomplete-preset-algolia@1.17.7': - resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} + '@algolia/autocomplete-preset-algolia@1.17.9': + resolution: {integrity: sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/autocomplete-shared@1.17.7': - resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} + '@algolia/autocomplete-shared@1.17.9': + resolution: {integrity: sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.15.0': - resolution: {integrity: sha512-FaEM40iuiv1mAipYyiptP4EyxkJ8qHfowCpEeusdHUC4C7spATJYArD2rX3AxkVeREkDIgYEOuXcwKUbDCr7Nw==} - engines: {node: '>= 14.0.0'} - '@algolia/client-abtesting@5.17.1': resolution: {integrity: sha512-Os/xkQbDp5A5RdGYq1yS3fF69GoBJH5FIfrkVh+fXxCSe714i1Xdl9XoXhS4xG76DGKm6EFMlUqP024qjps8cg==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.15.0': - resolution: {integrity: sha512-lho0gTFsQDIdCwyUKTtMuf9nCLwq9jOGlLGIeQGKDxXF7HbiAysFIu5QW/iQr1LzMgDyM9NH7K98KY+BiIFriQ==} - engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.17.1': resolution: {integrity: sha512-WKpGC+cUhmdm3wndIlTh8RJXoVabUH+4HrvZHC4hXtvCYojEXYeep8RZstatwSZ7Ocg6Y2u67bLw90NEINuYEw==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.15.0': - resolution: {integrity: sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==} - engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.17.1': resolution: {integrity: sha512-5rb5+yPIie6912riAypTSyzbE23a7UM1UpESvD8GEPI4CcWQvA9DBlkRNx9qbq/nJ5pvv8VjZjUxJj7rFkzEAA==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.15.0': - resolution: {integrity: sha512-bDDEQGfFidDi0UQUCbxXOCdphbVAgbVmxvaV75cypBTQkJ+ABx/Npw7LkFGw1FsoVrttlrrQbwjvUB6mLVKs/w==} - engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.17.1': resolution: {integrity: sha512-nb/tfwBMn209TzFv1DDTprBKt/wl5btHVKoAww9fdEVdoKK02R2KAqxe5tuXLdEzAsS+LevRyOM/YjXuLmPtjQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.15.0': - resolution: {integrity: sha512-LfaZqLUWxdYFq44QrasCDED5bSYOswpQjSiIL7Q5fYlefAAUO95PzBPKCfUhSwhb4rKxigHfDkd81AvEicIEoA==} - engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.17.1': resolution: {integrity: sha512-JuNlZe1SdW9KbV0gcgdsiVkFfXt0mmPassdS3cBSGvZGbPB9JsHthD719k5Y6YOY4dGvw1JmC1i9CwCQHAS8hg==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.15.0': - resolution: {integrity: sha512-wu8GVluiZ5+il8WIRsGKu8VxMK9dAlr225h878GGtpTL6VBvwyJvAyLdZsfFIpY0iN++jiNb31q2C1PlPL+n/A==} - engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.17.1': resolution: {integrity: sha512-RBIFIv1QE3IlAikJKWTOpd6pwE4d2dY6t02iXH7r/SLXWn0HzJtsAPPeFg/OKkFvWAXt0H7In2/Mp7a1/Dy2pw==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.15.0': - resolution: {integrity: sha512-Z32gEMrRRpEta5UqVQA612sLdoqY3AovvUPClDfMxYrbdDAebmGDVPtSogUba1FZ4pP5dx20D3OV3reogLKsRA==} - engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.17.1': resolution: {integrity: sha512-bd5JBUOP71kPsxwDcvOxqtqXXVo/706NFifZ/O5Rx5GB8ZNVAhg4l7aGoT6jBvEfgmrp2fqPbkdIZ6JnuOpGcw==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.15.0': - resolution: {integrity: sha512-MkqkAxBQxtQ5if/EX2IPqFA7LothghVyvPoRNA/meS2AW2qkHwcxjuiBxv4H6mnAVEPfJlhu9rkdVz9LgCBgJg==} - engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.17.1': resolution: {integrity: sha512-T18tvePi1rjRYcIKhd82oRukrPWHxG/Iy1qFGaxCplgRm9Im5z96qnYOq75MSKGOUHkFxaBKJOLmtn8xDR+Mcw==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.15.0': - resolution: {integrity: sha512-QPrFnnGLMMdRa8t/4bs7XilPYnoUXDY8PMQJ1sf9ZFwhUysYYhQNX34/enoO0LBjpoOY6rLpha39YQEFbzgKyQ==} - engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.17.1': resolution: {integrity: sha512-gDtow+AUywTehRP8S1tWKx2IvhcJOxldAoqBxzN3asuQobF7er5n72auBeL++HY4ImEuzMi7PDOA/Iuwxs2IcA==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.15.0': - resolution: {integrity: sha512-5eupMwSqMLDObgSMF0XG958zR6GJP3f7jHDQ3/WlzCM9/YIJiWIUoJFGsko9GYsA5xbLDHE/PhWtq4chcCdaGQ==} - engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.17.1': resolution: {integrity: sha512-2992tTHkRe18qmf5SP57N78kN1D3e5t4PO1rt10sJncWtXBZWiNOK6K/UcvWsFbNSGAogFcIcvIMAl5mNp6RWA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.15.0': - resolution: {integrity: sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==} - engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.17.1': resolution: {integrity: sha512-XpKgBfyczVesKgr7DOShNyPPu5kqlboimRRPjdqAw5grSyHhCmb8yoTIKy0TCqBABZeXRPMYT13SMruUVRXvHA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.15.0': - resolution: {integrity: sha512-rOZ+c0P7ajmccAvpeeNrUmEKoliYFL8aOR5qGW5pFq3oj3Iept7Y5mEtEsOBYsRt6qLnaXn4zUKf+N8nvJpcIw==} - engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.17.1': resolution: {integrity: sha512-EhUomH+DZP5vb6DnEjT0GvXaXBSwzZnuU6hPGNU1EYKRXDouRjII/bIWpVjt7ycMgL2D2oQruqDh6rAWUhQwRw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.15.0': - resolution: {integrity: sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==} - engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.17.1': resolution: {integrity: sha512-PSnENJtl4/wBWXlGyOODbLYm6lSiFqrtww7UpQRCJdsHXlJKF8XAP6AME8NxvbE0Qo/RJUxK0mvyEh9sQcx6bg==} engines: {node: '>= 14.0.0'} @@ -16480,15 +16427,15 @@ packages: resolution: {integrity: sha512-4JINx4Rttha29f50PBsJo48xZXx/He5yaIWJRwVarhYAN947+S84YciHl+AIhQNRPAFkg8+5qFngEGtKxQDWXA==} engines: {node: '>=18.18.0'} - '@docsearch/css@3.8.0': - resolution: {integrity: sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA==} + '@docsearch/css@3.9.0': + resolution: {integrity: sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==} - '@docsearch/react@3.8.0': - resolution: {integrity: sha512-WnFK720+iwTVt94CxY3u+FgX6exb3BfN5kE9xUY6uuAH/9W/UFboBZFLlrw/zxFRHoHZCOXRtOylsXF+6LHI+Q==} + '@docsearch/react@3.9.0': + resolution: {integrity: sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==} peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' + '@types/react': '>= 16.8.0 < 20.0.0' + react: '>= 16.8.0 < 20.0.0' + react-dom: '>= 16.8.0 < 20.0.0' search-insights: '>= 1 < 3' peerDependenciesMeta: '@types/react': @@ -20231,10 +20178,6 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - algoliasearch@5.15.0: - resolution: {integrity: sha512-Yf3Swz1s63hjvBVZ/9f2P1Uu48GjmjCN+Esxb6MAONMGtZB1fRX8/S1AhUTtsuTlcGovbYLxpHgc7wEzstDZBw==} - engines: {node: '>= 14.0.0'} - algoliasearch@5.17.1: resolution: {integrity: sha512-3CcbT5yTWJDIcBe9ZHgsPi184SkT1kyZi3GWlQU5EFgvq1V73X2sqHRkPCQMe0RA/uvZbB+1sFeAk73eWygeLg==} engines: {node: '>= 14.0.0'} @@ -29119,40 +29062,33 @@ snapshots: transitivePeerDependencies: - supports-color - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0)(search-insights@2.17.3)': + '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0)': + '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1) '@algolia/client-search': 5.17.1 - algoliasearch: 5.15.0 + algoliasearch: 5.17.1 - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0)': + '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1)': dependencies: '@algolia/client-search': 5.17.1 - algoliasearch: 5.15.0 - - '@algolia/client-abtesting@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 + algoliasearch: 5.17.1 '@algolia/client-abtesting@5.17.1': dependencies: @@ -29161,13 +29097,6 @@ snapshots: '@algolia/requester-fetch': 5.17.1 '@algolia/requester-node-http': 5.17.1 - '@algolia/client-analytics@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 - '@algolia/client-analytics@5.17.1': dependencies: '@algolia/client-common': 5.17.1 @@ -29175,17 +29104,8 @@ snapshots: '@algolia/requester-fetch': 5.17.1 '@algolia/requester-node-http': 5.17.1 - '@algolia/client-common@5.15.0': {} - '@algolia/client-common@5.17.1': {} - '@algolia/client-insights@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 - '@algolia/client-insights@5.17.1': dependencies: '@algolia/client-common': 5.17.1 @@ -29193,13 +29113,6 @@ snapshots: '@algolia/requester-fetch': 5.17.1 '@algolia/requester-node-http': 5.17.1 - '@algolia/client-personalization@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 - '@algolia/client-personalization@5.17.1': dependencies: '@algolia/client-common': 5.17.1 @@ -29207,13 +29120,6 @@ snapshots: '@algolia/requester-fetch': 5.17.1 '@algolia/requester-node-http': 5.17.1 - '@algolia/client-query-suggestions@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 - '@algolia/client-query-suggestions@5.17.1': dependencies: '@algolia/client-common': 5.17.1 @@ -29221,13 +29127,6 @@ snapshots: '@algolia/requester-fetch': 5.17.1 '@algolia/requester-node-http': 5.17.1 - '@algolia/client-search@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 - '@algolia/client-search@5.17.1': dependencies: '@algolia/client-common': 5.17.1 @@ -29235,13 +29134,6 @@ snapshots: '@algolia/requester-fetch': 5.17.1 '@algolia/requester-node-http': 5.17.1 - '@algolia/ingestion@1.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 - '@algolia/ingestion@1.17.1': dependencies: '@algolia/client-common': 5.17.1 @@ -29249,13 +29141,6 @@ snapshots: '@algolia/requester-fetch': 5.17.1 '@algolia/requester-node-http': 5.17.1 - '@algolia/monitoring@1.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 - '@algolia/monitoring@1.17.1': dependencies: '@algolia/client-common': 5.17.1 @@ -29263,13 +29148,6 @@ snapshots: '@algolia/requester-fetch': 5.17.1 '@algolia/requester-node-http': 5.17.1 - '@algolia/recommend@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 - '@algolia/recommend@5.17.1': dependencies: '@algolia/client-common': 5.17.1 @@ -29277,26 +29155,14 @@ snapshots: '@algolia/requester-fetch': 5.17.1 '@algolia/requester-node-http': 5.17.1 - '@algolia/requester-browser-xhr@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr@5.17.1': dependencies: '@algolia/client-common': 5.17.1 - '@algolia/requester-fetch@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-fetch@5.17.1': dependencies: '@algolia/client-common': 5.17.1 - '@algolia/requester-node-http@5.15.0': - dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-node-http@5.17.1': dependencies: '@algolia/client-common': 5.17.1 @@ -32230,14 +32096,14 @@ snapshots: tar-stream: 3.1.7 which: 4.0.0 - '@docsearch/css@3.8.0': {} + '@docsearch/css@3.9.0': {} - '@docsearch/react@3.8.0(@algolia/client-search@5.17.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': + '@docsearch/react@3.9.0(@algolia/client-search@5.17.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.17.1)(algoliasearch@5.15.0) - '@docsearch/css': 3.8.0 - algoliasearch: 5.15.0 + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.17.1)(algoliasearch@5.17.1) + '@docsearch/css': 3.9.0 + algoliasearch: 5.17.1 optionalDependencies: '@types/react': 18.3.12 react: 18.3.1 @@ -36839,22 +36705,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.15.0: - dependencies: - '@algolia/client-abtesting': 5.15.0 - '@algolia/client-analytics': 5.15.0 - '@algolia/client-common': 5.15.0 - '@algolia/client-insights': 5.15.0 - '@algolia/client-personalization': 5.15.0 - '@algolia/client-query-suggestions': 5.15.0 - '@algolia/client-search': 5.15.0 - '@algolia/ingestion': 1.15.0 - '@algolia/monitoring': 1.15.0 - '@algolia/recommend': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 - algoliasearch@5.17.1: dependencies: '@algolia/client-abtesting': 5.17.1