🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@robinpath/telegram

Package Overview
Dependencies
Maintainers
4
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@robinpath/telegram - npm Package Compare versions

Comparing version
0.1.1
to
0.3.0
+6
dist/index.d.ts
import type { ModuleAdapter } from "@robinpath/core";
declare const TelegramModule: ModuleAdapter;
export default TelegramModule;
export { TelegramModule };
export { TelegramFunctions, TelegramFunctionMetadata, TelegramModuleMetadata, TelegramCredentialTypes, } from "./telegram.js";
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,QAAA,MAAM,cAAc,EAAE,aAQrB,CAAC;AAEF,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,eAAe,CAAC"}
import { TelegramFunctions, TelegramFunctionMetadata, TelegramModuleMetadata, TelegramCredentialTypes, configureTelegram, } from "./telegram.js";
const TelegramModule = {
name: "telegram",
functions: TelegramFunctions,
functionMetadata: TelegramFunctionMetadata,
moduleMetadata: TelegramModuleMetadata,
credentialTypes: TelegramCredentialTypes,
configure: configureTelegram,
global: false,
};
export default TelegramModule;
export { TelegramModule };
export { TelegramFunctions, TelegramFunctionMetadata, TelegramModuleMetadata, TelegramCredentialTypes, } from "./telegram.js";
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,MAAM,cAAc,GAAkB;IACpC,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,iBAAiB;IAC5B,gBAAgB,EAAE,wBAAwB;IAC1C,cAAc,EAAE,sBAAsB;IACtC,eAAe,EAAE,uBAAuB;IACxC,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,eAAe,CAAC"}
/**
* RobinPath Telegram Module (Node port)
*
* Telegram Bot API integration. Mirror of packages/php/telegram/src/index.php
* for the WordPress plugin; shares the same credential contract, metadata
* shape, and error taxonomy so the visual editor can render both identically.
*
* Authentication uses the RobinPath credential vault. Every handler takes a
* credential slug as its first argument; the module resolves the stored bot
* token (`123456789:ABC-DEF…`) at call time and splices it into the request
* URL path — `https://api.telegram.org/bot{TOKEN}/{method}` — as the
* Telegram API mandates. The token never reaches HTTP headers and is
* scrubbed from log lines because the URL is kept out of the response
* envelope.
*
* Credential type declared by this module:
* - telegram_bot_token : { token } → appended to api.telegram.org URL
*/
import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core";
export declare function configureTelegram(h: ModuleHost): void;
export declare const TelegramFunctions: Record<string, BuiltinHandler>;
export declare const TelegramCredentialTypes: CredentialTypeSchema[];
export declare const TelegramFunctionMetadata: Record<string, FunctionMetadata>;
export declare const TelegramModuleMetadata: ModuleMetadata;
//# sourceMappingURL=telegram.d.ts.map
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAiBzB,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAErD;AAurBD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAa5D,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,EAkBzD,CAAC;AAmGF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA0iBrE,CAAC;AAIF,eAAO,MAAM,sBAAsB,EAAE,cA4CpC,CAAC"}
/**
* RobinPath Telegram Module (Node port)
*
* Telegram Bot API integration. Mirror of packages/php/telegram/src/index.php
* for the WordPress plugin; shares the same credential contract, metadata
* shape, and error taxonomy so the visual editor can render both identically.
*
* Authentication uses the RobinPath credential vault. Every handler takes a
* credential slug as its first argument; the module resolves the stored bot
* token (`123456789:ABC-DEF…`) at call time and splices it into the request
* URL path — `https://api.telegram.org/bot{TOKEN}/{method}` — as the
* Telegram API mandates. The token never reaches HTTP headers and is
* scrubbed from log lines because the URL is kept out of the response
* envelope.
*
* Credential type declared by this module:
* - telegram_bot_token : { token } → appended to api.telegram.org URL
*/
import { readFileSync, existsSync } from "node:fs";
import { basename } from "node:path";
// ── Module-local state (populated by configure hook) ────────────────────
const state = {};
function host() {
if (!state.host) {
throw new Error("Telegram module not initialized. Pass the adapter to rp.registerModule() via loadModule so its configure() hook runs first.");
}
return state.host;
}
export function configureTelegram(h) {
state.host = h;
}
// ── Constants ──────────────────────────────────────────────────────────
const API_BASE = "https://api.telegram.org/bot";
const CREDENTIAL_TYPE = "telegram_bot_token";
function errorReturn(error, code, extra = {}) {
return { error, code, ...extra };
}
// ── Credential resolver ────────────────────────────────────────────────
async function resolveToken(credentialSlug) {
if (!credentialSlug) {
return errorReturn("Credential slug is required.", "credential_not_found");
}
let fields;
try {
fields = await host().credentials.get(credentialSlug);
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "credential_not_found");
}
if (!fields) {
return errorReturn(`Credential '${credentialSlug}' not found.`, "credential_not_found");
}
const token = String(fields.token ?? "");
if (!token) {
return errorReturn(`Credential '${credentialSlug}' has no \`token\` field.`, "token_missing");
}
return { token };
}
// ── HTTP helpers ───────────────────────────────────────────────────────
/**
* POST application/json to the Telegram Bot API and normalize the response.
*
* Token is spliced into the URL: `https://api.telegram.org/bot{TOKEN}/{method}`.
*
* Success: returns the parsed `result` field (as an array/object), or — for
* bool/scalar results — an `{ ok: true, result }` envelope so the caller
* always gets an object.
*
* Failure: returns `{error, code, telegram_error, description, status, error_code?, parameters?}`.
* Never throws.
*/
async function http(token, method, body) {
const url = `${API_BASE}${token}/${method}`;
let response;
try {
response = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json; charset=utf-8" },
body: JSON.stringify(body ?? {}),
});
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const status = response.status;
const raw = await response.text();
let decoded;
try {
decoded = raw ? JSON.parse(raw) : null;
}
catch {
decoded = null;
}
if (!decoded || typeof decoded !== "object") {
return errorReturn(`Telegram returned non-JSON for ${method}: ${raw.slice(0, 200)}`, "transport", { status });
}
const d = decoded;
if (!d.ok) {
const description = String(d.description ?? "unknown_error");
const code = status === 429 ? "rate_limited" : "telegram_error";
return errorReturn(`Telegram ${method} failed: ${description}`, code, {
status,
telegram_error: description,
description,
error_code: Number(d.error_code ?? 0),
parameters: d.parameters && typeof d.parameters === "object" ? d.parameters : null,
});
}
const result = d.result;
if (result && typeof result === "object") {
return result;
}
// Bool/string/int result (e.g. deleteMessage → true) — wrap so the caller still gets an object.
return { ok: true, result };
}
/**
* Multipart POST for file uploads (photo/document/sticker). Uses WHATWG
* `FormData` + `Blob` to assemble the body so fetch handles the boundary.
*/
async function httpMultipart(token, method, parts) {
const url = `${API_BASE}${token}/${method}`;
const form = new FormData();
for (const [name, part] of Object.entries(parts)) {
if (part.filename !== undefined) {
// Binary field — wrap buffer in a Blob with a filename.
const buf = typeof part.value === "string"
? Buffer.from(part.value)
: part.value;
form.append(name, new Blob([new Uint8Array(buf)], { type: "application/octet-stream" }), part.filename);
}
else {
form.append(name, typeof part.value === "string" ? part.value : String(part.value));
}
}
let response;
try {
response = await fetch(url, { method: "POST", body: form });
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const status = response.status;
const raw = await response.text();
let decoded;
try {
decoded = raw ? JSON.parse(raw) : null;
}
catch {
decoded = null;
}
if (!decoded || typeof decoded !== "object") {
return errorReturn(`Telegram returned non-JSON for ${method}: ${raw.slice(0, 200)}`, "transport", { status });
}
const d = decoded;
if (!d.ok) {
const description = String(d.description ?? "unknown_error");
const code = status === 429 ? "rate_limited" : "telegram_error";
return errorReturn(`Telegram ${method} failed: ${description}`, code, {
status,
telegram_error: description,
description,
error_code: Number(d.error_code ?? 0),
parameters: d.parameters && typeof d.parameters === "object" ? d.parameters : null,
});
}
const result = d.result;
if (result && typeof result === "object") {
return result;
}
return { ok: true, result };
}
// ── Small helpers ──────────────────────────────────────────────────────
/**
* Accept either an integer chat id, a numeric string, or `@username` /
* `-100…` style identifier and return whatever Telegram accepts on the wire.
* Returns empty string if the input is empty/invalid.
*/
function normalizeChatId(input) {
if (typeof input === "number" && Number.isInteger(input))
return input;
if (typeof input === "string") {
const trimmed = input.trim();
if (!trimmed)
return "";
if (trimmed[0] === "@")
return trimmed;
if (/^-?\d+$/.test(trimmed)) {
// Telegram chat IDs can exceed Number.MAX_SAFE_INTEGER for some
// supergroups/channels — keep as string to preserve precision.
return trimmed;
}
return trimmed;
}
return "";
}
/**
* Coerce a scalar to a string suitable for a multipart form value.
* Bools become 'true'/'false'; arrays/objects become JSON.
*/
function scalarToString(v) {
if (typeof v === "boolean")
return v ? "true" : "false";
if (v !== null && (typeof v === "object" || Array.isArray(v))) {
return JSON.stringify(v);
}
return String(v);
}
/**
* Best-effort heuristic: treat as local path when it resolves to a file on
* disk and is NOT an http(s) URL.
*/
function looksLikeLocalPath(src) {
if (!src)
return false;
if (src.startsWith("http://") || src.startsWith("https://"))
return false;
try {
return existsSync(src);
}
catch {
return false;
}
}
/**
* Build the sendMessage body from a chat_id, text, and the options bag.
*/
function buildMessageBody(chatId, text, opts) {
const body = { chat_id: chatId, text };
const map = {
parseMode: "parse_mode",
disableNotification: "disable_notification",
disableWebPagePreview: "disable_web_page_preview",
protectContent: "protect_content",
replyToMessageId: "reply_to_message_id",
replyMarkup: "reply_markup",
};
for (const [opt, api] of Object.entries(map)) {
if (opts[opt] !== undefined)
body[api] = opts[opt];
}
return body;
}
/**
* Route media-send requests (photo/document/sticker) either as a JSON
* payload (when the source is a URL or an existing file_id) or as a
* multipart upload (when the source is a readable local file path).
*/
async function sendMediaFile(token, method, fileField, source, chatId, extra, filename) {
if (looksLikeLocalPath(source)) {
let contents;
try {
contents = readFileSync(source);
}
catch (e) {
return errorReturn(`Failed to read file at ${source}: ${e instanceof Error ? e.message : String(e)}`, "read_error");
}
const fname = filename ?? basename(source);
const parts = {};
parts.chat_id = { value: String(chatId) };
for (const [k, v] of Object.entries(extra)) {
parts[k] = { value: scalarToString(v) };
}
parts[fileField] = { value: contents, filename: fname };
return httpMultipart(token, method, parts);
}
// Otherwise it's a file_id or https:// URL — simple JSON POST.
const body = {
chat_id: chatId,
[fileField]: source,
...extra,
};
return http(token, method, body);
}
// ── Handlers ───────────────────────────────────────────────────────────
const getMe = async (args) => {
const cred = String(args[0] ?? "");
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
return (await http(resolved.token, "getMe", {}));
};
const sendMessage = async (args) => {
const cred = String(args[0] ?? "");
const chatId = normalizeChatId(args[1]);
const text = String(args[2] ?? "");
const opts = (args[3] && typeof args[3] === "object" ? args[3] : {});
if (chatId === "") {
return errorReturn("chatId is required.", "telegram_error");
}
if (!text) {
return errorReturn("text is required.", "telegram_error");
}
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
const body = buildMessageBody(chatId, text, opts);
return (await http(resolved.token, "sendMessage", body));
};
const editMessage = async (args) => {
const cred = String(args[0] ?? "");
const chatId = normalizeChatId(args[1]);
const messageId = Number(args[2] ?? 0) | 0;
const text = String(args[3] ?? "");
const opts = (args[4] && typeof args[4] === "object" ? args[4] : {});
if (chatId === "") {
return errorReturn("chatId is required.", "telegram_error");
}
if (messageId === 0) {
return errorReturn("messageId is required.", "telegram_error");
}
if (!text) {
return errorReturn("text is required.", "telegram_error");
}
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
const body = {
chat_id: chatId,
message_id: messageId,
text,
};
if (opts.parseMode !== undefined)
body.parse_mode = String(opts.parseMode);
if (opts.disableWebPagePreview !== undefined)
body.disable_web_page_preview = Boolean(opts.disableWebPagePreview);
if (opts.replyMarkup !== undefined)
body.reply_markup = opts.replyMarkup;
return (await http(resolved.token, "editMessageText", body));
};
const deleteMessage = async (args) => {
const cred = String(args[0] ?? "");
const chatId = normalizeChatId(args[1]);
const messageId = Number(args[2] ?? 0) | 0;
if (chatId === "") {
return errorReturn("chatId is required.", "telegram_error");
}
if (messageId === 0) {
return errorReturn("messageId is required.", "telegram_error");
}
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
const result = await http(resolved.token, "deleteMessage", {
chat_id: chatId,
message_id: messageId,
});
// Telegram returns bool true on success — surface it as `{ok: true, deleted: true}`
// when not an error envelope, matching the PHP behaviour.
if (result &&
typeof result === "object" &&
!("error" in result) &&
result.ok === true) {
return { ok: true, deleted: true };
}
return result;
};
const sendPhoto = async (args) => {
const cred = String(args[0] ?? "");
const chatId = normalizeChatId(args[1]);
const photo = String(args[2] ?? "");
const opts = (args[3] && typeof args[3] === "object" ? args[3] : {});
if (chatId === "") {
return errorReturn("chatId is required.", "telegram_error");
}
if (!photo) {
return errorReturn("photo is required.", "telegram_error");
}
const extra = {};
if (opts.caption !== undefined)
extra.caption = String(opts.caption);
if (opts.parseMode !== undefined)
extra.parse_mode = String(opts.parseMode);
if (opts.hasSpoiler !== undefined)
extra.has_spoiler = Boolean(opts.hasSpoiler);
if (opts.disableNotification !== undefined)
extra.disable_notification = Boolean(opts.disableNotification);
if (opts.protectContent !== undefined)
extra.protect_content = Boolean(opts.protectContent);
if (opts.replyToMessageId !== undefined)
extra.reply_to_message_id = Number(opts.replyToMessageId) | 0;
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
return (await sendMediaFile(resolved.token, "sendPhoto", "photo", photo, chatId, extra));
};
const sendDocument = async (args) => {
const cred = String(args[0] ?? "");
const chatId = normalizeChatId(args[1]);
const document = String(args[2] ?? "");
const opts = (args[3] && typeof args[3] === "object" ? args[3] : {});
if (chatId === "") {
return errorReturn("chatId is required.", "telegram_error");
}
if (!document) {
return errorReturn("document is required.", "telegram_error");
}
const extra = {};
if (opts.caption !== undefined)
extra.caption = String(opts.caption);
if (opts.parseMode !== undefined)
extra.parse_mode = String(opts.parseMode);
if (opts.disableContentTypeDetection !== undefined)
extra.disable_content_type_detection = Boolean(opts.disableContentTypeDetection);
if (opts.disableNotification !== undefined)
extra.disable_notification = Boolean(opts.disableNotification);
if (opts.protectContent !== undefined)
extra.protect_content = Boolean(opts.protectContent);
if (opts.replyToMessageId !== undefined)
extra.reply_to_message_id = Number(opts.replyToMessageId) | 0;
const filename = opts.filename !== undefined ? String(opts.filename) : undefined;
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
return (await sendMediaFile(resolved.token, "sendDocument", "document", document, chatId, extra, filename));
};
const sendLocation = async (args) => {
const cred = String(args[0] ?? "");
const chatId = normalizeChatId(args[1]);
const latitude = Number(args[2] ?? 0);
const longitude = Number(args[3] ?? 0);
const opts = (args[4] && typeof args[4] === "object" ? args[4] : {});
if (chatId === "") {
return errorReturn("chatId is required.", "telegram_error");
}
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
const body = {
chat_id: chatId,
latitude,
longitude,
};
if (opts.horizontalAccuracy !== undefined)
body.horizontal_accuracy = Number(opts.horizontalAccuracy);
if (opts.livePeriod !== undefined)
body.live_period = Number(opts.livePeriod) | 0;
if (opts.heading !== undefined)
body.heading = Number(opts.heading) | 0;
if (opts.proximityAlertRadius !== undefined)
body.proximity_alert_radius = Number(opts.proximityAlertRadius) | 0;
if (opts.disableNotification !== undefined)
body.disable_notification = Boolean(opts.disableNotification);
if (opts.replyToMessageId !== undefined)
body.reply_to_message_id = Number(opts.replyToMessageId) | 0;
return (await http(resolved.token, "sendLocation", body));
};
const sendPoll = async (args) => {
const cred = String(args[0] ?? "");
const chatId = normalizeChatId(args[1]);
const question = String(args[2] ?? "");
const options = Array.isArray(args[3]) ? args[3] : [];
const opts = (args[4] && typeof args[4] === "object" ? args[4] : {});
if (chatId === "") {
return errorReturn("chatId is required.", "telegram_error");
}
if (!question) {
return errorReturn("question is required.", "telegram_error");
}
if (options.length < 2 || options.length > 10) {
return errorReturn("A poll needs between 2 and 10 options.", "invalid_options");
}
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
const body = {
chat_id: chatId,
question,
options: options.map((o) => String(o)),
};
if (opts.isAnonymous !== undefined)
body.is_anonymous = Boolean(opts.isAnonymous);
if (opts.type !== undefined)
body.type = String(opts.type);
if (opts.allowsMultipleAnswers !== undefined)
body.allows_multiple_answers = Boolean(opts.allowsMultipleAnswers);
if (opts.correctOptionId !== undefined)
body.correct_option_id = Number(opts.correctOptionId) | 0;
if (opts.explanation !== undefined)
body.explanation = String(opts.explanation);
if (opts.openPeriod !== undefined)
body.open_period = Number(opts.openPeriod) | 0;
if (opts.closeDate !== undefined)
body.close_date = Number(opts.closeDate) | 0;
if (opts.isClosed !== undefined)
body.is_closed = Boolean(opts.isClosed);
if (opts.disableNotification !== undefined)
body.disable_notification = Boolean(opts.disableNotification);
return (await http(resolved.token, "sendPoll", body));
};
const sendSticker = async (args) => {
const cred = String(args[0] ?? "");
const chatId = normalizeChatId(args[1]);
const sticker = String(args[2] ?? "");
const opts = (args[3] && typeof args[3] === "object" ? args[3] : {});
if (chatId === "") {
return errorReturn("chatId is required.", "telegram_error");
}
if (!sticker) {
return errorReturn("sticker is required.", "telegram_error");
}
const extra = {};
if (opts.emoji !== undefined)
extra.emoji = String(opts.emoji);
if (opts.disableNotification !== undefined)
extra.disable_notification = Boolean(opts.disableNotification);
if (opts.protectContent !== undefined)
extra.protect_content = Boolean(opts.protectContent);
if (opts.replyToMessageId !== undefined)
extra.reply_to_message_id = Number(opts.replyToMessageId) | 0;
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
return (await sendMediaFile(resolved.token, "sendSticker", "sticker", sticker, chatId, extra));
};
const getUpdates = async (args) => {
const cred = String(args[0] ?? "");
const opts = (args[1] && typeof args[1] === "object" ? args[1] : {});
const body = {};
if (opts.offset !== undefined)
body.offset = Number(opts.offset) | 0;
if (opts.limit !== undefined) {
body.limit = Math.max(1, Math.min(100, Number(opts.limit) | 0));
}
if (opts.timeout !== undefined) {
body.timeout = Math.max(0, Math.min(50, Number(opts.timeout) | 0));
}
if (Array.isArray(opts.allowedUpdates)) {
body.allowed_updates = opts.allowedUpdates.map((u) => String(u));
}
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
const result = await http(resolved.token, "getUpdates", body);
// Re-tag the common "can't use getUpdates with webhook" case.
if (result &&
typeof result === "object" &&
"error" in result &&
"description" in result) {
const r = result;
if (typeof r.description === "string" &&
r.description.toLowerCase().includes("webhook is active")) {
r.code = "webhook_conflict";
}
}
return result;
};
const answerCallback = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
const opts = (args[2] && typeof args[2] === "object" ? args[2] : {});
if (!id) {
return errorReturn("callbackQueryId is required.", "telegram_error");
}
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
const body = { callback_query_id: id };
if (opts.text !== undefined)
body.text = String(opts.text);
if (opts.showAlert !== undefined)
body.show_alert = Boolean(opts.showAlert);
if (opts.url !== undefined)
body.url = String(opts.url);
if (opts.cacheTime !== undefined)
body.cache_time = Number(opts.cacheTime) | 0;
return (await http(resolved.token, "answerCallbackQuery", body));
};
const getChat = async (args) => {
const cred = String(args[0] ?? "");
const chatId = normalizeChatId(args[1]);
if (chatId === "") {
return errorReturn("chatId is required.", "telegram_error");
}
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
return (await http(resolved.token, "getChat", { chat_id: chatId }));
};
// ── Exports: functions map ─────────────────────────────────────────────
export const TelegramFunctions = {
getMe,
sendMessage,
sendPhoto,
sendDocument,
sendLocation,
sendPoll,
sendSticker,
editMessage,
deleteMessage,
getUpdates,
getChat,
answerCallback,
};
// ── Exports: credential types ──────────────────────────────────────────
export const TelegramCredentialTypes = [
{
slug: CREDENTIAL_TYPE,
title: "Telegram Bot Token",
icon: "telegram",
fields: [
{
name: "token",
title: "Bot Token",
type: "password",
required: true,
placeholder: "123456789:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",
description: "Issued by @BotFather on Telegram. Format: `<bot_id>:<secret>`. Keep private — anyone with it controls the bot.",
pattern: "^[0-9]+:[A-Za-z0-9_-]{30,}$",
},
],
},
];
// ── Shared parameter descriptors ───────────────────────────────────────
const credentialParam = {
name: "credential",
title: "Credential",
description: "Slug of a saved `telegram_bot_token` credential. The bot token is decrypted at call time and spliced into the request URL path; it never appears in logs.",
dataType: "string",
formInputType: "resource",
required: true,
allowExpression: true,
placeholder: "my_telegram_bot",
resource: {
type: "credential",
listFn: "credential.list",
modes: ["list", "expression"],
searchable: true,
filter: { type: CREDENTIAL_TYPE },
},
};
const chatIdParam = {
name: "chatId",
title: "Chat ID",
description: "Target chat identifier. Either an integer ID (user: `123456789`, supergroup/channel: `-100…`) or `@channelusername` for a public channel. The bot must already be a member (or administrator, for channels).",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "@mychannel or -1001234567890",
};
const messageIdParam = {
name: "messageId",
title: "Message ID",
description: "Integer ID of the target message as returned by a previous `sendMessage` call.",
dataType: "number",
formInputType: "number",
required: true,
allowExpression: true,
placeholder: "42",
validation: { min: 1 },
};
const parseModeHelp = "Text formatting mode. One of:\n MarkdownV2 : recommended, strict escaping\n HTML : <b>, <i>, <a href>, <code>, <pre> tags\n Markdown : legacy, looser parser\nOmit for plain text.";
const messageOptionsBaseDescription = "Extra fields. Recognized keys:\n parseMode : 'MarkdownV2' | 'HTML' | 'Markdown'\n disableNotification : bool — send silently (no push)\n disableWebPagePreview : bool — suppress link previews\n protectContent : bool — forbid forwarding/saving\n replyToMessageId : int — quote another message\n replyMarkup : object — inline keyboard / reply keyboard";
const messageOptionsParam = {
name: "options",
title: "Options",
description: messageOptionsBaseDescription,
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 6,
advanced: true,
};
const telegramResponseSchema = {
type: "object",
properties: {
message_id: {
type: "int",
description: "ID of the resulting message",
},
chat: { type: "object" },
date: { type: "int" },
text: { type: "string" },
error: {
type: "string",
description: "Module error (transport, missing credential)",
},
telegram_error: {
type: "string",
description: "Telegram-side description (e.g. chat not found)",
},
},
};
const commonErrors = {
credential_not_found: "No credential with that slug exists in the vault.",
token_missing: "The credential exists but does not have a `token` field.",
transport: "Network failure calling api.telegram.org — see error message.",
telegram_error: "Telegram returned ok:false — see `description` and error_code fields.",
rate_limited: "HTTP 429 from Telegram. Honour the `retry_after` seconds field.",
};
// ── Exports: function metadata ─────────────────────────────────────────
export const TelegramFunctionMetadata = {
// ── Bot ───────────────────────────────────────────────────────────
getMe: {
title: "Get bot info",
summary: "Return identity of the bot backing the credential",
description: "Calls `getMe`. Useful as a credential health check — returns the bot's `id`, `username`, `first_name`, and feature flags.",
group: "bot",
action: "read",
icon: "bot",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["telegram", "bot", "self", "health"],
parameters: [credentialParam],
returnType: "object",
returnDescription: "`{ id, is_bot, first_name, username, can_join_groups, can_read_all_group_messages, supports_inline_queries }`.",
errors: commonErrors,
examples: [
{
title: "Sanity check a credential",
code: 'telegram.getMe "my_telegram_bot"',
},
],
example: 'telegram.getMe "my_telegram_bot"',
},
// ── Messages ──────────────────────────────────────────────────────
sendMessage: {
title: "Send message",
summary: "Post a text message to a chat",
description: "Calls `sendMessage`. Supports Markdown/HTML via the `parseMode` option. Max length 4096 UTF-16 code units — messages longer than that must be split by the caller.",
group: "message",
action: "write",
icon: "send",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["telegram", "send", "message", "notify"],
parameters: [
credentialParam,
chatIdParam,
{
name: "text",
title: "Text",
description: "Message body (max 4096 chars). Honours `parseMode` option — see below.",
dataType: "string",
formInputType: "textarea",
required: true,
allowExpression: true,
rows: 4,
placeholder: "Hello from RobinPath!",
validation: { maxLength: 4096 },
},
{
...messageOptionsParam,
description: `${messageOptionsBaseDescription}\n\n${parseModeHelp}`,
},
],
returnType: "object",
returnDescription: "Telegram Message object: `{ message_id, from, chat, date, text }`.",
returnSchema: telegramResponseSchema,
errors: commonErrors,
examples: [
{
title: "Notify a channel",
code: 'telegram.sendMessage "my_telegram_bot" "@mychannel" "Build complete"',
},
{
title: "Rich formatting",
code: 'telegram.sendMessage "my_telegram_bot" "-1001234567890" "*Heads up*: deploy starting" {\n parseMode: "MarkdownV2",\n disableNotification: true\n}',
},
],
example: 'telegram.sendMessage "my_telegram_bot" "@mychannel" "Hello"',
},
editMessage: {
title: "Edit message",
summary: "Edit the text of a message previously sent by the bot",
description: "Calls `editMessageText`. Only messages the same bot sent can be edited.",
group: "message",
action: "write",
icon: "edit-3",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["telegram", "edit", "update"],
parameters: [
credentialParam,
chatIdParam,
messageIdParam,
{
name: "text",
title: "New text",
description: "Replacement message body (max 4096 chars).",
dataType: "string",
formInputType: "textarea",
required: true,
allowExpression: true,
rows: 4,
validation: { maxLength: 4096 },
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n parseMode : 'MarkdownV2' | 'HTML' | 'Markdown'\n disableWebPagePreview: bool\n replyMarkup : object — inline keyboard (reply keyboards can't be edited)",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
advanced: true,
},
],
returnType: "object",
returnDescription: "Edited Telegram Message object.",
returnSchema: telegramResponseSchema,
errors: commonErrors,
examples: [
{
title: "Flip a status message to done",
code: 'telegram.editMessage "my_telegram_bot" "@ops" 42 "Build PASSING ✓"',
},
],
example: 'telegram.editMessage "my_telegram_bot" "@ops" 42 "Updated"',
},
deleteMessage: {
title: "Delete message",
summary: "Delete a message by ID",
description: "Calls `deleteMessage`. A bot can delete:\n - its own messages, up to 48h old in private chats\n - any message in a group/supergroup if it is an administrator with `can_delete_messages`\n - any message in a channel it administers",
group: "message",
action: "delete",
icon: "trash-2",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["telegram", "delete"],
parameters: [credentialParam, chatIdParam, messageIdParam],
returnType: "boolean",
returnDescription: "`true` on success.",
errors: commonErrors,
example: 'telegram.deleteMessage "my_telegram_bot" "@ops" 42',
},
// ── Media ─────────────────────────────────────────────────────────
sendPhoto: {
title: "Send photo",
summary: "Send a photo from a local file or file_id",
description: "Calls `sendPhoto`. The `photo` parameter accepts one of:\n - an absolute server-side path (multipart/form-data upload)\n - a previously uploaded Telegram `file_id` (passed as a normal string; no upload)\n - an https:// URL — Telegram fetches it directly\n\nMax 10 MB for downloaded URLs, 50 MB for local uploads, 20 MB on the Bot API in total.",
group: "media",
action: "upload",
icon: "image",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["telegram", "photo", "image", "upload"],
parameters: [
credentialParam,
chatIdParam,
{
name: "photo",
title: "Photo",
description: "Absolute server-side path, a Telegram `file_id`, or an https:// URL.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "/tmp/photo.jpg",
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n caption : string (max 1024 chars)\n parseMode : 'MarkdownV2' | 'HTML' | 'Markdown'\n hasSpoiler : bool — cover with spoiler animation\n disableNotification : bool\n protectContent : bool\n replyToMessageId : int",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 5,
advanced: true,
},
],
returnType: "object",
returnDescription: "Telegram Message object containing the uploaded photo.",
errors: {
...commonErrors,
read_error: "Could not read the file at the supplied local path.",
},
examples: [
{
title: "Upload from disk",
code: 'telegram.sendPhoto "my_telegram_bot" "@gallery" "/var/www/uploads/graph.png" {\n caption: "Traffic for last 24h"\n}',
},
],
example: 'telegram.sendPhoto "my_telegram_bot" "@gallery" "/tmp/pic.jpg"',
},
sendDocument: {
title: "Send document",
summary: "Send a generic file from a local path, file_id, or URL",
description: "Calls `sendDocument`. Same source rules as `sendPhoto`. Use this for PDFs, zips, CSVs — anything not an image/video/audio.",
group: "media",
action: "upload",
icon: "file",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["telegram", "document", "file", "upload"],
parameters: [
credentialParam,
chatIdParam,
{
name: "document",
title: "Document",
description: "Absolute server-side path, a Telegram `file_id`, or an https:// URL.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "/tmp/report.pdf",
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n caption : string (max 1024 chars)\n parseMode : 'MarkdownV2' | 'HTML' | 'Markdown'\n filename : override displayed file name (local uploads only)\n disableContentTypeDetection : bool\n disableNotification : bool\n protectContent : bool\n replyToMessageId : int",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 5,
advanced: true,
},
],
returnType: "object",
returnDescription: "Telegram Message object containing the document.",
errors: {
...commonErrors,
read_error: "Could not read the file at the supplied local path.",
},
example: 'telegram.sendDocument "my_telegram_bot" "@ops" "/tmp/report.pdf"',
},
sendLocation: {
title: "Send location",
summary: "Send a GPS pin to a chat",
description: "Calls `sendLocation`. Optionally pass `livePeriod` in options to send a live-updating pin (60-86400 seconds).",
group: "media",
action: "write",
icon: "map-pin",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["telegram", "location", "map"],
parameters: [
credentialParam,
chatIdParam,
{
name: "latitude",
title: "Latitude",
description: "Decimal degrees, -90 to 90.",
dataType: "number",
formInputType: "number",
required: true,
allowExpression: true,
placeholder: "48.8566",
validation: { min: -90, max: 90 },
},
{
name: "longitude",
title: "Longitude",
description: "Decimal degrees, -180 to 180.",
dataType: "number",
formInputType: "number",
required: true,
allowExpression: true,
placeholder: "2.3522",
validation: { min: -180, max: 180 },
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n horizontalAccuracy : float — meter radius (0-1500)\n livePeriod : int — seconds of live updates (60-86400)\n heading : int — direction of movement in degrees (1-360)\n proximityAlertRadius : int — metres for arrival alerts\n disableNotification : bool\n replyToMessageId : int",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 5,
advanced: true,
},
],
returnType: "object",
returnDescription: "Telegram Message object containing the location.",
errors: commonErrors,
example: 'telegram.sendLocation "my_telegram_bot" "@travel" 48.8566 2.3522',
},
sendPoll: {
title: "Send poll",
summary: "Post a poll to a group or channel",
description: "Calls `sendPoll`. Telegram requires at least two options. Polls work in groups, supergroups and channels but not in private chats.",
group: "media",
action: "write",
icon: "bar-chart-2",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["telegram", "poll", "vote"],
parameters: [
credentialParam,
chatIdParam,
{
name: "question",
title: "Question",
description: "Poll question (max 300 chars).",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "Best language?",
validation: { maxLength: 300 },
},
{
name: "options",
title: "Answer options",
description: "Array of 2-10 answer strings. Each answer max 100 chars.",
dataType: "array",
formInputType: "json",
required: true,
allowExpression: true,
language: "json",
rows: 4,
placeholder: '["TypeScript", "Rust", "Go"]',
},
{
name: "pollOptions",
title: "Poll settings",
description: "Recognized keys:\n isAnonymous : bool — default true\n type : 'regular' | 'quiz'\n allowsMultipleAnswers : bool (regular polls only)\n correctOptionId : int — zero-based index (quiz polls only)\n explanation : string — shown after a wrong answer (quiz)\n openPeriod : int — seconds the poll stays open (5-600)\n closeDate : int — unix timestamp the poll closes\n isClosed : bool — create as already-closed\n disableNotification : bool",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 5,
advanced: true,
},
],
returnType: "object",
returnDescription: "Telegram Message object with `poll` populated.",
errors: {
...commonErrors,
invalid_options: "Fewer than 2 or more than 10 options supplied.",
},
examples: [
{
title: "Team lunch poll",
code: 'telegram.sendPoll "my_telegram_bot" "-1001234567890" "Lunch?" ["Pizza", "Sushi", "Tacos"]',
},
],
example: 'telegram.sendPoll "my_telegram_bot" "@team" "?" ["a","b"]',
},
sendSticker: {
title: "Send sticker",
summary: "Send a sticker by file_id",
description: "Calls `sendSticker`. Pass the sticker `file_id` — the id is long-lived and survives bot restarts. You can grab one by forwarding a sticker to your bot and reading `sticker.file_id` from `getUpdates`.",
group: "media",
action: "write",
icon: "smile",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["telegram", "sticker"],
parameters: [
credentialParam,
chatIdParam,
{
name: "sticker",
title: "Sticker",
description: "Telegram sticker `file_id` (or an absolute path / https URL for a local .webp upload).",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "CAACAgIAAxkBA...",
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n emoji : string — sticker emoji (upload only)\n disableNotification : bool\n protectContent : bool\n replyToMessageId : int",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
advanced: true,
},
],
returnType: "object",
returnDescription: "Telegram Message object containing the sticker.",
errors: commonErrors,
example: 'telegram.sendSticker "my_telegram_bot" "@stickers" "CAACAgIAAxkBA..."',
},
// ── Updates ───────────────────────────────────────────────────────
getUpdates: {
title: "Get updates (long poll)",
summary: "Receive incoming updates via long polling",
description: "Calls `getUpdates`. Returns an array of `Update` objects. Use `offset` = last_update_id + 1 to acknowledge processed updates.\n\n**Warning:** this method conflicts with webhook mode. If your bot has a webhook set, `getUpdates` will return an error until you call `deleteWebhook` first.",
group: "updates",
action: "query",
icon: "inbox",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["telegram", "updates", "poll", "webhook"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n offset : int — smallest update_id to return; previous ones are marked delivered\n limit : int 1-100 (default 100)\n timeout : int — long-poll seconds (0-50, default 0 for short poll)\n allowedUpdates : array<string> — filter types e.g. ['message','callback_query']",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
advanced: true,
},
],
returnType: "array",
returnDescription: "Array of Telegram `Update` objects.",
errors: {
...commonErrors,
webhook_conflict: "Telegram refuses getUpdates when a webhook is active. Call deleteWebhook first.",
},
examples: [
{
title: "Drain the inbox",
code: 'telegram.getUpdates "my_telegram_bot" {offset: 0, limit: 50, timeout: 20}',
},
],
example: 'telegram.getUpdates "my_telegram_bot"',
},
answerCallback: {
title: "Answer callback query",
summary: "Respond to an inline-keyboard button press",
description: "Calls `answerCallbackQuery`. Must be called within a few seconds of receiving a `callback_query` update, or Telegram shows a spinner to the user until timeout.",
group: "updates",
action: "write",
icon: "check-circle",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["telegram", "callback", "inline"],
parameters: [
credentialParam,
{
name: "callbackQueryId",
title: "Callback query ID",
description: "The `id` of the callback_query you are answering.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "4382bfdwdsb323b2d9",
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n text : string — notification shown to the user (max 200 chars)\n showAlert : bool — modal instead of toast\n url : string — deep link to open\n cacheTime : int — seconds to cache the answer client-side",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
advanced: true,
},
],
returnType: "boolean",
returnDescription: "`true` on success.",
errors: commonErrors,
example: 'telegram.answerCallback "my_telegram_bot" "4382bfdwdsb..." {text: "Saved!"}',
},
// ── Chats ─────────────────────────────────────────────────────────
getChat: {
title: "Get chat",
summary: "Return up-to-date information about a chat",
description: "Calls `getChat`. Works for users, groups, supergroups, and channels. Returns pinned message, permissions, sticker set, and member count (for groups).",
group: "chats",
action: "read",
icon: "info",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["telegram", "chat", "lookup"],
parameters: [credentialParam, chatIdParam],
returnType: "object",
returnDescription: "Telegram Chat object: `{ id, type, title?, username?, description?, pinned_message?, permissions? }`.",
errors: {
...commonErrors,
chat_not_found: "Supplied chat_id does not resolve. For @channelusername the channel must be public; for numeric IDs the bot must be a member.",
},
example: 'telegram.getChat "my_telegram_bot" "@mychannel"',
},
};
// ── Exports: module metadata ───────────────────────────────────────────
export const TelegramModuleMetadata = {
slug: "telegram",
title: "Telegram",
summary: "Send messages, photos, documents, polls, stickers, and manage Telegram chats via the Bot API",
description: "Full Telegram Bot API integration. Requires a saved `telegram_bot_token` credential obtained from @BotFather.\n\nChat IDs can be either integer IDs (e.g. `123456789` for users, `-100…` for supergroups/channels) or `@username` for public channels. The bot must be an administrator of a channel before it can post there.\n\nEvery method returns the parsed `result` field from Telegram's JSON response. On failure the module returns `{error, code, telegram_error?, description?}` rather than throwing.",
category: "communication",
icon: "icon.svg",
color: "#26A5E4",
version: "0.2.0",
docsUrl: "https://docs.robinpath.com/modules/telegram",
status: "stable",
requires: [],
minNodeVersion: "18.0.0",
credentialsType: CREDENTIAL_TYPE,
operationGroups: {
bot: {
title: "Bot",
description: "Meta operations on the bot account itself.",
order: 1,
},
message: {
title: "Messages",
description: "Send, edit, and delete text messages.",
order: 2,
},
media: {
title: "Media",
description: "Send photos, documents, locations, polls, and stickers.",
order: 3,
},
updates: {
title: "Updates",
description: "Long-poll for incoming updates and respond to callbacks.",
order: 4,
},
chats: {
title: "Chats",
description: "Query chat metadata.",
order: 5,
},
},
methods: Object.keys(TelegramFunctions),
};
//# sourceMappingURL=telegram.js.map
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"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"}
+17
-7
{
"name": "@robinpath/telegram",
"version": "0.1.1",
"version": "0.3.0",
"publishConfig": {

@@ -23,6 +23,6 @@ "access": "public"

"peerDependencies": {
"@robinpath/core": ">=0.20.0"
"@robinpath/core": ">=0.40.0"
},
"devDependencies": {
"@robinpath/core": "^0.30.1",
"@robinpath/core": "^0.40.0",
"typescript": "^5.6.0"

@@ -34,3 +34,7 @@ },

"messaging",
"api"
"api",
"chat",
"notification",
"bot",
"botfather"
],

@@ -40,7 +44,13 @@ "license": "MIT",

"category": "messaging",
"type": "integration",
"auth": "bearer-token",
"type": "module",
"auth": "credential-vault",
"functionCount": 12,
"baseUrl": "https://api.telegram.org"
"baseUrl": "https://api.telegram.org",
"language": "nodejs",
"platforms": [
"cloud",
"cli",
"desktop"
]
}
}

@@ -22,3 +22,3 @@ # @robinpath/telegram

```bash
npm install @robinpath/telegram
robinpath add @robinpath/telegram
```

@@ -25,0 +25,0 @@