upload-post 2.13.0 → 2.14.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.
Files changed (4) hide show
  1. package/README.md +110 -9
  2. package/index.d.ts +364 -17
  3. package/index.js +371 -16
  4. package/package.json +2 -2
package/index.d.ts CHANGED
@@ -138,12 +138,23 @@ declare module 'upload-post' {
138
138
  tiktokCoverTimestamp?: number;
139
139
  /** AI-generated content flag */
140
140
  tiktokIsAigc?: boolean;
141
- /** Post mode */
141
+ /**
142
+ * Post mode. `MEDIA_UPLOAD` is the same draft as {@link TikTokVideoOptions.tiktokUploadToDraft}.
143
+ * Alias: `postMode` / `post_mode`.
144
+ */
142
145
  tiktokPostMode?: TikTokPostMode;
146
+ /** Alias of {@link TikTokVideoOptions.tiktokPostMode}. */
147
+ postMode?: TikTokPostMode;
148
+ /** Alias of {@link TikTokVideoOptions.tiktokPostMode}. */
149
+ post_mode?: TikTokPostMode;
143
150
  /** Branded content toggle */
144
151
  brandContentToggle?: boolean;
145
152
  /** Brand organic toggle */
146
153
  brandOrganicToggle?: boolean;
154
+ /** Only show the video in ads */
155
+ tiktokIsAdsOnly?: boolean;
156
+ /** TikTok One invite link. Requires branded content. */
157
+ tiktokTtoInviteLink?: string;
147
158
 
148
159
  // ---- Music, location, cover and draft ----
149
160
  // Available on connections that declare the matching capability (`music`,
@@ -171,8 +182,18 @@ declare module 'upload-post' {
171
182
  tiktokCoverImageUrl?: string;
172
183
  /** AI-generated content disclosure */
173
184
  tiktokIsAiGenerated?: boolean;
174
- /** Publish to drafts. When true TikTok ignores the rest of the post settings */
185
+ /**
186
+ * Publish to drafts. Same draft as `tiktokPostMode: 'MEDIA_UPLOAD'` /
187
+ * `postMode: 'MEDIA_UPLOAD'`. Aliases: `uploadToDraft`, `tiktok_upload_to_draft`,
188
+ * `upload_to_draft`. When true TikTok ignores the rest of the post settings.
189
+ */
175
190
  tiktokUploadToDraft?: boolean;
191
+ /** Alias of {@link TikTokVideoOptions.tiktokUploadToDraft}. */
192
+ uploadToDraft?: boolean;
193
+ /** Alias of {@link TikTokVideoOptions.tiktokUploadToDraft}. */
194
+ tiktok_upload_to_draft?: boolean;
195
+ /** Alias of {@link TikTokVideoOptions.tiktokUploadToDraft}. */
196
+ upload_to_draft?: boolean;
176
197
  }
177
198
 
178
199
  export interface TikTokPhotoOptions {
@@ -190,20 +211,27 @@ declare module 'upload-post' {
190
211
  * ones.
191
212
  */
192
213
  tiktokPrivacyLevel?: TikTokPrivacyLevel;
193
- /** Post mode, e.g. DIRECT_POST or MEDIA_UPLOAD (inbox) */
194
- tiktokPostMode?: string;
214
+ /**
215
+ * Post mode. `MEDIA_UPLOAD` is the same draft as {@link TikTokPhotoOptions.tiktokUploadToDraft}.
216
+ * Alias: `postMode` / `post_mode`.
217
+ */
218
+ tiktokPostMode?: TikTokPostMode;
219
+ /** Alias of {@link TikTokPhotoOptions.tiktokPostMode}. */
220
+ postMode?: TikTokPostMode;
221
+ /** Alias of {@link TikTokPhotoOptions.tiktokPostMode}. */
222
+ post_mode?: TikTokPostMode;
195
223
  /** Branded content toggle */
196
224
  brandContentToggle?: boolean;
197
225
  /** Brand organic toggle */
198
226
  brandOrganicToggle?: boolean;
199
227
 
200
- // ---- Music, location and AI disclosure ----
201
- // Photo posts accept the track id, the location pair and the AI disclosure —
202
- // not the volume/trim, cover-image or draft fields, which are video-only.
203
- // Available on connections that declare the matching capability (`music`,
204
- // `location`) — see `capabilities` on the TikTok account returned by
205
- // listUsers(). Without it the field is ignored, the post still publishes, and
206
- // the response includes a per-field `warnings` entry.
228
+ // ---- Music, location, AI disclosure and draft ----
229
+ // Photo posts accept the track id, the location pair, the AI disclosure and
230
+ // the draft switch — not the volume/trim or cover-image fields, which are
231
+ // video-only. Available on connections that declare the matching capability
232
+ // (`music`, `location`, `draft`) — see `capabilities` on the TikTok account
233
+ // returned by listUsers(). Without it the field is ignored, the post still
234
+ // publishes, and the response includes a per-field `warnings` entry.
207
235
 
208
236
  /** Commercial Music Library track id (see getTiktokTrendingMusic) */
209
237
  tiktokMusicId?: string;
@@ -213,6 +241,18 @@ declare module 'upload-post' {
213
241
  tiktokLocationName?: string;
214
242
  /** AI-generated content disclosure */
215
243
  tiktokIsAiGenerated?: boolean;
244
+ /**
245
+ * Publish to drafts. Same draft as `tiktokPostMode: 'MEDIA_UPLOAD'` /
246
+ * `postMode: 'MEDIA_UPLOAD'`. Aliases: `uploadToDraft`, `tiktok_upload_to_draft`,
247
+ * `upload_to_draft`.
248
+ */
249
+ tiktokUploadToDraft?: boolean;
250
+ /** Alias of {@link TikTokPhotoOptions.tiktokUploadToDraft}. */
251
+ uploadToDraft?: boolean;
252
+ /** Alias of {@link TikTokPhotoOptions.tiktokUploadToDraft}. */
253
+ tiktok_upload_to_draft?: boolean;
254
+ /** Alias of {@link TikTokPhotoOptions.tiktokUploadToDraft}. */
255
+ upload_to_draft?: boolean;
216
256
  }
217
257
 
218
258
  // ==================== Instagram Options ====================
@@ -245,6 +285,8 @@ declare module 'upload-post' {
245
285
  instagramUserTags?: string;
246
286
  /** Location ID */
247
287
  instagramLocationId?: string;
288
+ /** Alt text: string (applied to every item) or list of strings, ≤1000 chars each */
289
+ instagramAltText?: string | string[];
248
290
  }
249
291
 
250
292
  // ==================== YouTube Options ====================
@@ -280,6 +322,10 @@ declare module 'upload-post' {
280
322
  youtubeHasPaidProductPlacement?: boolean;
281
323
  /** Recording date (ISO 8601) */
282
324
  youtubeRecordingDate?: string;
325
+ /** Notify subscribers. Default true; send false to suppress the notification */
326
+ youtubeNotifySubscribers?: boolean;
327
+ /** RFC3339 time. Uploads the video as private until this instant (Studio: Scheduled) */
328
+ youtubePublishAt?: string;
283
329
  /** Playlist ID(s) to add the uploaded video to — one ID, an array, or a comma-separated list */
284
330
  youtubePlaylistId?: string | string[];
285
331
  /** Subtitle/caption files to upload. Each entry needs a language code and either a file path or URL. */
@@ -302,6 +348,36 @@ declare module 'upload-post' {
302
348
  linkedinVisibility?: LinkedInVisibility;
303
349
  /** Page ID for organization posts */
304
350
  targetLinkedinPageId?: string;
351
+ /** Alt text per image (string, JSON list, or repeated). Default = title */
352
+ linkedinAltText?: string | string[];
353
+ /** Disable reshare by others */
354
+ linkedinDisableReshare?: boolean;
355
+ /** Override the scraped link-share title (< 400 chars) */
356
+ linkedinLinkTitle?: string;
357
+ /** Override the scraped link-share description (< 4086 chars) */
358
+ linkedinLinkDescription?: string;
359
+ /** Alt text for the link-share thumbnail */
360
+ linkedinThumbnailAltText?: string;
361
+ /** Organic Page targeting: geo locations (CSV, JSON list, URN or numeric id) */
362
+ linkedinTargetGeoLocations?: string | string[];
363
+ linkedinTargetIndustries?: string | string[];
364
+ linkedinTargetSeniorities?: string | string[];
365
+ linkedinTargetJobFunctions?: string | string[];
366
+ linkedinTargetStaffCountRanges?: string | string[];
367
+ linkedinTargetInterfaceLocales?: string | string[];
368
+ linkedinTargetDegrees?: string | string[];
369
+ linkedinTargetFieldsOfStudy?: string | string[];
370
+ linkedinTargetOrganizations?: string | string[];
371
+ /** Raw LinkedIn targetEntities facets JSON */
372
+ linkedinTargetEntities?: Record<string, unknown> | string;
373
+ /** Reject the post if LinkedIn reports audience < 300 */
374
+ linkedinTargetCheckAudience?: boolean;
375
+ /** English SRT captions: local path, stream, or file */
376
+ linkedinSubtitles?: string | Buffer | NodeJS.ReadableStream;
377
+ /** Public URL of an English SRT file */
378
+ linkedinSubtitlesUrl?: string;
379
+ /** Inline English SRT text */
380
+ linkedinSubtitlesText?: string;
305
381
  }
306
382
 
307
383
  // ==================== Facebook Options ====================
@@ -315,11 +391,35 @@ declare module 'upload-post' {
315
391
  facebookMediaType?: FacebookMediaType;
316
392
  /** Thumbnail URL for normal page videos (only when facebookMediaType is 'VIDEO') */
317
393
  thumbnailUrl?: string;
394
+ /** Facebook Place ID */
395
+ facebookPlaceId?: string;
396
+ /** Geographic/age/language targeting */
397
+ facebookTargeting?: Record<string, unknown> | string;
398
+ /** Feed targeting */
399
+ facebookFeedTargeting?: Record<string, unknown> | string;
400
+ /** AI-generated disclosure on Reels */
401
+ facebookIsAiGenerated?: boolean;
402
+ /** Unpublished type for page video: DRAFT, INLINE_CREATED, ADS_POST, PUBLISHED. Do not send SCHEDULED — use scheduledDate. */
403
+ facebookUnpublishedContentType?: 'DRAFT' | 'INLINE_CREATED' | 'ADS_POST' | 'PUBLISHED' | string;
404
+ /** Hide the video from the Page story */
405
+ facebookNoStory?: boolean;
406
+ /** Secret/unpublished video */
407
+ facebookSecret?: boolean;
408
+ /** Page IDs to invite as Reel collaborators (max 10 / 24h) */
409
+ facebookCollaborators?: string | string[];
318
410
  }
319
411
 
320
412
  export interface FacebookPhotoOptions {
321
413
  /** Facebook Page ID */
322
414
  facebookPageId?: string;
415
+ /** Alt text per photo */
416
+ facebookAltText?: string | string[];
417
+ /** Facebook Place ID */
418
+ facebookPlaceId?: string;
419
+ /** Geographic/age/language targeting */
420
+ facebookTargeting?: Record<string, unknown> | string;
421
+ /** Feed targeting */
422
+ facebookFeedTargeting?: Record<string, unknown> | string;
323
423
  }
324
424
 
325
425
  export interface FacebookTextOptions {
@@ -327,6 +427,18 @@ declare module 'upload-post' {
327
427
  facebookPageId?: string;
328
428
  /** URL to attach as link preview */
329
429
  facebookLinkUrl?: string;
430
+ /** Facebook Place ID */
431
+ facebookPlaceId?: string;
432
+ /** Geographic/age/language targeting */
433
+ facebookTargeting?: Record<string, unknown> | string;
434
+ /** Feed targeting */
435
+ facebookFeedTargeting?: Record<string, unknown> | string;
436
+ /** Link-post CTA, e.g. { type: 'LEARN_MORE', link: 'https://…' } */
437
+ facebookCallToAction?: Record<string, unknown> | string;
438
+ /** Link carousel (2–5 objects with `link`) */
439
+ facebookChildAttachments?: Array<Record<string, unknown>> | string;
440
+ /** Show the multi-share end card (requires child attachments) */
441
+ facebookMultiShareEndCard?: boolean;
330
442
  }
331
443
 
332
444
  // ==================== Pinterest Options ====================
@@ -342,8 +454,12 @@ declare module 'upload-post' {
342
454
  pinterestCoverImageContentType?: string;
343
455
  /** Base64-encoded cover image data */
344
456
  pinterestCoverImageData?: string;
345
- /** Key frame time in ms for cover */
457
+ /** Key frame time in seconds (values larger than the video duration are treated as milliseconds) */
346
458
  pinterestCoverImageKeyFrameTime?: number;
459
+ /** Board section ID */
460
+ pinterestBoardSectionId?: string;
461
+ /** AI disclosures: AI_MODIFIED and/or SYNTHETIC_PERFORMER */
462
+ pinterestAiDisclosures?: string | string[];
347
463
  }
348
464
 
349
465
  export interface PinterestPhotoOptions {
@@ -353,6 +469,18 @@ declare module 'upload-post' {
353
469
  pinterestAltText?: string;
354
470
  /** Destination link */
355
471
  pinterestLink?: string;
472
+ /** Board section ID */
473
+ pinterestBoardSectionId?: string;
474
+ /** AI disclosures: AI_MODIFIED and/or SYNTHETIC_PERFORMER */
475
+ pinterestAiDisclosures?: string | string[];
476
+ /** Per-slide titles on a 2–5 photo carousel */
477
+ pinterestCarouselTitles?: string | string[];
478
+ /** Per-slide descriptions on a 2–5 photo carousel */
479
+ pinterestCarouselDescriptions?: string | string[];
480
+ /** Per-slide links on a 2–5 photo carousel */
481
+ pinterestCarouselLinks?: string | string[];
482
+ /** 0-based cover index on a carousel */
483
+ pinterestCarouselIndex?: number;
356
484
  }
357
485
 
358
486
  // ==================== X (Twitter) Options ====================
@@ -374,6 +502,8 @@ declare module 'upload-post' {
374
502
  xDirectMessageDeepLink?: string;
375
503
  /** Post long text as single post */
376
504
  xLongTextAsPost?: boolean;
505
+ /** Paid partnership label on the first post */
506
+ xPaidPartnership?: boolean;
377
507
  /** ID of the tweet to reply to (alias of the generic replyToId). */
378
508
  xReplyToId?: string;
379
509
  }
@@ -385,12 +515,22 @@ declare module 'upload-post' {
385
515
  xPlaceId?: string;
386
516
  /** Comma-separated image layout for thread (e.g. "4,4" or "2,3,1"). Each value 1-4, total must equal image count. */
387
517
  xThreadImageLayout?: string;
518
+ /** Alt text (≤1000 chars). String for video; string, list or `x_alt_text[]` for photos */
519
+ xAltText?: string | string[];
520
+ /** Public URL of a .srt file (≤1 MB) */
521
+ xSubtitlesUrl?: string;
522
+ /** Inline SRT text, or a URL if the value starts with http(s) */
523
+ xSubtitles?: string;
524
+ /** 2-letter language code (default EN) */
525
+ xSubtitlesLanguage?: string;
526
+ /** Subtitle track name shown on X (≤150 chars) */
527
+ xSubtitlesName?: string;
388
528
  }
389
529
 
390
530
  export interface XTextOptions extends XBaseOptions {
391
531
  /** URL to attach */
392
532
  xPostUrl?: string;
393
- /** Tweet ID to quote */
533
+ /** Tweet ID to quote. Quote posts require an X API Enterprise plan. */
394
534
  xQuoteTweetId?: string;
395
535
  /** Poll options (2-4 options) */
396
536
  xPollOptions?: string | string[];
@@ -400,6 +540,16 @@ declare module 'upload-post' {
400
540
  xPollReplySettings?: XReplySettings;
401
541
  /** Card URI for Twitter Cards */
402
542
  xCardUri?: string;
543
+ /** X Article title (≤100 chars, Premium) */
544
+ xArticleTitle?: string;
545
+ /** X Article body (plain text / light Markdown) */
546
+ xArticleBody?: string;
547
+ /** DraftJS content_state JSON */
548
+ xArticleContentState?: Record<string, unknown> | string;
549
+ /** Create the Article as a draft only */
550
+ xArticleDraft?: boolean;
551
+ /** Article cover: local file, public URL, or X media_id */
552
+ xArticleCoverMedia?: string | Buffer | NodeJS.ReadableStream;
403
553
  }
404
554
 
405
555
  // ==================== Threads Options ====================
@@ -407,19 +557,182 @@ declare module 'upload-post' {
407
557
  export interface ThreadsOptions {
408
558
  /** Post long text as single post (vs thread) */
409
559
  threadsLongTextAsPost?: boolean;
410
- /** Comma-separated list of how many media items per Threads post (e.g. "5,5"). Each value 1-10, total must equal file count. */
560
+ /** Comma-separated list of how many media items per Threads post (e.g. "5,5"). Each value 1-20, total must equal file count. */
411
561
  threadsThreadMediaLayout?: string;
412
562
  /** Topic tag for the Threads post */
413
563
  threadsTopicTag?: string;
564
+ /** Who can reply: everyone, accounts_you_follow, mentioned_only, parent_post_author_only, followers_only */
565
+ threadsReplyControl?: 'everyone' | 'accounts_you_follow' | 'mentioned_only' | 'parent_post_author_only' | 'followers_only' | 'followers' | string;
566
+ /** Alt text per image/video (≤1000 chars) */
567
+ threadsAltText?: string | string[];
568
+ /** Publish as a reply to this Threads post id */
569
+ threadsReplyToId?: string;
570
+ /** Quote this Threads post id */
571
+ threadsQuotePostId?: string;
572
+ /** Force a link preview (text posts) */
573
+ threadsLinkAttachment?: string;
574
+ /** Poll options, 2–4 strings of 1–25 chars (text posts) */
575
+ threadsPollOptions?: string | string[];
576
+ /** Publish a text container without the second threads_publish call */
577
+ threadsAutoPublishText?: boolean;
414
578
  }
415
579
 
416
580
  // ==================== Reddit Options ====================
417
581
 
582
+ /**
583
+ * Reddit is currently unavailable. Uploads, OAuth and comments return HTTP 503
584
+ * with `error_code=reddit_unavailable`. Fields are still accepted and forwarded.
585
+ */
418
586
  export interface RedditOptions {
419
587
  /** Subreddit name (without r/) */
420
588
  redditSubreddit?: string;
421
589
  /** Flair template ID */
422
590
  redditFlairId?: string;
591
+ redditNsfw?: boolean;
592
+ redditSpoiler?: boolean;
593
+ redditResubmit?: boolean;
594
+ redditSendReplies?: boolean;
595
+ /** Custom text for editable flairs */
596
+ redditFlairText?: string;
597
+ /** Per-image captions (JSON array or `||`-separated) */
598
+ redditGalleryCaptions?: string | string[];
599
+ /** Per-image outbound URLs (JSON array or `||`-separated) */
600
+ redditGalleryUrls?: string | string[];
601
+ }
602
+
603
+ // ==================== Bluesky Options ====================
604
+
605
+ export interface BlueskyOptions {
606
+ /** Alt text per image/video (string, JSON array or `||`-separated) */
607
+ blueskyAltText?: string | string[];
608
+ /** Up to 3 BCP-47 language codes, comma-separated */
609
+ blueskyLangs?: string | string[];
610
+ /** Content labels: porn, sexual, nudity, graphic-media */
611
+ blueskyLabels?: string | string[];
612
+ /** Publish up to 20 images as a gallery (default: first 4) */
613
+ blueskyGallery?: boolean;
614
+ /** Who can reply: everyone, nobody, mention, following, followers, list:<at://uri> */
615
+ blueskyThreadgate?: string;
616
+ /** Alias of blueskyThreadgate */
617
+ blueskyReplySettings?: string;
618
+ /** `disable_quotes` or `true` to block quotes */
619
+ blueskyPostgate?: string | boolean;
620
+ /** Alias of blueskyPostgate */
621
+ blueskyQuoteSettings?: string | boolean;
622
+ /** Quote a post (bsky.app URL or at:// URI) */
623
+ blueskyQuoteUri?: string;
624
+ blueskyQuoteId?: string;
625
+ blueskyQuoteUrl?: string;
626
+ }
627
+
628
+ export interface DiscordOptions {
629
+ discordThreadId?: string;
630
+ discordThreadName?: string;
631
+ discordAppliedTags?: string | string[];
632
+ discordEmbeds?: Array<Record<string, unknown>> | string;
633
+ discordUsername?: string;
634
+ discordAvatarUrl?: string;
635
+ discordAllowedMentions?: Record<string, unknown> | string;
636
+ discordAltText?: string | string[];
637
+ discordFlags?: number;
638
+ discordTts?: boolean;
639
+ discordPoll?: Record<string, unknown> | string;
640
+ discordMaxFileMb?: number;
641
+ }
642
+
643
+ export interface TelegramOptions {
644
+ telegramParseMode?: 'MarkdownV2' | 'HTML' | string;
645
+ telegramMessageThreadId?: number | string;
646
+ telegramDisableNotification?: boolean;
647
+ telegramProtectContent?: boolean;
648
+ telegramHasSpoiler?: boolean;
649
+ telegramLinkPreview?: boolean;
650
+ telegramReplyMarkup?: Record<string, unknown> | string;
651
+ telegramCaptionOverflow?: 'truncate' | 'split';
652
+ telegramAsDocument?: boolean;
653
+ telegramMediaUrls?: string | string[];
654
+ }
655
+
656
+ export interface MastodonOptions {
657
+ mastodonVisibility?: 'public' | 'unlisted' | 'private' | 'direct';
658
+ mastodonSensitive?: boolean;
659
+ mastodonSpoilerText?: string;
660
+ mastodonLanguage?: string;
661
+ mastodonAltText?: string | string[];
662
+ mastodonPollOptions?: string | string[];
663
+ mastodonPollExpiresIn?: number;
664
+ mastodonPollMultiple?: boolean;
665
+ mastodonScheduledAt?: string;
666
+ }
667
+
668
+ export interface WordpressOptions {
669
+ wordpressStatus?: 'publish' | 'draft' | 'pending' | 'future';
670
+ wordpressDate?: string;
671
+ wordpressCategories?: string | string[];
672
+ wordpressTags?: string | string[];
673
+ wordpressExcerpt?: string;
674
+ wordpressSlug?: string;
675
+ wordpressAltText?: string;
676
+ wordpressMediaCaption?: string;
677
+ wordpressBlockFormat?: boolean;
678
+ }
679
+
680
+ export interface LemmyOptions {
681
+ lemmyUrl?: string;
682
+ lemmyCommunity?: string;
683
+ lemmyNsfw?: boolean;
684
+ lemmyLanguageId?: number | string;
685
+ lemmyAltText?: string;
686
+ }
687
+
688
+ export interface SlackOptions {
689
+ slackMarkdown?: boolean;
690
+ slackBlocks?: Array<Record<string, unknown>> | string;
691
+ slackMrkdwn?: boolean;
692
+ slackAltText?: string;
693
+ slackFirstCommentMode?: 'separate' | 'inline';
694
+ }
695
+
696
+ export interface NostrOptions {
697
+ nostrKind?: 1 | 20 | 22 | 34235 | 30023 | number;
698
+ nostrLongForm?: boolean;
699
+ }
700
+
701
+ export interface DevtoOptions {
702
+ devtoTags?: string | string[];
703
+ devtoCanonicalUrl?: string;
704
+ devtoDescription?: string;
705
+ devtoMainImage?: string;
706
+ devtoSeries?: string;
707
+ devtoPublished?: boolean;
708
+ }
709
+
710
+ export interface HashnodeOptions {
711
+ hashnodeTags?: string | string[];
712
+ hashnodeOriginalArticleUrl?: string;
713
+ hashnodeSubtitle?: string;
714
+ hashnodeCoverImageUrl?: string;
715
+ hashnodeDraft?: boolean;
716
+ hashnodeBody?: string;
717
+ /** Alias of hashnodeBody */
718
+ content?: string;
719
+ }
720
+
721
+ export interface WhopOptions {
722
+ whopBody?: string;
723
+ whopPinned?: boolean;
724
+ whopIsMention?: boolean;
725
+ whopPaywallAmount?: number;
726
+ whopPaywallCurrency?: string;
727
+ whopAttachmentIds?: string | string[];
728
+ }
729
+
730
+ export interface ListmonkOptions {
731
+ listmonkContentType?: 'richtext' | 'markdown' | 'html' | 'plain';
732
+ listmonkSendAt?: string;
733
+ listmonkLists?: string | string[];
734
+ listmonkTemplateId?: string | number;
735
+ listmonkMediaIds?: string | string[];
423
736
  }
424
737
 
425
738
  // ==================== Combined Upload Options ====================
@@ -472,6 +785,14 @@ declare module 'upload-post' {
472
785
  gbpOfferRedeemUrl?: string;
473
786
  /** Offer terms and conditions */
474
787
  gbpOfferTerms?: string;
788
+ /** BCP-47 language code. Default "en" */
789
+ gbpLanguageCode?: string;
790
+ /** Alias of gbpOfferCoupon */
791
+ gbpCouponCode?: string;
792
+ /** Alias of gbpOfferRedeemUrl */
793
+ gbpRedeemUrl?: string;
794
+ /** Alias of gbpOfferTerms */
795
+ gbpTerms?: string;
475
796
  }
476
797
 
477
798
  export interface UploadVideoOptions extends CommonUploadOptions,
@@ -484,7 +805,12 @@ declare module 'upload-post' {
484
805
  XMediaOptions,
485
806
  ThreadsOptions,
486
807
  RedditOptions,
487
- GoogleBusinessOptions {
808
+ GoogleBusinessOptions,
809
+ BlueskyOptions,
810
+ DiscordOptions,
811
+ TelegramOptions,
812
+ MastodonOptions,
813
+ WordpressOptions {
488
814
  /** Target platforms */
489
815
  platforms: VideoPlatform[];
490
816
  }
@@ -498,7 +824,13 @@ declare module 'upload-post' {
498
824
  XMediaOptions,
499
825
  ThreadsOptions,
500
826
  RedditOptions,
501
- GoogleBusinessOptions {
827
+ GoogleBusinessOptions,
828
+ BlueskyOptions,
829
+ DiscordOptions,
830
+ TelegramOptions,
831
+ MastodonOptions,
832
+ LemmyOptions,
833
+ WordpressOptions {
502
834
  /** Target platforms */
503
835
  platforms: PhotoPlatform[];
504
836
  }
@@ -519,7 +851,19 @@ declare module 'upload-post' {
519
851
  ThreadsOptions,
520
852
  RedditOptions,
521
853
  LinkPreviewOptions,
522
- GoogleBusinessOptions {
854
+ GoogleBusinessOptions,
855
+ BlueskyOptions,
856
+ DiscordOptions,
857
+ TelegramOptions,
858
+ SlackOptions,
859
+ MastodonOptions,
860
+ NostrOptions,
861
+ LemmyOptions,
862
+ DevtoOptions,
863
+ HashnodeOptions,
864
+ WordpressOptions,
865
+ WhopOptions,
866
+ ListmonkOptions {
523
867
  /** Target platforms */
524
868
  platforms: TextPlatform[];
525
869
  }
@@ -535,6 +879,9 @@ declare module 'upload-post' {
535
879
  linkedinVisibility?: LinkedInVisibility;
536
880
  /** Page ID for organization posts */
537
881
  targetLinkedinPageId?: string;
882
+ linkedinAltText?: string | string[];
883
+ linkedinDisableReshare?: boolean;
884
+ linkedinTargetCheckAudience?: boolean;
538
885
  /** ISO date for scheduling */
539
886
  scheduledDate?: string;
540
887
  /** Timezone for scheduled date */