Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down
4 changes: 2 additions & 2 deletions gramjs/client/TelegramClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.</br>
Expand Down Expand Up @@ -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 {
Expand Down
6 changes: 3 additions & 3 deletions gramjs/client/telegramBaseClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ 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;

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";

/**
Expand Down Expand Up @@ -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,
};

Expand Down
3 changes: 2 additions & 1 deletion gramjs/platform.ts
Original file line number Diff line number Diff line change
@@ -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;