@mtcute/core 0.1.0 → 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 (461) hide show
  1. package/cjs/base-client.js +4 -1
  2. package/cjs/base-client.js.map +1 -1
  3. package/cjs/network/auth-key.d.ts +3 -3
  4. package/cjs/network/auth-key.js +12 -12
  5. package/cjs/network/auth-key.js.map +1 -1
  6. package/cjs/network/auth-key.test.d.ts +1 -0
  7. package/cjs/network/auth-key.test.js +111 -0
  8. package/cjs/network/auth-key.test.js.map +1 -0
  9. package/cjs/network/authorization.js +62 -57
  10. package/cjs/network/authorization.js.map +1 -1
  11. package/cjs/network/config-manager.js +2 -1
  12. package/cjs/network/config-manager.js.map +1 -1
  13. package/cjs/network/config-manager.test.d.ts +1 -0
  14. package/cjs/network/config-manager.test.js +170 -0
  15. package/cjs/network/config-manager.test.js.map +1 -0
  16. package/cjs/network/mtproto-session.d.ts +2 -2
  17. package/cjs/network/mtproto-session.js +2 -2
  18. package/cjs/network/mtproto-session.js.map +1 -1
  19. package/cjs/network/multi-session-connection.d.ts +1 -1
  20. package/cjs/network/multi-session-connection.js +2 -2
  21. package/cjs/network/multi-session-connection.js.map +1 -1
  22. package/cjs/network/network-manager.d.ts +1 -0
  23. package/cjs/network/network-manager.js +21 -27
  24. package/cjs/network/network-manager.js.map +1 -1
  25. package/cjs/network/persistent-connection.test.d.ts +1 -0
  26. package/cjs/network/persistent-connection.test.js +157 -0
  27. package/cjs/network/persistent-connection.test.js.map +1 -0
  28. package/cjs/network/session-connection.d.ts +2 -1
  29. package/cjs/network/session-connection.js +51 -37
  30. package/cjs/network/session-connection.js.map +1 -1
  31. package/cjs/network/transports/intermediate.d.ts +3 -0
  32. package/cjs/network/transports/intermediate.js +5 -3
  33. package/cjs/network/transports/intermediate.js.map +1 -1
  34. package/cjs/network/transports/intermediate.test.d.ts +1 -0
  35. package/cjs/network/transports/intermediate.test.js +86 -0
  36. package/cjs/network/transports/intermediate.test.js.map +1 -0
  37. package/cjs/network/transports/obfuscated.js +15 -19
  38. package/cjs/network/transports/obfuscated.js.map +1 -1
  39. package/cjs/network/transports/obfuscated.test.d.ts +1 -0
  40. package/cjs/network/transports/obfuscated.test.js +131 -0
  41. package/cjs/network/transports/obfuscated.test.js.map +1 -0
  42. package/cjs/network/transports/tcp.js +1 -1
  43. package/cjs/network/transports/tcp.js.map +1 -1
  44. package/cjs/network/transports/tcp.test.d.ts +1 -0
  45. package/cjs/network/transports/tcp.test.js +97 -0
  46. package/cjs/network/transports/tcp.test.js.map +1 -0
  47. package/cjs/network/transports/websocket.test.d.ts +1 -0
  48. package/cjs/network/transports/websocket.test.js +91 -0
  49. package/cjs/network/transports/websocket.test.js.map +1 -0
  50. package/cjs/storage/abstract.d.ts +23 -2
  51. package/cjs/storage/abstract.js.map +1 -1
  52. package/cjs/storage/json.js +8 -9
  53. package/cjs/storage/json.js.map +1 -1
  54. package/cjs/storage/json.test.d.ts +1 -0
  55. package/cjs/storage/json.test.js +37 -0
  56. package/cjs/storage/json.test.js.map +1 -0
  57. package/cjs/storage/localstorage.js +5 -2
  58. package/cjs/storage/localstorage.js.map +1 -1
  59. package/cjs/storage/localstorage.test.d.ts +1 -0
  60. package/cjs/storage/localstorage.test.js +23 -0
  61. package/cjs/storage/localstorage.test.js.map +1 -0
  62. package/cjs/storage/memory.d.ts +7 -8
  63. package/cjs/storage/memory.js +7 -7
  64. package/cjs/storage/memory.js.map +1 -1
  65. package/cjs/storage/memory.test.d.ts +1 -0
  66. package/cjs/storage/memory.test.js +47 -0
  67. package/cjs/storage/memory.test.js.map +1 -0
  68. package/cjs/utils/async-lock.test.d.ts +1 -0
  69. package/cjs/utils/async-lock.test.js +25 -0
  70. package/cjs/utils/async-lock.test.js.map +1 -0
  71. package/cjs/utils/bigint-utils.d.ts +18 -11
  72. package/cjs/utils/bigint-utils.js +148 -47
  73. package/cjs/utils/bigint-utils.js.map +1 -1
  74. package/cjs/utils/bigint-utils.test.d.ts +1 -0
  75. package/cjs/utils/bigint-utils.test.js +150 -0
  76. package/cjs/utils/bigint-utils.test.js.map +1 -0
  77. package/cjs/utils/buffer-utils.d.ts +7 -1
  78. package/cjs/utils/buffer-utils.js +16 -3
  79. package/cjs/utils/buffer-utils.js.map +1 -1
  80. package/cjs/utils/buffer-utils.test.d.ts +1 -0
  81. package/cjs/utils/buffer-utils.test.js +69 -0
  82. package/cjs/utils/buffer-utils.test.js.map +1 -0
  83. package/cjs/utils/condition-variable.test.d.ts +1 -0
  84. package/cjs/utils/condition-variable.test.js +27 -0
  85. package/cjs/utils/condition-variable.test.js.map +1 -0
  86. package/cjs/utils/controllable-promise.test.d.ts +1 -0
  87. package/cjs/utils/controllable-promise.test.js +17 -0
  88. package/cjs/utils/controllable-promise.test.js.map +1 -0
  89. package/cjs/utils/crypto/abstract.d.ts +16 -9
  90. package/cjs/utils/crypto/abstract.js +6 -9
  91. package/cjs/utils/crypto/abstract.js.map +1 -1
  92. package/cjs/utils/crypto/factorization.d.ts +2 -1
  93. package/cjs/utils/crypto/factorization.js +28 -36
  94. package/cjs/utils/crypto/factorization.js.map +1 -1
  95. package/cjs/utils/crypto/index.d.ts +4 -0
  96. package/cjs/utils/crypto/index.js +4 -0
  97. package/cjs/utils/crypto/index.js.map +1 -1
  98. package/cjs/utils/crypto/keys.d.ts +2 -2
  99. package/cjs/utils/crypto/keys.js +4 -4
  100. package/cjs/utils/crypto/keys.js.map +1 -1
  101. package/cjs/utils/crypto/keys.test.d.ts +1 -0
  102. package/cjs/utils/crypto/keys.test.js +40 -0
  103. package/cjs/utils/crypto/keys.test.js.map +1 -0
  104. package/cjs/utils/crypto/miller-rabin.d.ts +2 -2
  105. package/cjs/utils/crypto/miller-rabin.js +20 -22
  106. package/cjs/utils/crypto/miller-rabin.js.map +1 -1
  107. package/cjs/utils/crypto/miller-rabin.test.d.ts +1 -0
  108. package/cjs/utils/crypto/miller-rabin.test.js +60 -0
  109. package/cjs/utils/crypto/miller-rabin.test.js.map +1 -0
  110. package/cjs/utils/crypto/mtproto.d.ts +3 -3
  111. package/cjs/utils/crypto/mtproto.js +12 -12
  112. package/cjs/utils/crypto/mtproto.js.map +1 -1
  113. package/cjs/utils/crypto/mtproto.test.d.ts +1 -0
  114. package/cjs/utils/crypto/mtproto.test.js +47 -0
  115. package/cjs/utils/crypto/mtproto.test.js.map +1 -0
  116. package/cjs/utils/crypto/node.d.ts +21 -0
  117. package/cjs/utils/crypto/node.js +74 -0
  118. package/cjs/utils/crypto/node.js.map +1 -0
  119. package/cjs/utils/crypto/node.test.d.ts +1 -0
  120. package/cjs/utils/crypto/node.test.js +13 -0
  121. package/cjs/utils/crypto/node.test.js.map +1 -0
  122. package/cjs/utils/crypto/password.js +22 -33
  123. package/cjs/utils/crypto/password.js.map +1 -1
  124. package/cjs/utils/crypto/password.test.d.ts +1 -0
  125. package/cjs/utils/crypto/password.test.js +95 -0
  126. package/cjs/utils/crypto/password.test.js.map +1 -0
  127. package/cjs/utils/crypto/utils.test.d.ts +1 -0
  128. package/cjs/utils/crypto/utils.test.js +49 -0
  129. package/cjs/utils/crypto/utils.test.js.map +1 -0
  130. package/cjs/utils/crypto/wasm.d.ts +22 -0
  131. package/cjs/utils/crypto/wasm.js +41 -0
  132. package/cjs/utils/crypto/wasm.js.map +1 -0
  133. package/cjs/utils/crypto/web.d.ts +11 -0
  134. package/cjs/utils/crypto/web.js +40 -0
  135. package/cjs/utils/crypto/web.js.map +1 -0
  136. package/cjs/utils/crypto/web.test.d.ts +1 -0
  137. package/cjs/utils/crypto/web.test.js +17 -0
  138. package/cjs/utils/crypto/web.test.js.map +1 -0
  139. package/cjs/utils/deque.d.ts +1 -1
  140. package/cjs/utils/deque.js +9 -3
  141. package/cjs/utils/deque.js.map +1 -1
  142. package/cjs/utils/deque.test.d.ts +1 -0
  143. package/cjs/utils/deque.test.js +128 -0
  144. package/cjs/utils/deque.test.js.map +1 -0
  145. package/cjs/utils/function-utils.d.ts +4 -1
  146. package/cjs/utils/function-utils.js +8 -1
  147. package/cjs/utils/function-utils.js.map +1 -1
  148. package/cjs/utils/function-utils.test.d.ts +1 -0
  149. package/cjs/utils/function-utils.test.js +23 -0
  150. package/cjs/utils/function-utils.test.js.map +1 -0
  151. package/cjs/utils/index.d.ts +0 -1
  152. package/cjs/utils/index.js +0 -1
  153. package/cjs/utils/index.js.map +1 -1
  154. package/cjs/utils/linked-list.test.d.ts +1 -0
  155. package/cjs/utils/linked-list.test.js +36 -0
  156. package/cjs/utils/linked-list.test.js.map +1 -0
  157. package/cjs/utils/links/bots.test.d.ts +1 -0
  158. package/cjs/utils/links/bots.test.js +152 -0
  159. package/cjs/utils/links/bots.test.js.map +1 -0
  160. package/cjs/utils/links/chat.test.d.ts +1 -0
  161. package/cjs/utils/links/chat.test.js +84 -0
  162. package/cjs/utils/links/chat.test.js.map +1 -0
  163. package/cjs/utils/links/misc.test.d.ts +1 -0
  164. package/cjs/utils/links/misc.test.js +153 -0
  165. package/cjs/utils/links/misc.test.js.map +1 -0
  166. package/cjs/utils/links/proxy.test.d.ts +1 -0
  167. package/cjs/utils/links/proxy.test.js +74 -0
  168. package/cjs/utils/links/proxy.test.js.map +1 -0
  169. package/cjs/utils/links/user.test.d.ts +1 -0
  170. package/cjs/utils/links/user.test.js +63 -0
  171. package/cjs/utils/links/user.test.js.map +1 -0
  172. package/cjs/utils/logger.d.ts +0 -1
  173. package/cjs/utils/logger.js +3 -4
  174. package/cjs/utils/logger.js.map +1 -1
  175. package/cjs/utils/logger.test.d.ts +1 -0
  176. package/cjs/utils/logger.test.js +125 -0
  177. package/cjs/utils/logger.test.js.map +1 -0
  178. package/cjs/utils/long-utils.test.d.ts +1 -0
  179. package/cjs/utils/long-utils.test.js +158 -0
  180. package/cjs/utils/long-utils.test.js.map +1 -0
  181. package/cjs/utils/lru-map.d.ts +1 -0
  182. package/cjs/utils/lru-map.js +6 -0
  183. package/cjs/utils/lru-map.js.map +1 -1
  184. package/cjs/utils/lru-map.test.d.ts +1 -0
  185. package/cjs/utils/lru-map.test.js +96 -0
  186. package/cjs/utils/lru-map.test.js.map +1 -0
  187. package/cjs/utils/lru-set.test.d.ts +1 -0
  188. package/cjs/utils/lru-set.test.js +77 -0
  189. package/cjs/utils/lru-set.test.js.map +1 -0
  190. package/cjs/utils/peer-utils.js +5 -1
  191. package/cjs/utils/peer-utils.js.map +1 -1
  192. package/cjs/utils/peer-utils.test.d.ts +1 -0
  193. package/cjs/utils/peer-utils.test.js +122 -0
  194. package/cjs/utils/peer-utils.test.js.map +1 -0
  195. package/cjs/utils/platform/crypto.js +2 -2
  196. package/cjs/utils/platform/crypto.js.map +1 -1
  197. package/cjs/utils/platform/crypto.web.js +2 -2
  198. package/cjs/utils/platform/crypto.web.js.map +1 -1
  199. package/cjs/utils/sorted-array.test.d.ts +1 -0
  200. package/cjs/utils/sorted-array.test.js +66 -0
  201. package/cjs/utils/sorted-array.test.js.map +1 -0
  202. package/cjs/utils/string-session.js +4 -2
  203. package/cjs/utils/string-session.js.map +1 -1
  204. package/cjs/utils/string-session.test.d.ts +1 -0
  205. package/cjs/utils/string-session.test.js +106 -0
  206. package/cjs/utils/string-session.test.js.map +1 -0
  207. package/cjs/utils/tl-json.test.d.ts +1 -0
  208. package/cjs/utils/tl-json.test.js +83 -0
  209. package/cjs/utils/tl-json.test.js.map +1 -0
  210. package/cjs/utils/type-assertions.test.d.ts +1 -0
  211. package/cjs/utils/type-assertions.test.js +67 -0
  212. package/cjs/utils/type-assertions.test.js.map +1 -0
  213. package/esm/base-client.js +4 -1
  214. package/esm/base-client.js.map +1 -1
  215. package/esm/network/auth-key.d.ts +3 -3
  216. package/esm/network/auth-key.js +13 -13
  217. package/esm/network/auth-key.js.map +1 -1
  218. package/esm/network/auth-key.test.d.ts +1 -0
  219. package/esm/network/auth-key.test.js +106 -0
  220. package/esm/network/auth-key.test.js.map +1 -0
  221. package/esm/network/authorization.js +64 -59
  222. package/esm/network/authorization.js.map +1 -1
  223. package/esm/network/config-manager.js +2 -1
  224. package/esm/network/config-manager.js.map +1 -1
  225. package/esm/network/config-manager.test.d.ts +1 -0
  226. package/esm/network/config-manager.test.js +168 -0
  227. package/esm/network/config-manager.test.js.map +1 -0
  228. package/esm/network/mtproto-session.d.ts +2 -2
  229. package/esm/network/mtproto-session.js +2 -2
  230. package/esm/network/mtproto-session.js.map +1 -1
  231. package/esm/network/multi-session-connection.d.ts +1 -1
  232. package/esm/network/multi-session-connection.js +2 -2
  233. package/esm/network/multi-session-connection.js.map +1 -1
  234. package/esm/network/network-manager.d.ts +1 -0
  235. package/esm/network/network-manager.js +21 -27
  236. package/esm/network/network-manager.js.map +1 -1
  237. package/esm/network/persistent-connection.test.d.ts +1 -0
  238. package/esm/network/persistent-connection.test.js +155 -0
  239. package/esm/network/persistent-connection.test.js.map +1 -0
  240. package/esm/network/session-connection.d.ts +2 -1
  241. package/esm/network/session-connection.js +53 -39
  242. package/esm/network/session-connection.js.map +1 -1
  243. package/esm/network/transports/intermediate.d.ts +3 -0
  244. package/esm/network/transports/intermediate.js +6 -4
  245. package/esm/network/transports/intermediate.js.map +1 -1
  246. package/esm/network/transports/intermediate.test.d.ts +1 -0
  247. package/esm/network/transports/intermediate.test.js +84 -0
  248. package/esm/network/transports/intermediate.test.js.map +1 -0
  249. package/esm/network/transports/obfuscated.js +16 -20
  250. package/esm/network/transports/obfuscated.js.map +1 -1
  251. package/esm/network/transports/obfuscated.test.d.ts +1 -0
  252. package/esm/network/transports/obfuscated.test.js +129 -0
  253. package/esm/network/transports/obfuscated.test.js.map +1 -0
  254. package/esm/network/transports/tcp.js +1 -1
  255. package/esm/network/transports/tcp.js.map +1 -1
  256. package/esm/network/transports/tcp.test.d.ts +1 -0
  257. package/esm/network/transports/tcp.test.js +95 -0
  258. package/esm/network/transports/tcp.test.js.map +1 -0
  259. package/esm/network/transports/websocket.test.d.ts +1 -0
  260. package/esm/network/transports/websocket.test.js +89 -0
  261. package/esm/network/transports/websocket.test.js.map +1 -0
  262. package/esm/storage/abstract.d.ts +23 -2
  263. package/esm/storage/abstract.js.map +1 -1
  264. package/esm/storage/json.js +8 -9
  265. package/esm/storage/json.js.map +1 -1
  266. package/esm/storage/json.test.d.ts +1 -0
  267. package/esm/storage/json.test.js +35 -0
  268. package/esm/storage/json.test.js.map +1 -0
  269. package/esm/storage/localstorage.js +5 -2
  270. package/esm/storage/localstorage.js.map +1 -1
  271. package/esm/storage/localstorage.test.d.ts +1 -0
  272. package/esm/storage/localstorage.test.js +21 -0
  273. package/esm/storage/localstorage.test.js.map +1 -0
  274. package/esm/storage/memory.d.ts +7 -8
  275. package/esm/storage/memory.js +7 -7
  276. package/esm/storage/memory.js.map +1 -1
  277. package/esm/storage/memory.test.d.ts +1 -0
  278. package/esm/storage/memory.test.js +45 -0
  279. package/esm/storage/memory.test.js.map +1 -0
  280. package/esm/utils/async-lock.test.d.ts +1 -0
  281. package/esm/utils/async-lock.test.js +23 -0
  282. package/esm/utils/async-lock.test.js.map +1 -0
  283. package/esm/utils/bigint-utils.d.ts +18 -11
  284. package/esm/utils/bigint-utils.js +142 -44
  285. package/esm/utils/bigint-utils.js.map +1 -1
  286. package/esm/utils/bigint-utils.test.d.ts +1 -0
  287. package/esm/utils/bigint-utils.test.js +148 -0
  288. package/esm/utils/bigint-utils.test.js.map +1 -0
  289. package/esm/utils/buffer-utils.d.ts +7 -1
  290. package/esm/utils/buffer-utils.js +14 -1
  291. package/esm/utils/buffer-utils.js.map +1 -1
  292. package/esm/utils/buffer-utils.test.d.ts +1 -0
  293. package/esm/utils/buffer-utils.test.js +67 -0
  294. package/esm/utils/buffer-utils.test.js.map +1 -0
  295. package/esm/utils/condition-variable.test.d.ts +1 -0
  296. package/esm/utils/condition-variable.test.js +25 -0
  297. package/esm/utils/condition-variable.test.js.map +1 -0
  298. package/esm/utils/controllable-promise.test.d.ts +1 -0
  299. package/esm/utils/controllable-promise.test.js +15 -0
  300. package/esm/utils/controllable-promise.test.js.map +1 -0
  301. package/esm/utils/crypto/abstract.d.ts +16 -9
  302. package/esm/utils/crypto/abstract.js +6 -9
  303. package/esm/utils/crypto/abstract.js.map +1 -1
  304. package/esm/utils/crypto/factorization.d.ts +2 -1
  305. package/esm/utils/crypto/factorization.js +29 -34
  306. package/esm/utils/crypto/factorization.js.map +1 -1
  307. package/esm/utils/crypto/index.d.ts +4 -0
  308. package/esm/utils/crypto/index.js +4 -0
  309. package/esm/utils/crypto/index.js.map +1 -1
  310. package/esm/utils/crypto/keys.d.ts +2 -2
  311. package/esm/utils/crypto/keys.js +4 -4
  312. package/esm/utils/crypto/keys.js.map +1 -1
  313. package/esm/utils/crypto/keys.test.d.ts +1 -0
  314. package/esm/utils/crypto/keys.test.js +38 -0
  315. package/esm/utils/crypto/keys.test.js.map +1 -0
  316. package/esm/utils/crypto/miller-rabin.d.ts +2 -2
  317. package/esm/utils/crypto/miller-rabin.js +21 -20
  318. package/esm/utils/crypto/miller-rabin.js.map +1 -1
  319. package/esm/utils/crypto/miller-rabin.test.d.ts +1 -0
  320. package/esm/utils/crypto/miller-rabin.test.js +58 -0
  321. package/esm/utils/crypto/miller-rabin.test.js.map +1 -0
  322. package/esm/utils/crypto/mtproto.d.ts +3 -3
  323. package/esm/utils/crypto/mtproto.js +12 -12
  324. package/esm/utils/crypto/mtproto.js.map +1 -1
  325. package/esm/utils/crypto/mtproto.test.d.ts +1 -0
  326. package/esm/utils/crypto/mtproto.test.js +45 -0
  327. package/esm/utils/crypto/mtproto.test.js.map +1 -0
  328. package/esm/utils/crypto/node.d.ts +21 -0
  329. package/esm/utils/crypto/node.js +69 -0
  330. package/esm/utils/crypto/node.js.map +1 -0
  331. package/esm/utils/crypto/node.test.d.ts +1 -0
  332. package/esm/utils/crypto/node.test.js +11 -0
  333. package/esm/utils/crypto/node.test.js.map +1 -0
  334. package/esm/utils/crypto/password.js +24 -32
  335. package/esm/utils/crypto/password.js.map +1 -1
  336. package/esm/utils/crypto/password.test.d.ts +1 -0
  337. package/esm/utils/crypto/password.test.js +90 -0
  338. package/esm/utils/crypto/password.test.js.map +1 -0
  339. package/esm/utils/crypto/utils.test.d.ts +1 -0
  340. package/esm/utils/crypto/utils.test.js +47 -0
  341. package/esm/utils/crypto/utils.test.js.map +1 -0
  342. package/esm/utils/crypto/wasm.d.ts +22 -0
  343. package/esm/utils/crypto/wasm.js +37 -0
  344. package/esm/utils/crypto/wasm.js.map +1 -0
  345. package/esm/utils/crypto/web.d.ts +11 -0
  346. package/esm/utils/crypto/web.js +36 -0
  347. package/esm/utils/crypto/web.js.map +1 -0
  348. package/esm/utils/crypto/web.test.d.ts +1 -0
  349. package/esm/utils/crypto/web.test.js +15 -0
  350. package/esm/utils/crypto/web.test.js.map +1 -0
  351. package/esm/utils/deque.d.ts +1 -1
  352. package/esm/utils/deque.js +9 -3
  353. package/esm/utils/deque.js.map +1 -1
  354. package/esm/utils/deque.test.d.ts +1 -0
  355. package/esm/utils/deque.test.js +126 -0
  356. package/esm/utils/deque.test.js.map +1 -0
  357. package/esm/utils/function-utils.d.ts +4 -1
  358. package/esm/utils/function-utils.js +8 -1
  359. package/esm/utils/function-utils.js.map +1 -1
  360. package/esm/utils/function-utils.test.d.ts +1 -0
  361. package/esm/utils/function-utils.test.js +21 -0
  362. package/esm/utils/function-utils.test.js.map +1 -0
  363. package/esm/utils/index.d.ts +0 -1
  364. package/esm/utils/index.js +0 -1
  365. package/esm/utils/index.js.map +1 -1
  366. package/esm/utils/linked-list.test.d.ts +1 -0
  367. package/esm/utils/linked-list.test.js +34 -0
  368. package/esm/utils/linked-list.test.js.map +1 -0
  369. package/esm/utils/links/bots.test.d.ts +1 -0
  370. package/esm/utils/links/bots.test.js +150 -0
  371. package/esm/utils/links/bots.test.js.map +1 -0
  372. package/esm/utils/links/chat.test.d.ts +1 -0
  373. package/esm/utils/links/chat.test.js +82 -0
  374. package/esm/utils/links/chat.test.js.map +1 -0
  375. package/esm/utils/links/misc.test.d.ts +1 -0
  376. package/esm/utils/links/misc.test.js +151 -0
  377. package/esm/utils/links/misc.test.js.map +1 -0
  378. package/esm/utils/links/proxy.test.d.ts +1 -0
  379. package/esm/utils/links/proxy.test.js +72 -0
  380. package/esm/utils/links/proxy.test.js.map +1 -0
  381. package/esm/utils/links/user.test.d.ts +1 -0
  382. package/esm/utils/links/user.test.js +61 -0
  383. package/esm/utils/links/user.test.js.map +1 -0
  384. package/esm/utils/logger.d.ts +0 -1
  385. package/esm/utils/logger.js +3 -4
  386. package/esm/utils/logger.js.map +1 -1
  387. package/esm/utils/logger.test.d.ts +1 -0
  388. package/esm/utils/logger.test.js +120 -0
  389. package/esm/utils/logger.test.js.map +1 -0
  390. package/esm/utils/long-utils.test.d.ts +1 -0
  391. package/esm/utils/long-utils.test.js +153 -0
  392. package/esm/utils/long-utils.test.js.map +1 -0
  393. package/esm/utils/lru-map.d.ts +1 -0
  394. package/esm/utils/lru-map.js +6 -0
  395. package/esm/utils/lru-map.js.map +1 -1
  396. package/esm/utils/lru-map.test.d.ts +1 -0
  397. package/esm/utils/lru-map.test.js +94 -0
  398. package/esm/utils/lru-map.test.js.map +1 -0
  399. package/esm/utils/lru-set.test.d.ts +1 -0
  400. package/esm/utils/lru-set.test.js +72 -0
  401. package/esm/utils/lru-set.test.js.map +1 -0
  402. package/esm/utils/peer-utils.js +5 -1
  403. package/esm/utils/peer-utils.js.map +1 -1
  404. package/esm/utils/peer-utils.test.d.ts +1 -0
  405. package/esm/utils/peer-utils.test.js +117 -0
  406. package/esm/utils/peer-utils.test.js.map +1 -0
  407. package/esm/utils/platform/crypto.js +1 -1
  408. package/esm/utils/platform/crypto.js.map +1 -1
  409. package/esm/utils/platform/crypto.web.js +2 -2
  410. package/esm/utils/platform/crypto.web.js.map +1 -1
  411. package/esm/utils/sorted-array.test.d.ts +1 -0
  412. package/esm/utils/sorted-array.test.js +64 -0
  413. package/esm/utils/sorted-array.test.js.map +1 -0
  414. package/esm/utils/string-session.js +4 -2
  415. package/esm/utils/string-session.js.map +1 -1
  416. package/esm/utils/string-session.test.d.ts +1 -0
  417. package/esm/utils/string-session.test.js +104 -0
  418. package/esm/utils/string-session.test.js.map +1 -0
  419. package/esm/utils/tl-json.test.d.ts +1 -0
  420. package/esm/utils/tl-json.test.js +81 -0
  421. package/esm/utils/tl-json.test.js.map +1 -0
  422. package/esm/utils/type-assertions.test.d.ts +1 -0
  423. package/esm/utils/type-assertions.test.js +65 -0
  424. package/esm/utils/type-assertions.test.js.map +1 -0
  425. package/package.json +4 -5
  426. package/cjs/utils/crypto/common.d.ts +0 -12
  427. package/cjs/utils/crypto/common.js +0 -54
  428. package/cjs/utils/crypto/common.js.map +0 -1
  429. package/cjs/utils/crypto/node-crypto.d.ts +0 -10
  430. package/cjs/utils/crypto/node-crypto.js +0 -46
  431. package/cjs/utils/crypto/node-crypto.js.map +0 -1
  432. package/cjs/utils/crypto/subtle.d.ts +0 -12
  433. package/cjs/utils/crypto/subtle.js +0 -86
  434. package/cjs/utils/crypto/subtle.js.map +0 -1
  435. package/cjs/utils/flood-control.d.ts +0 -14
  436. package/cjs/utils/flood-control.js +0 -65
  437. package/cjs/utils/flood-control.js.map +0 -1
  438. package/cjs/utils/platform/random.d.ts +0 -1
  439. package/cjs/utils/platform/random.js +0 -7
  440. package/cjs/utils/platform/random.js.map +0 -1
  441. package/cjs/utils/platform/random.web.d.ts +0 -1
  442. package/cjs/utils/platform/random.web.js +0 -10
  443. package/cjs/utils/platform/random.web.js.map +0 -1
  444. package/esm/utils/crypto/common.d.ts +0 -12
  445. package/esm/utils/crypto/common.js +0 -50
  446. package/esm/utils/crypto/common.js.map +0 -1
  447. package/esm/utils/crypto/node-crypto.d.ts +0 -10
  448. package/esm/utils/crypto/node-crypto.js +0 -42
  449. package/esm/utils/crypto/node-crypto.js.map +0 -1
  450. package/esm/utils/crypto/subtle.d.ts +0 -12
  451. package/esm/utils/crypto/subtle.js +0 -59
  452. package/esm/utils/crypto/subtle.js.map +0 -1
  453. package/esm/utils/flood-control.d.ts +0 -14
  454. package/esm/utils/flood-control.js +0 -61
  455. package/esm/utils/flood-control.js.map +0 -1
  456. package/esm/utils/platform/random.d.ts +0 -1
  457. package/esm/utils/platform/random.js +0 -4
  458. package/esm/utils/platform/random.js.map +0 -1
  459. package/esm/utils/platform/random.web.d.ts +0 -1
  460. package/esm/utils/platform/random.web.js +0 -6
  461. package/esm/utils/platform/random.web.js.map +0 -1
