@mtcute/test 0.5.0 → 0.7.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/client.d.ts +3 -4
- package/cjs/client.js +5 -8
- package/cjs/client.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/storage/auth-keys.d.ts +3 -0
- package/cjs/storage/auth-keys.js +95 -0
- package/cjs/storage/auth-keys.js.map +1 -0
- package/cjs/storage/index.d.ts +4 -0
- package/cjs/storage/index.js +21 -0
- package/cjs/storage/index.js.map +1 -0
- package/cjs/storage/key-value.d.ts +3 -0
- package/cjs/storage/key-value.js +41 -0
- package/cjs/storage/key-value.js.map +1 -0
- package/cjs/storage/peers.d.ts +3 -0
- package/cjs/storage/peers.js +75 -0
- package/cjs/storage/peers.js.map +1 -0
- package/cjs/storage/ref-messages.d.ts +3 -0
- package/cjs/storage/ref-messages.js +69 -0
- package/cjs/storage/ref-messages.js.map +1 -0
- package/cjs/storage.d.ts +2 -16
- package/cjs/storage.js +18 -29
- package/cjs/storage.js.map +1 -1
- package/cjs/transport.test.js +1 -2
- package/cjs/transport.test.js.map +1 -1
- package/cjs/utils.js +1 -2
- package/cjs/utils.js.map +1 -1
- package/esm/client.d.ts +3 -4
- package/esm/client.js +6 -9
- package/esm/client.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/storage/auth-keys.d.ts +3 -0
- package/esm/storage/auth-keys.js +90 -0
- package/esm/storage/auth-keys.js.map +1 -0
- package/esm/storage/index.d.ts +4 -0
- package/esm/storage/index.js +5 -0
- package/esm/storage/index.js.map +1 -0
- package/esm/storage/key-value.d.ts +3 -0
- package/esm/storage/key-value.js +36 -0
- package/esm/storage/key-value.js.map +1 -0
- package/esm/storage/peers.d.ts +3 -0
- package/esm/storage/peers.js +70 -0
- package/esm/storage/peers.js.map +1 -0
- package/esm/storage/ref-messages.d.ts +3 -0
- package/esm/storage/ref-messages.js +64 -0
- package/esm/storage/ref-messages.js.map +1 -0
- package/esm/storage.d.ts +2 -16
- package/esm/storage.js +18 -29
- package/esm/storage.js.map +1 -1
- package/esm/transport.test.js +1 -2
- package/esm/transport.test.js.map +1 -1
- package/esm/utils.js +2 -3
- package/esm/utils.js.map +1 -1
- package/package.json +2 -2
- package/cjs/storage-test.d.ts +0 -24
- package/cjs/storage-test.js +0 -365
- package/cjs/storage-test.js.map +0 -1
- package/cjs/storage.test.d.ts +0 -1
- package/cjs/storage.test.js +0 -43
- package/cjs/storage.test.js.map +0 -1
- package/esm/storage-test.d.ts +0 -24
- package/esm/storage-test.js +0 -357
- package/esm/storage-test.js.map +0 -1
- package/esm/storage.test.d.ts +0 -1
- package/esm/storage.test.js +0 -41
- package/esm/storage.test.js.map +0 -1
package/cjs/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseTelegramClient, BaseTelegramClientOptions,
|
|
1
|
+
import { BaseTelegramClient, BaseTelegramClientOptions, MaybePromise, MustEqual, RpcCallOptions, tl } from '@mtcute/core';
|
|
2
2
|
import { InputResponder } from './types.js';
|
|
3
3
|
interface MessageBox {
|
|
4
4
|
pts: number;
|
|
@@ -31,7 +31,7 @@ export declare class StubTelegramClient extends BaseTelegramClient {
|
|
|
31
31
|
onRawMessage(fn: (data: Uint8Array) => void): void;
|
|
32
32
|
private _responders;
|
|
33
33
|
addResponder<T extends tl.RpcMethod['_']>(responders: InputResponder<T>): void;
|
|
34
|
-
respondWith<T extends tl.RpcMethod['_'], Fn extends (data: tl.FindByName<tl.RpcMethod, T>) =>
|
|
34
|
+
respondWith<T extends tl.RpcMethod['_'], Fn extends (data: tl.FindByName<tl.RpcMethod, T>) => MaybePromise<tl.RpcCallReturn[T]>>(method: T, response: Fn): Fn;
|
|
35
35
|
call<T extends tl.RpcMethod>(message: MustEqual<T, tl.RpcMethod>, params?: RpcCallOptions): Promise<tl.RpcCallReturn[T['_']]>;
|
|
36
36
|
private _fakeMessageBoxes;
|
|
37
37
|
private _lastQts;
|
|
@@ -48,7 +48,6 @@ export declare class StubTelegramClient extends BaseTelegramClient {
|
|
|
48
48
|
seq?: number;
|
|
49
49
|
seqCount?: number;
|
|
50
50
|
}): tl.TypeUpdates;
|
|
51
|
-
|
|
52
|
-
with(fn: () => MaybeAsync<void>): Promise<void>;
|
|
51
|
+
with(fn: () => MaybePromise<void>): Promise<void>;
|
|
53
52
|
}
|
|
54
53
|
export {};
|
package/cjs/client.js
CHANGED
|
@@ -16,17 +16,18 @@ class StubTelegramClient extends core_1.BaseTelegramClient {
|
|
|
16
16
|
apiHash: '',
|
|
17
17
|
logLevel: 0,
|
|
18
18
|
storage,
|
|
19
|
+
disableUpdates: true,
|
|
19
20
|
transport: () => {
|
|
20
21
|
const transport = new transport_js_1.StubTelegramTransport({
|
|
21
22
|
onMessage: (data) => {
|
|
22
23
|
if (!this._onRawMessage) {
|
|
23
24
|
if (this._responders.size) {
|
|
24
|
-
this.
|
|
25
|
+
this.emitError(new Error('Unexpected outgoing message'));
|
|
25
26
|
}
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
29
|
const dcId = transport._currentDc.id;
|
|
29
|
-
const key = storage.
|
|
30
|
+
const key = storage.authKeys.get(dcId);
|
|
30
31
|
if (key) {
|
|
31
32
|
this._onRawMessage(storage.decryptOutgoingMessage(transport._crypto, data, dcId));
|
|
32
33
|
}
|
|
@@ -87,7 +88,7 @@ class StubTelegramClient extends core_1.BaseTelegramClient {
|
|
|
87
88
|
else {
|
|
88
89
|
this._knownChats.set(peer.id, peer);
|
|
89
90
|
}
|
|
90
|
-
await this.
|
|
91
|
+
await this.storage.peers.updatePeersFrom(peer);
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
94
|
getPeers(ids) {
|
|
@@ -208,12 +209,8 @@ class StubTelegramClient extends core_1.BaseTelegramClient {
|
|
|
208
209
|
};
|
|
209
210
|
}
|
|
210
211
|
// helpers //
|
|
211
|
-
async connectAndWait() {
|
|
212
|
-
await this.connect();
|
|
213
|
-
await new Promise((resolve) => this.once('usable', resolve));
|
|
214
|
-
}
|
|
215
212
|
async with(fn) {
|
|
216
|
-
await this.
|
|
213
|
+
await this.connect();
|
|
217
214
|
let error;
|
|
218
215
|
this.onError((err) => {
|
|
219
216
|
error = err;
|
package/cjs/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseTelegramClient, BaseTelegramClientOptions, MaybeAsync, MustEqual, RpcCallOptions, tl } from '@mtcute/core'\n\nimport { StubMemoryTelegramStorage } from './storage.js'\nimport { StubTelegramTransport } from './transport.js'\nimport { InputResponder } from './types.js'\nimport { markedIdToPeer } from './utils.js'\n\ninterface MessageBox {\n pts: number\n lastMessageId: number\n}\n\ntype InputPeerId = number | tl.TypePeer | false | undefined\n\nexport class StubTelegramClient extends BaseTelegramClient {\n constructor(params?: Partial<BaseTelegramClientOptions>) {\n const storage = new StubMemoryTelegramStorage({\n hasKeys: true,\n hasTempKeys: true,\n })\n\n super({\n apiId: 0,\n apiHash: '',\n logLevel: 0,\n storage,\n transport: () => {\n const transport = new StubTelegramTransport({\n onMessage: (data) => {\n if (!this._onRawMessage) {\n if (this._responders.size) {\n this._emitError(new Error('Unexpected outgoing message'))\n }\n\n return\n }\n\n const dcId = transport._currentDc!.id\n const key = storage.getAuthKeyFor(dcId)\n\n if (key) {\n this._onRawMessage(storage.decryptOutgoingMessage(transport._crypto, data, dcId))\n }\n },\n })\n\n return transport\n },\n ...params,\n })\n }\n\n /**\n * Create a fake client that may not actually be used for API calls\n *\n * Useful for testing \"offline\" methods\n */\n static offline() {\n const client = new StubTelegramClient()\n\n client.call = (obj) => {\n throw new Error(`Expected offline client to not make any API calls (method called: ${obj._})`)\n }\n\n return client\n }\n\n /**\n * Create a fake \"full\" client (i.e. TelegramClient)\n *\n * Basically a proxy that returns an empty function for every unknown method\n */\n static full() {\n const client = new StubTelegramClient()\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return new Proxy(client, {\n get(target, prop) {\n if (typeof prop === 'string' && !(prop in target)) {\n return () => {}\n }\n\n return target[prop as keyof typeof target]\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any\n // i don't want to type this properly since it would require depending test utils on client\n }\n\n // some fake peers handling //\n\n readonly _knownChats = new Map<number, tl.TypeChat>()\n readonly _knownUsers = new Map<number, tl.TypeUser>()\n _selfId = 0\n\n async registerPeers(...peers: (tl.TypeUser | tl.TypeChat)[]): Promise<void> {\n for (const peer of peers) {\n if (tl.isAnyUser(peer)) {\n this._knownUsers.set(peer.id, peer)\n } else {\n this._knownChats.set(peer.id, peer)\n }\n\n await this._cachePeersFrom(peer)\n }\n }\n\n getPeers(ids: InputPeerId[]) {\n const users: tl.TypeUser[] = []\n const chats: tl.TypeChat[] = []\n\n for (let id of ids) {\n if (!id) continue\n\n if (typeof id === 'number') {\n id = markedIdToPeer(id)\n }\n\n switch (id._) {\n case 'peerUser': {\n const user = this._knownUsers.get(id.userId)\n if (!user) throw new Error(`Unknown user with ID ${id.userId}`)\n\n users.push(user)\n break\n }\n case 'peerChat': {\n const chat = this._knownChats.get(id.chatId)\n if (!chat) throw new Error(`Unknown chat with ID ${id.chatId}`)\n\n chats.push(chat)\n break\n }\n case 'peerChannel': {\n const chat = this._knownChats.get(id.channelId)\n if (!chat) throw new Error(`Unknown channel with ID ${id.channelId}`)\n\n chats.push(chat)\n break\n }\n }\n }\n\n return { users, chats }\n }\n\n // method calls intercepting //\n\n private _onRawMessage?: (data: Uint8Array) => void\n onRawMessage(fn: (data: Uint8Array) => void): void {\n this._onRawMessage = fn\n }\n\n // eslint-disable-next-line func-call-spacing\n private _responders = new Map<string, (data: unknown) => unknown>()\n\n addResponder<T extends tl.RpcMethod['_']>(responders: InputResponder<T>): void {\n if (Array.isArray(responders)) {\n for (const responder of responders) {\n this.addResponder(responder as InputResponder<tl.RpcMethod['_']>)\n }\n\n return\n }\n\n if (typeof responders === 'function') {\n responders = responders(this)\n }\n\n const [method, responder] = responders\n this.respondWith(method, responder)\n }\n\n respondWith<\n T extends tl.RpcMethod['_'],\n Fn extends(data: tl.FindByName<tl.RpcMethod, T>) => MaybeAsync<tl.RpcCallReturn[T]>,\n >(method: T, response: Fn): Fn {\n // eslint-disable-next-line\n this._responders.set(method, response as any)\n\n return response\n }\n\n async call<T extends tl.RpcMethod>(\n message: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n if (this._responders.has(message._)) {\n // eslint-disable-next-line\n return Promise.resolve(this._responders.get(message._)!(message)) as any\n }\n\n return super.call(message, params)\n }\n\n // some fake updates mechanism //\n\n private _fakeMessageBoxes = new Map<number, MessageBox>()\n private _lastQts = 0\n private _lastDate = Math.floor(Date.now() / 1000)\n private _lastSeq = 0\n\n getMessageBox(chatId = 0): MessageBox {\n const state = this._fakeMessageBoxes.get(chatId)\n\n if (!state) {\n const newState = { pts: 0, lastMessageId: 0 }\n this._fakeMessageBoxes.set(chatId, newState)\n\n return newState\n }\n\n return state\n }\n\n getNextMessageId(chatId = 0) {\n const state = this.getMessageBox(chatId)\n\n const nextId = state.lastMessageId + 1\n state.lastMessageId = nextId\n\n return nextId\n }\n\n getNextPts(chatId = 0, count = 1) {\n const state = this.getMessageBox(chatId)\n\n const nextPts = state.pts + count\n state.pts = nextPts\n\n return nextPts\n }\n\n getNextQts() {\n return this._lastQts++\n }\n\n getNextDate() {\n return (this._lastDate = Math.floor(Date.now() / 1000))\n }\n\n createStubUpdates(params: {\n updates: tl.TypeUpdate[]\n peers?: (number | tl.TypePeer)[]\n seq?: number\n seqCount?: number\n }): tl.TypeUpdates {\n const { peers, updates, seq = 0, seqCount = 1 } = params\n\n const { users, chats } = this.getPeers(peers ?? [])\n\n const seqStart = seq - seqCount + 1\n\n if (seq !== 0) {\n this._lastSeq = seq + seqCount\n }\n\n if (seqStart !== seq) {\n return {\n _: 'updatesCombined',\n updates,\n users,\n chats,\n date: this.getNextDate(),\n seq,\n seqStart,\n }\n }\n\n return {\n _: 'updates',\n updates,\n users,\n chats,\n date: this.getNextDate(),\n seq,\n }\n }\n\n // helpers //\n\n async connectAndWait() {\n await this.connect()\n await new Promise((resolve) => this.once('usable', resolve))\n }\n\n async with(fn: () => MaybeAsync<void>): Promise<void> {\n await this.connectAndWait()\n\n let error: unknown\n\n this.onError((err) => {\n error = err\n })\n\n try {\n await fn()\n } catch (e) {\n error = e\n }\n\n await this.close()\n\n if (error) {\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw error\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BaseTelegramClient,\n BaseTelegramClientOptions,\n MaybePromise,\n MustEqual,\n RpcCallOptions,\n tl,\n} from '@mtcute/core'\n\nimport { StubMemoryTelegramStorage } from './storage.js'\nimport { StubTelegramTransport } from './transport.js'\nimport { InputResponder } from './types.js'\nimport { markedIdToPeer } from './utils.js'\n\ninterface MessageBox {\n pts: number\n lastMessageId: number\n}\n\ntype InputPeerId = number | tl.TypePeer | false | undefined\n\nexport class StubTelegramClient extends BaseTelegramClient {\n constructor(params?: Partial<BaseTelegramClientOptions>) {\n const storage = new StubMemoryTelegramStorage({\n hasKeys: true,\n hasTempKeys: true,\n })\n\n super({\n apiId: 0,\n apiHash: '',\n logLevel: 0,\n storage,\n disableUpdates: true,\n transport: () => {\n const transport = new StubTelegramTransport({\n onMessage: (data) => {\n if (!this._onRawMessage) {\n if (this._responders.size) {\n this.emitError(new Error('Unexpected outgoing message'))\n }\n\n return\n }\n\n const dcId = transport._currentDc!.id\n const key = storage.authKeys.get(dcId)\n\n if (key) {\n this._onRawMessage(storage.decryptOutgoingMessage(transport._crypto, data, dcId))\n }\n },\n })\n\n return transport\n },\n ...params,\n })\n }\n\n /**\n * Create a fake client that may not actually be used for API calls\n *\n * Useful for testing \"offline\" methods\n */\n static offline() {\n const client = new StubTelegramClient()\n\n client.call = (obj) => {\n throw new Error(`Expected offline client to not make any API calls (method called: ${obj._})`)\n }\n\n return client\n }\n\n /**\n * Create a fake \"full\" client (i.e. TelegramClient)\n *\n * Basically a proxy that returns an empty function for every unknown method\n */\n static full() {\n const client = new StubTelegramClient()\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return new Proxy(client, {\n get(target, prop) {\n if (typeof prop === 'string' && !(prop in target)) {\n return () => {}\n }\n\n return target[prop as keyof typeof target]\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any\n // i don't want to type this properly since it would require depending test utils on client\n }\n\n // some fake peers handling //\n\n readonly _knownChats = new Map<number, tl.TypeChat>()\n readonly _knownUsers = new Map<number, tl.TypeUser>()\n _selfId = 0\n\n async registerPeers(...peers: (tl.TypeUser | tl.TypeChat)[]): Promise<void> {\n for (const peer of peers) {\n if (tl.isAnyUser(peer)) {\n this._knownUsers.set(peer.id, peer)\n } else {\n this._knownChats.set(peer.id, peer)\n }\n\n await this.storage.peers.updatePeersFrom(peer)\n }\n }\n\n getPeers(ids: InputPeerId[]) {\n const users: tl.TypeUser[] = []\n const chats: tl.TypeChat[] = []\n\n for (let id of ids) {\n if (!id) continue\n\n if (typeof id === 'number') {\n id = markedIdToPeer(id)\n }\n\n switch (id._) {\n case 'peerUser': {\n const user = this._knownUsers.get(id.userId)\n if (!user) throw new Error(`Unknown user with ID ${id.userId}`)\n\n users.push(user)\n break\n }\n case 'peerChat': {\n const chat = this._knownChats.get(id.chatId)\n if (!chat) throw new Error(`Unknown chat with ID ${id.chatId}`)\n\n chats.push(chat)\n break\n }\n case 'peerChannel': {\n const chat = this._knownChats.get(id.channelId)\n if (!chat) throw new Error(`Unknown channel with ID ${id.channelId}`)\n\n chats.push(chat)\n break\n }\n }\n }\n\n return { users, chats }\n }\n\n // method calls intercepting //\n\n private _onRawMessage?: (data: Uint8Array) => void\n onRawMessage(fn: (data: Uint8Array) => void): void {\n this._onRawMessage = fn\n }\n\n // eslint-disable-next-line func-call-spacing\n private _responders = new Map<string, (data: unknown) => unknown>()\n\n addResponder<T extends tl.RpcMethod['_']>(responders: InputResponder<T>): void {\n if (Array.isArray(responders)) {\n for (const responder of responders) {\n this.addResponder(responder as InputResponder<tl.RpcMethod['_']>)\n }\n\n return\n }\n\n if (typeof responders === 'function') {\n responders = responders(this)\n }\n\n const [method, responder] = responders\n this.respondWith(method, responder)\n }\n\n respondWith<\n T extends tl.RpcMethod['_'],\n Fn extends(data: tl.FindByName<tl.RpcMethod, T>) => MaybePromise<tl.RpcCallReturn[T]>,\n >(method: T, response: Fn): Fn {\n // eslint-disable-next-line\n this._responders.set(method, response as any)\n\n return response\n }\n\n async call<T extends tl.RpcMethod>(\n message: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n if (this._responders.has(message._)) {\n // eslint-disable-next-line\n return Promise.resolve(this._responders.get(message._)!(message)) as any\n }\n\n return super.call(message, params)\n }\n\n // some fake updates mechanism //\n\n private _fakeMessageBoxes = new Map<number, MessageBox>()\n private _lastQts = 0\n private _lastDate = Math.floor(Date.now() / 1000)\n private _lastSeq = 0\n\n getMessageBox(chatId = 0): MessageBox {\n const state = this._fakeMessageBoxes.get(chatId)\n\n if (!state) {\n const newState = { pts: 0, lastMessageId: 0 }\n this._fakeMessageBoxes.set(chatId, newState)\n\n return newState\n }\n\n return state\n }\n\n getNextMessageId(chatId = 0) {\n const state = this.getMessageBox(chatId)\n\n const nextId = state.lastMessageId + 1\n state.lastMessageId = nextId\n\n return nextId\n }\n\n getNextPts(chatId = 0, count = 1) {\n const state = this.getMessageBox(chatId)\n\n const nextPts = state.pts + count\n state.pts = nextPts\n\n return nextPts\n }\n\n getNextQts() {\n return this._lastQts++\n }\n\n getNextDate() {\n return (this._lastDate = Math.floor(Date.now() / 1000))\n }\n\n createStubUpdates(params: {\n updates: tl.TypeUpdate[]\n peers?: (number | tl.TypePeer)[]\n seq?: number\n seqCount?: number\n }): tl.TypeUpdates {\n const { peers, updates, seq = 0, seqCount = 1 } = params\n\n const { users, chats } = this.getPeers(peers ?? [])\n\n const seqStart = seq - seqCount + 1\n\n if (seq !== 0) {\n this._lastSeq = seq + seqCount\n }\n\n if (seqStart !== seq) {\n return {\n _: 'updatesCombined',\n updates,\n users,\n chats,\n date: this.getNextDate(),\n seq,\n seqStart,\n }\n }\n\n return {\n _: 'updates',\n updates,\n users,\n chats,\n date: this.getNextDate(),\n seq,\n }\n }\n\n // helpers //\n\n async with(fn: () => MaybePromise<void>): Promise<void> {\n await this.connect()\n\n let error: unknown\n\n this.onError((err) => {\n error = err\n })\n\n try {\n await fn()\n } catch (e) {\n error = e\n }\n\n await this.close()\n\n if (error) {\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw error\n }\n }\n}\n"]}
|
package/cjs/index.d.ts
CHANGED
package/cjs/index.js
CHANGED
|
@@ -17,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./client.js"), exports);
|
|
18
18
|
__exportStar(require("./crypto.js"), exports);
|
|
19
19
|
__exportStar(require("./storage.js"), exports);
|
|
20
|
-
__exportStar(require("./storage
|
|
20
|
+
__exportStar(require("./storage/index.js"), exports);
|
|
21
21
|
__exportStar(require("./stub.js"), exports);
|
|
22
22
|
__exportStar(require("./transport.js"), exports);
|
|
23
23
|
__exportStar(require("./types.js"), exports);
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,8CAA2B;AAC3B,+CAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,8CAA2B;AAC3B,+CAA4B;AAC5B,qDAAkC;AAClC,4CAAyB;AACzB,iDAA8B;AAC9B,6CAA0B","sourcesContent":["export * from './client.js'\nexport * from './crypto.js'\nexport * from './storage.js'\nexport * from './storage/index.js'\nexport * from './stub.js'\nexport * from './transport.js'\nexport * from './types.js'\n"]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testAuthKeysRepository = exports.fakeAuthKeysRepository = void 0;
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
function fakeAuthKeysRepository() {
|
|
6
|
+
return {
|
|
7
|
+
get: vitest_1.vi.fn(),
|
|
8
|
+
set: vitest_1.vi.fn(),
|
|
9
|
+
getTemp: vitest_1.vi.fn(),
|
|
10
|
+
setTemp: vitest_1.vi.fn(),
|
|
11
|
+
deleteByDc: vitest_1.vi.fn(),
|
|
12
|
+
deleteAll: vitest_1.vi.fn(),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
exports.fakeAuthKeysRepository = fakeAuthKeysRepository;
|
|
16
|
+
function fixBuffer(buf) {
|
|
17
|
+
if (!buf)
|
|
18
|
+
return buf;
|
|
19
|
+
// eslint-disable-next-line no-restricted-globals
|
|
20
|
+
return typeof Buffer !== 'undefined' && buf instanceof Buffer ? new Uint8Array(buf) : buf;
|
|
21
|
+
}
|
|
22
|
+
function testAuthKeysRepository(repo) {
|
|
23
|
+
const key2 = new Uint8Array(256).fill(0x42);
|
|
24
|
+
const key3 = new Uint8Array(256).fill(0x43);
|
|
25
|
+
const key2i0 = new Uint8Array(256).fill(0x44);
|
|
26
|
+
const key2i1 = new Uint8Array(256).fill(0x45);
|
|
27
|
+
const key3i0 = new Uint8Array(256).fill(0x46);
|
|
28
|
+
const key3i1 = new Uint8Array(256).fill(0x47);
|
|
29
|
+
(0, vitest_1.describe)('auth keys', () => {
|
|
30
|
+
(0, vitest_1.afterEach)(() => repo.deleteAll());
|
|
31
|
+
(0, vitest_1.it)('should be empty by default', async () => {
|
|
32
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get(2))).toEqual(null);
|
|
33
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get(3))).toEqual(null);
|
|
34
|
+
});
|
|
35
|
+
(0, vitest_1.it)('should store and retrieve auth keys', async () => {
|
|
36
|
+
await repo.set(2, key2);
|
|
37
|
+
await repo.set(3, key3);
|
|
38
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get(2))).toEqual(key2);
|
|
39
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get(3))).toEqual(key3);
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.it)('should delete auth keys', async () => {
|
|
42
|
+
await repo.set(2, key2);
|
|
43
|
+
await repo.set(3, key3);
|
|
44
|
+
await repo.set(2, null);
|
|
45
|
+
await repo.set(3, null);
|
|
46
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get(2))).toEqual(null);
|
|
47
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get(3))).toEqual(null);
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.it)('should store and retrieve temp auth keys', async () => {
|
|
50
|
+
await repo.setTemp(2, 0, key2i0, 1);
|
|
51
|
+
await repo.setTemp(2, 1, key2i1, 1);
|
|
52
|
+
await repo.setTemp(3, 0, key3i0, 1);
|
|
53
|
+
await repo.setTemp(3, 1, key3i1, 1);
|
|
54
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(2, 0, 0))).toEqual(key2i0);
|
|
55
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(2, 1, 0))).toEqual(key2i1);
|
|
56
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(3, 0, 0))).toEqual(key3i0);
|
|
57
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(3, 1, 0))).toEqual(key3i1);
|
|
58
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(2, 0, 100))).toEqual(null);
|
|
59
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(2, 1, 100))).toEqual(null);
|
|
60
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(3, 0, 100))).toEqual(null);
|
|
61
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(3, 1, 100))).toEqual(null);
|
|
62
|
+
});
|
|
63
|
+
(0, vitest_1.it)('should delete temp auth keys', async () => {
|
|
64
|
+
await repo.setTemp(2, 0, key2i0, 1);
|
|
65
|
+
await repo.setTemp(2, 1, key2i1, 1);
|
|
66
|
+
await repo.setTemp(3, 0, key3i0, 1);
|
|
67
|
+
await repo.setTemp(3, 1, key3i1, 1);
|
|
68
|
+
await repo.setTemp(2, 0, null, 1);
|
|
69
|
+
await repo.setTemp(2, 1, null, 1);
|
|
70
|
+
await repo.setTemp(3, 0, null, 1);
|
|
71
|
+
await repo.setTemp(3, 1, null, 1);
|
|
72
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(2, 0, 0))).toEqual(null);
|
|
73
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(2, 1, 0))).toEqual(null);
|
|
74
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(3, 0, 0))).toEqual(null);
|
|
75
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(3, 1, 0))).toEqual(null);
|
|
76
|
+
});
|
|
77
|
+
(0, vitest_1.it)('should delete all auth keys by DC', async () => {
|
|
78
|
+
await repo.set(2, key2);
|
|
79
|
+
await repo.set(3, key3);
|
|
80
|
+
await repo.setTemp(2, 0, key2i0, 1);
|
|
81
|
+
await repo.setTemp(2, 1, key2i1, 1);
|
|
82
|
+
await repo.setTemp(3, 0, key3i0, 1);
|
|
83
|
+
await repo.setTemp(3, 1, key3i1, 1);
|
|
84
|
+
await repo.deleteByDc(2);
|
|
85
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get(2))).toEqual(null);
|
|
86
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get(3))).toEqual(key3);
|
|
87
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(2, 0, 0))).toEqual(null);
|
|
88
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(2, 1, 0))).toEqual(null);
|
|
89
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(3, 0, 0))).toEqual(key3i0);
|
|
90
|
+
(0, vitest_1.expect)(fixBuffer(await repo.getTemp(3, 1, 0))).toEqual(key3i1);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
exports.testAuthKeysRepository = testAuthKeysRepository;
|
|
95
|
+
//# sourceMappingURL=auth-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-keys.js","sourceRoot":"","sources":["../../../src/storage/auth-keys.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, describe, expect, it, vi } from 'vitest'\n\nimport { IAuthKeysRepository } from '@mtcute/core'\n\nexport function fakeAuthKeysRepository(): IAuthKeysRepository {\n return {\n get: vi.fn(),\n set: vi.fn(),\n getTemp: vi.fn(),\n setTemp: vi.fn(),\n deleteByDc: vi.fn(),\n deleteAll: vi.fn(),\n }\n}\n\nfunction fixBuffer(buf: Uint8Array | null): Uint8Array | null {\n if (!buf) return buf\n\n // eslint-disable-next-line no-restricted-globals\n return typeof Buffer !== 'undefined' && buf instanceof Buffer ? new Uint8Array(buf) : buf\n}\n\nexport function testAuthKeysRepository(repo: IAuthKeysRepository) {\n const key2 = new Uint8Array(256).fill(0x42)\n const key3 = new Uint8Array(256).fill(0x43)\n\n const key2i0 = new Uint8Array(256).fill(0x44)\n const key2i1 = new Uint8Array(256).fill(0x45)\n const key3i0 = new Uint8Array(256).fill(0x46)\n const key3i1 = new Uint8Array(256).fill(0x47)\n\n describe('auth keys', () => {\n afterEach(() => repo.deleteAll())\n\n it('should be empty by default', async () => {\n expect(fixBuffer(await repo.get(2))).toEqual(null)\n expect(fixBuffer(await repo.get(3))).toEqual(null)\n })\n\n it('should store and retrieve auth keys', async () => {\n await repo.set(2, key2)\n await repo.set(3, key3)\n\n expect(fixBuffer(await repo.get(2))).toEqual(key2)\n expect(fixBuffer(await repo.get(3))).toEqual(key3)\n })\n\n it('should delete auth keys', async () => {\n await repo.set(2, key2)\n await repo.set(3, key3)\n\n await repo.set(2, null)\n await repo.set(3, null)\n\n expect(fixBuffer(await repo.get(2))).toEqual(null)\n expect(fixBuffer(await repo.get(3))).toEqual(null)\n })\n\n it('should store and retrieve temp auth keys', async () => {\n await repo.setTemp(2, 0, key2i0, 1)\n await repo.setTemp(2, 1, key2i1, 1)\n await repo.setTemp(3, 0, key3i0, 1)\n await repo.setTemp(3, 1, key3i1, 1)\n\n expect(fixBuffer(await repo.getTemp(2, 0, 0))).toEqual(key2i0)\n expect(fixBuffer(await repo.getTemp(2, 1, 0))).toEqual(key2i1)\n expect(fixBuffer(await repo.getTemp(3, 0, 0))).toEqual(key3i0)\n expect(fixBuffer(await repo.getTemp(3, 1, 0))).toEqual(key3i1)\n\n expect(fixBuffer(await repo.getTemp(2, 0, 100))).toEqual(null)\n expect(fixBuffer(await repo.getTemp(2, 1, 100))).toEqual(null)\n expect(fixBuffer(await repo.getTemp(3, 0, 100))).toEqual(null)\n expect(fixBuffer(await repo.getTemp(3, 1, 100))).toEqual(null)\n })\n\n it('should delete temp auth keys', async () => {\n await repo.setTemp(2, 0, key2i0, 1)\n await repo.setTemp(2, 1, key2i1, 1)\n await repo.setTemp(3, 0, key3i0, 1)\n await repo.setTemp(3, 1, key3i1, 1)\n\n await repo.setTemp(2, 0, null, 1)\n await repo.setTemp(2, 1, null, 1)\n await repo.setTemp(3, 0, null, 1)\n await repo.setTemp(3, 1, null, 1)\n\n expect(fixBuffer(await repo.getTemp(2, 0, 0))).toEqual(null)\n expect(fixBuffer(await repo.getTemp(2, 1, 0))).toEqual(null)\n expect(fixBuffer(await repo.getTemp(3, 0, 0))).toEqual(null)\n expect(fixBuffer(await repo.getTemp(3, 1, 0))).toEqual(null)\n })\n\n it('should delete all auth keys by DC', async () => {\n await repo.set(2, key2)\n await repo.set(3, key3)\n\n await repo.setTemp(2, 0, key2i0, 1)\n await repo.setTemp(2, 1, key2i1, 1)\n await repo.setTemp(3, 0, key3i0, 1)\n await repo.setTemp(3, 1, key3i1, 1)\n\n await repo.deleteByDc(2)\n\n expect(fixBuffer(await repo.get(2))).toEqual(null)\n expect(fixBuffer(await repo.get(3))).toEqual(key3)\n\n expect(fixBuffer(await repo.getTemp(2, 0, 0))).toEqual(null)\n expect(fixBuffer(await repo.getTemp(2, 1, 0))).toEqual(null)\n expect(fixBuffer(await repo.getTemp(3, 0, 0))).toEqual(key3i0)\n expect(fixBuffer(await repo.getTemp(3, 1, 0))).toEqual(key3i1)\n })\n })\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./auth-keys.js"), exports);
|
|
18
|
+
__exportStar(require("./key-value.js"), exports);
|
|
19
|
+
__exportStar(require("./peers.js"), exports);
|
|
20
|
+
__exportStar(require("./ref-messages.js"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA8B;AAC9B,iDAA8B;AAC9B,6CAA0B;AAC1B,oDAAiC","sourcesContent":["export * from './auth-keys.js'\nexport * from './key-value.js'\nexport * from './peers.js'\nexport * from './ref-messages.js'\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testKeyValueRepository = exports.fakeKeyValueRepository = void 0;
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
function fakeKeyValueRepository() {
|
|
6
|
+
return {
|
|
7
|
+
get: vitest_1.vi.fn(),
|
|
8
|
+
set: vitest_1.vi.fn(),
|
|
9
|
+
delete: vitest_1.vi.fn(),
|
|
10
|
+
deleteAll: vitest_1.vi.fn(),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
exports.fakeKeyValueRepository = fakeKeyValueRepository;
|
|
14
|
+
function fixBuffer(buf) {
|
|
15
|
+
if (!buf)
|
|
16
|
+
return buf;
|
|
17
|
+
// eslint-disable-next-line no-restricted-globals
|
|
18
|
+
return typeof Buffer !== 'undefined' && buf instanceof Buffer ? new Uint8Array(buf) : buf;
|
|
19
|
+
}
|
|
20
|
+
function testKeyValueRepository(repo, driver) {
|
|
21
|
+
(0, vitest_1.describe)('key-value', () => {
|
|
22
|
+
(0, vitest_1.afterEach)(() => repo.deleteAll());
|
|
23
|
+
(0, vitest_1.it)('should be empty by default', async () => {
|
|
24
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get('key'))).toEqual(null);
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.it)('should store and retrieve values', async () => {
|
|
27
|
+
await repo.set('key', new Uint8Array([1, 2, 3]));
|
|
28
|
+
await driver.save?.();
|
|
29
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get('key'))).toEqual(new Uint8Array([1, 2, 3]));
|
|
30
|
+
});
|
|
31
|
+
(0, vitest_1.it)('should delete values', async () => {
|
|
32
|
+
await repo.set('key', new Uint8Array([1, 2, 3]));
|
|
33
|
+
await driver.save?.();
|
|
34
|
+
await repo.delete('key');
|
|
35
|
+
await driver.save?.();
|
|
36
|
+
(0, vitest_1.expect)(fixBuffer(await repo.get('key'))).toEqual(null);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
exports.testKeyValueRepository = testKeyValueRepository;
|
|
41
|
+
//# sourceMappingURL=key-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-value.js","sourceRoot":"","sources":["../../../src/storage/key-value.ts"],"names":[],"mappings":";;;AAAA,mCAA4D;AAI5D,SAAgB,sBAAsB;IAClC,OAAO;QACH,GAAG,EAAE,WAAE,CAAC,EAAE,EAAE;QACZ,GAAG,EAAE,WAAE,CAAC,EAAE,EAAE;QACZ,MAAM,EAAE,WAAE,CAAC,EAAE,EAAE;QACf,SAAS,EAAE,WAAE,CAAC,EAAE,EAAE;KACrB,CAAA;AACL,CAAC;AAPD,wDAOC;AAED,SAAS,SAAS,CAAC,GAAsB;IACrC,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAA;IAEpB,iDAAiD;IACjD,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AAC7F,CAAC;AAED,SAAgB,sBAAsB,CAAC,IAAyB,EAAE,MAAsB;IACpF,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;QACvB,IAAA,kBAAS,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QAEjC,IAAA,WAAE,EAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YACxC,IAAA,eAAM,EAAC,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,IAAA,WAAE,EAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAA;YAErB,IAAA,eAAM,EAAC,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/E,CAAC,CAAC,CAAA;QAEF,IAAA,WAAE,EAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAA;YAErB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACxB,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAA;YAErB,IAAA,eAAM,EAAC,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC;AAzBD,wDAyBC","sourcesContent":["import { afterEach, describe, expect, it, vi } from 'vitest'\n\nimport { IKeyValueRepository, IStorageDriver } from '@mtcute/core'\n\nexport function fakeKeyValueRepository(): IKeyValueRepository {\n return {\n get: vi.fn(),\n set: vi.fn(),\n delete: vi.fn(),\n deleteAll: vi.fn(),\n }\n}\n\nfunction fixBuffer(buf: Uint8Array | null): Uint8Array | null {\n if (!buf) return buf\n\n // eslint-disable-next-line no-restricted-globals\n return typeof Buffer !== 'undefined' && buf instanceof Buffer ? new Uint8Array(buf) : buf\n}\n\nexport function testKeyValueRepository(repo: IKeyValueRepository, driver: IStorageDriver) {\n describe('key-value', () => {\n afterEach(() => repo.deleteAll())\n\n it('should be empty by default', async () => {\n expect(fixBuffer(await repo.get('key'))).toEqual(null)\n })\n\n it('should store and retrieve values', async () => {\n await repo.set('key', new Uint8Array([1, 2, 3]))\n await driver.save?.()\n\n expect(fixBuffer(await repo.get('key'))).toEqual(new Uint8Array([1, 2, 3]))\n })\n\n it('should delete values', async () => {\n await repo.set('key', new Uint8Array([1, 2, 3]))\n await driver.save?.()\n\n await repo.delete('key')\n await driver.save?.()\n\n expect(fixBuffer(await repo.get('key'))).toEqual(null)\n })\n })\n}\n"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testPeersRepository = exports.fakePeersRepository = void 0;
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const utils_js_1 = require("@mtcute/core/utils.js");
|
|
6
|
+
const writer_js_1 = require("@mtcute/tl/binary/writer.js");
|
|
7
|
+
const stub_js_1 = require("../stub.js");
|
|
8
|
+
function fakePeersRepository() {
|
|
9
|
+
return {
|
|
10
|
+
getById: vitest_1.vi.fn(),
|
|
11
|
+
getByUsername: vitest_1.vi.fn(),
|
|
12
|
+
getByPhone: vitest_1.vi.fn(),
|
|
13
|
+
store: vitest_1.vi.fn(),
|
|
14
|
+
deleteAll: vitest_1.vi.fn(),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
exports.fakePeersRepository = fakePeersRepository;
|
|
18
|
+
function fixPeerInfo(peer) {
|
|
19
|
+
if (!peer)
|
|
20
|
+
return peer;
|
|
21
|
+
return {
|
|
22
|
+
...peer,
|
|
23
|
+
complete:
|
|
24
|
+
// eslint-disable-next-line no-restricted-globals
|
|
25
|
+
typeof Buffer !== 'undefined' && peer.complete instanceof Buffer ?
|
|
26
|
+
new Uint8Array(peer.complete) :
|
|
27
|
+
peer.complete,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function testPeersRepository(repo, driver) {
|
|
31
|
+
const stubPeerUser = {
|
|
32
|
+
id: 123123,
|
|
33
|
+
accessHash: '123|456',
|
|
34
|
+
usernames: ['some_user'],
|
|
35
|
+
phone: '78005553535',
|
|
36
|
+
updated: 666,
|
|
37
|
+
complete: utils_js_1.TlBinaryWriter.serializeObject(writer_js_1.__tlWriterMap, (0, stub_js_1.createStub)('user', { id: 123123 })),
|
|
38
|
+
};
|
|
39
|
+
const stubPeerChannel = {
|
|
40
|
+
id: -1001183945448,
|
|
41
|
+
accessHash: '666|555',
|
|
42
|
+
usernames: ['some_channel'],
|
|
43
|
+
updated: 777,
|
|
44
|
+
complete: utils_js_1.TlBinaryWriter.serializeObject(writer_js_1.__tlWriterMap, (0, stub_js_1.createStub)('channel', { id: 123123 })),
|
|
45
|
+
};
|
|
46
|
+
(0, vitest_1.describe)('peers', () => {
|
|
47
|
+
(0, vitest_1.it)('should be empty by default', async () => {
|
|
48
|
+
(0, vitest_1.expect)(await repo.getById(123123)).toEqual(null);
|
|
49
|
+
(0, vitest_1.expect)(await repo.getByUsername('some_user')).toEqual(null);
|
|
50
|
+
(0, vitest_1.expect)(await repo.getByPhone('phone')).toEqual(null);
|
|
51
|
+
});
|
|
52
|
+
(0, vitest_1.it)('should store and retrieve peers', async () => {
|
|
53
|
+
await repo.store(stubPeerUser);
|
|
54
|
+
await repo.store(stubPeerChannel);
|
|
55
|
+
await driver.save?.();
|
|
56
|
+
(0, vitest_1.expect)(fixPeerInfo(await repo.getById(123123))).toEqual(stubPeerUser);
|
|
57
|
+
(0, vitest_1.expect)(fixPeerInfo(await repo.getByUsername('some_user'))).toEqual(stubPeerUser);
|
|
58
|
+
(0, vitest_1.expect)(fixPeerInfo(await repo.getByPhone('78005553535'))).toEqual(stubPeerUser);
|
|
59
|
+
(0, vitest_1.expect)(fixPeerInfo(await repo.getById(-1001183945448))).toEqual(stubPeerChannel);
|
|
60
|
+
(0, vitest_1.expect)(fixPeerInfo(await repo.getByUsername('some_channel'))).toEqual(stubPeerChannel);
|
|
61
|
+
});
|
|
62
|
+
(0, vitest_1.it)('should update peers usernames', async () => {
|
|
63
|
+
await repo.store(stubPeerUser);
|
|
64
|
+
await driver.save?.();
|
|
65
|
+
const modUser = { ...stubPeerUser, usernames: ['some_user2'] };
|
|
66
|
+
await repo.store(modUser);
|
|
67
|
+
await driver.save?.();
|
|
68
|
+
(0, vitest_1.expect)(fixPeerInfo(await repo.getById(123123))).toEqual(modUser);
|
|
69
|
+
(0, vitest_1.expect)(await repo.getByUsername('some_user')).toEqual(null);
|
|
70
|
+
(0, vitest_1.expect)(fixPeerInfo(await repo.getByUsername('some_user2'))).toEqual(modUser);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
exports.testPeersRepository = testPeersRepository;
|
|
75
|
+
//# sourceMappingURL=peers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peers.js","sourceRoot":"","sources":["../../../src/storage/peers.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it, vi } from 'vitest'\n\nimport { IPeersRepository, IStorageDriver } from '@mtcute/core'\nimport { TlBinaryWriter } from '@mtcute/core/utils.js'\nimport { __tlWriterMap } from '@mtcute/tl/binary/writer.js'\n\nimport { createStub } from '../stub.js'\n\nexport function fakePeersRepository(): IPeersRepository {\n return {\n getById: vi.fn(),\n getByUsername: vi.fn(),\n getByPhone: vi.fn(),\n store: vi.fn(),\n deleteAll: vi.fn(),\n }\n}\n\nfunction fixPeerInfo(peer: IPeersRepository.PeerInfo | null): IPeersRepository.PeerInfo | null {\n if (!peer) return peer\n\n return {\n ...peer,\n complete:\n // eslint-disable-next-line no-restricted-globals\n typeof Buffer !== 'undefined' && peer.complete instanceof Buffer ?\n new Uint8Array(peer.complete) :\n peer.complete,\n }\n}\n\nexport function testPeersRepository(repo: IPeersRepository, driver: IStorageDriver) {\n const stubPeerUser: IPeersRepository.PeerInfo = {\n id: 123123,\n accessHash: '123|456',\n usernames: ['some_user'],\n phone: '78005553535',\n updated: 666,\n complete: TlBinaryWriter.serializeObject(__tlWriterMap, createStub('user', { id: 123123 })),\n }\n\n const stubPeerChannel: IPeersRepository.PeerInfo = {\n id: -1001183945448,\n accessHash: '666|555',\n usernames: ['some_channel'],\n updated: 777,\n complete: TlBinaryWriter.serializeObject(__tlWriterMap, createStub('channel', { id: 123123 })),\n }\n\n describe('peers', () => {\n it('should be empty by default', async () => {\n expect(await repo.getById(123123)).toEqual(null)\n expect(await repo.getByUsername('some_user')).toEqual(null)\n expect(await repo.getByPhone('phone')).toEqual(null)\n })\n\n it('should store and retrieve peers', async () => {\n await repo.store(stubPeerUser)\n await repo.store(stubPeerChannel)\n await driver.save?.()\n\n expect(fixPeerInfo(await repo.getById(123123))).toEqual(stubPeerUser)\n expect(fixPeerInfo(await repo.getByUsername('some_user'))).toEqual(stubPeerUser)\n expect(fixPeerInfo(await repo.getByPhone('78005553535'))).toEqual(stubPeerUser)\n\n expect(fixPeerInfo(await repo.getById(-1001183945448))).toEqual(stubPeerChannel)\n expect(fixPeerInfo(await repo.getByUsername('some_channel'))).toEqual(stubPeerChannel)\n })\n\n it('should update peers usernames', async () => {\n await repo.store(stubPeerUser)\n await driver.save?.()\n\n const modUser = { ...stubPeerUser, usernames: ['some_user2'] }\n await repo.store(modUser)\n await driver.save?.()\n\n expect(fixPeerInfo(await repo.getById(123123))).toEqual(modUser)\n expect(await repo.getByUsername('some_user')).toEqual(null)\n expect(fixPeerInfo(await repo.getByUsername('some_user2'))).toEqual(modUser)\n })\n })\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { IReferenceMessagesRepository, IStorageDriver } from '@mtcute/core';
|
|
2
|
+
export declare function fakeRefMessagesRepository(): IReferenceMessagesRepository;
|
|
3
|
+
export declare function testRefMessagesRepository(repo: IReferenceMessagesRepository, driver: IStorageDriver): void;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testRefMessagesRepository = exports.fakeRefMessagesRepository = void 0;
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
function fakeRefMessagesRepository() {
|
|
6
|
+
return {
|
|
7
|
+
store: vitest_1.vi.fn(),
|
|
8
|
+
getByPeer: vitest_1.vi.fn(),
|
|
9
|
+
delete: vitest_1.vi.fn(),
|
|
10
|
+
deleteByPeer: vitest_1.vi.fn(),
|
|
11
|
+
deleteAll: vitest_1.vi.fn(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
exports.fakeRefMessagesRepository = fakeRefMessagesRepository;
|
|
15
|
+
function testRefMessagesRepository(repo, driver) {
|
|
16
|
+
(0, vitest_1.describe)('IReferenceMessagesRepository', () => {
|
|
17
|
+
(0, vitest_1.afterEach)(() => repo.deleteAll());
|
|
18
|
+
(0, vitest_1.it)('should be empty by default', async () => {
|
|
19
|
+
(0, vitest_1.expect)(await repo.getByPeer(1)).toEqual(null);
|
|
20
|
+
});
|
|
21
|
+
(0, vitest_1.it)('should store and retrieve reference messages', async () => {
|
|
22
|
+
await repo.store(1, 2, 3);
|
|
23
|
+
await repo.store(1, 4, 5);
|
|
24
|
+
await repo.store(2, 6, 7);
|
|
25
|
+
await driver.save?.();
|
|
26
|
+
(0, vitest_1.expect)(await repo.getByPeer(1)).deep.oneOf([
|
|
27
|
+
[2, 3],
|
|
28
|
+
[4, 5],
|
|
29
|
+
]);
|
|
30
|
+
(0, vitest_1.expect)(await repo.getByPeer(2)).toEqual([6, 7]);
|
|
31
|
+
(0, vitest_1.expect)(await repo.getByPeer(3)).toEqual(null);
|
|
32
|
+
(0, vitest_1.expect)(await repo.getByPeer(4)).toEqual(null);
|
|
33
|
+
(0, vitest_1.expect)(await repo.getByPeer(5)).toEqual(null);
|
|
34
|
+
(0, vitest_1.expect)(await repo.getByPeer(6)).toEqual(null);
|
|
35
|
+
(0, vitest_1.expect)(await repo.getByPeer(7)).toEqual(null);
|
|
36
|
+
});
|
|
37
|
+
(0, vitest_1.it)('should delete reference messages', async () => {
|
|
38
|
+
await repo.store(1, 2, 3);
|
|
39
|
+
await repo.store(1, 4, 5);
|
|
40
|
+
await repo.store(2, 6, 7);
|
|
41
|
+
await driver.save?.();
|
|
42
|
+
await repo.delete(4, [5]);
|
|
43
|
+
await driver.save?.();
|
|
44
|
+
(0, vitest_1.expect)(await repo.getByPeer(1)).toEqual([2, 3]);
|
|
45
|
+
await repo.delete(2, [2, 3, 4]);
|
|
46
|
+
await driver.save?.();
|
|
47
|
+
(0, vitest_1.expect)(await repo.getByPeer(1)).toEqual(null);
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.it)('should delete all reference messages for a peer', async () => {
|
|
50
|
+
await repo.store(1, 2, 3);
|
|
51
|
+
await repo.store(1, 4, 5);
|
|
52
|
+
await repo.store(1, 6, 7);
|
|
53
|
+
await repo.store(2, 20, 30);
|
|
54
|
+
await repo.store(2, 40, 50);
|
|
55
|
+
await repo.store(2, 60, 70);
|
|
56
|
+
await driver.save?.();
|
|
57
|
+
await repo.deleteByPeer(1);
|
|
58
|
+
await driver.save?.();
|
|
59
|
+
(0, vitest_1.expect)(await repo.getByPeer(1)).toEqual(null);
|
|
60
|
+
(0, vitest_1.expect)(await repo.getByPeer(2)).deep.oneOf([
|
|
61
|
+
[20, 30],
|
|
62
|
+
[40, 50],
|
|
63
|
+
[60, 70],
|
|
64
|
+
]);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
exports.testRefMessagesRepository = testRefMessagesRepository;
|
|
69
|
+
//# sourceMappingURL=ref-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref-messages.js","sourceRoot":"","sources":["../../../src/storage/ref-messages.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, describe, expect, it, vi } from 'vitest'\n\nimport { IReferenceMessagesRepository, IStorageDriver } from '@mtcute/core'\n\nexport function fakeRefMessagesRepository(): IReferenceMessagesRepository {\n return {\n store: vi.fn(),\n getByPeer: vi.fn(),\n delete: vi.fn(),\n deleteByPeer: vi.fn(),\n deleteAll: vi.fn(),\n }\n}\n\nexport function testRefMessagesRepository(repo: IReferenceMessagesRepository, driver: IStorageDriver) {\n describe('IReferenceMessagesRepository', () => {\n afterEach(() => repo.deleteAll())\n\n it('should be empty by default', async () => {\n expect(await repo.getByPeer(1)).toEqual(null)\n })\n\n it('should store and retrieve reference messages', async () => {\n await repo.store(1, 2, 3)\n await repo.store(1, 4, 5)\n await repo.store(2, 6, 7)\n await driver.save?.()\n\n expect(await repo.getByPeer(1)).deep.oneOf([\n [2, 3],\n [4, 5],\n ])\n expect(await repo.getByPeer(2)).toEqual([6, 7])\n expect(await repo.getByPeer(3)).toEqual(null)\n expect(await repo.getByPeer(4)).toEqual(null)\n expect(await repo.getByPeer(5)).toEqual(null)\n expect(await repo.getByPeer(6)).toEqual(null)\n expect(await repo.getByPeer(7)).toEqual(null)\n })\n\n it('should delete reference messages', async () => {\n await repo.store(1, 2, 3)\n await repo.store(1, 4, 5)\n await repo.store(2, 6, 7)\n await driver.save?.()\n\n await repo.delete(4, [5])\n await driver.save?.()\n expect(await repo.getByPeer(1)).toEqual([2, 3])\n\n await repo.delete(2, [2, 3, 4])\n await driver.save?.()\n expect(await repo.getByPeer(1)).toEqual(null)\n })\n\n it('should delete all reference messages for a peer', async () => {\n await repo.store(1, 2, 3)\n await repo.store(1, 4, 5)\n await repo.store(1, 6, 7)\n\n await repo.store(2, 20, 30)\n await repo.store(2, 40, 50)\n await repo.store(2, 60, 70)\n await driver.save?.()\n\n await repo.deleteByPeer(1)\n await driver.save?.()\n expect(await repo.getByPeer(1)).toEqual(null)\n expect(await repo.getByPeer(2)).deep.oneOf([\n [20, 30],\n [40, 50],\n [60, 70],\n ])\n })\n })\n}\n"]}
|
package/cjs/storage.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { MemoryStorage } from '@mtcute/core/storage/memory.js';
|
|
1
|
+
import { MemoryStorage } from '@mtcute/core';
|
|
3
2
|
import { ICryptoProvider } from '@mtcute/core/utils.js';
|
|
4
|
-
export declare class StubMemoryTelegramStorage extends MemoryStorage
|
|
3
|
+
export declare class StubMemoryTelegramStorage extends MemoryStorage {
|
|
5
4
|
readonly params: {
|
|
6
5
|
/**
|
|
7
6
|
* IDs of the DCs for which the storage should have auth keys,
|
|
@@ -17,10 +16,6 @@ export declare class StubMemoryTelegramStorage extends MemoryStorage implements
|
|
|
17
16
|
* @default true
|
|
18
17
|
*/
|
|
19
18
|
hasTempKeys?: boolean | number[];
|
|
20
|
-
onLoad?: () => void;
|
|
21
|
-
onSave?: () => void;
|
|
22
|
-
onDestroy?: () => void;
|
|
23
|
-
onReset?: () => void;
|
|
24
19
|
};
|
|
25
20
|
constructor(params?: {
|
|
26
21
|
/**
|
|
@@ -37,15 +32,6 @@ export declare class StubMemoryTelegramStorage extends MemoryStorage implements
|
|
|
37
32
|
* @default true
|
|
38
33
|
*/
|
|
39
34
|
hasTempKeys?: boolean | number[];
|
|
40
|
-
onLoad?: () => void;
|
|
41
|
-
onSave?: () => void;
|
|
42
|
-
onDestroy?: () => void;
|
|
43
|
-
onReset?: () => void;
|
|
44
35
|
});
|
|
45
|
-
getAuthKeyFor(dcId: number, tempIndex?: number | undefined): Uint8Array | null;
|
|
46
|
-
load(): void;
|
|
47
|
-
save(): void;
|
|
48
|
-
destroy(): void;
|
|
49
|
-
reset(withKeys?: boolean): void;
|
|
50
36
|
decryptOutgoingMessage(crypto: ICryptoProvider, data: Uint8Array, dcId: number, tempIndex?: number | undefined): Uint8Array;
|
|
51
37
|
}
|