From 6201fa05a3ee94712a724c2805290e7cb0850fea Mon Sep 17 00:00:00 2001 From: Deusdete Ferreira Date: Tue, 10 Jun 2025 20:01:34 -0300 Subject: [PATCH 01/10] Implement CodeQR API integration with actions for link and QR code management --- components/codeqr/README.md | 17 ++ .../actions/create-link/create-link.mjs | 233 ++++++++++++++++++ .../actions/create-qrcode/create-qrcode.mjs | 136 ++++++++++ .../actions/delete-link/delete-link.mjs | 46 ++++ .../actions/delete-qrcode/delete-qrcode.mjs | 43 ++++ .../actions/get-link-info/get-link-info.mjs | 72 ++++++ .../get-qrcode-info/get-qrcode-info.mjs | 66 +++++ components/codeqr/codeqr.app.mjs | 67 ++++- components/codeqr/common/constants.mjs | 5 + components/codeqr/package.json | 7 +- 10 files changed, 688 insertions(+), 4 deletions(-) create mode 100644 components/codeqr/README.md create mode 100644 components/codeqr/actions/create-link/create-link.mjs create mode 100644 components/codeqr/actions/create-qrcode/create-qrcode.mjs create mode 100644 components/codeqr/actions/delete-link/delete-link.mjs create mode 100644 components/codeqr/actions/delete-qrcode/delete-qrcode.mjs create mode 100644 components/codeqr/actions/get-link-info/get-link-info.mjs create mode 100644 components/codeqr/actions/get-qrcode-info/get-qrcode-info.mjs create mode 100644 components/codeqr/common/constants.mjs diff --git a/components/codeqr/README.md b/components/codeqr/README.md new file mode 100644 index 0000000000000..aa4a86eaf204f --- /dev/null +++ b/components/codeqr/README.md @@ -0,0 +1,17 @@ +# Overview + +The CodeQR API enables you to create and manage dynamic QR Codes, shorten URLs, capture leads, and track engagement through powerful analytics. By integrating CodeQR with Pipedream, you can automate the generation of QR Codes and short links across a wide range of workflows — from marketing automation to customer support — and seamlessly connect these actions to over 2,500 apps. fileciteturn3file0 + +# Example Use Cases + +- **Dynamic QR Code Generation for Marketing Campaigns** + Automatically generate campaign-specific QR Codes when a new campaign is launched in your CRM or marketing tool. Store the QR code image in your cloud drive (e.g., Google Drive or Dropbox), and attach it to your newsletters or printed materials. + +- **URL Shortening with Pre-Redirect Lead Capture** + When a new record is added to Airtable or a Google Sheet with a destination URL, create a short link using CodeQR that optionally includes a lead capture page before redirection. Use this to qualify traffic before they reach your landing page. + +- **Automated Feedback Collection** + Trigger the creation of a QR code linked to a feedback form after each customer interaction in platforms like Zendesk, Intercom, or HubSpot. Easily track which customers scanned the code and filled the form, and centralize the responses. + +- **Analytics Monitoring and Reporting** + Use Pipedream workflows to pull scan and click analytics from CodeQR at regular intervals. Send the data to Slack, update a Google Sheet, or visualize trends on a custom dashboard. diff --git a/components/codeqr/actions/create-link/create-link.mjs b/components/codeqr/actions/create-link/create-link.mjs new file mode 100644 index 0000000000000..ae82da96acf55 --- /dev/null +++ b/components/codeqr/actions/create-link/create-link.mjs @@ -0,0 +1,233 @@ +import codeqr from "../../codeqr.app.mjs"; + +export default { + key: "codeqr-create-link", + name: "Create a CodeQR Link", + description: + "Creates a short link in CodeQR using the CodeQR API. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/create-a-link)", + version: "0.0.1", + type: "action", + props: { + codeqr, + url: { + type: "string", + label: "URL", + description: "The destination URL of the short link.", + }, + key: { + type: "string", + label: "Key", + description: + "The short link slug. If not provided, a random 7-character slug will be generated.", + optional: true, + }, + domain: { + type: "string", + label: "Domain", + description: + "The domain of the short link. If not provided, the default workspace domain will be used.", + optional: true, + }, + externalId: { + type: "string", + label: "External ID", + description: + "This is the ID of the link in your database. Must be prefixed with ext_.", + optional: true, + }, + password: { + type: "string", + label: "Password", + description: "The password required to access the destination URL.", + optional: true, + }, + flexible: { + type: "boolean", + label: "Flexible Link", + description: + "Whether this is a flexible link with dynamic destination setting.", + optional: true, + }, + title: { + type: "string", + label: "Title", + description: "The title displayed on the short link page.", + optional: true, + }, + description: { + type: "string", + label: "Description", + description: "A description displayed on the short link page.", + optional: true, + }, + image: { + type: "string", + label: "Image URL", + description: "URL of the image displayed on the short link page.", + optional: true, + }, + video: { + type: "string", + label: "Video URL", + description: "URL of the video displayed on the short link page.", + optional: true, + }, + proxy: { + type: "boolean", + label: "Proxy", + description: "Enable proxy settings.", + optional: true, + }, + preRedirection: { + type: "boolean", + label: "Pre-Redirection Page", + description: + "Enable a pre-redirection page before sending users to the destination URL.", + optional: true, + }, + pageId: { + type: "string", + label: "Page ID", + description: "ID of your page created in CodeQR.", + optional: true, + }, + pageUrl: { + type: "string", + label: "Page URL", + description: "The URL for the pre-redirect page.", + optional: true, + }, + rewrite: { + type: "boolean", + label: "Rewrite Link", + description: "Enable link rewriting.", + optional: true, + }, + ios: { + type: "string", + label: "iOS URL", + description: "The iOS destination URL for device-specific redirection.", + optional: true, + }, + android: { + type: "string", + label: "Android URL", + description: + "The Android destination URL for device-specific redirection.", + optional: true, + }, + doIndex: { + type: "boolean", + label: "Allow Indexing", + description: "Enable indexing of the short link.", + optional: true, + }, + comments: { + type: "string", + label: "Comments", + description: "Comments or notes about the short link.", + optional: true, + }, + expiresAt: { + type: "string", + label: "Expiration Date", + description: + "The date and time when the short link will expire (ISO 8601).", + optional: true, + }, + expiredUrl: { + type: "string", + label: "Expired Redirect URL", + description: "The URL to redirect to when the short link has expired.", + optional: true, + }, + geo: { + type: "object", + label: "Geo-Targeting", + description: + "Mapping of country codes to destination URLs (JSON format).", + optional: true, + }, + publicStats: { + type: "boolean", + label: "Public Stats", + description: "Whether the short link's stats are publicly accessible.", + optional: true, + }, + tagIds: { + type: "string[]", + label: "Tag IDs", + description: "Array of tag IDs to apply to the short link.", + optional: true, + }, + tagNames: { + type: "string[]", + label: "Tag Names", + description: "Array of tag names to apply to the short link.", + optional: true, + }, + }, + + async run({ $ }) { + const { + url, + key, + domain, + externalId, + password, + flexible, + title, + description, + image, + video, + proxy, + preRedirection, + pageId, + pageUrl, + rewrite, + ios, + android, + doIndex, + comments, + expiresAt, + expiredUrl, + geo, + publicStats, + tagIds, + tagNames, + } = this; + + const payload = { + url, + }; + key && (payload.key = key); + domain && (payload.domain = domain); + externalId && (payload.externalId = externalId); + password && (payload.password = password); + flexible != null && (payload.flexible = flexible); + title && (payload.title = title); + description && (payload.description = description); + image && (payload.image = image); + video && (payload.video = video); + proxy != null && (payload.proxy = proxy); + preRedirection != null && (payload.preRedirection = preRedirection); + pageId && (payload.pageId = pageId); + pageUrl && (payload.pageUrl = pageUrl); + rewrite != null && (payload.rewrite = rewrite); + ios && (payload.ios = ios); + android && (payload.android = android); + doIndex != null && (payload.doIndex = doIndex); + comments && (payload.comments = comments); + expiresAt && (payload.expiresAt = expiresAt); + expiredUrl && (payload.expiredUrl = expiredUrl); + geo && (payload.geo = geo); + publicStats != null && (payload.publicStats = publicStats); + + if (tagIds?.length) payload.tagIds = tagIds; + if (tagNames?.length) payload.tagNames = tagNames; + + const response = await this.codeqr.createLink(payload); + response && $.export("$summary", "Link created successfully"); + return response; + }, +}; diff --git a/components/codeqr/actions/create-qrcode/create-qrcode.mjs b/components/codeqr/actions/create-qrcode/create-qrcode.mjs new file mode 100644 index 0000000000000..a6252c1bc2b07 --- /dev/null +++ b/components/codeqr/actions/create-qrcode/create-qrcode.mjs @@ -0,0 +1,136 @@ +import codeqr from "../../codeqr.app.mjs"; + +export default { + key: "codeqr-create-qrcode", + name: "Create a QR Code", + description: "Creates a new QR Code in CodeQR using the QR Codes API. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/create-a-qrcode)", + version: "0.0.1", + type: "action", + props: { + codeqr, + type: { + type: "string", + label: "QR Code Type", + description: "Select the type of QR Code to generate.", + optional: false, + }, + static: { + type: "boolean", + label: "Static/Dynamic", + description: + "Yes = Static QR Code (fixed content); No = Dynamic QR Code (editable content).", + optional: false, + default: true, + }, + text: { + type: "string", + label: "Text", + description: "Text content stored in the QR Code.", + optional: true, + }, + url: { + type: "string", + label: "URL", + description: "The destination URL of the QR Code.", + optional: true, + }, + email: { + type: "object", + label: "Email", + description: "Email data for email-based QR Codes (JSON format).", + optional: true, + }, + phone: { + type: "string", + label: "Phone", + description: "Phone number stored in the QR Code.", + optional: true, + }, + expiresAt: { + type: "string", + label: "Expiration Date", + description: "Expiration date of the QR Code (ISO 8601).", + optional: true, + }, + trackConversion: { + type: "boolean", + label: "Track Conversion", + description: "Enable tracking of conversions for the QR Code.", + optional: true, + }, + title: { + type: "string", + label: "Title", + description: "Title associated with the QR Code.", + optional: true, + }, + description: { + type: "string", + label: "Description", + description: "Description associated with the QR Code.", + optional: true, + }, + image: { + type: "string", + label: "Image URL", + description: "URL of an image associated with the QR Code.", + optional: true, + }, + bgColor: { + type: "string", + label: "Background Color", + description: "Background color of the QR Code.", + optional: true, + }, + fgColor: { + type: "string", + label: "Foreground Color", + description: "Foreground color of the QR Code.", + optional: true, + }, + size: { + type: "integer", + label: "Size", + description: "Size of the QR Code in pixels.", + optional: true, + }, + showLogo: { + type: "boolean", + label: "Show Logo", + description: "Whether to display a logo in the QR Code.", + optional: true, + }, + publicStats: { + type: "boolean", + label: "Public Stats", + description: "Whether the QR Code statistics are publicly accessible.", + optional: true, + }, + }, + async run({ $ }) { + const payload = {}; + for (const key of [ + "type", + "static", + "text", + "url", + "email", + "phone", + "expiresAt", + "trackConversion", + "title", + "description", + "image", + "bgColor", + "fgColor", + "size", + "showLogo", + "publicStats", + ]) { + if (this[key] != null) payload[key] = this[key]; + } + const response = await this.codeqr.createQrcode(payload); + $.export("$summary", "QR Code created successfully."); + return response; + }, +}; diff --git a/components/codeqr/actions/delete-link/delete-link.mjs b/components/codeqr/actions/delete-link/delete-link.mjs new file mode 100644 index 0000000000000..ea7a7be9caca0 --- /dev/null +++ b/components/codeqr/actions/delete-link/delete-link.mjs @@ -0,0 +1,46 @@ +import { ConfigurationError } from "@pipedream/platform"; +import codeqr from "../../codeqr.app.mjs"; + +export default { + key: "codeqr-delete-link", + name: "Delete a Link", + description: "Deletes a short link in CodeQR by linkId or externalId. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/delete-a-link)", + version: "0.0.1", + type: "action", + props: { + codeqr, + linkId: { + type: "string", + label: "Link ID", + description: "The unique ID of the link to delete.", + optional: true, + }, + externalId: { + type: "string", + label: "External ID", + description: + "This is the ID of the link in your database. Must be prefixed with ext_.", + optional: true, + }, + }, + async run({ $ }) { + const { + linkId, externalId, + } = this; + if (!linkId && !externalId) { + throw new ConfigurationError( + "Please provide either linkId or externalId to delete the link.", + ); + } + + // Determine identifier to use + const identifier = linkId || externalId; + + // Perform DELETE request to /links/{identifier} + await this.codeqr.deleteLink(identifier); + $.export("$summary", `Link deleted successfully (${identifier}).`); + return { + success: true, + }; + }, +}; diff --git a/components/codeqr/actions/delete-qrcode/delete-qrcode.mjs b/components/codeqr/actions/delete-qrcode/delete-qrcode.mjs new file mode 100644 index 0000000000000..a926e46267750 --- /dev/null +++ b/components/codeqr/actions/delete-qrcode/delete-qrcode.mjs @@ -0,0 +1,43 @@ +import { ConfigurationError } from "@pipedream/platform"; +import codeqr from "../../codeqr.app.mjs"; + +export default { + key: "codeqr-delete-qrcode", + name: "Delete a QR Code", + description: + "Deletes a QR Code in CodeQR by qrcodeId or externalId. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/delete-a-qrcode)", + version: "0.0.1", + type: "action", + props: { + codeqr, + qrcodeId: { + type: "string", + label: "QR Code ID", + description: "The unique ID of the QR Code to delete.", + optional: true, + }, + externalId: { + type: "string", + label: "External ID", + description: + "ID of the QR Code in your database. Must be prefixed with ext_.", + optional: true, + }, + }, + async run({ $ }) { + const { + qrcodeId, externalId, + } = this; + if (!qrcodeId && !externalId) { + throw new ConfigurationError( + "Please provide either qrcodeId or externalId to delete the QR Code.", + ); + } + const identifier = qrcodeId || externalId; + await this.codeqr.deleteQrcode(identifier); + $.export("$summary", `QR Code deleted successfully (${identifier}).`); + return { + success: true, + }; + }, +}; diff --git a/components/codeqr/actions/get-link-info/get-link-info.mjs b/components/codeqr/actions/get-link-info/get-link-info.mjs new file mode 100644 index 0000000000000..84e0c76b1aa01 --- /dev/null +++ b/components/codeqr/actions/get-link-info/get-link-info.mjs @@ -0,0 +1,72 @@ +import { ConfigurationError } from "@pipedream/platform"; +import codeqr from "../../codeqr.app.mjs"; + +export default { + key: "codeqr-get-link-info", + name: "Get a Link Info", + description: + "Retrieves a short link from CodeQR by linkId, externalId, or domain/key via query string parameters. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/retrieve-a-link)", + version: "0.0.2", + type: "action", + props: { + codeqr, + linkId: { + type: "string", + label: "Link ID", + description: "The unique ID of the short link.", + optional: true, + }, + externalId: { + type: "string", + label: "External ID", + description: + "This is the ID of the link in your database. Must be prefixed with ext_.", + optional: true, + }, + domain: { + type: "string", + label: "Domain", + description: "The domain of the link to retrieve.", + optional: true, + }, + key: { + type: "string", + label: "Key", + description: + "The key of the link to retrieve. E.g., for codeqr.io/github, the key is github.", + optional: true, + }, + }, + + async run({ $ }) { + const { + linkId, externalId, domain, key, + } = this; + if (!linkId && !externalId && !(domain && key)) { + throw new ConfigurationError( + "Please provide linkId, externalId, or both domain and key.", + ); + } + + // Build query parameters + const params = {}; + linkId && (params.linkId = linkId); + externalId && (params.externalId = externalId); + domain && (params.domain = domain); + key && (params.key = key); + + // Make GET request to /links/info with query string + const response = await this.codeqr.getLinkInfo(params); + $.export( + "$summary", + `Link retrieved successfully${ + linkId + ? ` (ID: ${linkId})` + : externalId + ? ` (external ID: ${externalId})` + : ` (${domain}/${key})` + }.`, + ); + return response; + }, +}; diff --git a/components/codeqr/actions/get-qrcode-info/get-qrcode-info.mjs b/components/codeqr/actions/get-qrcode-info/get-qrcode-info.mjs new file mode 100644 index 0000000000000..9b963155e1b46 --- /dev/null +++ b/components/codeqr/actions/get-qrcode-info/get-qrcode-info.mjs @@ -0,0 +1,66 @@ +import { ConfigurationError } from "@pipedream/platform"; +import codeqr from "../../codeqr.app.mjs"; + +export default { + key: "codeqr-get-qrcode-info", + name: "Get QR Code Info", + description: + "Retrieves QR Code info by qrcodeId, externalId, domain, or key via query string. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/retrieve-a-qrcode)", + version: "0.0.1", + type: "action", + props: { + codeqr, + qrcodeId: { + type: "string", + label: "QR Code ID", + description: "The unique ID of the QR Code.", + optional: true, + }, + externalId: { + type: "string", + label: "External ID", + description: + "ID of the QR Code in your database. Must be prefixed with ext_.", + optional: true, + }, + domain: { + type: "string", + label: "Domain", + description: "The domain of the QR Code to retrieve.", + optional: true, + }, + key: { + type: "string", + label: "Key", + description: "The key of the QR Code to retrieve.", + optional: true, + }, + }, + async run({ $ }) { + const { + qrcodeId, externalId, domain, key, + } = this; + if (!qrcodeId && !externalId && !(domain && key)) { + throw new ConfigurationError( + "Please provide qrcodeId, externalId, or both domain and key.", + ); + } + const params = {}; + qrcodeId && (params.qrcodeId = qrcodeId); + externalId && (params.externalId = externalId); + domain && (params.domain = domain); + key && (params.key = key); + const response = await this.codeqr.getQrcodeInfo(params); + $.export( + "$summary", + `QR Code info retrieved successfully${ + qrcodeId + ? ` (ID: ${qrcodeId})` + : externalId + ? ` (external ID: ${externalId})` + : ` (${domain}/${key})` + }.`, + ); + return response; + }, +}; diff --git a/components/codeqr/codeqr.app.mjs b/components/codeqr/codeqr.app.mjs index 99bac672df3e3..836143c3aabc3 100644 --- a/components/codeqr/codeqr.app.mjs +++ b/components/codeqr/codeqr.app.mjs @@ -1,11 +1,74 @@ +import { axios } from "@pipedream/platform"; +import constants from "./common/constants.mjs"; + export default { type: "app", app: "codeqr", propDefinitions: {}, methods: { - // this.$auth contains connected account data + getHeader() { + return { + "Content-Type": "application/json", + "Authorization": `Bearer ${this.$auth.oauth_access_token}`, + }; + }, + getUrl(path) { + const { BASE_URL } = constants; + return `${BASE_URL}${path}`; + }, authKeys() { console.log(Object.keys(this.$auth)); }, + async makeRequest(args = {}) { + const { + $ = this, method = "get", path, params, data, + } = args; + const config = { + method, + url: this.getUrl(path), + headers: this.getHeader(), + params, + data, + }; + return axios($, config); + }, + async createLink(data) { + return this.makeRequest({ + method: "post", + path: "/links", + data, + }); + }, + async getLinkInfo(params) { + return this.makeRequest({ + path: "/links/info", + params, + }); + }, + async deleteLink(identifier) { + return this.makeRequest({ + method: "delete", + path: `/links/${identifier}`, + }); + }, + async createQrcode(data) { + return this.makeRequest({ + method: "post", + path: "/qrcodes", + data, + }); + }, + async getQrcodeInfo(params) { + return this.makeRequest({ + path: "/qrcodes/info", + params, + }); + }, + async deleteQRCode(identifier) { + return this.makeRequest({ + method: "delete", + path: `/qrcodes/${identifier}`, + }); + }, }, -}; \ No newline at end of file +}; diff --git a/components/codeqr/common/constants.mjs b/components/codeqr/common/constants.mjs new file mode 100644 index 0000000000000..2fa67e331174f --- /dev/null +++ b/components/codeqr/common/constants.mjs @@ -0,0 +1,5 @@ +const BASE_URL = "https://api.codeqr.io"; + +export default { + BASE_URL, +}; diff --git a/components/codeqr/package.json b/components/codeqr/package.json index 0bf13075ed95f..3a61ef72f12ec 100644 --- a/components/codeqr/package.json +++ b/components/codeqr/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/codeqr", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream CodeQR Components", "main": "codeqr.app.mjs", "keywords": [ @@ -11,5 +11,8 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.0" } -} \ No newline at end of file +} From bab0c98eade15678bd12184533adac4cd07b902d Mon Sep 17 00:00:00 2001 From: Deusdete Ferreira Date: Tue, 10 Jun 2025 20:04:44 -0300 Subject: [PATCH 02/10] Add dependencies for amazon_redshift and codeqr components --- pnpm-lock.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cae0d57aeca40..f872d91f970ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -751,8 +751,7 @@ importers: components/amazon_polly: {} - components/amazon_redshift: - specifiers: {} + components/amazon_redshift: {} components/amazon_selling_partner: {} @@ -2745,7 +2744,11 @@ importers: components/codeq_natural_language_processing_api: {} - components/codeqr: {} + components/codeqr: + dependencies: + '@pipedream/platform': + specifier: ^3.0.0 + version: 3.1.0 components/codereadr: dependencies: From 4e2289fd532c7830dd7425259545be04d9bcce0c Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Wed, 11 Jun 2025 12:00:57 -0400 Subject: [PATCH 03/10] updates --- .../actions/create-link/create-link.mjs | 12 ++- .../actions/create-qrcode/create-qrcode.mjs | 15 +++- .../actions/delete-link/delete-link.mjs | 13 ++- .../actions/delete-qrcode/delete-qrcode.mjs | 13 ++- .../actions/get-link-info/get-link-info.mjs | 15 ++-- .../get-qrcode-info/get-qrcode-info.mjs | 13 ++- components/codeqr/codeqr.app.mjs | 81 +++++++++++++++---- 7 files changed, 122 insertions(+), 40 deletions(-) diff --git a/components/codeqr/actions/create-link/create-link.mjs b/components/codeqr/actions/create-link/create-link.mjs index ae82da96acf55..6c9b3913a9d05 100644 --- a/components/codeqr/actions/create-link/create-link.mjs +++ b/components/codeqr/actions/create-link/create-link.mjs @@ -4,7 +4,7 @@ export default { key: "codeqr-create-link", name: "Create a CodeQR Link", description: - "Creates a short link in CodeQR using the CodeQR API. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/create-a-link)", + "Creates a short link in CodeQR using the CodeQR API. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/create-a-link)", version: "0.0.1", type: "action", props: { @@ -191,12 +191,15 @@ export default { comments, expiresAt, expiredUrl, - geo, publicStats, tagIds, tagNames, } = this; + const geo = typeof this.geo === "string" + ? JSON.parse(this.geo) + : this.geo; + const payload = { url, }; @@ -226,7 +229,10 @@ export default { if (tagIds?.length) payload.tagIds = tagIds; if (tagNames?.length) payload.tagNames = tagNames; - const response = await this.codeqr.createLink(payload); + const response = await this.codeqr.createLink({ + $, + data: payload, + }); response && $.export("$summary", "Link created successfully"); return response; }, diff --git a/components/codeqr/actions/create-qrcode/create-qrcode.mjs b/components/codeqr/actions/create-qrcode/create-qrcode.mjs index a6252c1bc2b07..00c0e165d6adc 100644 --- a/components/codeqr/actions/create-qrcode/create-qrcode.mjs +++ b/components/codeqr/actions/create-qrcode/create-qrcode.mjs @@ -3,7 +3,7 @@ import codeqr from "../../codeqr.app.mjs"; export default { key: "codeqr-create-qrcode", name: "Create a QR Code", - description: "Creates a new QR Code in CodeQR using the QR Codes API. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/create-a-qrcode)", + description: "Creates a new QR Code in CodeQR using the QR Codes API. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/create-a-qrcode)", version: "0.0.1", type: "action", props: { @@ -114,7 +114,6 @@ export default { "static", "text", "url", - "email", "phone", "expiresAt", "trackConversion", @@ -129,7 +128,17 @@ export default { ]) { if (this[key] != null) payload[key] = this[key]; } - const response = await this.codeqr.createQrcode(payload); + + if (this.email) { + payload.email = typeof this.email === "string" + ? JSON.parse(this.email) + : this.email; + } + + const response = await this.codeqr.createQrcode({ + $, + data: payload, + }); $.export("$summary", "QR Code created successfully."); return response; }, diff --git a/components/codeqr/actions/delete-link/delete-link.mjs b/components/codeqr/actions/delete-link/delete-link.mjs index ea7a7be9caca0..d1c971f82fcfc 100644 --- a/components/codeqr/actions/delete-link/delete-link.mjs +++ b/components/codeqr/actions/delete-link/delete-link.mjs @@ -4,14 +4,16 @@ import codeqr from "../../codeqr.app.mjs"; export default { key: "codeqr-delete-link", name: "Delete a Link", - description: "Deletes a short link in CodeQR by linkId or externalId. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/delete-a-link)", + description: "Deletes a short link in CodeQR by linkId or externalId. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/delete-a-link)", version: "0.0.1", type: "action", props: { codeqr, linkId: { - type: "string", - label: "Link ID", + propDefinition: [ + codeqr, + "linkId", + ], description: "The unique ID of the link to delete.", optional: true, }, @@ -37,7 +39,10 @@ export default { const identifier = linkId || externalId; // Perform DELETE request to /links/{identifier} - await this.codeqr.deleteLink(identifier); + await this.codeqr.deleteLink({ + $, + identifier, + }); $.export("$summary", `Link deleted successfully (${identifier}).`); return { success: true, diff --git a/components/codeqr/actions/delete-qrcode/delete-qrcode.mjs b/components/codeqr/actions/delete-qrcode/delete-qrcode.mjs index a926e46267750..ad1a28e7f1f0d 100644 --- a/components/codeqr/actions/delete-qrcode/delete-qrcode.mjs +++ b/components/codeqr/actions/delete-qrcode/delete-qrcode.mjs @@ -5,14 +5,16 @@ export default { key: "codeqr-delete-qrcode", name: "Delete a QR Code", description: - "Deletes a QR Code in CodeQR by qrcodeId or externalId. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/delete-a-qrcode)", + "Deletes a QR Code in CodeQR by qrcodeId or externalId. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/delete-a-qrcode)", version: "0.0.1", type: "action", props: { codeqr, qrcodeId: { - type: "string", - label: "QR Code ID", + propDefinition: [ + codeqr, + "qrcodeId", + ], description: "The unique ID of the QR Code to delete.", optional: true, }, @@ -34,7 +36,10 @@ export default { ); } const identifier = qrcodeId || externalId; - await this.codeqr.deleteQrcode(identifier); + await this.codeqr.deleteQrcode({ + $, + identifier, + }); $.export("$summary", `QR Code deleted successfully (${identifier}).`); return { success: true, diff --git a/components/codeqr/actions/get-link-info/get-link-info.mjs b/components/codeqr/actions/get-link-info/get-link-info.mjs index 84e0c76b1aa01..441756f3f6fd3 100644 --- a/components/codeqr/actions/get-link-info/get-link-info.mjs +++ b/components/codeqr/actions/get-link-info/get-link-info.mjs @@ -5,14 +5,16 @@ export default { key: "codeqr-get-link-info", name: "Get a Link Info", description: - "Retrieves a short link from CodeQR by linkId, externalId, or domain/key via query string parameters. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/retrieve-a-link)", - version: "0.0.2", + "Retrieves a short link from CodeQR by linkId, externalId, or domain/key via query string parameters. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/retrieve-a-link)", + version: "0.0.1", type: "action", props: { codeqr, linkId: { - type: "string", - label: "Link ID", + propDefinition: [ + codeqr, + "linkId", + ], description: "The unique ID of the short link.", optional: true, }, @@ -56,7 +58,10 @@ export default { key && (params.key = key); // Make GET request to /links/info with query string - const response = await this.codeqr.getLinkInfo(params); + const response = await this.codeqr.getLinkInfo({ + $, + params, + }); $.export( "$summary", `Link retrieved successfully${ diff --git a/components/codeqr/actions/get-qrcode-info/get-qrcode-info.mjs b/components/codeqr/actions/get-qrcode-info/get-qrcode-info.mjs index 9b963155e1b46..a38c69842962d 100644 --- a/components/codeqr/actions/get-qrcode-info/get-qrcode-info.mjs +++ b/components/codeqr/actions/get-qrcode-info/get-qrcode-info.mjs @@ -5,14 +5,16 @@ export default { key: "codeqr-get-qrcode-info", name: "Get QR Code Info", description: - "Retrieves QR Code info by qrcodeId, externalId, domain, or key via query string. [See the docs here](https://codeqr.mintlify.app/api-reference/endpoint/retrieve-a-qrcode)", + "Retrieves QR Code info by qrcodeId, externalId, domain, or key via query string. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/retrieve-a-qrcode)", version: "0.0.1", type: "action", props: { codeqr, qrcodeId: { - type: "string", - label: "QR Code ID", + propDefinition: [ + codeqr, + "qrcodeId", + ], description: "The unique ID of the QR Code.", optional: true, }, @@ -50,7 +52,10 @@ export default { externalId && (params.externalId = externalId); domain && (params.domain = domain); key && (params.key = key); - const response = await this.codeqr.getQrcodeInfo(params); + const response = await this.codeqr.getQrcodeInfo({ + $, + params, + }); $.export( "$summary", `QR Code info retrieved successfully${ diff --git a/components/codeqr/codeqr.app.mjs b/components/codeqr/codeqr.app.mjs index 836143c3aabc3..65ab6e2da849f 100644 --- a/components/codeqr/codeqr.app.mjs +++ b/components/codeqr/codeqr.app.mjs @@ -4,7 +4,40 @@ import constants from "./common/constants.mjs"; export default { type: "app", app: "codeqr", - propDefinitions: {}, + propDefinitions: { + linkId: { + type: "string", + label: "Link ID", + description: "The unique ID of a link", + async options({ page }) { + const links = await this.listLinks({ + params: { + page: page + 1, + }, + }); + return links?.map((link) => ({ + label: link.url, + value: link.id, + })); + }, + }, + qrcodeId: { + type: "string", + label: "QR Code ID", + description: "The unique ID of a QR Code", + async options({ page }) { + const qrCodes = await this.listQrCodes({ + params: { + page: page + 1, + }, + }); + return qrCodes?.map((qrCode) => ({ + label: qrCode.url, + value: qrCode.id, + })); + }, + }, + }, methods: { getHeader() { return { @@ -16,58 +49,72 @@ export default { const { BASE_URL } = constants; return `${BASE_URL}${path}`; }, - authKeys() { - console.log(Object.keys(this.$auth)); - }, async makeRequest(args = {}) { const { - $ = this, method = "get", path, params, data, + $ = this, method = "get", path, ...opts } = args; const config = { method, url: this.getUrl(path), headers: this.getHeader(), - params, - data, + ...opts, }; return axios($, config); }, - async createLink(data) { + async listLinks(opts = {}) { + return this.makeRequest({ + path: "/links", + ...opts, + }); + }, + async listQrCodes(opts = {}) { + return this.makeRequest({ + path: "/qrcodes", + ...opts, + }); + }, + async createLink(opts = {}) { return this.makeRequest({ method: "post", path: "/links", - data, + ...opts, }); }, - async getLinkInfo(params) { + async getLinkInfo(opts = {}) { return this.makeRequest({ path: "/links/info", - params, + ...opts, }); }, - async deleteLink(identifier) { + async deleteLink({ + identifier, ...opts + }) { return this.makeRequest({ method: "delete", path: `/links/${identifier}`, + ...opts, }); }, - async createQrcode(data) { + async createQrcode(opts = {}) { return this.makeRequest({ method: "post", path: "/qrcodes", - data, + ...opts, }); }, - async getQrcodeInfo(params) { + async getQrcodeInfo(opts = {}) { return this.makeRequest({ path: "/qrcodes/info", - params, + ...opts, }); }, - async deleteQRCode(identifier) { + async deleteQrcode({ + identifier, ...opts + }) { return this.makeRequest({ method: "delete", path: `/qrcodes/${identifier}`, + ...opts, }); }, }, From 2be46a9f0bf98ef3051ec3118a5eac6aef11e636 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Wed, 11 Jun 2025 12:05:55 -0400 Subject: [PATCH 04/10] pnpm-lock.yaml --- pnpm-lock.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa4f3d80d6c58..d954a13f2a3fc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15825,7 +15825,7 @@ importers: version: 3.1.7 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0))(typescript@5.7.2) + version: 29.2.5(@babel/core@8.0.0-alpha.13)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@8.0.0-alpha.13))(jest@29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0))(typescript@5.7.2) tsup: specifier: ^8.3.6 version: 8.3.6(@microsoft/api-extractor@7.47.12(@types/node@20.17.30))(jiti@1.21.6)(postcss@8.4.49)(tsx@4.19.4)(typescript@5.7.2)(yaml@2.6.1) @@ -15868,7 +15868,7 @@ importers: version: 3.1.0 jest: specifier: ^29.1.2 - version: 29.7.0(@types/node@20.17.6)(babel-plugin-macros@3.1.0) + version: 29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0) type-fest: specifier: ^4.15.0 version: 4.27.0 @@ -49763,7 +49763,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0))(typescript@5.7.2): + ts-jest@29.2.5(@babel/core@8.0.0-alpha.13)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@8.0.0-alpha.13))(jest@29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0))(typescript@5.7.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -49777,10 +49777,10 @@ snapshots: typescript: 5.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.26.0 + '@babel/core': 8.0.0-alpha.13 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.0) + babel-jest: 29.7.0(@babel/core@8.0.0-alpha.13) ts-jest@29.2.5(@babel/core@8.0.0-alpha.13)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@8.0.0-alpha.13))(jest@29.7.0(@types/node@20.17.6)(babel-plugin-macros@3.1.0))(typescript@5.6.3): dependencies: From a5c3be6d8a0f288e707ab75ffad4900febc55c4e Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Wed, 11 Jun 2025 12:06:29 -0400 Subject: [PATCH 05/10] pnpm-lock.yaml --- pnpm-lock.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d954a13f2a3fc..fa4f3d80d6c58 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15825,7 +15825,7 @@ importers: version: 3.1.7 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@8.0.0-alpha.13)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@8.0.0-alpha.13))(jest@29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0))(typescript@5.7.2) + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0))(typescript@5.7.2) tsup: specifier: ^8.3.6 version: 8.3.6(@microsoft/api-extractor@7.47.12(@types/node@20.17.30))(jiti@1.21.6)(postcss@8.4.49)(tsx@4.19.4)(typescript@5.7.2)(yaml@2.6.1) @@ -15868,7 +15868,7 @@ importers: version: 3.1.0 jest: specifier: ^29.1.2 - version: 29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0) + version: 29.7.0(@types/node@20.17.6)(babel-plugin-macros@3.1.0) type-fest: specifier: ^4.15.0 version: 4.27.0 @@ -49763,7 +49763,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.2.5(@babel/core@8.0.0-alpha.13)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@8.0.0-alpha.13))(jest@29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0))(typescript@5.7.2): + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.30)(babel-plugin-macros@3.1.0))(typescript@5.7.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -49777,10 +49777,10 @@ snapshots: typescript: 5.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 8.0.0-alpha.13 + '@babel/core': 7.26.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@8.0.0-alpha.13) + babel-jest: 29.7.0(@babel/core@7.26.0) ts-jest@29.2.5(@babel/core@8.0.0-alpha.13)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@8.0.0-alpha.13))(jest@29.7.0(@types/node@20.17.6)(babel-plugin-macros@3.1.0))(typescript@5.6.3): dependencies: From 440b7b0802355558b5644cad41a8e961127d2809 Mon Sep 17 00:00:00 2001 From: Deusdete Ferreira Date: Thu, 12 Jun 2025 01:21:07 -0300 Subject: [PATCH 06/10] chore: update version numbers and remove unused props in Create a CodeQR Link action --- .../actions/create-link/create-link.mjs | 35 +------------------ components/codeqr/package.json | 2 +- 2 files changed, 2 insertions(+), 35 deletions(-) diff --git a/components/codeqr/actions/create-link/create-link.mjs b/components/codeqr/actions/create-link/create-link.mjs index 6c9b3913a9d05..50911635f540c 100644 --- a/components/codeqr/actions/create-link/create-link.mjs +++ b/components/codeqr/actions/create-link/create-link.mjs @@ -5,7 +5,7 @@ export default { name: "Create a CodeQR Link", description: "Creates a short link in CodeQR using the CodeQR API. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/create-a-link)", - version: "0.0.1", + version: "0.0.2", type: "action", props: { codeqr, @@ -78,25 +78,6 @@ export default { description: "Enable proxy settings.", optional: true, }, - preRedirection: { - type: "boolean", - label: "Pre-Redirection Page", - description: - "Enable a pre-redirection page before sending users to the destination URL.", - optional: true, - }, - pageId: { - type: "string", - label: "Page ID", - description: "ID of your page created in CodeQR.", - optional: true, - }, - pageUrl: { - type: "string", - label: "Page URL", - description: "The URL for the pre-redirect page.", - optional: true, - }, rewrite: { type: "boolean", label: "Rewrite Link", @@ -154,12 +135,6 @@ export default { description: "Whether the short link's stats are publicly accessible.", optional: true, }, - tagIds: { - type: "string[]", - label: "Tag IDs", - description: "Array of tag IDs to apply to the short link.", - optional: true, - }, tagNames: { type: "string[]", label: "Tag Names", @@ -181,9 +156,6 @@ export default { image, video, proxy, - preRedirection, - pageId, - pageUrl, rewrite, ios, android, @@ -192,7 +164,6 @@ export default { expiresAt, expiredUrl, publicStats, - tagIds, tagNames, } = this; @@ -213,9 +184,6 @@ export default { image && (payload.image = image); video && (payload.video = video); proxy != null && (payload.proxy = proxy); - preRedirection != null && (payload.preRedirection = preRedirection); - pageId && (payload.pageId = pageId); - pageUrl && (payload.pageUrl = pageUrl); rewrite != null && (payload.rewrite = rewrite); ios && (payload.ios = ios); android && (payload.android = android); @@ -226,7 +194,6 @@ export default { geo && (payload.geo = geo); publicStats != null && (payload.publicStats = publicStats); - if (tagIds?.length) payload.tagIds = tagIds; if (tagNames?.length) payload.tagNames = tagNames; const response = await this.codeqr.createLink({ diff --git a/components/codeqr/package.json b/components/codeqr/package.json index 3a61ef72f12ec..13f278822d9b5 100644 --- a/components/codeqr/package.json +++ b/components/codeqr/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/codeqr", - "version": "0.1.0", + "version": "0.1.1", "description": "Pipedream CodeQR Components", "main": "codeqr.app.mjs", "keywords": [ From 88ef69f533a793a4dbc44cbc0a95d8421c9cb72a Mon Sep 17 00:00:00 2001 From: Deusdete Ferreira Date: Thu, 12 Jun 2025 07:35:54 -0300 Subject: [PATCH 07/10] feat: update Create a QR Code action with new properties and version bump --- .../actions/create-qrcode/create-qrcode.mjs | 100 ++++++++---------- 1 file changed, 42 insertions(+), 58 deletions(-) diff --git a/components/codeqr/actions/create-qrcode/create-qrcode.mjs b/components/codeqr/actions/create-qrcode/create-qrcode.mjs index 00c0e165d6adc..46b271307219a 100644 --- a/components/codeqr/actions/create-qrcode/create-qrcode.mjs +++ b/components/codeqr/actions/create-qrcode/create-qrcode.mjs @@ -3,8 +3,9 @@ import codeqr from "../../codeqr.app.mjs"; export default { key: "codeqr-create-qrcode", name: "Create a QR Code", - description: "Creates a new QR Code in CodeQR using the QR Codes API. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/create-a-qrcode)", - version: "0.0.1", + description: + "Creates a new QR Code in CodeQR using the QR Codes API. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/create-a-qrcode)", + version: "0.0.2", type: "action", props: { codeqr, @@ -12,6 +13,10 @@ export default { type: "string", label: "QR Code Type", description: "Select the type of QR Code to generate.", + options: [ + "url", + "text", + ], optional: false, }, static: { @@ -22,40 +27,23 @@ export default { optional: false, default: true, }, - text: { - type: "string", - label: "Text", - description: "Text content stored in the QR Code.", - optional: true, - }, url: { type: "string", label: "URL", description: "The destination URL of the QR Code.", optional: true, }, - email: { - type: "object", - label: "Email", - description: "Email data for email-based QR Codes (JSON format).", - optional: true, - }, - phone: { - type: "string", - label: "Phone", - description: "Phone number stored in the QR Code.", - optional: true, - }, - expiresAt: { + text: { type: "string", - label: "Expiration Date", - description: "Expiration date of the QR Code (ISO 8601).", + label: "Text", + description: "Text content stored in the QR Code.", optional: true, }, trackConversion: { type: "boolean", label: "Track Conversion", - description: "Enable tracking of conversions for the QR Code.", + description: + "Enable tracking of conversions for the QR Code. Only available for dynamic QR Codes.", optional: true, }, title: { @@ -64,18 +52,6 @@ export default { description: "Title associated with the QR Code.", optional: true, }, - description: { - type: "string", - label: "Description", - description: "Description associated with the QR Code.", - optional: true, - }, - image: { - type: "string", - label: "Image URL", - description: "URL of an image associated with the QR Code.", - optional: true, - }, bgColor: { type: "string", label: "Background Color", @@ -88,22 +64,37 @@ export default { description: "Foreground color of the QR Code.", optional: true, }, - size: { - type: "integer", - label: "Size", - description: "Size of the QR Code in pixels.", - optional: true, - }, showLogo: { type: "boolean", label: "Show Logo", description: "Whether to display a logo in the QR Code.", optional: true, }, - publicStats: { - type: "boolean", - label: "Public Stats", - description: "Whether the QR Code statistics are publicly accessible.", + src: { + type: "string", + label: "Logo URL", + description: + "URL of the logo to display in the QR Code (only if Show Logo is true).", + optional: true, + }, + comments: { + type: "string", + label: "Comments", + description: "Comments or notes about the QR Code.", + optional: true, + }, + expiresAt: { + type: "string", + label: "Expiration Date", + description: + "The date and time when the short link will expire (ISO 8601). Only available for dynamic QR Codes.", + optional: true, + }, + expiredUrl: { + type: "string", + label: "Expired Redirect URL", + description: + "The URL to redirect to when the short link has expired. Only available for dynamic QR Codes.", optional: true, }, }, @@ -112,29 +103,22 @@ export default { for (const key of [ "type", "static", - "text", "url", - "phone", - "expiresAt", + "text", "trackConversion", "title", - "description", - "image", "bgColor", "fgColor", "size", "showLogo", - "publicStats", + "src", + "comments", + "expiresAt", + "expiredUrl", ]) { if (this[key] != null) payload[key] = this[key]; } - if (this.email) { - payload.email = typeof this.email === "string" - ? JSON.parse(this.email) - : this.email; - } - const response = await this.codeqr.createQrcode({ $, data: payload, From c0a4ad99c525243a3ef021713b10233b411c747d Mon Sep 17 00:00:00 2001 From: Deusdete Ferreira Date: Thu, 12 Jun 2025 07:36:21 -0300 Subject: [PATCH 08/10] chore: bump version to 0.1.2 in package.json --- components/codeqr/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/codeqr/package.json b/components/codeqr/package.json index 13f278822d9b5..1975edf6ce8e4 100644 --- a/components/codeqr/package.json +++ b/components/codeqr/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/codeqr", - "version": "0.1.1", + "version": "0.1.2", "description": "Pipedream CodeQR Components", "main": "codeqr.app.mjs", "keywords": [ From d678eab9b97108e7fc0e2677cbf0ff68ca09bac4 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Thu, 12 Jun 2025 11:35:47 -0400 Subject: [PATCH 09/10] updates --- components/codeqr/actions/create-link/create-link.mjs | 4 ++-- components/codeqr/actions/create-qrcode/create-qrcode.mjs | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/components/codeqr/actions/create-link/create-link.mjs b/components/codeqr/actions/create-link/create-link.mjs index 50911635f540c..c845d4edf8eca 100644 --- a/components/codeqr/actions/create-link/create-link.mjs +++ b/components/codeqr/actions/create-link/create-link.mjs @@ -5,7 +5,7 @@ export default { name: "Create a CodeQR Link", description: "Creates a short link in CodeQR using the CodeQR API. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/create-a-link)", - version: "0.0.2", + version: "0.0.1", type: "action", props: { codeqr, @@ -113,7 +113,7 @@ export default { type: "string", label: "Expiration Date", description: - "The date and time when the short link will expire (ISO 8601).", + "The date and time when the short link will expire (ISO 8601). E.g. `2025-06-13T05:31:56Z`", optional: true, }, expiredUrl: { diff --git a/components/codeqr/actions/create-qrcode/create-qrcode.mjs b/components/codeqr/actions/create-qrcode/create-qrcode.mjs index 46b271307219a..23533ebddf661 100644 --- a/components/codeqr/actions/create-qrcode/create-qrcode.mjs +++ b/components/codeqr/actions/create-qrcode/create-qrcode.mjs @@ -5,7 +5,7 @@ export default { name: "Create a QR Code", description: "Creates a new QR Code in CodeQR using the QR Codes API. [See the documentation](https://codeqr.mintlify.app/api-reference/endpoint/create-a-qrcode)", - version: "0.0.2", + version: "0.0.1", type: "action", props: { codeqr, @@ -87,7 +87,7 @@ export default { type: "string", label: "Expiration Date", description: - "The date and time when the short link will expire (ISO 8601). Only available for dynamic QR Codes.", + "The date and time when the short link will expire (ISO 8601). Only available for dynamic QR Codes. E.g. `2025-06-13T05:31:56Z`", optional: true, }, expiredUrl: { @@ -109,7 +109,6 @@ export default { "title", "bgColor", "fgColor", - "size", "showLogo", "src", "comments", From 12ac0593dcc93da1ba722d319b48be264a6b2e71 Mon Sep 17 00:00:00 2001 From: Deusdete Ferreira Date: Thu, 12 Jun 2025 21:49:38 -0300 Subject: [PATCH 10/10] feat: remove tagNames property from Create Link action --- components/codeqr/actions/create-link/create-link.mjs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/components/codeqr/actions/create-link/create-link.mjs b/components/codeqr/actions/create-link/create-link.mjs index c845d4edf8eca..df048d68fa80e 100644 --- a/components/codeqr/actions/create-link/create-link.mjs +++ b/components/codeqr/actions/create-link/create-link.mjs @@ -135,12 +135,6 @@ export default { description: "Whether the short link's stats are publicly accessible.", optional: true, }, - tagNames: { - type: "string[]", - label: "Tag Names", - description: "Array of tag names to apply to the short link.", - optional: true, - }, }, async run({ $ }) { @@ -164,7 +158,6 @@ export default { expiresAt, expiredUrl, publicStats, - tagNames, } = this; const geo = typeof this.geo === "string" @@ -194,8 +187,6 @@ export default { geo && (payload.geo = geo); publicStats != null && (payload.publicStats = publicStats); - if (tagNames?.length) payload.tagNames = tagNames; - const response = await this.codeqr.createLink({ $, data: payload,