From 2653b4f78b279a228275d7d5b5259e95709c8bed Mon Sep 17 00:00:00 2001 From: michelle0927 Date: Tue, 14 Jan 2025 15:19:11 -0500 Subject: [PATCH] parse links in posts --- .../actions/create-post/create-post.mjs | 37 ++++++++++++++++++- components/bluesky/package.json | 2 +- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/components/bluesky/actions/create-post/create-post.mjs b/components/bluesky/actions/create-post/create-post.mjs index 4f9be04ea4869..62fe277d45cd6 100644 --- a/components/bluesky/actions/create-post/create-post.mjs +++ b/components/bluesky/actions/create-post/create-post.mjs @@ -5,7 +5,7 @@ export default { key: "bluesky-create-post", name: "Create Post", description: "Creates a new post on Bluesky. [See the documentation](https://docs.bsky.app/docs/api/com-atproto-repo-create-record).", - version: "0.0.1", + version: "0.0.2", type: "action", props: { app, @@ -15,6 +15,40 @@ export default { description: "The text content of the post.", }, }, + methods: { + parseUrls(text) { + const spans = []; + const urlRegex = /(?:[$|\W])(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*[-a-zA-Z0-9@%_+~#//=])?)/g; + + let match; + while ((match = urlRegex.exec(text)) !== null) { + spans.push({ + start: match.index + 1, + end: urlRegex.lastIndex, + url: match[1], + }); + } + return spans; + }, + parseFacets(text) { + const facets = []; + for (const link of this.parseUrls(text)) { + facets.push({ + index: { + byteStart: link["start"], + byteEnd: link["end"], + }, + features: [ + { + ["$type"]: "app.bsky.richtext.facet#link", + uri: link["url"], + }, + ], + }); + } + return facets; + }, + }, async run({ $ }) { const { app, @@ -28,6 +62,7 @@ export default { record: { ["$type"]: constants.RESOURCE_TYPE.POST, text, + facets: this.parseFacets(text), createdAt: new Date().toISOString(), }, }, diff --git a/components/bluesky/package.json b/components/bluesky/package.json index 9ad450bfd688c..4b510b117d1fd 100644 --- a/components/bluesky/package.json +++ b/components/bluesky/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/bluesky", - "version": "0.1.0", + "version": "0.1.1", "description": "Pipedream Bluesky Components", "main": "bluesky.app.mjs", "keywords": [