@mtcute/web 0.16.7 → 0.16.13
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/client.d.ts → client.d.ts} +2 -3
- package/{cjs/crypto.d.ts → crypto.d.ts} +2 -3
- package/idb/idb.test.d.ts +1 -0
- package/{esm/idb → idb}/index.d.ts +1 -1
- package/{esm/idb → idb}/repository/auth-keys.d.ts +2 -2
- package/{cjs/idb → idb}/repository/kv.d.ts +2 -2
- package/{esm/idb → idb}/repository/peers.d.ts +3 -3
- package/{cjs/idb → idb}/repository/ref-messages.d.ts +2 -2
- package/index.cjs +965 -0
- package/index.d.ts +7 -1
- package/index.js +955 -1
- package/methods.cjs +14 -0
- package/methods.d.ts +1 -1
- package/methods.js +1 -1
- package/package.json +56 -40
- package/{cjs/platform.d.ts → platform.d.ts} +1 -1
- package/utils.cjs +14 -0
- package/utils.d.ts +1 -1
- package/utils.js +1 -1
- package/{esm/websocket.d.ts → websocket.d.ts} +3 -4
- package/websocket.test.d.ts +1 -0
- package/{cjs/worker.d.ts → worker.d.ts} +1 -2
- package/cjs/client.js +0 -43
- package/cjs/client.js.map +0 -1
- package/cjs/common-internals-web/base64.js +0 -111
- package/cjs/common-internals-web/base64.js.map +0 -1
- package/cjs/common-internals-web/hex.js +0 -66
- package/cjs/common-internals-web/hex.js.map +0 -1
- package/cjs/common-internals-web/logging.js +0 -35
- package/cjs/common-internals-web/logging.js.map +0 -1
- package/cjs/common-internals-web/utf8.js +0 -28
- package/cjs/common-internals-web/utf8.js.map +0 -1
- package/cjs/crypto.js +0 -73
- package/cjs/crypto.js.map +0 -1
- package/cjs/exit-hook.js +0 -23
- package/cjs/exit-hook.js.map +0 -1
- package/cjs/idb/driver.js +0 -139
- package/cjs/idb/driver.js.map +0 -1
- package/cjs/idb/index.d.ts +0 -22
- package/cjs/idb/index.js +0 -34
- package/cjs/idb/index.js.map +0 -1
- package/cjs/idb/repository/auth-keys.d.ts +0 -14
- package/cjs/idb/repository/auth-keys.js +0 -71
- package/cjs/idb/repository/auth-keys.js.map +0 -1
- package/cjs/idb/repository/kv.js +0 -35
- package/cjs/idb/repository/kv.js.map +0 -1
- package/cjs/idb/repository/peers.d.ts +0 -12
- package/cjs/idb/repository/peers.js +0 -39
- package/cjs/idb/repository/peers.js.map +0 -1
- package/cjs/idb/repository/ref-messages.js +0 -62
- package/cjs/idb/repository/ref-messages.js.map +0 -1
- package/cjs/idb/utils.js +0 -17
- package/cjs/idb/utils.js.map +0 -1
- package/cjs/index.js +0 -30
- package/cjs/index.js.map +0 -1
- package/cjs/methods.js +0 -24
- package/cjs/methods.js.map +0 -1
- package/cjs/package.json +0 -3
- package/cjs/platform.js +0 -49
- package/cjs/platform.js.map +0 -1
- package/cjs/utils.js +0 -24
- package/cjs/utils.js.map +0 -1
- package/cjs/wasm.js +0 -35
- package/cjs/wasm.js.map +0 -1
- package/cjs/websocket.d.ts +0 -47
- package/cjs/websocket.js +0 -132
- package/cjs/websocket.js.map +0 -1
- package/cjs/worker.js +0 -128
- package/cjs/worker.js.map +0 -1
- package/esm/client.d.ts +0 -31
- package/esm/client.js +0 -38
- package/esm/client.js.map +0 -1
- package/esm/common-internals-web/base64.d.ts +0 -2
- package/esm/common-internals-web/base64.js +0 -107
- package/esm/common-internals-web/base64.js.map +0 -1
- package/esm/common-internals-web/hex.d.ts +0 -2
- package/esm/common-internals-web/hex.js +0 -62
- package/esm/common-internals-web/hex.js.map +0 -1
- package/esm/common-internals-web/logging.d.ts +0 -2
- package/esm/common-internals-web/logging.js +0 -31
- package/esm/common-internals-web/logging.js.map +0 -1
- package/esm/common-internals-web/utf8.d.ts +0 -3
- package/esm/common-internals-web/utf8.js +0 -23
- package/esm/common-internals-web/utf8.js.map +0 -1
- package/esm/crypto.d.ts +0 -22
- package/esm/crypto.js +0 -69
- package/esm/crypto.js.map +0 -1
- package/esm/exit-hook.d.ts +0 -1
- package/esm/exit-hook.js +0 -20
- package/esm/exit-hook.js.map +0 -1
- package/esm/idb/driver.d.ts +0 -18
- package/esm/idb/driver.js +0 -135
- package/esm/idb/driver.js.map +0 -1
- package/esm/idb/index.js +0 -29
- package/esm/idb/index.js.map +0 -1
- package/esm/idb/repository/auth-keys.js +0 -67
- package/esm/idb/repository/auth-keys.js.map +0 -1
- package/esm/idb/repository/kv.d.ts +0 -11
- package/esm/idb/repository/kv.js +0 -31
- package/esm/idb/repository/kv.js.map +0 -1
- package/esm/idb/repository/peers.js +0 -35
- package/esm/idb/repository/peers.js.map +0 -1
- package/esm/idb/repository/ref-messages.d.ts +0 -12
- package/esm/idb/repository/ref-messages.js +0 -58
- package/esm/idb/repository/ref-messages.js.map +0 -1
- package/esm/idb/utils.d.ts +0 -2
- package/esm/idb/utils.js +0 -13
- package/esm/idb/utils.js.map +0 -1
- package/esm/index.d.ts +0 -7
- package/esm/index.js +0 -8
- package/esm/index.js.map +0 -1
- package/esm/methods.d.ts +0 -1
- package/esm/methods.js +0 -2
- package/esm/methods.js.map +0 -1
- package/esm/platform.d.ts +0 -21
- package/esm/platform.js +0 -45
- package/esm/platform.js.map +0 -1
- package/esm/utils.d.ts +0 -1
- package/esm/utils.js +0 -2
- package/esm/utils.js.map +0 -1
- package/esm/wasm.d.ts +0 -2
- package/esm/wasm.js +0 -32
- package/esm/wasm.js.map +0 -1
- package/esm/websocket.js +0 -124
- package/esm/websocket.js.map +0 -1
- package/esm/worker.d.ts +0 -11
- package/esm/worker.js +0 -123
- package/esm/worker.js.map +0 -1
- /package/{cjs/common-internals-web → common-internals-web}/base64.d.ts +0 -0
- /package/{cjs/common-internals-web → common-internals-web}/hex.d.ts +0 -0
- /package/{cjs/common-internals-web → common-internals-web}/logging.d.ts +0 -0
- /package/{cjs/common-internals-web → common-internals-web}/utf8.d.ts +0 -0
- /package/{cjs/exit-hook.d.ts → exit-hook.d.ts} +0 -0
- /package/{cjs/idb → idb}/driver.d.ts +0 -0
- /package/{cjs/idb → idb}/utils.d.ts +0 -0
- /package/{cjs/index.d.ts → index.d.cts} +0 -0
- /package/{cjs/methods.d.ts → methods.d.cts} +0 -0
- /package/{cjs/utils.d.ts → utils.d.cts} +0 -0
- /package/{cjs/wasm.d.ts → wasm.d.ts} +0 -0
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { reqToPromise, txToPromise } from '../utils.js';
|
|
2
|
-
const TABLE_AUTH_KEYS = 'authKeys';
|
|
3
|
-
const TABLE_TEMP_AUTH_KEYS = 'tempAuthKeys';
|
|
4
|
-
export class IdbAuthKeysRepository {
|
|
5
|
-
_driver;
|
|
6
|
-
constructor(_driver) {
|
|
7
|
-
this._driver = _driver;
|
|
8
|
-
_driver.registerMigration(TABLE_AUTH_KEYS, 1, (db) => {
|
|
9
|
-
db.createObjectStore(TABLE_AUTH_KEYS, { keyPath: 'dc' });
|
|
10
|
-
db.createObjectStore(TABLE_TEMP_AUTH_KEYS, { keyPath: ['dc', 'idx'] });
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
os(mode) {
|
|
14
|
-
return this._driver.db.transaction(TABLE_AUTH_KEYS, mode).objectStore(TABLE_AUTH_KEYS);
|
|
15
|
-
}
|
|
16
|
-
async set(dc, key) {
|
|
17
|
-
const os = this.os('readwrite');
|
|
18
|
-
if (key === null) {
|
|
19
|
-
return reqToPromise(os.delete(dc));
|
|
20
|
-
}
|
|
21
|
-
await reqToPromise(os.put({ dc, key }));
|
|
22
|
-
}
|
|
23
|
-
async get(dc) {
|
|
24
|
-
const os = this.os();
|
|
25
|
-
const it = await reqToPromise(os.get(dc));
|
|
26
|
-
if (it === undefined)
|
|
27
|
-
return null;
|
|
28
|
-
return it.key;
|
|
29
|
-
}
|
|
30
|
-
osTemp(mode) {
|
|
31
|
-
return this._driver.db.transaction(TABLE_TEMP_AUTH_KEYS, mode).objectStore(TABLE_TEMP_AUTH_KEYS);
|
|
32
|
-
}
|
|
33
|
-
async setTemp(dc, idx, key, expires) {
|
|
34
|
-
const os = this.osTemp('readwrite');
|
|
35
|
-
if (!key) {
|
|
36
|
-
return reqToPromise(os.delete([dc, idx]));
|
|
37
|
-
}
|
|
38
|
-
await reqToPromise(os.put({ dc, idx, key, expiresAt: expires }));
|
|
39
|
-
}
|
|
40
|
-
async getTemp(dc, idx, now) {
|
|
41
|
-
const os = this.osTemp();
|
|
42
|
-
const row = await reqToPromise(os.get([dc, idx]));
|
|
43
|
-
if (row === undefined || row.expiresAt < now)
|
|
44
|
-
return null;
|
|
45
|
-
return row.key;
|
|
46
|
-
}
|
|
47
|
-
async deleteByDc(dc) {
|
|
48
|
-
const tx = this._driver.db.transaction([TABLE_AUTH_KEYS, TABLE_TEMP_AUTH_KEYS], 'readwrite');
|
|
49
|
-
tx.objectStore(TABLE_AUTH_KEYS).delete(dc);
|
|
50
|
-
// IndexedDB sucks
|
|
51
|
-
const tempOs = tx.objectStore(TABLE_TEMP_AUTH_KEYS);
|
|
52
|
-
const keys = await reqToPromise(tempOs.getAllKeys());
|
|
53
|
-
for (const key of keys) {
|
|
54
|
-
if (key[0] === dc) {
|
|
55
|
-
tempOs.delete(key);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
await txToPromise(tx);
|
|
59
|
-
}
|
|
60
|
-
deleteAll() {
|
|
61
|
-
const tx = this._driver.db.transaction([TABLE_AUTH_KEYS, TABLE_TEMP_AUTH_KEYS], 'readwrite');
|
|
62
|
-
tx.objectStore(TABLE_AUTH_KEYS).clear();
|
|
63
|
-
tx.objectStore(TABLE_TEMP_AUTH_KEYS).clear();
|
|
64
|
-
return txToPromise(tx);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=auth-keys.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-keys.js","sourceRoot":"","sources":["../../../../src/idb/repository/auth-keys.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IAuthKeysRepository } from '@mtcute/core'\n\nimport type { IdbStorageDriver } from '../driver.js'\nimport { reqToPromise, txToPromise } from '../utils.js'\n\nconst TABLE_AUTH_KEYS = 'authKeys'\nconst TABLE_TEMP_AUTH_KEYS = 'tempAuthKeys'\n\ninterface AuthKeyDto {\n dc: number\n key: Uint8Array\n}\ninterface TempAuthKeyDto extends AuthKeyDto {\n expiresAt?: number\n idx?: number\n}\n\nexport class IdbAuthKeysRepository implements IAuthKeysRepository {\n constructor(readonly _driver: IdbStorageDriver) {\n _driver.registerMigration(TABLE_AUTH_KEYS, 1, (db) => {\n db.createObjectStore(TABLE_AUTH_KEYS, { keyPath: 'dc' })\n db.createObjectStore(TABLE_TEMP_AUTH_KEYS, { keyPath: ['dc', 'idx'] })\n })\n }\n\n private os(mode?: IDBTransactionMode): IDBObjectStore {\n return this._driver.db.transaction(TABLE_AUTH_KEYS, mode).objectStore(TABLE_AUTH_KEYS)\n }\n\n async set(dc: number, key: Uint8Array | null): Promise<void> {\n const os = this.os('readwrite')\n\n if (key === null) {\n return reqToPromise(os.delete(dc))\n }\n\n await reqToPromise(os.put({ dc, key } satisfies AuthKeyDto))\n }\n\n async get(dc: number): Promise<Uint8Array | null> {\n const os = this.os()\n\n const it = await reqToPromise<AuthKeyDto>(os.get(dc) as IDBRequest<AuthKeyDto>)\n if (it === undefined) return null\n\n return it.key\n }\n\n private osTemp(mode?: IDBTransactionMode): IDBObjectStore {\n return this._driver.db.transaction(TABLE_TEMP_AUTH_KEYS, mode).objectStore(TABLE_TEMP_AUTH_KEYS)\n }\n\n async setTemp(dc: number, idx: number, key: Uint8Array | null, expires: number): Promise<void> {\n const os = this.osTemp('readwrite')\n\n if (!key) {\n return reqToPromise(os.delete([dc, idx]))\n }\n\n await reqToPromise(os.put({ dc, idx, key, expiresAt: expires } satisfies TempAuthKeyDto))\n }\n\n async getTemp(dc: number, idx: number, now: number): Promise<Uint8Array | null> {\n const os = this.osTemp()\n const row = await reqToPromise<TempAuthKeyDto>(os.get([dc, idx]) as IDBRequest<TempAuthKeyDto>)\n\n if (row === undefined || row.expiresAt! < now) return null\n\n return row.key\n }\n\n async deleteByDc(dc: number): Promise<void> {\n const tx = this._driver.db.transaction([TABLE_AUTH_KEYS, TABLE_TEMP_AUTH_KEYS], 'readwrite')\n\n tx.objectStore(TABLE_AUTH_KEYS).delete(dc)\n\n // IndexedDB sucks\n const tempOs = tx.objectStore(TABLE_TEMP_AUTH_KEYS)\n const keys = await reqToPromise(tempOs.getAllKeys())\n\n for (const key of keys) {\n if ((key as [number, number])[0] === dc) {\n tempOs.delete(key)\n }\n }\n\n await txToPromise(tx)\n }\n\n deleteAll(): Promise<void> {\n const tx = this._driver.db.transaction([TABLE_AUTH_KEYS, TABLE_TEMP_AUTH_KEYS], 'readwrite')\n tx.objectStore(TABLE_AUTH_KEYS).clear()\n tx.objectStore(TABLE_TEMP_AUTH_KEYS).clear()\n\n return txToPromise(tx)\n }\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { IKeyValueRepository } from '@mtcute/core';
|
|
2
|
-
import type { IdbStorageDriver } from '../driver.js';
|
|
3
|
-
export declare class IdbKvRepository implements IKeyValueRepository {
|
|
4
|
-
readonly _driver: IdbStorageDriver;
|
|
5
|
-
constructor(_driver: IdbStorageDriver);
|
|
6
|
-
set(key: string, value: Uint8Array): void;
|
|
7
|
-
private os;
|
|
8
|
-
get(key: string): Promise<Uint8Array | null>;
|
|
9
|
-
delete(key: string): Promise<void>;
|
|
10
|
-
deleteAll(): Promise<void>;
|
|
11
|
-
}
|
package/esm/idb/repository/kv.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { reqToPromise } from '../utils.js';
|
|
2
|
-
const KV_TABLE = 'kv';
|
|
3
|
-
export class IdbKvRepository {
|
|
4
|
-
_driver;
|
|
5
|
-
constructor(_driver) {
|
|
6
|
-
this._driver = _driver;
|
|
7
|
-
_driver.registerMigration(KV_TABLE, 1, (db) => {
|
|
8
|
-
db.createObjectStore(KV_TABLE, { keyPath: 'key' });
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
set(key, value) {
|
|
12
|
-
this._driver.writeLater(KV_TABLE, { key, value });
|
|
13
|
-
}
|
|
14
|
-
os(mode) {
|
|
15
|
-
return this._driver.db.transaction(KV_TABLE, mode).objectStore(KV_TABLE);
|
|
16
|
-
}
|
|
17
|
-
async get(key) {
|
|
18
|
-
const os = this.os();
|
|
19
|
-
const res = await reqToPromise(os.get(key));
|
|
20
|
-
if (res === undefined)
|
|
21
|
-
return null;
|
|
22
|
-
return res.value;
|
|
23
|
-
}
|
|
24
|
-
async delete(key) {
|
|
25
|
-
await reqToPromise(this.os('readwrite').delete(key));
|
|
26
|
-
}
|
|
27
|
-
async deleteAll() {
|
|
28
|
-
await reqToPromise(this.os('readwrite').clear());
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=kv.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kv.js","sourceRoot":"","sources":["../../../../src/idb/repository/kv.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,QAAQ,GAAG,IAAI,CAAA;AAMrB,MAAM,OAAO,eAAe;IACH;IAArB,YAAqB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAC1C,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAC1C,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;IACN,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAiB;QAC9B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAwB,CAAC,CAAA;IAC3E,CAAC;IAEO,EAAE,CAAC,IAAyB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC5E,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;QACpB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAA4B,CAAC,CAAA;QACnF,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QAElC,OAAO,GAAG,CAAC,KAAK,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACpB,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IACpD,CAAC;CACJ","sourcesContent":["import type { IKeyValueRepository } from '@mtcute/core'\n\nimport type { IdbStorageDriver } from '../driver.js'\nimport { reqToPromise } from '../utils.js'\n\nconst KV_TABLE = 'kv'\ninterface KeyValueDto {\n key: string\n value: Uint8Array\n}\n\nexport class IdbKvRepository implements IKeyValueRepository {\n constructor(readonly _driver: IdbStorageDriver) {\n _driver.registerMigration(KV_TABLE, 1, (db) => {\n db.createObjectStore(KV_TABLE, { keyPath: 'key' })\n })\n }\n\n set(key: string, value: Uint8Array): void {\n this._driver.writeLater(KV_TABLE, { key, value } satisfies KeyValueDto)\n }\n\n private os(mode?: IDBTransactionMode): IDBObjectStore {\n return this._driver.db.transaction(KV_TABLE, mode).objectStore(KV_TABLE)\n }\n\n async get(key: string): Promise<Uint8Array | null> {\n const os = this.os()\n const res = await reqToPromise<KeyValueDto>(os.get(key) as IDBRequest<KeyValueDto>)\n if (res === undefined) return null\n\n return res.value\n }\n\n async delete(key: string): Promise<void> {\n await reqToPromise(this.os('readwrite').delete(key))\n }\n\n async deleteAll(): Promise<void> {\n await reqToPromise(this.os('readwrite').clear())\n }\n}\n"]}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { reqToPromise } from '../utils.js';
|
|
2
|
-
const TABLE = 'peers';
|
|
3
|
-
export class IdbPeersRepository {
|
|
4
|
-
_driver;
|
|
5
|
-
constructor(_driver) {
|
|
6
|
-
this._driver = _driver;
|
|
7
|
-
_driver.registerMigration(TABLE, 1, (db) => {
|
|
8
|
-
const os = db.createObjectStore(TABLE, { keyPath: 'id' });
|
|
9
|
-
os.createIndex('by_username', 'usernames', { unique: true, multiEntry: true });
|
|
10
|
-
os.createIndex('by_phone', 'phone', { unique: true });
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
store(peer) {
|
|
14
|
-
this._driver.writeLater(TABLE, peer);
|
|
15
|
-
}
|
|
16
|
-
os(mode) {
|
|
17
|
-
return this._driver.db.transaction(TABLE, mode).objectStore(TABLE);
|
|
18
|
-
}
|
|
19
|
-
async getById(id) {
|
|
20
|
-
const it = await reqToPromise(this.os().get(id));
|
|
21
|
-
return it ?? null;
|
|
22
|
-
}
|
|
23
|
-
async getByUsername(username) {
|
|
24
|
-
const it = await reqToPromise(this.os().index('by_username').get(username));
|
|
25
|
-
return it ?? null;
|
|
26
|
-
}
|
|
27
|
-
async getByPhone(phone) {
|
|
28
|
-
const it = await reqToPromise(this.os().index('by_phone').get(phone));
|
|
29
|
-
return it ?? null;
|
|
30
|
-
}
|
|
31
|
-
deleteAll() {
|
|
32
|
-
return reqToPromise(this.os('readwrite').clear());
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=peers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"peers.js","sourceRoot":"","sources":["../../../../src/idb/repository/peers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,KAAK,GAAG,OAAO,CAAA;AAErB,MAAM,OAAO,kBAAkB;IACN;IAArB,YAAqB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAC1C,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YACvC,MAAM,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YACzD,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9E,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,IAA+B;QACjC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IAEO,EAAE,CAAC,IAAyB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACpB,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAA0C,CAAC,CAAA;QAEzF,OAAO,EAAE,IAAI,IAAI,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAChC,MAAM,EAAE,GAAG,MAAM,YAAY,CACzB,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,CAA0C,CACxF,CAAA;QAED,OAAO,EAAE,IAAI,IAAI,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa;QAC1B,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAA0C,CAAC,CAAA;QAE9G,OAAO,EAAE,IAAI,IAAI,CAAA;IACrB,CAAC;IAED,SAAS;QACL,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IACrD,CAAC;CACJ","sourcesContent":["import type { IPeersRepository } from '@mtcute/core'\n\nimport type { IdbStorageDriver } from '../driver.js'\nimport { reqToPromise } from '../utils.js'\n\nconst TABLE = 'peers'\n\nexport class IdbPeersRepository implements IPeersRepository {\n constructor(readonly _driver: IdbStorageDriver) {\n _driver.registerMigration(TABLE, 1, (db) => {\n const os = db.createObjectStore(TABLE, { keyPath: 'id' })\n os.createIndex('by_username', 'usernames', { unique: true, multiEntry: true })\n os.createIndex('by_phone', 'phone', { unique: true })\n })\n }\n\n store(peer: IPeersRepository.PeerInfo): void {\n this._driver.writeLater(TABLE, peer)\n }\n\n private os(mode?: IDBTransactionMode): IDBObjectStore {\n return this._driver.db.transaction(TABLE, mode).objectStore(TABLE)\n }\n\n async getById(id: number): Promise<IPeersRepository.PeerInfo | null> {\n const it = await reqToPromise(this.os().get(id) as IDBRequest<IPeersRepository.PeerInfo>)\n\n return it ?? null\n }\n\n async getByUsername(username: string): Promise<IPeersRepository.PeerInfo | null> {\n const it = await reqToPromise(\n this.os().index('by_username').get(username) as IDBRequest<IPeersRepository.PeerInfo>,\n )\n\n return it ?? null\n }\n\n async getByPhone(phone: string): Promise<IPeersRepository.PeerInfo | null> {\n const it = await reqToPromise(this.os().index('by_phone').get(phone) as IDBRequest<IPeersRepository.PeerInfo>)\n\n return it ?? null\n }\n\n deleteAll(): Promise<void> {\n return reqToPromise(this.os('readwrite').clear())\n }\n}\n"]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { IReferenceMessagesRepository } from '@mtcute/core';
|
|
2
|
-
import type { IdbStorageDriver } from '../driver.js';
|
|
3
|
-
export declare class IdbRefMsgRepository implements IReferenceMessagesRepository {
|
|
4
|
-
readonly _driver: IdbStorageDriver;
|
|
5
|
-
constructor(_driver: IdbStorageDriver);
|
|
6
|
-
private os;
|
|
7
|
-
store(peerId: number, chatId: number, msgId: number): Promise<void>;
|
|
8
|
-
getByPeer(peerId: number): Promise<[number, number] | null>;
|
|
9
|
-
delete(chatId: number, msgIds: number[]): Promise<void>;
|
|
10
|
-
deleteByPeer(peerId: number): Promise<void>;
|
|
11
|
-
deleteAll(): Promise<void>;
|
|
12
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { reqToPromise, txToPromise } from '../utils.js';
|
|
2
|
-
const TABLE = 'messageRefs';
|
|
3
|
-
export class IdbRefMsgRepository {
|
|
4
|
-
_driver;
|
|
5
|
-
constructor(_driver) {
|
|
6
|
-
this._driver = _driver;
|
|
7
|
-
_driver.registerMigration(TABLE, 1, (db) => {
|
|
8
|
-
const os = db.createObjectStore(TABLE, { keyPath: ['peerId', 'chatId', 'msgId'] });
|
|
9
|
-
os.createIndex('by_peer', 'peerId');
|
|
10
|
-
os.createIndex('by_msg', ['chatId', 'msgId']);
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
os(mode) {
|
|
14
|
-
return this._driver.db.transaction(TABLE, mode).objectStore(TABLE);
|
|
15
|
-
}
|
|
16
|
-
async store(peerId, chatId, msgId) {
|
|
17
|
-
const os = this.os('readwrite');
|
|
18
|
-
await reqToPromise(os.put({ peerId, chatId, msgId }));
|
|
19
|
-
}
|
|
20
|
-
async getByPeer(peerId) {
|
|
21
|
-
const os = this.os();
|
|
22
|
-
const index = os.index('by_peer');
|
|
23
|
-
const it = await reqToPromise(index.get(peerId));
|
|
24
|
-
if (!it)
|
|
25
|
-
return null;
|
|
26
|
-
return [it.chatId, it.msgId];
|
|
27
|
-
}
|
|
28
|
-
async delete(chatId, msgIds) {
|
|
29
|
-
const tx = this._driver.db.transaction(TABLE, 'readwrite');
|
|
30
|
-
const os = tx.objectStore(TABLE);
|
|
31
|
-
const index = os.index('by_msg');
|
|
32
|
-
for (const msgId of msgIds) {
|
|
33
|
-
const keys = await reqToPromise(index.getAllKeys([chatId, msgId]));
|
|
34
|
-
// there are never that many keys, so we can avoid using cursor
|
|
35
|
-
for (const key of keys) {
|
|
36
|
-
os.delete(key);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return txToPromise(tx);
|
|
40
|
-
}
|
|
41
|
-
async deleteByPeer(peerId) {
|
|
42
|
-
const tx = this._driver.db.transaction(TABLE, 'readwrite');
|
|
43
|
-
const os = tx.objectStore(TABLE);
|
|
44
|
-
const index = os.index('by_peer');
|
|
45
|
-
const req = index.openCursor(peerId);
|
|
46
|
-
let cursor = await reqToPromise(req);
|
|
47
|
-
while (cursor) {
|
|
48
|
-
cursor.delete();
|
|
49
|
-
cursor.continue();
|
|
50
|
-
cursor = await reqToPromise(req);
|
|
51
|
-
}
|
|
52
|
-
return txToPromise(tx);
|
|
53
|
-
}
|
|
54
|
-
async deleteAll() {
|
|
55
|
-
await reqToPromise(this.os('readwrite').clear());
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=ref-messages.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ref-messages.js","sourceRoot":"","sources":["../../../../src/idb/repository/ref-messages.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IReferenceMessagesRepository } from '@mtcute/core'\n\nimport type { IdbStorageDriver } from '../driver.js'\nimport { reqToPromise, txToPromise } from '../utils.js'\n\nconst TABLE = 'messageRefs'\n\ninterface MessageRefDto {\n peerId: number\n chatId: number\n msgId: number\n}\n\nexport class IdbRefMsgRepository implements IReferenceMessagesRepository {\n constructor(readonly _driver: IdbStorageDriver) {\n _driver.registerMigration(TABLE, 1, (db) => {\n const os = db.createObjectStore(TABLE, { keyPath: ['peerId', 'chatId', 'msgId'] })\n os.createIndex('by_peer', 'peerId')\n os.createIndex('by_msg', ['chatId', 'msgId'])\n })\n }\n\n private os(mode?: IDBTransactionMode): IDBObjectStore {\n return this._driver.db.transaction(TABLE, mode).objectStore(TABLE)\n }\n\n async store(peerId: number, chatId: number, msgId: number): Promise<void> {\n const os = this.os('readwrite')\n\n await reqToPromise(os.put({ peerId, chatId, msgId } satisfies MessageRefDto))\n }\n\n async getByPeer(peerId: number): Promise<[number, number] | null> {\n const os = this.os()\n const index = os.index('by_peer')\n\n const it = await reqToPromise<MessageRefDto>(index.get(peerId) as IDBRequest<MessageRefDto>)\n if (!it) return null\n\n return [it.chatId, it.msgId]\n }\n\n async delete(chatId: number, msgIds: number[]): Promise<void> {\n const tx = this._driver.db.transaction(TABLE, 'readwrite')\n const os = tx.objectStore(TABLE)\n const index = os.index('by_msg')\n\n for (const msgId of msgIds) {\n const keys = await reqToPromise(index.getAllKeys([chatId, msgId]))\n\n // there are never that many keys, so we can avoid using cursor\n for (const key of keys) {\n os.delete(key)\n }\n }\n\n return txToPromise(tx)\n }\n\n async deleteByPeer(peerId: number): Promise<void> {\n const tx = this._driver.db.transaction(TABLE, 'readwrite')\n const os = tx.objectStore(TABLE)\n const index = os.index('by_peer')\n\n const req = index.openCursor(peerId)\n\n let cursor = await reqToPromise(req)\n\n while (cursor) {\n cursor.delete()\n cursor.continue()\n cursor = await reqToPromise(req)\n }\n\n return txToPromise(tx)\n }\n\n async deleteAll(): Promise<void> {\n await reqToPromise(this.os('readwrite').clear())\n }\n}\n"]}
|
package/esm/idb/utils.d.ts
DELETED
package/esm/idb/utils.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export function txToPromise(tx) {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
tx.oncomplete = () => resolve();
|
|
4
|
-
tx.onerror = () => reject(tx.error);
|
|
5
|
-
});
|
|
6
|
-
}
|
|
7
|
-
export function reqToPromise(req) {
|
|
8
|
-
return new Promise((resolve, reject) => {
|
|
9
|
-
req.onsuccess = () => resolve(req.result);
|
|
10
|
-
req.onerror = () => reject(req.error);
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=utils.js.map
|
package/esm/idb/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/idb/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,EAAkB;IAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,EAAE,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;QAC/B,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACN,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,GAAkB;IAC9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACzC,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;AACN,CAAC","sourcesContent":["export function txToPromise(tx: IDBTransaction): Promise<void> {\n return new Promise((resolve, reject) => {\n tx.oncomplete = () => resolve()\n tx.onerror = () => reject(tx.error)\n })\n}\n\nexport function reqToPromise<T>(req: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n req.onsuccess = () => resolve(req.result)\n req.onerror = () => reject(req.error)\n })\n}\n"]}
|
package/esm/index.d.ts
DELETED
package/esm/index.js
DELETED
package/esm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA","sourcesContent":["export * from './client.js'\nexport * from './crypto.js'\nexport * from './idb/index.js'\nexport * from './platform.js'\nexport * from './websocket.js'\nexport * from './worker.js'\nexport * from '@mtcute/core'\n"]}
|
package/esm/methods.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@mtcute/core/methods.js';
|
package/esm/methods.js
DELETED
package/esm/methods.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"methods.js","sourceRoot":"","sources":["../../src/methods.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA","sourcesContent":["export * from '@mtcute/core/methods.js'\n"]}
|
package/esm/platform.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { ICorePlatform } from '@mtcute/core/platform.js';
|
|
2
|
-
import { base64Decode, base64Encode } from './common-internals-web/base64.js';
|
|
3
|
-
import { hexDecode, hexEncode } from './common-internals-web/hex.js';
|
|
4
|
-
import { defaultLoggingHandler } from './common-internals-web/logging.js';
|
|
5
|
-
import { utf8ByteLength, utf8Decode, utf8Encode } from './common-internals-web/utf8.js';
|
|
6
|
-
import { beforeExit } from './exit-hook.js';
|
|
7
|
-
export declare class WebPlatform implements ICorePlatform {
|
|
8
|
-
log: typeof defaultLoggingHandler;
|
|
9
|
-
beforeExit: typeof beforeExit;
|
|
10
|
-
getDeviceModel(): string;
|
|
11
|
-
getDefaultLogLevel(): number | null;
|
|
12
|
-
onNetworkChanged(fn: (connected: boolean) => void): () => void;
|
|
13
|
-
isOnline(): boolean;
|
|
14
|
-
utf8ByteLength: typeof utf8ByteLength;
|
|
15
|
-
utf8Encode: typeof utf8Encode;
|
|
16
|
-
utf8Decode: typeof utf8Decode;
|
|
17
|
-
hexEncode: typeof hexEncode;
|
|
18
|
-
hexDecode: typeof hexDecode;
|
|
19
|
-
base64Encode: typeof base64Encode;
|
|
20
|
-
base64Decode: typeof base64Decode;
|
|
21
|
-
}
|
package/esm/platform.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { base64Decode, base64Encode } from './common-internals-web/base64.js';
|
|
2
|
-
import { hexDecode, hexEncode } from './common-internals-web/hex.js';
|
|
3
|
-
import { defaultLoggingHandler } from './common-internals-web/logging.js';
|
|
4
|
-
import { utf8ByteLength, utf8Decode, utf8Encode } from './common-internals-web/utf8.js';
|
|
5
|
-
import { beforeExit } from './exit-hook.js';
|
|
6
|
-
export class WebPlatform {
|
|
7
|
-
getDeviceModel() {
|
|
8
|
-
if (typeof navigator === 'undefined')
|
|
9
|
-
return 'Browser';
|
|
10
|
-
return navigator.userAgent;
|
|
11
|
-
}
|
|
12
|
-
getDefaultLogLevel() {
|
|
13
|
-
if (typeof localStorage !== 'undefined') {
|
|
14
|
-
const localLogLevel = Number.parseInt(localStorage.MTCUTE_LOG_LEVEL);
|
|
15
|
-
if (!Number.isNaN(localLogLevel)) {
|
|
16
|
-
return localLogLevel;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
onNetworkChanged(fn) {
|
|
22
|
-
if (!('onLine' in navigator))
|
|
23
|
-
return () => { };
|
|
24
|
-
const onlineHandler = () => fn(navigator.onLine);
|
|
25
|
-
window.addEventListener('online', onlineHandler);
|
|
26
|
-
window.addEventListener('offline', onlineHandler);
|
|
27
|
-
return () => {
|
|
28
|
-
window.removeEventListener('online', onlineHandler);
|
|
29
|
-
window.removeEventListener('offline', onlineHandler);
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
isOnline() {
|
|
33
|
-
return navigator.onLine;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
WebPlatform.prototype.log = defaultLoggingHandler;
|
|
37
|
-
WebPlatform.prototype.beforeExit = beforeExit;
|
|
38
|
-
WebPlatform.prototype.utf8ByteLength = utf8ByteLength;
|
|
39
|
-
WebPlatform.prototype.utf8Encode = utf8Encode;
|
|
40
|
-
WebPlatform.prototype.utf8Decode = utf8Decode;
|
|
41
|
-
WebPlatform.prototype.hexEncode = hexEncode;
|
|
42
|
-
WebPlatform.prototype.hexDecode = hexDecode;
|
|
43
|
-
WebPlatform.prototype.base64Encode = base64Encode;
|
|
44
|
-
WebPlatform.prototype.base64Decode = base64Decode;
|
|
45
|
-
//# sourceMappingURL=platform.js.map
|
package/esm/platform.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/platform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,OAAO,WAAW;IAKpB,cAAc;QACV,IAAI,OAAO,SAAS,KAAK,WAAW;YAAE,OAAO,SAAS,CAAA;QAEtD,OAAO,SAAS,CAAC,SAAS,CAAA;IAC9B,CAAC;IAED,kBAAkB;QACd,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;YACtC,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAA0B,CAAC,CAAA;YAE9E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC/B,OAAO,aAAa,CAAA;YACxB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED,gBAAgB,CAAC,EAAgC;QAC7C,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;QAE7C,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAChD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QAEjD,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;YACnD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QACxD,CAAC,CAAA;IACL,CAAC;IAED,QAAQ;QACJ,OAAO,SAAS,CAAC,MAAM,CAAA;IAC3B,CAAC;CAUJ;AAED,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,qBAAqB,CAAA;AACjD,WAAW,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAA;AAC7C,WAAW,CAAC,SAAS,CAAC,cAAc,GAAG,cAAc,CAAA;AACrD,WAAW,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAA;AAC7C,WAAW,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAA;AAC7C,WAAW,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAA;AAC3C,WAAW,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAA;AAC3C,WAAW,CAAC,SAAS,CAAC,YAAY,GAAG,YAAY,CAAA;AACjD,WAAW,CAAC,SAAS,CAAC,YAAY,GAAG,YAAY,CAAA","sourcesContent":["import type { ICorePlatform } from '@mtcute/core/platform.js'\n\nimport { base64Decode, base64Encode } from './common-internals-web/base64.js'\nimport { hexDecode, hexEncode } from './common-internals-web/hex.js'\nimport { defaultLoggingHandler } from './common-internals-web/logging.js'\nimport { utf8ByteLength, utf8Decode, utf8Encode } from './common-internals-web/utf8.js'\nimport { beforeExit } from './exit-hook.js'\n\nexport class WebPlatform implements ICorePlatform {\n // ICorePlatform\n declare log: typeof defaultLoggingHandler\n declare beforeExit: typeof beforeExit\n\n getDeviceModel(): string {\n if (typeof navigator === 'undefined') return 'Browser'\n\n return navigator.userAgent\n }\n\n getDefaultLogLevel(): number | null {\n if (typeof localStorage !== 'undefined') {\n const localLogLevel = Number.parseInt(localStorage.MTCUTE_LOG_LEVEL as string)\n\n if (!Number.isNaN(localLogLevel)) {\n return localLogLevel\n }\n }\n\n return null\n }\n\n onNetworkChanged(fn: (connected: boolean) => void): () => void {\n if (!('onLine' in navigator)) return () => {}\n\n const onlineHandler = () => fn(navigator.onLine)\n window.addEventListener('online', onlineHandler)\n window.addEventListener('offline', onlineHandler)\n\n return () => {\n window.removeEventListener('online', onlineHandler)\n window.removeEventListener('offline', onlineHandler)\n }\n }\n\n isOnline(): boolean {\n return navigator.onLine\n }\n\n // ITlPlatform\n declare utf8ByteLength: typeof utf8ByteLength\n declare utf8Encode: typeof utf8Encode\n declare utf8Decode: typeof utf8Decode\n declare hexEncode: typeof hexEncode\n declare hexDecode: typeof hexDecode\n declare base64Encode: typeof base64Encode\n declare base64Decode: typeof base64Decode\n}\n\nWebPlatform.prototype.log = defaultLoggingHandler\nWebPlatform.prototype.beforeExit = beforeExit\nWebPlatform.prototype.utf8ByteLength = utf8ByteLength\nWebPlatform.prototype.utf8Encode = utf8Encode\nWebPlatform.prototype.utf8Decode = utf8Decode\nWebPlatform.prototype.hexEncode = hexEncode\nWebPlatform.prototype.hexDecode = hexDecode\nWebPlatform.prototype.base64Encode = base64Encode\nWebPlatform.prototype.base64Decode = base64Decode\n"]}
|
package/esm/utils.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@mtcute/core/utils.js';
|
package/esm/utils.js
DELETED
package/esm/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA","sourcesContent":["export * from '@mtcute/core/utils.js'\n"]}
|
package/esm/wasm.d.ts
DELETED
package/esm/wasm.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { getWasmUrl } from '@mtcute/wasm';
|
|
2
|
-
export async function loadWasmBinary(input) {
|
|
3
|
-
if (typeof input === 'undefined') {
|
|
4
|
-
input = getWasmUrl();
|
|
5
|
-
}
|
|
6
|
-
if (typeof input === 'string'
|
|
7
|
-
|| (typeof Request === 'function' && input instanceof Request)
|
|
8
|
-
|| (typeof URL === 'function' && input instanceof URL)) {
|
|
9
|
-
input = await fetch(input);
|
|
10
|
-
}
|
|
11
|
-
if (typeof Response === 'function' && input instanceof Response) {
|
|
12
|
-
if (typeof WebAssembly.instantiateStreaming === 'function') {
|
|
13
|
-
try {
|
|
14
|
-
const { instance } = await WebAssembly.instantiateStreaming(input);
|
|
15
|
-
return instance;
|
|
16
|
-
}
|
|
17
|
-
catch (e) {
|
|
18
|
-
if (input.headers.get('Content-Type') !== 'application/wasm') {
|
|
19
|
-
console.warn('`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n', e);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
throw e;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
const bytes = await input.arrayBuffer();
|
|
27
|
-
const { instance } = await WebAssembly.instantiate(bytes);
|
|
28
|
-
return instance;
|
|
29
|
-
}
|
|
30
|
-
return WebAssembly.instantiate(input);
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=wasm.js.map
|
package/esm/wasm.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../src/wasm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAIzC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAqB;IACtD,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;QAC/B,KAAK,GAAG,UAAU,EAAE,CAAA;IACxB,CAAC;IAED,IACI,OAAO,KAAK,KAAK,QAAQ;WACtB,CAAC,OAAO,OAAO,KAAK,UAAU,IAAI,KAAK,YAAY,OAAO,CAAC;WAC3D,CAAC,OAAO,GAAG,KAAK,UAAU,IAAI,KAAK,YAAY,GAAG,CAAC,EACxD,CAAC;QACC,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9D,IAAI,OAAO,WAAW,CAAC,oBAAoB,KAAK,UAAU,EAAE,CAAC;YACzD,IAAI,CAAC;gBACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;gBAElE,OAAO,QAAQ,CAAA;YACnB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,kBAAkB,EAAE,CAAC;oBAC3D,OAAO,CAAC,IAAI,CACR,mMAAmM,EACnM,CAAC,CACJ,CAAA;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,CAAA;gBACX,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;QAEvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAEzD,OAAO,QAAQ,CAAA;IACnB,CAAC;IAED,OAAO,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC","sourcesContent":["import { getWasmUrl } from '@mtcute/wasm'\n\nexport type WasmInitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module\n\nexport async function loadWasmBinary(input?: WasmInitInput): Promise<WebAssembly.Instance> {\n if (typeof input === 'undefined') {\n input = getWasmUrl()\n }\n\n if (\n typeof input === 'string'\n || (typeof Request === 'function' && input instanceof Request)\n || (typeof URL === 'function' && input instanceof URL)\n ) {\n input = await fetch(input)\n }\n\n if (typeof Response === 'function' && input instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n const { instance } = await WebAssembly.instantiateStreaming(input)\n\n return instance\n } catch (e) {\n if (input.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\n '`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n',\n e,\n )\n } else {\n throw e\n }\n }\n }\n\n const bytes = await input.arrayBuffer()\n\n const { instance } = await WebAssembly.instantiate(bytes)\n\n return instance\n }\n\n return WebAssembly.instantiate(input)\n}\n"]}
|
package/esm/websocket.js
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import EventEmitter from 'node:events';
|
|
2
|
-
import { IntermediatePacketCodec, MtUnsupportedError, MtcuteError, ObfuscatedPacketCodec, TransportState, } from '@mtcute/core';
|
|
3
|
-
import { createControllablePromise, } from '@mtcute/core/utils.js';
|
|
4
|
-
const subdomainsMap = {
|
|
5
|
-
1: 'pluto',
|
|
6
|
-
2: 'venus',
|
|
7
|
-
3: 'aurora',
|
|
8
|
-
4: 'vesta',
|
|
9
|
-
5: 'flora',
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Base for WebSocket transports.
|
|
13
|
-
* Subclasses must provide packet codec in `_packetCodec` property
|
|
14
|
-
*/
|
|
15
|
-
export class BaseWebSocketTransport extends EventEmitter {
|
|
16
|
-
_currentDc = null;
|
|
17
|
-
_state = TransportState.Idle;
|
|
18
|
-
_socket = null;
|
|
19
|
-
_crypto;
|
|
20
|
-
log;
|
|
21
|
-
packetCodecInitialized = false;
|
|
22
|
-
_baseDomain;
|
|
23
|
-
_subdomains;
|
|
24
|
-
_WebSocket;
|
|
25
|
-
constructor({ ws = WebSocket, baseDomain = 'web.telegram.org', subdomains = subdomainsMap, } = {}) {
|
|
26
|
-
super();
|
|
27
|
-
if (!ws) {
|
|
28
|
-
throw new MtUnsupportedError('To use WebSocket transport with NodeJS, install `ws` package and pass it to constructor');
|
|
29
|
-
}
|
|
30
|
-
// gotta love cjs/esm compat
|
|
31
|
-
if ('default' in ws) {
|
|
32
|
-
ws = ws.default;
|
|
33
|
-
}
|
|
34
|
-
this._baseDomain = baseDomain;
|
|
35
|
-
this._subdomains = subdomains;
|
|
36
|
-
this._WebSocket = ws;
|
|
37
|
-
}
|
|
38
|
-
_updateLogPrefix() {
|
|
39
|
-
if (this._currentDc) {
|
|
40
|
-
this.log.prefix = `[WS:${this._subdomains[this._currentDc.id]}.${this._baseDomain}] `;
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
this.log.prefix = '[WS:disconnected] ';
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
setup(crypto, log) {
|
|
47
|
-
this._crypto = crypto;
|
|
48
|
-
this.log = log.create('ws');
|
|
49
|
-
}
|
|
50
|
-
state() {
|
|
51
|
-
return this._state;
|
|
52
|
-
}
|
|
53
|
-
currentDc() {
|
|
54
|
-
return this._currentDc;
|
|
55
|
-
}
|
|
56
|
-
connect(dc, testMode) {
|
|
57
|
-
if (this._state !== TransportState.Idle) {
|
|
58
|
-
throw new MtcuteError('Transport is not IDLE');
|
|
59
|
-
}
|
|
60
|
-
if (!this.packetCodecInitialized) {
|
|
61
|
-
this._packetCodec.setup?.(this._crypto, this.log);
|
|
62
|
-
this._packetCodec.on('error', err => this.emit('error', err));
|
|
63
|
-
this._packetCodec.on('packet', buf => this.emit('message', buf));
|
|
64
|
-
this.packetCodecInitialized = true;
|
|
65
|
-
}
|
|
66
|
-
this._state = TransportState.Connecting;
|
|
67
|
-
this._currentDc = dc;
|
|
68
|
-
this._socket = new this._WebSocket(`wss://${this._subdomains[dc.id]}.${this._baseDomain}/apiws${testMode ? '_test' : ''}`, 'binary');
|
|
69
|
-
this._updateLogPrefix();
|
|
70
|
-
this.log.debug('connecting to %s (%j)', this._socket.url, dc);
|
|
71
|
-
this._socket.binaryType = 'arraybuffer';
|
|
72
|
-
this._socket.addEventListener('message', evt => this._packetCodec.feed(new Uint8Array(evt.data)));
|
|
73
|
-
this._socket.addEventListener('open', this.handleConnect.bind(this));
|
|
74
|
-
this._socket.addEventListener('error', this.handleError.bind(this));
|
|
75
|
-
this._socket.addEventListener('close', this.handleClosed.bind(this));
|
|
76
|
-
}
|
|
77
|
-
_closeWaiters = [];
|
|
78
|
-
async close() {
|
|
79
|
-
if (this._state === TransportState.Idle)
|
|
80
|
-
return;
|
|
81
|
-
const promise = createControllablePromise();
|
|
82
|
-
this._closeWaiters.push(promise);
|
|
83
|
-
this._socket.close();
|
|
84
|
-
return promise;
|
|
85
|
-
}
|
|
86
|
-
handleClosed() {
|
|
87
|
-
this.log.info('connection closed');
|
|
88
|
-
this._state = TransportState.Idle;
|
|
89
|
-
this._socket = null;
|
|
90
|
-
this._currentDc = null;
|
|
91
|
-
this._packetCodec.reset();
|
|
92
|
-
this.emit('close');
|
|
93
|
-
for (const waiter of this._closeWaiters) {
|
|
94
|
-
waiter.resolve();
|
|
95
|
-
}
|
|
96
|
-
this._closeWaiters = [];
|
|
97
|
-
}
|
|
98
|
-
handleError(event) {
|
|
99
|
-
const error = 'error' in event ? event.error : new Error('unknown WebSocket error');
|
|
100
|
-
this.log.error('error: %s', error.stack);
|
|
101
|
-
this.emit('error', error);
|
|
102
|
-
}
|
|
103
|
-
handleConnect() {
|
|
104
|
-
this.log.info('connected');
|
|
105
|
-
Promise.resolve(this._packetCodec.tag())
|
|
106
|
-
.then((initialMessage) => {
|
|
107
|
-
this._socket.send(initialMessage);
|
|
108
|
-
this._state = TransportState.Ready;
|
|
109
|
-
this.emit('ready');
|
|
110
|
-
})
|
|
111
|
-
.catch(err => this.emit('error', err));
|
|
112
|
-
}
|
|
113
|
-
async send(bytes) {
|
|
114
|
-
if (this._state !== TransportState.Ready) {
|
|
115
|
-
throw new MtcuteError('Transport is not READY');
|
|
116
|
-
}
|
|
117
|
-
const framed = await this._packetCodec.encode(bytes);
|
|
118
|
-
this._socket.send(framed);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
export class WebSocketTransport extends BaseWebSocketTransport {
|
|
122
|
-
_packetCodec = new ObfuscatedPacketCodec(new IntermediatePacketCodec());
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=websocket.js.map
|
package/esm/websocket.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/websocket.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'node:events'\n\nimport type {\n IPacketCodec,\n ITelegramTransport,\n} from '@mtcute/core'\nimport {\n IntermediatePacketCodec,\n MtUnsupportedError,\n MtcuteError,\n ObfuscatedPacketCodec,\n TransportState,\n} from '@mtcute/core'\nimport type {\n BasicDcOption,\n ControllablePromise,\n ICryptoProvider,\n Logger,\n} from '@mtcute/core/utils.js'\nimport {\n createControllablePromise,\n} from '@mtcute/core/utils.js'\n\nexport interface WebSocketConstructor {\n new (address: string, protocol?: string): WebSocket\n}\n\nconst subdomainsMap: Record<string, string> = {\n 1: 'pluto',\n 2: 'venus',\n 3: 'aurora',\n 4: 'vesta',\n 5: 'flora',\n}\n\n/**\n * Base for WebSocket transports.\n * Subclasses must provide packet codec in `_packetCodec` property\n */\nexport abstract class BaseWebSocketTransport extends EventEmitter implements ITelegramTransport {\n private _currentDc: BasicDcOption | null = null\n private _state: TransportState = TransportState.Idle\n private _socket: WebSocket | null = null\n private _crypto!: ICryptoProvider\n protected log!: Logger\n\n abstract _packetCodec: IPacketCodec\n packetCodecInitialized = false\n\n private _baseDomain: string\n private _subdomains: Record<string, string>\n private _WebSocket: WebSocketConstructor\n\n constructor({\n ws = WebSocket,\n baseDomain = 'web.telegram.org',\n subdomains = subdomainsMap,\n }: {\n /** Custom implementation of WebSocket (e.g. https://npm.im/ws) */\n ws?: WebSocketConstructor\n /** Base WebSocket domain */\n baseDomain?: string\n /** Map of sub-domains (key is DC ID, value is string) */\n subdomains?: Record<string, string>\n } = {}) {\n super()\n\n if (!ws) {\n throw new MtUnsupportedError(\n 'To use WebSocket transport with NodeJS, install `ws` package and pass it to constructor',\n )\n }\n\n // gotta love cjs/esm compat\n if ('default' in ws) {\n ws = ws.default as WebSocketConstructor\n }\n\n this._baseDomain = baseDomain\n this._subdomains = subdomains\n this._WebSocket = ws\n }\n\n private _updateLogPrefix() {\n if (this._currentDc) {\n this.log.prefix = `[WS:${this._subdomains[this._currentDc.id]}.${this._baseDomain}] `\n } else {\n this.log.prefix = '[WS:disconnected] '\n }\n }\n\n setup(crypto: ICryptoProvider, log: Logger): void {\n this._crypto = crypto\n this.log = log.create('ws')\n }\n\n state(): TransportState {\n return this._state\n }\n\n currentDc(): BasicDcOption | null {\n return this._currentDc\n }\n\n connect(dc: BasicDcOption, testMode: boolean): void {\n if (this._state !== TransportState.Idle) {\n throw new MtcuteError('Transport is not IDLE')\n }\n\n if (!this.packetCodecInitialized) {\n this._packetCodec.setup?.(this._crypto, this.log)\n this._packetCodec.on('error', err => this.emit('error', err))\n this._packetCodec.on('packet', buf => this.emit('message', buf))\n this.packetCodecInitialized = true\n }\n\n this._state = TransportState.Connecting\n this._currentDc = dc\n this._socket = new this._WebSocket(\n `wss://${this._subdomains[dc.id]}.${this._baseDomain}/apiws${testMode ? '_test' : ''}`,\n 'binary',\n )\n\n this._updateLogPrefix()\n this.log.debug('connecting to %s (%j)', this._socket.url, dc)\n\n this._socket.binaryType = 'arraybuffer'\n\n this._socket.addEventListener('message', evt =>\n this._packetCodec.feed(new Uint8Array(evt.data as ArrayBuffer)))\n this._socket.addEventListener('open', this.handleConnect.bind(this))\n this._socket.addEventListener('error', this.handleError.bind(this))\n this._socket.addEventListener('close', this.handleClosed.bind(this))\n }\n\n private _closeWaiters: ControllablePromise<void>[] = []\n async close(): Promise<void> {\n if (this._state === TransportState.Idle) return\n\n const promise = createControllablePromise<void>()\n this._closeWaiters.push(promise)\n\n this._socket!.close()\n\n return promise\n }\n\n handleClosed(): void {\n this.log.info('connection closed')\n this._state = TransportState.Idle\n this._socket = null\n this._currentDc = null\n this._packetCodec.reset()\n this.emit('close')\n\n for (const waiter of this._closeWaiters) {\n waiter.resolve()\n }\n this._closeWaiters = []\n }\n\n handleError(event: Event | { error: Error }): void {\n const error = 'error' in event ? event.error : new Error('unknown WebSocket error')\n\n this.log.error('error: %s', error.stack)\n this.emit('error', error)\n }\n\n handleConnect(): void {\n this.log.info('connected')\n\n Promise.resolve(this._packetCodec.tag())\n .then((initialMessage) => {\n this._socket!.send(initialMessage)\n this._state = TransportState.Ready\n this.emit('ready')\n })\n .catch(err => this.emit('error', err))\n }\n\n async send(bytes: Uint8Array): Promise<void> {\n if (this._state !== TransportState.Ready) {\n throw new MtcuteError('Transport is not READY')\n }\n\n const framed = await this._packetCodec.encode(bytes)\n\n this._socket!.send(framed)\n }\n}\n\nexport class WebSocketTransport extends BaseWebSocketTransport {\n _packetCodec: ObfuscatedPacketCodec = new ObfuscatedPacketCodec(new IntermediatePacketCodec())\n}\n"]}
|
package/esm/worker.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { ClientMessageHandler, RespondFn, SendFn, SomeWorker, TelegramWorkerOptions, TelegramWorkerPortOptions, WorkerCustomMethods, WorkerMessageHandler } from '@mtcute/core/worker.js';
|
|
2
|
-
import { TelegramWorker as TelegramWorkerBase, TelegramWorkerPort as TelegramWorkerPortBase } from '@mtcute/core/worker.js';
|
|
3
|
-
export type { TelegramWorkerOptions, TelegramWorkerPortOptions, WorkerCustomMethods };
|
|
4
|
-
export declare class TelegramWorker<T extends WorkerCustomMethods> extends TelegramWorkerBase<T> {
|
|
5
|
-
registerWorker(handler: WorkerMessageHandler): RespondFn;
|
|
6
|
-
}
|
|
7
|
-
export declare class TelegramWorkerPort<T extends WorkerCustomMethods> extends TelegramWorkerPortBase<T> {
|
|
8
|
-
readonly options: TelegramWorkerPortOptions;
|
|
9
|
-
constructor(options: TelegramWorkerPortOptions);
|
|
10
|
-
connectToWorker(worker: SomeWorker, handler: ClientMessageHandler): [SendFn, () => void];
|
|
11
|
-
}
|