social-mcp 2.6.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +46 -28
  2. package/dist/index.js +4 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/services/bluesky-service.d.ts +7 -1
  5. package/dist/services/bluesky-service.js +17 -2
  6. package/dist/services/bluesky-service.js.map +1 -1
  7. package/dist/services/facebook-service.d.ts +17 -1
  8. package/dist/services/facebook-service.js +63 -5
  9. package/dist/services/facebook-service.js.map +1 -1
  10. package/dist/services/ghost-service.d.ts +4 -1
  11. package/dist/services/ghost-service.js +55 -9
  12. package/dist/services/ghost-service.js.map +1 -1
  13. package/dist/services/instagram-service.d.ts +6 -1
  14. package/dist/services/instagram-service.js +40 -3
  15. package/dist/services/instagram-service.js.map +1 -1
  16. package/dist/services/linkedin-service.d.ts +9 -1
  17. package/dist/services/linkedin-service.js +65 -8
  18. package/dist/services/linkedin-service.js.map +1 -1
  19. package/dist/services/mastodon-service.d.ts +10 -1
  20. package/dist/services/mastodon-service.js +35 -6
  21. package/dist/services/mastodon-service.js.map +1 -1
  22. package/dist/services/pinterest-service.d.ts +28 -2
  23. package/dist/services/pinterest-service.js +32 -8
  24. package/dist/services/pinterest-service.js.map +1 -1
  25. package/dist/services/reddit-service.d.ts +10 -1
  26. package/dist/services/reddit-service.js +62 -5
  27. package/dist/services/reddit-service.js.map +1 -1
  28. package/dist/services/threads-service.d.ts +8 -1
  29. package/dist/services/threads-service.js +46 -7
  30. package/dist/services/threads-service.js.map +1 -1
  31. package/dist/services/tumblr-service.d.ts +25 -5
  32. package/dist/services/tumblr-service.js +51 -8
  33. package/dist/services/tumblr-service.js.map +1 -1
  34. package/dist/services/twitter-service.d.ts +13 -5
  35. package/dist/services/twitter-service.js +24 -3
  36. package/dist/services/twitter-service.js.map +1 -1
  37. package/dist/services/whatsapp-service.d.ts +10 -1
  38. package/dist/services/whatsapp-service.js +60 -9
  39. package/dist/services/whatsapp-service.js.map +1 -1
  40. package/dist/services/youtube-service.d.ts +21 -0
  41. package/dist/services/youtube-service.js +57 -7
  42. package/dist/services/youtube-service.js.map +1 -1
  43. package/dist/tools/bluesky-tools/create-post.d.ts +11 -1
  44. package/dist/tools/bluesky-tools/create-post.js +11 -2
  45. package/dist/tools/bluesky-tools/create-post.js.map +1 -1
  46. package/dist/tools/facebook-tools/create-post.d.ts +5 -1
  47. package/dist/tools/facebook-tools/create-post.js +12 -2
  48. package/dist/tools/facebook-tools/create-post.js.map +1 -1
  49. package/dist/tools/facebook-tools/create-video-post.d.ts +20 -0
  50. package/dist/tools/facebook-tools/create-video-post.js +31 -0
  51. package/dist/tools/facebook-tools/create-video-post.js.map +1 -0
  52. package/dist/tools/ghost-tools/create-post.d.ts +4 -0
  53. package/dist/tools/ghost-tools/create-post.js +27 -4
  54. package/dist/tools/ghost-tools/create-post.js.map +1 -1
  55. package/dist/tools/instagram-tools/create-post.d.ts +11 -1
  56. package/dist/tools/instagram-tools/create-post.js +8 -3
  57. package/dist/tools/instagram-tools/create-post.js.map +1 -1
  58. package/dist/tools/linkedin-tools/create-post.d.ts +5 -1
  59. package/dist/tools/linkedin-tools/create-post.js +9 -2
  60. package/dist/tools/linkedin-tools/create-post.js.map +1 -1
  61. package/dist/tools/mastodon-tools/create-post.d.ts +11 -1
  62. package/dist/tools/mastodon-tools/create-post.js +18 -2
  63. package/dist/tools/mastodon-tools/create-post.js.map +1 -1
  64. package/dist/tools/pinterest-tools/create-pin.d.ts +4 -2
  65. package/dist/tools/pinterest-tools/create-pin.js +8 -2
  66. package/dist/tools/pinterest-tools/create-pin.js.map +1 -1
  67. package/dist/tools/reddit-tools/submit-post.d.ts +9 -1
  68. package/dist/tools/reddit-tools/submit-post.js +19 -4
  69. package/dist/tools/reddit-tools/submit-post.js.map +1 -1
  70. package/dist/tools/threads-tools/create-post.d.ts +13 -1
  71. package/dist/tools/threads-tools/create-post.js +14 -2
  72. package/dist/tools/threads-tools/create-post.js.map +1 -1
  73. package/dist/tools/tumblr-tools/create-post.d.ts +4 -0
  74. package/dist/tools/tumblr-tools/create-post.js +39 -8
  75. package/dist/tools/tumblr-tools/create-post.js.map +1 -1
  76. package/dist/tools/twitter-tools/send-tweet.d.ts +9 -1
  77. package/dist/tools/twitter-tools/send-tweet.js +10 -2
  78. package/dist/tools/twitter-tools/send-tweet.js.map +1 -1
  79. package/dist/tools/whatsapp-tools/send-message.d.ts +19 -3
  80. package/dist/tools/whatsapp-tools/send-message.js +29 -3
  81. package/dist/tools/whatsapp-tools/send-message.js.map +1 -1
  82. package/dist/tools/youtube-tools/upload-video.d.ts +34 -0
  83. package/dist/tools/youtube-tools/upload-video.js +39 -0
  84. package/dist/tools/youtube-tools/upload-video.js.map +1 -0
  85. package/package.json +1 -1
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { config } from "../lib/config.js";
3
3
  import { CredentialsError } from "../lib/errors.js";
