From 7bf1f4938e0d64e91e93a341c4b92806184acbd9 Mon Sep 17 00:00:00 2001 From: hcktech Date: Thu, 27 Mar 2025 13:09:50 +0530 Subject: [PATCH 1/3] mention Cloudflare Workers compatibility --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index ac1313ca..f354457c 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,16 @@ You can also use the helpful script `generate_webpack.js` node generate_webpack.js ``` +## Running Inside Cloudflare Workers + +To use GramJS inside Cloudflare Workers, you need to install the browser-compatible version: + +```bash +$ npm i telegram@browser +``` + +Cloudflare Workers' runtime uses the V8 engine—the same engine used by Chromium and Node.js—but it doesn't support many Node.js-specific APIs like fs (file system). That's why you need to install the browser-compatible version. + ## Calling the raw API To use raw telegram API methods use [invoke function](https://gram.js.org/beta/classes/TelegramClient.html#invoke). From 1f0dc27a286a7ab82c4679b931dbb7ffde6c7cfa Mon Sep 17 00:00:00 2001 From: hcktech Date: Thu, 27 Mar 2025 13:16:18 +0530 Subject: [PATCH 2/3] add cloudflare worker compatibility --- gramjs/client/TelegramClient.ts | 4 ++-- gramjs/client/telegramBaseClient.ts | 4 ++-- gramjs/platform.ts | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/gramjs/client/TelegramClient.ts b/gramjs/client/TelegramClient.ts index 1ab4f5cb..0ce56ab8 100644 --- a/gramjs/client/TelegramClient.ts +++ b/gramjs/client/TelegramClient.ts @@ -30,7 +30,7 @@ import { EditedMessage, EditedMessageEvent } from "../events/EditedMessage"; import { DeletedMessage, DeletedMessageEvent } from "../events/DeletedMessage"; import { LogLevel } from "../extensions/Logger"; import { inspect } from "../inspect"; -import { isNode } from "../platform"; +import { isCloudflareWorker, isNode } from "../platform"; /** * The TelegramClient uses several methods in different files to provide all the common functionality in a nice interface.
@@ -1489,7 +1489,7 @@ export class TelegramClient extends TelegramBaseClient { web = false ): Promise<{ id: number; ipAddress: string; port: number }> { this._log.debug(`Getting DC ${dcId}`); - if (!isNode || web) { + if (!isNode || web || isCloudflareWorker) { switch (dcId) { case 1: return { diff --git a/gramjs/client/telegramBaseClient.ts b/gramjs/client/telegramBaseClient.ts index e1214f56..6431fa38 100644 --- a/gramjs/client/telegramBaseClient.ts +++ b/gramjs/client/telegramBaseClient.ts @@ -22,7 +22,7 @@ import { } from "../network/connection/TCPMTProxy"; import { Semaphore } from "async-mutex"; import { LogLevel } from "../extensions/Logger"; -import { isBrowser, isNode } from "../platform"; +import { isBrowser, isCloudflareWorker, isNode } from "../platform"; import Deferred from "../extensions/Deferred"; import Timeout = NodeJS.Timeout; @@ -152,7 +152,7 @@ const clientParamsDefault = { langCode: "en", systemLangCode: "en", _securityChecks: true, - useWSS: isBrowser ? window.location.protocol == "https:" : false, + useWSS: isBrowser ? window.location.protocol == "https:" : isCloudflareWorker ? true : false, testServers: false, }; diff --git a/gramjs/platform.ts b/gramjs/platform.ts index 072a356d..092cd968 100644 --- a/gramjs/platform.ts +++ b/gramjs/platform.ts @@ -1,3 +1,4 @@ export const isDeno = "Deno" in globalThis; +export const isCloudflareWorker = typeof navigator !== "undefined" ? navigator.userAgent == "Cloudflare-Workers" : false //https://developers.cloudflare.com/workers/runtime-apis/web-standards/#navigatoruseragent export const isBrowser = !isDeno && typeof window !== "undefined"; -export const isNode = !isBrowser; +export const isNode = !isBrowser; \ No newline at end of file From 16f573462c89154d8206f162450941140debe1f2 Mon Sep 17 00:00:00 2001 From: hcktech Date: Sun, 30 Mar 2025 16:15:43 +0530 Subject: [PATCH 3/3] minor change for hard coded value --- gramjs/client/telegramBaseClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gramjs/client/telegramBaseClient.ts b/gramjs/client/telegramBaseClient.ts index 6431fa38..503a325f 100644 --- a/gramjs/client/telegramBaseClient.ts +++ b/gramjs/client/telegramBaseClient.ts @@ -30,7 +30,7 @@ const EXPORTED_SENDER_RECONNECT_TIMEOUT = 1000; // 1 sec const EXPORTED_SENDER_RELEASE_TIMEOUT = 30000; // 30 sec const DEFAULT_DC_ID = 4; -const DEFAULT_IPV4_IP = isNode ? "149.154.167.91" : "vesta.web.telegram.org"; +const DEFAULT_IPV4_IP = isNode && !isCloudflareWorker ? "149.154.167.91" : "vesta.web.telegram.org"; const DEFAULT_IPV6_IP = "2001:067c:04e8:f004:0000:0000:0000:000a"; /**