@@ -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"]}
@@ -1,4 +1,4 @@
1
- import { NodeCryptoProvider } from '../crypto/node-crypto.js';
1
+ import { NodeCryptoProvider } from '../crypto/node.js';
2
2
  /** @internal */
3
3
  export const _defaultCryptoProviderFactory = () => new NodeCryptoProvider();
4
4
  //# sourceMappingURL=crypto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/utils/platform/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,gBAAgB;AAChB,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,EAAE,CAAC,IAAI,kBAAkB,EAAE,CAAA","sourcesContent":["import { NodeCryptoProvider } from '../crypto/node-crypto.js'\n\n/** @internal */\nexport const _defaultCryptoProviderFactory = () => new NodeCryptoProvider()\n"]}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/utils/platform/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,gBAAgB;AAChB,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,EAAE,CAAC,IAAI,kBAAkB,EAAE,CAAA","sourcesContent":["import { NodeCryptoProvider } from '../crypto/node.js'\n\n/** @internal */\nexport const _defaultCryptoProviderFactory = () => new NodeCryptoProvider()\n"]}
@@ -1,10 +1,10 @@
1
1
  import { MtUnsupportedError } from '../../index.js';
2
- import { SubtleCryptoProvider } from '../crypto/subtle.js';
2
+ import { WebCryptoProvider } from '../crypto/web.js';
3
3
  /** @internal */
