@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 @@
1
+ {"version":3,"file":"deque.test.js","sourceRoot":"","sources":["../../../src/utils/deque.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACnB,SAAS,aAAa;QAClB,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;QAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACzB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;SAChB;QAED,2BAA2B;QAE3B,CAAC,CAAC,QAAQ,EAAE,CAAA;QACZ,CAAC,CAAC,QAAQ,EAAE,CAAA;QACZ,CAAC,CAAC,QAAQ,EAAE,CAAA;QAEZ,2BAA2B;QAE3B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAEd,4BAA4B;QAC5B,OAAO,CAAC,CAAA;IACZ,CAAC;IAED,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,GAAG,IAAI,KAAK,EAAU,CAAA;QAE7B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,GAAG,IAAI,KAAK,EAAU,CAAA;QAE7B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACd,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACd,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAEd,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,GAAG,IAAI,KAAK,EAAU,CAAA;QAE7B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,IAAI,KAAK,EAAU,CAAA;QAE7B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACd,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACd,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAEd,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,IAAI,KAAK,EAAU,CAAA;QAE7B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,GAAG,aAAa,EAAE,CAAA;QAEzB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACjD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAA;QAE9B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAErC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;QAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;YAC1B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;SAChB;QAED,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAE3E,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACxB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACjC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC,CAAA;QAEzD,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEb,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACX,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAEX,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;QAExD,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEb,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;QAE3B,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,IAAI,KAAK,EAAU,CAAA;QAE7B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,IAAI,KAAK,EAAU,CAAA;QAE7B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACb,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEb,CAAC,CAAC,KAAK,EAAE,CAAA;QAET,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { Deque } from './deque.js'\n\ndescribe('Deque', () => {\n function setupWrapping() {\n const d = new Deque<number>(Infinity, /* capacity: */ 8)\n\n for (let i = 1; i <= 7; i++) {\n d.pushBack(i)\n }\n\n // [1, 2, 3, 4, 5, 6, 7, _]\n\n d.popFront()\n d.popFront()\n d.popFront()\n\n // [_, _, _, 4, 5, 6, 7, _]\n\n d.pushBack(8)\n d.pushBack(9)\n d.pushBack(10)\n\n // [9, 10, _, 4, 5, 6, 7, 8]\n return d\n }\n\n it('should push items to the end correctly', () => {\n const d = new Deque<number>()\n\n d.pushBack(1)\n d.pushBack(2)\n d.pushBack(3)\n\n expect(d.toArray()).eql([1, 2, 3])\n expect([...d.iter()]).eql([1, 2, 3])\n })\n\n it('should push items to the start correctly', () => {\n const d = new Deque<number>()\n\n d.pushFront(1)\n d.pushFront(2)\n d.pushFront(3)\n\n expect(d.toArray()).eql([3, 2, 1])\n })\n\n it('should pop items from the end correctly', () => {\n const d = new Deque<number>()\n\n d.pushBack(1)\n d.pushBack(2)\n d.pushBack(3)\n\n expect(d.popBack()).eql(3)\n expect(d.popBack()).eql(2)\n expect(d.popBack()).eql(1)\n })\n\n it('should pop items from the start correctly', () => {\n const d = new Deque<number>()\n\n d.pushFront(1)\n d.pushFront(2)\n d.pushFront(3)\n\n expect(d.popFront()).eql(3)\n expect(d.popFront()).eql(2)\n expect(d.popFront()).eql(1)\n })\n\n it('should return the correct length', () => {\n const d = new Deque<number>()\n\n d.pushBack(1)\n d.pushBack(2)\n d.pushBack(3)\n\n expect(d.length).eql(3)\n })\n\n it('accessors should correctly wrap around', () => {\n const d = setupWrapping()\n\n expect(d.toArray()).eql([4, 5, 6, 7, 8, 9, 10])\n expect([...d.iter()]).eql([4, 5, 6, 7, 8, 9, 10])\n expect(d.at(6)).eql(10)\n })\n\n it('should handle maxLength by removing items from the other end', () => {\n const d = new Deque<number>(4)\n\n d.pushBack(1)\n d.pushBack(2)\n d.pushBack(3)\n d.pushBack(4)\n\n d.pushBack(5)\n expect(d.toArray()).eql([2, 3, 4, 5])\n\n d.pushFront(6)\n expect(d.toArray()).eql([6, 2, 3, 4])\n })\n\n it('should correctly resize', () => {\n const d = new Deque<number>(Infinity, /* capacity: */ 8)\n\n for (let i = 0; i <= 16; i++) {\n d.pushBack(i)\n }\n\n const expected = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]\n\n expect(d.length).eql(17)\n expect(d.toArray()).eql(expected)\n expect([...d.iter()]).eql(expected)\n expect(d.at(16)).eql(16)\n })\n\n it('should correctly remove items', () => {\n const d = new Deque<number>(Infinity, /* capacity: */ 16)\n\n d.pushBack(1)\n d.pushBack(2)\n d.pushBack(3)\n d.pushBack(4)\n d.pushBack(5)\n\n d.remove(1)\n d.remove(4)\n\n expect(d.toArray()).eql([2, 3, 5])\n })\n\n it('should correctly remove items by predicate (the first matched)', () => {\n const d = new Deque<number>(Infinity, /* capacity: */ 4)\n\n d.pushBack(1)\n d.pushBack(2)\n d.pushBack(3)\n d.pushBack(4)\n d.pushBack(5)\n\n d.removeBy((it) => it >= 2)\n\n expect(d.toArray()).eql([1, 3, 4, 5])\n })\n\n it('should correctly peek at edges', () => {\n const d = new Deque<number>()\n\n d.pushBack(1)\n d.pushBack(2)\n\n expect(d.peekFront()).eql(1)\n expect(d.peekBack()).eql(2)\n })\n\n it('should correctly clear', () => {\n const d = new Deque<number>()\n\n d.pushBack(1)\n d.pushBack(2)\n\n d.clear()\n\n expect(d.length).eql(0)\n expect(d.toArray()).eql([])\n expect([...d.iter()]).eql([])\n })\n})\n"]}
@@ -1,3 +1,6 @@
1
+ export type ThrottledFunction = (() => void) & {
2
+ reset: () => void;
3
+ };
1
4
  /**
2
5
  * Throttle a function with a given delay.
3
6
  * Similar to lodash.
@@ -10,4 +13,4 @@
10
13
  * @param func Function to throttle
11
14
  * @param delay Throttle delay
12
15
  */
