remote-copilot-mcp 2.2.1 → 2.2.3
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 +1 -1
- package/dist/dispatcher.d.ts.map +1 -1
- package/dist/dispatcher.js +109 -54
- package/dist/dispatcher.js.map +1 -1
- package/dist/index.js +94 -139
- package/dist/index.js.map +1 -1
- package/dist/openai.d.ts +22 -0
- package/dist/openai.d.ts.map +1 -0
- package/dist/openai.js +59 -0
- package/dist/openai.js.map +1 -0
- package/dist/telegram.d.ts +12 -56
- package/dist/telegram.d.ts.map +1 -1
- package/dist/telegram.js +71 -187
- package/dist/telegram.js.map +1 -1
- package/dist/utils.d.ts +31 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +37 -0
- package/dist/utils.js.map +1 -0
- package/package.json +1 -1
package/dist/openai.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI API client for voice services (TTS + Whisper transcription).
|
|
3
|
+
*
|
|
4
|
+
* Separated from telegram.ts to maintain single responsibility:
|
|
5
|
+
* TelegramClient handles Telegram API, this module handles OpenAI API.
|
|
6
|
+
*/
|
|
7
|
+
/** Valid TTS voice names. */
|
|
8
|
+
export const TTS_VOICES = [
|
|
9
|
+
"alloy", "echo", "fable", "onyx", "nova", "shimmer",
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Convert text to speech using OpenAI TTS API.
|
|
13
|
+
* Returns OGG Opus audio suitable for Telegram's sendVoice.
|
|
14
|
+
*/
|
|
15
|
+
export async function textToSpeech(text, apiKey, voice = "nova") {
|
|
16
|
+
const response = await fetch("https://api.openai.com/v1/audio/speech", {
|
|
17
|
+
method: "POST",
|
|
18
|
+
headers: {
|
|
19
|
+
"Content-Type": "application/json",
|
|
20
|
+
Authorization: `Bearer ${apiKey}`,
|
|
21
|
+
},
|
|
22
|
+
body: JSON.stringify({
|
|
23
|
+
model: "tts-1",
|
|
24
|
+
input: text,
|
|
25
|
+
voice,
|
|
26
|
+
response_format: "opus",
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
const errText = await response.text().catch(() => response.statusText);
|
|
31
|
+
throw new Error(`OpenAI TTS failed: ${response.status} ${errText}`);
|
|
32
|
+
}
|
|
33
|
+
return Buffer.from(await response.arrayBuffer());
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Transcribe an audio buffer using OpenAI Whisper API.
|
|
37
|
+
* @param audioBuffer Raw audio content (OGG Opus from Telegram voice messages).
|
|
38
|
+
* @param apiKey OpenAI API key.
|
|
39
|
+
* @returns The transcribed text (empty string if no speech detected).
|
|
40
|
+
*/
|
|
41
|
+
export async function transcribeAudio(audioBuffer, apiKey) {
|
|
42
|
+
// Telegram stores voice as .oga (OGG Opus). Whisper accepts .ogg but
|
|
43
|
+
// not .oga, so we hardcode the extension.
|
|
44
|
+
const formData = new FormData();
|
|
45
|
+
formData.append("file", new Blob([new Uint8Array(audioBuffer)]), "voice.ogg");
|
|
46
|
+
formData.append("model", "whisper-1");
|
|
47
|
+
const response = await fetch("https://api.openai.com/v1/audio/transcriptions", {
|
|
48
|
+
method: "POST",
|
|
49
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
50
|
+
body: formData,
|
|
51
|
+
});
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
const errText = await response.text().catch(() => response.statusText);
|
|
54
|
+
throw new Error(`OpenAI Whisper transcription failed: ${response.status} ${errText}`);
|
|
55
|
+
}
|
|
56
|
+
const result = (await response.json());
|
|
57
|
+
return result.text ?? "";
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;CAC7C,CAAC;AAGX;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,IAAY,EACZ,MAAc,EACd,QAAkB,MAAM;IAExB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,wCAAwC,EAAE;QACnE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,EAAE;SACpC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,IAAI;YACX,KAAK;YACL,eAAe,EAAE,MAAM;SAC1B,CAAC;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,WAAmB,EACnB,MAAc;IAEd,qEAAqE;IACrE,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChC,QAAQ,CAAC,MAAM,CACX,MAAM,EACN,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EACvC,WAAW,CACd,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,gDAAgD,EAChD;QACI,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;QAC9C,IAAI,EAAE,QAAQ;KACjB,CACJ,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACX,wCAAwC,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE,CACvE,CAAC;IACN,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAC;IAC5D,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7B,CAAC"}
|
package/dist/telegram.d.ts
CHANGED
|
@@ -40,38 +40,25 @@ export interface TelegramUpdate {
|
|
|
40
40
|
update_id: number;
|
|
41
41
|
message?: TelegramMessage;
|
|
42
42
|
}
|
|
43
|
-
export interface GetUpdatesResult {
|
|
44
|
-
ok: boolean;
|
|
45
|
-
result: TelegramUpdate[];
|
|
46
|
-
description?: string;
|
|
47
|
-
}
|
|
48
|
-
export interface SendMessageResult {
|
|
49
|
-
ok: boolean;
|
|
50
|
-
result?: TelegramMessage;
|
|
51
|
-
description?: string;
|
|
52
|
-
}
|
|
53
43
|
export interface ForumTopic {
|
|
54
44
|
message_thread_id: number;
|
|
55
45
|
name: string;
|
|
56
46
|
}
|
|
57
|
-
|
|
58
|
-
ok: boolean;
|
|
59
|
-
result?: ForumTopic;
|
|
60
|
-
description?: string;
|
|
61
|
-
}
|
|
62
|
-
export interface TelegramFile {
|
|
47
|
+
interface TelegramFile {
|
|
63
48
|
file_id: string;
|
|
64
49
|
file_path: string;
|
|
65
50
|
}
|
|
66
|
-
export interface GetFileResult {
|
|
67
|
-
ok: boolean;
|
|
68
|
-
result?: TelegramFile;
|
|
69
|
-
description?: string;
|
|
70
|
-
}
|
|
71
51
|
export declare class TelegramClient {
|
|
72
52
|
private readonly token;
|
|
73
53
|
private readonly baseUrl;
|
|
74
54
|
constructor(token: string);
|
|
55
|
+
/** Safely parse a JSON response, returning undefined on failure. */
|
|
56
|
+
private tryParseJson;
|
|
57
|
+
/**
|
|
58
|
+
* Send a media file via multipart/form-data.
|
|
59
|
+
* Shared implementation for sendDocument, sendPhoto, and sendVoice.
|
|
60
|
+
*/
|
|
61
|
+
private sendMedia;
|
|
75
62
|
/**
|
|
76
63
|
* Long-poll for updates.
|
|
77
64
|
* @param offset Only return updates with update_id >= offset.
|
|
@@ -81,13 +68,10 @@ export declare class TelegramClient {
|
|
|
81
68
|
/**
|
|
82
69
|
* Create a topic in a forum supergroup.
|
|
83
70
|
* The bot must be an admin with can_manage_topics right.
|
|
84
|
-
* @returns The created ForumTopic (contains message_thread_id).
|
|
85
71
|
*/
|
|
86
72
|
createForumTopic(chatId: string, name: string): Promise<ForumTopic>;
|
|
87
73
|
/**
|
|
88
74
|
* Send a text message to a chat, optionally scoped to a forum topic thread.
|
|
89
|
-
* @param parseMode Optional parse mode. Telegram accepts "MarkdownV2", "Markdown", or "HTML".
|
|
90
|
-
* @param threadId Optional message_thread_id for forum supergroups.
|
|
91
75
|
*/
|
|
92
76
|
sendMessage(chatId: string, text: string, parseMode?: "MarkdownV2" | "Markdown" | "HTML", threadId?: number): Promise<void>;
|
|
93
77
|
/**
|
|
@@ -103,45 +87,17 @@ export declare class TelegramClient {
|
|
|
103
87
|
}>;
|
|
104
88
|
/**
|
|
105
89
|
* Download a file from Telegram by file_id and return it as base64 with MIME type.
|
|
106
|
-
* Telegram Bot API supports files up to 20 MB.
|
|
107
90
|
*/
|
|
108
91
|
downloadFileAsBase64(fileId: string): Promise<{
|
|
109
92
|
base64: string;
|
|
110
93
|
mimeType: string;
|
|
111
94
|
}>;
|
|
112
|
-
/**
|
|
113
|
-
* Send a document (file) to a chat via multipart/form-data.
|
|
114
|
-
* @param fileBuffer The file content as a Buffer.
|
|
115
|
-
* @param filename The filename to display in Telegram.
|
|
116
|
-
* @param caption Optional caption (plain text).
|
|
117
|
-
* @param threadId Optional message_thread_id for forum supergroups.
|
|
118
|
-
*/
|
|
95
|
+
/** Send a document (file) to a chat. */
|
|
119
96
|
sendDocument(chatId: string, fileBuffer: Buffer, filename: string, caption?: string, threadId?: number): Promise<void>;
|
|
120
|
-
/**
|
|
121
|
-
* Send a photo to a chat via multipart/form-data.
|
|
122
|
-
* @param imageBuffer The image content as a Buffer.
|
|
123
|
-
* @param filename The filename (e.g. "screenshot.png").
|
|
124
|
-
* @param caption Optional caption.
|
|
125
|
-
* @param threadId Optional message_thread_id for forum supergroups.
|
|
126
|
-
*/
|
|
97
|
+
/** Send a photo to a chat. */
|
|
127
98
|
sendPhoto(chatId: string, imageBuffer: Buffer, filename: string, caption?: string, threadId?: number): Promise<void>;
|
|
128
|
-
/**
|
|
129
|
-
* Send a voice message (OGG Opus) to a chat.
|
|
130
|
-
* @param audioBuffer OGG Opus audio content.
|
|
131
|
-
* @param threadId Optional message_thread_id for forum supergroups.
|
|
132
|
-
*/
|
|
99
|
+
/** Send a voice message (OGG Opus) to a chat. */
|
|
133
100
|
sendVoice(chatId: string, audioBuffer: Buffer, threadId?: number): Promise<void>;
|
|
134
|
-
/**
|
|
135
|
-
* Convert text to speech using OpenAI TTS API.
|
|
136
|
-
* Returns OGG Opus audio suitable for Telegram's sendVoice.
|
|
137
|
-
*/
|
|
138
|
-
static textToSpeech(text: string, apiKey: string, voice?: "alloy" | "echo" | "fable" | "onyx" | "nova" | "shimmer"): Promise<Buffer>;
|
|
139
|
-
/**
|
|
140
|
-
* Transcribe a voice message using OpenAI Whisper API.
|
|
141
|
-
* @param fileId Telegram file_id of the voice message.
|
|
142
|
-
* @param apiKey OpenAI API key.
|
|
143
|
-
* @returns The transcribed text.
|
|
144
|
-
*/
|
|
145
|
-
transcribeVoice(fileId: string, apiKey: string): Promise<string>;
|
|
146
101
|
}
|
|
102
|
+
export {};
|
|
147
103
|
//# sourceMappingURL=telegram.d.ts.map
|
package/dist/telegram.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"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"}
|
package/dist/telegram.js
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
* Telegram Bot API client using native fetch.
|
|
3
3
|
* No third-party HTTP client required.
|
|
4
4
|
*/
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Extension → MIME type mapping (used by downloadFileAsBase64)
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
const MIME_MAP = {
|
|
9
|
+
jpg: "image/jpeg",
|
|
10
|
+
jpeg: "image/jpeg",
|
|
11
|
+
png: "image/png",
|
|
12
|
+
gif: "image/gif",
|
|
13
|
+
webp: "image/webp",
|
|
14
|
+
bmp: "image/bmp",
|
|
15
|
+
pdf: "application/pdf",
|
|
16
|
+
txt: "text/plain",
|
|
17
|
+
json: "application/json",
|
|
18
|
+
xml: "application/xml",
|
|
19
|
+
csv: "text/csv",
|
|
20
|
+
zip: "application/zip",
|
|
21
|
+
svg: "image/svg+xml",
|
|
22
|
+
};
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Client
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
5
26
|
export class TelegramClient {
|
|
6
27
|
token;
|
|
7
28
|
baseUrl;
|
|
@@ -9,6 +30,38 @@ export class TelegramClient {
|
|
|
9
30
|
this.token = token;
|
|
10
31
|
this.baseUrl = `https://api.telegram.org/bot${token}`;
|
|
11
32
|
}
|
|
33
|
+
// ── Private helpers ─────────────────────────────────────────────────────
|
|
34
|
+
/** Safely parse a JSON response, returning undefined on failure. */
|
|
35
|
+
async tryParseJson(response) {
|
|
36
|
+
try {
|
|
37
|
+
return (await response.json());
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Send a media file via multipart/form-data.
|
|
45
|
+
* Shared implementation for sendDocument, sendPhoto, and sendVoice.
|
|
46
|
+
*/
|
|
47
|
+
async sendMedia(method, chatId, fieldName, blob, filename, options) {
|
|
48
|
+
const url = `${this.baseUrl}/${method}`;
|
|
49
|
+
const formData = new FormData();
|
|
50
|
+
formData.append("chat_id", chatId);
|
|
51
|
+
formData.append(fieldName, blob, filename);
|
|
52
|
+
if (options?.caption)
|
|
53
|
+
formData.append("caption", options.caption);
|
|
54
|
+
if (options?.threadId !== undefined) {
|
|
55
|
+
formData.append("message_thread_id", String(options.threadId));
|
|
56
|
+
}
|
|
57
|
+
const response = await fetch(url, { method: "POST", body: formData });
|
|
58
|
+
const data = await this.tryParseJson(response);
|
|
59
|
+
if (!response.ok || data?.ok !== true) {
|
|
60
|
+
const description = data?.description ?? response.statusText;
|
|
61
|
+
throw new Error(`Telegram ${method} failed: ${response.status} ${description}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// ── Public API ──────────────────────────────────────────────────────────
|
|
12
65
|
/**
|
|
13
66
|
* Long-poll for updates.
|
|
14
67
|
* @param offset Only return updates with update_id >= offset.
|
|
@@ -19,20 +72,13 @@ export class TelegramClient {
|
|
|
19
72
|
url.searchParams.set("offset", String(offset));
|
|
20
73
|
url.searchParams.set("timeout", String(timeout));
|
|
21
74
|
url.searchParams.set("allowed_updates", JSON.stringify(["message"]));
|
|
22
|
-
// Retry loop: Telegram returns 409 when another getUpdates poller is active
|
|
23
|
-
// (e.g. two VS Code windows with the same bot token). Back off and retry
|
|
24
|
-
// until the other instance releases the lock or the request is aborted.
|
|
25
75
|
const MAX_409_RETRIES = 12;
|
|
26
76
|
const RETRY_DELAY_MS = 5000;
|
|
27
77
|
for (let attempt = 0;; attempt++) {
|
|
28
78
|
const response = await fetch(url.toString(), signal ? { signal } : {});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
catch (parseErr) {
|
|
34
|
-
process.stderr.write(`Failed to parse Telegram getUpdates response: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}\n`);
|
|
35
|
-
data = undefined;
|
|
79
|
+
const data = await this.tryParseJson(response);
|
|
80
|
+
if (data === undefined) {
|
|
81
|
+
process.stderr.write("Failed to parse Telegram getUpdates response.\n");
|
|
36
82
|
}
|
|
37
83
|
// 409 Conflict: another poller is running. Wait and retry.
|
|
38
84
|
if (response.status === 409 && attempt < MAX_409_RETRIES) {
|
|
@@ -54,7 +100,6 @@ export class TelegramClient {
|
|
|
54
100
|
/**
|
|
55
101
|
* Create a topic in a forum supergroup.
|
|
56
102
|
* The bot must be an admin with can_manage_topics right.
|
|
57
|
-
* @returns The created ForumTopic (contains message_thread_id).
|
|
58
103
|
*/
|
|
59
104
|
async createForumTopic(chatId, name) {
|
|
60
105
|
const url = `${this.baseUrl}/createForumTopic`;
|
|
@@ -63,13 +108,7 @@ export class TelegramClient {
|
|
|
63
108
|
headers: { "Content-Type": "application/json" },
|
|
64
109
|
body: JSON.stringify({ chat_id: chatId, name }),
|
|
65
110
|
});
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
data = (await response.json());
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
data = undefined;
|
|
72
|
-
}
|
|
111
|
+
const data = await this.tryParseJson(response);
|
|
73
112
|
if (!response.ok || !data?.ok || !data.result) {
|
|
74
113
|
const description = data?.description ?? response.statusText;
|
|
75
114
|
throw new Error(`Telegram createForumTopic failed: ${description}`);
|
|
@@ -78,38 +117,26 @@ export class TelegramClient {
|
|
|
78
117
|
}
|
|
79
118
|
/**
|
|
80
119
|
* Send a text message to a chat, optionally scoped to a forum topic thread.
|
|
81
|
-
* @param parseMode Optional parse mode. Telegram accepts "MarkdownV2", "Markdown", or "HTML".
|
|
82
|
-
* @param threadId Optional message_thread_id for forum supergroups.
|
|
83
120
|
*/
|
|
84
121
|
async sendMessage(chatId, text, parseMode, threadId) {
|
|
85
122
|
const url = `${this.baseUrl}/sendMessage`;
|
|
86
123
|
const body = { chat_id: chatId, text };
|
|
87
|
-
if (parseMode)
|
|
124
|
+
if (parseMode)
|
|
88
125
|
body.parse_mode = parseMode;
|
|
89
|
-
|
|
90
|
-
if (threadId !== undefined) {
|
|
126
|
+
if (threadId !== undefined)
|
|
91
127
|
body.message_thread_id = threadId;
|
|
92
|
-
}
|
|
93
128
|
const response = await fetch(url, {
|
|
94
129
|
method: "POST",
|
|
95
130
|
headers: { "Content-Type": "application/json" },
|
|
96
131
|
body: JSON.stringify(body),
|
|
97
132
|
});
|
|
98
|
-
|
|
99
|
-
let parseError;
|
|
100
|
-
try {
|
|
101
|
-
data = (await response.json());
|
|
102
|
-
}
|
|
103
|
-
catch (err) {
|
|
104
|
-
parseError = err;
|
|
105
|
-
data = undefined;
|
|
106
|
-
}
|
|
133
|
+
const data = await this.tryParseJson(response);
|
|
107
134
|
if (!response.ok) {
|
|
108
135
|
const description = data?.description ?? response.statusText;
|
|
109
136
|
throw new Error(`Telegram sendMessage failed: ${response.status} ${description}`);
|
|
110
137
|
}
|
|
111
138
|
if (data === undefined) {
|
|
112
|
-
throw new Error(
|
|
139
|
+
throw new Error("Telegram sendMessage failed: response body could not be parsed as JSON");
|
|
113
140
|
}
|
|
114
141
|
if (data.ok !== true) {
|
|
115
142
|
const description = data.description ?? "Unknown Telegram API error";
|
|
@@ -126,13 +153,7 @@ export class TelegramClient {
|
|
|
126
153
|
headers: { "Content-Type": "application/json" },
|
|
127
154
|
body: JSON.stringify({ file_id: fileId }),
|
|
128
155
|
});
|
|
129
|
-
|
|
130
|
-
try {
|
|
131
|
-
data = (await response.json());
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
data = undefined;
|
|
135
|
-
}
|
|
156
|
+
const data = await this.tryParseJson(response);
|
|
136
157
|
if (!response.ok || !data?.ok || !data.result) {
|
|
137
158
|
const description = data?.description ?? response.statusText;
|
|
138
159
|
throw new Error(`Telegram getFile failed: ${description}`);
|
|
@@ -154,163 +175,26 @@ export class TelegramClient {
|
|
|
154
175
|
}
|
|
155
176
|
/**
|
|
156
177
|
* Download a file from Telegram by file_id and return it as base64 with MIME type.
|
|
157
|
-
* Telegram Bot API supports files up to 20 MB.
|
|
158
178
|
*/
|
|
159
179
|
async downloadFileAsBase64(fileId) {
|
|
160
180
|
const { buffer, filePath } = await this.downloadFileAsBuffer(fileId);
|
|
161
|
-
const base64 = buffer.toString("base64");
|
|
162
181
|
const ext = filePath.split(".").pop()?.toLowerCase() ?? "";
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
png: "image/png",
|
|
167
|
-
gif: "image/gif",
|
|
168
|
-
webp: "image/webp",
|
|
169
|
-
bmp: "image/bmp",
|
|
170
|
-
pdf: "application/pdf",
|
|
171
|
-
txt: "text/plain",
|
|
172
|
-
json: "application/json",
|
|
173
|
-
xml: "application/xml",
|
|
174
|
-
csv: "text/csv",
|
|
175
|
-
zip: "application/zip",
|
|
176
|
-
svg: "image/svg+xml",
|
|
182
|
+
return {
|
|
183
|
+
base64: buffer.toString("base64"),
|
|
184
|
+
mimeType: MIME_MAP[ext] ?? "application/octet-stream",
|
|
177
185
|
};
|
|
178
|
-
// Prefer Content-Type from the download response via the stored buffer path.
|
|
179
|
-
const mimeType = mimeMap[ext] ?? "application/octet-stream";
|
|
180
|
-
return { base64, mimeType };
|
|
181
186
|
}
|
|
182
|
-
/**
|
|
183
|
-
* Send a document (file) to a chat via multipart/form-data.
|
|
184
|
-
* @param fileBuffer The file content as a Buffer.
|
|
185
|
-
* @param filename The filename to display in Telegram.
|
|
186
|
-
* @param caption Optional caption (plain text).
|
|
187
|
-
* @param threadId Optional message_thread_id for forum supergroups.
|
|
188
|
-
*/
|
|
187
|
+
/** Send a document (file) to a chat. */
|
|
189
188
|
async sendDocument(chatId, fileBuffer, filename, caption, threadId) {
|
|
190
|
-
|
|
191
|
-
const formData = new FormData();
|
|
192
|
-
formData.append("chat_id", chatId);
|
|
193
|
-
formData.append("document", new Blob([new Uint8Array(fileBuffer)]), filename);
|
|
194
|
-
if (caption)
|
|
195
|
-
formData.append("caption", caption);
|
|
196
|
-
if (threadId !== undefined)
|
|
197
|
-
formData.append("message_thread_id", String(threadId));
|
|
198
|
-
const response = await fetch(url, { method: "POST", body: formData });
|
|
199
|
-
let data;
|
|
200
|
-
try {
|
|
201
|
-
data = (await response.json());
|
|
202
|
-
}
|
|
203
|
-
catch {
|
|
204
|
-
data = undefined;
|
|
205
|
-
}
|
|
206
|
-
if (!response.ok || data?.ok !== true) {
|
|
207
|
-
const description = data?.description ?? response.statusText;
|
|
208
|
-
throw new Error(`Telegram sendDocument failed: ${response.status} ${description}`);
|
|
209
|
-
}
|
|
189
|
+
await this.sendMedia("sendDocument", chatId, "document", new Blob([new Uint8Array(fileBuffer)]), filename, { caption, threadId });
|
|
210
190
|
}
|
|
211
|
-
/**
|
|
212
|
-
* Send a photo to a chat via multipart/form-data.
|
|
213
|
-
* @param imageBuffer The image content as a Buffer.
|
|
214
|
-
* @param filename The filename (e.g. "screenshot.png").
|
|
215
|
-
* @param caption Optional caption.
|
|
216
|
-
* @param threadId Optional message_thread_id for forum supergroups.
|
|
217
|
-
*/
|
|
191
|
+
/** Send a photo to a chat. */
|
|
218
192
|
async sendPhoto(chatId, imageBuffer, filename, caption, threadId) {
|
|
219
|
-
|
|
220
|
-
const formData = new FormData();
|
|
221
|
-
formData.append("chat_id", chatId);
|
|
222
|
-
formData.append("photo", new Blob([new Uint8Array(imageBuffer)]), filename);
|
|
223
|
-
if (caption)
|
|
224
|
-
formData.append("caption", caption);
|
|
225
|
-
if (threadId !== undefined)
|
|
226
|
-
formData.append("message_thread_id", String(threadId));
|
|
227
|
-
const response = await fetch(url, { method: "POST", body: formData });
|
|
228
|
-
let data;
|
|
229
|
-
try {
|
|
230
|
-
data = (await response.json());
|
|
231
|
-
}
|
|
232
|
-
catch {
|
|
233
|
-
data = undefined;
|
|
234
|
-
}
|
|
235
|
-
if (!response.ok || data?.ok !== true) {
|
|
236
|
-
const description = data?.description ?? response.statusText;
|
|
237
|
-
throw new Error(`Telegram sendPhoto failed: ${response.status} ${description}`);
|
|
238
|
-
}
|
|
193
|
+
await this.sendMedia("sendPhoto", chatId, "photo", new Blob([new Uint8Array(imageBuffer)]), filename, { caption, threadId });
|
|
239
194
|
}
|
|
240
|
-
/**
|
|
241
|
-
* Send a voice message (OGG Opus) to a chat.
|
|
242
|
-
* @param audioBuffer OGG Opus audio content.
|
|
243
|
-
* @param threadId Optional message_thread_id for forum supergroups.
|
|
244
|
-
*/
|
|
195
|
+
/** Send a voice message (OGG Opus) to a chat. */
|
|
245
196
|
async sendVoice(chatId, audioBuffer, threadId) {
|
|
246
|
-
|
|
247
|
-
const formData = new FormData();
|
|
248
|
-
formData.append("chat_id", chatId);
|
|
249
|
-
formData.append("voice", new Blob([new Uint8Array(audioBuffer)]), "voice.ogg");
|
|
250
|
-
if (threadId !== undefined)
|
|
251
|
-
formData.append("message_thread_id", String(threadId));
|
|
252
|
-
const response = await fetch(url, { method: "POST", body: formData });
|
|
253
|
-
let data;
|
|
254
|
-
try {
|
|
255
|
-
data = (await response.json());
|
|
256
|
-
}
|
|
257
|
-
catch {
|
|
258
|
-
data = undefined;
|
|
259
|
-
}
|
|
260
|
-
if (!response.ok || data?.ok !== true) {
|
|
261
|
-
const description = data?.description ?? response.statusText;
|
|
262
|
-
throw new Error(`Telegram sendVoice failed: ${response.status} ${description}`);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Convert text to speech using OpenAI TTS API.
|
|
267
|
-
* Returns OGG Opus audio suitable for Telegram's sendVoice.
|
|
268
|
-
*/
|
|
269
|
-
static async textToSpeech(text, apiKey, voice = "nova") {
|
|
270
|
-
const response = await fetch("https://api.openai.com/v1/audio/speech", {
|
|
271
|
-
method: "POST",
|
|
272
|
-
headers: {
|
|
273
|
-
"Content-Type": "application/json",
|
|
274
|
-
Authorization: `Bearer ${apiKey}`,
|
|
275
|
-
},
|
|
276
|
-
body: JSON.stringify({
|
|
277
|
-
model: "tts-1",
|
|
278
|
-
input: text,
|
|
279
|
-
voice,
|
|
280
|
-
response_format: "opus",
|
|
281
|
-
}),
|
|
282
|
-
});
|
|
283
|
-
if (!response.ok) {
|
|
284
|
-
const errText = await response.text().catch(() => response.statusText);
|
|
285
|
-
throw new Error(`OpenAI TTS failed: ${response.status} ${errText}`);
|
|
286
|
-
}
|
|
287
|
-
return Buffer.from(await response.arrayBuffer());
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Transcribe a voice message using OpenAI Whisper API.
|
|
291
|
-
* @param fileId Telegram file_id of the voice message.
|
|
292
|
-
* @param apiKey OpenAI API key.
|
|
293
|
-
* @returns The transcribed text.
|
|
294
|
-
*/
|
|
295
|
-
async transcribeVoice(fileId, apiKey) {
|
|
296
|
-
const { buffer } = await this.downloadFileAsBuffer(fileId);
|
|
297
|
-
// Telegram stores voice as .oga (OGG Opus). Whisper accepts .ogg but
|
|
298
|
-
// not .oga, so we hardcode the extension.
|
|
299
|
-
const filename = "voice.ogg";
|
|
300
|
-
const formData = new FormData();
|
|
301
|
-
formData.append("file", new Blob([new Uint8Array(buffer)]), filename);
|
|
302
|
-
formData.append("model", "whisper-1");
|
|
303
|
-
const response = await fetch("https://api.openai.com/v1/audio/transcriptions", {
|
|
304
|
-
method: "POST",
|
|
305
|
-
headers: { Authorization: `Bearer ${apiKey}` },
|
|
306
|
-
body: formData,
|
|
307
|
-
});
|
|
308
|
-
if (!response.ok) {
|
|
309
|
-
const errText = await response.text().catch(() => response.statusText);
|
|
310
|
-
throw new Error(`OpenAI Whisper transcription failed: ${response.status} ${errText}`);
|
|
311
|
-
}
|
|
312
|
-
const result = (await response.json());
|
|
313
|
-
return result.text ?? "";
|
|
197
|
+
await this.sendMedia("sendVoice", chatId, "voice", new Blob([new Uint8Array(audioBuffer)]), "voice.ogg", { threadId });
|
|
314
198
|
}
|
|
315
199
|
}
|
|
316
200
|
//# sourceMappingURL=telegram.js.map
|
package/dist/telegram.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utility functions.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Extract a human-readable message from an unknown error value.
|
|
6
|
+
*/
|
|
7
|
+
export declare function errorMessage(err: unknown): string;
|
|
8
|
+
/**
|
|
9
|
+
* Build a standard MCP error response object.
|
|
10
|
+
*/
|
|
11
|
+
export declare function errorResult(text: string): {
|
|
12
|
+
content: [{
|
|
13
|
+
type: "text";
|
|
14
|
+
text: string;
|
|
15
|
+
}];
|
|
16
|
+
isError: true;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Build a standard MCP success response object.
|
|
20
|
+
*/
|
|
21
|
+
export declare function successResult(text: string): {
|
|
22
|
+
content: [{
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}];
|
|
26
|
+
};
|
|
27
|
+
/** Image file extensions recognized for photo sending. */
|
|
28
|
+
export declare const IMAGE_EXTENSIONS: Set<string>;
|
|
29
|
+
/** Maximum characters for OpenAI TTS input. */
|
|
30
|
+
export declare const OPENAI_TTS_MAX_CHARS = 4096;
|
|
31
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;IACvC,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACjB,CAEA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IACzC,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7C,CAEA;AAED,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,aAE3B,CAAC;AAEH,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,OAAO,CAAC"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utility functions.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Extract a human-readable message from an unknown error value.
|
|
6
|
+
*/
|
|
7
|
+
export function errorMessage(err) {
|
|
8
|
+
if (err instanceof Error)
|
|
9
|
+
return err.message;
|
|
10
|
+
if (typeof err === "string")
|
|
11
|
+
return err;
|
|
12
|
+
try {
|
|
13
|
+
return JSON.stringify(err);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return String(err);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build a standard MCP error response object.
|
|
21
|
+
*/
|
|
22
|
+
export function errorResult(text) {
|
|
23
|
+
return { content: [{ type: "text", text }], isError: true };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build a standard MCP success response object.
|
|
27
|
+
*/
|
|
28
|
+
export function successResult(text) {
|
|
29
|
+
return { content: [{ type: "text", text }] };
|
|
30
|
+
}
|
|
31
|
+
/** Image file extensions recognized for photo sending. */
|
|
32
|
+
export const IMAGE_EXTENSIONS = new Set([
|
|
33
|
+
"jpg", "jpeg", "png", "gif", "webp",
|
|
34
|
+
]);
|
|
35
|
+
/** Maximum characters for OpenAI TTS input. */
|
|
36
|
+
export const OPENAI_TTS_MAX_CHARS = 4096;
|
|
37
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACrC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IAIpC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IAGtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IACpC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;CACtC,CAAC,CAAC;AAEH,+CAA+C;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC"}
|