@mono-agent/telegram-adapter 0.1.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 +52 -0
- package/dist/adapter.d.ts +111 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +266 -0
- package/dist/adapter.js.map +1 -0
- package/dist/config.d.ts +34 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +69 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/long-poller.d.ts +55 -0
- package/dist/long-poller.d.ts.map +1 -0
- package/dist/long-poller.js +156 -0
- package/dist/long-poller.js.map +1 -0
- package/dist/message-stream.d.ts +54 -0
- package/dist/message-stream.d.ts.map +1 -0
- package/dist/message-stream.js +168 -0
- package/dist/message-stream.js.map +1 -0
- package/dist/start.d.ts +58 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +57 -0
- package/dist/start.js.map +1 -0
- package/dist/telegram-client.d.ts +38 -0
- package/dist/telegram-client.d.ts.map +1 -0
- package/dist/telegram-client.js +183 -0
- package/dist/telegram-client.js.map +1 -0
- package/dist/types.d.ts +66 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# @mono-agent/telegram-adapter
|
|
2
|
+
|
|
3
|
+
## Category
|
|
4
|
+
|
|
5
|
+
Category: `communication`
|
|
6
|
+
|
|
7
|
+
## Responsibility
|
|
8
|
+
|
|
9
|
+
Telegram communication adapter for agent hosts. It provides a Bot API client, long poller, update handler, streamed message edits, cancellation, allowlist enforcement, and Telegram-owned settings helpers.
|
|
10
|
+
|
|
11
|
+
## Install / Usage
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pnpm --filter @mono-agent/telegram-adapter run build
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import {
|
|
19
|
+
TelegramAdapter,
|
|
20
|
+
TelegramBotApiClient,
|
|
21
|
+
TelegramLongPoller,
|
|
22
|
+
loadTelegramAdapterConfig,
|
|
23
|
+
telegramFieldGroup,
|
|
24
|
+
} from "@mono-agent/telegram-adapter";
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Load adapter settings separately from core config, then pass a structural `AgentResponder` from the host or harness. The base responder, stream, response, and cancellation contracts come from `@mono-agent/agent-contracts`.
|
|
28
|
+
|
|
29
|
+
## Public API
|
|
30
|
+
|
|
31
|
+
- `TelegramAdapter`, `TelegramAdapterOptions`
|
|
32
|
+
- `TelegramBotApiClient`, `TelegramApiError`
|
|
33
|
+
- `TelegramLongPoller`
|
|
34
|
+
- `TelegramMessageStream`, `splitTelegramText`
|
|
35
|
+
- `loadTelegramAdapterConfig`, `redactTelegramAdapterConfig`, `telegramFieldGroup`
|
|
36
|
+
- Telegram Bot API, request/response, and config types
|
|
37
|
+
|
|
38
|
+
## Dependency Boundary
|
|
39
|
+
|
|
40
|
+
This adapter depends only on shared contracts and settings primitives inside the workspace. It does not depend on the harness, operator console, core config, memory, runtime package, or other adapters. Hosts compose those pieces outside the adapter.
|
|
41
|
+
|
|
42
|
+
## What This Package Does Not Own
|
|
43
|
+
|
|
44
|
+
It does not build prompts, run models, store memory, serve UI, manage provider credentials, or decide core runtime settings.
|
|
45
|
+
|
|
46
|
+
## Verification
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pnpm --filter @mono-agent/telegram-adapter run build
|
|
50
|
+
pnpm --filter @mono-agent/telegram-adapter run typecheck
|
|
51
|
+
pnpm --filter @mono-agent/telegram-adapter run test
|
|
52
|
+
```
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { type AgentRequestBase, type AgentResponder as SharedAgentResponder, type AgentResponse } from "@mono-agent/agent-contracts";
|
|
2
|
+
import { type AgentMessageStream, type TelegramMessageStreamLogger } from "./message-stream.js";
|
|
3
|
+
import type { TelegramBotApi, TelegramChatId, TelegramUpdate } from "./types.js";
|
|
4
|
+
export interface AgentRequest extends AgentRequestBase {
|
|
5
|
+
conversationId: string;
|
|
6
|
+
chatId: TelegramChatId;
|
|
7
|
+
messageId: number;
|
|
8
|
+
updateId: number;
|
|
9
|
+
userId?: number;
|
|
10
|
+
username?: string;
|
|
11
|
+
text: string;
|
|
12
|
+
abortSignal: AbortSignal;
|
|
13
|
+
metadata: {
|
|
14
|
+
telegram: TelegramRequestMetadata;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface TelegramRequestMetadata {
|
|
19
|
+
updateId: number;
|
|
20
|
+
chat: {
|
|
21
|
+
id: TelegramChatId;
|
|
22
|
+
type?: string;
|
|
23
|
+
title?: string;
|
|
24
|
+
username?: string;
|
|
25
|
+
};
|
|
26
|
+
message: {
|
|
27
|
+
id: number;
|
|
28
|
+
date?: number;
|
|
29
|
+
};
|
|
30
|
+
from?: {
|
|
31
|
+
id: number;
|
|
32
|
+
isBot?: boolean;
|
|
33
|
+
username?: string;
|
|
34
|
+
firstName?: string;
|
|
35
|
+
lastName?: string;
|
|
36
|
+
languageCode?: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export type { AgentResponse };
|
|
40
|
+
export type AgentResponder = SharedAgentResponder<AgentRequest, AgentMessageStream, AgentResponse>;
|
|
41
|
+
export interface TelegramAdapterMessages {
|
|
42
|
+
welcomeText?: string;
|
|
43
|
+
helpText?: string;
|
|
44
|
+
busyText?: string;
|
|
45
|
+
unauthorizedText?: string;
|
|
46
|
+
cancelledText?: string;
|
|
47
|
+
errorText?: string;
|
|
48
|
+
unsupportedText?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface TelegramAdapterStreamOptions {
|
|
51
|
+
initialStatusText?: string;
|
|
52
|
+
editDebounceMs?: number;
|
|
53
|
+
maxMessageChars?: number;
|
|
54
|
+
}
|
|
55
|
+
export interface TelegramAdapterLogger extends TelegramMessageStreamLogger {
|
|
56
|
+
info?(message: string, metadata?: Record<string, unknown>): void;
|
|
57
|
+
}
|
|
58
|
+
export interface TelegramAdapterOptions {
|
|
59
|
+
api: TelegramBotApi;
|
|
60
|
+
responder: AgentResponder;
|
|
61
|
+
allowedChatIds?: TelegramChatId[];
|
|
62
|
+
allowAllChats?: boolean;
|
|
63
|
+
stream?: TelegramAdapterStreamOptions;
|
|
64
|
+
messages?: TelegramAdapterMessages;
|
|
65
|
+
logger?: TelegramAdapterLogger;
|
|
66
|
+
}
|
|
67
|
+
export type TelegramUpdateHandlingResult = {
|
|
68
|
+
kind: "handled";
|
|
69
|
+
updateId: number;
|
|
70
|
+
chatId: TelegramChatId;
|
|
71
|
+
action: "command" | "responded";
|
|
72
|
+
command?: "start" | "help";
|
|
73
|
+
metadata?: Record<string, unknown>;
|
|
74
|
+
} | {
|
|
75
|
+
kind: "ignored";
|
|
76
|
+
updateId: number;
|
|
77
|
+
reason: "non_message_update" | "unsupported_message" | "empty_text";
|
|
78
|
+
chatId?: TelegramChatId;
|
|
79
|
+
} | {
|
|
80
|
+
kind: "unauthorized";
|
|
81
|
+
updateId: number;
|
|
82
|
+
chatId: TelegramChatId;
|
|
83
|
+
} | {
|
|
84
|
+
kind: "busy";
|
|
85
|
+
updateId: number;
|
|
86
|
+
chatId: TelegramChatId;
|
|
87
|
+
} | {
|
|
88
|
+
kind: "cancelled";
|
|
89
|
+
updateId: number;
|
|
90
|
+
chatId: TelegramChatId;
|
|
91
|
+
} | {
|
|
92
|
+
kind: "error";
|
|
93
|
+
updateId: number;
|
|
94
|
+
chatId?: TelegramChatId;
|
|
95
|
+
error: unknown;
|
|
96
|
+
};
|
|
97
|
+
export declare class TelegramAdapter {
|
|
98
|
+
private readonly api;
|
|
99
|
+
private readonly responder;
|
|
100
|
+
private readonly allowAllChats;
|
|
101
|
+
private readonly allowedChatIds;
|
|
102
|
+
private readonly streamOptions;
|
|
103
|
+
private readonly messages;
|
|
104
|
+
private readonly logger;
|
|
105
|
+
private readonly activeRuns;
|
|
106
|
+
constructor(options: TelegramAdapterOptions);
|
|
107
|
+
handleUpdate(update: TelegramUpdate): Promise<TelegramUpdateHandlingResult>;
|
|
108
|
+
private respondToMessage;
|
|
109
|
+
private isAuthorized;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter.js
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { isAgentResponseCancelledError, } from "@mono-agent/agent-contracts";
|
|
2
|
+
import { TelegramMessageStream, } from "./message-stream.js";
|
|
3
|
+
const DEFAULT_MESSAGES = {
|
|
4
|
+
welcomeText: "Hello! Send me a text message and I will pass it to the configured agent.",
|
|
5
|
+
helpText: "Send a text message to talk to the agent. Use /cancel to stop the current response.",
|
|
6
|
+
busyText: "I am still working on your previous message. Use /cancel to stop it.",
|
|
7
|
+
unauthorizedText: "This Telegram chat is not authorized to use this bot.",
|
|
8
|
+
cancelledText: "Cancelled.",
|
|
9
|
+
errorText: "The agent failed while processing your message.",
|
|
10
|
+
unsupportedText: "I can only handle text messages in this adapter for now.",
|
|
11
|
+
};
|
|
12
|
+
export class TelegramAdapter {
|
|
13
|
+
api;
|
|
14
|
+
responder;
|
|
15
|
+
allowAllChats;
|
|
16
|
+
allowedChatIds;
|
|
17
|
+
streamOptions;
|
|
18
|
+
messages;
|
|
19
|
+
logger;
|
|
20
|
+
activeRuns = new Map();
|
|
21
|
+
constructor(options) {
|
|
22
|
+
this.api = options.api;
|
|
23
|
+
this.responder = options.responder;
|
|
24
|
+
this.allowAllChats = options.allowAllChats === true;
|
|
25
|
+
this.allowedChatIds = new Set(options.allowedChatIds?.map((chatId) => String(chatId)) ?? []);
|
|
26
|
+
this.streamOptions = options.stream ?? {};
|
|
27
|
+
this.messages = { ...DEFAULT_MESSAGES, ...options.messages };
|
|
28
|
+
this.logger = options.logger;
|
|
29
|
+
if (!this.allowAllChats && this.allowedChatIds.size === 0) {
|
|
30
|
+
throw new TypeError("TelegramAdapter requires allowedChatIds or allowAllChats: true.");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async handleUpdate(update) {
|
|
34
|
+
const message = update.message;
|
|
35
|
+
if (message === undefined) {
|
|
36
|
+
return { kind: "ignored", updateId: update.update_id, reason: "non_message_update" };
|
|
37
|
+
}
|
|
38
|
+
const chatId = message.chat.id;
|
|
39
|
+
if (!this.isAuthorized(chatId)) {
|
|
40
|
+
await this.api.sendMessage({
|
|
41
|
+
chat_id: chatId,
|
|
42
|
+
text: this.messages.unauthorizedText,
|
|
43
|
+
});
|
|
44
|
+
return { kind: "unauthorized", updateId: update.update_id, chatId };
|
|
45
|
+
}
|
|
46
|
+
const text = message.text;
|
|
47
|
+
if (typeof text !== "string") {
|
|
48
|
+
await this.api.sendMessage({
|
|
49
|
+
chat_id: chatId,
|
|
50
|
+
text: this.messages.unsupportedText,
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
kind: "ignored",
|
|
54
|
+
updateId: update.update_id,
|
|
55
|
+
chatId,
|
|
56
|
+
reason: "unsupported_message",
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const trimmedText = text.trim();
|
|
60
|
+
if (trimmedText.length === 0) {
|
|
61
|
+
await this.api.sendMessage({
|
|
62
|
+
chat_id: chatId,
|
|
63
|
+
text: this.messages.unsupportedText,
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
kind: "ignored",
|
|
67
|
+
updateId: update.update_id,
|
|
68
|
+
chatId,
|
|
69
|
+
reason: "empty_text",
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const command = parseCommand(trimmedText);
|
|
73
|
+
if (command?.name === "start") {
|
|
74
|
+
await this.api.sendMessage({ chat_id: chatId, text: this.messages.welcomeText });
|
|
75
|
+
return {
|
|
76
|
+
kind: "handled",
|
|
77
|
+
updateId: update.update_id,
|
|
78
|
+
chatId,
|
|
79
|
+
action: "command",
|
|
80
|
+
command: "start",
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (command?.name === "help") {
|
|
84
|
+
await this.api.sendMessage({ chat_id: chatId, text: this.messages.helpText });
|
|
85
|
+
return {
|
|
86
|
+
kind: "handled",
|
|
87
|
+
updateId: update.update_id,
|
|
88
|
+
chatId,
|
|
89
|
+
action: "command",
|
|
90
|
+
command: "help",
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const runKey = String(chatId);
|
|
94
|
+
const activeRun = this.activeRuns.get(runKey);
|
|
95
|
+
if (command?.name === "cancel") {
|
|
96
|
+
if (activeRun !== undefined) {
|
|
97
|
+
activeRun.controller.abort(new Error("Cancelled by Telegram user."));
|
|
98
|
+
}
|
|
99
|
+
await this.api.sendMessage({
|
|
100
|
+
chat_id: chatId,
|
|
101
|
+
text: this.messages.cancelledText,
|
|
102
|
+
});
|
|
103
|
+
return { kind: "cancelled", updateId: update.update_id, chatId };
|
|
104
|
+
}
|
|
105
|
+
if (activeRun !== undefined) {
|
|
106
|
+
await this.api.sendMessage({ chat_id: chatId, text: this.messages.busyText });
|
|
107
|
+
return { kind: "busy", updateId: update.update_id, chatId };
|
|
108
|
+
}
|
|
109
|
+
return await this.respondToMessage(update, message, trimmedText, runKey);
|
|
110
|
+
}
|
|
111
|
+
async respondToMessage(update, message, text, runKey) {
|
|
112
|
+
const chatId = message.chat.id;
|
|
113
|
+
const controller = new AbortController();
|
|
114
|
+
const activeRun = { controller };
|
|
115
|
+
this.activeRuns.set(runKey, activeRun);
|
|
116
|
+
const telegramStreamOptions = {
|
|
117
|
+
api: this.api,
|
|
118
|
+
chatId,
|
|
119
|
+
replyToMessageId: message.message_id,
|
|
120
|
+
};
|
|
121
|
+
if (this.streamOptions.initialStatusText !== undefined) {
|
|
122
|
+
telegramStreamOptions.initialStatusText = this.streamOptions.initialStatusText;
|
|
123
|
+
}
|
|
124
|
+
if (this.streamOptions.editDebounceMs !== undefined) {
|
|
125
|
+
telegramStreamOptions.editDebounceMs = this.streamOptions.editDebounceMs;
|
|
126
|
+
}
|
|
127
|
+
if (this.streamOptions.maxMessageChars !== undefined) {
|
|
128
|
+
telegramStreamOptions.maxMessageChars = this.streamOptions.maxMessageChars;
|
|
129
|
+
}
|
|
130
|
+
if (this.logger !== undefined) {
|
|
131
|
+
telegramStreamOptions.logger = this.logger;
|
|
132
|
+
}
|
|
133
|
+
const stream = new TelegramMessageStream(telegramStreamOptions);
|
|
134
|
+
try {
|
|
135
|
+
await stream.status(this.streamOptions.initialStatusText ?? "Thinking…");
|
|
136
|
+
if (controller.signal.aborted) {
|
|
137
|
+
await stream.finish(this.messages.cancelledText);
|
|
138
|
+
return { kind: "cancelled", updateId: update.update_id, chatId };
|
|
139
|
+
}
|
|
140
|
+
const request = buildAgentRequest(update, message, text, controller.signal);
|
|
141
|
+
const response = await this.responder.respond(request, stream);
|
|
142
|
+
if (controller.signal.aborted) {
|
|
143
|
+
await stream.finish(this.messages.cancelledText);
|
|
144
|
+
return { kind: "cancelled", updateId: update.update_id, chatId };
|
|
145
|
+
}
|
|
146
|
+
await stream.finish(response.text);
|
|
147
|
+
const result = {
|
|
148
|
+
kind: "handled",
|
|
149
|
+
updateId: update.update_id,
|
|
150
|
+
chatId,
|
|
151
|
+
action: "responded",
|
|
152
|
+
};
|
|
153
|
+
if (response.metadata !== undefined) {
|
|
154
|
+
result.metadata = response.metadata;
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (controller.signal.aborted || isAgentResponseCancelledError(error)) {
|
|
160
|
+
await finishSafely(stream, this.messages.cancelledText, this.logger);
|
|
161
|
+
return { kind: "cancelled", updateId: update.update_id, chatId };
|
|
162
|
+
}
|
|
163
|
+
this.logger?.error?.("Telegram adapter responder failed.", {
|
|
164
|
+
error: error instanceof Error ? error.message : String(error),
|
|
165
|
+
});
|
|
166
|
+
await finishSafely(stream, this.messages.errorText, this.logger);
|
|
167
|
+
return { kind: "error", updateId: update.update_id, chatId, error };
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
if (this.activeRuns.get(runKey) === activeRun) {
|
|
171
|
+
this.activeRuns.delete(runKey);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
isAuthorized(chatId) {
|
|
176
|
+
return this.allowAllChats || this.allowedChatIds.has(String(chatId));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function buildAgentRequest(update, message, text, abortSignal) {
|
|
180
|
+
const from = metadataFromUser(message.from);
|
|
181
|
+
const request = {
|
|
182
|
+
conversationId: `telegram:${String(message.chat.id)}`,
|
|
183
|
+
chatId: message.chat.id,
|
|
184
|
+
messageId: message.message_id,
|
|
185
|
+
updateId: update.update_id,
|
|
186
|
+
text,
|
|
187
|
+
abortSignal,
|
|
188
|
+
metadata: {
|
|
189
|
+
telegram: {
|
|
190
|
+
updateId: update.update_id,
|
|
191
|
+
chat: metadataFromChat(message.chat),
|
|
192
|
+
message: metadataFromMessage(message),
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
if (message.from?.id !== undefined) {
|
|
197
|
+
request.userId = message.from.id;
|
|
198
|
+
}
|
|
199
|
+
if (message.from?.username !== undefined) {
|
|
200
|
+
request.username = message.from.username;
|
|
201
|
+
}
|
|
202
|
+
if (from !== undefined) {
|
|
203
|
+
request.metadata.telegram.from = from;
|
|
204
|
+
}
|
|
205
|
+
return request;
|
|
206
|
+
}
|
|
207
|
+
function metadataFromChat(messageChat) {
|
|
208
|
+
const chat = { id: messageChat.id };
|
|
209
|
+
if (messageChat.type !== undefined) {
|
|
210
|
+
chat.type = messageChat.type;
|
|
211
|
+
}
|
|
212
|
+
if (messageChat.title !== undefined) {
|
|
213
|
+
chat.title = messageChat.title;
|
|
214
|
+
}
|
|
215
|
+
if (messageChat.username !== undefined) {
|
|
216
|
+
chat.username = messageChat.username;
|
|
217
|
+
}
|
|
218
|
+
return chat;
|
|
219
|
+
}
|
|
220
|
+
function metadataFromMessage(message) {
|
|
221
|
+
const metadata = { id: message.message_id };
|
|
222
|
+
if (message.date !== undefined) {
|
|
223
|
+
metadata.date = message.date;
|
|
224
|
+
}
|
|
225
|
+
return metadata;
|
|
226
|
+
}
|
|
227
|
+
function metadataFromUser(user) {
|
|
228
|
+
if (user === undefined) {
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
const metadata = { id: user.id };
|
|
232
|
+
if (user.is_bot !== undefined) {
|
|
233
|
+
metadata.isBot = user.is_bot;
|
|
234
|
+
}
|
|
235
|
+
if (user.username !== undefined) {
|
|
236
|
+
metadata.username = user.username;
|
|
237
|
+
}
|
|
238
|
+
if (user.first_name !== undefined) {
|
|
239
|
+
metadata.firstName = user.first_name;
|
|
240
|
+
}
|
|
241
|
+
if (user.last_name !== undefined) {
|
|
242
|
+
metadata.lastName = user.last_name;
|
|
243
|
+
}
|
|
244
|
+
if (user.language_code !== undefined) {
|
|
245
|
+
metadata.languageCode = user.language_code;
|
|
246
|
+
}
|
|
247
|
+
return metadata;
|
|
248
|
+
}
|
|
249
|
+
function parseCommand(text) {
|
|
250
|
+
const match = text.match(/^\/([A-Za-z0-9_]+)(?:@[A-Za-z0-9_]+)?(?:\s|$)/u);
|
|
251
|
+
if (match?.[1] === undefined) {
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
return { name: match[1].toLowerCase() };
|
|
255
|
+
}
|
|
256
|
+
async function finishSafely(stream, text, logger) {
|
|
257
|
+
try {
|
|
258
|
+
await stream.finish(text);
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
logger?.error?.("Failed to send Telegram terminal stream message.", {
|
|
262
|
+
error: error instanceof Error ? error.message : String(error),
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FieldGroup, RedactedSecretValue, SettingsJson } from "@mono-agent/settings";
|
|
2
|
+
export interface TelegramAdapterConfig {
|
|
3
|
+
readonly botToken: string;
|
|
4
|
+
readonly allowedChatIds: readonly string[];
|
|
5
|
+
readonly allowAllChats: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface RedactedTelegramAdapterConfig {
|
|
8
|
+
readonly botToken: RedactedSecretValue;
|
|
9
|
+
readonly allowedChatIds: {
|
|
10
|
+
readonly count: number;
|
|
11
|
+
};
|
|
12
|
+
readonly allowAllChats: boolean;
|
|
13
|
+
}
|
|
14
|
+
export type TelegramAdapterConfigErrorCode = "missing_required_config" | "invalid_config";
|
|
15
|
+
export interface TelegramAdapterConfigErrorDetails {
|
|
16
|
+
readonly code?: TelegramAdapterConfigErrorCode;
|
|
17
|
+
readonly env?: string;
|
|
18
|
+
readonly reason?: string;
|
|
19
|
+
readonly [key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
export declare class TelegramAdapterConfigError extends Error {
|
|
22
|
+
readonly code: TelegramAdapterConfigErrorCode;
|
|
23
|
+
readonly details: TelegramAdapterConfigErrorDetails;
|
|
24
|
+
constructor(code: TelegramAdapterConfigErrorCode, message: string, details?: TelegramAdapterConfigErrorDetails);
|
|
25
|
+
}
|
|
26
|
+
export interface LoadTelegramAdapterConfigInput {
|
|
27
|
+
readonly env: Record<string, string | undefined>;
|
|
28
|
+
readonly json?: SettingsJson;
|
|
29
|
+
readonly jsonPath?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare const telegramFieldGroup: FieldGroup;
|
|
32
|
+
export declare function loadTelegramAdapterConfig(input: LoadTelegramAdapterConfigInput): Promise<TelegramAdapterConfig>;
|
|
33
|
+
export declare function redactTelegramAdapterConfig(config: TelegramAdapterConfig): RedactedTelegramAdapterConfig;
|
|
34
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACnB,YAAY,EACb,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,8BAA8B,GACtC,yBAAyB,GACzB,gBAAgB,CAAC;AAErB,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,8BAA8B,CAAC;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,iCAAiC,CAAC;gBAGlD,IAAI,EAAE,8BAA8B,EACpC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iCAAsC;CAOlD;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAcD,eAAO,MAAM,kBAAkB,EAAE,UA4B/B,CAAC;AAEH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,qBAAqB,CAAC,CAwBhC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,qBAAqB,GAC5B,6BAA6B,CAM/B"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { defineFieldGroup, layerJsonOntoEnv, readBoolean, readCsv, readJsonSection, readRequired, readSettingsJson, redactedSecret, } from "@mono-agent/settings";
|
|
2
|
+
export class TelegramAdapterConfigError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
details;
|
|
5
|
+
constructor(code, message, details = {}) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "TelegramAdapterConfigError";
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.details = { ...details, code };
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const missingRequiredConfig = (message, details) => new TelegramAdapterConfigError("missing_required_config", message, details);
|
|
13
|
+
const invalidConfig = (message, details) => new TelegramAdapterConfigError("invalid_config", message, details);
|
|
14
|
+
export const telegramFieldGroup = defineFieldGroup({
|
|
15
|
+
id: "telegram",
|
|
16
|
+
label: "Telegram",
|
|
17
|
+
description: "Optional Telegram adapter configuration. The token is write-only.",
|
|
18
|
+
fields: [
|
|
19
|
+
{
|
|
20
|
+
id: "telegram.botToken",
|
|
21
|
+
label: "Bot token",
|
|
22
|
+
description: "Bot API token. Stored on disk only; never returned to the UI after save.",
|
|
23
|
+
kind: "secret",
|
|
24
|
+
path: ["telegram", "botToken"],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "telegram.allowedChatIds",
|
|
28
|
+
label: "Allowed chat ids",
|
|
29
|
+
description: "Comma-separated list of chat ids the bot will respond to.",
|
|
30
|
+
kind: "csv",
|
|
31
|
+
placeholder: "111111111, 222222222",
|
|
32
|
+
path: ["telegram", "allowedChatIds"],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "telegram.allowAllChats",
|
|
36
|
+
label: "Allow all chats",
|
|
37
|
+
description: "Explicitly permit every chat. Leave off when using an allowlist.",
|
|
38
|
+
kind: "switch",
|
|
39
|
+
path: ["telegram", "allowAllChats"],
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
export async function loadTelegramAdapterConfig(input) {
|
|
44
|
+
const json = input.json ?? (input.jsonPath === undefined ? {} : (await readSettingsJson(input.jsonPath)).json);
|
|
45
|
+
const env = layerTelegramJsonOntoEnv(json, input.env);
|
|
46
|
+
const botToken = readRequired(env.MONO_AGENT_TELEGRAM_BOT_TOKEN, "MONO_AGENT_TELEGRAM_BOT_TOKEN", missingRequiredConfig);
|
|
47
|
+
const allowedChatIds = readCsv(env.MONO_AGENT_TELEGRAM_ALLOWED_CHAT_IDS);
|
|
48
|
+
const allowAllChats = readBoolean(env.MONO_AGENT_TELEGRAM_ALLOW_ALL_CHATS, "MONO_AGENT_TELEGRAM_ALLOW_ALL_CHATS", false, invalidConfig);
|
|
49
|
+
if (!allowAllChats && allowedChatIds.length === 0) {
|
|
50
|
+
throw missingRequiredConfig("Telegram adapter requires MONO_AGENT_TELEGRAM_ALLOWED_CHAT_IDS or MONO_AGENT_TELEGRAM_ALLOW_ALL_CHATS=true.", { env: "MONO_AGENT_TELEGRAM_ALLOWED_CHAT_IDS" });
|
|
51
|
+
}
|
|
52
|
+
return { botToken, allowedChatIds, allowAllChats };
|
|
53
|
+
}
|
|
54
|
+
export function redactTelegramAdapterConfig(config) {
|
|
55
|
+
return {
|
|
56
|
+
botToken: redactedSecret(config.botToken),
|
|
57
|
+
allowedChatIds: { count: config.allowedChatIds.length },
|
|
58
|
+
allowAllChats: config.allowAllChats,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function layerTelegramJsonOntoEnv(json, env) {
|
|
62
|
+
const section = readJsonSection(json, "telegram");
|
|
63
|
+
return layerJsonOntoEnv(env, [
|
|
64
|
+
{ env: "MONO_AGENT_TELEGRAM_BOT_TOKEN", value: section.botToken },
|
|
65
|
+
{ env: "MONO_AGENT_TELEGRAM_ALLOWED_CHAT_IDS", value: section.allowedChatIds, kind: "csv" },
|
|
66
|
+
{ env: "MONO_AGENT_TELEGRAM_ALLOW_ALL_CHATS", value: section.allowAllChats, kind: "boolean" },
|
|
67
|
+
]);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type { TelegramBotApi, TelegramChat, TelegramChatId, TelegramDeleteWebhookParams, TelegramEditMessageTextParams, TelegramGetUpdatesParams, TelegramMessage, TelegramRequestOptions, TelegramSendMessageParams, TelegramSentMessage, TelegramUpdate, TelegramUser, } from "./types.js";
|
|
2
|
+
export { TelegramApiError, TelegramBotApiClient, } from "./telegram-client.js";
|
|
3
|
+
export type { TelegramApiErrorDetails, TelegramApiErrorKind, TelegramBotApiClientOptions, } from "./telegram-client.js";
|
|
4
|
+
export { TelegramMessageStream } from "./message-stream.js";
|
|
5
|
+
export type { TelegramMessageStreamLogger, TelegramMessageStreamOptions, } from "./message-stream.js";
|
|
6
|
+
export { TelegramAdapter } from "./adapter.js";
|
|
7
|
+
export type { AgentRequest, AgentResponder, AgentResponse, TelegramAdapterLogger, TelegramAdapterMessages, TelegramAdapterOptions, TelegramAdapterStreamOptions, TelegramRequestMetadata, TelegramUpdateHandlingResult, } from "./adapter.js";
|
|
8
|
+
export { TelegramLongPoller } from "./long-poller.js";
|
|
9
|
+
export type { TelegramLongPollerBackoffOptions, TelegramLongPollerLogger, TelegramLongPollerOptions, TelegramLongPollerPollOptions, TelegramLongPollerStartOptions, TelegramUpdateHandler, } from "./long-poller.js";
|
|
10
|
+
export { startTelegramAdapter } from "./start.js";
|
|
11
|
+
export type { TelegramAdapterStartOptions, TelegramAdapterStartResult, TelegramPollerLike, } from "./start.js";
|
|
12
|
+
export { loadTelegramAdapterConfig, redactTelegramAdapterConfig, TelegramAdapterConfigError, telegramFieldGroup, } from "./config.js";
|
|
13
|
+
export type { LoadTelegramAdapterConfigInput, RedactedTelegramAdapterConfig, TelegramAdapterConfig, TelegramAdapterConfigErrorCode, TelegramAdapterConfigErrorDetails, } from "./config.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,2BAA2B,EAC3B,6BAA6B,EAC7B,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,gCAAgC,EAChC,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,EAC7B,qBAAqB,EACrB,8BAA8B,EAC9B,iCAAiC,GAClC,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { TelegramApiError, TelegramBotApiClient, } from "./telegram-client.js";
|
|
2
|
+
export { TelegramMessageStream } from "./message-stream.js";
|
|
3
|
+
export { TelegramAdapter } from "./adapter.js";
|
|
4
|
+
export { TelegramLongPoller } from "./long-poller.js";
|
|
5
|
+
export { startTelegramAdapter } from "./start.js";
|
|
6
|
+
export { loadTelegramAdapterConfig, redactTelegramAdapterConfig, TelegramAdapterConfigError, telegramFieldGroup, } from "./config.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAY/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAStD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAMlD,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { TelegramBotApi, TelegramUpdate } from "./types.js";
|
|
2
|
+
import type { TelegramUpdateHandlingResult } from "./adapter.js";
|
|
3
|
+
export interface TelegramUpdateHandler {
|
|
4
|
+
handleUpdate(update: TelegramUpdate): Promise<TelegramUpdateHandlingResult>;
|
|
5
|
+
}
|
|
6
|
+
export interface TelegramLongPollerBackoffOptions {
|
|
7
|
+
initialMs?: number;
|
|
8
|
+
maxMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface TelegramLongPollerLogger {
|
|
11
|
+
debug?(message: string, metadata?: Record<string, unknown>): void;
|
|
12
|
+
info?(message: string, metadata?: Record<string, unknown>): void;
|
|
13
|
+
warn?(message: string, metadata?: Record<string, unknown>): void;
|
|
14
|
+
error?(message: string, metadata?: Record<string, unknown>): void;
|
|
15
|
+
}
|
|
16
|
+
export interface TelegramLongPollerOptions {
|
|
17
|
+
api: TelegramBotApi;
|
|
18
|
+
adapter: TelegramUpdateHandler;
|
|
19
|
+
initialOffset?: number;
|
|
20
|
+
limit?: number;
|
|
21
|
+
timeoutSeconds?: number;
|
|
22
|
+
allowedUpdates?: string[];
|
|
23
|
+
deleteWebhookOnStart?: boolean;
|
|
24
|
+
dropPendingUpdates?: boolean;
|
|
25
|
+
backoff?: TelegramLongPollerBackoffOptions;
|
|
26
|
+
onError?: (error: unknown) => void | Promise<void>;
|
|
27
|
+
logger?: TelegramLongPollerLogger;
|
|
28
|
+
}
|
|
29
|
+
export interface TelegramLongPollerStartOptions {
|
|
30
|
+
signal?: AbortSignal;
|
|
31
|
+
}
|
|
32
|
+
export interface TelegramLongPollerPollOptions {
|
|
33
|
+
signal?: AbortSignal;
|
|
34
|
+
}
|
|
35
|
+
export declare class TelegramLongPoller {
|
|
36
|
+
private readonly api;
|
|
37
|
+
private readonly adapter;
|
|
38
|
+
private readonly limit;
|
|
39
|
+
private readonly timeoutSeconds;
|
|
40
|
+
private readonly allowedUpdates;
|
|
41
|
+
private readonly deleteWebhookOnStart;
|
|
42
|
+
private readonly dropPendingUpdates;
|
|
43
|
+
private readonly initialBackoffMs;
|
|
44
|
+
private readonly maxBackoffMs;
|
|
45
|
+
private readonly onError;
|
|
46
|
+
private readonly logger;
|
|
47
|
+
private nextUpdateOffset;
|
|
48
|
+
constructor(options: TelegramLongPollerOptions);
|
|
49
|
+
get nextOffset(): number | undefined;
|
|
50
|
+
start(options?: TelegramLongPollerStartOptions): Promise<void>;
|
|
51
|
+
pollOnce(options?: TelegramLongPollerPollOptions): Promise<number>;
|
|
52
|
+
private buildGetUpdatesParams;
|
|
53
|
+
private deleteWebhook;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=long-poller.d.ts.map
|