@mtcute/core 0.13.3 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/highlevel/base.d.ts +5 -2
- package/cjs/highlevel/base.js +9 -0
- package/cjs/highlevel/base.js.map +1 -1
- package/cjs/highlevel/client.d.ts +54 -6
- package/cjs/highlevel/client.js +16 -0
- package/cjs/highlevel/client.js.map +1 -1
- package/cjs/highlevel/client.types.d.ts +5 -1
- package/cjs/highlevel/client.types.js.map +1 -1
- package/cjs/highlevel/methods/_imports.js.map +1 -1
- package/cjs/highlevel/methods/_init.js +6 -0
- package/cjs/highlevel/methods/_init.js.map +1 -1
- package/cjs/highlevel/methods/auth/resend-code.d.ts +2 -0
- package/cjs/highlevel/methods/auth/resend-code.js +2 -2
- package/cjs/highlevel/methods/auth/resend-code.js.map +1 -1
- package/cjs/highlevel/methods/auth/send-code.d.ts +2 -0
- package/cjs/highlevel/methods/auth/send-code.js +1 -1
- package/cjs/highlevel/methods/auth/send-code.js.map +1 -1
- package/cjs/highlevel/methods/auth/sign-in-qr.d.ts +28 -0
- package/cjs/highlevel/methods/auth/sign-in-qr.js +125 -0
- package/cjs/highlevel/methods/auth/sign-in-qr.js.map +1 -0
- package/cjs/highlevel/methods/auth/sign-in.d.ts +2 -0
- package/cjs/highlevel/methods/auth/sign-in.js +2 -2
- package/cjs/highlevel/methods/auth/sign-in.js.map +1 -1
- package/cjs/highlevel/methods/auth/start.d.ts +10 -0
- package/cjs/highlevel/methods/auth/start.js +25 -3
- package/cjs/highlevel/methods/auth/start.js.map +1 -1
- package/cjs/highlevel/methods/chats/delete-history.d.ts +2 -4
- package/cjs/highlevel/methods/chats/delete-history.js.map +1 -1
- package/cjs/highlevel/methods/chats/kick-chat-member.js +1 -1
- package/cjs/highlevel/methods/chats/kick-chat-member.js.map +1 -1
- package/cjs/highlevel/methods/files/normalize-input-media.js +14 -0
- package/cjs/highlevel/methods/files/normalize-input-media.js.map +1 -1
- package/cjs/highlevel/methods/files/upload-media.js +1 -0
- package/cjs/highlevel/methods/files/upload-media.js.map +1 -1
- package/cjs/highlevel/methods/messages/find-in-update.js +4 -2
- package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-media.js +5 -2
- package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
- package/cjs/highlevel/methods.d.ts +1 -0
- package/cjs/highlevel/methods.js +8 -6
- package/cjs/highlevel/methods.js.map +1 -1
- package/cjs/highlevel/types/media/extended-media.d.ts +20 -0
- package/cjs/highlevel/types/media/extended-media.js +41 -0
- package/cjs/highlevel/types/media/extended-media.js.map +1 -0
- package/cjs/highlevel/types/media/index.d.ts +2 -0
- package/cjs/highlevel/types/media/index.js +2 -0
- package/cjs/highlevel/types/media/index.js.map +1 -1
- package/cjs/highlevel/types/media/input-media/factories.d.ts +2 -1
- package/cjs/highlevel/types/media/input-media/factories.js +7 -1
- package/cjs/highlevel/types/media/input-media/factories.js.map +1 -1
- package/cjs/highlevel/types/media/input-media/types.d.ts +12 -1
- package/cjs/highlevel/types/media/input-media/types.js.map +1 -1
- package/cjs/highlevel/types/media/invoice.d.ts +2 -20
- package/cjs/highlevel/types/media/invoice.js +3 -37
- package/cjs/highlevel/types/media/invoice.js.map +1 -1
- package/cjs/highlevel/types/media/paid-media.d.ts +33 -0
- package/cjs/highlevel/types/media/paid-media.js +66 -0
- package/cjs/highlevel/types/media/paid-media.js.map +1 -0
- package/cjs/highlevel/types/messages/message-media.d.ts +2 -1
- package/cjs/highlevel/types/messages/message-media.js +10 -0
- package/cjs/highlevel/types/messages/message-media.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/index.d.ts +3 -2
- package/cjs/highlevel/types/stories/interactive/index.js +5 -1
- package/cjs/highlevel/types/stories/interactive/index.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/input.d.ts +1 -0
- package/cjs/highlevel/types/stories/interactive/input.js +7 -0
- package/cjs/highlevel/types/stories/interactive/input.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/url.d.ts +11 -0
- package/cjs/highlevel/types/stories/interactive/url.js +20 -0
- package/cjs/highlevel/types/stories/interactive/url.js.map +1 -0
- package/cjs/highlevel/types/updates/callback-query.d.ts +16 -2
- package/cjs/highlevel/types/updates/callback-query.js +31 -1
- package/cjs/highlevel/types/updates/callback-query.js.map +1 -1
- package/cjs/highlevel/types/updates/index.d.ts +5 -2
- package/cjs/highlevel/types/updates/index.js +2 -1
- package/cjs/highlevel/types/updates/index.js.map +1 -1
- package/cjs/highlevel/types/updates/parse-update.js +2 -0
- package/cjs/highlevel/types/updates/parse-update.js.map +1 -1
- package/cjs/highlevel/updates/manager.d.ts +1 -0
- package/cjs/highlevel/updates/manager.js +3 -0
- package/cjs/highlevel/updates/manager.js.map +1 -1
- package/cjs/highlevel/worker/port.d.ts +11 -8
- package/cjs/highlevel/worker/port.js +10 -0
- package/cjs/highlevel/worker/port.js.map +1 -1
- package/cjs/highlevel/worker/protocol.d.ts +2 -0
- package/cjs/highlevel/worker/protocol.js.map +1 -1
- package/cjs/highlevel/worker/worker.js +1 -0
- package/cjs/highlevel/worker/worker.js.map +1 -1
- package/cjs/network/client.d.ts +2 -0
- package/cjs/network/client.js +8 -0
- package/cjs/network/client.js.map +1 -1
- package/cjs/network/mtproto-session.js +2 -0
- package/cjs/network/mtproto-session.js.map +1 -1
- package/cjs/network/network-manager.d.ts +9 -2
- package/cjs/network/network-manager.js +34 -15
- package/cjs/network/network-manager.js.map +1 -1
- package/cjs/network/session-connection.js +12 -3
- package/cjs/network/session-connection.js.map +1 -1
- package/cjs/storage/sqlite/repository/peers.d.ts +2 -0
- package/cjs/storage/sqlite/repository/peers.js +14 -0
- package/cjs/storage/sqlite/repository/peers.js.map +1 -1
- package/cjs/utils/bigint-utils.js +1 -1
- package/cjs/utils/bigint-utils.js.map +1 -1
- package/cjs/utils/misc-utils.d.ts +1 -0
- package/cjs/utils/misc-utils.js +17 -1
- package/cjs/utils/misc-utils.js.map +1 -1
- package/esm/highlevel/base.d.ts +5 -2
- package/esm/highlevel/base.js +9 -0
- package/esm/highlevel/base.js.map +1 -1
- package/esm/highlevel/client.d.ts +54 -6
- package/esm/highlevel/client.js +16 -0
- package/esm/highlevel/client.js.map +1 -1
- package/esm/highlevel/client.types.d.ts +5 -1
- package/esm/highlevel/client.types.js.map +1 -1
- package/esm/highlevel/methods/_imports.js.map +1 -1
- package/esm/highlevel/methods/_init.js +6 -0
- package/esm/highlevel/methods/_init.js.map +1 -1
- package/esm/highlevel/methods/auth/resend-code.d.ts +2 -0
- package/esm/highlevel/methods/auth/resend-code.js +2 -2
- package/esm/highlevel/methods/auth/resend-code.js.map +1 -1
- package/esm/highlevel/methods/auth/send-code.d.ts +2 -0
- package/esm/highlevel/methods/auth/send-code.js +1 -1
- package/esm/highlevel/methods/auth/send-code.js.map +1 -1
- package/esm/highlevel/methods/auth/sign-in-qr.d.ts +28 -0
- package/esm/highlevel/methods/auth/sign-in-qr.js +121 -0
- package/esm/highlevel/methods/auth/sign-in-qr.js.map +1 -0
- package/esm/highlevel/methods/auth/sign-in.d.ts +2 -0
- package/esm/highlevel/methods/auth/sign-in.js +2 -2
- package/esm/highlevel/methods/auth/sign-in.js.map +1 -1
- package/esm/highlevel/methods/auth/start.d.ts +10 -0
- package/esm/highlevel/methods/auth/start.js +25 -3
- package/esm/highlevel/methods/auth/start.js.map +1 -1
- package/esm/highlevel/methods/chats/delete-history.d.ts +2 -4
- package/esm/highlevel/methods/chats/delete-history.js.map +1 -1
- package/esm/highlevel/methods/chats/kick-chat-member.js +2 -2
- package/esm/highlevel/methods/chats/kick-chat-member.js.map +1 -1
- package/esm/highlevel/methods/files/normalize-input-media.js +14 -0
- package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
- package/esm/highlevel/methods/files/upload-media.js +1 -0
- package/esm/highlevel/methods/files/upload-media.js.map +1 -1
- package/esm/highlevel/methods/messages/find-in-update.js +4 -2
- package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
- package/esm/highlevel/methods/messages/send-media.js +5 -2
- package/esm/highlevel/methods/messages/send-media.js.map +1 -1
- package/esm/highlevel/methods.d.ts +1 -0
- package/esm/highlevel/methods.js +1 -0
- package/esm/highlevel/methods.js.map +1 -1
- package/esm/highlevel/types/media/extended-media.d.ts +20 -0
- package/esm/highlevel/types/media/extended-media.js +38 -0
- package/esm/highlevel/types/media/extended-media.js.map +1 -0
- package/esm/highlevel/types/media/index.d.ts +2 -0
- package/esm/highlevel/types/media/index.js +2 -0
- package/esm/highlevel/types/media/index.js.map +1 -1
- package/esm/highlevel/types/media/input-media/factories.d.ts +2 -1
- package/esm/highlevel/types/media/input-media/factories.js +5 -0
- package/esm/highlevel/types/media/input-media/factories.js.map +1 -1
- package/esm/highlevel/types/media/input-media/types.d.ts +12 -1
- package/esm/highlevel/types/media/input-media/types.js.map +1 -1
- package/esm/highlevel/types/media/invoice.d.ts +2 -20
- package/esm/highlevel/types/media/invoice.js +2 -36
- package/esm/highlevel/types/media/invoice.js.map +1 -1
- package/esm/highlevel/types/media/paid-media.d.ts +33 -0
- package/esm/highlevel/types/media/paid-media.js +63 -0
- package/esm/highlevel/types/media/paid-media.js.map +1 -0
- package/esm/highlevel/types/messages/message-media.d.ts +2 -1
- package/esm/highlevel/types/messages/message-media.js +10 -0
- package/esm/highlevel/types/messages/message-media.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/index.d.ts +3 -2
- package/esm/highlevel/types/stories/interactive/index.js +4 -1
- package/esm/highlevel/types/stories/interactive/index.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/input.d.ts +1 -0
- package/esm/highlevel/types/stories/interactive/input.js +7 -0
- package/esm/highlevel/types/stories/interactive/input.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/url.d.ts +11 -0
- package/esm/highlevel/types/stories/interactive/url.js +16 -0
- package/esm/highlevel/types/stories/interactive/url.js.map +1 -0
- package/esm/highlevel/types/updates/callback-query.d.ts +16 -2
- package/esm/highlevel/types/updates/callback-query.js +30 -0
- package/esm/highlevel/types/updates/callback-query.js.map +1 -1
- package/esm/highlevel/types/updates/index.d.ts +5 -2
- package/esm/highlevel/types/updates/index.js +2 -2
- package/esm/highlevel/types/updates/index.js.map +1 -1
- package/esm/highlevel/types/updates/parse-update.js +3 -1
- package/esm/highlevel/types/updates/parse-update.js.map +1 -1
- package/esm/highlevel/updates/manager.d.ts +1 -0
- package/esm/highlevel/updates/manager.js +3 -0
- package/esm/highlevel/updates/manager.js.map +1 -1
- package/esm/highlevel/worker/port.d.ts +11 -8
- package/esm/highlevel/worker/port.js +10 -0
- package/esm/highlevel/worker/port.js.map +1 -1
- package/esm/highlevel/worker/protocol.d.ts +2 -0
- package/esm/highlevel/worker/protocol.js.map +1 -1
- package/esm/highlevel/worker/worker.js +1 -0
- package/esm/highlevel/worker/worker.js.map +1 -1
- package/esm/network/client.d.ts +2 -0
- package/esm/network/client.js +8 -0
- package/esm/network/client.js.map +1 -1
- package/esm/network/mtproto-session.js +2 -0
- package/esm/network/mtproto-session.js.map +1 -1
- package/esm/network/network-manager.d.ts +9 -2
- package/esm/network/network-manager.js +35 -16
- package/esm/network/network-manager.js.map +1 -1
- package/esm/network/session-connection.js +12 -3
- package/esm/network/session-connection.js.map +1 -1
- package/esm/storage/sqlite/repository/peers.d.ts +2 -0
- package/esm/storage/sqlite/repository/peers.js +14 -0
- package/esm/storage/sqlite/repository/peers.js.map +1 -1
- package/esm/utils/bigint-utils.js +1 -1
- package/esm/utils/bigint-utils.js.map +1 -1
- package/esm/utils/misc-utils.d.ts +1 -0
- package/esm/utils/misc-utils.js +15 -0
- package/esm/utils/misc-utils.js.map +1 -1
- package/package.json +10 -5
|
@@ -2,7 +2,9 @@ import { IPeersRepository } from '../../../highlevel/storage/repository/peers.js
|
|
|
2
2
|
import { BaseSqliteStorageDriver } from '../driver.js';
|
|
3
3
|
export declare class SqlitePeersRepository implements IPeersRepository {
|
|
4
4
|
readonly _driver: BaseSqliteStorageDriver;
|
|
5
|
+
private _loaded;
|
|
5
6
|
constructor(_driver: BaseSqliteStorageDriver);
|
|
7
|
+
private _ensureLoaded;
|
|
6
8
|
private _store;
|
|
7
9
|
store(peer: IPeersRepository.PeerInfo): void;
|
|
8
10
|
private _getById;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MtcuteError } from '../../../types/errors.js';
|
|
1
2
|
function mapPeerDto(dto) {
|
|
2
3
|
return {
|
|
3
4
|
id: dto.id,
|
|
@@ -10,6 +11,7 @@ function mapPeerDto(dto) {
|
|
|
10
11
|
}
|
|
11
12
|
export class SqlitePeersRepository {
|
|
12
13
|
_driver;
|
|
14
|
+
_loaded = false;
|
|
13
15
|
constructor(_driver) {
|
|
14
16
|
this._driver = _driver;
|
|
15
17
|
_driver.registerMigration('peers', 1, (db) => {
|
|
@@ -27,6 +29,7 @@ export class SqlitePeersRepository {
|
|
|
27
29
|
`);
|
|
28
30
|
});
|
|
29
31
|
_driver.onLoad((db) => {
|
|
32
|
+
this._loaded = true;
|
|
30
33
|
this._store = db.prepare('insert or replace into peers (id, hash, usernames, updated, phone, complete) values (?, ?, ?, ?, ?, ?)');
|
|
31
34
|
this._getById = db.prepare('select * from peers where id = ?');
|
|
32
35
|
this._getByUsername = db.prepare('select * from peers where exists (select 1 from json_each(usernames) where value = ?)');
|
|
@@ -38,6 +41,14 @@ export class SqlitePeersRepository {
|
|
|
38
41
|
db.exec('drop table entities');
|
|
39
42
|
});
|
|
40
43
|
}
|
|
44
|
+
_ensureLoaded() {
|
|
45
|
+
// this is (so far) the only repo where we do such check because it's a common mistake to forget to call start()
|
|
46
|
+
// or connect() on the client and immediately start using high-level methods, which in turn try to resolve peers
|
|
47
|
+
// from the database, and fail because nothing is initialized yet
|
|
48
|
+
if (!this._loaded) {
|
|
49
|
+
throw new MtcuteError('Peers repository is not loaded. Have you called client.start() (or similar)?');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
41
52
|
_store;
|
|
42
53
|
store(peer) {
|
|
43
54
|
this._driver._writeLater(this._store, [
|
|
@@ -51,6 +62,7 @@ export class SqlitePeersRepository {
|
|
|
51
62
|
}
|
|
52
63
|
_getById;
|
|
53
64
|
getById(id) {
|
|
65
|
+
this._ensureLoaded();
|
|
54
66
|
const row = this._getById.get(id);
|
|
55
67
|
if (!row)
|
|
56
68
|
return null;
|
|
@@ -58,6 +70,7 @@ export class SqlitePeersRepository {
|
|
|
58
70
|
}
|
|
59
71
|
_getByUsername;
|
|
60
72
|
getByUsername(username) {
|
|
73
|
+
this._ensureLoaded();
|
|
61
74
|
const row = this._getByUsername.get(username);
|
|
62
75
|
if (!row)
|
|
63
76
|
return null;
|
|
@@ -65,6 +78,7 @@ export class SqlitePeersRepository {
|
|
|
65
78
|
}
|
|
66
79
|
_getByPhone;
|
|
67
80
|
getByPhone(phone) {
|
|
81
|
+
this._ensureLoaded();
|
|
68
82
|
const row = this._getByPhone.get(phone);
|
|
69
83
|
if (!row)
|
|
70
84
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peers.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/peers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"peers.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/peers.ts"],"names":[],"mappings":"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","sourcesContent":["import { IPeersRepository } from '../../../highlevel/storage/repository/peers.js'\nimport { MtcuteError } from '../../../types/errors.js'\nimport { BaseSqliteStorageDriver } from '../driver.js'\nimport { ISqliteStatement } from '../types.js'\n\ninterface PeerDto {\n id: number\n hash: string\n usernames: string\n updated: number\n phone: string | null\n complete: Uint8Array\n}\n\nfunction mapPeerDto(dto: PeerDto): IPeersRepository.PeerInfo {\n return {\n id: dto.id,\n accessHash: dto.hash,\n usernames: JSON.parse(dto.usernames) as string[],\n updated: dto.updated,\n phone: dto.phone || undefined,\n complete: dto.complete,\n }\n}\n\nexport class SqlitePeersRepository implements IPeersRepository {\n private _loaded = false\n\n constructor(readonly _driver: BaseSqliteStorageDriver) {\n _driver.registerMigration('peers', 1, (db) => {\n db.exec(`\n create table peers (\n id integer primary key,\n hash text not null,\n usernames json not null,\n updated integer not null,\n phone text,\n complete blob\n );\n create index idx_peers_usernames on peers (usernames);\n create index idx_peers_phone on peers (phone);\n `)\n })\n _driver.onLoad((db) => {\n this._loaded = true\n\n this._store = db.prepare(\n 'insert or replace into peers (id, hash, usernames, updated, phone, complete) values (?, ?, ?, ?, ?, ?)',\n )\n\n this._getById = db.prepare('select * from peers where id = ?')\n this._getByUsername = db.prepare(\n 'select * from peers where exists (select 1 from json_each(usernames) where value = ?)',\n )\n this._getByPhone = db.prepare('select * from peers where phone = ?')\n\n this._delAll = db.prepare('delete from peers')\n })\n _driver.registerLegacyMigration('peers', (db) => {\n // not too important information, just drop the table\n db.exec('drop table entities')\n })\n }\n\n private _ensureLoaded() {\n // this is (so far) the only repo where we do such check because it's a common mistake to forget to call start()\n // or connect() on the client and immediately start using high-level methods, which in turn try to resolve peers\n // from the database, and fail because nothing is initialized yet\n\n if (!this._loaded) {\n throw new MtcuteError('Peers repository is not loaded. Have you called client.start() (or similar)?')\n }\n }\n\n private _store!: ISqliteStatement\n store(peer: IPeersRepository.PeerInfo): void {\n this._driver._writeLater(this._store, [\n peer.id,\n peer.accessHash,\n JSON.stringify(peer.usernames),\n peer.updated,\n peer.phone ?? null,\n peer.complete,\n ])\n }\n\n private _getById!: ISqliteStatement\n getById(id: number): IPeersRepository.PeerInfo | null {\n this._ensureLoaded()\n const row = this._getById.get(id)\n if (!row) return null\n\n return mapPeerDto(row as PeerDto)\n }\n\n private _getByUsername!: ISqliteStatement\n getByUsername(username: string): IPeersRepository.PeerInfo | null {\n this._ensureLoaded()\n const row = this._getByUsername.get(username)\n if (!row) return null\n\n return mapPeerDto(row as PeerDto)\n }\n\n private _getByPhone!: ISqliteStatement\n getByPhone(phone: string): IPeersRepository.PeerInfo | null {\n this._ensureLoaded()\n const row = this._getByPhone.get(phone)\n if (!row) return null\n\n return mapPeerDto(row as PeerDto)\n }\n\n private _delAll!: ISqliteStatement\n deleteAll(): void {\n this._delAll.run()\n }\n}\n"]}
|
|
@@ -95,7 +95,7 @@ export function randomBigIntInRange(crypto, max, min = 1n) {
|
|
|
95
95
|
const interval = max - min;
|
|
96
96
|
if (interval < 0n)
|
|
97
97
|
throw new Error('expected min < max');
|
|
98
|
-
const byteSize = bigIntBitLength(interval) / 8;
|
|
98
|
+
const byteSize = Math.ceil(bigIntBitLength(interval) / 8);
|
|
99
99
|
let result = randomBigInt(crypto, byteSize);
|
|
100
100
|
while (result > interval)
|
|
101
101
|
result -= interval;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigint-utils.js","sourceRoot":"","sources":["../../../src/utils/bigint-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferToReversed } from './buffer-utils.js'\nimport { ICryptoProvider } from './crypto/abstract.js'\n\n/**\n * Get the minimum number of bits required to represent a number\n */\nexport function bigIntBitLength(n: bigint) {\n // not the fastest way, but at least not .toString(2) and not too complex\n // taken from: https://stackoverflow.com/a/76616288/22656950\n\n const i = (n.toString(16).length - 1) * 4\n\n return i + 32 - Math.clz32(Number(n >> BigInt(i)))\n}\n\n/**\n * Convert a big integer to a buffer\n *\n * @param value Value to convert\n * @param length Length of the resulting buffer (by default it's the minimum required)\n * @param le Whether to use little-endian encoding\n */\nexport function bigIntToBuffer(value: bigint, length = 0, le = false): Uint8Array {\n const bits = bigIntBitLength(value)\n const bytes = Math.ceil(bits / 8)\n\n if (length !== 0 && bytes > length) {\n throw new Error('Value out of bounds')\n }\n\n if (length === 0) length = bytes\n\n const buf = new ArrayBuffer(length)\n const u8 = new Uint8Array(buf)\n\n const unaligned = length % 8\n const dv = new DataView(buf, 0, length - unaligned)\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n dv.setBigUint64(i, value & 0xffffffffffffffffn, true)\n value >>= 64n\n }\n\n if (unaligned > 0) {\n for (let i = length - unaligned; i < length; i++) {\n u8[i] = Number(value & 0xffn)\n value >>= 8n\n }\n }\n\n if (!le) u8.reverse()\n\n return u8\n}\n\n/**\n * Convert a buffer to a big integer\n *\n * @param buffer Buffer to convert\n * @param le Whether to use little-endian encoding\n */\nexport function bufferToBigInt(buffer: Uint8Array, le = false): bigint {\n if (le) buffer = bufferToReversed(buffer)\n\n const unaligned = buffer.length % 8\n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength - unaligned)\n\n let res = 0n\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n res = (res << 64n) | BigInt(dv.getBigUint64(i, false))\n }\n\n if (unaligned > 0) {\n for (let i = buffer.length - unaligned; i < buffer.length; i++) {\n res = (res << 8n) | BigInt(buffer[i])\n }\n }\n\n return res\n}\n\n/**\n * Generate a cryptographically safe random big integer of the given size (in bytes)\n * @param size Size in bytes\n */\nexport function randomBigInt(crypto: ICryptoProvider, size: number): bigint {\n return bufferToBigInt(crypto.randomBytes(size))\n}\n\n/**\n * Generate a random big integer of the given size (in bits)\n * @param bits\n */\nexport function randomBigIntBits(crypto: ICryptoProvider, bits: number): bigint {\n let num = randomBigInt(crypto, Math.ceil(bits / 8))\n\n const bitLength = bigIntBitLength(num)\n\n if (bitLength > bits) {\n const toTrim = bitLength - bits\n num >>= BigInt(toTrim)\n }\n\n return num\n}\n\n/**\n * Generate a random big integer in the range [min, max)\n *\n * @param max Maximum value (exclusive)\n * @param min Minimum value (inclusive)\n */\nexport function randomBigIntInRange(crypto: ICryptoProvider, max: bigint, min = 1n): bigint {\n const interval = max - min\n if (interval < 0n) throw new Error('expected min < max')\n\n const byteSize = bigIntBitLength(interval) / 8\n\n let result = randomBigInt(crypto, byteSize)\n while (result > interval) result -= interval\n\n return min + result\n}\n\n/**\n * Compute the multiplicity of 2 in the prime factorization of n\n * @param n\n */\nexport function twoMultiplicity(n: bigint): bigint {\n if (n === 0n) return 0n\n\n let m = 0n\n let pow = 1n\n\n while (true) {\n if ((n & pow) !== 0n) return m\n m += 1n\n pow <<= 1n\n }\n}\n\nexport function bigIntMin(a: bigint, b: bigint): bigint {\n return a < b ? a : b\n}\n\nexport function bigIntAbs(a: bigint): bigint {\n return a < 0n ? -a : a\n}\n\nexport function bigIntGcd(a: bigint, b: bigint): bigint {\n // using euclidean algorithm is fast enough on smaller numbers\n // https://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations\n\n while (b !== 0n) {\n const t = b\n b = a % b\n a = t\n }\n\n return a\n}\n\nexport function bigIntModPow(base: bigint, exp: bigint, mod: bigint): bigint {\n // using the binary method is good enough for our use case\n // https://en.wikipedia.org/wiki/Modular_exponentiation#Right-to-left_binary_method\n\n base %= mod\n\n let result = 1n\n\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod\n }\n\n exp >>= 1n\n base = base ** 2n % mod\n }\n\n return result\n}\n\n// below code is based on https://github.com/juanelas/bigint-mod-arith, MIT license\n\nfunction eGcd(a: bigint, b: bigint): [bigint, bigint, bigint] {\n let x = 0n\n let y = 1n\n let u = 1n\n let v = 0n\n\n while (a !== 0n) {\n const q = b / a\n const r: bigint = b % a\n const m = x - u * q\n const n = y - v * q\n b = a\n a = r\n x = u\n y = v\n u = m\n v = n\n }\n\n return [b, x, y]\n}\n\nfunction toZn(a: number | bigint, n: number | bigint): bigint {\n if (typeof a === 'number') a = BigInt(a)\n if (typeof n === 'number') n = BigInt(n)\n\n if (n <= 0n) {\n throw new RangeError('n must be > 0')\n }\n\n const aZn = a % n\n\n return aZn < 0n ? aZn + n : aZn\n}\n\nexport function bigIntModInv(a: bigint, n: bigint): bigint {\n const [g, x] = eGcd(toZn(a, n), n)\n\n if (g !== 1n) {\n throw new RangeError(`${a.toString()} does not have inverse modulo ${n.toString()}`) // modular inverse does not exist\n } else {\n return toZn(x, n)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bigint-utils.js","sourceRoot":"","sources":["../../../src/utils/bigint-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferToReversed } from './buffer-utils.js'\nimport { ICryptoProvider } from './crypto/abstract.js'\n\n/**\n * Get the minimum number of bits required to represent a number\n */\nexport function bigIntBitLength(n: bigint) {\n // not the fastest way, but at least not .toString(2) and not too complex\n // taken from: https://stackoverflow.com/a/76616288/22656950\n\n const i = (n.toString(16).length - 1) * 4\n\n return i + 32 - Math.clz32(Number(n >> BigInt(i)))\n}\n\n/**\n * Convert a big integer to a buffer\n *\n * @param value Value to convert\n * @param length Length of the resulting buffer (by default it's the minimum required)\n * @param le Whether to use little-endian encoding\n */\nexport function bigIntToBuffer(value: bigint, length = 0, le = false): Uint8Array {\n const bits = bigIntBitLength(value)\n const bytes = Math.ceil(bits / 8)\n\n if (length !== 0 && bytes > length) {\n throw new Error('Value out of bounds')\n }\n\n if (length === 0) length = bytes\n\n const buf = new ArrayBuffer(length)\n const u8 = new Uint8Array(buf)\n\n const unaligned = length % 8\n const dv = new DataView(buf, 0, length - unaligned)\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n dv.setBigUint64(i, value & 0xffffffffffffffffn, true)\n value >>= 64n\n }\n\n if (unaligned > 0) {\n for (let i = length - unaligned; i < length; i++) {\n u8[i] = Number(value & 0xffn)\n value >>= 8n\n }\n }\n\n if (!le) u8.reverse()\n\n return u8\n}\n\n/**\n * Convert a buffer to a big integer\n *\n * @param buffer Buffer to convert\n * @param le Whether to use little-endian encoding\n */\nexport function bufferToBigInt(buffer: Uint8Array, le = false): bigint {\n if (le) buffer = bufferToReversed(buffer)\n\n const unaligned = buffer.length % 8\n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength - unaligned)\n\n let res = 0n\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n res = (res << 64n) | BigInt(dv.getBigUint64(i, false))\n }\n\n if (unaligned > 0) {\n for (let i = buffer.length - unaligned; i < buffer.length; i++) {\n res = (res << 8n) | BigInt(buffer[i])\n }\n }\n\n return res\n}\n\n/**\n * Generate a cryptographically safe random big integer of the given size (in bytes)\n * @param size Size in bytes\n */\nexport function randomBigInt(crypto: ICryptoProvider, size: number): bigint {\n return bufferToBigInt(crypto.randomBytes(size))\n}\n\n/**\n * Generate a random big integer of the given size (in bits)\n * @param bits\n */\nexport function randomBigIntBits(crypto: ICryptoProvider, bits: number): bigint {\n let num = randomBigInt(crypto, Math.ceil(bits / 8))\n\n const bitLength = bigIntBitLength(num)\n\n if (bitLength > bits) {\n const toTrim = bitLength - bits\n num >>= BigInt(toTrim)\n }\n\n return num\n}\n\n/**\n * Generate a random big integer in the range [min, max)\n *\n * @param max Maximum value (exclusive)\n * @param min Minimum value (inclusive)\n */\nexport function randomBigIntInRange(crypto: ICryptoProvider, max: bigint, min = 1n): bigint {\n const interval = max - min\n if (interval < 0n) throw new Error('expected min < max')\n\n const byteSize = Math.ceil(bigIntBitLength(interval) / 8)\n\n let result = randomBigInt(crypto, byteSize)\n while (result > interval) result -= interval\n\n return min + result\n}\n\n/**\n * Compute the multiplicity of 2 in the prime factorization of n\n * @param n\n */\nexport function twoMultiplicity(n: bigint): bigint {\n if (n === 0n) return 0n\n\n let m = 0n\n let pow = 1n\n\n while (true) {\n if ((n & pow) !== 0n) return m\n m += 1n\n pow <<= 1n\n }\n}\n\nexport function bigIntMin(a: bigint, b: bigint): bigint {\n return a < b ? a : b\n}\n\nexport function bigIntAbs(a: bigint): bigint {\n return a < 0n ? -a : a\n}\n\nexport function bigIntGcd(a: bigint, b: bigint): bigint {\n // using euclidean algorithm is fast enough on smaller numbers\n // https://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations\n\n while (b !== 0n) {\n const t = b\n b = a % b\n a = t\n }\n\n return a\n}\n\nexport function bigIntModPow(base: bigint, exp: bigint, mod: bigint): bigint {\n // using the binary method is good enough for our use case\n // https://en.wikipedia.org/wiki/Modular_exponentiation#Right-to-left_binary_method\n\n base %= mod\n\n let result = 1n\n\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod\n }\n\n exp >>= 1n\n base = base ** 2n % mod\n }\n\n return result\n}\n\n// below code is based on https://github.com/juanelas/bigint-mod-arith, MIT license\n\nfunction eGcd(a: bigint, b: bigint): [bigint, bigint, bigint] {\n let x = 0n\n let y = 1n\n let u = 1n\n let v = 0n\n\n while (a !== 0n) {\n const q = b / a\n const r: bigint = b % a\n const m = x - u * q\n const n = y - v * q\n b = a\n a = r\n x = u\n y = v\n u = m\n v = n\n }\n\n return [b, x, y]\n}\n\nfunction toZn(a: number | bigint, n: number | bigint): bigint {\n if (typeof a === 'number') a = BigInt(a)\n if (typeof n === 'number') n = BigInt(n)\n\n if (n <= 0n) {\n throw new RangeError('n must be > 0')\n }\n\n const aZn = a % n\n\n return aZn < 0n ? aZn + n : aZn\n}\n\nexport function bigIntModInv(a: bigint, n: bigint): bigint {\n const [g, x] = eGcd(toZn(a, n), n)\n\n if (g !== 1n) {\n throw new RangeError(`${a.toString()} does not have inverse modulo ${n.toString()}`) // modular inverse does not exist\n } else {\n return toZn(x, n)\n }\n}\n"]}
|
package/esm/utils/misc-utils.js
CHANGED
|
@@ -4,6 +4,21 @@
|
|
|
4
4
|
* @param ms Number of ms to sleep
|
|
5
5
|
*/
|
|
6
6
|
export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
+
export function sleepWithAbort(ms, signal) {
|
|
8
|
+
return new Promise((resolve, reject) => {
|
|
9
|
+
// eslint-disable-next-line prefer-const
|
|
10
|
+
let timeout;
|
|
11
|
+
const onAbort = () => {
|
|
12
|
+
clearTimeout(timeout);
|
|
13
|
+
reject(signal.reason);
|
|
14
|
+
};
|
|
15
|
+
signal.addEventListener('abort', onAbort);
|
|
16
|
+
timeout = setTimeout(() => {
|
|
17
|
+
signal.removeEventListener('abort', onAbort);
|
|
18
|
+
resolve();
|
|
19
|
+
}, ms);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
7
22
|
export function getRandomInt(top) {
|
|
8
23
|
return Math.floor(Math.random() * top);
|
|
9
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc-utils.js","sourceRoot":"","sources":["../../../src/utils/misc-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAErG,MAAM,UAAU,YAAY,CAAC,GAAW;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAA;AAC1C,CAAC","sourcesContent":["/**\n * Sleep for the given number of ms\n *\n * @param ms Number of ms to sleep\n */\nexport const sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms))\n\nexport function getRandomInt(top: number): number {\n return Math.floor(Math.random() * top)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"misc-utils.js","sourceRoot":"","sources":["../../../src/utils/misc-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAErG,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,MAAmB;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,wCAAwC;QACxC,IAAI,OAAuB,CAAA;QAE3B,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACzB,CAAC,CAAA;QAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEzC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC5C,OAAO,EAAE,CAAA;QACb,CAAC,EAAE,EAAE,CAAC,CAAA;IACV,CAAC,CAAC,CAAA;AACN,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAA;AAC1C,CAAC","sourcesContent":["/**\n * Sleep for the given number of ms\n *\n * @param ms Number of ms to sleep\n */\nexport const sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms))\n\nexport function sleepWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line prefer-const\n let timeout: NodeJS.Timeout\n\n const onAbort = () => {\n clearTimeout(timeout)\n reject(signal.reason)\n }\n\n signal.addEventListener('abort', onAbort)\n\n timeout = setTimeout(() => {\n signal.removeEventListener('abort', onAbort)\n resolve()\n }, ms)\n })\n}\n\nexport function getRandomInt(top: number): number {\n return Math.floor(Math.random() * top)\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mtcute/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Type-safe library for MTProto (Telegram API)",
|
|
5
5
|
"author": "alina sireneva <alina@tei.su>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,13 +34,18 @@
|
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@mtcute/tl": "^
|
|
38
|
-
"@mtcute/tl-runtime": "^0.
|
|
39
|
-
"@mtcute/file-id": "^0.
|
|
37
|
+
"@mtcute/tl": "^183.0.0",
|
|
38
|
+
"@mtcute/tl-runtime": "^0.15.0",
|
|
39
|
+
"@mtcute/file-id": "^0.15.0",
|
|
40
40
|
"@types/events": "3.0.0",
|
|
41
41
|
"events": "3.2.0",
|
|
42
42
|
"long": "5.2.3"
|
|
43
43
|
},
|
|
44
44
|
"main": "cjs/index.js",
|
|
45
|
-
"module": "esm/index.js"
|
|
45
|
+
"module": "esm/index.js",
|
|
46
|
+
"homepage": "https://mtcute.dev",
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "https://github.com/mtcute/mtcute"
|
|
50
|
+
}
|
|
46
51
|
}
|