@mtcute/core 0.1.1 → 0.1.2
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/network/auth-key.test.d.ts +1 -0
- package/cjs/network/auth-key.test.js +111 -0
- package/cjs/network/auth-key.test.js.map +1 -0
- package/cjs/network/config-manager.js +2 -1
- package/cjs/network/config-manager.js.map +1 -1
- package/cjs/network/config-manager.test.d.ts +1 -0
- package/cjs/network/config-manager.test.js +170 -0
- package/cjs/network/config-manager.test.js.map +1 -0
- package/cjs/network/network-manager.js +1 -1
- package/cjs/network/persistent-connection.test.d.ts +1 -0
- package/cjs/network/persistent-connection.test.js +157 -0
- package/cjs/network/persistent-connection.test.js.map +1 -0
- package/cjs/network/session-connection.js +3 -2
- package/cjs/network/session-connection.js.map +1 -1
- package/cjs/network/transports/intermediate.test.d.ts +1 -0
- package/cjs/network/transports/intermediate.test.js +86 -0
- package/cjs/network/transports/intermediate.test.js.map +1 -0
- package/cjs/network/transports/obfuscated.js +1 -1
- package/cjs/network/transports/obfuscated.js.map +1 -1
- package/cjs/network/transports/obfuscated.test.d.ts +1 -0
- package/cjs/network/transports/obfuscated.test.js +131 -0
- package/cjs/network/transports/obfuscated.test.js.map +1 -0
- package/cjs/network/transports/tcp.js +1 -1
- package/cjs/network/transports/tcp.js.map +1 -1
- package/cjs/network/transports/tcp.test.d.ts +1 -0
- package/cjs/network/transports/tcp.test.js +97 -0
- package/cjs/network/transports/tcp.test.js.map +1 -0
- package/cjs/network/transports/websocket.test.d.ts +1 -0
- package/cjs/network/transports/websocket.test.js +91 -0
- package/cjs/network/transports/websocket.test.js.map +1 -0
- package/cjs/storage/json.test.d.ts +1 -0
- package/cjs/storage/json.test.js +37 -0
- package/cjs/storage/json.test.js.map +1 -0
- package/cjs/storage/localstorage.test.d.ts +1 -0
- package/cjs/storage/localstorage.test.js +23 -0
- package/cjs/storage/localstorage.test.js.map +1 -0
- package/cjs/storage/memory.test.d.ts +1 -0
- package/cjs/storage/memory.test.js +47 -0
- package/cjs/storage/memory.test.js.map +1 -0
- package/cjs/utils/async-lock.test.d.ts +1 -0
- package/cjs/utils/async-lock.test.js +25 -0
- package/cjs/utils/async-lock.test.js.map +1 -0
- package/cjs/utils/bigint-utils.test.d.ts +1 -0
- package/cjs/utils/bigint-utils.test.js +150 -0
- package/cjs/utils/bigint-utils.test.js.map +1 -0
- package/cjs/utils/buffer-utils.test.d.ts +1 -0
- package/cjs/utils/buffer-utils.test.js +69 -0
- package/cjs/utils/buffer-utils.test.js.map +1 -0
- package/cjs/utils/condition-variable.test.d.ts +1 -0
- package/cjs/utils/condition-variable.test.js +27 -0
- package/cjs/utils/condition-variable.test.js.map +1 -0
- package/cjs/utils/controllable-promise.test.d.ts +1 -0
- package/cjs/utils/controllable-promise.test.js +17 -0
- package/cjs/utils/controllable-promise.test.js.map +1 -0
- package/cjs/utils/crypto/keys.test.d.ts +1 -0
- package/cjs/utils/crypto/keys.test.js +40 -0
- package/cjs/utils/crypto/keys.test.js.map +1 -0
- package/cjs/utils/crypto/miller-rabin.test.d.ts +1 -0
- package/cjs/utils/crypto/miller-rabin.test.js +60 -0
- package/cjs/utils/crypto/miller-rabin.test.js.map +1 -0
- package/cjs/utils/crypto/mtproto.test.d.ts +1 -0
- package/cjs/utils/crypto/mtproto.test.js +47 -0
- package/cjs/utils/crypto/mtproto.test.js.map +1 -0
- package/cjs/utils/crypto/node.test.d.ts +1 -0
- package/cjs/utils/crypto/node.test.js +13 -0
- package/cjs/utils/crypto/node.test.js.map +1 -0
- package/cjs/utils/crypto/password.test.d.ts +1 -0
- package/cjs/utils/crypto/password.test.js +95 -0
- package/cjs/utils/crypto/password.test.js.map +1 -0
- package/cjs/utils/crypto/utils.test.d.ts +1 -0
- package/cjs/utils/crypto/utils.test.js +49 -0
- package/cjs/utils/crypto/utils.test.js.map +1 -0
- package/cjs/utils/crypto/web.test.d.ts +1 -0
- package/cjs/utils/crypto/web.test.js +17 -0
- package/cjs/utils/crypto/web.test.js.map +1 -0
- package/cjs/utils/deque.test.d.ts +1 -0
- package/cjs/utils/deque.test.js +128 -0
- package/cjs/utils/deque.test.js.map +1 -0
- package/cjs/utils/function-utils.test.d.ts +1 -0
- package/cjs/utils/function-utils.test.js +23 -0
- package/cjs/utils/function-utils.test.js.map +1 -0
- package/cjs/utils/linked-list.test.d.ts +1 -0
- package/cjs/utils/linked-list.test.js +36 -0
- package/cjs/utils/linked-list.test.js.map +1 -0
- package/cjs/utils/links/bots.test.d.ts +1 -0
- package/cjs/utils/links/bots.test.js +152 -0
- package/cjs/utils/links/bots.test.js.map +1 -0
- package/cjs/utils/links/chat.test.d.ts +1 -0
- package/cjs/utils/links/chat.test.js +84 -0
- package/cjs/utils/links/chat.test.js.map +1 -0
- package/cjs/utils/links/misc.test.d.ts +1 -0
- package/cjs/utils/links/misc.test.js +153 -0
- package/cjs/utils/links/misc.test.js.map +1 -0
- package/cjs/utils/links/proxy.test.d.ts +1 -0
- package/cjs/utils/links/proxy.test.js +74 -0
- package/cjs/utils/links/proxy.test.js.map +1 -0
- package/cjs/utils/links/user.test.d.ts +1 -0
- package/cjs/utils/links/user.test.js +63 -0
- package/cjs/utils/links/user.test.js.map +1 -0
- package/cjs/utils/logger.test.d.ts +1 -0
- package/cjs/utils/logger.test.js +125 -0
- package/cjs/utils/logger.test.js.map +1 -0
- package/cjs/utils/long-utils.test.d.ts +1 -0
- package/cjs/utils/long-utils.test.js +158 -0
- package/cjs/utils/long-utils.test.js.map +1 -0
- package/cjs/utils/lru-map.test.d.ts +1 -0
- package/cjs/utils/lru-map.test.js +96 -0
- package/cjs/utils/lru-map.test.js.map +1 -0
- package/cjs/utils/lru-set.test.d.ts +1 -0
- package/cjs/utils/lru-set.test.js +77 -0
- package/cjs/utils/lru-set.test.js.map +1 -0
- package/cjs/utils/peer-utils.test.d.ts +1 -0
- package/cjs/utils/peer-utils.test.js +122 -0
- package/cjs/utils/peer-utils.test.js.map +1 -0
- package/cjs/utils/sorted-array.test.d.ts +1 -0
- package/cjs/utils/sorted-array.test.js +66 -0
- package/cjs/utils/sorted-array.test.js.map +1 -0
- package/cjs/utils/string-session.test.d.ts +1 -0
- package/cjs/utils/string-session.test.js +106 -0
- package/cjs/utils/string-session.test.js.map +1 -0
- package/cjs/utils/tl-json.test.d.ts +1 -0
- package/cjs/utils/tl-json.test.js +83 -0
- package/cjs/utils/tl-json.test.js.map +1 -0
- package/cjs/utils/type-assertions.test.d.ts +1 -0
- package/cjs/utils/type-assertions.test.js +67 -0
- package/cjs/utils/type-assertions.test.js.map +1 -0
- package/esm/network/auth-key.test.d.ts +1 -0
- package/esm/network/auth-key.test.js +106 -0
- package/esm/network/auth-key.test.js.map +1 -0
- package/esm/network/config-manager.js +2 -1
- package/esm/network/config-manager.js.map +1 -1
- package/esm/network/config-manager.test.d.ts +1 -0
- package/esm/network/config-manager.test.js +168 -0
- package/esm/network/config-manager.test.js.map +1 -0
- package/esm/network/network-manager.js +1 -1
- package/esm/network/persistent-connection.test.d.ts +1 -0
- package/esm/network/persistent-connection.test.js +155 -0
- package/esm/network/persistent-connection.test.js.map +1 -0
- package/esm/network/session-connection.js +3 -2
- package/esm/network/session-connection.js.map +1 -1
- package/esm/network/transports/intermediate.test.d.ts +1 -0
- package/esm/network/transports/intermediate.test.js +84 -0
- package/esm/network/transports/intermediate.test.js.map +1 -0
- package/esm/network/transports/obfuscated.js +1 -1
- package/esm/network/transports/obfuscated.js.map +1 -1
- package/esm/network/transports/obfuscated.test.d.ts +1 -0
- package/esm/network/transports/obfuscated.test.js +129 -0
- package/esm/network/transports/obfuscated.test.js.map +1 -0
- package/esm/network/transports/tcp.js +1 -1
- package/esm/network/transports/tcp.js.map +1 -1
- package/esm/network/transports/tcp.test.d.ts +1 -0
- package/esm/network/transports/tcp.test.js +95 -0
- package/esm/network/transports/tcp.test.js.map +1 -0
- package/esm/network/transports/websocket.test.d.ts +1 -0
- package/esm/network/transports/websocket.test.js +89 -0
- package/esm/network/transports/websocket.test.js.map +1 -0
- package/esm/storage/json.test.d.ts +1 -0
- package/esm/storage/json.test.js +35 -0
- package/esm/storage/json.test.js.map +1 -0
- package/esm/storage/localstorage.test.d.ts +1 -0
- package/esm/storage/localstorage.test.js +21 -0
- package/esm/storage/localstorage.test.js.map +1 -0
- package/esm/storage/memory.test.d.ts +1 -0
- package/esm/storage/memory.test.js +45 -0
- package/esm/storage/memory.test.js.map +1 -0
- package/esm/utils/async-lock.test.d.ts +1 -0
- package/esm/utils/async-lock.test.js +23 -0
- package/esm/utils/async-lock.test.js.map +1 -0
- package/esm/utils/bigint-utils.test.d.ts +1 -0
- package/esm/utils/bigint-utils.test.js +148 -0
- package/esm/utils/bigint-utils.test.js.map +1 -0
- package/esm/utils/buffer-utils.test.d.ts +1 -0
- package/esm/utils/buffer-utils.test.js +67 -0
- package/esm/utils/buffer-utils.test.js.map +1 -0
- package/esm/utils/condition-variable.test.d.ts +1 -0
- package/esm/utils/condition-variable.test.js +25 -0
- package/esm/utils/condition-variable.test.js.map +1 -0
- package/esm/utils/controllable-promise.test.d.ts +1 -0
- package/esm/utils/controllable-promise.test.js +15 -0
- package/esm/utils/controllable-promise.test.js.map +1 -0
- package/esm/utils/crypto/keys.test.d.ts +1 -0
- package/esm/utils/crypto/keys.test.js +38 -0
- package/esm/utils/crypto/keys.test.js.map +1 -0
- package/esm/utils/crypto/miller-rabin.test.d.ts +1 -0
- package/esm/utils/crypto/miller-rabin.test.js +58 -0
- package/esm/utils/crypto/miller-rabin.test.js.map +1 -0
- package/esm/utils/crypto/mtproto.test.d.ts +1 -0
- package/esm/utils/crypto/mtproto.test.js +45 -0
- package/esm/utils/crypto/mtproto.test.js.map +1 -0
- package/esm/utils/crypto/node.test.d.ts +1 -0
- package/esm/utils/crypto/node.test.js +11 -0
- package/esm/utils/crypto/node.test.js.map +1 -0
- package/esm/utils/crypto/password.test.d.ts +1 -0
- package/esm/utils/crypto/password.test.js +90 -0
- package/esm/utils/crypto/password.test.js.map +1 -0
- package/esm/utils/crypto/utils.test.d.ts +1 -0
- package/esm/utils/crypto/utils.test.js +47 -0
- package/esm/utils/crypto/utils.test.js.map +1 -0
- package/esm/utils/crypto/web.test.d.ts +1 -0
- package/esm/utils/crypto/web.test.js +15 -0
- package/esm/utils/crypto/web.test.js.map +1 -0
- package/esm/utils/deque.test.d.ts +1 -0
- package/esm/utils/deque.test.js +126 -0
- package/esm/utils/deque.test.js.map +1 -0
- package/esm/utils/function-utils.test.d.ts +1 -0
- package/esm/utils/function-utils.test.js +21 -0
- package/esm/utils/function-utils.test.js.map +1 -0
- package/esm/utils/linked-list.test.d.ts +1 -0
- package/esm/utils/linked-list.test.js +34 -0
- package/esm/utils/linked-list.test.js.map +1 -0
- package/esm/utils/links/bots.test.d.ts +1 -0
- package/esm/utils/links/bots.test.js +150 -0
- package/esm/utils/links/bots.test.js.map +1 -0
- package/esm/utils/links/chat.test.d.ts +1 -0
- package/esm/utils/links/chat.test.js +82 -0
- package/esm/utils/links/chat.test.js.map +1 -0
- package/esm/utils/links/misc.test.d.ts +1 -0
- package/esm/utils/links/misc.test.js +151 -0
- package/esm/utils/links/misc.test.js.map +1 -0
- package/esm/utils/links/proxy.test.d.ts +1 -0
- package/esm/utils/links/proxy.test.js +72 -0
- package/esm/utils/links/proxy.test.js.map +1 -0
- package/esm/utils/links/user.test.d.ts +1 -0
- package/esm/utils/links/user.test.js +61 -0
- package/esm/utils/links/user.test.js.map +1 -0
- package/esm/utils/logger.test.d.ts +1 -0
- package/esm/utils/logger.test.js +120 -0
- package/esm/utils/logger.test.js.map +1 -0
- package/esm/utils/long-utils.test.d.ts +1 -0
- package/esm/utils/long-utils.test.js +153 -0
- package/esm/utils/long-utils.test.js.map +1 -0
- package/esm/utils/lru-map.test.d.ts +1 -0
- package/esm/utils/lru-map.test.js +94 -0
- package/esm/utils/lru-map.test.js.map +1 -0
- package/esm/utils/lru-set.test.d.ts +1 -0
- package/esm/utils/lru-set.test.js +72 -0
- package/esm/utils/lru-set.test.js.map +1 -0
- package/esm/utils/peer-utils.test.d.ts +1 -0
- package/esm/utils/peer-utils.test.js +117 -0
- package/esm/utils/peer-utils.test.js.map +1 -0
- package/esm/utils/sorted-array.test.d.ts +1 -0
- package/esm/utils/sorted-array.test.js +64 -0
- package/esm/utils/sorted-array.test.js.map +1 -0
- package/esm/utils/string-session.test.d.ts +1 -0
- package/esm/utils/string-session.test.js +104 -0
- package/esm/utils/string-session.test.js.map +1 -0
- package/esm/utils/tl-json.test.d.ts +1 -0
- package/esm/utils/tl-json.test.js +81 -0
- package/esm/utils/tl-json.test.js.map +1 -0
- package/esm/utils/type-assertions.test.d.ts +1 -0
- package/esm/utils/type-assertions.test.js +65 -0
- package/esm/utils/type-assertions.test.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { createStub, defaultTestCryptoProvider, StubTelegramTransport } from '@mtcute/test';
|
|
3
|
+
import { LogManager } from '../utils/index.js';
|
|
4
|
+
import { PersistentConnection } from './persistent-connection.js';
|
|
5
|
+
import { defaultReconnectionStrategy } from './reconnection.js';
|
|
6
|
+
class FakePersistentConnection extends PersistentConnection {
|
|
7
|
+
constructor(params) {
|
|
8
|
+
const log = new LogManager();
|
|
9
|
+
log.level = 0;
|
|
10
|
+
super(params, log);
|
|
11
|
+
}
|
|
12
|
+
onConnected() {
|
|
13
|
+
this.onConnectionUsable();
|
|
14
|
+
}
|
|
15
|
+
onError() { }
|
|
16
|
+
onMessage() { }
|
|
17
|
+
}
|
|
18
|
+
describe('PersistentConnection', () => {
|
|
19
|
+
beforeEach(() => void vi.useFakeTimers());
|
|
20
|
+
afterEach(() => void vi.useRealTimers());
|
|
21
|
+
const create = async (params) => {
|
|
22
|
+
return new FakePersistentConnection({
|
|
23
|
+
crypto: await defaultTestCryptoProvider(),
|
|
24
|
+
transportFactory: () => new StubTelegramTransport({}),
|
|
25
|
+
dc: createStub('dcOption'),
|
|
26
|
+
testMode: false,
|
|
27
|
+
reconnectionStrategy: defaultReconnectionStrategy,
|
|
28
|
+
...params,
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
it('should set up listeners on transport', async () => {
|
|
32
|
+
const transportFactory = vi.fn().mockImplementation(() => {
|
|
33
|
+
const transport = new StubTelegramTransport({});
|
|
34
|
+
vi.spyOn(transport, 'on');
|
|
35
|
+
return transport;
|
|
36
|
+
});
|
|
37
|
+
await create({ transportFactory });
|
|
38
|
+
const transport = transportFactory.mock.results[0].value;
|
|
39
|
+
expect(transport.on).toHaveBeenCalledWith('ready', expect.any(Function));
|
|
40
|
+
expect(transport.on).toHaveBeenCalledWith('message', expect.any(Function));
|
|
41
|
+
expect(transport.on).toHaveBeenCalledWith('error', expect.any(Function));
|
|
42
|
+
expect(transport.on).toHaveBeenCalledWith('close', expect.any(Function));
|
|
43
|
+
});
|
|
44
|
+
it('should properly reset old transport', async () => {
|
|
45
|
+
const transportFactory = vi.fn().mockImplementation(() => {
|
|
46
|
+
const transport = new StubTelegramTransport({});
|
|
47
|
+
vi.spyOn(transport, 'close');
|
|
48
|
+
return transport;
|
|
49
|
+
});
|
|
50
|
+
const pc = await create({ transportFactory });
|
|
51
|
+
const transport = transportFactory.mock.results[0].value;
|
|
52
|
+
pc.changeTransport(transportFactory);
|
|
53
|
+
expect(transport.close).toHaveBeenCalledOnce();
|
|
54
|
+
});
|
|
55
|
+
it('should buffer unsent packages', async () => {
|
|
56
|
+
const transportFactory = vi.fn().mockImplementation(() => {
|
|
57
|
+
const transport = new StubTelegramTransport({});
|
|
58
|
+
const transportConnect = transport.connect;
|
|
59
|
+
vi.spyOn(transport, 'connect').mockImplementation((dc, test) => {
|
|
60
|
+
setTimeout(() => {
|
|
61
|
+
transportConnect.call(transport, dc, test);
|
|
62
|
+
}, 100);
|
|
63
|
+
});
|
|
64
|
+
vi.spyOn(transport, 'send');
|
|
65
|
+
return transport;
|
|
66
|
+
});
|
|
67
|
+
const pc = await create({ transportFactory });
|
|
68
|
+
const transport = transportFactory.mock.results[0].value;
|
|
69
|
+
const data1 = new Uint8Array([1, 2, 3]);
|
|
70
|
+
const data2 = new Uint8Array([4, 5, 6]);
|
|
71
|
+
await pc.send(data1);
|
|
72
|
+
await pc.send(data2);
|
|
73
|
+
expect(transport.send).toHaveBeenCalledTimes(0);
|
|
74
|
+
await vi.advanceTimersByTimeAsync(150);
|
|
75
|
+
expect(transport.send).toHaveBeenCalledTimes(2);
|
|
76
|
+
expect(transport.send).toHaveBeenCalledWith(data1);
|
|
77
|
+
expect(transport.send).toHaveBeenCalledWith(data2);
|
|
78
|
+
});
|
|
79
|
+
it('should reconnect on close', async () => {
|
|
80
|
+
const reconnectionStrategy = vi.fn().mockImplementation(() => 1000);
|
|
81
|
+
const transportFactory = vi.fn().mockImplementation(() => new StubTelegramTransport({}));
|
|
82
|
+
const pc = await create({
|
|
83
|
+
reconnectionStrategy,
|
|
84
|
+
transportFactory,
|
|
85
|
+
});
|
|
86
|
+
const transport = transportFactory.mock.results[0].value;
|
|
87
|
+
pc.connect();
|
|
88
|
+
await vi.waitFor(() => expect(pc.isConnected).toBe(true));
|
|
89
|
+
transport.close();
|
|
90
|
+
expect(reconnectionStrategy).toHaveBeenCalledOnce();
|
|
91
|
+
expect(pc.isConnected).toBe(false);
|
|
92
|
+
await vi.advanceTimersByTimeAsync(1000);
|
|
93
|
+
expect(pc.isConnected).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
describe('inactivity timeout', () => {
|
|
96
|
+
it('should disconnect on inactivity (passed in constructor)', async () => {
|
|
97
|
+
const pc = await create({
|
|
98
|
+
inactivityTimeout: 1000,
|
|
99
|
+
});
|
|
100
|
+
pc.connect();
|
|
101
|
+
await vi.waitFor(() => expect(pc.isConnected).toBe(true));
|
|
102
|
+
vi.advanceTimersByTime(1000);
|
|
103
|
+
await vi.waitFor(() => expect(pc.isConnected).toBe(false));
|
|
104
|
+
});
|
|
105
|
+
it('should disconnect on inactivity (set up with setInactivityTimeout)', async () => {
|
|
106
|
+
const pc = await create();
|
|
107
|
+
pc.connect();
|
|
108
|
+
pc.setInactivityTimeout(1000);
|
|
109
|
+
await vi.waitFor(() => expect(pc.isConnected).toBe(true));
|
|
110
|
+
vi.advanceTimersByTime(1000);
|
|
111
|
+
await vi.waitFor(() => expect(pc.isConnected).toBe(false));
|
|
112
|
+
});
|
|
113
|
+
it('should not disconnect on inactivity if disabled', async () => {
|
|
114
|
+
const pc = await create({
|
|
115
|
+
inactivityTimeout: 1000,
|
|
116
|
+
});
|
|
117
|
+
pc.connect();
|
|
118
|
+
pc.setInactivityTimeout(undefined);
|
|
119
|
+
await vi.waitFor(() => expect(pc.isConnected).toBe(true));
|
|
120
|
+
vi.advanceTimersByTime(1000);
|
|
121
|
+
await vi.waitFor(() => expect(pc.isConnected).toBe(true));
|
|
122
|
+
});
|
|
123
|
+
it('should reconnect after inactivity before sending', async () => {
|
|
124
|
+
const transportFactory = vi.fn().mockImplementation(() => {
|
|
125
|
+
const transport = new StubTelegramTransport({});
|
|
126
|
+
vi.spyOn(transport, 'connect');
|
|
127
|
+
vi.spyOn(transport, 'send');
|
|
128
|
+
return transport;
|
|
129
|
+
});
|
|
130
|
+
const pc = await create({
|
|
131
|
+
inactivityTimeout: 1000,
|
|
132
|
+
transportFactory,
|
|
133
|
+
});
|
|
134
|
+
const transport = transportFactory.mock.results[0].value;
|
|
135
|
+
pc.connect();
|
|
136
|
+
vi.advanceTimersByTime(1000);
|
|
137
|
+
await vi.waitFor(() => expect(pc.isConnected).toBe(false));
|
|
138
|
+
vi.mocked(transport.connect).mockClear();
|
|
139
|
+
await pc.send(new Uint8Array([1, 2, 3]));
|
|
140
|
+
expect(transport.connect).toHaveBeenCalledOnce();
|
|
141
|
+
expect(transport.send).toHaveBeenCalledOnce();
|
|
142
|
+
});
|
|
143
|
+
it('should propagate errors', async () => {
|
|
144
|
+
const transportFactory = vi.fn().mockImplementation(() => new StubTelegramTransport({}));
|
|
145
|
+
const pc = await create({ transportFactory });
|
|
146
|
+
const transport = transportFactory.mock.results[0].value;
|
|
147
|
+
pc.connect();
|
|
148
|
+
await vi.waitFor(() => expect(pc.isConnected).toBe(true));
|
|
149
|
+
const onErrorSpy = vi.spyOn(pc, 'onError');
|
|
150
|
+
transport.emit('error', new Error('test error'));
|
|
151
|
+
expect(onErrorSpy).toHaveBeenCalledOnce();
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=persistent-connection.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-connection.test.js","sourceRoot":"","sources":["../../../src/network/persistent-connection.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport { createStub, defaultTestCryptoProvider, StubTelegramTransport } from '@mtcute/test'\n\nimport { LogManager } from '../utils/index.js'\nimport { PersistentConnection, PersistentConnectionParams } from './persistent-connection.js'\nimport { defaultReconnectionStrategy } from './reconnection.js'\n\nclass FakePersistentConnection extends PersistentConnection {\n constructor(params: PersistentConnectionParams) {\n const log = new LogManager()\n log.level = 0\n super(params, log)\n }\n\n onConnected() {\n this.onConnectionUsable()\n }\n onError() {}\n onMessage() {}\n}\n\ndescribe('PersistentConnection', () => {\n beforeEach(() => void vi.useFakeTimers())\n afterEach(() => void vi.useRealTimers())\n\n const create = async (params?: Partial<PersistentConnectionParams>) => {\n return new FakePersistentConnection({\n crypto: await defaultTestCryptoProvider(),\n transportFactory: () => new StubTelegramTransport({}),\n dc: createStub('dcOption'),\n testMode: false,\n reconnectionStrategy: defaultReconnectionStrategy,\n ...params,\n })\n }\n\n it('should set up listeners on transport', async () => {\n const transportFactory = vi.fn().mockImplementation(() => {\n const transport = new StubTelegramTransport({})\n\n vi.spyOn(transport, 'on')\n\n return transport\n })\n await create({ transportFactory })\n\n const transport = transportFactory.mock.results[0].value as StubTelegramTransport\n\n expect(transport.on).toHaveBeenCalledWith('ready', expect.any(Function))\n expect(transport.on).toHaveBeenCalledWith('message', expect.any(Function))\n expect(transport.on).toHaveBeenCalledWith('error', expect.any(Function))\n expect(transport.on).toHaveBeenCalledWith('close', expect.any(Function))\n })\n\n it('should properly reset old transport', async () => {\n const transportFactory = vi.fn().mockImplementation(() => {\n const transport = new StubTelegramTransport({})\n\n vi.spyOn(transport, 'close')\n\n return transport\n })\n const pc = await create({ transportFactory })\n\n const transport = transportFactory.mock.results[0].value as StubTelegramTransport\n\n pc.changeTransport(transportFactory)\n\n expect(transport.close).toHaveBeenCalledOnce()\n })\n\n it('should buffer unsent packages', async () => {\n const transportFactory = vi.fn().mockImplementation(() => {\n const transport = new StubTelegramTransport({})\n\n const transportConnect = transport.connect\n vi.spyOn(transport, 'connect').mockImplementation((dc, test) => {\n setTimeout(() => {\n transportConnect.call(transport, dc, test)\n }, 100)\n })\n vi.spyOn(transport, 'send')\n\n return transport\n })\n const pc = await create({ transportFactory })\n\n const transport = transportFactory.mock.results[0].value as StubTelegramTransport\n\n const data1 = new Uint8Array([1, 2, 3])\n const data2 = new Uint8Array([4, 5, 6])\n\n await pc.send(data1)\n await pc.send(data2)\n\n expect(transport.send).toHaveBeenCalledTimes(0)\n\n await vi.advanceTimersByTimeAsync(150)\n\n expect(transport.send).toHaveBeenCalledTimes(2)\n expect(transport.send).toHaveBeenCalledWith(data1)\n expect(transport.send).toHaveBeenCalledWith(data2)\n })\n\n it('should reconnect on close', async () => {\n const reconnectionStrategy = vi.fn().mockImplementation(() => 1000)\n const transportFactory = vi.fn().mockImplementation(() => new StubTelegramTransport({}))\n\n const pc = await create({\n reconnectionStrategy,\n transportFactory,\n })\n\n const transport = transportFactory.mock.results[0].value as StubTelegramTransport\n\n pc.connect()\n\n await vi.waitFor(() => expect(pc.isConnected).toBe(true))\n\n transport.close()\n\n expect(reconnectionStrategy).toHaveBeenCalledOnce()\n expect(pc.isConnected).toBe(false)\n\n await vi.advanceTimersByTimeAsync(1000)\n\n expect(pc.isConnected).toBe(true)\n })\n\n describe('inactivity timeout', () => {\n it('should disconnect on inactivity (passed in constructor)', async () => {\n const pc = await create({\n inactivityTimeout: 1000,\n })\n\n pc.connect()\n\n await vi.waitFor(() => expect(pc.isConnected).toBe(true))\n\n vi.advanceTimersByTime(1000)\n\n await vi.waitFor(() => expect(pc.isConnected).toBe(false))\n })\n\n it('should disconnect on inactivity (set up with setInactivityTimeout)', async () => {\n const pc = await create()\n\n pc.connect()\n pc.setInactivityTimeout(1000)\n\n await vi.waitFor(() => expect(pc.isConnected).toBe(true))\n\n vi.advanceTimersByTime(1000)\n\n await vi.waitFor(() => expect(pc.isConnected).toBe(false))\n })\n\n it('should not disconnect on inactivity if disabled', async () => {\n const pc = await create({\n inactivityTimeout: 1000,\n })\n\n pc.connect()\n pc.setInactivityTimeout(undefined)\n\n await vi.waitFor(() => expect(pc.isConnected).toBe(true))\n\n vi.advanceTimersByTime(1000)\n\n await vi.waitFor(() => expect(pc.isConnected).toBe(true))\n })\n\n it('should reconnect after inactivity before sending', async () => {\n const transportFactory = vi.fn().mockImplementation(() => {\n const transport = new StubTelegramTransport({})\n\n vi.spyOn(transport, 'connect')\n vi.spyOn(transport, 'send')\n\n return transport\n })\n\n const pc = await create({\n inactivityTimeout: 1000,\n transportFactory,\n })\n const transport = transportFactory.mock.results[0].value as StubTelegramTransport\n\n pc.connect()\n\n vi.advanceTimersByTime(1000)\n\n await vi.waitFor(() => expect(pc.isConnected).toBe(false))\n\n vi.mocked(transport.connect).mockClear()\n\n await pc.send(new Uint8Array([1, 2, 3]))\n\n expect(transport.connect).toHaveBeenCalledOnce()\n expect(transport.send).toHaveBeenCalledOnce()\n })\n\n it('should propagate errors', async () => {\n const transportFactory = vi.fn().mockImplementation(() => new StubTelegramTransport({}))\n\n const pc = await create({ transportFactory })\n const transport = transportFactory.mock.results[0].value as StubTelegramTransport\n\n pc.connect()\n\n await vi.waitFor(() => expect(pc.isConnected).toBe(true))\n\n const onErrorSpy = vi.spyOn(pc, 'onError')\n\n transport.emit('error', new Error('test error'))\n\n expect(onErrorSpy).toHaveBeenCalledOnce()\n })\n })\n})\n"]}
|
|
@@ -1353,7 +1353,6 @@ export class SessionConnection extends PersistentConnection {
|
|
|
1353
1353
|
});
|
|
1354
1354
|
}
|
|
1355
1355
|
const result = writer.result();
|
|
1356
|
-
// probably the easiest way lol
|
|
1357
1356
|
this.log.debug('sending %d messages: size = %db, acks = %d (msg_id = %s), ping = %s (msg_id = %s), state_req = %s (msg_id = %s), resend = %s (msg_id = %s), cancels = %s (msg_id = %s), rpc = %s, container = %s, root msg_id = %l', messageCount, packetSize, ackMsgIds?.length || 'false', ackMsgIds?.map((it) => it.toString()), Boolean(pingRequest), pingMsgId, getStateMsgIds?.map((it) => it.toString()) || 'false', getStateMsgId, resendMsgIds?.map((it) => it.toString()) || 'false', cancelRpcs, cancelRpcs?.map((it) => it.toString()) || 'false', resendMsgId, rpcToSend.map((it) => it.method), useContainer, rootMsgId);
|
|
1358
1357
|
const enc = this._session.encryptMessage(result);
|
|
1359
1358
|
this.send(enc).catch((err) => {
|
|
@@ -1362,7 +1361,9 @@ export class SessionConnection extends PersistentConnection {
|
|
|
1362
1361
|
if (ackMsgIds) {
|
|
1363
1362
|
this._session.queuedAcks.splice(0, 0, ...ackMsgIds);
|
|
1364
1363
|
}
|
|
1365
|
-
|
|
1364
|
+
if (rootMsgId) {
|
|
1365
|
+
this._onMessageFailed(rootMsgId, 'unknown error');
|
|
1366
|
+
}
|
|
1366
1367
|
});
|
|
1367
1368
|
}
|
|
1368
1369
|
}
|