4
4
  export const _defaultCryptoProviderFactory = () => {
5
5
  if (typeof crypto === 'undefined' || typeof crypto.subtle === 'undefined') {
6
6
  throw new MtUnsupportedError('WebCrypto API is not available');
7
7
  }
8
- return new SubtleCryptoProvider(crypto.subtle);
8
+ return new WebCryptoProvider({ crypto });
9
9
  };
10
10
  //# sourceMappingURL=crypto.web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.web.js","sourceRoot":"","sources":["../../../../src/utils/platform/crypto.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,gBAAgB;AAChB,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,EAAE;IAC9C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;QACvE,MAAM,IAAI,kBAAkB,CAAC,gCAAgC,CAAC,CAAA;KACjE;IAED,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAClD,CAAC,CAAA","sourcesContent":["import { MtUnsupportedError } from '../../index.js'\nimport { SubtleCryptoProvider } from '../crypto/subtle.js'\n\n/** @internal */\nexport const _defaultCryptoProviderFactory = () => {\n if (typeof crypto === 'undefined' || typeof crypto.subtle === 'undefined') {\n throw new MtUnsupportedError('WebCrypto API is not available')\n }\n\n return new SubtleCryptoProvider(crypto.subtle)\n}\n"]}
1
+ {"version":3,"file":"crypto.web.js","sourceRoot":"","sources":["../../../../src/utils/platform/crypto.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,gBAAgB;AAChB,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,EAAE;IAC9C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;QACvE,MAAM,IAAI,kBAAkB,CAAC,gCAAgC,CAAC,CAAA;KACjE;IAED,OAAO,IAAI,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AAC5C,CAAC,CAAA","sourcesContent":["import { MtUnsupportedError } from '../../index.js'\nimport { WebCryptoProvider } from '../crypto/web.js'\n\n/** @internal */\nexport const _defaultCryptoProviderFactory = () => {\n if (typeof crypto === 'undefined' || typeof crypto.subtle === 'undefined') {\n throw new MtUnsupportedError('WebCrypto API is not available')\n }\n\n return new WebCryptoProvider({ crypto })\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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;IAE3D,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,MAAM,GAAG,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAE5D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAE5D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAE3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAE5D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAE5D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAChE,MAAM,GAAG,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAE5D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,iCAAiC;QACvE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAE5D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAS,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAE5D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","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"]}
@@ -15,10 +15,12 @@ export function writeStringSession(writerMap, data) {
15
15
  }
16
16
  writer.uint8View[0] = version;
17
17
  writer.pos += 1;
18
+ if (version >= 2 && data.primaryDcs.media !== data.primaryDcs.main) {
19
+ flags |= 4;
20
+ }
18
21
  writer.int(flags);
19
22
  writer.object(data.primaryDcs.main);
20
23
  if (version >= 2 && data.primaryDcs.media !== data.primaryDcs.main) {
21
- flags |= 4;
22
24
  writer.object(data.primaryDcs.media);
23
25
  }
24
26
  if (data.self) {
@@ -55,7 +57,7 @@ export function readStringSession(readerMap, data) {
55
57
  }
56
58
  const key = reader.bytes();
57
59
  return {
58
- version: 1,
60
+ version,
59
61
  testMode,
60
62
  primaryDcs: {
61
63
  main: primaryDc,
@@ -1 +1 @@
1
- {"version":3,"file":"string-session.js","sourceRoot":"","sources":["../../../src/utils/string-session.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\nimport {\n base64DecodeToBuffer,\n base64Encode,\n TlBinaryReader,\n TlBinaryWriter,\n TlReaderMap,\n TlWriterMap,\n} from '@mtcute/tl-runtime'\n\nimport { ITelegramStorage } from '../storage/index.js'\nimport { MtArgumentError } from '../types/index.js'\n\nexport interface StringSessionData {\n version: number\n testMode: boolean\n primaryDcs: ITelegramStorage.DcOptions\n self?: ITelegramStorage.SelfInfo | null\n authKey: Uint8Array\n}\n\nexport function writeStringSession(writerMap: TlWriterMap, data: StringSessionData): string {\n const writer = TlBinaryWriter.alloc(writerMap, 512)\n\n const version = data.version\n\n if (version !== 1 && version !== 2) {\n throw new MtArgumentError(`Unsupported string session version: ${version}`)\n }\n\n let flags = 0\n\n if (data.self) {\n flags |= 1\n }\n\n if (data.testMode) {\n flags |= 2\n }\n\n writer.uint8View[0] = version\n writer.pos += 1\n\n writer.int(flags)\n writer.object(data.primaryDcs.main)\n\n if (version >= 2 && data.primaryDcs.media !== data.primaryDcs.main) {\n flags |= 4\n writer.object(data.primaryDcs.media)\n }\n\n if (data.self) {\n writer.int53(data.self.userId)\n writer.boolean(data.self.isBot)\n }\n\n writer.bytes(data.authKey)\n\n return base64Encode(writer.result(), true)\n}\n\nexport function readStringSession(readerMap: TlReaderMap, data: string): StringSessionData {\n const buf = base64DecodeToBuffer(data, true)\n\n const version = buf[0]\n\n if (version !== 1 && version !== 2) {\n throw new Error(`Invalid session string (version = ${version})`)\n }\n\n const reader = new TlBinaryReader(readerMap, buf, 1)\n\n const flags = reader.int()\n const hasSelf = flags & 1\n const testMode = Boolean(flags & 2)\n const hasMedia = version >= 2 && Boolean(flags & 4)\n\n const primaryDc = reader.object() as tl.TypeDcOption\n const primaryMediaDc = hasMedia ? (reader.object() as tl.TypeDcOption) : primaryDc\n\n if (primaryDc._ !== 'dcOption') {\n throw new MtArgumentError(`Invalid session string (dc._ = ${primaryDc._})`)\n }\n\n let self: ITelegramStorage.SelfInfo | null = null\n\n if (hasSelf) {\n const selfId = reader.int53()\n const selfBot = reader.boolean()\n\n self = {\n userId: selfId,\n isBot: selfBot,\n }\n }\n\n const key = reader.bytes()\n\n return {\n version: 1,\n testMode,\n primaryDcs: {\n main: primaryDc,\n media: primaryMediaDc,\n },\n self,\n authKey: key,\n }\n}\n"]}
1
+ {"version":3,"file":"string-session.js","sourceRoot":"","sources":["../../../src/utils/string-session.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\nimport {\n base64DecodeToBuffer,\n base64Encode,\n TlBinaryReader,\n TlBinaryWriter,\n TlReaderMap,\n TlWriterMap,\n} from '@mtcute/tl-runtime'\n\nimport { ITelegramStorage } from '../storage/index.js'\nimport { MtArgumentError } from '../types/index.js'\n\nexport interface StringSessionData {\n version: number\n testMode: boolean\n primaryDcs: ITelegramStorage.DcOptions\n self?: ITelegramStorage.SelfInfo | null\n authKey: Uint8Array\n}\n\nexport function writeStringSession(writerMap: TlWriterMap, data: StringSessionData): string {\n const writer = TlBinaryWriter.alloc(writerMap, 512)\n\n const version = data.version\n\n if (version !== 1 && version !== 2) {\n throw new MtArgumentError(`Unsupported string session version: ${version}`)\n }\n\n let flags = 0\n\n if (data.self) {\n flags |= 1\n }\n\n if (data.testMode) {\n flags |= 2\n }\n\n writer.uint8View[0] = version\n writer.pos += 1\n\n if (version >= 2 && data.primaryDcs.media !== data.primaryDcs.main) {\n flags |= 4\n }\n\n writer.int(flags)\n writer.object(data.primaryDcs.main)\n\n if (version >= 2 && data.primaryDcs.media !== data.primaryDcs.main) {\n writer.object(data.primaryDcs.media)\n }\n\n if (data.self) {\n writer.int53(data.self.userId)\n writer.boolean(data.self.isBot)\n }\n\n writer.bytes(data.authKey)\n\n return base64Encode(writer.result(), true)\n}\n\nexport function readStringSession(readerMap: TlReaderMap, data: string): StringSessionData {\n const buf = base64DecodeToBuffer(data, true)\n\n const version = buf[0]\n\n if (version !== 1 && version !== 2) {\n throw new Error(`Invalid session string (version = ${version})`)\n }\n\n const reader = new TlBinaryReader(readerMap, buf, 1)\n\n const flags = reader.int()\n const hasSelf = flags & 1\n const testMode = Boolean(flags & 2)\n const hasMedia = version >= 2 && Boolean(flags & 4)\n\n const primaryDc = reader.object() as tl.TypeDcOption\n const primaryMediaDc = hasMedia ? (reader.object() as tl.TypeDcOption) : primaryDc\n\n if (primaryDc._ !== 'dcOption') {\n throw new MtArgumentError(`Invalid session string (dc._ = ${primaryDc._})`)\n }\n\n let self: ITelegramStorage.SelfInfo | null = null\n\n if (hasSelf) {\n const selfId = reader.int53()\n const selfBot = reader.boolean()\n\n self = {\n userId: selfId,\n isBot: selfBot,\n }\n }\n\n const key = reader.bytes()\n\n return {\n version,\n testMode,\n primaryDcs: {\n main: primaryDc,\n media: primaryMediaDc,\n },\n self,\n authKey: key,\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":"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","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