posterly-mcp-server 0.20.7 → 0.22.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 +2 -1
- package/dist/index.js +10 -0
- package/dist/lib/api-client.d.ts +17 -0
- package/dist/lib/api-client.js +3 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/tools/create-post.d.ts +504 -36
- package/dist/tools/create-post.js +19 -4
- package/dist/tools/create-posts-batch.d.ts +196 -14
- package/dist/tools/delete-api-key.d.ts +20 -0
- package/dist/tools/delete-api-key.js +26 -0
- package/dist/tools/update-post.d.ts +224 -16
- package/dist/tools/update-post.js +11 -3
- package/package.json +2 -2
- package/src/index.ts +15 -0
- package/src/lib/api-client.ts +19 -0
- package/src/lib/version.ts +1 -1
- package/src/tools/create-post.ts +19 -4
- package/src/tools/delete-api-key.ts +31 -0
- package/src/tools/update-post.ts +11 -3
|
@@ -25,13 +25,17 @@ export const platformSettingsSchema = z.object({
|
|
|
25
25
|
reel_cover_url: z.string().optional(),
|
|
26
26
|
reel_thumb_offset: z.number().nonnegative().optional(),
|
|
27
27
|
// X
|
|
28
|
-
reply_settings: z.enum(['everyone', 'following', 'mentionedUsers']).optional(),
|
|
28
|
+
reply_settings: z.enum(['everyone', 'following', 'mentionedUsers', 'subscribers', 'verified']).optional(),
|
|
29
29
|
poll: z.object({
|
|
30
30
|
options: z.array(z.string()),
|
|
31
|
-
duration_minutes: z.number().positive().optional(),
|
|
31
|
+
duration_minutes: z.number().positive().optional(), // X poll length in minutes
|
|
32
|
+
question: z.string().optional(), // LinkedIn/Telegram poll question (required for those)
|
|
33
|
+
duration: z.enum(['ONE_DAY', 'THREE_DAYS', 'SEVEN_DAYS', 'FOURTEEN_DAYS']).optional(), // LinkedIn poll length
|
|
34
|
+
allows_multiple_answers: z.boolean().optional(), // Telegram poll: allow multiple selections
|
|
32
35
|
}).optional(),
|
|
33
36
|
// Threads
|
|
34
|
-
reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only']).optional(),
|
|
37
|
+
reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only', 'followers_only', 'parent_post_author_only']).optional(),
|
|
38
|
+
topic_tag: z.string().optional(), // Threads single discovery topic tag
|
|
35
39
|
text_attachment: z.record(z.unknown()).optional(),
|
|
36
40
|
// Facebook
|
|
37
41
|
text_format_preset_id: z.string().optional(),
|
|
@@ -67,8 +71,19 @@ export const platformSettingsSchema = z.object({
|
|
|
67
71
|
event: z.record(z.unknown()).optional(),
|
|
68
72
|
offer: z.record(z.unknown()).optional(),
|
|
69
73
|
cta: z.record(z.unknown()).optional(),
|
|
74
|
+
// YouTube
|
|
75
|
+
notify_subscribers: z.boolean().optional(),
|
|
76
|
+
add_shorts_hashtag: z.boolean().optional(),
|
|
77
|
+
// Telegram inline CTA buttons
|
|
78
|
+
buttons: z.array(z.object({ text: z.string(), url: z.string() })).optional(),
|
|
70
79
|
// Bluesky
|
|
71
80
|
langs: z.array(z.string()).optional(),
|
|
81
|
+
content_label: z.enum(['sexual', 'nudity', 'porn', 'graphic-media']).optional(), // Bluesky content warning
|
|
82
|
+
quote_url: z.string().optional(), // Bluesky post URL/AT-URI to quote
|
|
83
|
+
disable_quotes: z.boolean().optional(), // Bluesky: prevent quote-posts of this post
|
|
84
|
+
// tags (z.array of strings) also serve as Bluesky hidden discovery tags
|
|
85
|
+
// AI-content disclosure (TikTok is_aigc, X made_with_ai, YouTube containsSyntheticMedia, Pinterest ai_disclosures)
|
|
86
|
+
ai_generated: z.boolean().optional(),
|
|
72
87
|
}).passthrough();
|
|
73
88
|
export const createPostPayloadInputSchema = z.object({
|
|
74
89
|
account_id: z.string().optional().describe('Social account ID (from list_accounts)'),
|
|
@@ -158,7 +173,7 @@ export const createPostTool = {
|
|
|
158
173
|
'Provide either account_id OR username+platform to identify the account. If scheduled_at is omitted, the post publishes immediately. If workspace_id is omitted, the server resolves one from the social account, falling back to the caller\'s default (personal) workspace - pass workspace_id explicitly if the user has more than one workspace.\n\n' +
|
|
159
174
|
'MEDIA URLS: Posterly storage URLs are used as-is. Third-party HTTP(S) media URLs are copied into Posterly storage before the post is saved, so API-created posts do not later fail on expired signed URLs. Short-lived signed URLs must still be live when this tool runs. You can also call `upload_media_from_url` first if you want to upload once and reuse the returned Posterly URL across posts.\n\n' +
|
|
160
175
|
'THREADS: Pass `thread_posts` (an array of 2+ strings) to schedule a multi-post thread on X (Twitter) or Threads (Meta). The first entry is the lead post; the rest are published as replies in the same chain. X entries are capped at 280 characters each (4000 for verified, 25000 for organization accounts); Threads entries are capped at 500 characters each. When `thread_posts` is set, `caption` is ignored.\n\n' +
|
|
161
|
-
'PLATFORM SETTINGS: Pass `platform_settings` for composer-equivalent controls: Facebook story/reel/backgrounds, YouTube title/privacy/thumbnail/playlist, LinkedIn document titles/mentions/video thumbnails, TikTok direct-post privacy/toggles/commercial disclosure, Pinterest post_type (image/video/carousel), board (from pinterest.boards helper), title, link, and cover_image_url (video Pins), GBP event/offer/CTA, X reply settings/polls, Threads reply controls/text attachments, Bluesky languages/alt text, and Instagram feed/story/reel/carousel/collaborators/first comments/trial Reels. `instagram_settings` remains as a backwards-compatible alias.\n\n' +
|
|
176
|
+
'PLATFORM SETTINGS: Pass `platform_settings` for composer-equivalent controls: Facebook story/reel/backgrounds, YouTube title/privacy/thumbnail/playlist, LinkedIn document titles/mentions/polls (poll.question, poll.options 2-4, poll.duration ONE_DAY|THREE_DAYS|SEVEN_DAYS|FOURTEEN_DAYS; text-only)/video thumbnails, TikTok direct-post privacy/toggles/commercial disclosure, Pinterest post_type (image/video/carousel), board (from pinterest.boards helper), title, link, and cover_image_url (video Pins), GBP event/offer/CTA, X reply settings/polls, Threads reply controls/text attachments, Bluesky languages/alt text, and Instagram feed/story/reel/carousel/collaborators/first comments/trial Reels. `instagram_settings` remains as a backwards-compatible alias.\n\n' +
|
|
162
177
|
'TIKTOK MEDIA: TikTok supports a single video or a photo slideshow of 1 to 35 images, never multiple videos. Image media auto-detects as a slideshow, so you usually do not set post_type or media_type for photos and every image is posted. Pass `platform_settings.media_type: "PHOTO"` to force a slideshow explicitly.',
|
|
163
178
|
inputSchema: createPostInputSchema,
|
|
164
179
|
async execute(client, input) {
|
|
@@ -96,18 +96,28 @@ export declare const createPostsBatchTool: {
|
|
|
96
96
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
97
97
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
98
98
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
99
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
99
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
100
100
|
poll: z.ZodOptional<z.ZodObject<{
|
|
101
101
|
options: z.ZodArray<z.ZodString, "many">;
|
|
102
102
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
103
|
+
question: z.ZodOptional<z.ZodString>;
|
|
104
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
105
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
103
106
|
}, "strip", z.ZodTypeAny, {
|
|
104
107
|
options: string[];
|
|
105
108
|
duration_minutes?: number | undefined;
|
|
109
|
+
question?: string | undefined;
|
|
110
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
111
|
+
allows_multiple_answers?: boolean | undefined;
|
|
106
112
|
}, {
|
|
107
113
|
options: string[];
|
|
108
114
|
duration_minutes?: number | undefined;
|
|
115
|
+
question?: string | undefined;
|
|
116
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
117
|
+
allows_multiple_answers?: boolean | undefined;
|
|
109
118
|
}>>;
|
|
110
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
119
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
120
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
111
121
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
112
122
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
113
123
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -137,7 +147,23 @@ export declare const createPostsBatchTool: {
|
|
|
137
147
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
138
148
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
139
149
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
150
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
151
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
152
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
153
|
+
text: z.ZodString;
|
|
154
|
+
url: z.ZodString;
|
|
155
|
+
}, "strip", z.ZodTypeAny, {
|
|
156
|
+
url: string;
|
|
157
|
+
text: string;
|
|
158
|
+
}, {
|
|
159
|
+
url: string;
|
|
160
|
+
text: string;
|
|
161
|
+
}>, "many">>;
|
|
140
162
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
163
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
164
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
165
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
166
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
141
167
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
142
168
|
__type: z.ZodOptional<z.ZodString>;
|
|
143
169
|
post_type: z.ZodOptional<z.ZodString>;
|
|
@@ -145,18 +171,28 @@ export declare const createPostsBatchTool: {
|
|
|
145
171
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
146
172
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
147
173
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
148
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
174
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
149
175
|
poll: z.ZodOptional<z.ZodObject<{
|
|
150
176
|
options: z.ZodArray<z.ZodString, "many">;
|
|
151
177
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
178
|
+
question: z.ZodOptional<z.ZodString>;
|
|
179
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
180
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
152
181
|
}, "strip", z.ZodTypeAny, {
|
|
153
182
|
options: string[];
|
|
154
183
|
duration_minutes?: number | undefined;
|
|
184
|
+
question?: string | undefined;
|
|
185
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
186
|
+
allows_multiple_answers?: boolean | undefined;
|
|
155
187
|
}, {
|
|
156
188
|
options: string[];
|
|
157
189
|
duration_minutes?: number | undefined;
|
|
190
|
+
question?: string | undefined;
|
|
191
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
192
|
+
allows_multiple_answers?: boolean | undefined;
|
|
158
193
|
}>>;
|
|
159
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
194
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
195
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
160
196
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
161
197
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
162
198
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -186,7 +222,23 @@ export declare const createPostsBatchTool: {
|
|
|
186
222
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
187
223
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
188
224
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
225
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
226
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
227
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
228
|
+
text: z.ZodString;
|
|
229
|
+
url: z.ZodString;
|
|
230
|
+
}, "strip", z.ZodTypeAny, {
|
|
231
|
+
url: string;
|
|
232
|
+
text: string;
|
|
233
|
+
}, {
|
|
234
|
+
url: string;
|
|
235
|
+
text: string;
|
|
236
|
+
}>, "many">>;
|
|
189
237
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
238
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
239
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
240
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
241
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
190
242
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
191
243
|
__type: z.ZodOptional<z.ZodString>;
|
|
192
244
|
post_type: z.ZodOptional<z.ZodString>;
|
|
@@ -194,18 +246,28 @@ export declare const createPostsBatchTool: {
|
|
|
194
246
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
195
247
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
196
248
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
197
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
249
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
198
250
|
poll: z.ZodOptional<z.ZodObject<{
|
|
199
251
|
options: z.ZodArray<z.ZodString, "many">;
|
|
200
252
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
253
|
+
question: z.ZodOptional<z.ZodString>;
|
|
254
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
255
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
201
256
|
}, "strip", z.ZodTypeAny, {
|
|
202
257
|
options: string[];
|
|
203
258
|
duration_minutes?: number | undefined;
|
|
259
|
+
question?: string | undefined;
|
|
260
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
261
|
+
allows_multiple_answers?: boolean | undefined;
|
|
204
262
|
}, {
|
|
205
263
|
options: string[];
|
|
206
264
|
duration_minutes?: number | undefined;
|
|
265
|
+
question?: string | undefined;
|
|
266
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
267
|
+
allows_multiple_answers?: boolean | undefined;
|
|
207
268
|
}>>;
|
|
208
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
269
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
270
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
209
271
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
210
272
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
211
273
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -235,7 +297,23 @@ export declare const createPostsBatchTool: {
|
|
|
235
297
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
236
298
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
237
299
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
300
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
301
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
302
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
303
|
+
text: z.ZodString;
|
|
304
|
+
url: z.ZodString;
|
|
305
|
+
}, "strip", z.ZodTypeAny, {
|
|
306
|
+
url: string;
|
|
307
|
+
text: string;
|
|
308
|
+
}, {
|
|
309
|
+
url: string;
|
|
310
|
+
text: string;
|
|
311
|
+
}>, "many">>;
|
|
238
312
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
313
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
314
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
315
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
316
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
239
317
|
}, z.ZodTypeAny, "passthrough">>>;
|
|
240
318
|
workspace_id: z.ZodOptional<z.ZodString>;
|
|
241
319
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -276,18 +354,28 @@ export declare const createPostsBatchTool: {
|
|
|
276
354
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
277
355
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
278
356
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
279
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
357
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
280
358
|
poll: z.ZodOptional<z.ZodObject<{
|
|
281
359
|
options: z.ZodArray<z.ZodString, "many">;
|
|
282
360
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
361
|
+
question: z.ZodOptional<z.ZodString>;
|
|
362
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
363
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
283
364
|
}, "strip", z.ZodTypeAny, {
|
|
284
365
|
options: string[];
|
|
285
366
|
duration_minutes?: number | undefined;
|
|
367
|
+
question?: string | undefined;
|
|
368
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
369
|
+
allows_multiple_answers?: boolean | undefined;
|
|
286
370
|
}, {
|
|
287
371
|
options: string[];
|
|
288
372
|
duration_minutes?: number | undefined;
|
|
373
|
+
question?: string | undefined;
|
|
374
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
375
|
+
allows_multiple_answers?: boolean | undefined;
|
|
289
376
|
}>>;
|
|
290
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
377
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
378
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
291
379
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
292
380
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
293
381
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -317,7 +405,23 @@ export declare const createPostsBatchTool: {
|
|
|
317
405
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
318
406
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
319
407
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
408
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
409
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
410
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
411
|
+
text: z.ZodString;
|
|
412
|
+
url: z.ZodString;
|
|
413
|
+
}, "strip", z.ZodTypeAny, {
|
|
414
|
+
url: string;
|
|
415
|
+
text: string;
|
|
416
|
+
}, {
|
|
417
|
+
url: string;
|
|
418
|
+
text: string;
|
|
419
|
+
}>, "many">>;
|
|
320
420
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
421
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
422
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
423
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
424
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
321
425
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
322
426
|
}, {
|
|
323
427
|
workspace_id?: string | undefined;
|
|
@@ -357,18 +461,28 @@ export declare const createPostsBatchTool: {
|
|
|
357
461
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
358
462
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
359
463
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
360
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
464
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
361
465
|
poll: z.ZodOptional<z.ZodObject<{
|
|
362
466
|
options: z.ZodArray<z.ZodString, "many">;
|
|
363
467
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
468
|
+
question: z.ZodOptional<z.ZodString>;
|
|
469
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
470
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
364
471
|
}, "strip", z.ZodTypeAny, {
|
|
365
472
|
options: string[];
|
|
366
473
|
duration_minutes?: number | undefined;
|
|
474
|
+
question?: string | undefined;
|
|
475
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
476
|
+
allows_multiple_answers?: boolean | undefined;
|
|
367
477
|
}, {
|
|
368
478
|
options: string[];
|
|
369
479
|
duration_minutes?: number | undefined;
|
|
480
|
+
question?: string | undefined;
|
|
481
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
482
|
+
allows_multiple_answers?: boolean | undefined;
|
|
370
483
|
}>>;
|
|
371
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
484
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
485
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
372
486
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
373
487
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
374
488
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -398,7 +512,23 @@ export declare const createPostsBatchTool: {
|
|
|
398
512
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
399
513
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
400
514
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
515
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
516
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
517
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
518
|
+
text: z.ZodString;
|
|
519
|
+
url: z.ZodString;
|
|
520
|
+
}, "strip", z.ZodTypeAny, {
|
|
521
|
+
url: string;
|
|
522
|
+
text: string;
|
|
523
|
+
}, {
|
|
524
|
+
url: string;
|
|
525
|
+
text: string;
|
|
526
|
+
}>, "many">>;
|
|
401
527
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
528
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
529
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
530
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
531
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
402
532
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
403
533
|
}>, "many">;
|
|
404
534
|
confirm: z.ZodLiteral<true>;
|
|
@@ -442,18 +572,28 @@ export declare const createPostsBatchTool: {
|
|
|
442
572
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
443
573
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
444
574
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
445
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
575
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
446
576
|
poll: z.ZodOptional<z.ZodObject<{
|
|
447
577
|
options: z.ZodArray<z.ZodString, "many">;
|
|
448
578
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
579
|
+
question: z.ZodOptional<z.ZodString>;
|
|
580
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
581
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
449
582
|
}, "strip", z.ZodTypeAny, {
|
|
450
583
|
options: string[];
|
|
451
584
|
duration_minutes?: number | undefined;
|
|
585
|
+
question?: string | undefined;
|
|
586
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
587
|
+
allows_multiple_answers?: boolean | undefined;
|
|
452
588
|
}, {
|
|
453
589
|
options: string[];
|
|
454
590
|
duration_minutes?: number | undefined;
|
|
591
|
+
question?: string | undefined;
|
|
592
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
593
|
+
allows_multiple_answers?: boolean | undefined;
|
|
455
594
|
}>>;
|
|
456
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
595
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
596
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
457
597
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
458
598
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
459
599
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -483,7 +623,23 @@ export declare const createPostsBatchTool: {
|
|
|
483
623
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
484
624
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
485
625
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
626
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
627
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
628
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
629
|
+
text: z.ZodString;
|
|
630
|
+
url: z.ZodString;
|
|
631
|
+
}, "strip", z.ZodTypeAny, {
|
|
632
|
+
url: string;
|
|
633
|
+
text: string;
|
|
634
|
+
}, {
|
|
635
|
+
url: string;
|
|
636
|
+
text: string;
|
|
637
|
+
}>, "many">>;
|
|
486
638
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
639
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
640
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
641
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
642
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
487
643
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
488
644
|
}[];
|
|
489
645
|
}, {
|
|
@@ -526,18 +682,28 @@ export declare const createPostsBatchTool: {
|
|
|
526
682
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
527
683
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
528
684
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
529
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
685
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
530
686
|
poll: z.ZodOptional<z.ZodObject<{
|
|
531
687
|
options: z.ZodArray<z.ZodString, "many">;
|
|
532
688
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
689
|
+
question: z.ZodOptional<z.ZodString>;
|
|
690
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
691
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
533
692
|
}, "strip", z.ZodTypeAny, {
|
|
534
693
|
options: string[];
|
|
535
694
|
duration_minutes?: number | undefined;
|
|
695
|
+
question?: string | undefined;
|
|
696
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
697
|
+
allows_multiple_answers?: boolean | undefined;
|
|
536
698
|
}, {
|
|
537
699
|
options: string[];
|
|
538
700
|
duration_minutes?: number | undefined;
|
|
701
|
+
question?: string | undefined;
|
|
702
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
703
|
+
allows_multiple_answers?: boolean | undefined;
|
|
539
704
|
}>>;
|
|
540
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
705
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
706
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
541
707
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
542
708
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
543
709
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -567,7 +733,23 @@ export declare const createPostsBatchTool: {
|
|
|
567
733
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
568
734
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
569
735
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
736
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
737
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
738
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
739
|
+
text: z.ZodString;
|
|
740
|
+
url: z.ZodString;
|
|
741
|
+
}, "strip", z.ZodTypeAny, {
|
|
742
|
+
url: string;
|
|
743
|
+
text: string;
|
|
744
|
+
}, {
|
|
745
|
+
url: string;
|
|
746
|
+
text: string;
|
|
747
|
+
}>, "many">>;
|
|
570
748
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
749
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
750
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
751
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
752
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
571
753
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
572
754
|
}[];
|
|
573
755
|
}>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { PosterlyClient } from '../lib/api-client.js';
|
|
3
|
+
export declare const deleteApiKeyTool: {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
inputSchema: z.ZodObject<{
|
|
7
|
+
key_id: z.ZodString;
|
|
8
|
+
confirm: z.ZodLiteral<true>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
confirm: true;
|
|
11
|
+
key_id: string;
|
|
12
|
+
}, {
|
|
13
|
+
confirm: true;
|
|
14
|
+
key_id: string;
|
|
15
|
+
}>;
|
|
16
|
+
execute(client: PosterlyClient, input: {
|
|
17
|
+
key_id: string;
|
|
18
|
+
confirm: true;
|
|
19
|
+
}): Promise<string>;
|
|
20
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { code, mdKeyValue, mdSection, mdTitle } from '../lib/format.js';
|
|
3
|
+
function formatDeletedApiKey(result) {
|
|
4
|
+
const key = result.api_key;
|
|
5
|
+
return [
|
|
6
|
+
mdTitle(result.already_revoked ? 'API key was already revoked' : 'API key revoked'),
|
|
7
|
+
mdSection('Details', mdKeyValue([
|
|
8
|
+
['Key ID', code(key.id)],
|
|
9
|
+
['Name', key.name],
|
|
10
|
+
['Prefix', code(key.key_prefix)],
|
|
11
|
+
['Workspace', key.workspace_id ? code(key.workspace_id) : 'all accessible workspaces'],
|
|
12
|
+
])),
|
|
13
|
+
].join('\n\n');
|
|
14
|
+
}
|
|
15
|
+
export const deleteApiKeyTool = {
|
|
16
|
+
name: 'delete_api_key',
|
|
17
|
+
description: 'Revoke a Posterly API key owned by the authenticated user. DESTRUCTIVE: call whoami or use a known key ID, show the user the exact key ID/prefix/name if available, and get explicit confirmation before calling. Cannot revoke the key currently authenticating this request, OAuth-issued keys, or managed assistant keys.',
|
|
18
|
+
inputSchema: z.object({
|
|
19
|
+
key_id: z.string().uuid().describe('API key ID to revoke. This is the API key resource ID, not the secret pst_live_ value.'),
|
|
20
|
+
confirm: z.literal(true).describe('Must be true after the user explicitly confirms API key revocation.'),
|
|
21
|
+
}),
|
|
22
|
+
async execute(client, input) {
|
|
23
|
+
const result = await client.deleteApiKey(input.key_id, { confirm: input.confirm });
|
|
24
|
+
return formatDeletedApiKey(result);
|
|
25
|
+
},
|
|
26
|
+
};
|