@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.
Files changed (253) hide show
  1. package/cjs/network/auth-key.test.d.ts +1 -0
  2. package/cjs/network/auth-key.test.js +111 -0
  3. package/cjs/network/auth-key.test.js.map +1 -0
  4. package/cjs/network/config-manager.js +2 -1
  5. package/cjs/network/config-manager.js.map +1 -1
  6. package/cjs/network/config-manager.test.d.ts +1 -0
  7. package/cjs/network/config-manager.test.js +170 -0
  8. package/cjs/network/config-manager.test.js.map +1 -0
  9. package/cjs/network/network-manager.js +1 -1
  10. package/cjs/network/persistent-connection.test.d.ts +1 -0
  11. package/cjs/network/persistent-connection.test.js +157 -0
  12. package/cjs/network/persistent-connection.test.js.map +1 -0
  13. package/cjs/network/session-connection.js +3 -2
  14. package/cjs/network/session-connection.js.map +1 -1
  15. package/cjs/network/transports/intermediate.test.d.ts +1 -0
  16. package/cjs/network/transports/intermediate.test.js +86 -0
  17. package/cjs/network/transports/intermediate.test.js.map +1 -0
  18. package/cjs/network/transports/obfuscated.js +1 -1
  19. package/cjs/network/transports/obfuscated.js.map +1 -1
  20. package/cjs/network/transports/obfuscated.test.d.ts +1 -0
  21. package/cjs/network/transports/obfuscated.test.js +131 -0
  22. package/cjs/network/transports/obfuscated.test.js.map +1 -0
  23. package/cjs/network/transports/tcp.js +1 -1
  24. package/cjs/network/transports/tcp.js.map +1 -1
  25. package/cjs/network/transports/tcp.test.d.ts +1 -0
  26. package/cjs/network/transports/tcp.test.js +97 -0
  27. package/cjs/network/transports/tcp.test.js.map +1 -0
  28. package/cjs/network/transports/websocket.test.d.ts +1 -0
  29. package/cjs/network/transports/websocket.test.js +91 -0
  30. package/cjs/network/transports/websocket.test.js.map +1 -0
  31. package/cjs/storage/json.test.d.ts +1 -0
  32. package/cjs/storage/json.test.js +37 -0
  33. package/cjs/storage/json.test.js.map +1 -0
  34. package/cjs/storage/localstorage.test.d.ts +1 -0
  35. package/cjs/storage/localstorage.test.js +23 -0
  36. package/cjs/storage/localstorage.test.js.map +1 -0
  37. package/cjs/storage/memory.test.d.ts +1 -0
  38. package/cjs/storage/memory.test.js +47 -0
  39. package/cjs/storage/memory.test.js.map +1 -0
  40. package/cjs/utils/async-lock.test.d.ts +1 -0
  41. package/cjs/utils/async-lock.test.js +25 -0
  42. package/cjs/utils/async-lock.test.js.map +1 -0
  43. package/cjs/utils/bigint-utils.test.d.ts +1 -0
  44. package/cjs/utils/bigint-utils.test.js +150 -0
  45. package/cjs/utils/bigint-utils.test.js.map +1 -0
  46. package/cjs/utils/buffer-utils.test.d.ts +1 -0
  47. package/cjs/utils/buffer-utils.test.js +69 -0
  48. package/cjs/utils/buffer-utils.test.js.map +1 -0
  49. package/cjs/utils/condition-variable.test.d.ts +1 -0
  50. package/cjs/utils/condition-variable.test.js +27 -0
  51. package/cjs/utils/condition-variable.test.js.map +1 -0
  52. package/cjs/utils/controllable-promise.test.d.ts +1 -0
  53. package/cjs/utils/controllable-promise.test.js +17 -0
  54. package/cjs/utils/controllable-promise.test.js.map +1 -0
  55. package/cjs/utils/crypto/keys.test.d.ts +1 -0
  56. package/cjs/utils/crypto/keys.test.js +40 -0
  57. package/cjs/utils/crypto/keys.test.js.map +1 -0
  58. package/cjs/utils/crypto/miller-rabin.test.d.ts +1 -0
  59. package/cjs/utils/crypto/miller-rabin.test.js +60 -0
  60. package/cjs/utils/crypto/miller-rabin.test.js.map +1 -0
  61. package/cjs/utils/crypto/mtproto.test.d.ts +1 -0
  62. package/cjs/utils/crypto/mtproto.test.js +47 -0
  63. package/cjs/utils/crypto/mtproto.test.js.map +1 -0
  64. package/cjs/utils/crypto/node.test.d.ts +1 -0
  65. package/cjs/utils/crypto/node.test.js +13 -0
  66. package/cjs/utils/crypto/node.test.js.map +1 -0
  67. package/cjs/utils/crypto/password.test.d.ts +1 -0
  68. package/cjs/utils/crypto/password.test.js +95 -0
  69. package/cjs/utils/crypto/password.test.js.map +1 -0
  70. package/cjs/utils/crypto/utils.test.d.ts +1 -0
  71. package/cjs/utils/crypto/utils.test.js +49 -0
  72. package/cjs/utils/crypto/utils.test.js.map +1 -0
  73. package/cjs/utils/crypto/web.test.d.ts +1 -0
  74. package/cjs/utils/crypto/web.test.js +17 -0
  75. package/cjs/utils/crypto/web.test.js.map +1 -0
  76. package/cjs/utils/deque.test.d.ts +1 -0
  77. package/cjs/utils/deque.test.js +128 -0
  78. package/cjs/utils/deque.test.js.map +1 -0
  79. package/cjs/utils/function-utils.test.d.ts +1 -0
  80. package/cjs/utils/function-utils.test.js +23 -0
  81. package/cjs/utils/function-utils.test.js.map +1 -0
  82. package/cjs/utils/linked-list.test.d.ts +1 -0
  83. package/cjs/utils/linked-list.test.js +36 -0
  84. package/cjs/utils/linked-list.test.js.map +1 -0
  85. package/cjs/utils/links/bots.test.d.ts +1 -0
  86. package/cjs/utils/links/bots.test.js +152 -0
  87. package/cjs/utils/links/bots.test.js.map +1 -0
  88. package/cjs/utils/links/chat.test.d.ts +1 -0
  89. package/cjs/utils/links/chat.test.js +84 -0
  90. package/cjs/utils/links/chat.test.js.map +1 -0
  91. package/cjs/utils/links/misc.test.d.ts +1 -0
  92. package/cjs/utils/links/misc.test.js +153 -0
  93. package/cjs/utils/links/misc.test.js.map +1 -0
  94. package/cjs/utils/links/proxy.test.d.ts +1 -0
  95. package/cjs/utils/links/proxy.test.js +74 -0
  96. package/cjs/utils/links/proxy.test.js.map +1 -0
  97. package/cjs/utils/links/user.test.d.ts +1 -0
  98. package/cjs/utils/links/user.test.js +63 -0
  99. package/cjs/utils/links/user.test.js.map +1 -0
  100. package/cjs/utils/logger.test.d.ts +1 -0
  101. package/cjs/utils/logger.test.js +125 -0
  102. package/cjs/utils/logger.test.js.map +1 -0
  103. package/cjs/utils/long-utils.test.d.ts +1 -0
  104. package/cjs/utils/long-utils.test.js +158 -0
  105. package/cjs/utils/long-utils.test.js.map +1 -0
  106. package/cjs/utils/lru-map.test.d.ts +1 -0
  107. package/cjs/utils/lru-map.test.js +96 -0
  108. package/cjs/utils/lru-map.test.js.map +1 -0
  109. package/cjs/utils/lru-set.test.d.ts +1 -0
  110. package/cjs/utils/lru-set.test.js +77 -0
  111. package/cjs/utils/lru-set.test.js.map +1 -0
  112. package/cjs/utils/peer-utils.test.d.ts +1 -0
  113. package/cjs/utils/peer-utils.test.js +122 -0
  114. package/cjs/utils/peer-utils.test.js.map +1 -0
  115. package/cjs/utils/sorted-array.test.d.ts +1 -0
  116. package/cjs/utils/sorted-array.test.js +66 -0
  117. package/cjs/utils/sorted-array.test.js.map +1 -0
  118. package/cjs/utils/string-session.test.d.ts +1 -0
  119. package/cjs/utils/string-session.test.js +106 -0
  120. package/cjs/utils/string-session.test.js.map +1 -0
  121. package/cjs/utils/tl-json.test.d.ts +1 -0
  122. package/cjs/utils/tl-json.test.js +83 -0
  123. package/cjs/utils/tl-json.test.js.map +1 -0
  124. package/cjs/utils/type-assertions.test.d.ts +1 -0
  125. package/cjs/utils/type-assertions.test.js +67 -0
  126. package/cjs/utils/type-assertions.test.js.map +1 -0
  127. package/esm/network/auth-key.test.d.ts +1 -0
  128. package/esm/network/auth-key.test.js +106 -0
  129. package/esm/network/auth-key.test.js.map +1 -0
  130. package/esm/network/config-manager.js +2 -1
  131. package/esm/network/config-manager.js.map +1 -1
  132. package/esm/network/config-manager.test.d.ts +1 -0
  133. package/esm/network/config-manager.test.js +168 -0
  134. package/esm/network/config-manager.test.js.map +1 -0
  135. package/esm/network/network-manager.js +1 -1
  136. package/esm/network/persistent-connection.test.d.ts +1 -0
  137. package/esm/network/persistent-connection.test.js +155 -0
  138. package/esm/network/persistent-connection.test.js.map +1 -0
  139. package/esm/network/session-connection.js +3 -2
  140. package/esm/network/session-connection.js.map +1 -1
  141. package/esm/network/transports/intermediate.test.d.ts +1 -0
  142. package/esm/network/transports/intermediate.test.js +84 -0
  143. package/esm/network/transports/intermediate.test.js.map +1 -0
  144. package/esm/network/transports/obfuscated.js +1 -1
  145. package/esm/network/transports/obfuscated.js.map +1 -1
  146. package/esm/network/transports/obfuscated.test.d.ts +1 -0
  147. package/esm/network/transports/obfuscated.test.js +129 -0
  148. package/esm/network/transports/obfuscated.test.js.map +1 -0
  149. package/esm/network/transports/tcp.js +1 -1
  150. package/esm/network/transports/tcp.js.map +1 -1
  151. package/esm/network/transports/tcp.test.d.ts +1 -0
  152. package/esm/network/transports/tcp.test.js +95 -0
  153. package/esm/network/transports/tcp.test.js.map +1 -0
  154. package/esm/network/transports/websocket.test.d.ts +1 -0
  155. package/esm/network/transports/websocket.test.js +89 -0
  156. package/esm/network/transports/websocket.test.js.map +1 -0
  157. package/esm/storage/json.test.d.ts +1 -0
  158. package/esm/storage/json.test.js +35 -0
  159. package/esm/storage/json.test.js.map +1 -0
  160. package/esm/storage/localstorage.test.d.ts +1 -0
  161. package/esm/storage/localstorage.test.js +21 -0
  162. package/esm/storage/localstorage.test.js.map +1 -0
  163. package/esm/storage/memory.test.d.ts +1 -0
  164. package/esm/storage/memory.test.js +45 -0
  165. package/esm/storage/memory.test.js.map +1 -0
  166. package/esm/utils/async-lock.test.d.ts +1 -0
  167. package/esm/utils/async-lock.test.js +23 -0
  168. package/esm/utils/async-lock.test.js.map +1 -0
  169. package/esm/utils/bigint-utils.test.d.ts +1 -0
  170. package/esm/utils/bigint-utils.test.js +148 -0
  171. package/esm/utils/bigint-utils.test.js.map +1 -0
  172. package/esm/utils/buffer-utils.test.d.ts +1 -0
  173. package/esm/utils/buffer-utils.test.js +67 -0
  174. package/esm/utils/buffer-utils.test.js.map +1 -0
  175. package/esm/utils/condition-variable.test.d.ts +1 -0
  176. package/esm/utils/condition-variable.test.js +25 -0
  177. package/esm/utils/condition-variable.test.js.map +1 -0
  178. package/esm/utils/controllable-promise.test.d.ts +1 -0
  179. package/esm/utils/controllable-promise.test.js +15 -0
  180. package/esm/utils/controllable-promise.test.js.map +1 -0
  181. package/esm/utils/crypto/keys.test.d.ts +1 -0
  182. package/esm/utils/crypto/keys.test.js +38 -0
  183. package/esm/utils/crypto/keys.test.js.map +1 -0
  184. package/esm/utils/crypto/miller-rabin.test.d.ts +1 -0
  185. package/esm/utils/crypto/miller-rabin.test.js +58 -0
  186. package/esm/utils/crypto/miller-rabin.test.js.map +1 -0
  187. package/esm/utils/crypto/mtproto.test.d.ts +1 -0
  188. package/esm/utils/crypto/mtproto.test.js +45 -0
  189. package/esm/utils/crypto/mtproto.test.js.map +1 -0
  190. package/esm/utils/crypto/node.test.d.ts +1 -0
  191. package/esm/utils/crypto/node.test.js +11 -0
  192. package/esm/utils/crypto/node.test.js.map +1 -0
  193. package/esm/utils/crypto/password.test.d.ts +1 -0
  194. package/esm/utils/crypto/password.test.js +90 -0
  195. package/esm/utils/crypto/password.test.js.map +1 -0
  196. package/esm/utils/crypto/utils.test.d.ts +1 -0
  197. package/esm/utils/crypto/utils.test.js +47 -0
  198. package/esm/utils/crypto/utils.test.js.map +1 -0
  199. package/esm/utils/crypto/web.test.d.ts +1 -0
  200. package/esm/utils/crypto/web.test.js +15 -0
  201. package/esm/utils/crypto/web.test.js.map +1 -0
  202. package/esm/utils/deque.test.d.ts +1 -0
  203. package/esm/utils/deque.test.js +126 -0
  204. package/esm/utils/deque.test.js.map +1 -0
  205. package/esm/utils/function-utils.test.d.ts +1 -0
  206. package/esm/utils/function-utils.test.js +21 -0
  207. package/esm/utils/function-utils.test.js.map +1 -0
  208. package/esm/utils/linked-list.test.d.ts +1 -0
  209. package/esm/utils/linked-list.test.js +34 -0
  210. package/esm/utils/linked-list.test.js.map +1 -0
  211. package/esm/utils/links/bots.test.d.ts +1 -0
  212. package/esm/utils/links/bots.test.js +150 -0
  213. package/esm/utils/links/bots.test.js.map +1 -0
  214. package/esm/utils/links/chat.test.d.ts +1 -0
  215. package/esm/utils/links/chat.test.js +82 -0
  216. package/esm/utils/links/chat.test.js.map +1 -0
  217. package/esm/utils/links/misc.test.d.ts +1 -0
  218. package/esm/utils/links/misc.test.js +151 -0
  219. package/esm/utils/links/misc.test.js.map +1 -0
  220. package/esm/utils/links/proxy.test.d.ts +1 -0
  221. package/esm/utils/links/proxy.test.js +72 -0
  222. package/esm/utils/links/proxy.test.js.map +1 -0
  223. package/esm/utils/links/user.test.d.ts +1 -0
  224. package/esm/utils/links/user.test.js +61 -0
  225. package/esm/utils/links/user.test.js.map +1 -0
  226. package/esm/utils/logger.test.d.ts +1 -0
  227. package/esm/utils/logger.test.js +120 -0
  228. package/esm/utils/logger.test.js.map +1 -0
  229. package/esm/utils/long-utils.test.d.ts +1 -0
  230. package/esm/utils/long-utils.test.js +153 -0
  231. package/esm/utils/long-utils.test.js.map +1 -0
  232. package/esm/utils/lru-map.test.d.ts +1 -0
  233. package/esm/utils/lru-map.test.js +94 -0
  234. package/esm/utils/lru-map.test.js.map +1 -0
  235. package/esm/utils/lru-set.test.d.ts +1 -0
  236. package/esm/utils/lru-set.test.js +72 -0
  237. package/esm/utils/lru-set.test.js.map +1 -0
  238. package/esm/utils/peer-utils.test.d.ts +1 -0
  239. package/esm/utils/peer-utils.test.js +117 -0
  240. package/esm/utils/peer-utils.test.js.map +1 -0
  241. package/esm/utils/sorted-array.test.d.ts +1 -0
  242. package/esm/utils/sorted-array.test.js +64 -0
  243. package/esm/utils/sorted-array.test.js.map +1 -0
  244. package/esm/utils/string-session.test.d.ts +1 -0
  245. package/esm/utils/string-session.test.js +104 -0
  246. package/esm/utils/string-session.test.js.map +1 -0
  247. package/esm/utils/tl-json.test.d.ts +1 -0
  248. package/esm/utils/tl-json.test.js +81 -0
  249. package/esm/utils/tl-json.test.js.map +1 -0
  250. package/esm/utils/type-assertions.test.d.ts +1 -0
  251. package/esm/utils/type-assertions.test.js +65 -0
  252. package/esm/utils/type-assertions.test.js.map +1 -0
  253. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,117 @@
