diff --git a/gramjs/extensions/PromisedWebSockets.ts b/gramjs/extensions/PromisedWebSockets.ts
index dab09b23..61eb1e33 100644
--- a/gramjs/extensions/PromisedWebSockets.ts
+++ b/gramjs/extensions/PromisedWebSockets.ts
@@ -97,7 +97,7 @@ export class PromisedWebSockets {
};
//CONTEST
if (isBrowser) {
- window.addEventListener("offline", async () => {
+ globalThis?.addEventListener("offline", async () => {
await this.close();
if (this.resolveRead) {
this.resolveRead(false);
diff --git a/gramjs/extensions/markdownv2.ts b/gramjs/extensions/markdownv2.ts
index fc67fac2..ab357046 100644
--- a/gramjs/extensions/markdownv2.ts
+++ b/gramjs/extensions/markdownv2.ts
@@ -25,10 +25,7 @@ export class MarkdownV2Parser {
message = message.replace(/\|\|(.*?)\|\|/g, "$1");
// Inline URL
- message = message.replace(
- /(?$1'
- );
+ message = replaceInnerUrl(message);
// Emoji
message = message.replace(
@@ -79,3 +76,21 @@ export class MarkdownV2Parser {
return text;
}
}
+
+const replaceInnerUrl = (message: string) => {
+ let innerUrl = message;
+ const replacedMarkdownText = message.replace(
+ /!\[([^\[\]]*)\]\(([^)]+)\)/g,
+ ""
+ );
+
+ const linkRegex = /\[([^\[\]]*)\]\(([^)]+)\)/g;
+
+ let match;
+ while ((match = linkRegex.exec(replacedMarkdownText)) !== null) {
+ const text = match[1];
+ const url = match[2];
+ innerUrl = `'${text}'`;
+ }
+ return innerUrl;
+};
diff --git a/package-lock.json b/package-lock.json
index 95823f29..8b018ec9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
- "name": "telegram",
- "version": "2.25.11",
+ "name": "@sipz/telegram",
+ "version": "1.0.11",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
- "name": "telegram",
- "version": "2.25.11",
+ "name": "@sipz/telegram",
+ "version": "1.0.11",
"license": "MIT",
"dependencies": {
"@cryptography/aes": "^0.1.1",
@@ -4094,8 +4094,9 @@
},
"node_modules/ip-address": {
"version": "9.0.5",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "resolved": "https://repo.sending.me/ip-address/-/ip-address-9.0.5.tgz",
"integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+ "license": "MIT",
"dependencies": {
"jsbn": "1.1.0",
"sprintf-js": "^1.1.3"
@@ -4106,8 +4107,9 @@
},
"node_modules/ip-address/node_modules/sprintf-js": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
- "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
+ "resolved": "https://repo.sending.me/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+ "license": "BSD-3-Clause"
},
"node_modules/is-arguments": {
"version": "1.1.1",
@@ -6208,8 +6210,9 @@
},
"node_modules/jsbn": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
- "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
+ "resolved": "https://repo.sending.me/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+ "license": "MIT"
},
"node_modules/jsesc": {
"version": "2.5.2",
@@ -6534,8 +6537,9 @@
},
"node_modules/node-localstorage": {
"version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-2.2.1.tgz",
+ "resolved": "https://repo.sending.me/node-localstorage/-/node-localstorage-2.2.1.tgz",
"integrity": "sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==",
+ "license": "MIT",
"dependencies": {
"write-file-atomic": "^1.1.4"
},
@@ -6545,8 +6549,9 @@
},
"node_modules/node-localstorage/node_modules/write-file-atomic": {
"version": "1.3.4",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
+ "resolved": "https://repo.sending.me/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
"integrity": "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==",
+ "license": "ISC",
"dependencies": {
"graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
@@ -7162,16 +7167,18 @@
},
"node_modules/slide": {
"version": "1.1.6",
- "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
+ "resolved": "https://repo.sending.me/slide/-/slide-1.1.6.tgz",
"integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==",
+ "license": "ISC",
"engines": {
"node": "*"
}
},
"node_modules/smart-buffer": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "resolved": "https://repo.sending.me/smart-buffer/-/smart-buffer-4.2.0.tgz",
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "license": "MIT",
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
@@ -7179,8 +7186,9 @@
},
"node_modules/socks": {
"version": "2.8.3",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+ "resolved": "https://repo.sending.me/socks/-/socks-2.8.3.tgz",
"integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
+ "license": "MIT",
"dependencies": {
"ip-address": "^9.0.5",
"smart-buffer": "^4.2.0"
@@ -11603,7 +11611,7 @@
},
"ip-address": {
"version": "9.0.5",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "resolved": "https://repo.sending.me/ip-address/-/ip-address-9.0.5.tgz",
"integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
"requires": {
"jsbn": "1.1.0",
@@ -11612,7 +11620,7 @@
"dependencies": {
"sprintf-js": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "resolved": "https://repo.sending.me/sprintf-js/-/sprintf-js-1.1.3.tgz",
"integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
}
}
@@ -13158,7 +13166,7 @@
},
"jsbn": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "resolved": "https://repo.sending.me/jsbn/-/jsbn-1.1.0.tgz",
"integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
},
"jsesc": {
@@ -13412,7 +13420,7 @@
},
"node-localstorage": {
"version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-2.2.1.tgz",
+ "resolved": "https://repo.sending.me/node-localstorage/-/node-localstorage-2.2.1.tgz",
"integrity": "sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==",
"requires": {
"write-file-atomic": "^1.1.4"
@@ -13420,7 +13428,7 @@
"dependencies": {
"write-file-atomic": {
"version": "1.3.4",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
+ "resolved": "https://repo.sending.me/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
"integrity": "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==",
"requires": {
"graceful-fs": "^4.1.11",
@@ -13907,17 +13915,17 @@
},
"slide": {
"version": "1.1.6",
- "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
+ "resolved": "https://repo.sending.me/slide/-/slide-1.1.6.tgz",
"integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw=="
},
"smart-buffer": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "resolved": "https://repo.sending.me/smart-buffer/-/smart-buffer-4.2.0.tgz",
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
},
"socks": {
"version": "2.8.3",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+ "resolved": "https://repo.sending.me/socks/-/socks-2.8.3.tgz",
"integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
"requires": {
"ip-address": "^9.0.5",
diff --git a/package.json b/package.json
index 11ddef80..1ccaf970 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
- "name": "telegram",
- "version": "2.25.11",
+ "name": "@sipz/telegram",
+ "version": "1.0.11",
"description": "NodeJS/Browser MTProto API Telegram client library,",
"main": "index.js",
"types": "index.d.ts",
@@ -70,4 +70,4 @@
"node-localstorage": "^2.2.1",
"socks": "^2.6.2"
}
-}
\ No newline at end of file
+}
diff --git a/tempBrowser/extensions/PromisedWebSockets.ts b/tempBrowser/extensions/PromisedWebSockets.ts
new file mode 100644
index 00000000..bf83154c
--- /dev/null
+++ b/tempBrowser/extensions/PromisedWebSockets.ts
@@ -0,0 +1,152 @@
+import { Buffer } from "buffer/";
+import { w3cwebsocket } from "websocket";
+import { Mutex } from "async-mutex";
+import { isBrowser } from "../platform";
+
+const mutex = new Mutex();
+
+const closeError = new Error("WebSocket was closed");
+
+export class PromisedWebSockets {
+ private closed: boolean;
+ private stream: Buffer;
+ private canRead?: boolean | Promise;
+ private resolveRead: ((value?: any) => void) | undefined;
+ private client: w3cwebsocket | undefined;
+ private website?: string;
+
+ constructor() {
+ this.client = undefined;
+ this.stream = Buffer.alloc(0);
+
+ this.closed = true;
+ }
+
+ async readExactly(number: number) {
+ let readData = Buffer.alloc(0);
+ while (true) {
+ const thisTime = await this.read(number);
+ readData = Buffer.concat([readData, thisTime]);
+ number = number - thisTime.length;
+ if (!number) {
+ return readData;
+ }
+ }
+ }
+
+ async read(number: number) {
+ if (this.closed) {
+ throw closeError;
+ }
+ await this.canRead;
+ if (this.closed) {
+ throw closeError;
+ }
+ const toReturn = this.stream.slice(0, number);
+ this.stream = this.stream.slice(number);
+ if (this.stream.length === 0) {
+ this.canRead = new Promise((resolve) => {
+ this.resolveRead = resolve;
+ });
+ }
+
+ return toReturn;
+ }
+
+ async readAll() {
+ if (this.closed || !(await this.canRead)) {
+ throw closeError;
+ }
+ const toReturn = this.stream;
+ this.stream = Buffer.alloc(0);
+ this.canRead = new Promise((resolve) => {
+ this.resolveRead = resolve;
+ });
+ return toReturn;
+ }
+
+ getWebSocketLink(ip: string, port: number, testServers: boolean) {
+ if (port === 443) {
+ return `wss://${ip}:${port}/apiws${testServers ? "_test" : ""}`;
+ } else {
+ return `ws://${ip}:${port}/apiws${testServers ? "_test" : ""}`;
+ }
+ }
+
+ async connect(port: number, ip: string, testServers: boolean = false) {
+ this.stream = Buffer.alloc(0);
+ this.canRead = new Promise((resolve) => {
+ this.resolveRead = resolve;
+ });
+ this.closed = false;
+ this.website = this.getWebSocketLink(ip, port, testServers);
+ this.client = new w3cwebsocket(this.website, "binary");
+ return new Promise((resolve, reject) => {
+ if (this.client) {
+ this.client.onopen = () => {
+ this.receive();
+ resolve(this);
+ };
+ this.client.onerror = (error: any) => {
+ reject(error);
+ };
+ this.client.onclose = () => {
+ if (this.resolveRead) {
+ this.resolveRead(false);
+ }
+ this.closed = true;
+ };
+ //CONTEST
+ if (isBrowser) {
+ globalThis.addEventListener?.("offline", async () => {
+ await this.close();
+ if (this.resolveRead) {
+ this.resolveRead(false);
+ }
+ });
+ }
+ }
+ });
+ }
+
+ write(data: Buffer) {
+ if (this.closed) {
+ throw closeError;
+ }
+ if (this.client) {
+ this.client.send(data);
+ }
+ }
+
+ async close() {
+ if (this.client) {
+ await this.client.close();
+ }
+ this.closed = true;
+ }
+
+ async receive() {
+ if (this.client) {
+ this.client.onmessage = async (message: any) => {
+ const release = await mutex.acquire();
+ try {
+ let data;
+ //CONTEST BROWSER
+ data = Buffer.from(
+ await new Response(message.data).arrayBuffer()
+ );
+ this.stream = Buffer.concat([this.stream, data]);
+ if (this.resolveRead) {
+ this.resolveRead(true);
+ }
+ } finally {
+ release();
+ }
+ };
+ }
+ }
+
+ toString() {
+ return "PromisedWebSocket";
+ }
+}