4
4
  import { fetchJson } from "../lib/http.js";
5
+ import { createProxyDispatcher } from "../lib/proxy.js";
5
6
  const blogInfoSchema = z.object({
6
7
  response: z.object({
7
8
  blog: z.object({
@@ -21,7 +22,9 @@ const npfContentBlock = z.object({
21
22
  text: z.string().optional(),
22
23
  subtype: z.string().optional(),
23
24
  url: z.string().optional(),
24
- media: z.array(z.object({ url: z.string(), type: z.string().optional() })).optional(),
25
+ media: z
26
+ .array(z.object({ url: z.string(), type: z.string().optional() }))
27
+ .optional(),
25
28
  });
26
29
  const postSchema = z.object({
27
30
  id: z.union([z.string(), z.number()]),
@@ -58,16 +61,19 @@ export class TumblrService {
58
61
  baseUrl = config.tumblr.baseUrl;
59
62
  headers;
60
63
  blogIdentifier;
64
+ dispatcher;
61
65
  constructor(credentials) {
62
66
  const accessToken = credentials?.accessToken ?? config.tumblr.accessToken;
63
67
  if (!accessToken) {
64
68
  throw new CredentialsError("Tumblr", ["TUMBLR_ACCESS_TOKEN"]);
65
69
  }
66
- this.blogIdentifier = credentials?.blogIdentifier ?? config.tumblr.blogIdentifier;
70
+ this.blogIdentifier =
71
+ credentials?.blogIdentifier ?? config.tumblr.blogIdentifier;
67
72
  this.headers = {
68
73
  Authorization: `Bearer ${accessToken}`,
69
74
  "Content-Type": "application/json",
70
75
  };
76
+ this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
71
77
  }
72
78
  getBlog(override) {
73
79
  const blog = override ?? this.blogIdentifier;
@@ -77,27 +83,64 @@ export class TumblrService {
77
83
  }
78
84
  async getBlogInfo(blogIdentifier) {
79
85
  const blog = this.getBlog(blogIdentifier);
80
- return fetchJson(`${this.baseUrl}/blog/${blog}/info`, { method: "GET", headers: this.headers }, blogInfoSchema);
86
+ return fetchJson(`${this.baseUrl}/blog/${blog}/info`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, blogInfoSchema);
81
87
  }
82
88
  async getPosts(blogIdentifier, type, offset = 0, limit = 10) {
83
89
  const blog = this.getBlog(blogIdentifier);
84
- const params = new URLSearchParams({ offset: String(offset), limit: String(limit), npf: "false" });
90
+ const params = new URLSearchParams({
91
+ offset: String(offset),
92
+ limit: String(limit),
93
+ npf: "false",
94
+ });
85
95
  if (type)
86
96
  params.set("type", type);
87
- return fetchJson(`${this.baseUrl}/blog/${blog}/posts?${params}`, { method: "GET", headers: this.headers }, postsResponseSchema);
97
+ return fetchJson(`${this.baseUrl}/blog/${blog}/posts?${params}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, postsResponseSchema);
88
98
  }
89
- async createPost(blogIdentifier, content, tags = [], state = "published", title, nativeInlineImages = false) {
99
+ async createPost(blogIdentifier, content, tags = [], state = "published", title, nativeInlineImages = false,
100
+ // Photo/video content blocks reference these by `identifier` — NPF supports
101
+ // referencing an already-hosted URL directly in `content`, so this is only
102
+ // needed when the caller has raw bytes rather than a public URL.
103
+ attachments) {
90
104
  const blog = this.getBlog(blogIdentifier);
91
- const body = { content, tags, state, native_inline_images: nativeInlineImages };
105
+ const body = {
106
+ content,
107
+ tags,
108
+ state,
109
+ native_inline_images: nativeInlineImages,
110
+ };
92
111
  if (title)
93
112
  body.title = title;
94
- return fetchJson(`${this.baseUrl}/blog/${blog}/posts`, { method: "POST", headers: this.headers, body: JSON.stringify(body) }, createPostResponseSchema);
113
+ if (!attachments?.length) {
114
+ return fetchJson(`${this.baseUrl}/blog/${blog}/posts`, {
115
+ method: "POST",
116
+ headers: this.headers,
117
+ body: JSON.stringify(body),
118
+ dispatcher: this.dispatcher,
119
+ }, createPostResponseSchema);
120
+ }
121
+ const formData = new FormData();
122
+ formData.append("json", JSON.stringify(body));
123
+ for (const attachment of attachments) {
124
+ const buffer = Buffer.from(attachment.content, "base64");
125
+ formData.append(attachment.identifier, new Blob([buffer], { type: attachment.contentType }), attachment.identifier);
126
+ }
127
+ const response = await fetch(`${this.baseUrl}/blog/${blog}/posts`, {
128
+ method: "POST",
129
+ headers: { Authorization: this.headers.Authorization ?? "" },
130
+ body: formData,
131
+ dispatcher: this.dispatcher,
132
+ });
133
+ if (!response.ok) {
134
+ throw new Error(`Tumblr API error (${response.status}): ${await response.text()}`);
135
+ }
136
+ return createPostResponseSchema.parse(await response.json());
95
137
  }
96
138
  async deletePost(postId, blogIdentifier) {
97
139
  const blog = this.getBlog(blogIdentifier);
98
140
  const response = await fetch(`${this.baseUrl}/blog/${blog}/posts/${postId}`, {
99
141
  method: "DELETE",
100
142
  headers: this.headers,
143
+ dispatcher: this.dispatcher,
101
144
  });
102
145
  if (!response.ok) {
103
146
  throw new Error(`Tumblr API error ${response.status}: ${response.statusText}`);
@@ -1 +1 @@
1
- {"version":3,"file":"tumblr-service.js","sourceRoot":"","sources":["../../src/services/tumblr-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tumblr-service.js","sourceRoot":"","sources":["../../src/services/tumblr-service.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,21 @@
1
1
  export interface TwitterCredentials {
2
- appKey: string;
3
- appSecret: string;
4
- accessToken: string;
5
- accessSecret: string;
2
+ appKey?: string;
3
+ appSecret?: string;
4
+ accessToken?: string;
5
+ accessSecret?: string;
6
+ bearerToken?: string;
7
+ /** Routes API calls through this proxy (e.g. per-tenant IP isolation). */
8
+ proxyUrl?: string;
9
+ }
10
+ export interface TwitterMediaAttachment {
11
+ /** Base64-encoded image/gif/video bytes. Max 4 per tweet (X's own limit). */
12
+ content: string;
13
+ mimeType: string;
6
14
  }
7
15
  export declare class TwitterService {
8
16
  private client;
9
17
  constructor(credentials?: TwitterCredentials);
10
- sendTweet(text: string): Promise<{
18
+ sendTweet(text: string, media?: TwitterMediaAttachment[]): Promise<{
11
19
  id: string;
12
20
  text: string;
13
21
  }>;
@@ -1,12 +1,21 @@
1
1
  import { TwitterApi } from "twitter-api-v2";
2
2
  import { CredentialsError } from "../lib/errors.js";
3
+ import { createProxyAgent } from "../lib/proxy.js";
3
4
  export class TwitterService {
4
5
  client;
5
6
  constructor(credentials) {
7
+ const bearerToken = credentials?.bearerToken ?? process.env.TWITTER_BEARER_TOKEN;
6
8
  const appKey = credentials?.appKey ?? process.env.TWITTER_APP_KEY;
7
9
  const appSecret = credentials?.appSecret ?? process.env.TWITTER_APP_SECRET;
8
10
  const accessToken = credentials?.accessToken ?? process.env.TWITTER_ACCESS_TOKEN;
9
11
  const accessSecret = credentials?.accessSecret ?? process.env.TWITTER_ACCESS_SECRET;
12
+ const clientOptions = {
13
+ httpAgent: createProxyAgent(credentials?.proxyUrl),
14
+ };
15
+ if (bearerToken) {
16
+ this.client = new TwitterApi(bearerToken, clientOptions);
17
+ return;
18
+ }
10
19
  const missing = [];
11
20
  if (!appKey)
12
21
  missing.push("TWITTER_APP_KEY");
@@ -17,17 +26,29 @@ export class TwitterService {
17
26
  if (!accessSecret)
18
27
  missing.push("TWITTER_ACCESS_SECRET");
19
28
  if (missing.length > 0) {
20
- throw new CredentialsError("Twitter", missing);
29
+ throw new CredentialsError("Twitter", [
30
+ ...missing,
31
+ "(or TWITTER_BEARER_TOKEN)",
32
+ ]);
21
33
  }
22
34
  this.client = new TwitterApi({
23
35
  appKey: appKey,
24
36
  appSecret: appSecret,
25
37
  accessToken: accessToken,
26
38
  accessSecret: accessSecret,
27
- });
39
+ }, clientOptions);
28
40
  }
29
- async sendTweet(text) {
41
+ async sendTweet(text, media) {
30
42
  try {
43
+ if (media?.length) {
44
+ const mediaIds = await Promise.all(media.map((m) => this.client.v1.uploadMedia(Buffer.from(m.content, "base64"), {
45
+ mimeType: m.mimeType,
46
+ })));
47
+ const { data: createdTweet } = await this.client.v2.tweet(text, {
48
+ media: { media_ids: mediaIds },
49
+ });
50
+ return createdTweet;
51
+ }
31
52
  const { data: createdTweet } = await this.client.v2.tweet(text);
32
53
  return createdTweet;
33
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"twitter-service.js","sourceRoot":"","sources":["../../src/services/twitter-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"twitter-service.js","sourceRoot":"","sources":["../../src/services/twitter-service.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,22 @@
1
1
  export interface WhatsappCredentials {
2
2
  accessToken: string;
3
3
  phoneNumberId: string;
4
+ proxyUrl?: string;
5
+ }
6
+ export interface WhatsappMedia {
7
+ /** Public media URL, or base64-encoded bytes (uploaded first, then referenced by ID). */
8
+ media: string;
9
+ contentType?: string;
10
+ filename?: string;
4
11
  }
5
12
  export declare class WhatsappService {
6
13
  private baseUrl;
7
14
  private phoneNumberId;
8
15
  private headers;
16
+ private dispatcher?;
9
17
  constructor(credentials?: WhatsappCredentials);
10
- sendMessage(to: string, text: string): Promise<{
18
+ private uploadMedia;
19
+ sendMessage(to: string, text: string, media?: WhatsappMedia, mediaKind?: "image" | "video" | "document"): Promise<{
11
20
  messaging_product: string;
12
21
  contacts: {
13
22
  input: string;
@@ -2,15 +2,23 @@ import { z } from "zod";
2
2
  import { config } from "../lib/config.js";
3
3
  import { CredentialsError } from "../lib/errors.js";
4
4
  import { fetchJson } from "../lib/http.js";
5
+ import { createProxyDispatcher } from "../lib/proxy.js";
5
6
  const whatsappMessageSchema = z.object({
6
7
  messaging_product: z.string(),
7
8
  contacts: z.array(z.object({ input: z.string(), wa_id: z.string() })),
8
9
  messages: z.array(z.object({ id: z.string() })),
9
10
  });
11
+ const whatsappMediaUploadSchema = z.object({
12
+ id: z.string(),
13
+ });
14
+ function isHttpUrl(value) {
15
+ return value.startsWith("http://") || value.startsWith("https://");
16
+ }
10
17
  export class WhatsappService {
11
18
  baseUrl = config.whatsapp.baseUrl;
12
19
  phoneNumberId;
13
20
  headers;
21
+ dispatcher;
14
22
  constructor(credentials) {
15
23
  const accessToken = credentials?.accessToken ?? config.whatsapp.accessToken;
16
24
  const phoneNumberId = credentials?.phoneNumberId ?? config.whatsapp.phoneNumberId;
@@ -27,24 +35,67 @@ export class WhatsappService {
27
35
  "Content-Type": "application/json",
28
36
  Authorization: `Bearer ${accessToken}`,
29
37
  };
38
+ this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
39
+ }
40
+ // Base64 media must be uploaded to WhatsApp's own media store first — messages
41
+ // reference it by the returned media ID, they can't carry bytes inline.
42
+ async uploadMedia(content, contentType, filename) {
43
+ const formData = new FormData();
44
+ formData.append("messaging_product", "whatsapp");
45
+ const buffer = Buffer.from(content, "base64");
46
+ formData.append("file", new Blob([buffer], { type: contentType }), filename ?? "file");
47
+ const response = await fetch(`${this.baseUrl}/${this.phoneNumberId}/media`, {
48
+ method: "POST",
49
+ headers: { Authorization: this.headers.Authorization ?? "" },
50
+ body: formData,
51
+ dispatcher: this.dispatcher,
52
+ });
53
+ if (!response.ok) {
54
+ throw new Error(`WhatsApp media upload error (${response.status}): ${await response.text()}`);
55
+ }
56
+ return whatsappMediaUploadSchema.parse(await response.json()).id;
30
57
  }
31
- async sendMessage(to, text) {
32
- if (!to || !text) {
33
- throw new Error("Both 'to' and 'text' parameters are required");
58
+ async sendMessage(to, text, media, mediaKind = "image") {
59
+ if (!to) {
60
+ throw new Error("'to' parameter is required");
34
61
  }
35
62
  if (!/^\+?[1-9]\d{1,14}$/.test(to)) {
36
63
  throw new Error("Invalid phone number format");
37
64
  }
38
- const body = {
39
- messaging_product: "whatsapp",
40
- to,
41
- type: "text",
42
- text: { body: text },
43
- };
65
+ let body;
66
+ if (media) {
67
+ const ref = isHttpUrl(media.media)
68
+ ? { link: media.media }
69
+ : {
70
+ id: await this.uploadMedia(media.media, media.contentType ?? "application/octet-stream", media.filename),
71
+ };
72
+ body = {
73
+ messaging_product: "whatsapp",
74
+ to,
75
+ type: mediaKind,
76
+ [mediaKind]: {
77
+ ...ref,
78
+ ...(mediaKind === "document"
79
+ ? { caption: text, filename: media.filename }
80
+ : { caption: text }),
81
+ },
82
+ };
83
+ }
84
+ else {
85
+ if (!text)
86
+ throw new Error("'text' is required when no media is provided");
87
+ body = {
88
+ messaging_product: "whatsapp",
89
+ to,
90
+ type: "text",
91
+ text: { body: text },
92
+ };
93
+ }
44
94
  return fetchJson(`${this.baseUrl}/${this.phoneNumberId}/messages`, {
45
95
  method: "POST",
46
96
  headers: this.headers,
47
97
  body: JSON.stringify(body),
98
+ dispatcher: this.dispatcher,
48
99
  }, whatsappMessageSchema);
49
100
  }
50
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"whatsapp-service.js","sourceRoot":"","sources":["../../src/services/whatsapp-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CAC/C,CAAC,CAAC;AAOH,MAAM,OAAO,eAAe;IACnB,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAClC,aAAa,CAAS;IACtB,OAAO,CAAyB;IAExC,YAAY,WAAiC;QAC5C,MAAM,WAAW,GAAG,WAAW,EAAE,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC5E,MAAM,aAAa,GAClB,WAAW,EAAE,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACxD,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG;YACd,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,WAAW,EAAE;SACtC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,IAAY;QACzC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,IAAI,GAAG;YACZ,iBAAiB,EAAE,UAAU;YAC7B,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SACpB,CAAC;QACF,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,WAAW,EAChD;YACC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC1B,EACD,qBAAqB,CACrB,CAAC;IACH,CAAC;CACD;AAED,IAAI,SAAsC,CAAC;AAC3C,MAAM,UAAU,kBAAkB;IACjC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IAClD,OAAO,SAAS,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"whatsapp-service.js","sourceRoot":"","sources":["../../src/services/whatsapp-service.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,31 @@
1
1
  export interface YouTubeCredentials {
2
2
  accessToken: string;
3
+ proxyUrl?: string;
4
+ }
5
+ export interface YouTubeVideoUpload {
6
+ /** Base64-encoded video bytes. */
7
+ content: string;
8
+ contentType?: string;
9
+ title: string;
10
+ description?: string;
11
+ tags?: string[];
12
+ categoryId?: string;
13
+ privacyStatus?: "public" | "unlisted" | "private";
3
14
  }
4
15
  export declare class YouTubeService {
5
16
  private baseUrl;
6
17
  private headers;
18
+ private dispatcher?;
7
19
  constructor(credentials?: YouTubeCredentials);
20
+ uploadVideo(video: YouTubeVideoUpload): Promise<{
21
+ id?: string | undefined;
22
+ snippet?: {
23
+ title?: string | undefined;
24
+ } | undefined;
25
+ status?: {
26
+ uploadStatus?: string | undefined;
27
+ } | undefined;
28
+ }>;
8
29
  getChannelInfo(channelId?: string): Promise<{
9
30
  items?: {
10
31
  id?: string | undefined;
@@ -2,6 +2,12 @@ import { z } from "zod";
2
2
  import { config } from "../lib/config.js";
3
3
  import { CredentialsError } from "../lib/errors.js";
4
4
  import { fetchJson } from "../lib/http.js";
5
+ import { createProxyDispatcher } from "../lib/proxy.js";
6
+ const videoUploadSchema = z.object({
7
+ id: z.string().optional(),
8
+ snippet: z.object({ title: z.string().optional() }).optional(),
9
+ status: z.object({ uploadStatus: z.string().optional() }).optional(),
10
+ });
5
11
  const channelSchema = z.object({
6
12
  items: z
7
13
  .array(z.object({
@@ -142,6 +148,7 @@ const videoUpdateSchema = z.object({
142
148
  export class YouTubeService {
143
149
  baseUrl = config.youtube.baseUrl;
144
150
  headers;
151
+ dispatcher;
145
152
  constructor(credentials) {
146
153
  const accessToken = credentials?.accessToken ?? config.youtube.accessToken;
147
154
  if (!accessToken) {
@@ -151,13 +158,46 @@ export class YouTubeService {
151
158
  "Content-Type": "application/json",
152
159
  Authorization: `Bearer ${accessToken}`,
153
160
  };
161
+ this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
162
+ }
163
+ // Multipart (not resumable) upload — appropriate here since video bytes arrive as
164
+ // a single base64 MCP tool argument rather than a large local file needing chunking.
165
+ async uploadVideo(video) {
166
+ const boundary = `smcp_${Date.now()}_${Math.random().toString(36).slice(2)}`;
167
+ const metadata = {
168
+ snippet: {
169
+ title: video.title,
170
+ description: video.description ?? "",
171
+ tags: video.tags,
172
+ categoryId: video.categoryId ?? "22",
173
+ },
174
+ status: { privacyStatus: video.privacyStatus ?? "unlisted" },
175
+ };
176
+ const videoBuffer = Buffer.from(video.content, "base64");
177
+ const preamble = Buffer.from(`--${boundary}\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n${JSON.stringify(metadata)}\r\n--${boundary}\r\nContent-Type: ${video.contentType ?? "video/*"}\r\n\r\n`, "utf8");
178
+ const closing = Buffer.from(`\r\n--${boundary}--`, "utf8");
179
+ const body = Buffer.concat([preamble, videoBuffer, closing]);
180
+ const uploadUrl = `${this.baseUrl.replace("/youtube/v3", "/upload/youtube/v3")}/videos?uploadType=multipart&part=snippet,status`;
181
+ const response = await fetch(uploadUrl, {
182
+ method: "POST",
183
+ headers: {
184
+ Authorization: this.headers.Authorization ?? "",
185
+ "Content-Type": `multipart/related; boundary=${boundary}`,
186
+ },
187
+ body,
188
+ dispatcher: this.dispatcher,
189
+ });
190
+ if (!response.ok) {
191
+ throw new Error(`YouTube upload error (${response.status}): ${await response.text()}`);
192
+ }
193
+ return videoUploadSchema.parse(await response.json());
154
194
  }
155
195
  async getChannelInfo(channelId) {
156
196
  const params = new URLSearchParams({
157
197
  part: "snippet,statistics",
158
198
  ...(channelId ? { id: channelId } : { mine: "true" }),
159
199
  });
160
- return fetchJson(`${this.baseUrl}/channels?${params}`, { method: "GET", headers: this.headers }, channelSchema);
200
+ return fetchJson(`${this.baseUrl}/channels?${params}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, channelSchema);
161
201
  }
162
202
  async searchVideos(query, maxResults = 10, pageToken) {
163
203
  const params = new URLSearchParams({
@@ -167,14 +207,14 @@ export class YouTubeService {
167
207
  maxResults: String(maxResults),
168
208
  ...(pageToken ? { pageToken } : {}),
169
209
  });
170
- return fetchJson(`${this.baseUrl}/search?${params}`, { method: "GET", headers: this.headers }, searchSchema);
210
+ return fetchJson(`${this.baseUrl}/search?${params}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, searchSchema);
171
211
  }
172
212
  async getVideoInfo(videoId) {
173
213
  const params = new URLSearchParams({
174
214
  part: "snippet,statistics,status",
175
215
  id: videoId,
176
216
  });
177
- return fetchJson(`${this.baseUrl}/videos?${params}`, { method: "GET", headers: this.headers }, videoSchema);
217
+ return fetchJson(`${this.baseUrl}/videos?${params}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, videoSchema);
178
218
  }
179
219
  async listChannelVideos(channelId, maxResults = 10, pageToken) {
180
220
  const params = new URLSearchParams({
@@ -185,7 +225,7 @@ export class YouTubeService {
185
225
  maxResults: String(maxResults),
186
226
  ...(pageToken ? { pageToken } : {}),
187
227
  });
188
- return fetchJson(`${this.baseUrl}/search?${params}`, { method: "GET", headers: this.headers }, searchSchema);
228
+ return fetchJson(`${this.baseUrl}/search?${params}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, searchSchema);
189
229
  }
190
230
  async getComments(videoId, maxResults = 20) {
191
231
  const params = new URLSearchParams({
@@ -194,7 +234,7 @@ export class YouTubeService {
194
234
  maxResults: String(maxResults),
195
235
  order: "relevance",
196
236
  });
197
- return fetchJson(`${this.baseUrl}/commentThreads?${params}`, { method: "GET", headers: this.headers }, commentThreadSchema);
237
+ return fetchJson(`${this.baseUrl}/commentThreads?${params}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, commentThreadSchema);
198
238
  }
199
239
  async postComment(videoId, text) {
200
240
  const body = {
@@ -206,7 +246,12 @@ export class YouTubeService {
206
246
  },
207
247
  };
208
248
  const params = new URLSearchParams({ part: "snippet" });
209
- return fetchJson(`${this.baseUrl}/commentThreads?${params}`, { method: "POST", headers: this.headers, body: JSON.stringify(body) }, commentInsertSchema);
249
+ return fetchJson(`${this.baseUrl}/commentThreads?${params}`, {
250
+ method: "POST",
251
+ headers: this.headers,
252
+ body: JSON.stringify(body),
253
+ dispatcher: this.dispatcher,
254
+ }, commentInsertSchema);
210
255
  }
211
256
  async updateVideo(videoId, title, description, tags, categoryId = "22") {
212
257
  const body = {
@@ -219,7 +264,12 @@ export class YouTubeService {
219
264
  },
220
265
  };
221
266
  const params = new URLSearchParams({ part: "snippet" });
222
- return fetchJson(`${this.baseUrl}/videos?${params}`, { method: "PUT", headers: this.headers, body: JSON.stringify(body) }, videoUpdateSchema);
267
+ return fetchJson(`${this.baseUrl}/videos?${params}`, {
268
+ method: "PUT",
269
+ headers: this.headers,
270
+ body: JSON.stringify(body),
271
+ dispatcher: this.dispatcher,
272
+ }, videoUpdateSchema);
223
273
  }
224
274
  }
225
275
  let _instance;
@@ -1 +1 @@
1
- {"version":3,"file":"youtube-service.js","sourceRoot":"","sources":["../../src/services/youtube-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC;SACN,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,OAAO,EAAE,CAAC;aACR,MAAM,CAAC;YACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,UAAU,EAAE,CAAC;iBACX,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;aACjD,CAAC;iBACD,QAAQ,EAAE;SACZ,CAAC;aACD,QAAQ,EAAE;QACZ,UAAU,EAAE,CAAC;aACX,MAAM,CAAC;YACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACjC,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC,CACF;SACA,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC;SACN,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,EAAE,EAAE,CAAC;aACH,MAAM,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAChC,CAAC;aACD,QAAQ,EAAE;QACZ,OAAO,EAAE,CAAC;aACR,MAAM,CAAC;YACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC,CACF;SACA,QAAQ,EAAE;IACZ,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC;SACT,MAAM,CAAC;QACP,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,KAAK,EAAE,CAAC;SACN,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,OAAO,EAAE,CAAC;aACR,MAAM,CAAC;YACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACnC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACjC,CAAC;aACD,QAAQ,EAAE;QACZ,UAAU,EAAE,CAAC;aACX,MAAM,CAAC;YACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC,CAAC;aACD,QAAQ,EAAE;QACZ,MAAM,EAAE,CAAC;aACP,MAAM,CAAC;YACP,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACpC,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC,CACF;SACA,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC;SACN,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,OAAO,EAAE,CAAC;aACR,MAAM,CAAC;YACP,eAAe,EAAE,CAAC;iBAChB,MAAM,CAAC;gBACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACzB,OAAO,EAAE,CAAC;qBACR,MAAM,CAAC;oBACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBAClC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;iBAClC,CAAC;qBACD,QAAQ,EAAE;aACZ,CAAC;iBACD,QAAQ,EAAE;YACZ,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACtC,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC,CACF;SACA,QAAQ,EAAE;IACZ,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,OAAO,EAAE,CAAC;SACR,MAAM,CAAC;QACP,eAAe,EAAE,CAAC;aAChB,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;iBACR,MAAM,CAAC;gBACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAClC,CAAC;iBACD,QAAQ,EAAE;SACZ,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,OAAO,EAAE,CAAC;SACR,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACpC,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC;AAMH,MAAM,OAAO,cAAc;IAClB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IACjC,OAAO,CAAyB;IAExC,YAAY,WAAgC;QAC3C,MAAM,WAAW,GAAG,WAAW,EAAE,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAC3E,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,OAAO,GAAG;YACd,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,WAAW,EAAE;SACtC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAkB;QACtC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,oBAAoB;YAC1B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SACrD,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,aAAa,MAAM,EAAE,EACpC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EACxC,aAAa,CACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,UAAU,GAAG,EAAE,EAAE,SAAkB;QACpE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,SAAS;YACf,CAAC,EAAE,KAAK;YACR,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;YAC9B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnC,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,WAAW,MAAM,EAAE,EAClC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EACxC,YAAY,CACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe;QACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,2BAA2B;YACjC,EAAE,EAAE,OAAO;SACX,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,WAAW,MAAM,EAAE,EAClC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EACxC,WAAW,CACX,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CACtB,SAAiB,EACjB,UAAU,GAAG,EAAE,EACf,SAAkB;QAElB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,SAAS;YACf,SAAS;YACT,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;YAC9B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnC,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,WAAW,MAAM,EAAE,EAClC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EACxC,YAAY,CACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,UAAU,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,SAAS;YACf,OAAO;YACP,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;YAC9B,KAAK,EAAE,WAAW;SAClB,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,mBAAmB,MAAM,EAAE,EAC1C,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EACxC,mBAAmB,CACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,IAAY;QAC9C,MAAM,IAAI,GAAG;YACZ,OAAO,EAAE;gBACR,OAAO;gBACP,eAAe,EAAE;oBAChB,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;iBAC/B;aACD;SACD,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACxD,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,mBAAmB,MAAM,EAAE,EAC1C,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EACrE,mBAAmB,CACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAChB,OAAe,EACf,KAAa,EACb,WAAmB,EACnB,IAAe,EACf,UAAU,GAAG,IAAI;QAEjB,MAAM,IAAI,GAAG;YACZ,EAAE,EAAE,OAAO;YACX,OAAO,EAAE;gBACR,KAAK;gBACL,WAAW;gBACX,UAAU;gBACV,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzB;SACD,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACxD,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,WAAW,MAAM,EAAE,EAClC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EACpE,iBAAiB,CACjB,CAAC;IACH,CAAC;CACD;AAED,IAAI,SAAqC,CAAC;AAC1C,MAAM,UAAU,iBAAiB;IAChC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;IACjD,OAAO,SAAS,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"youtube-service.js","sourceRoot":"","sources":["../../src/services/youtube-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9D,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;CACpE,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC;SACN,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,OAAO,EAAE,CAAC;aACR,MAAM,CAAC;YACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,UAAU,EAAE,CAAC;iBACX,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;aACjD,CAAC;iBACD,QAAQ,EAAE;SACZ,CAAC;aACD,QAAQ,EAAE;QACZ,UAAU,EAAE,CAAC;aACX,MAAM,CAAC;YACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACjC,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC,CACF;SACA,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC;SACN,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,EAAE,EAAE,CAAC;aACH,MAAM,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAChC,CAAC;aACD,QAAQ,EAAE;QACZ,OAAO,EAAE,CAAC;aACR,MAAM,CAAC;YACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC,CACF;SACA,QAAQ,EAAE;IACZ,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC;SACT,MAAM,CAAC;QACP,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,KAAK,EAAE,CAAC;SACN,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,OAAO,EAAE,CAAC;aACR,MAAM,CAAC;YACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACnC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACjC,CAAC;aACD,QAAQ,EAAE;QACZ,UAAU,EAAE,CAAC;aACX,MAAM,CAAC;YACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC,CAAC;aACD,QAAQ,EAAE;QACZ,MAAM,EAAE,CAAC;aACP,MAAM,CAAC;YACP,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACpC,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC,CACF;SACA,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC;SACN,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,OAAO,EAAE,CAAC;aACR,MAAM,CAAC;YACP,eAAe,EAAE,CAAC;iBAChB,MAAM,CAAC;gBACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACzB,OAAO,EAAE,CAAC;qBACR,MAAM,CAAC;oBACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBAClC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;iBAClC,CAAC;qBACD,QAAQ,EAAE;aACZ,CAAC;iBACD,QAAQ,EAAE;YACZ,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACtC,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC,CACF;SACA,QAAQ,EAAE;IACZ,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,OAAO,EAAE,CAAC;SACR,MAAM,CAAC;QACP,eAAe,EAAE,CAAC;aAChB,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;iBACR,MAAM,CAAC;gBACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAClC,CAAC;iBACD,QAAQ,EAAE;SACZ,CAAC;aACD,QAAQ,EAAE;KACZ,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,OAAO,EAAE,CAAC;SACR,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACpC,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC;AAkBH,MAAM,OAAO,cAAc;IAClB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IACjC,OAAO,CAAyB;IAChC,UAAU,CAA4C;IAE9D,YAAY,WAAgC;QAC3C,MAAM,WAAW,GAAG,WAAW,EAAE,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAC3E,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,OAAO,GAAG;YACd,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,WAAW,EAAE;SACtC,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,kFAAkF;IAClF,qFAAqF;IACrF,KAAK,CAAC,WAAW,CAAC,KAAyB;QAC1C,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG;YAChB,OAAO,EAAE;gBACR,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;gBACpC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;aACpC;YACD,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,UAAU,EAAE;SAC5D,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAC3B,KAAK,QAAQ,4DAA4D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,QAAQ,qBAAqB,KAAK,CAAC,WAAW,IAAI,SAAS,UAAU,EAC/K,MAAM,CACN,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,QAAQ,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAE7D,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,kDAAkD,CAAC;QACjI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;YACvC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE;gBAC/C,cAAc,EAAE,+BAA+B,QAAQ,EAAE;aACzD;YACD,IAAI;YACJ,UAAU,EAAE,IAAI,CAAC,UAAU;SACZ,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACd,yBAAyB,QAAQ,CAAC,MAAM,MAAM,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CACrE,CAAC;QACH,CAAC;QACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAkB;QACtC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,oBAAoB;YAC1B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SACrD,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,aAAa,MAAM,EAAE,EACpC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EACrE,aAAa,CACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,UAAU,GAAG,EAAE,EAAE,SAAkB;QACpE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,SAAS;YACf,CAAC,EAAE,KAAK;YACR,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;YAC9B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnC,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,WAAW,MAAM,EAAE,EAClC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EACrE,YAAY,CACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe;QACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,2BAA2B;YACjC,EAAE,EAAE,OAAO;SACX,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,WAAW,MAAM,EAAE,EAClC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EACrE,WAAW,CACX,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CACtB,SAAiB,EACjB,UAAU,GAAG,EAAE,EACf,SAAkB;QAElB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,SAAS;YACf,SAAS;YACT,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;YAC9B,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnC,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,WAAW,MAAM,EAAE,EAClC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EACrE,YAAY,CACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,UAAU,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,IAAI,EAAE,SAAS;YACf,OAAO;YACP,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;YAC9B,KAAK,EAAE,WAAW;SAClB,CAAC,CAAC;QACH,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,mBAAmB,MAAM,EAAE,EAC1C,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EACrE,mBAAmB,CACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,IAAY;QAC9C,MAAM,IAAI,GAAG;YACZ,OAAO,EAAE;gBACR,OAAO;gBACP,eAAe,EAAE;oBAChB,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;iBAC/B;aACD;SACD,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACxD,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,mBAAmB,MAAM,EAAE,EAC1C;YACC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC3B,EACD,mBAAmB,CACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAChB,OAAe,EACf,KAAa,EACb,WAAmB,EACnB,IAAe,EACf,UAAU,GAAG,IAAI;QAEjB,MAAM,IAAI,GAAG;YACZ,EAAE,EAAE,OAAO;YACX,OAAO,EAAE;gBACR,KAAK;gBACL,WAAW;gBACX,UAAU;gBACV,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzB;SACD,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACxD,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,WAAW,MAAM,EAAE,EAClC;YACC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC3B,EACD,iBAAiB,CACjB,CAAC;IACH,CAAC;CACD;AAED,IAAI,SAAqC,CAAC;AAC1C,MAAM,UAAU,iBAAiB;IAChC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;IACjD,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -1,13 +1,23 @@
1
1
  import { z } from "zod";
2
2
  declare const createPostParams: z.ZodObject<{
3
3
  text: z.ZodString;
4
+ images: z.ZodOptional<z.ZodArray<z.ZodObject<{
5
+ content: z.ZodString;
6
+ mimeType: z.ZodString;
7
+ alt: z.ZodOptional<z.ZodString>;
8
+ }, z.core.$strip>>>;
4
9
  }, z.core.$strip>;
5
10
  type CreatePostParams = z.infer<typeof createPostParams>;
6
11
  export declare const createPostTool: {
7
12
  readonly name: "BLUESKY_CREATE_POST";
8
- readonly description: "Create a new post on Bluesky";
13
+ readonly description: "Create a new post on Bluesky, optionally with up to 4 images";
9
14
  readonly parameters: z.ZodObject<{
10
15
  text: z.ZodString;
16
+ images: z.ZodOptional<z.ZodArray<z.ZodObject<{
17
+ content: z.ZodString;
18
+ mimeType: z.ZodString;
19
+ alt: z.ZodOptional<z.ZodString>;
20
+ }, z.core.$strip>>>;
11
21
  }, z.core.$strip>;
12
22
  readonly execute: (params: CreatePostParams) => Promise<string>;
13
23
  };