@rolino/contracts 0.3.0 → 0.5.0-beta.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/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // src/index.ts
2
2
  import { z } from "zod";
3
3
  var API_VERSION = "v1";
4
- var CONTRACT_VERSION = "0.14.0";
4
+ var CONTRACT_VERSION = "0.16.0";
5
5
  var RequestMetadataSchema = z.object({
6
6
  requestId: z.string().min(1)
7
7
  });
@@ -15,6 +15,11 @@ var ApiErrorCodeSchema = z.enum([
15
15
  "VALIDATION_ERROR",
16
16
  "CONFLICT",
17
17
  "RATE_LIMITED",
18
+ "DELIVERY_CREDENTIAL_INVALID",
19
+ "DELIVERY_CREDENTIAL_REVOKED",
20
+ "ARTICLE_NOT_PUBLISHED",
21
+ "WEBHOOK_INVALID",
22
+ "WEBHOOK_REPLAYED",
18
23
  "INTERNAL_ERROR"
19
24
  ]);
20
25
  var ApiProblemSchema = z.object({
@@ -25,6 +30,50 @@ var ApiProblemSchema = z.object({
25
30
  }),
26
31
  meta: RequestMetadataSchema
27
32
  });
33
+ var BlogImageSchema = z.object({
34
+ url: z.string().url(),
35
+ altText: z.string().min(1),
36
+ width: z.number().int().positive(),
37
+ height: z.number().int().positive(),
38
+ purpose: z.enum(["FEATURED", "SECTION", "SOCIAL_PREVIEW"])
39
+ });
40
+ var PublishedBlogArticleSchema = z.object({
41
+ id: z.string().min(1),
42
+ revisionId: z.string().min(1),
43
+ revisionNumber: z.number().int().positive(),
44
+ slug: z.string().min(1),
45
+ title: z.string().min(1),
46
+ description: z.string().nullable(),
47
+ excerpt: z.string().nullable(),
48
+ tags: z.array(z.string()),
49
+ author: z.string().min(1),
50
+ language: z.string().min(1),
51
+ markdown: z.string(),
52
+ contentBlocks: z.array(z.unknown()),
53
+ canonicalPath: z.string().startsWith("/"),
54
+ publicUrl: z.string().url(),
55
+ publishedAt: z.string().datetime(),
56
+ updatedAt: z.string().datetime(),
57
+ images: z.array(BlogImageSchema)
58
+ });
59
+ var BlogArticleListSchema = z.object({
60
+ articles: z.array(PublishedBlogArticleSchema.omit({ markdown: true, contentBlocks: true }))
61
+ });
62
+ var BlogMetadataSchema = z.object({
63
+ siteId: z.string().min(1),
64
+ name: z.string().min(1),
65
+ origin: z.string().url(),
66
+ blogBasePath: z.string().startsWith("/"),
67
+ language: z.string().min(1),
68
+ updatedAt: z.string().datetime().nullable()
69
+ });
70
+ var BlogSitemapEntrySchema = z.object({
71
+ url: z.string().url(),
72
+ lastModified: z.string().datetime()
73
+ });
74
+ var BlogSlugRedirectSchema = z.object({
75
+ redirect: z.object({ from: z.string().min(1), to: z.string().min(1), permanent: z.literal(true) })
76
+ });
28
77
  function successEnvelopeSchema(data) {
29
78
  return z.object({
30
79
  data,
@@ -40,8 +89,245 @@ var CapabilityIdSchema = z.enum([
40
89
  "posts:schedule",
41
90
  "posts:publish",
42
91
  "integrations:read",
43
- "calendar:read"
92
+ "calendar:read",
93
+ "seo:read",
94
+ "blog:read",
95
+ "blog:write",
96
+ "blog:manage",
97
+ "blog:publish"
44
98
  ]);
99
+ var AgentBlogPlanSchema = z.object({
100
+ id: z.string().min(1),
101
+ state: z.string().min(1),
102
+ windowStart: z.string().datetime(),
103
+ windowEnd: z.string().datetime(),
104
+ cadence: z.object({ weekdays: z.array(z.number().int().min(0).max(6)) }),
105
+ activeRevisionId: z.string().nullable(),
106
+ itemCount: z.number().int().nonnegative()
107
+ });
108
+ var AgentBlogArticleSchema = z.object({
109
+ id: z.string().min(1),
110
+ state: z.string().min(1),
111
+ title: z.string().min(1),
112
+ slug: z.string().min(1),
113
+ currentDraftId: z.string().nullable(),
114
+ approvedRevisionId: z.string().nullable(),
115
+ publishedRevisionId: z.string().nullable(),
116
+ scheduledPublishAt: z.string().datetime().nullable(),
117
+ updatedAt: z.string().datetime()
118
+ });
119
+ var AgentBlogArticleDetailSchema = AgentBlogArticleSchema.extend({
120
+ draft: z.object({
121
+ id: z.string().min(1),
122
+ version: z.number().int().positive(),
123
+ title: z.string(),
124
+ slug: z.string(),
125
+ description: z.string().nullable(),
126
+ excerpt: z.string().nullable(),
127
+ canonicalPath: z.string(),
128
+ tags: z.array(z.string()),
129
+ author: z.string(),
130
+ language: z.string(),
131
+ markdown: z.string(),
132
+ callToAction: z.unknown().nullable(),
133
+ internalLinks: z.unknown()
134
+ }).nullable(),
135
+ revisions: z.array(z.object({ id: z.string().min(1), revisionNumber: z.number().int().positive(), contentHash: z.string().min(1), approvedAt: z.string().datetime().nullable(), createdAt: z.string().datetime() }))
136
+ });
137
+ var AgentBlogJobSchema = z.object({
138
+ id: z.string().min(1),
139
+ type: z.string().min(1),
140
+ state: z.string().min(1),
141
+ attemptCount: z.number().int().nonnegative(),
142
+ availableAt: z.string().datetime(),
143
+ startedAt: z.string().datetime().nullable(),
144
+ completedAt: z.string().datetime().nullable(),
145
+ lastErrorCode: z.string().nullable(),
146
+ lastErrorMessage: z.string().nullable()
147
+ });
148
+ var AgentBlogDraftUpdateSchema = z.object({
149
+ version: z.number().int().positive(),
150
+ title: z.string().trim().min(1).max(200),
151
+ slug: z.string().trim().min(1).max(160),
152
+ description: z.string().trim().max(320).nullable(),
153
+ excerpt: z.string().trim().max(500).nullable(),
154
+ canonicalPath: z.string().startsWith("/"),
155
+ tags: z.array(z.string().trim().min(1).max(80)).max(30),
156
+ author: z.string().trim().min(1).max(160),
157
+ language: z.string().trim().min(2).max(20),
158
+ markdown: z.string().max(2e5),
159
+ callToAction: z.object({ label: z.string().trim().min(1).max(160), pageId: z.string().min(1).nullable() }).strict().nullable(),
160
+ internalLinks: z.array(z.object({ pageId: z.string().min(1), anchorText: z.string().trim().min(1).max(200) }).strict()).max(20),
161
+ scheduledPublishAt: z.string().datetime().nullable().optional()
162
+ });
163
+ var AgentBlogGenerateRequestSchema = z.object({ idempotencyKey: z.string().trim().min(8).max(200) });
164
+ var AgentBlogDestinationSelectionSchema = z.array(z.string().min(1)).min(1).max(20);
165
+ var AgentBlogPublishPreviewRequestSchema = z.object({ revisionId: z.string().min(1), destinationIds: AgentBlogDestinationSelectionSchema.optional() });
166
+ var AgentBlogPublishExecuteRequestSchema = z.object({ revisionId: z.string().min(1), destinationIds: AgentBlogDestinationSelectionSchema.optional(), confirmationToken: z.string().min(1), idempotencyKey: z.string().trim().min(8).max(200) });
167
+ var AgentBlogPublishingProviderSchema = z.object({ key: z.string(), name: z.string(), description: z.string(), mode: z.string(), rollout: z.enum(["PREVIEW", "VISIBLE"]), capabilities: z.array(z.string()), authorizationStrategy: z.string(), requiresResourceDiscovery: z.boolean(), requiresFieldMapping: z.boolean(), officialDocumentationUrl: z.string().url() }).strict();
168
+ var AgentBlogPublishingDestinationSchema = z.object({ id: z.string(), name: z.string(), providerKey: z.string(), mode: z.string(), status: z.string(), isPrimary: z.boolean(), enabled: z.boolean(), externalSiteName: z.string().nullable(), externalSiteUrl: z.string().url().nullable(), lastTestedAt: z.string().datetime().nullable(), lastSucceededAt: z.string().datetime().nullable(), lastErrorCode: z.string().nullable() }).strict();
169
+ var AgentBlogDeliveryAttemptSchema = z.object({ id: z.string(), articleId: z.string().nullable(), revisionId: z.string().nullable(), destinationId: z.string().nullable(), destinationName: z.string().nullable(), operation: z.string().nullable(), state: z.string(), attemptCount: z.number().int().nonnegative(), errorCode: z.string().nullable(), retryAt: z.string().datetime().nullable(), remoteUrl: z.string().url().nullable(), createdAt: z.string().datetime(), deliveredAt: z.string().datetime().nullable() }).strict();
170
+ var AgentBlogPublishPreviewSchema = z.object({ articleId: z.string(), revisionId: z.string(), contentHash: z.string(), title: z.string(), slug: z.string(), publicUrl: z.string().url(), destinations: z.array(AgentBlogPublishingDestinationSchema), confirmation: z.object({ token: z.string(), expiresAt: z.string().datetime() }) });
171
+ var AgentBlogReadinessSchema = z.enum([
172
+ "MISSING",
173
+ "NOT_STARTED",
174
+ "QUEUED",
175
+ "RUNNING",
176
+ "READY",
177
+ "USED",
178
+ "CONFIGURED",
179
+ "VERIFIED",
180
+ "NEEDS_ATTENTION"
181
+ ]);
182
+ var AgentBlogSetupStatusSchema = z.object({
183
+ projectId: z.string().min(1),
184
+ brandName: z.string().min(1),
185
+ brandWebsite: z.enum(["MISSING", "READY"]),
186
+ websiteOrigin: z.string().url().nullable(),
187
+ siteId: z.string().min(1).nullable(),
188
+ blogBasePath: z.string().startsWith("/").nullable(),
189
+ siteImport: AgentBlogReadinessSchema,
190
+ activeJobId: z.string().min(1).nullable(),
191
+ plan: AgentBlogReadinessSchema,
192
+ activePlanId: z.string().min(1).nullable(),
193
+ deliveryCredential: AgentBlogReadinessSchema,
194
+ revalidation: AgentBlogReadinessSchema,
195
+ nextAction: z.enum([
196
+ "ADD_WEBSITE",
197
+ "IMPORT_SITE",
198
+ "WAIT_FOR_JOB",
199
+ "CREATE_PLAN",
200
+ "REVIEW_PLAN",
201
+ "CONFIGURE_DELIVERY",
202
+ "TEST_CONNECTION",
203
+ "READY"
204
+ ])
205
+ }).strict();
206
+ var AgentBlogCadenceInputSchema = z.object({
207
+ startsOn: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
208
+ weekdays: z.array(z.number().int().min(0).max(6)).min(1).max(7),
209
+ timeZone: z.string().trim().min(1).max(100)
210
+ }).strict().superRefine(({ weekdays }, context) => {
211
+ if (new Set(weekdays).size !== weekdays.length) {
212
+ context.addIssue({ code: "custom", path: ["weekdays"], message: "Weekdays must be unique." });
213
+ }
214
+ });
215
+ var AgentBlogIdempotentRequestSchema = z.object({
216
+ idempotencyKey: z.string().trim().min(8).max(200)
217
+ }).strict();
218
+ var AgentBlogPlanCreateRequestSchema = AgentBlogCadenceInputSchema.and(AgentBlogIdempotentRequestSchema);
219
+ var AgentBlogPlanRetryRequestSchema = AgentBlogIdempotentRequestSchema;
220
+ var AgentBlogPlanItemSchema = z.object({
221
+ id: z.string().min(1),
222
+ planId: z.string().min(1),
223
+ planRevisionId: z.string().min(1),
224
+ version: z.number().int().positive(),
225
+ scheduledLocalDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
226
+ title: z.string().min(1),
227
+ recommendedSlug: z.string().min(1),
228
+ state: z.string().min(1),
229
+ workType: z.string().min(1),
230
+ format: z.string().min(1),
231
+ primaryQuery: z.string().nullable(),
232
+ searchIntent: z.string().nullable(),
233
+ summary: z.string(),
234
+ outline: z.unknown(),
235
+ selectionReason: z.string().min(1),
236
+ evidenceClassification: z.enum(["OBSERVED", "MIXED", "HYPOTHESIS"]),
237
+ evidence: z.unknown(),
238
+ displayMetrics: z.unknown(),
239
+ overlapExplanation: z.string().nullable(),
240
+ existingArticleComparison: z.string().nullable(),
241
+ recommendedLinks: z.unknown(),
242
+ targetConversionPage: z.string().nullable(),
243
+ articleId: z.string().min(1).nullable()
244
+ }).strict();
245
+ var AgentBlogPlanItemStateRequestSchema = z.object({
246
+ state: z.enum(["ACCEPTED", "DISMISSED"]),
247
+ expectedState: z.string().min(1),
248
+ expectedVersion: z.number().int().positive(),
249
+ idempotencyKey: z.string().trim().min(8).max(200)
250
+ }).strict();
251
+ var AgentBlogArticleCreateRequestSchema = z.object({
252
+ expectedState: z.literal("ACCEPTED"),
253
+ expectedVersion: z.number().int().positive(),
254
+ idempotencyKey: z.string().trim().min(8).max(200)
255
+ }).strict();
256
+ var AgentBlogConnectionStatusSchema = z.object({
257
+ projectId: z.string().min(1),
258
+ siteId: z.string().min(1),
259
+ origin: z.string().url(),
260
+ endpoint: z.string().url().nullable(),
261
+ deliveryCredential: z.enum(["MISSING", "READY", "USED"]),
262
+ activeCredentialId: z.string().min(1).nullable(),
263
+ credentialLastUsedAt: z.string().datetime().nullable(),
264
+ revalidation: z.enum(["MISSING", "CONFIGURED", "VERIFIED", "NEEDS_ATTENTION"]),
265
+ revalidationLastTestedAt: z.string().datetime().nullable(),
266
+ revalidationLastSucceededAt: z.string().datetime().nullable(),
267
+ revalidationLastErrorCode: z.string().nullable()
268
+ }).strict();
269
+ var AgentBlogConnectionRequestSchema = z.object({
270
+ endpoint: z.string().url().nullable(),
271
+ credentialAction: z.enum(["KEEP", "CREATE", "ROTATE", "REVOKE"]),
272
+ credentialId: z.string().min(1).nullable(),
273
+ secretAction: z.enum(["KEEP", "CREATE", "ROTATE"])
274
+ }).strict();
275
+ var AgentBlogConnectionPreviewRequestSchema = AgentBlogConnectionRequestSchema;
276
+ var AgentBlogConnectionExecuteRequestSchema = AgentBlogConnectionRequestSchema.extend({
277
+ confirmationToken: z.string().min(1).max(300),
278
+ idempotencyKey: z.string().trim().min(8).max(200)
279
+ }).strict();
280
+ var AgentBlogConnectionPreviewSchema = z.object({
281
+ projectId: z.string().min(1),
282
+ siteId: z.string().min(1),
283
+ siteName: z.string().min(1),
284
+ origin: z.string().url(),
285
+ endpoint: z.string().url().nullable(),
286
+ credentialAction: z.enum(["KEEP", "CREATE", "ROTATE", "REVOKE"]),
287
+ secretAction: z.enum(["KEEP", "CREATE", "ROTATE"]),
288
+ effect: z.string().min(1),
289
+ confirmation: z.object({ token: z.string().min(1), expiresAt: z.string().datetime() }).strict()
290
+ }).strict();
291
+ var AgentBlogConnectionExecuteSchema = z.object({
292
+ projectId: z.string().min(1),
293
+ siteId: z.string().min(1),
294
+ completed: z.literal(true),
295
+ secretDelivered: z.boolean(),
296
+ alreadyDelivered: z.boolean(),
297
+ deliveryToken: z.string().min(1).optional(),
298
+ webhookSecret: z.string().min(1).optional(),
299
+ message: z.string().min(1)
300
+ }).strict();
301
+ var AgentBlogRevalidationTestRequestSchema = AgentBlogIdempotentRequestSchema;
302
+ var AgentBlogRevalidationTestSchema = z.object({
303
+ status: z.enum(["VERIFIED", "NEEDS_ATTENTION"]),
304
+ testedAt: z.string().datetime(),
305
+ errorCode: z.string().nullable()
306
+ }).strict();
307
+ var AgentBlogPlanListResponseSchema = successEnvelopeSchema(z.object({ plans: z.array(AgentBlogPlanSchema) }));
308
+ var AgentBlogArticleListResponseSchema = successEnvelopeSchema(z.object({ articles: z.array(AgentBlogArticleSchema) }));
309
+ var AgentBlogArticleResponseSchema = successEnvelopeSchema(AgentBlogArticleDetailSchema);
310
+ var AgentBlogJobResponseSchema = successEnvelopeSchema(AgentBlogJobSchema);
311
+ var AgentBlogPublishPreviewResponseSchema = successEnvelopeSchema(AgentBlogPublishPreviewSchema);
312
+ var AgentBlogPublishExecuteResponseSchema = successEnvelopeSchema(z.object({ publicationId: z.string(), articleId: z.string(), revisionId: z.string(), publicUrl: z.string().url(), publishedAt: z.string().datetime() }));
313
+ var AgentBlogPublishingProviderListResponseSchema = successEnvelopeSchema(z.object({ providers: z.array(AgentBlogPublishingProviderSchema) }).strict());
314
+ var AgentBlogPublishingDestinationListResponseSchema = successEnvelopeSchema(z.object({ destinations: z.array(AgentBlogPublishingDestinationSchema) }).strict());
315
+ var AgentBlogDeliveryAttemptListResponseSchema = successEnvelopeSchema(z.object({ deliveries: z.array(AgentBlogDeliveryAttemptSchema) }).strict());
316
+ var AgentBlogSetupStatusResponseSchema = successEnvelopeSchema(AgentBlogSetupStatusSchema);
317
+ var AgentBlogPlanItemsResponseSchema = successEnvelopeSchema(z.object({ items: z.array(AgentBlogPlanItemSchema) }).strict());
318
+ var AgentBlogPlanItemResponseSchema = successEnvelopeSchema(AgentBlogPlanItemSchema);
319
+ var AgentBlogPlanQueuedResponseSchema = successEnvelopeSchema(z.object({
320
+ planId: z.string().min(1),
321
+ job: AgentBlogJobSchema
322
+ }).strict());
323
+ var AgentBlogArticleQueuedResponseSchema = successEnvelopeSchema(z.object({
324
+ articleId: z.string().min(1),
325
+ job: AgentBlogJobSchema.nullable()
326
+ }).strict());
327
+ var AgentBlogConnectionStatusResponseSchema = successEnvelopeSchema(AgentBlogConnectionStatusSchema);
328
+ var AgentBlogConnectionPreviewResponseSchema = successEnvelopeSchema(AgentBlogConnectionPreviewSchema);
329
+ var AgentBlogConnectionExecuteResponseSchema = successEnvelopeSchema(AgentBlogConnectionExecuteSchema);
330
+ var AgentBlogRevalidationTestResponseSchema = successEnvelopeSchema(AgentBlogRevalidationTestSchema);
45
331
  var CapabilitySchema = z.object({
46
332
  id: CapabilityIdSchema,
47
333
  available: z.boolean(),
@@ -254,9 +540,24 @@ var PublishingProviderSchema = z.enum([
254
540
  "LINKEDIN"
255
541
  ]);
256
542
  var PUBLISHING_PROVIDER_COUNT = PublishingProviderSchema.options.length;
543
+ var PostDeliveryModeSchema = z.enum(["IMMEDIATE", "SCHEDULED"]);
544
+ var PostDestinationStageSchema = z.enum([
545
+ "DRAFT",
546
+ "QUEUED",
547
+ "UPLOADING",
548
+ "PROCESSING",
549
+ "CONFIRMING_SCHEDULE",
550
+ "SCHEDULED",
551
+ "PUBLISHING",
552
+ "PUBLISHED",
553
+ "ACTION_REQUIRED",
554
+ "FAILED"
555
+ ]);
257
556
  var PostDestinationSchema = z.object({
258
557
  provider: PublishingProviderSchema,
259
558
  status: PlatformPostStatusSchema,
559
+ deliveryMode: PostDeliveryModeSchema,
560
+ stage: PostDestinationStageSchema,
260
561
  captionOverride: z.string().nullable(),
261
562
  scheduledAt: z.string().datetime().nullable(),
262
563
  publishedAt: z.string().datetime().nullable(),
@@ -603,13 +904,21 @@ var LinkedInDeliveryOptionsSchema = z.object({
603
904
  displayName: z.string().nullable(),
604
905
  avatarUrl: z.string().url().nullable()
605
906
  }),
606
- supportedPostTypes: z.array(z.enum(["TEXT", "SINGLE_IMAGE", "MULTI_IMAGE"])).length(3),
907
+ supportedPostTypes: z.array(z.enum(["TEXT", "SINGLE_IMAGE", "MULTI_IMAGE", "VIDEO"])).length(4),
607
908
  image: z.object({
608
909
  maxItems: z.literal(10),
609
910
  mimeTypes: z.tuple([z.literal("image/jpeg"), z.literal("image/png")]),
610
911
  maxPixelsExclusive: z.literal(36152320),
611
912
  maxBytes: z.literal(26214400)
612
913
  }),
914
+ video: z.object({
915
+ maxItems: z.literal(1),
916
+ mimeTypes: z.tuple([z.literal("video/mp4")]),
917
+ minBytes: z.literal(76800),
918
+ maxBytes: z.literal(524288e3),
919
+ minDurationMs: z.literal(3e3),
920
+ maxDurationMs: z.literal(18e5)
921
+ }),
613
922
  health: z.object({
614
923
  status: ProviderHealthStatusSchema,
615
924
  code: z.string().min(1),
@@ -635,11 +944,13 @@ var ReadinessActionSchema = z.object({
635
944
  kind: z.enum([
636
945
  "reconnect",
637
946
  "replace_media",
947
+ "adjust_media",
638
948
  "review_settings",
639
949
  "edit_caption",
640
950
  "refresh_health"
641
951
  ]),
642
- provider: PublishingProviderSchema.optional()
952
+ provider: PublishingProviderSchema.optional(),
953
+ mediaId: z.string().min(1).optional()
643
954
  });
644
955
  var PostReadinessCheckSchema = z.object({
645
956
  key: z.string().min(1),
@@ -697,6 +1008,7 @@ var PostScheduleExecuteInputSchema = PostScheduleInputSchema.extend({
697
1008
  }).strict();
698
1009
  var PostSchedulePreviewSchema = z.object({
699
1010
  operation: z.literal("posts.schedule.execute"),
1011
+ deliveryMode: z.literal("SCHEDULED"),
700
1012
  post: z.object({
701
1013
  id: z.string().min(1),
702
1014
  projectId: z.string().min(1),
@@ -705,6 +1017,12 @@ var PostSchedulePreviewSchema = z.object({
705
1017
  }),
706
1018
  schedule: PostScheduleInputSchema,
707
1019
  destinations: z.array(PublishingProviderSchema).min(1).max(PUBLISHING_PROVIDER_COUNT),
1020
+ youtube: z.object({
1021
+ uploadVisibility: z.literal("PRIVATE"),
1022
+ publishVisibility: z.literal("PUBLIC"),
1023
+ preparationStartsImmediately: z.literal(true),
1024
+ confirmationMeaning: z.string().min(1)
1025
+ }).nullable().optional(),
708
1026
  providerReconciliation: z.object({
709
1027
  provider: z.literal("YOUTUBE"),
710
1028
  required: z.boolean(),
@@ -725,6 +1043,8 @@ var PostSchedulePendingSchema = z.object({
725
1043
  provider: z.literal("YOUTUBE"),
726
1044
  mutationId: z.string().min(1),
727
1045
  operation: z.enum(["SCHEDULE", "CANCEL"]),
1046
+ phase: z.literal("REMOTE_SCHEDULE_CONFIRMATION"),
1047
+ videoUploaded: z.literal(true),
728
1048
  message: z.string().min(1)
729
1049
  });
730
1050
  var PostScheduleExecuteResultSchema = z.union([
@@ -745,6 +1065,7 @@ var PostPublishExecuteInputSchema = PostPublishInputSchema.extend({
745
1065
  }).strict();
746
1066
  var PostPublishPreviewSchema = z.object({
747
1067
  operation: z.literal("posts.publish.execute"),
1068
+ deliveryMode: z.literal("IMMEDIATE"),
748
1069
  post: z.object({
749
1070
  id: z.string().min(1),
750
1071
  projectId: z.string().min(1),
@@ -752,6 +1073,11 @@ var PostPublishPreviewSchema = z.object({
752
1073
  status: PostStatusSchema
753
1074
  }),
754
1075
  destinations: PostPublishInputSchema.shape.destinations,
1076
+ youtube: z.object({
1077
+ visibility: YouTubePostSettingsSchema.shape.privacyStatus,
1078
+ preparationStartsImmediately: z.literal(true),
1079
+ createsSchedule: z.literal(false)
1080
+ }).nullable().optional(),
755
1081
  readiness: PostReadinessSchema,
756
1082
  confirmation: z.object({
757
1083
  token: z.string().min(1),
@@ -824,14 +1150,330 @@ var CalendarListDataSchema = z.object({
824
1150
  var CalendarListResponseSchema = successEnvelopeSchema(
825
1151
  CalendarListDataSchema
826
1152
  );
1153
+ var SeoEntityIdSchema = z.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/);
1154
+ var SeoCursorSchema = z.string().min(1).max(512).regex(/^[A-Za-z0-9_-]+$/);
1155
+ var SeoOpportunityKindSchema = z.enum([
1156
+ "SEARCH_TOPIC_CTR",
1157
+ "SEARCH_TOPIC_REFRESH",
1158
+ "SEARCH_TOPIC_NEW_ARTICLE",
1159
+ "SEARCH_TOPIC_CONSOLIDATE",
1160
+ "SEARCH_TOPIC_CLUSTER",
1161
+ "COMPETITOR_KEYWORD_GAP",
1162
+ "COMPETITOR_RANK_GAIN",
1163
+ "COMPETITOR_RANK_DROP",
1164
+ "COMPETITOR_SHARED_GAP",
1165
+ "SEO_VALIDATED_COMPETITOR_GAP"
1166
+ ]);
1167
+ var SeoExpectedImpactSchema = z.enum(["HIGH", "MEDIUM", "LOW"]);
1168
+ var SeoEvidenceProvenanceSchema = z.enum([
1169
+ "CUSTOMER_SEARCH_DATA",
1170
+ "MARKET_ESTIMATE",
1171
+ "ROLINO_ANALYSIS"
1172
+ ]);
1173
+ var SeoEvidenceSchema = z.object({
1174
+ title: z.string().min(1).max(180),
1175
+ summary: z.string().min(1).max(500),
1176
+ sourceUrl: z.string().url().max(2048).nullable(),
1177
+ provenance: SeoEvidenceProvenanceSchema,
1178
+ observedAt: z.string().datetime(),
1179
+ periodStart: z.string().datetime().nullable(),
1180
+ periodEnd: z.string().datetime().nullable(),
1181
+ metrics: z.record(
1182
+ z.string().regex(/^[A-Za-z][A-Za-z0-9]{0,39}$/),
1183
+ z.number().finite()
1184
+ ).refine((metrics) => Object.keys(metrics).length <= 20, {
1185
+ message: "SEO evidence can contain at most 20 metrics."
1186
+ }),
1187
+ estimated: z.boolean(),
1188
+ topRowsOnly: z.boolean(),
1189
+ coverageNote: z.string().max(500).nullable()
1190
+ }).strict();
1191
+ var SeoActionDecisionSchema = z.enum(["READY", "NEEDS_REVIEW", "REJECTED"]);
1192
+ var SeoSearchIntentSchema = z.enum(["INFORMATIONAL", "COMMERCIAL", "NAVIGATIONAL", "BRANDED", "SUSPICIOUS"]);
1193
+ var SeoContentTypeSchema = z.enum(["GUIDE", "TUTORIAL", "COMPARISON_PAGE", "LANDING_PAGE", "CONTENT_REFRESH"]);
1194
+ var SeoActionPlanSchema = z.object({
1195
+ version: z.number().int().positive(),
1196
+ decision: SeoActionDecisionSchema,
1197
+ decisionReason: z.string().min(1).max(500),
1198
+ searchIntent: SeoSearchIntentSchema,
1199
+ primaryKeyword: z.string().min(1).max(300),
1200
+ supportingKeywords: z.array(z.string().min(1).max(300)).max(12),
1201
+ questions: z.array(z.string().min(1).max(300)).max(8),
1202
+ contentType: SeoContentTypeSchema,
1203
+ suggestedTitle: z.string().min(1).max(180),
1204
+ angle: z.string().max(500),
1205
+ targetReader: z.string().min(1).max(500),
1206
+ pageGoal: z.string().max(500),
1207
+ outline: z.array(z.object({
1208
+ heading: z.string().min(1).max(180),
1209
+ purpose: z.string().min(1).max(500)
1210
+ }).strict()).max(10),
1211
+ rolinoConnection: z.string().max(600),
1212
+ cta: z.string().max(300),
1213
+ competitorPages: z.array(z.object({
1214
+ domain: z.string().min(1).max(253),
1215
+ url: z.string().url().nullable(),
1216
+ keyword: z.string().min(1).max(300),
1217
+ rank: z.number().min(1).max(1e3).nullable()
1218
+ }).strict()).max(8),
1219
+ existingPage: z.object({
1220
+ title: z.string().min(1).max(180),
1221
+ url: z.string().url()
1222
+ }).strict().nullable(),
1223
+ warnings: z.array(z.string().min(1).max(500)).max(8),
1224
+ researchTasks: z.array(z.string().min(1).max(500)).max(8),
1225
+ cluster: z.object({
1226
+ competitorDomains: z.array(z.string().min(1).max(253)).max(3),
1227
+ bestRank: z.number().min(1).max(1e3).nullable(),
1228
+ estimatedDemand: z.number().min(0).nullable(),
1229
+ firstPartyValidated: z.boolean(),
1230
+ relevanceScore: z.number().min(0).max(1),
1231
+ coverage: z.string().max(500)
1232
+ }).strict()
1233
+ }).strict();
1234
+ var SeoTaskDecisionSchema = z.enum(["READY", "NEEDS_REVIEW", "REJECTED"]);
1235
+ var SeoTaskFormatSchema = z.enum([
1236
+ "BLOG_ARTICLE",
1237
+ "PRODUCT_LANDING_PAGE",
1238
+ "COMPARISON_PAGE",
1239
+ "EXISTING_PAGE_REFRESH",
1240
+ "YOUTUBE_PRODUCTION_PACKAGE",
1241
+ "SOCIAL_CAMPAIGN",
1242
+ "LINK_OUTREACH_TASK",
1243
+ "RESEARCH_TASK"
1244
+ ]);
1245
+ var SeoConfidenceValueSchema = z.object({
1246
+ score: z.number().int().min(0).max(100).nullable(),
1247
+ level: z.enum(["HIGH", "MEDIUM", "LOW", "UNCONFIRMED"]),
1248
+ label: z.string().min(1).max(120),
1249
+ explanation: z.string().min(1).max(500)
1250
+ }).strict();
1251
+ var SeoDecisionConfidenceSchema = z.object({
1252
+ topicRelevance: SeoConfidenceValueSchema,
1253
+ actionReadiness: SeoConfidenceValueSchema
1254
+ }).strict();
1255
+ var SeoTaskEvidenceSummarySchema = z.object({
1256
+ title: z.string().min(1).max(180),
1257
+ summary: z.string().min(1).max(500),
1258
+ provenance: SeoEvidenceProvenanceSchema,
1259
+ observedAt: z.string().datetime(),
1260
+ sourceUrl: z.string().url().max(2048).nullable()
1261
+ }).strict();
1262
+ var SeoAgentTaskSchema = z.object({
1263
+ schemaVersion: z.number().int().positive(),
1264
+ projectId: SeoEntityIdSchema.nullable(),
1265
+ opportunityId: SeoEntityIdSchema.nullable(),
1266
+ legacy: z.boolean(),
1267
+ legacyLabel: z.string().max(500).nullable(),
1268
+ decision: SeoTaskDecisionSchema,
1269
+ decisionReason: z.string().min(1).max(700),
1270
+ objective: z.string().min(1).max(700),
1271
+ primaryFormat: SeoTaskFormatSchema,
1272
+ supportingFormats: z.array(SeoTaskFormatSchema).max(4),
1273
+ formatOptions: z.array(SeoTaskFormatSchema.exclude(["RESEARCH_TASK"])).max(7),
1274
+ confidence: SeoDecisionConfidenceSchema,
1275
+ target: z.object({
1276
+ primaryKeyword: z.string().min(1).max(300),
1277
+ supportingKeywords: z.array(z.string().min(1).max(300)).max(12),
1278
+ searchIntent: SeoSearchIntentSchema,
1279
+ audience: z.string().min(1).max(500),
1280
+ angle: z.string().max(600)
1281
+ }).strict(),
1282
+ suggestedTitles: z.array(z.string().min(1).max(180)).max(3),
1283
+ outline: z.array(z.object({
1284
+ heading: z.string().min(1).max(180),
1285
+ purpose: z.string().min(1).max(600)
1286
+ }).strict()).max(12),
1287
+ researchTasks: z.array(z.string().min(1).max(600)).max(10),
1288
+ competitorPagesToInspect: z.array(z.object({
1289
+ domain: z.string().min(1).max(253),
1290
+ url: z.string().url().max(2048).nullable(),
1291
+ keyword: z.string().min(1).max(300),
1292
+ rank: z.number().int().min(1).max(1e3).nullable()
1293
+ }).strict()).max(8),
1294
+ productFactsToVerify: z.array(z.string().min(1).max(600)).max(8),
1295
+ claimsNotToInvent: z.array(z.string().min(1).max(600)).max(8),
1296
+ deliverables: z.array(z.object({
1297
+ name: z.string().min(1).max(180),
1298
+ requirements: z.array(z.string().min(1).max(600)).min(1).max(8)
1299
+ }).strict()).min(1).max(12),
1300
+ callToAction: z.string().max(400),
1301
+ destination: z.string().min(1).max(700),
1302
+ successMetric: z.object({
1303
+ name: z.string().min(1).max(180),
1304
+ target: z.string().min(1).max(600),
1305
+ measurementWindow: z.string().min(1).max(300)
1306
+ }).strict(),
1307
+ evidenceSummary: z.array(SeoTaskEvidenceSummarySchema).max(5),
1308
+ limitations: z.array(z.string().min(1).max(600)).max(10),
1309
+ nextStep: z.string().min(1).max(700),
1310
+ youtubePackageRequirements: z.object({
1311
+ subject: z.string().min(1).max(300),
1312
+ targetViewer: z.string().min(1).max(500),
1313
+ objective: z.string().min(1).max(700),
1314
+ titleOptions: z.number().int().min(1).max(10),
1315
+ hook: z.string().min(1).max(600),
1316
+ draftScript: z.string().min(1).max(600),
1317
+ sceneList: z.string().min(1).max(600),
1318
+ onScreenText: z.string().min(1).max(600),
1319
+ thumbnailConcept: z.string().min(1).max(600),
1320
+ thumbnailText: z.string().min(1).max(300),
1321
+ description: z.string().min(1).max(600),
1322
+ chapters: z.string().min(1).max(600),
1323
+ callToAction: z.string().max(400),
1324
+ supportingSocialPosts: z.number().int().min(0).max(10)
1325
+ }).strict().nullable(),
1326
+ imageBriefs: z.array(z.object({
1327
+ concept: z.string().min(1).max(600),
1328
+ brief: z.string().min(1).max(800),
1329
+ altText: z.string().min(1).max(500),
1330
+ prompt: z.string().min(1).max(1e3)
1331
+ }).strict()).max(4)
1332
+ }).strict();
1333
+ var SeoOpportunityBriefSchema = z.object({
1334
+ kind: SeoOpportunityKindSchema,
1335
+ title: z.string().min(1).max(180),
1336
+ summary: z.string().min(1).max(600),
1337
+ score: z.number().int().min(0).max(100),
1338
+ confidence: SeoDecisionConfidenceSchema,
1339
+ expectedImpact: SeoExpectedImpactSchema,
1340
+ recommendedAction: z.string().min(1).max(300),
1341
+ actionPlan: SeoActionPlanSchema,
1342
+ task: SeoAgentTaskSchema,
1343
+ evidence: z.array(SeoEvidenceSchema).max(5),
1344
+ brief: z.string().min(1).max(12e3)
1345
+ }).strict();
1346
+ var SeoOpportunitySchema = SeoOpportunityBriefSchema.extend({
1347
+ id: SeoEntityIdSchema,
1348
+ projectId: SeoEntityIdSchema,
1349
+ lastDetectedAt: z.string().datetime(),
1350
+ stale: z.boolean()
1351
+ }).strict();
1352
+ var SeoOpportunityListQuerySchema = z.object({
1353
+ limit: z.coerce.number().int().min(1).max(50).default(20),
1354
+ cursor: SeoCursorSchema.optional(),
1355
+ kind: SeoOpportunityKindSchema.optional(),
1356
+ expectedImpact: SeoExpectedImpactSchema.optional()
1357
+ }).strict();
1358
+ var SeoPageSchema = z.object({
1359
+ limit: z.number().int().min(1).max(50),
1360
+ nextCursor: SeoCursorSchema.nullable()
1361
+ }).strict();
1362
+ var SeoOpportunityListDataSchema = z.object({
1363
+ items: z.array(SeoOpportunitySchema).max(50),
1364
+ page: SeoPageSchema
1365
+ }).strict();
1366
+ var SeoOpportunityListResponseSchema = successEnvelopeSchema(
1367
+ SeoOpportunityListDataSchema
1368
+ );
1369
+ var SeoOpportunityResponseSchema = successEnvelopeSchema(
1370
+ SeoOpportunitySchema
1371
+ );
1372
+ var SeoReportCompletenessSchema = z.enum(["COMPLETE", "PARTIAL"]);
1373
+ var SeoReportTriggerSchema = z.enum(["SCHEDULED", "MANUAL"]);
1374
+ var SeoReportSummarySchema = z.object({
1375
+ id: SeoEntityIdSchema,
1376
+ projectId: SeoEntityIdSchema,
1377
+ periodStart: z.string().datetime(),
1378
+ periodEnd: z.string().datetime(),
1379
+ timeZone: z.string().min(1).max(100),
1380
+ deliveryDay: z.number().int().min(1).max(7),
1381
+ completeness: SeoReportCompletenessSchema,
1382
+ trigger: SeoReportTriggerSchema,
1383
+ createdAt: z.string().datetime(),
1384
+ opportunityCount: z.number().int().min(0).max(5),
1385
+ readyTaskCount: z.number().int().min(0).max(5),
1386
+ researchTaskCount: z.number().int().min(0).max(5),
1387
+ rejectedFindingCount: z.number().int().min(0).max(20),
1388
+ legacy: z.boolean()
1389
+ }).strict();
1390
+ var SeoReportSchema = SeoReportSummarySchema.extend({
1391
+ generatedAt: z.string().datetime(),
1392
+ partialLabel: z.string().max(500).nullable(),
1393
+ freshThrough: z.string().datetime().nullable(),
1394
+ opportunities: z.array(SeoOpportunityBriefSchema).max(5),
1395
+ rejectedFindings: z.array(z.object({
1396
+ decision: z.literal("REJECTED"),
1397
+ query: z.string().min(1).max(300),
1398
+ reason: z.string().min(1).max(700),
1399
+ observedAt: z.string().datetime()
1400
+ }).strict()).max(20)
1401
+ }).strict();
1402
+ var SeoReportListQuerySchema = z.object({
1403
+ limit: z.coerce.number().int().min(1).max(26).default(10),
1404
+ cursor: SeoCursorSchema.optional(),
1405
+ completeness: SeoReportCompletenessSchema.optional()
1406
+ }).strict();
1407
+ var SeoReportListDataSchema = z.object({
1408
+ items: z.array(SeoReportSummarySchema).max(26),
1409
+ page: SeoPageSchema.extend({
1410
+ limit: z.number().int().min(1).max(26)
1411
+ }).strict()
1412
+ }).strict();
1413
+ var SeoReportListResponseSchema = successEnvelopeSchema(
1414
+ SeoReportListDataSchema
1415
+ );
1416
+ var SeoReportResponseSchema = successEnvelopeSchema(SeoReportSchema);
827
1417
  export {
828
1418
  API_VERSION,
829
1419
  ActorSchema,
1420
+ AgentBlogArticleCreateRequestSchema,
1421
+ AgentBlogArticleDetailSchema,
1422
+ AgentBlogArticleListResponseSchema,
1423
+ AgentBlogArticleQueuedResponseSchema,
1424
+ AgentBlogArticleResponseSchema,
1425
+ AgentBlogArticleSchema,
1426
+ AgentBlogCadenceInputSchema,
1427
+ AgentBlogConnectionExecuteRequestSchema,
1428
+ AgentBlogConnectionExecuteResponseSchema,
1429
+ AgentBlogConnectionExecuteSchema,
1430
+ AgentBlogConnectionPreviewRequestSchema,
1431
+ AgentBlogConnectionPreviewResponseSchema,
1432
+ AgentBlogConnectionPreviewSchema,
1433
+ AgentBlogConnectionRequestSchema,
1434
+ AgentBlogConnectionStatusResponseSchema,
1435
+ AgentBlogConnectionStatusSchema,
1436
+ AgentBlogDeliveryAttemptListResponseSchema,
1437
+ AgentBlogDeliveryAttemptSchema,
1438
+ AgentBlogDestinationSelectionSchema,
1439
+ AgentBlogDraftUpdateSchema,
1440
+ AgentBlogGenerateRequestSchema,
1441
+ AgentBlogIdempotentRequestSchema,
1442
+ AgentBlogJobResponseSchema,
1443
+ AgentBlogJobSchema,
1444
+ AgentBlogPlanCreateRequestSchema,
1445
+ AgentBlogPlanItemResponseSchema,
1446
+ AgentBlogPlanItemSchema,
1447
+ AgentBlogPlanItemStateRequestSchema,
1448
+ AgentBlogPlanItemsResponseSchema,
1449
+ AgentBlogPlanListResponseSchema,
1450
+ AgentBlogPlanQueuedResponseSchema,
1451
+ AgentBlogPlanRetryRequestSchema,
1452
+ AgentBlogPlanSchema,
1453
+ AgentBlogPublishExecuteRequestSchema,
1454
+ AgentBlogPublishExecuteResponseSchema,
1455
+ AgentBlogPublishPreviewRequestSchema,
1456
+ AgentBlogPublishPreviewResponseSchema,
1457
+ AgentBlogPublishPreviewSchema,
1458
+ AgentBlogPublishingDestinationListResponseSchema,
1459
+ AgentBlogPublishingDestinationSchema,
1460
+ AgentBlogPublishingProviderListResponseSchema,
1461
+ AgentBlogPublishingProviderSchema,
1462
+ AgentBlogRevalidationTestRequestSchema,
1463
+ AgentBlogRevalidationTestResponseSchema,
1464
+ AgentBlogRevalidationTestSchema,
1465
+ AgentBlogSetupStatusResponseSchema,
1466
+ AgentBlogSetupStatusSchema,
830
1467
  ApiErrorCodeSchema,
831
1468
  ApiMetaResponseSchema,
832
1469
  ApiMetaSchema,
833
1470
  ApiProblemSchema,
834
1471
  AuthenticationKindSchema,
1472
+ BlogArticleListSchema,
1473
+ BlogImageSchema,
1474
+ BlogMetadataSchema,
1475
+ BlogSitemapEntrySchema,
1476
+ BlogSlugRedirectSchema,
835
1477
  CLI_BROWSER_AUTHORIZATION_TIMEOUT_MS,
836
1478
  CONTRACT_VERSION,
837
1479
  CalendarEventSchema,
@@ -865,7 +1507,9 @@ export {
865
1507
  MediaAssetUploadPreparationSchema,
866
1508
  PUBLISHING_PROVIDER_COUNT,
867
1509
  PlatformPostStatusSchema,
1510
+ PostDeliveryModeSchema,
868
1511
  PostDestinationSchema,
1512
+ PostDestinationStageSchema,
869
1513
  PostListDataSchema,
870
1514
  PostListQuerySchema,
871
1515
  PostListResponseSchema,
@@ -899,10 +1543,40 @@ export {
899
1543
  ProviderDeliveryOptionsResponseSchema,
900
1544
  ProviderDeliveryOptionsSchema,
901
1545
  ProviderHealthStatusSchema,
1546
+ PublishedBlogArticleSchema,
902
1547
  PublishingProviderSchema,
903
1548
  ReadinessActionSchema,
904
1549
  ReadinessStatusSchema,
905
1550
  RequestMetadataSchema,
1551
+ SeoActionDecisionSchema,
1552
+ SeoActionPlanSchema,
1553
+ SeoAgentTaskSchema,
1554
+ SeoConfidenceValueSchema,
1555
+ SeoContentTypeSchema,
1556
+ SeoCursorSchema,
1557
+ SeoDecisionConfidenceSchema,
1558
+ SeoEntityIdSchema,
1559
+ SeoEvidenceProvenanceSchema,
1560
+ SeoEvidenceSchema,
1561
+ SeoExpectedImpactSchema,
1562
+ SeoOpportunityBriefSchema,
1563
+ SeoOpportunityKindSchema,
1564
+ SeoOpportunityListDataSchema,
1565
+ SeoOpportunityListQuerySchema,
1566
+ SeoOpportunityListResponseSchema,
1567
+ SeoOpportunityResponseSchema,
1568
+ SeoOpportunitySchema,
1569
+ SeoReportCompletenessSchema,
1570
+ SeoReportListDataSchema,
1571
+ SeoReportListQuerySchema,
1572
+ SeoReportListResponseSchema,
1573
+ SeoReportResponseSchema,
1574
+ SeoReportSchema,
1575
+ SeoReportSummarySchema,
1576
+ SeoReportTriggerSchema,
1577
+ SeoSearchIntentSchema,
1578
+ SeoTaskDecisionSchema,
1579
+ SeoTaskFormatSchema,
906
1580
  TikTokDeliveryOptionsSchema,
907
1581
  TikTokDraftSettingsSchema,
908
1582
  TikTokPostSettingsSchema,