n8n-nodes-upload-post 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -4
- package/dist/credentials/UploadPostApi.credentials.d.ts +4 -1
- package/dist/credentials/UploadPostApi.credentials.js +1 -1
- package/dist/credentials/UploadPostApi.credentials.js.map +1 -1
- package/dist/nodes/UploadPost/UploadPost.node.js +765 -8
- package/dist/nodes/UploadPost/UploadPost.node.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -75,7 +75,8 @@ The node provides the following operations grouped for clarity:
|
|
|
75
75
|
- Supported: Facebook, Instagram, LinkedIn, Pinterest, Reddit, Threads, TikTok, X, YouTube. Analytics are not available for Bluesky, Discord, Google Business or Telegram.
|
|
76
76
|
- **Get Post Analytics**: Per-post metrics for an upload, by `request_id`.
|
|
77
77
|
- Parameters: Request ID, Platform (optional filter).
|
|
78
|
-
- On TikTok, `post_metrics` also carries `retention`, `impression_sources`, `audience_types`, `new_followers`, `reach` and the watch times
|
|
78
|
+
- On TikTok, `post_metrics` also carries `retention`, `impression_sources`, `audience_types`, `new_followers`, `reach` and the watch times, plus `original_publish_id`.
|
|
79
|
+
- TikTok drafts (`MEDIA_UPLOAD`): metrics arrive once the creator publishes the draft as **public** from the TikTok app (TikTok gives no post ID for private posts). Until then `post_metrics_error` says it is still in the inbox; after 30 days without a post, read it with **Get Post Analytics by Platform ID**.
|
|
79
80
|
- **Get Post Analytics by Platform ID**: Per-post metrics for a post published outside Upload-Post.
|
|
80
81
|
- Parameters: Platform Post ID, Platform, Profile Username.
|
|
81
82
|
- **Get Cached Post Analytics**: Replays per-post metrics already fetched, instead of querying the platforms again, so it is not subject to the live analytics rate limit (100 requests / 5 minutes). Only contains posts previously fetched through a live per-post endpoint; there is no background refresh, so captured_at is the last time that post was read live.
|
|
@@ -90,6 +91,10 @@ The node provides the following operations grouped for clarity:
|
|
|
90
91
|
- Parameters: Profile Username.
|
|
91
92
|
- **Get Media**: List published media for a connected network.
|
|
92
93
|
- **Get Google Business Locations**: List locations for a Google Business Profile.
|
|
94
|
+
- **Resolve LinkedIn Organization**: Turn any LinkedIn company, showcase or school Page (URL, vanity name, numeric ID or `urn:li:organization:ID`) into `{urn, id, name, vanity_name, mention}`.
|
|
95
|
+
- Parameters: User Identifier (its LinkedIn connection makes the lookup), LinkedIn Page.
|
|
96
|
+
- Paste `mention` (`@[Exact Name](urn:li:organization:ID)`) into the LinkedIn post text. LinkedIn only links a company mention whose name matches the Page **exactly, capitals included**; otherwise it is published as plain text. `@company-vanity` in the post text is also resolved on publish.
|
|
97
|
+
- Person profiles (`/in/…`) cannot be resolved (`400 linkedin_person_not_resolvable`). Live lookups count against 60 per hour per account; cached Pages (`cached: true`) are free.
|
|
93
98
|
- **Get TikTok Trending Music / Search TikTok Music / Get TikTok Locations / Get TikTok Publishing Settings**: TikTok discovery helpers (music IDs, location IDs, creator capabilities).
|
|
94
99
|
|
|
95
100
|
### Post Actions
|
|
@@ -124,13 +129,21 @@ The node provides the following operations grouped for clarity:
|
|
|
124
129
|
- **Validate JWT (for platform integration)**: Validate a connection token from your backend.
|
|
125
130
|
- Parameters: JWT token (password field).
|
|
126
131
|
- The API response is returned as-is; its `profile` object also carries the `ui_labels` map configured for that profile.
|
|
132
|
+
- **Get / Update Notification Preferences, Test Notifications**: Webhook URL and events (`upload_completed`, `social_account.*`, `dm_received`, `comment_received`).
|
|
133
|
+
- Webhooks are delivered **at least once**: a timeout, connection error, `5xx`, `408` or `429` is retried up to 6 attempts over about 8.5 hours (+1 min, +5 min, +30 min, +2 h, +6 h) with the same body and the same `X-Upload-Post-Delivery` header, so deduplicate by that header. `X-Upload-Post-Attempt` carries the attempt number. Other `4xx` answers are final.
|
|
134
|
+
- **List Webhook Deliveries**: The last 7 days of outgoing webhooks, newest first, with status (`pending`, `delivered`, `failed`, `cancelled`), attempts and the HTTP code your endpoint answered.
|
|
135
|
+
- Parameters: Event, Status, Request ID, Job ID, Profile Username (all optional filters), Page Size (1-100, default 20), Page (1-50), Include Payload.
|
|
136
|
+
- **Get Webhook Delivery**: One delivery with its attempts and the exact payload that was sent.
|
|
137
|
+
- **Redeliver Webhook**: Send a logged delivery again now, to the webhook URL configured today. It is a new delivery with its own ID (`X-Upload-Post-Redelivery-Of` names the original). `409` when there is no webhook, event subscription or allowed URL to send it to.
|
|
127
138
|
|
|
128
139
|
### Comment Actions
|
|
129
140
|
The comment endpoints are shaped like the rest of the API: **one endpoint per question, with a `platform` parameter** that says which connected network is being asked. There is no endpoint per social network.
|
|
130
|
-
- **Get Post Comments**: Comments on a post from the network given by `Platform
|
|
131
|
-
- Parameters: User Identifier, Platform, Post ID or URL, Comment ID (optional).
|
|
141
|
+
- **Get Post Comments**: Comments on a post from the network given by `Platform`.
|
|
142
|
+
- Parameters: User Identifier, Platform, Post ID or URL, Comment ID (optional), Page Size (optional, 1-50), After (Cursor) (optional, the `pagination.next_cursor` of the previous page).
|
|
132
143
|
- Instagram and Facebook accept the media ID or the post URL, YouTube the video ID, LinkedIn the post URN, TikTok the video ID. TikTok has no URL lookup, so pasting a URL fails with a descriptive error instead of an upstream one.
|
|
133
|
-
- Fill **Comment ID** to get the replies to that comment instead of the top-level comments of the post. It is the same question with one parameter more, not a separate operation.
|
|
144
|
+
- Fill **Comment ID** to get the replies to that comment instead of the top-level comments of the post. It is the same question with one parameter more, not a separate operation. Replies work on Instagram, Facebook, LinkedIn (company Pages), TikTok, Threads and YouTube; X and Bluesky answer `platform_not_supported`.
|
|
145
|
+
- Instagram: the numeric comment ID. Facebook: the `{post}_{comment}` ID; Post ID is still needed (its `{page_id}_` prefix picks the Page). LinkedIn: preferably the `comment_urn` from the listing; a bare ID is only looked up among the post's first 250 comments (`404 linkedin_comment_not_found` otherwise).
|
|
146
|
+
- Errors: `400 invalid_comment_id` (wrong format), `404 comment_not_found` (Instagram/Facebook), `403 linkedin_personal_not_supported` / `linkedin_page_access_denied`. A comment without replies is a `200` with an empty list.
|
|
134
147
|
- **Comment Action**: Moderate one comment — hide, unhide, like, unlike, pin or unpin it.
|
|
135
148
|
- Parameters: User Identifier, Platform, Comment ID, Action, Post ID (shown only when it is needed).
|
|
136
149
|
- Each action carries its own inverse, so there is no separate toggle: `hide`/`unhide`, `like`/`unlike`, `pin`/`unpin`.
|
|
@@ -140,6 +153,22 @@ The comment endpoints are shaped like the rest of the API: **one endpoint per qu
|
|
|
140
153
|
- **Public Reply to Comment**: Public reply under the comment. Instagram only.
|
|
141
154
|
- **Create Comment**: Top-level comment or reply (Instagram replies only; TikTok always needs the video ID).
|
|
142
155
|
- **Delete Comment**: Delete a comment you own or that is on your post.
|
|
156
|
+
- **Create / List / Pause / Resume / Delete AutoDM Rule** (Instagram, account-wide): one rule answers with a DM every comment on any post or reel of the account, present and future, plus story replies, story mentions and DMs with a keyword. Rules never expire, do not count towards the 2 monitors per profile per day, and work from Meta webhooks only.
|
|
157
|
+
- Create parameters: User Identifier, Reply Message (max 1,000 characters; 640 with buttons), Triggers (`comment`, `story_reply`, `story_mention`, `dm_keyword`), Trigger Keywords (comma-separated, up to 20; required for `dm_keyword`), Buttons (up to 3), Per-User Cooldown (whole hours, 0-720, default 24; story and DM triggers always wait at least 24 h).
|
|
158
|
+
- Up to 10 rules per Instagram account. A post with its own monitor is answered by that monitor only. Pace: 25 DMs per account every 15 minutes plus the plan's daily DM allowance; what does not fit is queued for up to 24 hours.
|
|
159
|
+
- List shows each rule's `status` (`active`, `paused`, `reconnect_required`, `stopped` with `stop_reason`, `disabled`), `stats`, `pending` and `webhook` (`receiving_events`, `last_event_at`, `hint`): if Meta stops sending events to an account, you see it there.
|
|
160
|
+
- Errors: `502 webhook_subscription_failed` (reconnect Instagram), `409 duplicate_rule` / `rule_limit_reached` / `rule_creation_in_progress` / `rule_stopped`, `503 account_rules_disabled`.
|
|
161
|
+
|
|
162
|
+
### Direct Message Actions
|
|
163
|
+
- **Send DM**: Send a direct message from the Instagram or Bluesky account of a profile, or a sender action.
|
|
164
|
+
- Parameters: User Identifier, Platform, Recipient ID, Message, Reply To, Sender Action, Message ID, Reaction; Instagram: Buttons, Extra Fields (JSON: `attachments`, `quick_replies`, `generic_template`); Bluesky: Conversation ID, Share Bluesky Post URL.
|
|
165
|
+
- Instagram: the person must have written to the account in the last 24 hours. Sender actions: `typing_on`, `typing_off`, `mark_seen`, `react`, `unreact`.
|
|
166
|
+
- Bluesky: the account must be connected with an app password created with **"Allow access to your direct messages"** (otherwise `403 bluesky_dm_scope_missing`: create one in Bluesky > Settings > Privacy and security > App passwords and reconnect). Recipient ID is a handle, DID or profile link. Messages up to 1,000 characters, up to 10 clickable `@mentions`; a Bluesky post can be shared; no images or files. Sender actions: `mark_read`, `react`/`unreact` (a single emoji), `delete` (for you), `accept`, `mute`, `unmute`, `leave`.
|
|
167
|
+
- Bluesky `504 bluesky_send_unconfirmed` (`retryable: false`) means the DM may have gone out: read the conversation before sending again. `403 bluesky_recipient_unavailable` carries the `reason` and spends no quota.
|
|
168
|
+
- **List Conversations**: DM conversations newest first, with participants and recent messages.
|
|
169
|
+
- Parameters: User Identifier, Platform, Page Size, Messages per Conversation, Cursor, Since, Participant ID; Bluesky: Conversation ID, Messages Cursor, Status (`request`/`accepted`), Read State (`unread`).
|
|
170
|
+
- Bluesky returns at most 25 conversations per page; when a page takes too long the rest come with only their latest message and `messages_truncated: true`.
|
|
171
|
+
- New DMs can also reach you as the `dm_received` webhook (Bluesky is checked every 5 minutes).
|
|
143
172
|
|
|
144
173
|
### Insight Actions
|
|
145
174
|
Two more questions with a `platform` parameter, not two TikTok endpoints. A network that cannot answer a question replies with `platform_not_supported` and the list of the ones that can; today that network is TikTok, whose profile needs the `profile_analytics` capability (see the `capabilities` array returned by **List Users**).
|
|
@@ -192,6 +221,7 @@ If you saw duplicate posts on an older version of this node, upgrade: versions b
|
|
|
192
221
|
- **Link (Text)**: URL for link preview in text posts.
|
|
193
222
|
|
|
194
223
|
#### LinkedIn
|
|
224
|
+
- **Mentions**: write `@[Exact Page Name](urn:li:organization:ID)`, `@[Name](urn:li:person:ID)` or `@company-vanity` in the LinkedIn post text (put them in the description for photos and videos). Get the URN and exact name with **Resolve LinkedIn Organization**.
|
|
195
225
|
- **Page Selection**: Dynamic picker for organization pages ("Me" option for personal profiles).
|
|
196
226
|
- **Visibility (Photos/Video)**: Public, Connections, Logged In, Container (video only).
|
|
197
227
|
- **Video Description**: User commentary for video posts.
|
|
@@ -273,6 +303,9 @@ If you saw duplicate posts on an older version of this node, upgrade: versions b
|
|
|
273
303
|
#### Reddit
|
|
274
304
|
- **Text Options**: Subreddit (without r/), flair ID for post categorization.
|
|
275
305
|
|
|
306
|
+
#### Bluesky
|
|
307
|
+
- **Images**: 4 per post by default (more are dropped with a warning). Turn on **Bluesky Gallery** (Upload Photo(s)) to publish up to 10 images as a gallery; with more than 10 the first 10 are published and the response carries a warning.
|
|
308
|
+
|
|
276
309
|
### Validation Rules & Restrictions
|
|
277
310
|
|
|
278
311
|
#### X (Twitter) Poll Validation
|
|
@@ -2,7 +2,10 @@ import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodePro
|
|
|
2
2
|
export declare class UploadPostApi implements ICredentialType {
|
|
3
3
|
name: string;
|
|
4
4
|
displayName: string;
|
|
5
|
-
|
|
5
|
+
icon: {
|
|
6
|
+
readonly light: "file:UploadPost.svg";
|
|
7
|
+
readonly dark: "file:UploadPost.svg";
|
|
8
|
+
};
|
|
6
9
|
documentationUrl: string;
|
|
7
10
|
properties: INodeProperties[];
|
|
8
11
|
authenticate: IAuthenticateGeneric;
|
|
@@ -5,7 +5,7 @@ class UploadPostApi {
|
|
|
5
5
|
constructor() {
|
|
6
6
|
this.name = 'uploadPostApi';
|
|
7
7
|
this.displayName = 'Upload Post API';
|
|
8
|
-
this.icon = 'file:UploadPost.svg';
|
|
8
|
+
this.icon = { light: 'file:UploadPost.svg', dark: 'file:UploadPost.svg' };
|
|
9
9
|
this.documentationUrl = 'https://docs.upload-post.com';
|
|
10
10
|
this.properties = [
|
|
11
11
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadPostApi.credentials.js","sourceRoot":"","sources":["../../credentials/UploadPostApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,aAAa;IAA1B;QACC,SAAI,GAAG,eAAe,CAAC;QACvB,gBAAW,GAAG,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"UploadPostApi.credentials.js","sourceRoot":"","sources":["../../credentials/UploadPostApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,aAAa;IAA1B;QACC,SAAI,GAAG,eAAe,CAAC;QACvB,gBAAW,GAAG,iBAAiB,CAAC;QAChC,SAAI,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,EAAW,CAAC;QAE9E,qBAAgB,GAAG,8BAA8B,CAAC;QAElD,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,gCAAgC;gBAC7C,WAAW,EAAE,sEAAsE;aACnF;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,eAAe,EAAE,iCAAiC;oBAClD,sBAAsB,EAAE,KAAK;iBAC7B;aACD;SACD,CAAC;QAIF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,iCAAiC;gBAC1C,GAAG,EAAE,iBAAiB;gBACtB,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACR,eAAe,EAAE,mCAAmC;oBACpD,sBAAsB,EAAE,KAAK;iBAC7B;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA5CD,sCA4CC"}
|