@rolino/contracts 0.9.0 → 0.10.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/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @rolino/contracts
2
2
 
3
+ ## 0.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 601eda2: Add Bluesky account and media policy discovery, confirmed future local schedule cancellation, and hosted MCP media upload preparation and verification. Keep OAuth approval with the account owner and reject cancellation when delivery may have started.
8
+
9
+ Add image alt text, confirmed untouched draft deletion, and confirmed Bluesky account disconnection with independent optional permissions. Preserve original media and prevent late token refresh from restoring disconnected authorization.
10
+
11
+ - support for multiple social accounts under one brand
12
+
3
13
  ## 0.9.0
4
14
 
5
15
  ### Minor Changes
package/dist/index.cjs CHANGED
@@ -166,6 +166,7 @@ __export(index_exports, {
166
166
  BlogMetadataSchema: () => BlogMetadataSchema,
167
167
  BlogSitemapEntrySchema: () => BlogSitemapEntrySchema,
168
168
  BlogSlugRedirectSchema: () => BlogSlugRedirectSchema,
169
+ BlueskyDeliveryOptionsSchema: () => BlueskyDeliveryOptionsSchema,
169
170
  CONTRACT_VERSION: () => CONTRACT_VERSION,
170
171
  CalendarEventSchema: () => CalendarEventSchema,
171
172
  CalendarListDataSchema: () => CalendarListDataSchema,
@@ -175,9 +176,20 @@ __export(index_exports, {
175
176
  CapabilitiesResponseSchema: () => CapabilitiesResponseSchema,
176
177
  CapabilityIdSchema: () => CapabilityIdSchema,
177
178
  CapabilitySchema: () => CapabilitySchema,
179
+ DraftAccountDestinationSchema: () => DraftAccountDestinationSchema,
180
+ DraftDeletePreviewResponseSchema: () => DraftDeletePreviewResponseSchema,
181
+ DraftDeletePreviewSchema: () => DraftDeletePreviewSchema,
182
+ DraftDeleteResponseSchema: () => DraftDeleteResponseSchema,
183
+ DraftDeleteResultSchema: () => DraftDeleteResultSchema,
178
184
  DraftPostInputSchema: () => DraftPostInputSchema,
179
185
  DraftPostUpdateInputSchema: () => DraftPostUpdateInputSchema,
180
186
  IntegrationConnectionStatusSchema: () => IntegrationConnectionStatusSchema,
187
+ IntegrationDisconnectExecuteInputSchema: () => IntegrationDisconnectExecuteInputSchema,
188
+ IntegrationDisconnectInputSchema: () => IntegrationDisconnectInputSchema,
189
+ IntegrationDisconnectPreviewResponseSchema: () => IntegrationDisconnectPreviewResponseSchema,
190
+ IntegrationDisconnectPreviewSchema: () => IntegrationDisconnectPreviewSchema,
191
+ IntegrationDisconnectResponseSchema: () => IntegrationDisconnectResponseSchema,
192
+ IntegrationDisconnectResultSchema: () => IntegrationDisconnectResultSchema,
181
193
  IntegrationHealthListDataSchema: () => IntegrationHealthListDataSchema,
182
194
  IntegrationHealthListResponseSchema: () => IntegrationHealthListResponseSchema,
183
195
  IntegrationHealthSchema: () => IntegrationHealthSchema,
@@ -235,6 +247,12 @@ __export(index_exports, {
235
247
  PostRecoveryResponseSchema: () => PostRecoveryResponseSchema,
236
248
  PostRecoveryResultSchema: () => PostRecoveryResultSchema,
237
249
  PostResponseSchema: () => PostResponseSchema,
250
+ PostScheduleCancelExecuteInputSchema: () => PostScheduleCancelExecuteInputSchema,
251
+ PostScheduleCancelInputSchema: () => PostScheduleCancelInputSchema,
252
+ PostScheduleCancelPreviewResponseSchema: () => PostScheduleCancelPreviewResponseSchema,
253
+ PostScheduleCancelPreviewSchema: () => PostScheduleCancelPreviewSchema,
254
+ PostScheduleCancelResponseSchema: () => PostScheduleCancelResponseSchema,
255
+ PostScheduleCancelResultSchema: () => PostScheduleCancelResultSchema,
238
256
  PostScheduleExecuteInputSchema: () => PostScheduleExecuteInputSchema,
239
257
  PostScheduleExecuteResponseSchema: () => PostScheduleExecuteResponseSchema,
240
258
  PostScheduleExecuteResultSchema: () => PostScheduleExecuteResultSchema,
@@ -396,11 +414,13 @@ var CapabilityIdSchema = import_zod.z.enum([
396
414
  "projects:write",
397
415
  "posts:read",
398
416
  "posts:write",
417
+ "posts:delete",
399
418
  "posts:schedule",
400
419
  "posts:publish",
401
420
  "storage:read",
402
421
  "media:delete",
403
422
  "integrations:read",
423
+ "integrations:disconnect",
404
424
  "calendar:read",
405
425
  "seo:read",
406
426
  "backlinks:read",
@@ -1346,6 +1366,13 @@ var PostDestinationStageSchema = import_zod.z.enum([
1346
1366
  "FAILED"
1347
1367
  ]);
1348
1368
  var PostDestinationSchema = import_zod.z.object({
1369
+ id: import_zod.z.string().min(1).optional(),
1370
+ integrationId: import_zod.z.string().min(1).nullable().optional(),
1371
+ accountId: import_zod.z.string().nullable().optional(),
1372
+ accountName: import_zod.z.string().nullable().optional(),
1373
+ accountAvatar: import_zod.z.string().nullable().optional(),
1374
+ tiktokSettings: import_zod.z.lazy(() => TikTokPostSettingsSchema).nullable().optional(),
1375
+ youtubeSettings: import_zod.z.lazy(() => YouTubePostSettingsSchema).nullable().optional(),
1349
1376
  provider: PublishingProviderSchema,
1350
1377
  status: PlatformPostStatusSchema,
1351
1378
  deliveryMode: PostDeliveryModeSchema,
@@ -1543,14 +1570,35 @@ var DraftMediaAssetIdsSchema = import_zod.z.array(import_zod.z.string().trim().m
1543
1570
  (ids) => new Set(ids).size === ids.length,
1544
1571
  "Media asset IDs must be unique."
1545
1572
  );
1573
+ var DraftMediaAltTextSchema = import_zod.z.record(import_zod.z.string().min(1).max(200), import_zod.z.string().trim().max(1e3).nullable()).refine((items) => Object.keys(items).length <= 10, "At most ten media descriptions are allowed.");
1574
+ var DraftAccountDestinationSchema = import_zod.z.object({
1575
+ integrationId: import_zod.z.string().trim().min(1).max(200),
1576
+ provider: PublishingProviderSchema,
1577
+ captionOverride: import_zod.z.string().max(5e3).nullable().default(null),
1578
+ tiktokSettings: TikTokDraftSettingsSchema.nullable().default(null),
1579
+ youtubeSettings: YouTubePostSettingsSchema.nullable().default(null)
1580
+ }).strict().superRefine((input, context) => {
1581
+ const captionSchema = DraftCaptionOverridesObjectSchema.shape[input.provider];
1582
+ if (!captionSchema.safeParse(input.captionOverride).success) context.addIssue({ code: "custom", path: ["captionOverride"], message: "The account caption exceeds this network's limit." });
1583
+ if (input.tiktokSettings && input.provider !== "TIKTOK") context.addIssue({ code: "custom", path: ["tiktokSettings"], message: "TikTok settings require a TikTok account." });
1584
+ if (input.youtubeSettings && input.provider !== "YOUTUBE") context.addIssue({ code: "custom", path: ["youtubeSettings"], message: "YouTube settings require a YouTube account." });
1585
+ if (input.provider === "YOUTUBE" && !input.youtubeSettings) context.addIssue({ code: "custom", path: ["youtubeSettings"], message: "Provide settings for this YouTube account." });
1586
+ });
1587
+ var DraftAccountDestinationsSchema = import_zod.z.array(DraftAccountDestinationSchema).max(75).refine((items) => new Set(items.map((item) => item.integrationId)).size === items.length, "Select each account only once.");
1546
1588
  var DraftPostInputSchema = import_zod.z.object({
1589
+ destinations: DraftAccountDestinationsSchema.optional(),
1547
1590
  caption: import_zod.z.string().max(3e3).transform((value) => value.trim()).default(""),
1548
1591
  platforms: DraftPlatformsSchema.default([]),
1549
1592
  mediaAssetIds: DraftMediaAssetIdsSchema.default([]),
1593
+ mediaAltText: DraftMediaAltTextSchema.optional(),
1550
1594
  captionOverrides: DraftCaptionOverridesObjectSchema.default({}),
1551
1595
  tiktokSettings: TikTokDraftSettingsSchema.nullable().default(null),
1552
1596
  youtubeSettings: YouTubePostSettingsSchema.nullable().default(null)
1553
1597
  }).strict().superRefine((input, context) => {
1598
+ if (input.destinations !== void 0 && (input.platforms?.length || Object.keys(input.captionOverrides ?? {}).length || input.tiktokSettings || input.youtubeSettings)) context.addIssue({ code: "custom", path: ["destinations"], message: "Use account destinations with their own settings, without legacy platform fields." });
1599
+ if (input.mediaAltText && Object.keys(input.mediaAltText).some((id) => !input.mediaAssetIds.includes(id))) {
1600
+ context.addIssue({ code: "custom", path: ["mediaAltText"], message: "Alternative text must name a selected media asset." });
1601
+ }
1554
1602
  if (input.caption.length === 0 && input.mediaAssetIds.length === 0) {
1555
1603
  context.addIssue({
1556
1604
  code: "custom",
@@ -1595,13 +1643,16 @@ var DraftPostInputSchema = import_zod.z.object({
1595
1643
  }
1596
1644
  });
1597
1645
  var DraftPostUpdateInputSchema = import_zod.z.object({
1646
+ destinations: DraftAccountDestinationsSchema.optional(),
1598
1647
  caption: import_zod.z.string().max(3e3).transform((value) => value.trim()).optional(),
1599
1648
  platforms: DraftPlatformsSchema.optional(),
1600
1649
  mediaAssetIds: DraftMediaAssetIdsSchema.optional(),
1650
+ mediaAltText: DraftMediaAltTextSchema.optional(),
1601
1651
  captionOverrides: DraftCaptionOverridesObjectSchema.optional(),
1602
1652
  tiktokSettings: TikTokDraftSettingsSchema.nullable().optional(),
1603
1653
  youtubeSettings: YouTubePostSettingsSchema.nullable().optional()
1604
1654
  }).strict().superRefine((input, context) => {
1655
+ if (input.destinations !== void 0 && (input.platforms?.length || Object.keys(input.captionOverrides ?? {}).length || input.tiktokSettings || input.youtubeSettings)) context.addIssue({ code: "custom", path: ["destinations"], message: "Use account destinations with their own settings, without legacy platform fields." });
1605
1656
  if (Object.values(input).every((value) => value === void 0)) {
1606
1657
  context.addIssue({ code: "custom", message: "Provide at least one draft field to update." });
1607
1658
  }
@@ -1633,6 +1684,8 @@ var ProviderHealthStatusSchema = import_zod.z.enum([
1633
1684
  "unknown"
1634
1685
  ]);
1635
1686
  var IntegrationHealthSchema = import_zod.z.object({
1687
+ integrationId: import_zod.z.string().nullable().optional(),
1688
+ accountId: import_zod.z.string().nullable().optional(),
1636
1689
  provider: PublishingProviderSchema,
1637
1690
  connectionStatus: IntegrationConnectionStatusSchema,
1638
1691
  connected: import_zod.z.boolean(),
@@ -1654,9 +1707,9 @@ var IntegrationHealthSchema = import_zod.z.object({
1654
1707
  })
1655
1708
  });
1656
1709
  var IntegrationHealthListDataSchema = import_zod.z.object({
1657
- items: import_zod.z.array(IntegrationHealthSchema).max(PUBLISHING_PROVIDER_COUNT).refine(
1658
- (items) => new Set(items.map((item) => item.provider)).size === items.length,
1659
- "Provider health items must be unique."
1710
+ items: import_zod.z.array(IntegrationHealthSchema).refine(
1711
+ (items) => new Set(items.map((item) => item.integrationId ?? item.provider)).size === items.length,
1712
+ "Account health items must be unique."
1660
1713
  )
1661
1714
  });
1662
1715
  var IntegrationHealthListResponseSchema = successEnvelopeSchema(
@@ -1664,9 +1717,12 @@ var IntegrationHealthListResponseSchema = successEnvelopeSchema(
1664
1717
  );
1665
1718
  var ProviderDeliveryOptionsProviderSchema = import_zod.z.enum([
1666
1719
  "TIKTOK",
1667
- "LINKEDIN"
1720
+ "LINKEDIN",
1721
+ "BLUESKY"
1668
1722
  ]);
1669
1723
  var TikTokDeliveryOptionsSchema = import_zod.z.object({
1724
+ integrationId: import_zod.z.string().nullable().optional(),
1725
+ accountId: import_zod.z.string().nullable().optional(),
1670
1726
  provider: import_zod.z.literal("TIKTOK"),
1671
1727
  account: import_zod.z.object({
1672
1728
  username: import_zod.z.string().nullable(),
@@ -1695,6 +1751,8 @@ var TikTokDeliveryOptionsSchema = import_zod.z.object({
1695
1751
  checkedAt: import_zod.z.string().datetime()
1696
1752
  });
1697
1753
  var LinkedInDeliveryOptionsSchema = import_zod.z.object({
1754
+ integrationId: import_zod.z.string().nullable().optional(),
1755
+ accountId: import_zod.z.string().nullable().optional(),
1698
1756
  provider: import_zod.z.literal("LINKEDIN"),
1699
1757
  account: import_zod.z.object({
1700
1758
  displayName: import_zod.z.string().nullable(),
@@ -1722,13 +1780,72 @@ var LinkedInDeliveryOptionsSchema = import_zod.z.object({
1722
1780
  }),
1723
1781
  checkedAt: import_zod.z.string().datetime()
1724
1782
  });
1783
+ var BlueskyDeliveryOptionsSchema = import_zod.z.object({
1784
+ integrationId: import_zod.z.string().nullable().optional(),
1785
+ accountId: import_zod.z.string().nullable().optional(),
1786
+ provider: import_zod.z.literal("BLUESKY"),
1787
+ account: import_zod.z.object({ username: import_zod.z.string().nullable(), displayName: import_zod.z.string().nullable(), avatarUrl: import_zod.z.string().url().nullable() }),
1788
+ supportedPostTypes: import_zod.z.tuple([import_zod.z.literal("TEXT"), import_zod.z.literal("SINGLE_IMAGE"), import_zod.z.literal("MULTI_IMAGE")]),
1789
+ maxCaptionGraphemes: import_zod.z.literal(300),
1790
+ image: import_zod.z.object({ maxItems: import_zod.z.literal(4), mimeTypes: import_zod.z.tuple([import_zod.z.literal("image/jpeg"), import_zod.z.literal("image/png"), import_zod.z.literal("image/webp")]), maxBytes: import_zod.z.literal(2e6), maxProcessedBytes: import_zod.z.literal(2e6) }),
1791
+ authorization: import_zod.z.object({ kind: import_zod.z.literal("HUMAN_OAUTH"), path: import_zod.z.string().startsWith("/projects/"), instruction: import_zod.z.string().min(1) }),
1792
+ health: import_zod.z.object({ status: ProviderHealthStatusSchema, code: import_zod.z.string().min(1), message: import_zod.z.string().min(1) }),
1793
+ checkedAt: import_zod.z.string().datetime()
1794
+ });
1725
1795
  var ProviderDeliveryOptionsSchema = import_zod.z.discriminatedUnion("provider", [
1726
1796
  TikTokDeliveryOptionsSchema,
1727
- LinkedInDeliveryOptionsSchema
1797
+ LinkedInDeliveryOptionsSchema,
1798
+ BlueskyDeliveryOptionsSchema
1728
1799
  ]);
1729
1800
  var ProviderDeliveryOptionsResponseSchema = successEnvelopeSchema(
1730
1801
  ProviderDeliveryOptionsSchema
1731
1802
  );
1803
+ var IntegrationDisconnectInputSchema = import_zod.z.object({ provider: import_zod.z.literal("BLUESKY"), integrationId: import_zod.z.string().min(1).max(200).optional() }).strict();
1804
+ var IntegrationDisconnectExecuteInputSchema = IntegrationDisconnectInputSchema.extend({ expectedVersion: import_zod.z.string().min(1).max(100), confirmationToken: import_zod.z.string().min(1).max(1024) });
1805
+ var IntegrationDisconnectPreviewSchema = import_zod.z.object({
1806
+ integrationId: import_zod.z.string().optional(),
1807
+ accountId: import_zod.z.string().nullable().optional(),
1808
+ provider: import_zod.z.literal("BLUESKY"),
1809
+ projectId: import_zod.z.string().min(1),
1810
+ expectedVersion: import_zod.z.string().min(1),
1811
+ account: import_zod.z.string().nullable(),
1812
+ pendingDeliveries: import_zod.z.number().int().nonnegative(),
1813
+ consequence: import_zod.z.string().min(1),
1814
+ confirmation: import_zod.z.object({ token: import_zod.z.string().min(1), expiresAt: import_zod.z.string().datetime() })
1815
+ });
1816
+ var IntegrationDisconnectResultSchema = import_zod.z.object({ integrationId: import_zod.z.string().optional(), provider: import_zod.z.literal("BLUESKY"), projectId: import_zod.z.string().min(1), status: import_zod.z.literal("DISCONNECTED"), remoteRevocation: import_zod.z.enum(["PENDING", "REVOKED", "UNRESOLVED", "NOT_REQUIRED"]) });
1817
+ var IntegrationDisconnectPreviewResponseSchema = successEnvelopeSchema(IntegrationDisconnectPreviewSchema);
1818
+ var IntegrationDisconnectResponseSchema = successEnvelopeSchema(IntegrationDisconnectResultSchema);
1819
+ var DraftDeletePreviewSchema = import_zod.z.object({
1820
+ operation: import_zod.z.literal("posts.delete.execute"),
1821
+ projectId: import_zod.z.string().min(1),
1822
+ postId: import_zod.z.string().min(1),
1823
+ version: import_zod.z.number().int().positive(),
1824
+ caption: import_zod.z.string(),
1825
+ mediaCount: import_zod.z.number().int().nonnegative(),
1826
+ consequence: import_zod.z.string().min(1),
1827
+ confirmation: import_zod.z.object({ token: import_zod.z.string().min(1), expiresAt: import_zod.z.string().datetime() })
1828
+ });
1829
+ var DraftDeleteResultSchema = import_zod.z.object({ postId: import_zod.z.string().min(1), status: import_zod.z.literal("DELETED") });
1830
+ var DraftDeletePreviewResponseSchema = successEnvelopeSchema(DraftDeletePreviewSchema);
1831
+ var DraftDeleteResponseSchema = successEnvelopeSchema(DraftDeleteResultSchema);
1832
+ var PostScheduleCancelInputSchema = import_zod.z.object({}).strict();
1833
+ var PostScheduleCancelExecuteInputSchema = import_zod.z.object({ confirmationToken: import_zod.z.string().min(1).max(1024) }).strict();
1834
+ var PostScheduleCancelResultSchema = import_zod.z.object({ postId: import_zod.z.string().min(1), version: import_zod.z.number().int().positive(), status: import_zod.z.literal("DRAFT") });
1835
+ var PostScheduleCancelPreviewSchema = import_zod.z.object({
1836
+ accounts: import_zod.z.array(import_zod.z.object({ destinationId: import_zod.z.string().min(1), integrationId: import_zod.z.string().nullable(), provider: PublishingProviderSchema, accountId: import_zod.z.string().nullable(), accountName: import_zod.z.string().nullable() })).optional(),
1837
+ operation: import_zod.z.literal("posts.schedule.cancel.execute"),
1838
+ projectId: import_zod.z.string().min(1),
1839
+ postId: import_zod.z.string().min(1),
1840
+ version: import_zod.z.number().int().positive(),
1841
+ scheduledAt: import_zod.z.string().datetime(),
1842
+ timezone: import_zod.z.string().nullable(),
1843
+ destinations: import_zod.z.array(PublishingProviderSchema).min(1),
1844
+ consequence: import_zod.z.string().min(1),
1845
+ confirmation: import_zod.z.object({ token: import_zod.z.string().min(1), expiresAt: import_zod.z.string().datetime() })
1846
+ });
1847
+ var PostScheduleCancelPreviewResponseSchema = successEnvelopeSchema(PostScheduleCancelPreviewSchema);
1848
+ var PostScheduleCancelResponseSchema = successEnvelopeSchema(PostScheduleCancelResultSchema);
1732
1849
  var ReadinessStatusSchema = import_zod.z.enum([
1733
1850
  "checking",
1734
1851
  "pass",
@@ -1737,18 +1854,21 @@ var ReadinessStatusSchema = import_zod.z.enum([
1737
1854
  "unknown"
1738
1855
  ]);
1739
1856
  var ReadinessActionSchema = import_zod.z.object({
1857
+ integrationId: import_zod.z.string().optional(),
1740
1858
  kind: import_zod.z.enum([
1741
1859
  "reconnect",
1742
1860
  "replace_media",
1743
1861
  "adjust_media",
1744
1862
  "review_settings",
1745
1863
  "edit_caption",
1746
- "refresh_health"
1864
+ "refresh_health",
1865
+ "refresh_readiness"
1747
1866
  ]),
1748
1867
  provider: PublishingProviderSchema.optional(),
1749
1868
  mediaId: import_zod.z.string().min(1).optional()
1750
1869
  });
1751
1870
  var PostReadinessCheckSchema = import_zod.z.object({
1871
+ integrationId: import_zod.z.string().optional(),
1752
1872
  key: import_zod.z.string().min(1),
1753
1873
  id: import_zod.z.enum([
1754
1874
  "connection",
@@ -1775,6 +1895,8 @@ var PostReadinessCheckSchema = import_zod.z.object({
1775
1895
  var PostReadinessSchema = import_zod.z.object({
1776
1896
  checks: import_zod.z.array(PostReadinessCheckSchema),
1777
1897
  accounts: import_zod.z.array(import_zod.z.object({
1898
+ integrationId: import_zod.z.string().optional(),
1899
+ externalAccountId: import_zod.z.string().nullable().optional(),
1778
1900
  provider: PublishingProviderSchema,
1779
1901
  connected: import_zod.z.boolean(),
1780
1902
  username: import_zod.z.string().nullable(),
@@ -1802,7 +1924,9 @@ var PostScheduleInputSchema = import_zod.z.object({
1802
1924
  var PostScheduleExecuteInputSchema = PostScheduleInputSchema.extend({
1803
1925
  confirmationToken: import_zod.z.string().trim().min(1).max(200)
1804
1926
  }).strict();
1927
+ var PublishingAccountReviewListSchema = import_zod.z.array(import_zod.z.object({ destinationId: import_zod.z.string(), integrationId: import_zod.z.string(), provider: PublishingProviderSchema, accountId: import_zod.z.string().nullable(), accountName: import_zod.z.string().nullable(), accountAvatar: import_zod.z.string().nullable(), caption: import_zod.z.string(), tiktokSettings: TikTokPostSettingsSchema.nullable(), youtubeSettings: YouTubePostSettingsSchema.nullable() })).optional();
1805
1928
  var PostSchedulePreviewSchema = import_zod.z.object({
1929
+ accounts: PublishingAccountReviewListSchema,
1806
1930
  operation: import_zod.z.literal("posts.schedule.execute"),
1807
1931
  deliveryMode: import_zod.z.literal("SCHEDULED"),
1808
1932
  post: import_zod.z.object({
@@ -1834,6 +1958,7 @@ var PostSchedulePreviewResponseSchema = successEnvelopeSchema(
1834
1958
  PostSchedulePreviewSchema
1835
1959
  );
1836
1960
  var PostSchedulePendingSchema = import_zod.z.object({
1961
+ destinations: import_zod.z.array(import_zod.z.object({ destinationId: import_zod.z.string().min(1), integrationId: import_zod.z.string().min(1), mutationId: import_zod.z.string().min(1) })).optional(),
1837
1962
  status: import_zod.z.literal("PENDING"),
1838
1963
  postId: import_zod.z.string().min(1),
1839
1964
  provider: import_zod.z.literal("YOUTUBE"),
@@ -1851,12 +1976,12 @@ var PostScheduleExecuteResponseSchema = successEnvelopeSchema(
1851
1976
  PostScheduleExecuteResultSchema
1852
1977
  );
1853
1978
  var PostPublishInputSchema = import_zod.z.object({
1854
- destinations: import_zod.z.array(PublishingProviderSchema).min(1).max(PUBLISHING_PROVIDER_COUNT).refine(
1855
- (destinations) => new Set(destinations).size === destinations.length,
1856
- "destinations must not contain duplicates"
1857
- )
1858
- }).strict();
1859
- var PostPublishExecuteInputSchema = PostPublishInputSchema.extend({
1979
+ destinationIds: import_zod.z.array(import_zod.z.string().trim().min(1).max(200)).min(1).max(75).refine((ids) => new Set(ids).size === ids.length, "Select each destination only once.").optional(),
1980
+ destinations: import_zod.z.array(PublishingProviderSchema).max(PUBLISHING_PROVIDER_COUNT).refine((items) => new Set(items).size === items.length, "Select each network only once.").default([])
1981
+ }).strict().superRefine((input, context) => {
1982
+ if (input.destinationIds ? input.destinations.length > 0 : input.destinations.length === 0) context.addIssue({ code: "custom", message: "Provide destinationIds, or unambiguous legacy destinations, but not both." });
1983
+ });
1984
+ var PostPublishExecuteInputSchema = PostPublishInputSchema.safeExtend({
1860
1985
  confirmationToken: import_zod.z.string().trim().min(1).max(200)
1861
1986
  }).strict();
1862
1987
  var PostPublishPreviewSchema = import_zod.z.object({
@@ -1869,6 +1994,8 @@ var PostPublishPreviewSchema = import_zod.z.object({
1869
1994
  status: PostStatusSchema
1870
1995
  }),
1871
1996
  destinations: PostPublishInputSchema.shape.destinations,
1997
+ destinationIds: import_zod.z.array(import_zod.z.string()).optional(),
1998
+ accounts: PublishingAccountReviewListSchema,
1872
1999
  youtube: import_zod.z.object({
1873
2000
  visibility: YouTubePostSettingsSchema.shape.privacyStatus,
1874
2001
  preparationStartsImmediately: import_zod.z.literal(true),
@@ -1897,6 +2024,11 @@ var CalendarEventSchema = import_zod.z.object({
1897
2024
  }).nullable(),
1898
2025
  thumbnailUrl: import_zod.z.string().url().nullable(),
1899
2026
  destinations: import_zod.z.array(import_zod.z.object({
2027
+ id: import_zod.z.string().optional(),
2028
+ integrationId: import_zod.z.string().nullable().optional(),
2029
+ accountId: import_zod.z.string().nullable().optional(),
2030
+ accountName: import_zod.z.string().nullable().optional(),
2031
+ accountAvatar: import_zod.z.string().nullable().optional(),
1900
2032
  provider: PublishingProviderSchema,
1901
2033
  status: PlatformPostStatusSchema
1902
2034
  }))
@@ -2299,8 +2431,11 @@ var BacklinkContactSchema = import_zod.z.object({
2299
2431
  var BacklinkContactListDataSchema = import_zod.z.object({ items: import_zod.z.array(BacklinkContactSchema).max(50), page: import_zod.z.object({ limit: import_zod.z.number().int().min(1).max(50), nextCursor: SeoCursorSchema.nullable() }).strict() }).strict();
2300
2432
  var BacklinkContactListQuerySchema = import_zod.z.object({ limit: import_zod.z.coerce.number().int().min(1).max(50).default(20), cursor: SeoCursorSchema.optional() }).strict();
2301
2433
  var BacklinkContactListResponseSchema = successEnvelopeSchema(BacklinkContactListDataSchema);
2302
- var PostDeliveryCheckInputSchema = import_zod.z.object({ provider: PublishingProviderSchema }).strict();
2434
+ var PostDeliveryCheckInputSchema = import_zod.z.object({ provider: PublishingProviderSchema, destinationId: import_zod.z.string().min(1).max(200).optional() }).strict();
2303
2435
  var PostDeliveryCheckResultSchema = import_zod.z.object({
2436
+ destinationId: import_zod.z.string().min(1).optional(),
2437
+ integrationId: import_zod.z.string().nullable().optional(),
2438
+ accountId: import_zod.z.string().nullable().optional(),
2304
2439
  postId: import_zod.z.string().min(1),
2305
2440
  provider: PublishingProviderSchema,
2306
2441
  kind: import_zod.z.enum(["PUBLISHED", "SCHEDULED", "PROCESSING", "ACTION_REQUIRED", "UNKNOWN", "BUSY"]),
@@ -2312,6 +2447,7 @@ var PostDeliveryCheckResultSchema = import_zod.z.object({
2312
2447
  });
2313
2448
  var PostDeliveryCheckResponseSchema = successEnvelopeSchema(PostDeliveryCheckResultSchema);
2314
2449
  var PostRecoveryInputSchema = import_zod.z.object({
2450
+ destinationId: import_zod.z.string().min(1).max(200).optional(),
2315
2451
  provider: import_zod.z.literal("YOUTUBE"),
2316
2452
  action: import_zod.z.enum(["ATTACH", "RESUME"]),
2317
2453
  videoId: import_zod.z.string().regex(/^[\w-]{11}$/),
@@ -2328,6 +2464,8 @@ var PostRecoveryExecuteInputSchema = PostRecoveryInputSchema.safeExtend({
2328
2464
  confirmationToken: import_zod.z.string().trim().min(1).max(200)
2329
2465
  });
2330
2466
  var PostRecoveryPreviewSchema = import_zod.z.object({
2467
+ destinationId: import_zod.z.string().min(1).optional(),
2468
+ integrationId: import_zod.z.string().nullable().optional(),
2331
2469
  operation: import_zod.z.literal("posts.recovery.execute"),
2332
2470
  projectId: import_zod.z.string().min(1),
2333
2471
  postId: import_zod.z.string().min(1),
@@ -2346,6 +2484,9 @@ var PostRecoveryPreviewSchema = import_zod.z.object({
2346
2484
  });
2347
2485
  var PostRecoveryPreviewResponseSchema = successEnvelopeSchema(PostRecoveryPreviewSchema);
2348
2486
  var PostRecoveryResultSchema = import_zod.z.object({
2487
+ destinationId: import_zod.z.string().min(1).optional(),
2488
+ integrationId: import_zod.z.string().nullable().optional(),
2489
+ accountId: import_zod.z.string().nullable().optional(),
2349
2490
  postId: import_zod.z.string().min(1),
2350
2491
  provider: import_zod.z.literal("YOUTUBE"),
2351
2492
  action: import_zod.z.enum(["ATTACH", "RESUME"]),
@@ -2502,6 +2643,7 @@ var PostRecoveryResponseSchema = successEnvelopeSchema(PostRecoveryResultSchema)
2502
2643
  BlogMetadataSchema,
2503
2644
  BlogSitemapEntrySchema,
2504
2645
  BlogSlugRedirectSchema,
2646
+ BlueskyDeliveryOptionsSchema,
2505
2647
  CONTRACT_VERSION,
2506
2648
  CalendarEventSchema,
2507
2649
  CalendarListDataSchema,
@@ -2511,9 +2653,20 @@ var PostRecoveryResponseSchema = successEnvelopeSchema(PostRecoveryResultSchema)
2511
2653
  CapabilitiesResponseSchema,
2512
2654
  CapabilityIdSchema,
2513
2655
  CapabilitySchema,
2656
+ DraftAccountDestinationSchema,
2657
+ DraftDeletePreviewResponseSchema,
2658
+ DraftDeletePreviewSchema,
2659
+ DraftDeleteResponseSchema,
2660
+ DraftDeleteResultSchema,
2514
2661
  DraftPostInputSchema,
2515
2662
  DraftPostUpdateInputSchema,
2516
2663
  IntegrationConnectionStatusSchema,
2664
+ IntegrationDisconnectExecuteInputSchema,
2665
+ IntegrationDisconnectInputSchema,
2666
+ IntegrationDisconnectPreviewResponseSchema,
2667
+ IntegrationDisconnectPreviewSchema,
2668
+ IntegrationDisconnectResponseSchema,
2669
+ IntegrationDisconnectResultSchema,
2517
2670
  IntegrationHealthListDataSchema,
2518
2671
  IntegrationHealthListResponseSchema,
2519
2672
  IntegrationHealthSchema,
@@ -2571,6 +2724,12 @@ var PostRecoveryResponseSchema = successEnvelopeSchema(PostRecoveryResultSchema)
2571
2724
  PostRecoveryResponseSchema,
2572
2725
  PostRecoveryResultSchema,
2573
2726
  PostResponseSchema,
2727
+ PostScheduleCancelExecuteInputSchema,
2728
+ PostScheduleCancelInputSchema,
2729
+ PostScheduleCancelPreviewResponseSchema,
2730
+ PostScheduleCancelPreviewSchema,
2731
+ PostScheduleCancelResponseSchema,
2732
+ PostScheduleCancelResultSchema,
2574
2733
  PostScheduleExecuteInputSchema,
2575
2734
  PostScheduleExecuteResponseSchema,
2576
2735
  PostScheduleExecuteResultSchema,