13
- export declare function throttle(func: () => void, delay: number): () => void;
16
+ export declare function throttle(func: () => void, delay: number): ThrottledFunction;
@@ -12,7 +12,7 @@
12
12
  */
13
13
  export function throttle(func, delay) {
14
14
  let timeout;
15
- return function () {
15
+ const res = function () {
16
16
  if (timeout) {
17
17
  return;
18
18
  }
@@ -22,5 +22,12 @@ export function throttle(func, delay) {
22
22
  };
23
23
  timeout = setTimeout(later, delay);
24
24
  };
25
+ res.reset = () => {
26
+ if (timeout) {
27
+ clearTimeout(timeout);
28
+ timeout = null;
29
+ }
30
+ };
31
+ return res;
25
32
  }
26
33
  //# sourceMappingURL=function-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"function-utils.js","sourceRoot":"","sources":["../../../src/utils/function-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAgB,EAAE,KAAa;IACpD,IAAI,OAA8B,CAAA;IAElC,OAAO;QACH,IAAI,OAAO,EAAE;YACT,OAAM;SACT;QAED,MAAM,KAAK,GAAG,GAAG,EAAE;YACf,OAAO,GAAG,IAAI,CAAA;YACd,IAAI,EAAE,CAAA;QACV,CAAC,CAAA;QACD,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC,CAAA;AACL,CAAC","sourcesContent":["/**\n * Throttle a function with a given delay.\n * Similar to lodash.\n *\n * Throttling `F` for a delay of `D` means that\n * `F` will be called no more than 1 time every `D`.\n * In this implementation, `F` is called after `D`\n * has passed since the previous non-throttled invocation\n *\n * @param func Function to throttle\n * @param delay Throttle delay\n */\nexport function throttle(func: () => void, delay: number): () => void {\n let timeout: NodeJS.Timeout | null\n\n return function () {\n if (timeout) {\n return\n }\n\n const later = () => {\n timeout = null\n func()\n }\n timeout = setTimeout(later, delay)\n }\n}\n"]}
1
+ {"version":3,"file":"function-utils.js","sourceRoot":"","sources":["../../../src/utils/function-utils.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAgB,EAAE,KAAa;IACpD,IAAI,OAA8B,CAAA;IAElC,MAAM,GAAG,GAAsB;QAC3B,IAAI,OAAO,EAAE;YACT,OAAM;SACT;QAED,MAAM,KAAK,GAAG,GAAG,EAAE;YACf,OAAO,GAAG,IAAI,CAAA;YACd,IAAI,EAAE,CAAA;QACV,CAAC,CAAA;QACD,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC,CAAA;IAED,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE;QACb,IAAI,OAAO,EAAE;YACT,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,OAAO,GAAG,IAAI,CAAA;SACjB;IACL,CAAC,CAAA;IAED,OAAO,GAAG,CAAA;AACd,CAAC","sourcesContent":["export type ThrottledFunction = (() => void) & {\n reset: () => void\n}\n\n/**\n * Throttle a function with a given delay.\n * Similar to lodash.\n *\n * Throttling `F` for a delay of `D` means that\n * `F` will be called no more than 1 time every `D`.\n * In this implementation, `F` is called after `D`\n * has passed since the previous non-throttled invocation\n *\n * @param func Function to throttle\n * @param delay Throttle delay\n */\nexport function throttle(func: () => void, delay: number): ThrottledFunction {\n let timeout: NodeJS.Timeout | null\n\n const res: ThrottledFunction = function () {\n if (timeout) {\n return\n }\n\n const later = () => {\n timeout = null\n func()\n }\n timeout = setTimeout(later, delay)\n }\n\n res.reset = () => {\n if (timeout) {\n clearTimeout(timeout)\n timeout = null\n }\n }\n\n return res\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ConditionVariable } from './condition-variable.js';
3
+ import { throttle } from './function-utils.js';
4
+ describe('throttle', () => {
5
+ it('should throttle', async () => {
6
+ const cv = new ConditionVariable();
7
+ let count = 0;
8
+ const func = () => {
9
+ count++;
10
+ cv.notify();
11
+ };
12
+ const throttled = throttle(func, 10);
13
+ throttled();
14
+ throttled();
15
+ throttled();
16
+ throttled();
17
+ await cv.wait();
18
+ expect(count).eq(1);
19
+ });
20
+ });
21
+ //# sourceMappingURL=function-utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function-utils.test.js","sourceRoot":"","sources":["../../../src/utils/function-utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,EAAE,GAAG,IAAI,iBAAiB,EAAE,CAAA;QAClC,IAAI,KAAK,GAAG,CAAC,CAAA;QAEb,MAAM,IAAI,GAAG,GAAG,EAAE;YACd,KAAK,EAAE,CAAA;YACP,EAAE,CAAC,MAAM,EAAE,CAAA;QACf,CAAC,CAAA;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAEpC,SAAS,EAAE,CAAA;QACX,SAAS,EAAE,CAAA;QACX,SAAS,EAAE,CAAA;QACX,SAAS,EAAE,CAAA;QAEX,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAEf,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { ConditionVariable } from './condition-variable.js'\nimport { throttle } from './function-utils.js'\n\ndescribe('throttle', () => {\n it('should throttle', async () => {\n const cv = new ConditionVariable()\n let count = 0\n\n const func = () => {\n count++\n cv.notify()\n }\n\n const throttled = throttle(func, 10)\n\n throttled()\n throttled()\n throttled()\n throttled()\n\n await cv.wait()\n\n expect(count).eq(1)\n })\n})\n"]}
@@ -7,7 +7,6 @@ export * from './crypto/index.js';
7
7
  export * from './default-dcs.js';
8
8
  export * from './deque.js';
9
9
  export * from './early-timer.js';
10
- export * from './flood-control.js';
11
10
  export * from './function-utils.js';
12
11
  export * from './linked-list.js';
13
12
  export * from './links/index.js';
@@ -7,7 +7,6 @@ export * from './crypto/index.js';
7
7
  export * from './default-dcs.js';
8
8
  export * from './deque.js';
9
9
  export * from './early-timer.js';
10
- export * from './flood-control.js';
11
10
  export * from './function-utils.js';
12
11
  export * from './linked-list.js';
13
12
  export * from './links/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA","sourcesContent":["export * from './async-lock.js'\nexport * from './bigint-utils.js'\nexport * from './buffer-utils.js'\nexport * from './condition-variable.js'\nexport * from './controllable-promise.js'\nexport * from './crypto/index.js'\nexport * from './default-dcs.js'\nexport * from './deque.js'\nexport * from './early-timer.js'\nexport * from './flood-control.js'\nexport * from './function-utils.js'\nexport * from './linked-list.js'\nexport * from './links/index.js'\nexport * from './logger.js'\nexport * from './long-utils.js'\nexport * from './lru-map.js'\nexport * from './lru-set.js'\nexport * from './misc-utils.js'\nexport * from './peer-utils.js'\nexport * from './sorted-array.js'\nexport * from './string-session.js'\nexport * from './tl-json.js'\nexport * from './type-assertions.js'\nexport * from '@mtcute/tl-runtime'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA","sourcesContent":["export * from './async-lock.js'\nexport * from './bigint-utils.js'\nexport * from './buffer-utils.js'\nexport * from './condition-variable.js'\nexport * from './controllable-promise.js'\nexport * from './crypto/index.js'\nexport * from './default-dcs.js'\nexport * from './deque.js'\nexport * from './early-timer.js'\nexport * from './function-utils.js'\nexport * from './linked-list.js'\nexport * from './links/index.js'\nexport * from './logger.js'\nexport * from './long-utils.js'\nexport * from './lru-map.js'\nexport * from './lru-set.js'\nexport * from './misc-utils.js'\nexport * from './peer-utils.js'\nexport * from './sorted-array.js'\nexport * from './string-session.js'\nexport * from './tl-json.js'\nexport * from './type-assertions.js'\nexport * from '@mtcute/tl-runtime'\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { SortedLinkedList } from './linked-list.js';
3
+ describe('SortedLinkedList', () => {
4
+ const ascendingComparator = (a, b) => a - b;
5
+ it('should add items in the correct order', () => {
6
+ const list = new SortedLinkedList(ascendingComparator);
7
+ list.add(3);
8
+ list.add(1);
9
+ list.add(2);
10
+ expect(list.popFront()).eq(1);
11
+ expect(list.popFront()).eq(2);
12
+ expect(list.popFront()).eq(3);
13
+ });
14
+ it('should allow deleting nodes using _remove', () => {
15
+ const list = new SortedLinkedList(ascendingComparator);
16
+ list.add(3);
17
+ list.add(1);
18
+ list.add(2);
19
+ const node = list._first.n;
20
+ list._remove(node);
21
+ expect(list.popFront()).eq(1);
22
+ expect(list.popFront()).eq(3);
23
+ });
24
+ it('should clear', () => {
25
+ const list = new SortedLinkedList(ascendingComparator);
26
+ list.add(3);
27
+ list.add(1);
28
+ list.add(2);
29
+ list.clear();
30
+ expect(list.length).eq(0);
31
+ expect(list.popFront()).eq(undefined);
32
+ });
33
+ });
34
+ //# sourceMappingURL=linked-list.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linked-list.test.js","sourceRoot":"","sources":["../../../src/utils/linked-list.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;IAE3D,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;QAEtD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACX,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACX,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAEX,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;QAEtD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACX,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACX,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAEX,MAAM,IAAI,GAAG,IAAI,CAAC,MAAO,CAAC,CAAE,CAAA;QAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAElB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACpB,MAAM,IAAI,GAAG,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;QAEtD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACX,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACX,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAEX,IAAI,CAAC,KAAK,EAAE,CAAA;QAEZ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { SortedLinkedList } from './linked-list.js'\n\ndescribe('SortedLinkedList', () => {\n const ascendingComparator = (a: number, b: number) => a - b\n\n it('should add items in the correct order', () => {\n const list = new SortedLinkedList(ascendingComparator)\n\n list.add(3)\n list.add(1)\n list.add(2)\n\n expect(list.popFront()).eq(1)\n expect(list.popFront()).eq(2)\n expect(list.popFront()).eq(3)\n })\n\n it('should allow deleting nodes using _remove', () => {\n const list = new SortedLinkedList(ascendingComparator)\n\n list.add(3)\n list.add(1)\n list.add(2)\n\n const node = list._first!.n!\n\n list._remove(node)\n\n expect(list.popFront()).eq(1)\n expect(list.popFront()).eq(3)\n })\n\n it('should clear', () => {\n const list = new SortedLinkedList(ascendingComparator)\n\n list.add(3)\n list.add(1)\n list.add(2)\n\n list.clear()\n\n expect(list.length).eq(0)\n expect(list.popFront()).eq(undefined)\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,150 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
2
+ import { describe, expect, it } from 'vitest';
3
+ import { links } from './index.js';
4
+ describe('Deep links', function () {
5
+ describe('Bot start links', () => {
6
+ it('should generate t.me/username?start=parameter links', () => {
7
+ expect(links.botStart({ username: 'username', parameter: 'parameter' })).eq('https://t.me/username?start=parameter');
8
+ });
9
+ it('should generate tg://resolve?domain=username&start=parameter links', () => {
10
+ expect(links.botStart({ username: 'username', parameter: 'parameter', protocol: 'tg' })).eq('tg://resolve?domain=username&start=parameter');
11
+ });
12
+ it('should parse t.me/username?start=parameter links', () => {
13
+ expect(links.botStart.parse('https://t.me/username?start=parameter')).eql({
14
+ username: 'username',
15
+ parameter: 'parameter',
16
+ });
17
+ });
18
+ it('should parse tg://resolve?domain=username&start=parameter links', () => {
19
+ expect(links.botStart.parse('tg://resolve?domain=username&start=parameter')).eql({
20
+ username: 'username',
21
+ parameter: 'parameter',
22
+ });
23
+ });
24
+ });
25
+ describe('Bot add to group links', () => {
26
+ it('should generate t.me links', () => {
27
+ expect(links.botAddToGroup({ bot: 'bot_username' })).eq('https://t.me/bot_username?startgroup');
28
+ expect(links.botAddToGroup({ bot: 'bot_username', parameter: '' })).eq('https://t.me/bot_username?startgroup=');
29
+ expect(links.botAddToGroup({ bot: 'bot_username', parameter: 'parameter' })).eq('https://t.me/bot_username?startgroup=parameter');
30
+ expect(links.botAddToGroup({ bot: 'bot_username', admin: ['postStories'] })).eq('https://t.me/bot_username?startgroup&admin=post_stories');
31
+ });
32
+ it('should generate tg://resolve links', () => {
33
+ expect(links.botAddToGroup({ bot: 'bot_username', protocol: 'tg' })).eq('tg://resolve?domain=bot_username&startgroup');
34
+ expect(links.botAddToGroup({ bot: 'bot_username', parameter: 'parameter', protocol: 'tg' })).eq('tg://resolve?domain=bot_username&startgroup=parameter');
35
+ expect(links.botAddToGroup({ bot: 'bot_username', admin: ['postStories'], protocol: 'tg' })).eq('tg://resolve?domain=bot_username&startgroup&admin=post_stories');
36
+ });
37
+ it('should parse t.me links', () => {
38
+ expect(links.botAddToGroup.parse('https://t.me/bot_username?startgroup')).eql({
39
+ bot: 'bot_username',
40
+ parameter: undefined,
41
+ admin: undefined,
42
+ });
43
+ expect(links.botAddToGroup.parse('https://t.me/bot_username?startgroup=parameter')).eql({
44
+ bot: 'bot_username',
45
+ parameter: 'parameter',
46
+ admin: undefined,
47
+ });
48
+ expect(links.botAddToGroup.parse('https://t.me/bot_username?startgroup&admin=post_stories')).eql({
49
+ bot: 'bot_username',
50
+ parameter: undefined,
51
+ admin: ['postStories'],
52
+ });
53
+ });
54
+ it('should parse tg://resolve links', () => {
55
+ expect(links.botAddToGroup.parse('tg://resolve?domain=bot_username&startgroup')).eql({
56
+ bot: 'bot_username',
57
+ parameter: undefined,
58
+ admin: undefined,
59
+ });
60
+ expect(links.botAddToGroup.parse('tg://resolve?domain=bot_username&startgroup=parameter')).eql({
61
+ bot: 'bot_username',
62
+ parameter: 'parameter',
63
+ admin: undefined,
64
+ });
65
+ expect(links.botAddToGroup.parse('tg://resolve?domain=bot_username&startgroup&admin=post_stories')).eql({
66
+ bot: 'bot_username',
67
+ parameter: undefined,
68
+ admin: ['postStories'],
69
+ });
70
+ });
71
+ });
72
+ describe('Bot add to channel links', () => {
73
+ it('should generate t.me links', () => {
74
+ expect(links.botAddToChannel({ bot: 'bot_username' })).eq('https://t.me/bot_username?startchannel');
75
+ expect(links.botAddToChannel({ bot: 'bot_username', admin: ['postStories'] })).eq('https://t.me/bot_username?startchannel&admin=post_stories');
76
+ });
77
+ it('should generate tg://resolve links', () => {
78
+ expect(links.botAddToChannel({ bot: 'bot_username', protocol: 'tg' })).eq('tg://resolve?domain=bot_username&startchannel');
79
+ expect(links.botAddToChannel({ bot: 'bot_username', admin: ['postStories'], protocol: 'tg' })).eq('tg://resolve?domain=bot_username&startchannel&admin=post_stories');
80
+ });
81
+ it('should parse t.me links', () => {
82
+ expect(links.botAddToChannel.parse('https://t.me/bot_username?startchannel')).eql({
83
+ bot: 'bot_username',
84
+ admin: undefined,
85
+ });
86
+ expect(links.botAddToChannel.parse('https://t.me/bot_username?startchannel&admin=post_stories')).eql({
87
+ bot: 'bot_username',
88
+ admin: ['postStories'],
89
+ });
90
+ });
91
+ it('should parse tg://resolve links', () => {
92
+ expect(links.botAddToChannel.parse('tg://resolve?domain=bot_username&startchannel')).eql({
93
+ bot: 'bot_username',
94
+ admin: undefined,
95
+ });
96
+ expect(links.botAddToChannel.parse('tg://resolve?domain=bot_username&startchannel&admin=post_stories')).eql({ bot: 'bot_username', admin: ['postStories'] });
97
+ });
98
+ });
99
+ describe('Game links', () => {
100
+ it('should generate t.me links', () => {
101
+ expect(links.botGame({ bot: 'bot_username', game: 'short_name' })).eq('https://t.me/bot_username?game=short_name');
102
+ });
103
+ it('should generate tg://resolve links', () => {
104
+ expect(links.botGame({ bot: 'bot_username', game: 'short_name', protocol: 'tg' })).eq('tg://resolve?domain=bot_username&game=short_name');
105
+ });
106
+ it('should parse t.me links', () => {
107
+ expect(links.botGame.parse('https://t.me/bot_username?game=short_name')).eql({
108
+ bot: 'bot_username',
109
+ game: 'short_name',
110
+ });
111
+ });
112
+ it('should parse tg://resolve links', () => {
113
+ expect(links.botGame.parse('tg://resolve?domain=bot_username&game=short_name')).eql({
114
+ bot: 'bot_username',
115
+ game: 'short_name',
116
+ });
117
+ });
118
+ });
119
+ describe('Named web apps', () => {
120
+ it('should generate t.me links', () => {
121
+ expect(links.botWebApp({ bot: 'bot_username', app: 'short_name' })).eq('https://t.me/bot_username/short_name');
122
+ expect(links.botWebApp({ bot: 'bot_username', app: 'short_name', parameter: 'parameter' })).eq('https://t.me/bot_username/short_name?startapp=parameter');
123
+ });
124
+ it('should generate tg://resolve links', () => {
125
+ expect(links.botWebApp({ bot: 'bot_username', app: 'short_name', protocol: 'tg' })).eq('tg://resolve?domain=bot_username&appname=short_name');
126
+ expect(links.botWebApp({ bot: 'bot_username', app: 'short_name', parameter: 'parameter', protocol: 'tg' })).eq('tg://resolve?domain=bot_username&appname=short_name&startapp=parameter');
127
+ });
128
+ it('should parse t.me links', () => {
129
+ expect(links.botWebApp.parse('https://t.me/bot_username/short_name')).eql({
130
+ bot: 'bot_username',
131
+ app: 'short_name',
132
+ parameter: undefined,
133
+ });
134
+ expect(links.botWebApp.parse('https://t.me/bot_username/short_name?startapp=parameter')).eql({
135
+ bot: 'bot_username',
136
+ app: 'short_name',
137
+ parameter: 'parameter',
138
+ });
139
+ });
140
+ it('should parse tg://resolve links', () => {
141
+ expect(links.botWebApp.parse('tg://resolve?domain=bot_username&appname=short_name')).eql({
142
+ bot: 'bot_username',
143
+ app: 'short_name',
144
+ parameter: undefined,
145
+ });
146
+ expect(links.botWebApp.parse('tg://resolve?domain=bot_username&appname=short_name&startapp=parameter')).eql({ bot: 'bot_username', app: 'short_name', parameter: 'parameter' });
147
+ });
148
+ });
149
+ });
150
+ //# sourceMappingURL=bots.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bots.test.js","sourceRoot":"","sources":["../../../../src/utils/links/bots.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport { describe, expect, it } from 'vitest'\n\nimport { links } from './index.js'\n\ndescribe('Deep links', function () {\n describe('Bot start links', () => {\n it('should generate t.me/username?start=parameter links', () => {\n expect(links.botStart({ username: 'username', parameter: 'parameter' })).eq(\n 'https://t.me/username?start=parameter',\n )\n })\n\n it('should generate tg://resolve?domain=username&start=parameter links', () => {\n expect(links.botStart({ username: 'username', parameter: 'parameter', protocol: 'tg' })).eq(\n 'tg://resolve?domain=username&start=parameter',\n )\n })\n\n it('should parse t.me/username?start=parameter links', () => {\n expect(links.botStart.parse('https://t.me/username?start=parameter')).eql({\n username: 'username',\n parameter: 'parameter',\n })\n })\n\n it('should parse tg://resolve?domain=username&start=parameter links', () => {\n expect(links.botStart.parse('tg://resolve?domain=username&start=parameter')).eql({\n username: 'username',\n parameter: 'parameter',\n })\n })\n })\n\n describe('Bot add to group links', () => {\n it('should generate t.me links', () => {\n expect(links.botAddToGroup({ bot: 'bot_username' })).eq('https://t.me/bot_username?startgroup')\n expect(links.botAddToGroup({ bot: 'bot_username', parameter: '' })).eq(\n 'https://t.me/bot_username?startgroup=',\n )\n expect(links.botAddToGroup({ bot: 'bot_username', parameter: 'parameter' })).eq(\n 'https://t.me/bot_username?startgroup=parameter',\n )\n expect(links.botAddToGroup({ bot: 'bot_username', admin: ['postStories'] })).eq(\n 'https://t.me/bot_username?startgroup&admin=post_stories',\n )\n })\n\n it('should generate tg://resolve links', () => {\n expect(links.botAddToGroup({ bot: 'bot_username', protocol: 'tg' })).eq(\n 'tg://resolve?domain=bot_username&startgroup',\n )\n expect(links.botAddToGroup({ bot: 'bot_username', parameter: 'parameter', protocol: 'tg' })).eq(\n 'tg://resolve?domain=bot_username&startgroup=parameter',\n )\n expect(links.botAddToGroup({ bot: 'bot_username', admin: ['postStories'], protocol: 'tg' })).eq(\n 'tg://resolve?domain=bot_username&startgroup&admin=post_stories',\n )\n })\n\n it('should parse t.me links', () => {\n expect(links.botAddToGroup.parse('https://t.me/bot_username?startgroup')).eql({\n bot: 'bot_username',\n parameter: undefined,\n admin: undefined,\n })\n expect(links.botAddToGroup.parse('https://t.me/bot_username?startgroup=parameter')).eql({\n bot: 'bot_username',\n parameter: 'parameter',\n admin: undefined,\n })\n expect(links.botAddToGroup.parse('https://t.me/bot_username?startgroup&admin=post_stories')).eql({\n bot: 'bot_username',\n parameter: undefined,\n admin: ['postStories'],\n })\n })\n\n it('should parse tg://resolve links', () => {\n expect(links.botAddToGroup.parse('tg://resolve?domain=bot_username&startgroup')).eql({\n bot: 'bot_username',\n parameter: undefined,\n admin: undefined,\n })\n expect(links.botAddToGroup.parse('tg://resolve?domain=bot_username&startgroup=parameter')).eql({\n bot: 'bot_username',\n parameter: 'parameter',\n admin: undefined,\n })\n expect(links.botAddToGroup.parse('tg://resolve?domain=bot_username&startgroup&admin=post_stories')).eql({\n bot: 'bot_username',\n parameter: undefined,\n admin: ['postStories'],\n })\n })\n })\n\n describe('Bot add to channel links', () => {\n it('should generate t.me links', () => {\n expect(links.botAddToChannel({ bot: 'bot_username' })).eq('https://t.me/bot_username?startchannel')\n expect(links.botAddToChannel({ bot: 'bot_username', admin: ['postStories'] })).eq(\n 'https://t.me/bot_username?startchannel&admin=post_stories',\n )\n })\n\n it('should generate tg://resolve links', () => {\n expect(links.botAddToChannel({ bot: 'bot_username', protocol: 'tg' })).eq(\n 'tg://resolve?domain=bot_username&startchannel',\n )\n expect(links.botAddToChannel({ bot: 'bot_username', admin: ['postStories'], protocol: 'tg' })).eq(\n 'tg://resolve?domain=bot_username&startchannel&admin=post_stories',\n )\n })\n\n it('should parse t.me links', () => {\n expect(links.botAddToChannel.parse('https://t.me/bot_username?startchannel')).eql({\n bot: 'bot_username',\n admin: undefined,\n })\n expect(links.botAddToChannel.parse('https://t.me/bot_username?startchannel&admin=post_stories')).eql({\n bot: 'bot_username',\n admin: ['postStories'],\n })\n })\n\n it('should parse tg://resolve links', () => {\n expect(links.botAddToChannel.parse('tg://resolve?domain=bot_username&startchannel')).eql({\n bot: 'bot_username',\n admin: undefined,\n })\n expect(links.botAddToChannel.parse('tg://resolve?domain=bot_username&startchannel&admin=post_stories')).eql(\n { bot: 'bot_username', admin: ['postStories'] },\n )\n })\n })\n\n describe('Game links', () => {\n it('should generate t.me links', () => {\n expect(links.botGame({ bot: 'bot_username', game: 'short_name' })).eq(\n 'https://t.me/bot_username?game=short_name',\n )\n })\n\n it('should generate tg://resolve links', () => {\n expect(links.botGame({ bot: 'bot_username', game: 'short_name', protocol: 'tg' })).eq(\n 'tg://resolve?domain=bot_username&game=short_name',\n )\n })\n\n it('should parse t.me links', () => {\n expect(links.botGame.parse('https://t.me/bot_username?game=short_name')).eql({\n bot: 'bot_username',\n game: 'short_name',\n })\n })\n\n it('should parse tg://resolve links', () => {\n expect(links.botGame.parse('tg://resolve?domain=bot_username&game=short_name')).eql({\n bot: 'bot_username',\n game: 'short_name',\n })\n })\n })\n\n describe('Named web apps', () => {\n it('should generate t.me links', () => {\n expect(links.botWebApp({ bot: 'bot_username', app: 'short_name' })).eq(\n 'https://t.me/bot_username/short_name',\n )\n expect(links.botWebApp({ bot: 'bot_username', app: 'short_name', parameter: 'parameter' })).eq(\n 'https://t.me/bot_username/short_name?startapp=parameter',\n )\n })\n\n it('should generate tg://resolve links', () => {\n expect(links.botWebApp({ bot: 'bot_username', app: 'short_name', protocol: 'tg' })).eq(\n 'tg://resolve?domain=bot_username&appname=short_name',\n )\n expect(\n links.botWebApp({ bot: 'bot_username', app: 'short_name', parameter: 'parameter', protocol: 'tg' }),\n ).eq('tg://resolve?domain=bot_username&appname=short_name&startapp=parameter')\n })\n\n it('should parse t.me links', () => {\n expect(links.botWebApp.parse('https://t.me/bot_username/short_name')).eql({\n bot: 'bot_username',\n app: 'short_name',\n parameter: undefined,\n })\n expect(links.botWebApp.parse('https://t.me/bot_username/short_name?startapp=parameter')).eql({\n bot: 'bot_username',\n app: 'short_name',\n parameter: 'parameter',\n })\n })\n\n it('should parse tg://resolve links', () => {\n expect(links.botWebApp.parse('tg://resolve?domain=bot_username&appname=short_name')).eql({\n bot: 'bot_username',\n app: 'short_name',\n parameter: undefined,\n })\n expect(links.botWebApp.parse('tg://resolve?domain=bot_username&appname=short_name&startapp=parameter')).eql(\n { bot: 'bot_username', app: 'short_name', parameter: 'parameter' },\n )\n })\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,82 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
2
+ import { describe, expect, it } from 'vitest';
3
+ import { links } from './index.js';
4
+ describe('Deep links', function () {
5
+ describe('Chat invite links', () => {
6
+ it('should generate t.me/+hash links', () => {
7
+ expect(links.chatInvite({ hash: 'hash' })).eq('https://t.me/+hash');
8
+ });
9
+ it('should generate tg://join?invite=hash links', () => {
10
+ expect(links.chatInvite({ hash: 'hash', protocol: 'tg' })).eq('tg://join?invite=hash');
11
+ });
12
+ it('should parse t.me/joinchat/hash links', () => {
13
+ expect(links.chatInvite.parse('https://t.me/joinchat/hash')).eql({ hash: 'hash' });
14
+ });
15
+ it('should parse t.me/+hash links', () => {
16
+ expect(links.chatInvite.parse('https://t.me/+hash')).eql({ hash: 'hash' });
17
+ });
18
+ it('should parse tg://join?invite=hash links', () => {
19
+ expect(links.chatInvite.parse('tg://join?invite=hash')).eql({ hash: 'hash' });
20
+ });
21
+ });
22
+ describe('Chat folder links', () => {
23
+ it('should generate t.me/addlist/slug links', () => {
24
+ expect(links.chatFolder({ slug: 'slug' })).eq('https://t.me/addlist/slug');
25
+ });
26
+ it('should generate tg://addlist?slug=slug links', () => {
27
+ expect(links.chatFolder({ slug: 'slug', protocol: 'tg' })).eq('tg://addlist?slug=slug');
28
+ });
29
+ it('should parse t.me/addlist/slug links', () => {
30
+ expect(links.chatFolder.parse('https://t.me/addlist/slug')).eql({ slug: 'slug' });
31
+ });
32
+ it('should parse tg://addlist?slug=slug links', () => {
33
+ expect(links.chatFolder.parse('tg://addlist?slug=slug')).eql({ slug: 'slug' });
34
+ });
35
+ });
36
+ describe('Message links', () => {
37
+ const result = (it) => {
38
+ return {
39
+ threadId: undefined,
40
+ commentId: undefined,
41
+ mediaTimestamp: undefined,
42
+ single: false,
43
+ ...it,
44
+ };
45
+ };
46
+ it('should generate t.me/username/id links', () => {
47
+ expect(links.message({ username: 'username', id: 123 })).eq('https://t.me/username/123');
48
+ expect(links.message({ username: 'username', threadId: 123, id: 456 })).eq('https://t.me/username/123/456');
49
+ });
50
+ it('should generate tg:// links', () => {
51
+ expect(links.message({ username: 'username', id: 123, protocol: 'tg' })).eq('tg://resolve?domain=username&post=123');
52
+ expect(links.message({ username: 'username', threadId: 123, id: 456, protocol: 'tg' })).eq('tg://resolve?domain=username&post=456&thread=123');
53
+ });
54
+ it('should generate t.me/c/channel/id links', () => {
55
+ expect(links.message({ channelId: 321, id: 123 })).eq('https://t.me/c/321/123');
56
+ expect(links.message({ channelId: 321, threadId: 123, id: 456 })).eq('https://t.me/c/321/123/456');
57
+ });
58
+ it('should generate tg://privatepost links', () => {
59
+ expect(links.message({ channelId: 321, id: 123, protocol: 'tg' })).eq('tg://privatepost?channel=321&post=123');
60
+ expect(links.message({ channelId: 321, threadId: 123, id: 456, protocol: 'tg' })).eq('tg://privatepost?channel=321&post=456&thread=123');
61
+ });
62
+ it('should parse t.me/username/id links', () => {
63
+ expect(links.message.parse('https://t.me/username/123')).eql(result({ username: 'username', id: 123 }));
64
+ });
65
+ it('should parse t.me/username/thread/id links', () => {
66
+ expect(links.message.parse('https://t.me/username/123/456')).eql(result({ username: 'username', threadId: 123, id: 456 }));
67
+ });
68
+ it('should parse tg://resolve links', () => {
69
+ expect(links.message.parse('tg://resolve?domain=username&post=123')).eql(result({ username: 'username', id: 123 }));
70
+ });
71
+ it('should parse t.me/c/channel/id links', () => {
72
+ expect(links.message.parse('https://t.me/c/666/123')).eql(result({ channelId: 666, id: 123 }));
73
+ });
74
+ it('should parse t.me/c/channel/thread/id links', () => {
75
+ expect(links.message.parse('https://t.me/c/666/123/456')).eql(result({ channelId: 666, threadId: 123, id: 456 }));
76
+ });
77
+ it('should parse tg://privatepost links', () => {
78
+ expect(links.message.parse('tg://privatepost?channel=666&post=123')).eql(result({ channelId: 666, id: 123 }));
79
+ });
80
+ });
81
+ });
82
+ //# sourceMappingURL=chat.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.test.js","sourceRoot":"","sources":["../../../../src/utils/links/chat.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport { describe, expect, it } from 'vitest'\n\nimport { links } from './index.js'\n\ndescribe('Deep links', function () {\n describe('Chat invite links', () => {\n it('should generate t.me/+hash links', () => {\n expect(links.chatInvite({ hash: 'hash' })).eq('https://t.me/+hash')\n })\n\n it('should generate tg://join?invite=hash links', () => {\n expect(links.chatInvite({ hash: 'hash', protocol: 'tg' })).eq('tg://join?invite=hash')\n })\n\n it('should parse t.me/joinchat/hash links', () => {\n expect(links.chatInvite.parse('https://t.me/joinchat/hash')).eql({ hash: 'hash' })\n })\n\n it('should parse t.me/+hash links', () => {\n expect(links.chatInvite.parse('https://t.me/+hash')).eql({ hash: 'hash' })\n })\n\n it('should parse tg://join?invite=hash links', () => {\n expect(links.chatInvite.parse('tg://join?invite=hash')).eql({ hash: 'hash' })\n })\n })\n\n describe('Chat folder links', () => {\n it('should generate t.me/addlist/slug links', () => {\n expect(links.chatFolder({ slug: 'slug' })).eq('https://t.me/addlist/slug')\n })\n\n it('should generate tg://addlist?slug=slug links', () => {\n expect(links.chatFolder({ slug: 'slug', protocol: 'tg' })).eq('tg://addlist?slug=slug')\n })\n\n it('should parse t.me/addlist/slug links', () => {\n expect(links.chatFolder.parse('https://t.me/addlist/slug')).eql({ slug: 'slug' })\n })\n\n it('should parse tg://addlist?slug=slug links', () => {\n expect(links.chatFolder.parse('tg://addlist?slug=slug')).eql({ slug: 'slug' })\n })\n })\n\n describe('Message links', () => {\n const result = (it: object) => {\n return {\n threadId: undefined,\n commentId: undefined,\n mediaTimestamp: undefined,\n single: false,\n ...it,\n }\n }\n\n it('should generate t.me/username/id links', () => {\n expect(links.message({ username: 'username', id: 123 })).eq('https://t.me/username/123')\n expect(links.message({ username: 'username', threadId: 123, id: 456 })).eq('https://t.me/username/123/456')\n })\n\n it('should generate tg:// links', () => {\n expect(links.message({ username: 'username', id: 123, protocol: 'tg' })).eq(\n 'tg://resolve?domain=username&post=123',\n )\n expect(links.message({ username: 'username', threadId: 123, id: 456, protocol: 'tg' })).eq(\n 'tg://resolve?domain=username&post=456&thread=123',\n )\n })\n\n it('should generate t.me/c/channel/id links', () => {\n expect(links.message({ channelId: 321, id: 123 })).eq('https://t.me/c/321/123')\n expect(links.message({ channelId: 321, threadId: 123, id: 456 })).eq('https://t.me/c/321/123/456')\n })\n\n it('should generate tg://privatepost links', () => {\n expect(links.message({ channelId: 321, id: 123, protocol: 'tg' })).eq(\n 'tg://privatepost?channel=321&post=123',\n )\n expect(links.message({ channelId: 321, threadId: 123, id: 456, protocol: 'tg' })).eq(\n 'tg://privatepost?channel=321&post=456&thread=123',\n )\n })\n\n it('should parse t.me/username/id links', () => {\n expect(links.message.parse('https://t.me/username/123')).eql(result({ username: 'username', id: 123 }))\n })\n\n it('should parse t.me/username/thread/id links', () => {\n expect(links.message.parse('https://t.me/username/123/456')).eql(\n result({ username: 'username', threadId: 123, id: 456 }),\n )\n })\n\n it('should parse tg://resolve links', () => {\n expect(links.message.parse('tg://resolve?domain=username&post=123')).eql(\n result({ username: 'username', id: 123 }),\n )\n })\n\n it('should parse t.me/c/channel/id links', () => {\n expect(links.message.parse('https://t.me/c/666/123')).eql(result({ channelId: 666, id: 123 }))\n })\n\n it('should parse t.me/c/channel/thread/id links', () => {\n expect(links.message.parse('https://t.me/c/666/123/456')).eql(\n result({ channelId: 666, threadId: 123, id: 456 }),\n )\n })\n\n it('should parse tg://privatepost links', () => {\n expect(links.message.parse('tg://privatepost?channel=666&post=123')).eql(\n result({ channelId: 666, id: 123 }),\n )\n })\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};