1
+ import Long from 'long';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { createStub } from '@mtcute/test';
4
+ import { getAllPeersFrom, getBarePeerId, getBasicPeerType, getMarkedPeerId, markedPeerIdToBare, toggleChannelIdMark, } from './peer-utils.js';
5
+ const SOME_CHANNEL_ID = 1183945448;
6
+ const SOME_CHANNEL_ID_MARKED = -1001183945448;
7
+ describe('toggleChannelIdMark', () => {
8
+ it('should turn marked channel id into bare', () => {
9
+ expect(toggleChannelIdMark(SOME_CHANNEL_ID_MARKED)).toEqual(SOME_CHANNEL_ID);
10
+ });
11
+ it('should turn bare channel id into marked', () => {
12
+ expect(toggleChannelIdMark(SOME_CHANNEL_ID)).toEqual(SOME_CHANNEL_ID_MARKED);
13
+ });
14
+ });
15
+ describe('getBarePeerId', () => {
16
+ it('should return bare peer id from Peer', () => {
17
+ expect(getBarePeerId({ _: 'peerUser', userId: 123 })).toEqual(123);
18
+ expect(getBarePeerId({ _: 'peerChat', chatId: 456 })).toEqual(456);
19
+ expect(getBarePeerId({ _: 'peerChannel', channelId: 789 })).toEqual(789);
20
+ });
21
+ });
22
+ describe('getMarkedPeerId', () => {
23
+ it('should return marked peer id from bare and type', () => {
24
+ expect(getMarkedPeerId(123, 'user')).toEqual(123);
25
+ expect(getMarkedPeerId(456, 'chat')).toEqual(-456);
26
+ expect(getMarkedPeerId(SOME_CHANNEL_ID, 'channel')).toEqual(SOME_CHANNEL_ID_MARKED);
27
+ });
28
+ it('should throw on invalid type', () => {
29
+ // eslint-disable-next-line
30
+ expect(() => getMarkedPeerId(123, 'invalid')).toThrow();
31
+ });
32
+ it('should return marked peer id from Peer', () => {
33
+ expect(getMarkedPeerId({ _: 'peerUser', userId: 123 })).toEqual(123);
34
+ expect(getMarkedPeerId({ _: 'peerChat', chatId: 456 })).toEqual(-456);
35
+ expect(getMarkedPeerId({ _: 'peerChannel', channelId: SOME_CHANNEL_ID })).toEqual(SOME_CHANNEL_ID_MARKED);
36
+ });
37
+ it('should return marked peer id from Input*', () => {
38
+ expect(getMarkedPeerId({ _: 'inputPeerUser', userId: 123, accessHash: Long.ZERO })).toEqual(123);
39
+ expect(getMarkedPeerId({ _: 'inputUser', userId: 123, accessHash: Long.ZERO })).toEqual(123);
40
+ expect(getMarkedPeerId({ _: 'inputPeerChat', chatId: 456 })).toEqual(-456);
41
+ expect(getMarkedPeerId({ _: 'inputPeerChannel', channelId: SOME_CHANNEL_ID, accessHash: Long.ZERO })).toEqual(SOME_CHANNEL_ID_MARKED);
42
+ expect(getMarkedPeerId({ _: 'inputChannel', channelId: SOME_CHANNEL_ID, accessHash: Long.ZERO })).toEqual(SOME_CHANNEL_ID_MARKED);
43
+ });
44
+ it('should throw if peer does not have id', () => {
45
+ expect(() => getMarkedPeerId({ _: 'inputPeerSelf' })).toThrow();
46
+ });
47
+ });
48
+ describe('getBasicPeerType', () => {
49
+ it('should return basic peer type from Peer', () => {
50
+ expect(getBasicPeerType({ _: 'peerUser', userId: 123 })).toEqual('user');
51
+ expect(getBasicPeerType({ _: 'peerChat', chatId: 456 })).toEqual('chat');
52
+ expect(getBasicPeerType({ _: 'peerChannel', channelId: SOME_CHANNEL_ID })).toEqual('channel');
53
+ });
54
+ it('should return basic peer type from marked id', () => {
55
+ expect(getBasicPeerType(123)).toEqual('user');
56
+ expect(getBasicPeerType(-456)).toEqual('chat');
57
+ expect(getBasicPeerType(SOME_CHANNEL_ID_MARKED)).toEqual('channel');
58
+ });
59
+ it('should throw for invalid marked ids', () => {
60
+ expect(() => getBasicPeerType(0)).toThrow('Invalid marked peer id');
61
+ // secret chats are not supported yet
62
+ expect(() => getBasicPeerType(-1997852516400)).toThrow('Secret chats are not supported');
63
+ });
64
+ });
65
+ describe('markedPeerIdToBare', () => {
66
+ it('should return bare peer id from marked id', () => {
67
+ expect(markedPeerIdToBare(123)).toEqual(123);
68
+ expect(markedPeerIdToBare(-456)).toEqual(456);
69
+ expect(markedPeerIdToBare(SOME_CHANNEL_ID_MARKED)).toEqual(SOME_CHANNEL_ID);
70
+ });
71
+ });
72
+ describe('getAllPeersFrom', () => {
73
+ const stubUser1 = createStub('user', { id: 123 });
74
+ const stubUser2 = createStub('user', { id: 456 });
75
+ const stubChat = createStub('chat', { id: 789 });
76
+ const stubChannel = createStub('channel', { id: 101112 });
77
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */
78
+ it('should find all peers from objects containing users/chats fields', () => {
79
+ expect([...getAllPeersFrom({ users: [], chats: [] })]).toEqual([]);
80
+ expect([
81
+ ...getAllPeersFrom({
82
+ users: [stubUser1, stubUser2],
83
+ chats: [stubChat, stubChannel],
84
+ }),
85
+ ]).toEqual([stubUser1, stubUser2, stubChat, stubChannel]);
86
+ });
87
+ it('should extract peers from objects containing user/chat fields', () => {
88
+ expect([
89
+ ...getAllPeersFrom({
90
+ user: stubUser2,
91
+ chat: stubChat,
92
+ channel: stubChannel,
93
+ }),
94
+ ]).toEqual([stubUser2, stubChat, stubChannel]);
95
+ });
96
+ it('should work for arrays', () => {
97
+ expect([...getAllPeersFrom([{ user: stubUser1 }, { user: stubUser2 }])]).toEqual([stubUser1, stubUser2]);
98
+ });
99
+ it('should work for peer objects directly', () => {
100
+ expect([...getAllPeersFrom(stubUser1)]).toEqual([stubUser1]);
101
+ });
102
+ it('should ignore *Empty', () => {
103
+ expect([
104
+ ...getAllPeersFrom({
105
+ users: [createStub('userEmpty')],
106
+ chats: [createStub('chatEmpty')],
107
+ }),
108
+ ]).toEqual([]);
109
+ expect([...getAllPeersFrom({ user: createStub('userEmpty'), chat: createStub('chatEmpty') })]).toEqual([]);
110
+ expect([...getAllPeersFrom([createStub('userEmpty'), createStub('chatEmpty')])]).toEqual([]);
111
+ });
112
+ it('should correctly handle users/chats fields of type number[]', () => {
113
+ expect([...getAllPeersFrom({ users: [123, 456], chats: [123, 456] })]).toEqual([]);
114
+ });
115
+ /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */
116
+ });
117
+ //# sourceMappingURL=peer-utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-utils.test.js","sourceRoot":"","sources":["../../../src/utils/peer-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\nimport { describe, expect, it } from 'vitest'\n\nimport { createStub } from '@mtcute/test'\n\nimport {\n getAllPeersFrom,\n getBarePeerId,\n getBasicPeerType,\n getMarkedPeerId,\n markedPeerIdToBare,\n toggleChannelIdMark,\n} from './peer-utils.js'\n\nconst SOME_CHANNEL_ID = 1183945448\nconst SOME_CHANNEL_ID_MARKED = -1001183945448\n\ndescribe('toggleChannelIdMark', () => {\n it('should turn marked channel id into bare', () => {\n expect(toggleChannelIdMark(SOME_CHANNEL_ID_MARKED)).toEqual(SOME_CHANNEL_ID)\n })\n\n it('should turn bare channel id into marked', () => {\n expect(toggleChannelIdMark(SOME_CHANNEL_ID)).toEqual(SOME_CHANNEL_ID_MARKED)\n })\n})\n\ndescribe('getBarePeerId', () => {\n it('should return bare peer id from Peer', () => {\n expect(getBarePeerId({ _: 'peerUser', userId: 123 })).toEqual(123)\n expect(getBarePeerId({ _: 'peerChat', chatId: 456 })).toEqual(456)\n expect(getBarePeerId({ _: 'peerChannel', channelId: 789 })).toEqual(789)\n })\n})\n\ndescribe('getMarkedPeerId', () => {\n it('should return marked peer id from bare and type', () => {\n expect(getMarkedPeerId(123, 'user')).toEqual(123)\n expect(getMarkedPeerId(456, 'chat')).toEqual(-456)\n expect(getMarkedPeerId(SOME_CHANNEL_ID, 'channel')).toEqual(SOME_CHANNEL_ID_MARKED)\n })\n\n it('should throw on invalid type', () => {\n // eslint-disable-next-line\n expect(() => getMarkedPeerId(123, 'invalid' as any)).toThrow()\n })\n\n it('should return marked peer id from Peer', () => {\n expect(getMarkedPeerId({ _: 'peerUser', userId: 123 })).toEqual(123)\n expect(getMarkedPeerId({ _: 'peerChat', chatId: 456 })).toEqual(-456)\n expect(getMarkedPeerId({ _: 'peerChannel', channelId: SOME_CHANNEL_ID })).toEqual(SOME_CHANNEL_ID_MARKED)\n })\n\n it('should return marked peer id from Input*', () => {\n expect(getMarkedPeerId({ _: 'inputPeerUser', userId: 123, accessHash: Long.ZERO })).toEqual(123)\n expect(getMarkedPeerId({ _: 'inputUser', userId: 123, accessHash: Long.ZERO })).toEqual(123)\n expect(getMarkedPeerId({ _: 'inputPeerChat', chatId: 456 })).toEqual(-456)\n expect(getMarkedPeerId({ _: 'inputPeerChannel', channelId: SOME_CHANNEL_ID, accessHash: Long.ZERO })).toEqual(\n SOME_CHANNEL_ID_MARKED,\n )\n expect(getMarkedPeerId({ _: 'inputChannel', channelId: SOME_CHANNEL_ID, accessHash: Long.ZERO })).toEqual(\n SOME_CHANNEL_ID_MARKED,\n )\n })\n\n it('should throw if peer does not have id', () => {\n expect(() => getMarkedPeerId({ _: 'inputPeerSelf' })).toThrow()\n })\n})\n\ndescribe('getBasicPeerType', () => {\n it('should return basic peer type from Peer', () => {\n expect(getBasicPeerType({ _: 'peerUser', userId: 123 })).toEqual('user')\n expect(getBasicPeerType({ _: 'peerChat', chatId: 456 })).toEqual('chat')\n expect(getBasicPeerType({ _: 'peerChannel', channelId: SOME_CHANNEL_ID })).toEqual('channel')\n })\n\n it('should return basic peer type from marked id', () => {\n expect(getBasicPeerType(123)).toEqual('user')\n expect(getBasicPeerType(-456)).toEqual('chat')\n expect(getBasicPeerType(SOME_CHANNEL_ID_MARKED)).toEqual('channel')\n })\n\n it('should throw for invalid marked ids', () => {\n expect(() => getBasicPeerType(0)).toThrow('Invalid marked peer id')\n\n // secret chats are not supported yet\n expect(() => getBasicPeerType(-1997852516400)).toThrow('Secret chats are not supported')\n })\n})\n\ndescribe('markedPeerIdToBare', () => {\n it('should return bare peer id from marked id', () => {\n expect(markedPeerIdToBare(123)).toEqual(123)\n expect(markedPeerIdToBare(-456)).toEqual(456)\n expect(markedPeerIdToBare(SOME_CHANNEL_ID_MARKED)).toEqual(SOME_CHANNEL_ID)\n })\n})\n\ndescribe('getAllPeersFrom', () => {\n const stubUser1 = createStub('user', { id: 123 })\n const stubUser2 = createStub('user', { id: 456 })\n const stubChat = createStub('chat', { id: 789 })\n const stubChannel = createStub('channel', { id: 101112 })\n\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */\n it('should find all peers from objects containing users/chats fields', () => {\n expect([...getAllPeersFrom({ users: [], chats: [] } as any)]).toEqual([])\n expect([\n ...getAllPeersFrom({\n users: [stubUser1, stubUser2],\n chats: [stubChat, stubChannel],\n } as any),\n ]).toEqual([stubUser1, stubUser2, stubChat, stubChannel])\n })\n\n it('should extract peers from objects containing user/chat fields', () => {\n expect([\n ...getAllPeersFrom({\n user: stubUser2,\n chat: stubChat,\n channel: stubChannel,\n } as any),\n ]).toEqual([stubUser2, stubChat, stubChannel])\n })\n\n it('should work for arrays', () => {\n expect([...getAllPeersFrom([{ user: stubUser1 }, { user: stubUser2 }] as any)]).toEqual([stubUser1, stubUser2])\n })\n\n it('should work for peer objects directly', () => {\n expect([...getAllPeersFrom(stubUser1)]).toEqual([stubUser1])\n })\n\n it('should ignore *Empty', () => {\n expect([\n ...getAllPeersFrom({\n users: [createStub('userEmpty')],\n chats: [createStub('chatEmpty')],\n } as any),\n ]).toEqual([])\n expect([...getAllPeersFrom({ user: createStub('userEmpty'), chat: createStub('chatEmpty') } as any)]).toEqual(\n [],\n )\n expect([...getAllPeersFrom([createStub('userEmpty'), createStub('chatEmpty')])]).toEqual([])\n })\n\n it('should correctly handle users/chats fields of type number[]', () => {\n expect([...getAllPeersFrom({ users: [123, 456], chats: [123, 456] } as any)]).toEqual([])\n })\n\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,64 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { SortedArray } from './sorted-array.js';
3
+ describe('SortedArray', () => {
4
+ const ascendingComparator = (a, b) => a - b;
5
+ it('should insert items in accordance with comparator', () => {
6
+ const arr = new SortedArray([], ascendingComparator);
7
+ arr.insert(1);
8
+ arr.insert(2);
9
+ arr.insert(5);
10
+ arr.insert(3);
11
+ arr.insert(4);
12
+ expect(arr.raw).toEqual([1, 2, 3, 4, 5]);
13
+ });
14
+ it('should insert arrays', () => {
15
+ const arr = new SortedArray([], ascendingComparator);
16
+ arr.insert([1, 2, 5, 3, 4]);
17
+ expect(arr.raw).toEqual([1, 2, 3, 4, 5]);
18
+ });
19
+ it('should return length', () => {
20
+ const arr = new SortedArray([], ascendingComparator);
21
+ arr.insert(1);
22
+ arr.insert(2);
23
+ arr.insert(5);
24
+ expect(arr.length).toEqual(3);
25
+ });
26
+ it('should return index of the item', () => {
27
+ const arr = new SortedArray([], ascendingComparator);
28
+ arr.insert(1);
29
+ arr.insert(2);
30
+ arr.insert(5);
31
+ expect(arr.index(1)).toEqual(0);
32
+ expect(arr.index(2)).toEqual(1);
33
+ expect(arr.index(5)).toEqual(2);
34
+ expect(arr.index(10)).toEqual(-1);
35
+ });
36
+ it('should return closest index for an item not in the array', () => {
37
+ const arr = new SortedArray([], ascendingComparator);
38
+ arr.insert(1);
39
+ arr.insert(2);
40
+ arr.insert(5);
41
+ expect(arr.index(3, true)).toEqual(2);
42
+ expect(arr.index(4, true)).toEqual(2); // still 2, becuse left-hand side
43
+ expect(arr.index(6, true)).toEqual(3);
44
+ });
45
+ it('should remove items by value', () => {
46
+ const arr = new SortedArray([], ascendingComparator);
47
+ arr.insert(1);
48
+ arr.insert(2);
49
+ arr.insert(5);
50
+ arr.remove(2);
51
+ expect(arr.raw).toEqual([1, 5]);
52
+ });
53
+ it('should check if item is in array', () => {
54
+ const arr = new SortedArray([], ascendingComparator);
55
+ arr.insert(1);
56
+ arr.insert(2);
57
+ arr.insert(5);
58
+ expect(arr.includes(1)).toBeTruthy();
59
+ expect(arr.includes(2)).toBeTruthy();
60
+ expect(arr.includes(5)).toBeTruthy();
61
+ expect(arr.includes(10)).toBeFalsy();
62
+ });
63
+ });
64
+ //# sourceMappingURL=sorted-array.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sorted-array.test.js","sourceRoot":"","sources":["../../../src/utils/sorted-array.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { SortedArray } from './sorted-array.js'\n\ndescribe('SortedArray', () => {\n const ascendingComparator = (a: number, b: number) => a - b\n\n it('should insert items in accordance with comparator', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n arr.insert(3)\n arr.insert(4)\n\n expect(arr.raw).toEqual([1, 2, 3, 4, 5])\n })\n\n it('should insert arrays', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert([1, 2, 5, 3, 4])\n\n expect(arr.raw).toEqual([1, 2, 3, 4, 5])\n })\n\n it('should return length', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n\n expect(arr.length).toEqual(3)\n })\n\n it('should return index of the item', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n\n expect(arr.index(1)).toEqual(0)\n expect(arr.index(2)).toEqual(1)\n expect(arr.index(5)).toEqual(2)\n expect(arr.index(10)).toEqual(-1)\n })\n\n it('should return closest index for an item not in the array', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n\n expect(arr.index(3, true)).toEqual(2)\n expect(arr.index(4, true)).toEqual(2) // still 2, becuse left-hand side\n expect(arr.index(6, true)).toEqual(3)\n })\n\n it('should remove items by value', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n arr.remove(2)\n\n expect(arr.raw).toEqual([1, 5])\n })\n\n it('should check if item is in array', () => {\n const arr = new SortedArray<number>([], ascendingComparator)\n\n arr.insert(1)\n arr.insert(2)\n arr.insert(5)\n\n expect(arr.includes(1)).toBeTruthy()\n expect(arr.includes(2)).toBeTruthy()\n expect(arr.includes(5)).toBeTruthy()\n expect(arr.includes(10)).toBeFalsy()\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,104 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createStub } from '@mtcute/test';
3
+ import { __tlReaderMap } from '@mtcute/tl/binary/reader.js';
4
+ import { __tlWriterMap } from '@mtcute/tl/binary/writer.js';
5
+ import { defaultProductionDc } from './default-dcs.js';
6
+ import { readStringSession, writeStringSession } from './string-session.js';
7
+ const stubAuthKey = new Uint8Array(32);
8
+ const stubDcs = {
9
+ main: createStub('dcOption', defaultProductionDc.main),
10
+ media: createStub('dcOption', defaultProductionDc.media),
11
+ };
12
+ const stubDcsSameMedia = {
13
+ main: stubDcs.main,
14
+ media: stubDcs.main,
15
+ };
16
+ describe('writeStringSession', () => {
17
+ it('should write production string session without user', () => {
18
+ expect(writeStringSession(__tlWriterMap, {
19
+ version: 2,
20
+ testMode: false,
21
+ primaryDcs: stubDcs,
22
+ authKey: stubAuthKey,
23
+ })).toMatchInlineSnapshot('"AgQAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"');
24
+ });
25
+ it('should write production string session without user with same dc for media', () => {
26
+ expect(writeStringSession(__tlWriterMap, {
27
+ version: 2,
28
+ testMode: false,
29
+ primaryDcs: stubDcsSameMedia,
30
+ authKey: stubAuthKey,
31
+ })).toMatchInlineSnapshot('"AgAAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"');
32
+ });
33
+ it('should write production string session with user', () => {
34
+ expect(writeStringSession(__tlWriterMap, {
35
+ version: 2,
36
+ testMode: false,
37
+ primaryDcs: stubDcs,
38
+ authKey: stubAuthKey,
39
+ self: { userId: 12345, isBot: false },
40
+ })).toMatchInlineSnapshot('"AgUAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"');
41
+ });
42
+ it('should write test dc string session with user', () => {
43
+ expect(writeStringSession(__tlWriterMap, {
44
+ version: 2,
45
+ testMode: true,
46
+ primaryDcs: stubDcs,
47
+ authKey: stubAuthKey,
48
+ self: { userId: 12345, isBot: false },
49
+ })).toMatchInlineSnapshot('"AgcAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"');
50
+ });
51
+ });
52
+ describe('readStringSession', () => {
53
+ describe('v2', () => {
54
+ it('should read production string session without user', () => {
55
+ expect(readStringSession(__tlReaderMap, 'AgQAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')).toEqual({
56
+ version: 2,
57
+ testMode: false,
58
+ primaryDcs: stubDcs,
59
+ authKey: stubAuthKey,
60
+ self: null,
61
+ });
62
+ });
63
+ it('should read production string session without user with same dc for media', () => {
64
+ expect(readStringSession(__tlReaderMap, 'AgAAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')).toEqual({
65
+ version: 2,
66
+ testMode: false,
67
+ primaryDcs: stubDcsSameMedia,
68
+ authKey: stubAuthKey,
69
+ self: null,
70
+ });
71
+ });
72
+ it('should read production string session with user', () => {
73
+ expect(readStringSession(__tlReaderMap, 'AgUAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')).toEqual({
74
+ version: 2,
75
+ testMode: false,
76
+ primaryDcs: stubDcs,
77
+ authKey: stubAuthKey,
78
+ self: { userId: 12345, isBot: false },
79
+ });
80
+ });
81
+ it('should read test dc string session with user', () => {
82
+ expect(readStringSession(__tlReaderMap, 'AgcAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')).toEqual({
83
+ version: 2,
84
+ testMode: true,
85
+ primaryDcs: stubDcs,
86
+ authKey: stubAuthKey,
87
+ self: { userId: 12345, isBot: false },
88
+ });
89
+ });
90
+ });
91
+ describe('v1', () => {
92
+ it('should read string session with user', () => {
93
+ expect(readStringSession(__tlReaderMap, 'AQEAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAADkwAAAAAAAAN5d5vCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')).toEqual({
94
+ version: 1,
95
+ testMode: false,
96
+ // v1 didn't have separate media dc
97
+ primaryDcs: stubDcsSameMedia,
98
+ authKey: stubAuthKey,
99
+ self: { userId: 12345, isBot: false },
100
+ });
101
+ });
102
+ });
103
+ });
104
+ //# sourceMappingURL=string-session.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-session.test.js","sourceRoot":"","sources":["../../../src/utils/string-session.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAE3E,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;AACtC,MAAM,OAAO,GAAG;IACZ,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC;IACtD,KAAK,EAAE,UAAU,CAAC,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC;CAC3D,CAAA;AACD,MAAM,gBAAgB,GAAG;IACrB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,KAAK,EAAE,OAAO,CAAC,IAAI;CACtB,CAAA;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC3D,MAAM,CACF,kBAAkB,CAAC,aAAa,EAAE;YAC9B,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,OAAO;YACnB,OAAO,EAAE,WAAW;SACvB,CAAC,CACL,CAAC,qBAAqB,CACnB,gJAAgJ,CACnJ,CAAA;IACL,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QAClF,MAAM,CACF,kBAAkB,CAAC,aAAa,EAAE;YAC9B,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,gBAAgB;YAC5B,OAAO,EAAE,WAAW;SACvB,CAAC,CACL,CAAC,qBAAqB,CACnB,sGAAsG,CACzG,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACxD,MAAM,CACF,kBAAkB,CAAC,aAAa,EAAE;YAC9B,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,OAAO;YACnB,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;SACxC,CAAC,CACL,CAAC,qBAAqB,CACnB,gKAAgK,CACnK,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,CACF,kBAAkB,CAAC,aAAa,EAAE;YAC9B,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,OAAO;YACnB,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;SACxC,CAAC,CACL,CAAC,qBAAqB,CACnB,gKAAgK,CACnK,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;QAChB,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC1D,MAAM,CACF,iBAAiB,CACb,aAAa,EACb,8IAA8I,CACjJ,CACJ,CAAC,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,OAAO;gBACnB,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,IAAI;aACb,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;YACjF,MAAM,CACF,iBAAiB,CACb,aAAa,EACb,oGAAoG,CACvG,CACJ,CAAC,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,gBAAgB;gBAC5B,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,IAAI;aACb,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACvD,MAAM,CACF,iBAAiB,CACb,aAAa,EACb,8JAA8J,CACjK,CACJ,CAAC,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,OAAO;gBACnB,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;aACxC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACpD,MAAM,CACF,iBAAiB,CACb,aAAa,EACb,8JAA8J,CACjK,CACJ,CAAC,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,OAAO;gBACnB,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;aACxC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;QAChB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC5C,MAAM,CACF,iBAAiB,CACb,aAAa,EACb,oHAAoH,CACvH,CACJ,CAAC,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,KAAK;gBACf,mCAAmC;gBACnC,UAAU,EAAE,gBAAgB;gBAC5B,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;aACxC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { createStub } from '@mtcute/test'\nimport { __tlReaderMap } from '@mtcute/tl/binary/reader.js'\nimport { __tlWriterMap } from '@mtcute/tl/binary/writer.js'\n\nimport { defaultProductionDc } from './default-dcs.js'\nimport { readStringSession, writeStringSession } from './string-session.js'\n\nconst stubAuthKey = new Uint8Array(32)\nconst stubDcs = {\n main: createStub('dcOption', defaultProductionDc.main),\n media: createStub('dcOption', defaultProductionDc.media),\n}\nconst stubDcsSameMedia = {\n main: stubDcs.main,\n media: stubDcs.main,\n}\n\ndescribe('writeStringSession', () => {\n it('should write production string session without user', () => {\n expect(\n writeStringSession(__tlWriterMap, {\n version: 2,\n testMode: false,\n primaryDcs: stubDcs,\n authKey: stubAuthKey,\n }),\n ).toMatchInlineSnapshot(\n '\"AgQAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"',\n )\n })\n it('should write production string session without user with same dc for media', () => {\n expect(\n writeStringSession(__tlWriterMap, {\n version: 2,\n testMode: false,\n primaryDcs: stubDcsSameMedia,\n authKey: stubAuthKey,\n }),\n ).toMatchInlineSnapshot(\n '\"AgAAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"',\n )\n })\n\n it('should write production string session with user', () => {\n expect(\n writeStringSession(__tlWriterMap, {\n version: 2,\n testMode: false,\n primaryDcs: stubDcs,\n authKey: stubAuthKey,\n self: { userId: 12345, isBot: false },\n }),\n ).toMatchInlineSnapshot(\n '\"AgUAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"',\n )\n })\n\n it('should write test dc string session with user', () => {\n expect(\n writeStringSession(__tlWriterMap, {\n version: 2,\n testMode: true,\n primaryDcs: stubDcs,\n authKey: stubAuthKey,\n self: { userId: 12345, isBot: false },\n }),\n ).toMatchInlineSnapshot(\n '\"AgcAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"',\n )\n })\n})\n\ndescribe('readStringSession', () => {\n describe('v2', () => {\n it('should read production string session without user', () => {\n expect(\n readStringSession(\n __tlReaderMap,\n 'AgQAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\n ),\n ).toEqual({\n version: 2,\n testMode: false,\n primaryDcs: stubDcs,\n authKey: stubAuthKey,\n self: null,\n })\n })\n\n it('should read production string session without user with same dc for media', () => {\n expect(\n readStringSession(\n __tlReaderMap,\n 'AgAAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\n ),\n ).toEqual({\n version: 2,\n testMode: false,\n primaryDcs: stubDcsSameMedia,\n authKey: stubAuthKey,\n self: null,\n })\n })\n\n it('should read production string session with user', () => {\n expect(\n readStringSession(\n __tlReaderMap,\n 'AgUAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\n ),\n ).toEqual({\n version: 2,\n testMode: false,\n primaryDcs: stubDcs,\n authKey: stubAuthKey,\n self: { userId: 12345, isBot: false },\n })\n })\n\n it('should read test dc string session with user', () => {\n expect(\n readStringSession(\n __tlReaderMap,\n 'AgcAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\n ),\n ).toEqual({\n version: 2,\n testMode: true,\n primaryDcs: stubDcs,\n authKey: stubAuthKey,\n self: { userId: 12345, isBot: false },\n })\n })\n })\n\n describe('v1', () => {\n it('should read string session with user', () => {\n expect(\n readStringSession(\n __tlReaderMap,\n 'AQEAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAADkwAAAAAAAAN5d5vCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\n ),\n ).toEqual({\n version: 1,\n testMode: false,\n // v1 didn't have separate media dc\n primaryDcs: stubDcsSameMedia,\n authKey: stubAuthKey,\n self: { userId: 12345, isBot: false },\n })\n })\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,81 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { jsonToTlJson, tlJsonToJson } from './tl-json.js';
3
+ describe('jsonToTlJson', () => {
4
+ it('should correctly handle null/undefined', () => {
5
+ expect(jsonToTlJson(null)).toEqual({ _: 'jsonNull' });
6
+ expect(jsonToTlJson(undefined)).toEqual({ _: 'jsonNull' });
7
+ });
8
+ it('should correctly handle booleans', () => {
9
+ expect(jsonToTlJson(true)).toEqual({ _: 'jsonBool', value: true });
10
+ expect(jsonToTlJson(false)).toEqual({ _: 'jsonBool', value: false });
11
+ });
12
+ it('should correctly handle numbers', () => {
13
+ expect(jsonToTlJson(123)).toEqual({ _: 'jsonNumber', value: 123 });
14
+ expect(jsonToTlJson(0)).toEqual({ _: 'jsonNumber', value: 0 });
15
+ expect(jsonToTlJson(-123)).toEqual({ _: 'jsonNumber', value: -123 });
16
+ });
17
+ it('should correctly handle strings', () => {
18
+ expect(jsonToTlJson('hello')).toEqual({ _: 'jsonString', value: 'hello' });
19
+ expect(jsonToTlJson('')).toEqual({ _: 'jsonString', value: '' });
20
+ });
21
+ it('should correcly handle arrays', () => {
22
+ expect(jsonToTlJson([1, 2, 3])).toEqual({
23
+ _: 'jsonArray',
24
+ value: [
25
+ { _: 'jsonNumber', value: 1 },
26
+ { _: 'jsonNumber', value: 2 },
27
+ { _: 'jsonNumber', value: 3 },
28
+ ],
29
+ });
30
+ });
31
+ it('should correctly handle objects', () => {
32
+ expect(jsonToTlJson({ a: 1, b: 2 })).toEqual({
33
+ _: 'jsonObject',
34
+ value: [
35
+ { _: 'jsonObjectValue', key: 'a', value: { _: 'jsonNumber', value: 1 } },
36
+ { _: 'jsonObjectValue', key: 'b', value: { _: 'jsonNumber', value: 2 } },
37
+ ],
38
+ });
39
+ });
40
+ it('should error on unsupported types', () => {
41
+ expect(() => jsonToTlJson(Symbol('test'))).toThrow();
42
+ });
43
+ });
44
+ describe('tlJsonToJson', () => {
45
+ it('should correctly handle null/undefined', () => {
46
+ expect(tlJsonToJson({ _: 'jsonNull' })).toEqual(null);
47
+ });
48
+ it('should correctly handle booleans', () => {
49
+ expect(tlJsonToJson({ _: 'jsonBool', value: true })).toEqual(true);
50
+ expect(tlJsonToJson({ _: 'jsonBool', value: false })).toEqual(false);
51
+ });
52
+ it('should correctly handle numbers', () => {
53
+ expect(tlJsonToJson({ _: 'jsonNumber', value: 123 })).toEqual(123);
54
+ expect(tlJsonToJson({ _: 'jsonNumber', value: 0 })).toEqual(0);
55
+ expect(tlJsonToJson({ _: 'jsonNumber', value: -123 })).toEqual(-123);
56
+ });
57
+ it('should correctly handle strings', () => {
58
+ expect(tlJsonToJson({ _: 'jsonString', value: 'hello' })).toEqual('hello');
59
+ expect(tlJsonToJson({ _: 'jsonString', value: '' })).toEqual('');
60
+ });
61
+ it('should correcly handle arrays', () => {
62
+ expect(tlJsonToJson({
63
+ _: 'jsonArray',
64
+ value: [
65
+ { _: 'jsonNumber', value: 1 },
66
+ { _: 'jsonNumber', value: 2 },
67
+ { _: 'jsonNumber', value: 3 },
68
+ ],
69
+ })).toEqual([1, 2, 3]);
70
+ });
71
+ it('should correctly handle objects', () => {
72
+ expect(tlJsonToJson({
73
+ _: 'jsonObject',
74
+ value: [
75
+ { _: 'jsonObjectValue', key: 'a', value: { _: 'jsonNumber', value: 1 } },
76
+ { _: 'jsonObjectValue', key: 'b', value: { _: 'jsonNumber', value: 2 } },
77
+ ],
78
+ })).toEqual({ a: 1, b: 2 });
79
+ });
80
+ });
81
+ //# sourceMappingURL=tl-json.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tl-json.test.js","sourceRoot":"","sources":["../../../src/utils/tl-json.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { jsonToTlJson, tlJsonToJson } from './tl-json.js'\n\ndescribe('jsonToTlJson', () => {\n it('should correctly handle null/undefined', () => {\n expect(jsonToTlJson(null)).toEqual({ _: 'jsonNull' })\n expect(jsonToTlJson(undefined)).toEqual({ _: 'jsonNull' })\n })\n\n it('should correctly handle booleans', () => {\n expect(jsonToTlJson(true)).toEqual({ _: 'jsonBool', value: true })\n expect(jsonToTlJson(false)).toEqual({ _: 'jsonBool', value: false })\n })\n\n it('should correctly handle numbers', () => {\n expect(jsonToTlJson(123)).toEqual({ _: 'jsonNumber', value: 123 })\n expect(jsonToTlJson(0)).toEqual({ _: 'jsonNumber', value: 0 })\n expect(jsonToTlJson(-123)).toEqual({ _: 'jsonNumber', value: -123 })\n })\n\n it('should correctly handle strings', () => {\n expect(jsonToTlJson('hello')).toEqual({ _: 'jsonString', value: 'hello' })\n expect(jsonToTlJson('')).toEqual({ _: 'jsonString', value: '' })\n })\n\n it('should correcly handle arrays', () => {\n expect(jsonToTlJson([1, 2, 3])).toEqual({\n _: 'jsonArray',\n value: [\n { _: 'jsonNumber', value: 1 },\n { _: 'jsonNumber', value: 2 },\n { _: 'jsonNumber', value: 3 },\n ],\n })\n })\n\n it('should correctly handle objects', () => {\n expect(jsonToTlJson({ a: 1, b: 2 })).toEqual({\n _: 'jsonObject',\n value: [\n { _: 'jsonObjectValue', key: 'a', value: { _: 'jsonNumber', value: 1 } },\n { _: 'jsonObjectValue', key: 'b', value: { _: 'jsonNumber', value: 2 } },\n ],\n })\n })\n\n it('should error on unsupported types', () => {\n expect(() => jsonToTlJson(Symbol('test'))).toThrow()\n })\n})\n\ndescribe('tlJsonToJson', () => {\n it('should correctly handle null/undefined', () => {\n expect(tlJsonToJson({ _: 'jsonNull' })).toEqual(null)\n })\n\n it('should correctly handle booleans', () => {\n expect(tlJsonToJson({ _: 'jsonBool', value: true })).toEqual(true)\n expect(tlJsonToJson({ _: 'jsonBool', value: false })).toEqual(false)\n })\n\n it('should correctly handle numbers', () => {\n expect(tlJsonToJson({ _: 'jsonNumber', value: 123 })).toEqual(123)\n expect(tlJsonToJson({ _: 'jsonNumber', value: 0 })).toEqual(0)\n expect(tlJsonToJson({ _: 'jsonNumber', value: -123 })).toEqual(-123)\n })\n\n it('should correctly handle strings', () => {\n expect(tlJsonToJson({ _: 'jsonString', value: 'hello' })).toEqual('hello')\n expect(tlJsonToJson({ _: 'jsonString', value: '' })).toEqual('')\n })\n\n it('should correcly handle arrays', () => {\n expect(\n tlJsonToJson({\n _: 'jsonArray',\n value: [\n { _: 'jsonNumber', value: 1 },\n { _: 'jsonNumber', value: 2 },\n { _: 'jsonNumber', value: 3 },\n ],\n }),\n ).toEqual([1, 2, 3])\n })\n\n it('should correctly handle objects', () => {\n expect(\n tlJsonToJson({\n _: 'jsonObject',\n value: [\n { _: 'jsonObjectValue', key: 'a', value: { _: 'jsonNumber', value: 1 } },\n { _: 'jsonObjectValue', key: 'b', value: { _: 'jsonNumber', value: 2 } },\n ],\n }),\n ).toEqual({ a: 1, b: 2 })\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,65 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { assertTypeIs, assertTypeIsNot, hasPresentKey, hasValueAtKey, isPresent, mtpAssertTypeIs, } from './type-assertions.js';
3
+ describe('isPresent', () => {
4
+ it('should return true for non-null values', () => {
5
+ expect(isPresent(1)).toBe(true);
6
+ expect(isPresent('')).toBe(true);
7
+ expect(isPresent({})).toBe(true);
8
+ expect(isPresent([])).toBe(true);
9
+ });
10
+ it('should return false for null/undefined', () => {
11
+ expect(isPresent(null)).toBe(false);
12
+ expect(isPresent(undefined)).toBe(false);
13
+ });
14
+ });
15
+ describe('hasPresentKey', () => {
16
+ it('should return true for objects with present keys', () => {
17
+ expect(hasPresentKey('a')({ a: 1 })).toBe(true);
18
+ expect(hasPresentKey('a')({ a: 1, b: 2 })).toBe(true);
19
+ });
20
+ it('should return false for objects with undefined/null keys', () => {
21
+ expect(hasPresentKey('a')({ a: undefined })).toBe(false);
22
+ expect(hasPresentKey('a')({ a: null })).toBe(false);
23
+ expect(hasPresentKey('a')({ a: undefined, b: 2 })).toBe(false);
24
+ expect(hasPresentKey('a')({ a: null, b: 2 })).toBe(false);
25
+ });
26
+ it('should return false for objects without the key', () => {
27
+ expect(hasPresentKey('a')({ b: 2 })).toBe(false);
28
+ });
29
+ });
30
+ describe('hasValueAtKey', () => {
31
+ it('should return true for objects with the correct value', () => {
32
+ expect(hasValueAtKey('a', 1)({ a: 1 })).toBe(true);
33
+ expect(hasValueAtKey('a', 1)({ a: 1, b: 2 })).toBe(true);
34
+ });
35
+ it('should return false for objects with the wrong value', () => {
36
+ expect(hasValueAtKey('a', 1)({ a: 2 })).toBe(false);
37
+ expect(hasValueAtKey('a', 1)({ a: 2, b: 2 })).toBe(false);
38
+ });
39
+ it('should return false for objects without the key', () => {
40
+ // @ts-expect-error - we want to make sure the key is not present at runtime
41
+ expect(hasValueAtKey('a', 1)({ b: 2 })).toBe(false);
42
+ });
43
+ });
44
+ describe('assertTypeIs', () => {
45
+ it('should not throw for correct types', () => {
46
+ assertTypeIs('peerUser', { _: 'peerUser', userId: 1 }, 'peerUser');
47
+ mtpAssertTypeIs('peerUser', { _: 'mt_rpc_answer_unknown' }, 'mt_rpc_answer_unknown');
48
+ });
49
+ it('should throw for incorrect types', () => {
50
+ // eslint-disable-next-line
51
+ expect(() => assertTypeIs('peerUser', { _: 'peerChannel', channelId: 1 }, 'peerUser')).toThrow();
52
+ // eslint-disable-next-line
53
+ expect(() => mtpAssertTypeIs('peerUser', { _: 'mt_rpc_answer_unknown' }, 'peerUser')).toThrow();
54
+ });
55
+ });
56
+ describe('assertTypeIsNot', () => {
57
+ it('should not throw for correct types', () => {
58
+ // eslint-disable-next-line
59
+ assertTypeIsNot('peerUser', { _: 'peerChannel', channelId: 1 }, 'peerUser');
60
+ });
61
+ it('should throw for incorrect types', () => {
62
+ expect(() => assertTypeIsNot('peerUser', { _: 'peerUser', userId: 1 }, 'peerUser')).toThrow();
63
+ });
64
+ });
65
+ //# sourceMappingURL=type-assertions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-assertions.test.js","sourceRoot":"","sources":["../../../src/utils/type-assertions.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport {\n assertTypeIs,\n assertTypeIsNot,\n hasPresentKey,\n hasValueAtKey,\n isPresent,\n mtpAssertTypeIs,\n} from './type-assertions.js'\n\ndescribe('isPresent', () => {\n it('should return true for non-null values', () => {\n expect(isPresent(1)).toBe(true)\n expect(isPresent('')).toBe(true)\n expect(isPresent({})).toBe(true)\n expect(isPresent([])).toBe(true)\n })\n\n it('should return false for null/undefined', () => {\n expect(isPresent(null)).toBe(false)\n expect(isPresent(undefined)).toBe(false)\n })\n})\n\ndescribe('hasPresentKey', () => {\n it('should return true for objects with present keys', () => {\n expect(hasPresentKey('a')({ a: 1 })).toBe(true)\n expect(hasPresentKey('a')({ a: 1, b: 2 })).toBe(true)\n })\n\n it('should return false for objects with undefined/null keys', () => {\n expect(hasPresentKey('a')({ a: undefined })).toBe(false)\n expect(hasPresentKey('a')({ a: null })).toBe(false)\n expect(hasPresentKey('a')({ a: undefined, b: 2 })).toBe(false)\n expect(hasPresentKey('a')({ a: null, b: 2 })).toBe(false)\n })\n\n it('should return false for objects without the key', () => {\n expect(hasPresentKey('a')({ b: 2 })).toBe(false)\n })\n})\n\ndescribe('hasValueAtKey', () => {\n it('should return true for objects with the correct value', () => {\n expect(hasValueAtKey('a', 1)({ a: 1 })).toBe(true)\n expect(hasValueAtKey('a', 1)({ a: 1, b: 2 })).toBe(true)\n })\n\n it('should return false for objects with the wrong value', () => {\n expect(hasValueAtKey('a', 1)({ a: 2 })).toBe(false)\n expect(hasValueAtKey('a', 1)({ a: 2, b: 2 })).toBe(false)\n })\n\n it('should return false for objects without the key', () => {\n // @ts-expect-error - we want to make sure the key is not present at runtime\n expect(hasValueAtKey('a', 1)({ b: 2 })).toBe(false)\n })\n})\n\ndescribe('assertTypeIs', () => {\n it('should not throw for correct types', () => {\n assertTypeIs('peerUser', { _: 'peerUser', userId: 1 }, 'peerUser')\n mtpAssertTypeIs('peerUser', { _: 'mt_rpc_answer_unknown' }, 'mt_rpc_answer_unknown')\n })\n\n it('should throw for incorrect types', () => {\n // eslint-disable-next-line\n expect(() => assertTypeIs('peerUser', { _: 'peerChannel', channelId: 1 } as any, 'peerUser')).toThrow()\n // eslint-disable-next-line\n expect(() => mtpAssertTypeIs('peerUser', { _: 'mt_rpc_answer_unknown' } as any, 'peerUser')).toThrow()\n })\n})\n\ndescribe('assertTypeIsNot', () => {\n it('should not throw for correct types', () => {\n // eslint-disable-next-line\n assertTypeIsNot('peerUser', { _: 'peerChannel', channelId: 1 } as any, 'peerUser')\n })\n\n it('should throw for incorrect types', () => {\n expect(() => assertTypeIsNot('peerUser', { _: 'peerUser', userId: 1 }, 'peerUser')).toThrow()\n })\n})\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mtcute/core",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Core functions and base MTProto client",
5
5
  "author": "Alina Sireneva <alina@tei.su>",
6
6
  "license": "MIT",
@@ -20,7 +20,7 @@
20
20
  "./esm/storage/json-file.js": false
21
21
  },
22
22
  "dependencies": {
23
- "@mtcute/tl": "^166.0.0",
23
+ "@mtcute/tl": "^166.1.0",
24
24
  "@mtcute/tl-runtime": "^0.1.1",
25
25
  "@mtcute/wasm": "^0.1.1",
26
26
  "@types/events": "3.0.0",