From de4e84d7ffb761da2825617a5bb2fc314c3a708c Mon Sep 17 00:00:00 2001 From: Jorge Cortes Date: Wed, 9 Oct 2024 16:09:33 -0500 Subject: [PATCH] SMSlink: New action components --- .../actions/create-contact/create-contact.mjs | 92 +++++++++++++++++++ .../actions/delete-contact/delete-contact.mjs | 53 +++++++++++ .../delete-sms-campaign.mjs | 47 ++++++++++ components/smslink_nc/package.json | 7 +- components/smslink_nc/smslink_nc.app.mjs | 80 +++++++++++++++- pnpm-lock.yaml | 5 +- 6 files changed, 277 insertions(+), 7 deletions(-) create mode 100644 components/smslink_nc/actions/create-contact/create-contact.mjs create mode 100644 components/smslink_nc/actions/delete-contact/delete-contact.mjs create mode 100644 components/smslink_nc/actions/delete-sms-campaign/delete-sms-campaign.mjs diff --git a/components/smslink_nc/actions/create-contact/create-contact.mjs b/components/smslink_nc/actions/create-contact/create-contact.mjs new file mode 100644 index 0000000000000..221b6f02160a1 --- /dev/null +++ b/components/smslink_nc/actions/create-contact/create-contact.mjs @@ -0,0 +1,92 @@ +import app from "../../smslink_nc.app.mjs"; + +export default { + key: "smslink_nc-create-contact", + name: "Create Contact", + description: "Create a new contact. [See the documentation](https://api.smslink.nc/api/documentation#/Contact/556b84f384422939a9db51e60685798a).", + version: "0.0.1", + type: "action", + props: { + app, + phoneNumber: { + type: "string", + label: "Phone Number", + description: "The phone number of the contact.", + }, + email: { + type: "string", + label: "Email", + description: "The email of the contact.", + optional: true, + }, + firstName: { + type: "string", + label: "First Name", + description: "The first name of the contact.", + optional: true, + }, + lastName: { + type: "string", + label: "Last Name", + description: "The last name of the contact.", + optional: true, + }, + param1: { + type: "string", + label: "Param 1", + description: "Custom parameter 1.", + optional: true, + }, + param2: { + type: "string", + label: "Param 2", + description: "Custom parameter 2.", + optional: true, + }, + param3: { + type: "string", + label: "Param 3", + description: "Custom parameter 3.", + optional: true, + }, + }, + methods: { + createContact(args = {}) { + return this.app.post({ + path: "/contact", + ...args, + }); + }, + }, + async run({ $ }) { + const { + createContact, + phoneNumber, + email, + firstName, + lastName, + param1, + param2, + param3, + } = this; + + const response = await createContact({ + $, + data: { + contacts: [ + { + phone_number: phoneNumber, + email, + first_name: firstName, + last_name: lastName, + param_1: param1, + param_2: param2, + param_3: param3, + }, + ], + }, + }); + $.export("$summary", "Successfully created a new contact."); + return response; + }, +}; diff --git a/components/smslink_nc/actions/delete-contact/delete-contact.mjs b/components/smslink_nc/actions/delete-contact/delete-contact.mjs new file mode 100644 index 0000000000000..585032d7a3cdb --- /dev/null +++ b/components/smslink_nc/actions/delete-contact/delete-contact.mjs @@ -0,0 +1,53 @@ +import app from "../../smslink_nc.app.mjs"; + +export default { + key: "smslink_nc-delete-contact", + name: "Delete Contact", + description: "Deletes a contact. [See the documentation](https://api.smslink.nc/api/documentation)", + version: "0.0.1", + type: "action", + props: { + app, + phoneNumber: { + label: "Contact Phone Number", + description: "The phone number of the contact to delete.", + propDefinition: [ + app, + "contactId", + () => ({ + mapper: ({ + phone_number: value, first_name: firstName, last_name: lastName, + }) => ({ + value, + label: `${firstName || ""} ${lastName || ""} (${value})`.trim(), + }), + }), + ], + }, + }, + methods: { + deleteContact(args = {}) { + return this.app.delete({ + path: "/contact", + ...args, + }); + }, + }, + async run({ $ }) { + const { + deleteContact, + phoneNumber, + } = this; + + const response = await deleteContact({ + $, + data: { + phone_numbers: [ + phoneNumber, + ], + }, + }); + $.export("$summary", "Successfully deleted contact."); + return response; + }, +}; diff --git a/components/smslink_nc/actions/delete-sms-campaign/delete-sms-campaign.mjs b/components/smslink_nc/actions/delete-sms-campaign/delete-sms-campaign.mjs new file mode 100644 index 0000000000000..be56e2a61d5cb --- /dev/null +++ b/components/smslink_nc/actions/delete-sms-campaign/delete-sms-campaign.mjs @@ -0,0 +1,47 @@ +import app from "../../smslink_nc.app.mjs"; + +export default { + key: "smslink_nc-delete-sms-campaign", + name: "Delete SMS Campaign", + description: "Delete an existing SMS campaign. [See the documentation](https://api.smslink.nc/api/documentation)", + version: "0.0.1", + type: "action", + props: { + app, + campaignId: { + propDefinition: [ + app, + "campaignId", + ], + }, + }, + methods: { + deleteCampaign({ + campaignId, ...args + } = {}) { + return this.app.delete({ + path: `/sms-campaign/${campaignId}`, + ...args, + }); + }, + }, + async run({ $ }) { + const { + deleteCampaign, + campaignId, + } = this; + + await deleteCampaign({ + $, + campaignId, + params: { + by: "id", + }, + }); + + $.export("$summary", "Successfully deleted SMS campaign."); + return { + sucess: true, + }; + }, +}; diff --git a/components/smslink_nc/package.json b/components/smslink_nc/package.json index 0b97a6c2c1d11..cdf297634022f 100644 --- a/components/smslink_nc/package.json +++ b/components/smslink_nc/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/smslink_nc", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream SMSlink nc Components", "main": "smslink_nc.app.mjs", "keywords": [ @@ -11,5 +11,8 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "3.0.3" } -} \ No newline at end of file +} diff --git a/components/smslink_nc/smslink_nc.app.mjs b/components/smslink_nc/smslink_nc.app.mjs index 65131a164d1d7..457c68a5a7604 100644 --- a/components/smslink_nc/smslink_nc.app.mjs +++ b/components/smslink_nc/smslink_nc.app.mjs @@ -1,11 +1,83 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "smslink_nc", - propDefinitions: {}, + propDefinitions: { + contactId: { + type: "string", + label: "Contact ID", + description: "The ID of the contact to delete or manipulate.", + async options({ + mapper = ({ + id: value, phone_number: phoneNumber, first_name: firstName, last_name: lastName, + }) => ({ + value, + label: `${firstName || ""} ${lastName || ""} (${phoneNumber})`.trim(), + }), + }) { + const { object: { data } } = await this.getContacts(); + return data.map(mapper); + }, + }, + campaignId: { + type: "string", + label: "Campaign ID", + description: "The ID of the SMS campaign to delete or manipulate.", + async options() { + const { object: { data } } = await this.getSMSCampaigns(); + return data.map(({ + id: value, title: label, + }) => ({ + value, + label, + })); + }, + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + getUrl(path) { + return `https://api.smslink.nc/api${path}`; + }, + getHeaders(headers) { + return { + Accept: "application/json", + Authorization: `Bearer ${this.$auth.personal_access_token}`, + ...headers, + }; + }, + _makeRequest({ + $ = this, path, headers, ...args + } = {}) { + return axios($, { + ...args, + url: this.getUrl(path), + headers: this.getHeaders(headers), + }); + }, + post(args = {}) { + return this._makeRequest({ + method: "POST", + ...args, + }); + }, + delete(args = {}) { + return this._makeRequest({ + method: "DELETE", + ...args, + }); + }, + getContacts(args = {}) { + return this._makeRequest({ + path: "/contact", + ...args, + }); + }, + getSMSCampaigns(args = {}) { + return this._makeRequest({ + path: "/sms-campaign", + ...args, + }); }, }, }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57193cde8027a..8dd802aa760fc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9279,7 +9279,10 @@ importers: query-string: 8.1.0 components/smslink_nc: - specifiers: {} + specifiers: + '@pipedream/platform': 3.0.3 + dependencies: + '@pipedream/platform': 3.0.3 components/smtp2go: specifiers: