From f7d27f3725983f5da11c5e4661669d5219be38ba Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Thu, 27 Mar 2025 12:21:45 -0300 Subject: [PATCH 1/3] quriiri init --- .../actions/send-message/send-message.mjs | 122 +++++++++++++ components/quriiri/quriiri.app.mjs | 167 +++++++++++++++++- .../sources/new-message/new-message.mjs | 89 ++++++++++ 3 files changed, 377 insertions(+), 1 deletion(-) create mode 100644 components/quriiri/actions/send-message/send-message.mjs create mode 100644 components/quriiri/sources/new-message/new-message.mjs diff --git a/components/quriiri/actions/send-message/send-message.mjs b/components/quriiri/actions/send-message/send-message.mjs new file mode 100644 index 0000000000000..f39756f73ba3a --- /dev/null +++ b/components/quriiri/actions/send-message/send-message.mjs @@ -0,0 +1,122 @@ +import quriiri from "../../quriiri.app.mjs"; + +export default { + key: "quriiri-send-message", + name: "Send Message", + description: "Sends an SMS message using the Quriiri API. [See the documentation](https://docs.quriiri.fi/docs/quriiri/send-sms/operations/create-a)", + version: "0.0.{{ts}}", + type: "action", + props: { + quriiri: { + type: "app", + app: "quriiri", + }, + sender: { + propDefinition: [ + quriiri, + "sender", + ], + }, + destination: { + propDefinition: [ + quriiri, + "destination", + ], + }, + text: { + propDefinition: [ + quriiri, + "text", + ], + }, + senderType: { + propDefinition: [ + quriiri, + "senderType", + ], + optional: true, + }, + data: { + propDefinition: [ + quriiri, + "data", + ], + optional: true, + }, + udh: { + propDefinition: [ + quriiri, + "udh", + ], + optional: true, + }, + batchId: { + propDefinition: [ + quriiri, + "batchId", + ], + optional: true, + }, + billingRef: { + propDefinition: [ + quriiri, + "billingRef", + ], + optional: true, + }, + drUrl: { + propDefinition: [ + quriiri, + "drUrl", + ], + optional: true, + }, + drType: { + propDefinition: [ + quriiri, + "drType", + ], + optional: true, + }, + flash: { + propDefinition: [ + quriiri, + "flash", + ], + optional: true, + }, + validity: { + propDefinition: [ + quriiri, + "validity", + ], + optional: true, + }, + scheduleTime: { + propDefinition: [ + quriiri, + "scheduleTime", + ], + optional: true, + }, + }, + async run({ $ }) { + const response = await this.quriiri.sendSms({ + sender: this.sender, + destination: this.destination, + text: this.text, + senderType: this.senderType, + data: this.data, + udh: this.udh, + batchId: this.batchId, + billingRef: this.billingRef, + drUrl: this.drUrl, + drType: this.drType, + flash: this.flash, + validity: this.validity, + scheduleTime: this.scheduleTime, + }); + $.export("$summary", `Message sent successfully to ${this.destination}`); + return response; + }, +}; diff --git a/components/quriiri/quriiri.app.mjs b/components/quriiri/quriiri.app.mjs index 2fdfc4c9390e8..811bcce85f4f3 100644 --- a/components/quriiri/quriiri.app.mjs +++ b/components/quriiri/quriiri.app.mjs @@ -1,11 +1,176 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "quriiri", - propDefinitions: {}, + version: "0.0.{{ts}}", + propDefinitions: { + // Required props + sender: { + type: "string", + label: "Sender", + description: "The phone number or sender ID sending the SMS", + }, + destination: { + type: "string", + label: "Destination", + description: "The recipient's phone number", + }, + text: { + type: "string", + label: "Text", + description: "The message content", + }, + // Optional props + senderType: { + type: "string", + label: "Sender Type", + description: "The type of sender", + optional: true, + }, + data: { + type: "string", + label: "Data", + description: "Additional data", + optional: true, + }, + udh: { + type: "string", + label: "UDH", + description: "User Data Header", + optional: true, + }, + batchId: { + type: "string", + label: "Batch ID", + description: "Batch identifier", + optional: true, + }, + billingRef: { + type: "string", + label: "Billing Reference", + description: "Billing reference", + optional: true, + }, + drUrl: { + type: "string", + label: "Delivery Receipt URL", + description: "URL to receive delivery receipts", + optional: true, + }, + drType: { + type: "string", + label: "Delivery Receipt Type", + description: "Type of delivery receipt", + optional: true, + }, + flash: { + type: "boolean", + label: "Flash", + description: "Send as flash SMS", + optional: true, + }, + validity: { + type: "integer", + label: "Validity", + description: "Validity period of the message in minutes", + optional: true, + }, + scheduleTime: { + type: "string", + label: "Schedule Time", + description: "Time to schedule the message (ISO 8601 format)", + optional: true, + }, + }, methods: { // this.$auth contains connected account data authKeys() { console.log(Object.keys(this.$auth)); }, + _baseUrl() { + return "https://api.quriiri.fi"; + }, + async _makeRequest(opts = {}) { + const { + $, method = "GET", path = "/", headers, ...otherOpts + } = opts; + return axios($, { + ...otherOpts, + method, + url: this._baseUrl() + path, + headers: { + ...headers, + Authorization: `Bearer ${this.$auth.api_key}`, + }, + }); + }, + async sendSms(opts = {}) { + const { + sender, + destination, + text, + senderType, + data, + udh, + batchId, + billingRef, + drUrl, + drType, + flash, + validity, + scheduleTime, + } = opts; + + const payload = { + sender: sender, + destination: destination, + text: text, + }; + + if (senderType) payload.senderType = senderType; + if (data) payload.data = data; + if (udh) payload.udh = udh; + if (batchId) payload.batchId = batchId; + if (billingRef) payload.billingRef = billingRef; + if (drUrl) payload.drUrl = drUrl; + if (drType) payload.drType = drType; + if (flash !== undefined) payload.flash = flash; + if (validity !== undefined) payload.validity = validity; + if (scheduleTime) payload.scheduleTime = scheduleTime; + + return this._makeRequest({ + method: "POST", + path: "/send-sms", + data: payload, + }); + }, + async listIncomingMessages(opts = {}) { + return this._makeRequest({ + method: "GET", + path: "/messages/incoming", + params: opts, + }); + }, + async paginate(fn, ...opts) { + const results = []; + let more = true; + let page = 1; + + while (more) { + const response = await fn({ + ...opts, + page, + }); + if (response.length === 0) { + more = false; + } else { + results.push(...response); + page += 1; + } + } + + return results; + }, }, }; diff --git a/components/quriiri/sources/new-message/new-message.mjs b/components/quriiri/sources/new-message/new-message.mjs new file mode 100644 index 0000000000000..b41773b3a0e99 --- /dev/null +++ b/components/quriiri/sources/new-message/new-message.mjs @@ -0,0 +1,89 @@ +import { + axios, DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, +} from "@pipedream/platform"; +import quriiri from "../../quriiri.app.mjs"; + +export default { + key: "quriiri-new-message", + name: "New Quriiri Message", + description: "Emit a new event when a message is received at a specific phone number. [See the documentation]()", + version: "0.0.{{ts}}", + type: "source", + dedupe: "unique", + props: { + quriiri, + db: "$.service.db", + timer: { + type: "$.interface.timer", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + destinationPhoneNumber: { + type: "string", + label: "Destination Phone Number", + description: "The specific phone number to monitor for incoming messages.", + }, + }, + hooks: { + async deploy() { + const destinationPhoneNumber = this.destinationPhoneNumber; + const messages = await this.quriiri.paginate(this.quriiri.listIncomingMessages); + const filteredMessages = messages.filter( + (msg) => msg.destination === destinationPhoneNumber, + ); + const sortedMessages = filteredMessages.sort( + (a, b) => new Date(b.timestamp) - new Date(a.timestamp), + ); + const recentMessages = sortedMessages.slice(0, 50).reverse(); + for (const message of recentMessages) { + this.$emit(message, { + id: message.id || new Date(message.timestamp).getTime(), + summary: `New message from ${message.sender}`, + ts: new Date(message.timestamp).getTime(), + }); + } + const latestTimestamp = recentMessages.reduce( + (max, msg) => (new Date(msg.timestamp).getTime() > max + ? new Date(msg.timestamp).getTime() + : max), + 0, + ); + await this.db.set("lastTimestamp", latestTimestamp); + }, + async activate() { + // Activation logic can be added here if necessary + }, + async deactivate() { + // Deactivation logic can be added here if necessary + }, + }, + async run() { + const destinationPhoneNumber = this.destinationPhoneNumber; + const lastTimestamp = (await this.db.get("lastTimestamp")) || 0; + const messages = await this.quriiri.listIncomingMessages({ + since: lastTimestamp, + }); + const filteredMessages = messages.filter( + (msg) => msg.destination === destinationPhoneNumber, + ); + for (const message of filteredMessages) { + this.$emit(message, { + id: message.id || new Date(message.timestamp).getTime(), + summary: `New message from ${message.sender}`, + ts: message.timestamp + ? new Date(message.timestamp).getTime() + : Date.now(), + }); + } + if (filteredMessages.length > 0) { + const latestTimestamp = filteredMessages.reduce( + (max, msg) => (new Date(msg.timestamp).getTime() > max + ? new Date(msg.timestamp).getTime() + : max), + lastTimestamp, + ); + await this.db.set("lastTimestamp", latestTimestamp); + } + }, +}; From 320b7855453e35eda9726678b5303ce135afe755 Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Mon, 31 Mar 2025 11:31:56 -0300 Subject: [PATCH 2/3] [Components] quriiri #15041 Actions - Send Message --- .../actions/send-message/send-message.mjs | 145 +++++++-------- components/quriiri/common/constants.mjs | 20 ++ components/quriiri/package.json | 5 +- components/quriiri/quriiri.app.mjs | 172 ++---------------- .../sources/new-message/new-message.mjs | 89 --------- 5 files changed, 111 insertions(+), 320 deletions(-) create mode 100644 components/quriiri/common/constants.mjs delete mode 100644 components/quriiri/sources/new-message/new-message.mjs diff --git a/components/quriiri/actions/send-message/send-message.mjs b/components/quriiri/actions/send-message/send-message.mjs index f39756f73ba3a..c76e61cbf0c1f 100644 --- a/components/quriiri/actions/send-message/send-message.mjs +++ b/components/quriiri/actions/send-message/send-message.mjs @@ -1,120 +1,121 @@ +import { ConfigurationError } from "@pipedream/platform"; +import { + DR_TYPE_OPTIONS, + SENDER_TYPE_OPTIONS, +} from "../../common/constants.mjs"; import quriiri from "../../quriiri.app.mjs"; export default { key: "quriiri-send-message", name: "Send Message", description: "Sends an SMS message using the Quriiri API. [See the documentation](https://docs.quriiri.fi/docs/quriiri/send-sms/operations/create-a)", - version: "0.0.{{ts}}", + version: "0.0.1", type: "action", props: { - quriiri: { - type: "app", - app: "quriiri", - }, + quriiri, sender: { - propDefinition: [ - quriiri, - "sender", - ], + type: "string", + label: "Sender", + description: "Message sender. International numbers with + or 00 prefix and 5 to 15 numbers following it, national ones / shortcodes with 1 to 15 numbers, alphanumeric with max 11 characters. Although other characters may work, we cannot guarantee it and recommend restricting the characters used in alphanumeric senders to letters A-Z and a-z, and digits 0-9.", + optional: true, + }, + senderType: { + type: "string", + label: "Sender Type", + description: "Sender type. If missing, an attempt is made to guess one from the sender, and guess failure results in an error.", + options: SENDER_TYPE_OPTIONS, + optional: true, }, destination: { - propDefinition: [ - quriiri, - "destination", - ], + type: "string", + label: "Destination", + description: "Message destination number in international or national format. International numbers should begin with + or 00 prefix and national format numbers will be converted to Finnish ones. For maximum reliability, we recommend using only international format numbers, with nothing but digits following the international prefix. The HTTP response contains information about which international number each accepted destination was converted to or treated as. Accepts multiple values array in JSON, set multiple times with form POST and GET.", }, text: { - propDefinition: [ - quriiri, - "text", - ], - }, - senderType: { - propDefinition: [ - quriiri, - "senderType", - ], + type: "string", + label: "Text", + description: "Message text. Based on the text, the service automatically determines whether the message can be sent using the GSM character set or if sending it as Unicode is required. Also, the service determines automatically how many SMS messages sending the message will require. The general rule of thumb is that the first SMS using the GSM character set can hold up to 160 characters; if there are more, concatenation is required and each SMS (including the first one) can hold up to 153 characters. Note that some characters in the GSM character set will consume two characters instead of one. For Unicode, the corresponding numbers are 70 and 67. If text is provided, data is ignored. Message templates can be used by finding the template ID from the UI and using {template_ID} placeholder, e.g. \"Hello ${template_361}!\"", optional: true, }, data: { - propDefinition: [ - quriiri, - "data", - ], + type: "string", + label: "Data", + description: "Binary message data, bytes encoded as hexadecimal characters. If text is provided, data is ignored. Maximum number of bytes in udh and data combined is 140.", optional: true, }, udh: { - propDefinition: [ - quriiri, - "udh", - ], + type: "string", + label: "UDH", + description: "User data header, bytes encoded as hexadecimal characters. Maximum number of bytes in udh and data combined is 140. Note that concatenated text messages may be sent using the entire message context in the text parameter, without setting udh, and the service will take care of splitting the message into appropriately sized parts.", optional: true, }, batchId: { - propDefinition: [ - quriiri, - "batchId", - ], + type: "string", + label: "Batch ID", + description: "Batch ID, max 255 characters. Used to group interrelated messages, for example if some special actions should be taken to a group of separately sent but logically related messages. Under normal circumstances, the service does not use this parameter but just relays it back in corresponding delivery reports.", optional: true, }, billingRef: { - propDefinition: [ - quriiri, - "billingRef", - ], + type: "string", + label: "Billing Reference", + description: "Billing reference, max 255 characters. This is solely for the API user, the service does not do anything else with it besides relaying it back in corresponding delivery reports.", optional: true, }, drUrl: { - propDefinition: [ - quriiri, - "drUrl", - ], + type: "string", + label: "Delivery Receipt URL", + description: "Delivery report URL. URL where to relay delivery reports", optional: true, }, drType: { - propDefinition: [ - quriiri, - "drType", - ], + type: "string", + label: "Delivery Receipt Type", + description: "Delivery report type. Similarly as for supported API request types. Defaults to the format of the API request.", + options: DR_TYPE_OPTIONS, optional: true, }, flash: { - propDefinition: [ - quriiri, - "flash", - ], + type: "boolean", + label: "Flash", + description: "Send a \"flash\" SMS if set to true.", optional: true, }, validity: { - propDefinition: [ - quriiri, - "validity", - ], + type: "integer", + label: "Validity", + description: "Validity period of the message in minutes. If not set, defaults to the value set in your account details.", + min: 1, + max: 32767, optional: true, }, scheduleTime: { - propDefinition: [ - quriiri, - "scheduleTime", - ], + type: "string", + label: "Schedule Time", + description: "Schedule time can be used for message scheduling. If a message is scheduled, the API response contains messageid for later message cancellation, if needed. Schedule time must be set in `RFC 3339` format, ie. `2020-05-31T04:20:03Z`. In scheduling the seconds and milliseconds are ignored, so every scheduled message is sent in a resolution of minutes.", optional: true, }, }, async run({ $ }) { + if (!this.text && !this.data) { + throw new ConfigurationError("You must provide either 'Data' or 'Text' input."); + } const response = await this.quriiri.sendSms({ - sender: this.sender, - destination: this.destination, - text: this.text, - senderType: this.senderType, - data: this.data, - udh: this.udh, - batchId: this.batchId, - billingRef: this.billingRef, - drUrl: this.drUrl, - drType: this.drType, - flash: this.flash, - validity: this.validity, - scheduleTime: this.scheduleTime, + $, + data: { + sender: this.sender, + destinations: this.destination, + text: this.text, + sendertype: this.senderType, + data: this.data, + udh: this.udh, + batchid: this.batchId, + billingref: this.billingRef, + drurl: this.drUrl, + drtype: this.drType, + flash: this.flash, + validity: this.validity, + scheduletime: this.scheduleTime, + }, }); $.export("$summary", `Message sent successfully to ${this.destination}`); return response; diff --git a/components/quriiri/common/constants.mjs b/components/quriiri/common/constants.mjs new file mode 100644 index 0000000000000..108159d2e356b --- /dev/null +++ b/components/quriiri/common/constants.mjs @@ -0,0 +1,20 @@ +export const SENDER_TYPE_OPTIONS = [ + { + label: "International Number", + value: "MSISDN", + }, + { + label: "National Number / Shortcode", + value: "NATIONAL", + }, + { + label: "alphanumeric", + value: "ALNUM", + }, +]; + +export const DR_TYPE_OPTIONS = [ + "JSON", + "POST", + "GET", +]; diff --git a/components/quriiri/package.json b/components/quriiri/package.json index 44f53f2b6ee74..3870a93678afa 100644 --- a/components/quriiri/package.json +++ b/components/quriiri/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/quriiri", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream Quriiri Components", "main": "quriiri.app.mjs", "keywords": [ @@ -11,5 +11,8 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.3" } } diff --git a/components/quriiri/quriiri.app.mjs b/components/quriiri/quriiri.app.mjs index 811bcce85f4f3..6f82a6df5adc8 100644 --- a/components/quriiri/quriiri.app.mjs +++ b/components/quriiri/quriiri.app.mjs @@ -3,174 +3,30 @@ import { axios } from "@pipedream/platform"; export default { type: "app", app: "quriiri", - version: "0.0.{{ts}}", - propDefinitions: { - // Required props - sender: { - type: "string", - label: "Sender", - description: "The phone number or sender ID sending the SMS", - }, - destination: { - type: "string", - label: "Destination", - description: "The recipient's phone number", - }, - text: { - type: "string", - label: "Text", - description: "The message content", - }, - // Optional props - senderType: { - type: "string", - label: "Sender Type", - description: "The type of sender", - optional: true, - }, - data: { - type: "string", - label: "Data", - description: "Additional data", - optional: true, - }, - udh: { - type: "string", - label: "UDH", - description: "User Data Header", - optional: true, - }, - batchId: { - type: "string", - label: "Batch ID", - description: "Batch identifier", - optional: true, - }, - billingRef: { - type: "string", - label: "Billing Reference", - description: "Billing reference", - optional: true, - }, - drUrl: { - type: "string", - label: "Delivery Receipt URL", - description: "URL to receive delivery receipts", - optional: true, - }, - drType: { - type: "string", - label: "Delivery Receipt Type", - description: "Type of delivery receipt", - optional: true, - }, - flash: { - type: "boolean", - label: "Flash", - description: "Send as flash SMS", - optional: true, - }, - validity: { - type: "integer", - label: "Validity", - description: "Validity period of the message in minutes", - optional: true, - }, - scheduleTime: { - type: "string", - label: "Schedule Time", - description: "Time to schedule the message (ISO 8601 format)", - optional: true, - }, - }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); - }, _baseUrl() { - return "https://api.quriiri.fi"; + return `${this.$auth.api_url}`; + }, + _headers() { + return { + Authorization: `Bearer ${this.$auth.api_key}`, + }; }, - async _makeRequest(opts = {}) { - const { - $, method = "GET", path = "/", headers, ...otherOpts - } = opts; + _makeRequest({ + $ = this, path = "", ...opts + }) { return axios($, { - ...otherOpts, - method, url: this._baseUrl() + path, - headers: { - ...headers, - Authorization: `Bearer ${this.$auth.api_key}`, - }, + headers: this._headers(), + ...opts, }); }, - async sendSms(opts = {}) { - const { - sender, - destination, - text, - senderType, - data, - udh, - batchId, - billingRef, - drUrl, - drType, - flash, - validity, - scheduleTime, - } = opts; - - const payload = { - sender: sender, - destination: destination, - text: text, - }; - - if (senderType) payload.senderType = senderType; - if (data) payload.data = data; - if (udh) payload.udh = udh; - if (batchId) payload.batchId = batchId; - if (billingRef) payload.billingRef = billingRef; - if (drUrl) payload.drUrl = drUrl; - if (drType) payload.drType = drType; - if (flash !== undefined) payload.flash = flash; - if (validity !== undefined) payload.validity = validity; - if (scheduleTime) payload.scheduleTime = scheduleTime; - + sendSms(opts = {}) { return this._makeRequest({ method: "POST", - path: "/send-sms", - data: payload, + path: "/sendsms", + ...opts, }); }, - async listIncomingMessages(opts = {}) { - return this._makeRequest({ - method: "GET", - path: "/messages/incoming", - params: opts, - }); - }, - async paginate(fn, ...opts) { - const results = []; - let more = true; - let page = 1; - - while (more) { - const response = await fn({ - ...opts, - page, - }); - if (response.length === 0) { - more = false; - } else { - results.push(...response); - page += 1; - } - } - - return results; - }, }, }; diff --git a/components/quriiri/sources/new-message/new-message.mjs b/components/quriiri/sources/new-message/new-message.mjs deleted file mode 100644 index b41773b3a0e99..0000000000000 --- a/components/quriiri/sources/new-message/new-message.mjs +++ /dev/null @@ -1,89 +0,0 @@ -import { - axios, DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, -} from "@pipedream/platform"; -import quriiri from "../../quriiri.app.mjs"; - -export default { - key: "quriiri-new-message", - name: "New Quriiri Message", - description: "Emit a new event when a message is received at a specific phone number. [See the documentation]()", - version: "0.0.{{ts}}", - type: "source", - dedupe: "unique", - props: { - quriiri, - db: "$.service.db", - timer: { - type: "$.interface.timer", - default: { - intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, - }, - }, - destinationPhoneNumber: { - type: "string", - label: "Destination Phone Number", - description: "The specific phone number to monitor for incoming messages.", - }, - }, - hooks: { - async deploy() { - const destinationPhoneNumber = this.destinationPhoneNumber; - const messages = await this.quriiri.paginate(this.quriiri.listIncomingMessages); - const filteredMessages = messages.filter( - (msg) => msg.destination === destinationPhoneNumber, - ); - const sortedMessages = filteredMessages.sort( - (a, b) => new Date(b.timestamp) - new Date(a.timestamp), - ); - const recentMessages = sortedMessages.slice(0, 50).reverse(); - for (const message of recentMessages) { - this.$emit(message, { - id: message.id || new Date(message.timestamp).getTime(), - summary: `New message from ${message.sender}`, - ts: new Date(message.timestamp).getTime(), - }); - } - const latestTimestamp = recentMessages.reduce( - (max, msg) => (new Date(msg.timestamp).getTime() > max - ? new Date(msg.timestamp).getTime() - : max), - 0, - ); - await this.db.set("lastTimestamp", latestTimestamp); - }, - async activate() { - // Activation logic can be added here if necessary - }, - async deactivate() { - // Deactivation logic can be added here if necessary - }, - }, - async run() { - const destinationPhoneNumber = this.destinationPhoneNumber; - const lastTimestamp = (await this.db.get("lastTimestamp")) || 0; - const messages = await this.quriiri.listIncomingMessages({ - since: lastTimestamp, - }); - const filteredMessages = messages.filter( - (msg) => msg.destination === destinationPhoneNumber, - ); - for (const message of filteredMessages) { - this.$emit(message, { - id: message.id || new Date(message.timestamp).getTime(), - summary: `New message from ${message.sender}`, - ts: message.timestamp - ? new Date(message.timestamp).getTime() - : Date.now(), - }); - } - if (filteredMessages.length > 0) { - const latestTimestamp = filteredMessages.reduce( - (max, msg) => (new Date(msg.timestamp).getTime() > max - ? new Date(msg.timestamp).getTime() - : max), - lastTimestamp, - ); - await this.db.set("lastTimestamp", latestTimestamp); - } - }, -}; From 2f17efc7795c75c80ef97821af300453fc6eaf30 Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Mon, 31 Mar 2025 11:34:48 -0300 Subject: [PATCH 3/3] pnpm update --- pnpm-lock.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78d1153d9e8f4..959ec948fbfbd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10204,7 +10204,11 @@ importers: specifier: ^1.2.1 version: 1.6.6 - components/quriiri: {} + components/quriiri: + dependencies: + '@pipedream/platform': + specifier: ^3.0.3 + version: 3.0.3 components/qwilr: {} @@ -34389,6 +34393,8 @@ 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: