@mtproto/core
Advanced tools
Comparing version 4.0.1 to 5.0.0
{ | ||
"name": "@mtproto/core", | ||
"version": "4.0.1", | ||
"version": "5.0.0", | ||
"description": "Telegram API JS (MTProto) client library for browser and nodejs", | ||
@@ -81,7 +81,2 @@ "keywords": [ | ||
}, | ||
"./src/tl/package.json": "./src/tl/package.json", | ||
"./src/tl": { | ||
"require": "./src/tl/index.cjs", | ||
"import": "./src/tl/index.js" | ||
}, | ||
"./src/transport/package.json": "./src/transport/package.json", | ||
@@ -104,2 +99,17 @@ "./src/transport": { | ||
}, | ||
"./src/transport/obfuscated/package.json": "./src/transport/obfuscated/package.json", | ||
"./src/transport/obfuscated": { | ||
"require": "./src/transport/obfuscated/index.cjs", | ||
"import": "./src/transport/obfuscated/index.js" | ||
}, | ||
"./src/transport/socket/package.json": "./src/transport/socket/package.json", | ||
"./src/transport/socket": { | ||
"require": "./src/transport/socket/index.cjs", | ||
"import": "./src/transport/socket/index.js" | ||
}, | ||
"./src/transport/tcp/package.json": "./src/transport/tcp/package.json", | ||
"./src/transport/tcp": { | ||
"require": "./src/transport/tcp/index.cjs", | ||
"import": "./src/transport/tcp/index.js" | ||
}, | ||
"./src/tl/builder/package.json": "./src/tl/builder/package.json", | ||
@@ -125,17 +135,2 @@ "./src/tl/builder": { | ||
}, | ||
"./src/transport/obfuscated/package.json": "./src/transport/obfuscated/package.json", | ||
"./src/transport/obfuscated": { | ||
"require": "./src/transport/obfuscated/index.cjs", | ||
"import": "./src/transport/obfuscated/index.js" | ||
}, | ||
"./src/transport/socket/package.json": "./src/transport/socket/package.json", | ||
"./src/transport/socket": { | ||
"require": "./src/transport/socket/index.cjs", | ||
"import": "./src/transport/socket/index.js" | ||
}, | ||
"./src/transport/tcp/package.json": "./src/transport/tcp/package.json", | ||
"./src/transport/tcp": { | ||
"require": "./src/transport/tcp/index.cjs", | ||
"import": "./src/transport/tcp/index.js" | ||
}, | ||
"./src/utils/common/package.json": "./src/utils/common/package.json", | ||
@@ -161,2 +156,7 @@ "./src/utils/common": { | ||
}, | ||
"./src/utils/common/logger/package.json": "./src/utils/common/logger/package.json", | ||
"./src/utils/common/logger": { | ||
"require": "./src/utils/common/logger/index.cjs", | ||
"import": "./src/utils/common/logger/index.js" | ||
}, | ||
"./src/utils/common/random/package.json": "./src/utils/common/random/package.json", | ||
@@ -163,0 +163,0 @@ "./src/utils/common/random": { |
@@ -21,4 +21,5 @@ import bigInt from 'big-integer'; | ||
import { getRsaKeyByFingerprints } from '../utils/rsa/index.js'; | ||
import { createLogger } from '../utils/common/logger/index.js'; | ||
import { tlParse, tlBuild } from '../tl/index.js'; | ||
const logger = createLogger('RPC'); | ||
@@ -61,7 +62,11 @@ class RPC { | ||
const bytes = tlBuild({ | ||
const serializer = new Serializer(); | ||
serializer.predicate({ | ||
_: 'mt_msgs_ack', | ||
msg_ids: this.pendingAcks, | ||
}).getBytes(); | ||
}); | ||
const bytes = serializer.getBytes(); | ||
this.pendingAcks = []; | ||
@@ -133,3 +138,3 @@ | ||
const responsePQ = tlParse(deserializer); | ||
const responsePQ = deserializer.predicate(); | ||
const { | ||
@@ -155,3 +160,5 @@ pq, | ||
const serializer = tlBuild({ | ||
const serializer = new Serializer(); | ||
serializer.predicate({ | ||
_: 'mt_p_q_inner_data', | ||
@@ -194,3 +201,3 @@ pq: pq, | ||
const serverDH = tlParse(deserializer); | ||
const serverDH = deserializer.predicate(); | ||
const { nonce, server_nonce, encrypted_answer } = serverDH; | ||
@@ -221,3 +228,3 @@ | ||
const innerDeserializer = new Deserializer(decryptedData.slice(20).buffer); | ||
const serverDHInnerData = tlParse(innerDeserializer); | ||
const serverDHInnerData = innerDeserializer.predicate(); | ||
@@ -295,3 +302,5 @@ if ( | ||
const innerData = tlBuild({ | ||
const serializer = new Serializer(); | ||
serializer.predicate({ | ||
_: 'mt_client_DH_inner_data', | ||
@@ -302,4 +311,6 @@ nonce: this.nonce, | ||
g_b: bigIntToBytes(this.g.modPow(b, this.dhPrime)), | ||
}).getBytes(); | ||
}); | ||
const innerData = serializer.getBytes(); | ||
const innerDataHash = await SHA1(innerData); | ||
@@ -328,3 +339,3 @@ const paddingLength = 16 - ((innerDataHash.length + innerData.length) % 16); | ||
const serverDHAnswer = tlParse(deserializer); | ||
const serverDHAnswer = deserializer.predicate(); | ||
@@ -443,4 +454,14 @@ const { nonce, server_nonce } = serverDHAnswer; | ||
const result = tlParse(plainDeserializer); | ||
logger.bytes({ | ||
name: 'handleEncryptedMessage plainDeserializer.byteView', | ||
bytes: plainDeserializer.byteView, | ||
}); | ||
const result = plainDeserializer.predicate(); | ||
logger.log({ | ||
name: 'handleEncryptedMessage result', | ||
result, | ||
}); | ||
this.handleDecryptedMessage(result, { messageId, seqNo }); | ||
@@ -450,5 +471,2 @@ } | ||
async handleDecryptedMessage(message, params = {}) { | ||
// console.log(`---handleDecryptedMessage ${message._}`); | ||
// console.log(`message:`, message); | ||
const { messageId } = params; | ||
@@ -552,3 +570,3 @@ | ||
device_model: '@mtproto/core', | ||
system_version: '4.0.1', | ||
system_version: '5.0.0', | ||
app_version: '1.0.0', | ||
@@ -560,3 +578,5 @@ system_lang_code: 'en', | ||
const bytes = tlBuild({ | ||
const serializer = new Serializer(); | ||
serializer.predicate({ | ||
_: 'invokeWithLayer', | ||
@@ -574,4 +594,16 @@ layer: 113, | ||
}, | ||
}).getBytes(); | ||
}); | ||
logger.log({ | ||
name: 'call params', | ||
params, | ||
}); | ||
const bytes = serializer.getBytes(); | ||
logger.bytes({ | ||
name: 'call bytes', | ||
bytes, | ||
}); | ||
return new Promise(async (resolve, reject) => { | ||
@@ -645,3 +677,6 @@ const messageId = await this.sendEncryptedMessage(bytes); | ||
async sendPlainMessage(params) { | ||
const requestBytes = tlBuild(params).getBytes(); | ||
const serializer = new Serializer(); | ||
serializer.predicate(params); | ||
const requestBytes = serializer.getBytes(); | ||
const requestLength = requestBytes.length; | ||
@@ -648,0 +683,0 @@ |
@@ -0,1 +1,3 @@ | ||
import { inflate } from 'pako/lib/inflate'; | ||
import parserMap from '../parser/index.js'; | ||
import { intsToLong } from '../../utils/common/index.js'; | ||
@@ -73,4 +75,48 @@ | ||
} | ||
int() { | ||
return this.int32(); | ||
} | ||
vector(fn, bare = false) { | ||
if (!bare) { | ||
this.int32(); | ||
} | ||
const length = this.int32(); | ||
const result = []; | ||
for (let i = 0; i < length; i++) { | ||
result.push(fn.call(this)); | ||
} | ||
return result; | ||
} | ||
gzip() { | ||
const deserializer = new Deserializer(inflate(this.bytes()).buffer); | ||
return deserializer.predicate(); | ||
} | ||
mt_message() { | ||
const fn = parserMap.get(1538843921); | ||
return fn.call(this); | ||
} | ||
predicate() { | ||
const id = this.int32() >>> 0; | ||
const fn = parserMap.get(id); | ||
if (!fn) { | ||
console.log('Not found predicate with id:', id); | ||
return; | ||
} | ||
return fn.call(this); | ||
} | ||
} | ||
export default Deserializer; |
import bigInt from 'big-integer'; | ||
import builderMap from '../builder/index.js'; | ||
@@ -92,2 +93,44 @@ class Serializer { | ||
int(value) { | ||
this.int32(value); | ||
} | ||
// TODO: Convert method name to 'bool' | ||
Bool(value) { | ||
this.predicate({ _: value ? 'boolTrue' : 'boolFalse' }); | ||
} | ||
has(value) { | ||
return +!!(Array.isArray(value) ? value.length : value); | ||
} | ||
flag(fn, value) { | ||
if (this.has(value)) { | ||
fn.call(this, value); | ||
} | ||
} | ||
flagVector(fn, value) { | ||
if (value === undefined || value.length === 0) { | ||
return; | ||
} | ||
this.vector(fn, value); | ||
} | ||
vector(fn, value) { | ||
this.int32(0x1cb5c415); | ||
this.int32(value.length); | ||
for (let i = 0; i < value.length; i++) { | ||
fn.call(this, value[i]); | ||
} | ||
} | ||
predicate(params, bare = false) { | ||
const fn = builderMap[params._]; | ||
fn.call(this, params); | ||
} | ||
getBytes() { | ||
@@ -94,0 +137,0 @@ const resultBuffer = new ArrayBuffer(this.offset); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
955967
28678