@mtcute/core 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/cjs/network/auth-key.test.d.ts +1 -0
  2. package/cjs/network/auth-key.test.js +111 -0
  3. package/cjs/network/auth-key.test.js.map +1 -0
  4. package/cjs/network/config-manager.js +2 -1
  5. package/cjs/network/config-manager.js.map +1 -1
  6. package/cjs/network/config-manager.test.d.ts +1 -0
  7. package/cjs/network/config-manager.test.js +170 -0
  8. package/cjs/network/config-manager.test.js.map +1 -0
  9. package/cjs/network/network-manager.js +1 -1
  10. package/cjs/network/persistent-connection.test.d.ts +1 -0
  11. package/cjs/network/persistent-connection.test.js +157 -0
  12. package/cjs/network/persistent-connection.test.js.map +1 -0
  13. package/cjs/network/session-connection.js +3 -2
  14. package/cjs/network/session-connection.js.map +1 -1
  15. package/cjs/network/transports/intermediate.test.d.ts +1 -0
  16. package/cjs/network/transports/intermediate.test.js +86 -0
  17. package/cjs/network/transports/intermediate.test.js.map +1 -0
  18. package/cjs/network/transports/obfuscated.js +1 -1
  19. package/cjs/network/transports/obfuscated.js.map +1 -1
  20. package/cjs/network/transports/obfuscated.test.d.ts +1 -0
  21. package/cjs/network/transports/obfuscated.test.js +131 -0
  22. package/cjs/network/transports/obfuscated.test.js.map +1 -0
  23. package/cjs/network/transports/tcp.js +1 -1
  24. package/cjs/network/transports/tcp.js.map +1 -1
  25. package/cjs/network/transports/tcp.test.d.ts +1 -0
  26. package/cjs/network/transports/tcp.test.js +97 -0
  27. package/cjs/network/transports/tcp.test.js.map +1 -0
  28. package/cjs/network/transports/websocket.test.d.ts +1 -0
  29. package/cjs/network/transports/websocket.test.js +91 -0
  30. package/cjs/network/transports/websocket.test.js.map +1 -0
  31. package/cjs/storage/json.test.d.ts +1 -0
  32. package/cjs/storage/json.test.js +37 -0
  33. package/cjs/storage/json.test.js.map +1 -0
  34. package/cjs/storage/localstorage.test.d.ts +1 -0
  35. package/cjs/storage/localstorage.test.js +23 -0
  36. package/cjs/storage/localstorage.test.js.map +1 -0
  37. package/cjs/storage/memory.test.d.ts +1 -0
  38. package/cjs/storage/memory.test.js +47 -0
  39. package/cjs/storage/memory.test.js.map +1 -0
  40. package/cjs/utils/async-lock.test.d.ts +1 -0
  41. package/cjs/utils/async-lock.test.js +25 -0
  42. package/cjs/utils/async-lock.test.js.map +1 -0
  43. package/cjs/utils/bigint-utils.test.d.ts +1 -0
  44. package/cjs/utils/bigint-utils.test.js +150 -0
  45. package/cjs/utils/bigint-utils.test.js.map +1 -0
  46. package/cjs/utils/buffer-utils.test.d.ts +1 -0
  47. package/cjs/utils/buffer-utils.test.js +69 -0
  48. package/cjs/utils/buffer-utils.test.js.map +1 -0
  49. package/cjs/utils/condition-variable.test.d.ts +1 -0
  50. package/cjs/utils/condition-variable.test.js +27 -0
  51. package/cjs/utils/condition-variable.test.js.map +1 -0
  52. package/cjs/utils/controllable-promise.test.d.ts +1 -0
  53. package/cjs/utils/controllable-promise.test.js +17 -0
  54. package/cjs/utils/controllable-promise.test.js.map +1 -0
  55. package/cjs/utils/crypto/keys.test.d.ts +1 -0
  56. package/cjs/utils/crypto/keys.test.js +40 -0
  57. package/cjs/utils/crypto/keys.test.js.map +1 -0
  58. package/cjs/utils/crypto/miller-rabin.test.d.ts +1 -0
  59. package/cjs/utils/crypto/miller-rabin.test.js +60 -0
  60. package/cjs/utils/crypto/miller-rabin.test.js.map +1 -0
  61. package/cjs/utils/crypto/mtproto.test.d.ts +1 -0
  62. package/cjs/utils/crypto/mtproto.test.js +47 -0
  63. package/cjs/utils/crypto/mtproto.test.js.map +1 -0
  64. package/cjs/utils/crypto/node.test.d.ts +1 -0
  65. package/cjs/utils/crypto/node.test.js +13 -0
  66. package/cjs/utils/crypto/node.test.js.map +1 -0
  67. package/cjs/utils/crypto/password.test.d.ts +1 -0
  68. package/cjs/utils/crypto/password.test.js +95 -0
  69. package/cjs/utils/crypto/password.test.js.map +1 -0
  70. package/cjs/utils/crypto/utils.test.d.ts +1 -0
  71. package/cjs/utils/crypto/utils.test.js +49 -0
  72. package/cjs/utils/crypto/utils.test.js.map +1 -0
  73. package/cjs/utils/crypto/web.test.d.ts +1 -0
  74. package/cjs/utils/crypto/web.test.js +17 -0
  75. package/cjs/utils/crypto/web.test.js.map +1 -0
  76. package/cjs/utils/deque.test.d.ts +1 -0
  77. package/cjs/utils/deque.test.js +128 -0
  78. package/cjs/utils/deque.test.js.map +1 -0
  79. package/cjs/utils/function-utils.test.d.ts +1 -0
  80. package/cjs/utils/function-utils.test.js +23 -0
  81. package/cjs/utils/function-utils.test.js.map +1 -0
  82. package/cjs/utils/linked-list.test.d.ts +1 -0
  83. package/cjs/utils/linked-list.test.js +36 -0
  84. package/cjs/utils/linked-list.test.js.map +1 -0
  85. package/cjs/utils/links/bots.test.d.ts +1 -0
  86. package/cjs/utils/links/bots.test.js +152 -0
  87. package/cjs/utils/links/bots.test.js.map +1 -0
  88. package/cjs/utils/links/chat.test.d.ts +1 -0
  89. package/cjs/utils/links/chat.test.js +84 -0
  90. package/cjs/utils/links/chat.test.js.map +1 -0
  91. package/cjs/utils/links/misc.test.d.ts +1 -0
  92. package/cjs/utils/links/misc.test.js +153 -0
  93. package/cjs/utils/links/misc.test.js.map +1 -0
  94. package/cjs/utils/links/proxy.test.d.ts +1 -0
  95. package/cjs/utils/links/proxy.test.js +74 -0
  96. package/cjs/utils/links/proxy.test.js.map +1 -0
  97. package/cjs/utils/links/user.test.d.ts +1 -0
  98. package/cjs/utils/links/user.test.js +63 -0
  99. package/cjs/utils/links/user.test.js.map +1 -0
  100. package/cjs/utils/logger.test.d.ts +1 -0
  101. package/cjs/utils/logger.test.js +125 -0
  102. package/cjs/utils/logger.test.js.map +1 -0
  103. package/cjs/utils/long-utils.test.d.ts +1 -0
  104. package/cjs/utils/long-utils.test.js +158 -0
  105. package/cjs/utils/long-utils.test.js.map +1 -0
  106. package/cjs/utils/lru-map.test.d.ts +1 -0
  107. package/cjs/utils/lru-map.test.js +96 -0
  108. package/cjs/utils/lru-map.test.js.map +1 -0
  109. package/cjs/utils/lru-set.test.d.ts +1 -0
  110. package/cjs/utils/lru-set.test.js +77 -0
  111. package/cjs/utils/lru-set.test.js.map +1 -0
  112. package/cjs/utils/peer-utils.test.d.ts +1 -0
  113. package/cjs/utils/peer-utils.test.js +122 -0
  114. package/cjs/utils/peer-utils.test.js.map +1 -0
  115. package/cjs/utils/sorted-array.test.d.ts +1 -0
  116. package/cjs/utils/sorted-array.test.js +66 -0
  117. package/cjs/utils/sorted-array.test.js.map +1 -0
  118. package/cjs/utils/string-session.test.d.ts +1 -0
  119. package/cjs/utils/string-session.test.js +106 -0
  120. package/cjs/utils/string-session.test.js.map +1 -0
  121. package/cjs/utils/tl-json.test.d.ts +1 -0
  122. package/cjs/utils/tl-json.test.js +83 -0
  123. package/cjs/utils/tl-json.test.js.map +1 -0
  124. package/cjs/utils/type-assertions.test.d.ts +1 -0
  125. package/cjs/utils/type-assertions.test.js +67 -0
  126. package/cjs/utils/type-assertions.test.js.map +1 -0
  127. package/esm/network/auth-key.test.d.ts +1 -0
  128. package/esm/network/auth-key.test.js +106 -0
  129. package/esm/network/auth-key.test.js.map +1 -0
  130. package/esm/network/config-manager.js +2 -1
  131. package/esm/network/config-manager.js.map +1 -1
  132. package/esm/network/config-manager.test.d.ts +1 -0
  133. package/esm/network/config-manager.test.js +168 -0
  134. package/esm/network/config-manager.test.js.map +1 -0
  135. package/esm/network/network-manager.js +1 -1
  136. package/esm/network/persistent-connection.test.d.ts +1 -0
  137. package/esm/network/persistent-connection.test.js +155 -0
  138. package/esm/network/persistent-connection.test.js.map +1 -0
  139. package/esm/network/session-connection.js +3 -2
  140. package/esm/network/session-connection.js.map +1 -1
  141. package/esm/network/transports/intermediate.test.d.ts +1 -0
  142. package/esm/network/transports/intermediate.test.js +84 -0
  143. package/esm/network/transports/intermediate.test.js.map +1 -0
  144. package/esm/network/transports/obfuscated.js +1 -1
  145. package/esm/network/transports/obfuscated.js.map +1 -1
  146. package/esm/network/transports/obfuscated.test.d.ts +1 -0
  147. package/esm/network/transports/obfuscated.test.js +129 -0
  148. package/esm/network/transports/obfuscated.test.js.map +1 -0
  149. package/esm/network/transports/tcp.js +1 -1
  150. package/esm/network/transports/tcp.js.map +1 -1
  151. package/esm/network/transports/tcp.test.d.ts +1 -0
  152. package/esm/network/transports/tcp.test.js +95 -0
  153. package/esm/network/transports/tcp.test.js.map +1 -0
  154. package/esm/network/transports/websocket.test.d.ts +1 -0
  155. package/esm/network/transports/websocket.test.js +89 -0
  156. package/esm/network/transports/websocket.test.js.map +1 -0
  157. package/esm/storage/json.test.d.ts +1 -0
  158. package/esm/storage/json.test.js +35 -0
  159. package/esm/storage/json.test.js.map +1 -0
  160. package/esm/storage/localstorage.test.d.ts +1 -0
  161. package/esm/storage/localstorage.test.js +21 -0
  162. package/esm/storage/localstorage.test.js.map +1 -0
  163. package/esm/storage/memory.test.d.ts +1 -0
  164. package/esm/storage/memory.test.js +45 -0
  165. package/esm/storage/memory.test.js.map +1 -0
  166. package/esm/utils/async-lock.test.d.ts +1 -0
  167. package/esm/utils/async-lock.test.js +23 -0
  168. package/esm/utils/async-lock.test.js.map +1 -0
  169. package/esm/utils/bigint-utils.test.d.ts +1 -0
  170. package/esm/utils/bigint-utils.test.js +148 -0
  171. package/esm/utils/bigint-utils.test.js.map +1 -0
  172. package/esm/utils/buffer-utils.test.d.ts +1 -0
  173. package/esm/utils/buffer-utils.test.js +67 -0
  174. package/esm/utils/buffer-utils.test.js.map +1 -0
  175. package/esm/utils/condition-variable.test.d.ts +1 -0
  176. package/esm/utils/condition-variable.test.js +25 -0
  177. package/esm/utils/condition-variable.test.js.map +1 -0
  178. package/esm/utils/controllable-promise.test.d.ts +1 -0
  179. package/esm/utils/controllable-promise.test.js +15 -0
  180. package/esm/utils/controllable-promise.test.js.map +1 -0
  181. package/esm/utils/crypto/keys.test.d.ts +1 -0
  182. package/esm/utils/crypto/keys.test.js +38 -0
  183. package/esm/utils/crypto/keys.test.js.map +1 -0
  184. package/esm/utils/crypto/miller-rabin.test.d.ts +1 -0
  185. package/esm/utils/crypto/miller-rabin.test.js +58 -0
  186. package/esm/utils/crypto/miller-rabin.test.js.map +1 -0
  187. package/esm/utils/crypto/mtproto.test.d.ts +1 -0
  188. package/esm/utils/crypto/mtproto.test.js +45 -0
  189. package/esm/utils/crypto/mtproto.test.js.map +1 -0
  190. package/esm/utils/crypto/node.test.d.ts +1 -0
  191. package/esm/utils/crypto/node.test.js +11 -0
  192. package/esm/utils/crypto/node.test.js.map +1 -0
  193. package/esm/utils/crypto/password.test.d.ts +1 -0
  194. package/esm/utils/crypto/password.test.js +90 -0
  195. package/esm/utils/crypto/password.test.js.map +1 -0
  196. package/esm/utils/crypto/utils.test.d.ts +1 -0
  197. package/esm/utils/crypto/utils.test.js +47 -0
  198. package/esm/utils/crypto/utils.test.js.map +1 -0
  199. package/esm/utils/crypto/web.test.d.ts +1 -0
  200. package/esm/utils/crypto/web.test.js +15 -0
  201. package/esm/utils/crypto/web.test.js.map +1 -0
  202. package/esm/utils/deque.test.d.ts +1 -0
  203. package/esm/utils/deque.test.js +126 -0
  204. package/esm/utils/deque.test.js.map +1 -0
  205. package/esm/utils/function-utils.test.d.ts +1 -0
  206. package/esm/utils/function-utils.test.js +21 -0
  207. package/esm/utils/function-utils.test.js.map +1 -0
  208. package/esm/utils/linked-list.test.d.ts +1 -0
  209. package/esm/utils/linked-list.test.js +34 -0
  210. package/esm/utils/linked-list.test.js.map +1 -0
  211. package/esm/utils/links/bots.test.d.ts +1 -0
  212. package/esm/utils/links/bots.test.js +150 -0
  213. package/esm/utils/links/bots.test.js.map +1 -0
  214. package/esm/utils/links/chat.test.d.ts +1 -0
  215. package/esm/utils/links/chat.test.js +82 -0
  216. package/esm/utils/links/chat.test.js.map +1 -0
  217. package/esm/utils/links/misc.test.d.ts +1 -0
  218. package/esm/utils/links/misc.test.js +151 -0
  219. package/esm/utils/links/misc.test.js.map +1 -0
  220. package/esm/utils/links/proxy.test.d.ts +1 -0
  221. package/esm/utils/links/proxy.test.js +72 -0
  222. package/esm/utils/links/proxy.test.js.map +1 -0
  223. package/esm/utils/links/user.test.d.ts +1 -0
  224. package/esm/utils/links/user.test.js +61 -0
  225. package/esm/utils/links/user.test.js.map +1 -0
  226. package/esm/utils/logger.test.d.ts +1 -0
  227. package/esm/utils/logger.test.js +120 -0
  228. package/esm/utils/logger.test.js.map +1 -0
  229. package/esm/utils/long-utils.test.d.ts +1 -0
  230. package/esm/utils/long-utils.test.js +153 -0
  231. package/esm/utils/long-utils.test.js.map +1 -0
  232. package/esm/utils/lru-map.test.d.ts +1 -0
  233. package/esm/utils/lru-map.test.js +94 -0
  234. package/esm/utils/lru-map.test.js.map +1 -0
  235. package/esm/utils/lru-set.test.d.ts +1 -0
  236. package/esm/utils/lru-set.test.js +72 -0
  237. package/esm/utils/lru-set.test.js.map +1 -0
  238. package/esm/utils/peer-utils.test.d.ts +1 -0
  239. package/esm/utils/peer-utils.test.js +117 -0
  240. package/esm/utils/peer-utils.test.js.map +1 -0
  241. package/esm/utils/sorted-array.test.d.ts +1 -0
  242. package/esm/utils/sorted-array.test.js +64 -0
  243. package/esm/utils/sorted-array.test.js.map +1 -0
  244. package/esm/utils/string-session.test.d.ts +1 -0
  245. package/esm/utils/string-session.test.js +104 -0
  246. package/esm/utils/string-session.test.js.map +1 -0
  247. package/esm/utils/tl-json.test.d.ts +1 -0
  248. package/esm/utils/tl-json.test.js +81 -0
  249. package/esm/utils/tl-json.test.js.map +1 -0
  250. package/esm/utils/type-assertions.test.d.ts +1 -0
  251. package/esm/utils/type-assertions.test.js +65 -0
  252. package/esm/utils/type-assertions.test.js.map +1 -0
  253. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const test_1 = require("@mtcute/test");
5
+ const json_js_1 = require("./json.js");
6
+ (0, vitest_1.describe)('JsonMemoryStorage', () => {
7
+ class ExtJsonMemoryStorage extends json_js_1.JsonMemoryStorage {
8
+ loadJson(json) {
9
+ this._loadJson(json);
10
+ }
11
+ saveJson() {
12
+ return this._saveJson();
13
+ }
14
+ getInternalState() {
15
+ return this._state;
16
+ }
17
+ }
18
+ (0, vitest_1.it)('should allow importing and exporting to json', () => {
19
+ const s = new ExtJsonMemoryStorage();
20
+ s.setUpdatesPts(123);
21
+ s.setUpdatesQts(456);
22
+ // eslint-disable-next-line no-restricted-globals
23
+ s.setAuthKeyFor(1, Buffer.from([1, 2, 3]));
24
+ // eslint-disable-next-line no-restricted-globals
25
+ s.setTempAuthKeyFor(2, 0, Buffer.from([4, 5, 6]), 1234567890);
26
+ s.setState('someState', 'someValue');
27
+ s.updatePeers([{ ...test_1.stubPeerUser, updated: 0 }]);
28
+ const json = s.saveJson();
29
+ const s2 = new ExtJsonMemoryStorage();
30
+ s2.loadJson(json);
31
+ (0, vitest_1.expect)(s2.getInternalState()).toEqual({
32
+ ...s.getInternalState(),
33
+ entities: new Map(), // entities are not saved
34
+ });
35
+ });
36
+ });
37
+ //# sourceMappingURL=json.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.test.js","sourceRoot":"","sources":["../../../src/storage/json.test.ts"],"names":[],"mappings":";;AAAA,mCAA6C;AAE7C,uCAA2C;AAE3C,uCAA6C;AAE7C,IAAA,iBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,MAAM,oBAAqB,SAAQ,2BAAiB;QAChD,QAAQ,CAAC,IAAY;YACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;QAED,QAAQ;YACJ,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;QAC3B,CAAC;QAED,gBAAgB;YACZ,OAAO,IAAI,CAAC,MAAM,CAAA;QACtB,CAAC;KACJ;IAED,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAA;QAEpC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACpB,iDAAiD;QACjD,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1C,iDAAiD;QACjD,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QAC7D,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACpC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,mBAAY,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEhD,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;QACzB,MAAM,EAAE,GAAG,IAAI,oBAAoB,EAAE,CAAA;QACrC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAEjB,IAAA,eAAM,EAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC;YAClC,GAAG,CAAC,CAAC,gBAAgB,EAAE;YACvB,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,yBAAyB;SACjD,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { stubPeerUser } from '@mtcute/test'\n\nimport { JsonMemoryStorage } from './json.js'\n\ndescribe('JsonMemoryStorage', () => {\n class ExtJsonMemoryStorage extends JsonMemoryStorage {\n loadJson(json: string): void {\n this._loadJson(json)\n }\n\n saveJson(): string {\n return this._saveJson()\n }\n\n getInternalState() {\n return this._state\n }\n }\n\n it('should allow importing and exporting to json', () => {\n const s = new ExtJsonMemoryStorage()\n\n s.setUpdatesPts(123)\n s.setUpdatesQts(456)\n // eslint-disable-next-line no-restricted-globals\n s.setAuthKeyFor(1, Buffer.from([1, 2, 3]))\n // eslint-disable-next-line no-restricted-globals\n s.setTempAuthKeyFor(2, 0, Buffer.from([4, 5, 6]), 1234567890)\n s.setState('someState', 'someValue')\n s.updatePeers([{ ...stubPeerUser, updated: 0 }])\n\n const json = s.saveJson()\n const s2 = new ExtJsonMemoryStorage()\n s2.loadJson(json)\n\n expect(s2.getInternalState()).toEqual({\n ...s.getInternalState(),\n entities: new Map(), // entities are not saved\n })\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const localstorage_js_1 = require("./localstorage.js");
5
+ const localStorageStub = {
6
+ getItem: vitest_1.vi.fn().mockImplementation(() => null),
7
+ setItem: vitest_1.vi.fn(),
8
+ };
9
+ (0, vitest_1.describe)('LocalstorageStorage', () => {
10
+ (0, vitest_1.beforeAll)(() => void vitest_1.vi.stubGlobal('localStorage', localStorageStub));
11
+ (0, vitest_1.afterAll)(() => void vitest_1.vi.unstubAllGlobals());
12
+ (0, vitest_1.it)('should load from localstorage', () => {
13
+ const s = new localstorage_js_1.LocalstorageStorage('test');
14
+ s.load();
15
+ (0, vitest_1.expect)(localStorageStub.getItem).toHaveBeenCalledWith('test');
16
+ });
17
+ (0, vitest_1.it)('should save to localstorage', () => {
18
+ const s = new localstorage_js_1.LocalstorageStorage('test');
19
+ s.save();
20
+ (0, vitest_1.expect)(localStorageStub.setItem).toHaveBeenCalledWith('test', vitest_1.expect.any(String));
21
+ });
22
+ });
23
+ //# sourceMappingURL=localstorage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localstorage.test.js","sourceRoot":"","sources":["../../../src/storage/localstorage.test.ts"],"names":[],"mappings":";;AAAA,mCAAsE;AAEtE,uDAAuD;AAEvD,MAAM,gBAAgB,GAAG;IACrB,OAAO,EAAE,WAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IAC/C,OAAO,EAAE,WAAE,CAAC,EAAE,EAAE;CACnB,CAAA;AACD,IAAA,iBAAQ,EAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,IAAA,kBAAS,EAAC,GAAG,EAAE,CAAC,KAAK,WAAE,CAAC,UAAU,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAA;IACrE,IAAA,iBAAQ,EAAC,GAAG,EAAE,CAAC,KAAK,WAAE,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAE1C,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,IAAI,qCAAmB,CAAC,MAAM,CAAC,CAAA;QACzC,CAAC,CAAC,IAAI,EAAE,CAAA;QAER,IAAA,eAAM,EAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,IAAI,qCAAmB,CAAC,MAAM,CAAC,CAAA;QACzC,CAAC,CAAC,IAAI,EAAE,CAAA;QAER,IAAA,eAAM,EAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,eAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACrF,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'\n\nimport { LocalstorageStorage } from './localstorage.js'\n\nconst localStorageStub = {\n getItem: vi.fn().mockImplementation(() => null),\n setItem: vi.fn(),\n}\ndescribe('LocalstorageStorage', () => {\n beforeAll(() => void vi.stubGlobal('localStorage', localStorageStub))\n afterAll(() => void vi.unstubAllGlobals())\n\n it('should load from localstorage', () => {\n const s = new LocalstorageStorage('test')\n s.load()\n\n expect(localStorageStub.getItem).toHaveBeenCalledWith('test')\n })\n\n it('should save to localstorage', () => {\n const s = new LocalstorageStorage('test')\n s.save()\n\n expect(localStorageStub.setItem).toHaveBeenCalledWith('test', expect.any(String))\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const test_1 = require("@mtcute/test");
5
+ const memory_js_1 = require("./memory.js");
6
+ (0, vitest_1.describe)('MemoryStorage', () => {
7
+ (0, test_1.testStorage)(new memory_js_1.MemoryStorage());
8
+ (0, test_1.testStateStorage)(new memory_js_1.MemoryStorage());
9
+ (0, vitest_1.describe)('extending', () => {
10
+ (0, vitest_1.it)('should allow populating from an object', () => {
11
+ class ExtendedMemoryStorage extends memory_js_1.MemoryStorage {
12
+ constructor() {
13
+ super();
14
+ this._setStateFrom({
15
+ $version: 1,
16
+ defaultDcs: null,
17
+ authKeys: new Map(),
18
+ authKeysTemp: new Map(),
19
+ authKeysTempExpiry: new Map(),
20
+ entities: new Map(),
21
+ phoneIndex: new Map(),
22
+ usernameIndex: new Map(),
23
+ gpts: [1, 2, 3, 4],
24
+ pts: new Map(),
25
+ fsm: new Map(),
26
+ rl: new Map(),
27
+ self: null,
28
+ });
29
+ }
30
+ }
31
+ const s = new ExtendedMemoryStorage();
32
+ (0, vitest_1.expect)(s.getUpdatesState()).toEqual([1, 2, 3, 4]);
33
+ });
34
+ (0, vitest_1.it)('should silently fail if version is wrong', () => {
35
+ class ExtendedMemoryStorage extends memory_js_1.MemoryStorage {
36
+ constructor() {
37
+ super();
38
+ // eslint-disable-next-line
39
+ this._setStateFrom({ $version: 0 });
40
+ }
41
+ }
42
+ const s = new ExtendedMemoryStorage();
43
+ (0, vitest_1.expect)(s.getUpdatesState()).toEqual(null);
44
+ });
45
+ });
46
+ });
47
+ //# sourceMappingURL=memory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.test.js","sourceRoot":"","sources":["../../../src/storage/memory.test.ts"],"names":[],"mappings":";;AAAA,mCAA6C;AAE7C,uCAA4D;AAE5D,2CAA2C;AAE3C,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,IAAA,kBAAW,EAAC,IAAI,yBAAa,EAAE,CAAC,CAAA;IAChC,IAAA,uBAAgB,EAAC,IAAI,yBAAa,EAAE,CAAC,CAAA;IAErC,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;QACvB,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;YAC9C,MAAM,qBAAsB,SAAQ,yBAAa;gBAC7C;oBACI,KAAK,EAAE,CAAA;oBACP,IAAI,CAAC,aAAa,CAAC;wBACf,QAAQ,EAAE,CAAC;wBACX,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI,GAAG,EAAE;wBACnB,YAAY,EAAE,IAAI,GAAG,EAAE;wBACvB,kBAAkB,EAAE,IAAI,GAAG,EAAE;wBAC7B,QAAQ,EAAE,IAAI,GAAG,EAAE;wBACnB,UAAU,EAAE,IAAI,GAAG,EAAE;wBACrB,aAAa,EAAE,IAAI,GAAG,EAAE;wBACxB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBAClB,GAAG,EAAE,IAAI,GAAG,EAAE;wBACd,GAAG,EAAE,IAAI,GAAG,EAAE;wBACd,EAAE,EAAE,IAAI,GAAG,EAAE;wBACb,IAAI,EAAE,IAAI;qBACb,CAAC,CAAA;gBACN,CAAC;aACJ;YAED,MAAM,CAAC,GAAG,IAAI,qBAAqB,EAAE,CAAA;YAErC,IAAA,eAAM,EAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;QAEF,IAAA,WAAE,EAAC,0CAA0C,EAAE,GAAG,EAAE;YAChD,MAAM,qBAAsB,SAAQ,yBAAa;gBAC7C;oBACI,KAAK,EAAE,CAAA;oBACP,2BAA2B;oBAC3B,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAS,CAAC,CAAA;gBAC9C,CAAC;aACJ;YAED,MAAM,CAAC,GAAG,IAAI,qBAAqB,EAAE,CAAA;YAErC,IAAA,eAAM,EAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { testStateStorage, testStorage } from '@mtcute/test'\n\nimport { MemoryStorage } from './memory.js'\n\ndescribe('MemoryStorage', () => {\n testStorage(new MemoryStorage())\n testStateStorage(new MemoryStorage())\n\n describe('extending', () => {\n it('should allow populating from an object', () => {\n class ExtendedMemoryStorage extends MemoryStorage {\n constructor() {\n super()\n this._setStateFrom({\n $version: 1,\n defaultDcs: null,\n authKeys: new Map(),\n authKeysTemp: new Map(),\n authKeysTempExpiry: new Map(),\n entities: new Map(),\n phoneIndex: new Map(),\n usernameIndex: new Map(),\n gpts: [1, 2, 3, 4],\n pts: new Map(),\n fsm: new Map(),\n rl: new Map(),\n self: null,\n })\n }\n }\n\n const s = new ExtendedMemoryStorage()\n\n expect(s.getUpdatesState()).toEqual([1, 2, 3, 4])\n })\n\n it('should silently fail if version is wrong', () => {\n class ExtendedMemoryStorage extends MemoryStorage {\n constructor() {\n super()\n // eslint-disable-next-line\n this._setStateFrom({ $version: 0 } as any)\n }\n }\n\n const s = new ExtendedMemoryStorage()\n\n expect(s.getUpdatesState()).toEqual(null)\n })\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const async_lock_js_1 = require("./async-lock.js");
5
+ const misc_utils_js_1 = require("./misc-utils.js");
6
+ (0, vitest_1.describe)('AsyncLock', () => {
7
+ (0, vitest_1.it)('should correctly lock execution', async () => {
8
+ const lock = new async_lock_js_1.AsyncLock();
9
+ const log = [];
10
+ await Promise.all(Array.from({ length: 10 }, (_, idx) => lock.with(async () => {
11
+ await (0, misc_utils_js_1.sleep)(10 - idx);
12
+ log.push(idx);
13
+ })));
14
+ (0, vitest_1.expect)(log).toEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
15
+ });
16
+ (0, vitest_1.it)('should correctly propagate errors', async () => {
17
+ const lock = new async_lock_js_1.AsyncLock();
18
+ await (0, vitest_1.expect)(async () => {
19
+ await lock.with(() => {
20
+ throw new Error('test');
21
+ });
22
+ }).rejects.toThrow('test');
23
+ });
24
+ });
25
+ //# sourceMappingURL=async-lock.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-lock.test.js","sourceRoot":"","sources":["../../../src/utils/async-lock.test.ts"],"names":[],"mappings":";;AAAA,mCAA6C;AAE7C,mDAA2C;AAC3C,mDAAuC;AAEvC,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;IACvB,IAAA,WAAE,EAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,IAAI,GAAG,IAAI,yBAAS,EAAE,CAAA;QAE5B,MAAM,GAAG,GAAa,EAAE,CAAA;QACxB,MAAM,OAAO,CAAC,GAAG,CACb,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAClC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,IAAA,qBAAK,EAAC,EAAE,GAAG,GAAG,CAAC,CAAA;YACrB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC,CAAC,CACL,CACJ,CAAA;QAED,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,IAAI,GAAG,IAAI,yBAAS,EAAE,CAAA;QAE5B,MAAM,IAAA,eAAM,EAAC,KAAK,IAAI,EAAE;YACpB,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAA;YAC3B,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { AsyncLock } from './async-lock.js'\nimport { sleep } from './misc-utils.js'\n\ndescribe('AsyncLock', () => {\n it('should correctly lock execution', async () => {\n const lock = new AsyncLock()\n\n const log: number[] = []\n await Promise.all(\n Array.from({ length: 10 }, (_, idx) =>\n lock.with(async () => {\n await sleep(10 - idx)\n log.push(idx)\n }),\n ),\n )\n\n expect(log).toEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n })\n\n it('should correctly propagate errors', async () => {\n const lock = new AsyncLock()\n\n await expect(async () => {\n await lock.with(() => {\n throw new Error('test')\n })\n }).rejects.toThrow('test')\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const test_1 = require("@mtcute/test");
5
+ const tl_runtime_1 = require("@mtcute/tl-runtime");
6
+ const index_js_1 = require("./index.js");
7
+ (0, vitest_1.describe)('bigIntBitLength', () => {
8
+ (0, vitest_1.it)('should correctly calculate bit length', () => {
9
+ (0, vitest_1.expect)((0, index_js_1.bigIntBitLength)(0n)).eq(0);
10
+ (0, vitest_1.expect)((0, index_js_1.bigIntBitLength)(1n)).eq(1);
11
+ (0, vitest_1.expect)((0, index_js_1.bigIntBitLength)(2n)).eq(2);
12
+ (0, vitest_1.expect)((0, index_js_1.bigIntBitLength)(255n)).eq(8);
13
+ (0, vitest_1.expect)((0, index_js_1.bigIntBitLength)(256n)).eq(9);
14
+ });
15
+ });
16
+ (0, vitest_1.describe)('bigIntToBuffer', () => {
17
+ (0, vitest_1.it)('should handle writing to BE', () => {
18
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('10495708'), 0, false)]).eql([0xa0, 0x26, 0xdc]);
19
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('10495708'), 4, false)]).eql([0x00, 0xa0, 0x26, 0xdc]);
20
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('10495708'), 8, false)]).eql([0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x26, 0xdc]);
21
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('3038102549'), 4, false)]).eql([0xb5, 0x15, 0xc4, 0x15]);
22
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('9341376580368336208'), 8, false)]).eql([
23
+ ...(0, tl_runtime_1.hexDecodeToBuffer)('81A33C81D2020550'),
24
+ ]);
25
+ });
26
+ (0, vitest_1.it)('should handle writing to LE', () => {
27
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('10495708'), 0, true)]).eql([0xdc, 0x26, 0xa0]);
28
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('10495708'), 4, true)]).eql([0xdc, 0x26, 0xa0, 0x00]);
29
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('10495708'), 8, true)]).eql([0xdc, 0x26, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00]);
30
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('3038102549'), 4, true)]).eql([0x15, 0xc4, 0x15, 0xb5]);
31
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(BigInt('9341376580368336208'), 8, true)]).eql([
32
+ ...(0, tl_runtime_1.hexDecodeToBuffer)('81A33C81D2020550').reverse(),
33
+ ]);
34
+ });
35
+ (0, vitest_1.it)('should handle large integers', () => {
36
+ const buf = (0, tl_runtime_1.hexDecodeToBuffer)('1a981ce8bf86bf4a1bd79c2ef829914172f8d0e54cb7ad807552d56977e1c946872e2c7bd77052be30e7e9a7a35c4feff848a25759f5f2f5b0e96538');
37
+ const num = BigInt('0x1a981ce8bf86bf4a1bd79c2ef829914172f8d0e54cb7ad807552d56977e1c946872e2c7bd77052be30e7e9a7a35c4feff848a25759f5f2f5b0e96538');
38
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(num, 0, false)]).eql([...buf]);
39
+ (0, vitest_1.expect)([...(0, index_js_1.bigIntToBuffer)(num, 0, true)]).eql([...buf.reverse()]);
40
+ });
41
+ });
42
+ (0, vitest_1.describe)('bufferToBigInt', () => {
43
+ (0, vitest_1.it)('should handle reading BE', () => {
44
+ (0, vitest_1.expect)((0, index_js_1.bufferToBigInt)(new Uint8Array([0xa0, 0x26, 0xdc]), false).toString()).eq('10495708');
45
+ (0, vitest_1.expect)((0, index_js_1.bufferToBigInt)(new Uint8Array([0x00, 0xa0, 0x26, 0xdc]), false).toString()).eq('10495708');
46
+ (0, vitest_1.expect)((0, index_js_1.bufferToBigInt)(new Uint8Array([0xb5, 0x15, 0xc4, 0x15]), false).toString()).eq('3038102549');
47
+ });
48
+ (0, vitest_1.it)('should handle reading LE', () => {
49
+ (0, vitest_1.expect)((0, index_js_1.bufferToBigInt)(new Uint8Array([0xdc, 0x26, 0xa0]), true).toString()).eq('10495708');
50
+ (0, vitest_1.expect)((0, index_js_1.bufferToBigInt)(new Uint8Array([0xdc, 0x26, 0xa0, 0x00]), true).toString()).eq('10495708');
51
+ (0, vitest_1.expect)((0, index_js_1.bufferToBigInt)(new Uint8Array([0x15, 0xc4, 0x15, 0xb5]), true).toString()).eq('3038102549');
52
+ });
53
+ (0, vitest_1.it)('should handle large integers', () => {
54
+ const buf = (0, tl_runtime_1.hexDecodeToBuffer)('1a981ce8bf86bf4a1bd79c2ef829914172f8d0e54cb7ad807552d56977e1c946872e2c7bd77052be30e7e9a7a35c4feff848a25759f5f2f5b0e96538');
55
+ const num = BigInt('0x1a981ce8bf86bf4a1bd79c2ef829914172f8d0e54cb7ad807552d56977e1c946872e2c7bd77052be30e7e9a7a35c4feff848a25759f5f2f5b0e96538');
56
+ (0, vitest_1.expect)((0, index_js_1.bufferToBigInt)(buf, false).toString()).eq(num.toString());
57
+ (0, vitest_1.expect)((0, index_js_1.bufferToBigInt)(buf.reverse(), true).toString()).eq(num.toString());
58
+ });
59
+ });
60
+ (0, vitest_1.describe)('randomBigInt', async () => {
61
+ const c = await (0, test_1.defaultTestCryptoProvider)();
62
+ (0, vitest_1.it)('should return a random bigint', () => {
63
+ const a = (0, index_js_1.randomBigInt)(c, 32);
64
+ const b = (0, index_js_1.randomBigInt)(c, 32);
65
+ (0, vitest_1.expect)(a).not.toEqual(b);
66
+ });
67
+ (0, vitest_1.it)('should return a random bigint up to specified byte length', () => {
68
+ const a = (0, index_js_1.randomBigInt)(c, 32);
69
+ const b = (0, index_js_1.randomBigInt)(c, 64);
70
+ (0, vitest_1.expect)((0, index_js_1.bigIntBitLength)(a)).toBeLessThanOrEqual(32 * 8);
71
+ (0, vitest_1.expect)((0, index_js_1.bigIntBitLength)(b)).toBeLessThanOrEqual(64 * 8);
72
+ });
73
+ });
74
+ (0, vitest_1.describe)('randomBigIntBits', async () => {
75
+ const c = await (0, test_1.defaultTestCryptoProvider)();
76
+ (0, vitest_1.it)('should return a random bigint', () => {
77
+ const a = (0, index_js_1.randomBigIntBits)(c, 32);
78
+ const b = (0, index_js_1.randomBigIntBits)(c, 32);
79
+ (0, vitest_1.expect)(a).not.toEqual(b);
80
+ });
81
+ (0, vitest_1.it)('should return a random bigint up to specified bit length', () => {
82
+ const a = (0, index_js_1.randomBigIntBits)(c, 32);
83
+ const b = (0, index_js_1.randomBigIntBits)(c, 64);
84
+ (0, vitest_1.expect)((0, index_js_1.bigIntBitLength)(a)).toBeLessThanOrEqual(32);
85
+ (0, vitest_1.expect)((0, index_js_1.bigIntBitLength)(b)).toBeLessThanOrEqual(64);
86
+ });
87
+ });
88
+ (0, vitest_1.describe)('randomBigIntInRange', async () => {
89
+ const c = await (0, test_1.defaultTestCryptoProvider)();
90
+ (0, vitest_1.it)('should return a random bigint', () => {
91
+ const a = (0, index_js_1.randomBigIntInRange)(c, 10000n);
92
+ const b = (0, index_js_1.randomBigIntInRange)(c, 10000n);
93
+ (0, vitest_1.expect)(a).not.toEqual(b);
94
+ });
95
+ (0, vitest_1.it)('should return a bigint within a given range', () => {
96
+ const a = (0, index_js_1.randomBigIntInRange)(c, 200n, 100n);
97
+ (0, vitest_1.expect)(a).toBeGreaterThanOrEqual(100n);
98
+ (0, vitest_1.expect)(a).toBeLessThan(200n);
99
+ });
100
+ });
101
+ (0, vitest_1.describe)('twoMultiplicity', () => {
102
+ (0, vitest_1.it)('should return the multiplicity of 2 in the prime factorization of n', () => {
103
+ (0, vitest_1.expect)((0, index_js_1.twoMultiplicity)(0n)).toEqual(0n);
104
+ (0, vitest_1.expect)((0, index_js_1.twoMultiplicity)(1n)).toEqual(0n);
105
+ (0, vitest_1.expect)((0, index_js_1.twoMultiplicity)(2n)).toEqual(1n);
106
+ (0, vitest_1.expect)((0, index_js_1.twoMultiplicity)(4n)).toEqual(2n);
107
+ (0, vitest_1.expect)((0, index_js_1.twoMultiplicity)(65536n)).toEqual(16n);
108
+ (0, vitest_1.expect)((0, index_js_1.twoMultiplicity)(65537n)).toEqual(0n);
109
+ });
110
+ });
111
+ (0, vitest_1.describe)('bigIntGcd', () => {
112
+ (0, vitest_1.it)('should return the greatest common divisor of a and b', () => {
113
+ (0, vitest_1.expect)((0, index_js_1.bigIntGcd)(123n, 456n)).toEqual(3n);
114
+ });
115
+ (0, vitest_1.it)('should correctly handle zeros', () => {
116
+ (0, vitest_1.expect)((0, index_js_1.bigIntGcd)(0n, 0n)).toEqual(0n);
117
+ (0, vitest_1.expect)((0, index_js_1.bigIntGcd)(0n, 1n)).toEqual(1n);
118
+ (0, vitest_1.expect)((0, index_js_1.bigIntGcd)(1n, 0n)).toEqual(1n);
119
+ });
120
+ (0, vitest_1.it)('should correctly handle equal values', () => {
121
+ (0, vitest_1.expect)((0, index_js_1.bigIntGcd)(1n, 1n)).toEqual(1n);
122
+ });
123
+ });
124
+ (0, vitest_1.describe)('bigIntModPow', () => {
125
+ (0, vitest_1.it)('should correctly calculate modular exponentiation', () => {
126
+ (0, vitest_1.expect)((0, index_js_1.bigIntModPow)(2n, 3n, 5n)).toEqual(3n);
127
+ (0, vitest_1.expect)((0, index_js_1.bigIntModPow)(2n, 3n, 6n)).toEqual(2n);
128
+ (0, vitest_1.expect)((0, index_js_1.bigIntModPow)(2n, 3n, 7n)).toEqual(1n);
129
+ (0, vitest_1.expect)((0, index_js_1.bigIntModPow)(2n, 3n, 8n)).toEqual(0n);
130
+ });
131
+ (0, vitest_1.it)('should correctly handle very large numbers', () => {
132
+ // calculating this with BigInt would either take forever or error with "Maximum BigInt size exceeded
133
+ (0, vitest_1.expect)((0, index_js_1.bigIntModPow)(2n, 100000000000n, 100n)).toEqual(76n);
134
+ });
135
+ });
136
+ (0, vitest_1.describe)('bigIntModInv', () => {
137
+ (0, vitest_1.it)('should correctly calculate modular inverse', () => {
138
+ (0, vitest_1.expect)((0, index_js_1.bigIntModInv)(2n, 5n)).toEqual(3n);
139
+ (0, vitest_1.expect)((0, index_js_1.bigIntModInv)(2n, 7n)).toEqual(4n);
140
+ });
141
+ (0, vitest_1.it)("should error if there's no modular inverse", () => {
142
+ (0, vitest_1.expect)(() => (0, index_js_1.bigIntModInv)(2n, 6n)).toThrow(RangeError);
143
+ (0, vitest_1.expect)(() => (0, index_js_1.bigIntModInv)(2n, 8n)).toThrow(RangeError);
144
+ });
145
+ (0, vitest_1.it)('should correctly handle very large numbers', () => {
146
+ // calculating this with BigInt would either take forever or error with "Maximum BigInt size exceeded
147
+ (0, vitest_1.expect)((0, index_js_1.bigIntModInv)(123123123123n, 1829n)).toEqual(318n);
148
+ });
149
+ });
150
+ //# sourceMappingURL=bigint-utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigint-utils.test.js","sourceRoot":"","sources":["../../../src/utils/bigint-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { defaultTestCryptoProvider } from '@mtcute/test'\nimport { hexDecodeToBuffer } from '@mtcute/tl-runtime'\n\nimport {\n bigIntBitLength,\n bigIntGcd,\n bigIntModInv,\n bigIntModPow,\n bigIntToBuffer,\n bufferToBigInt,\n randomBigInt,\n randomBigIntBits,\n randomBigIntInRange,\n twoMultiplicity,\n} from './index.js'\n\ndescribe('bigIntBitLength', () => {\n it('should correctly calculate bit length', () => {\n expect(bigIntBitLength(0n)).eq(0)\n expect(bigIntBitLength(1n)).eq(1)\n expect(bigIntBitLength(2n)).eq(2)\n expect(bigIntBitLength(255n)).eq(8)\n expect(bigIntBitLength(256n)).eq(9)\n })\n})\n\ndescribe('bigIntToBuffer', () => {\n it('should handle writing to BE', () => {\n expect([...bigIntToBuffer(BigInt('10495708'), 0, false)]).eql([0xa0, 0x26, 0xdc])\n expect([...bigIntToBuffer(BigInt('10495708'), 4, false)]).eql([0x00, 0xa0, 0x26, 0xdc])\n expect([...bigIntToBuffer(BigInt('10495708'), 8, false)]).eql([0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x26, 0xdc])\n expect([...bigIntToBuffer(BigInt('3038102549'), 4, false)]).eql([0xb5, 0x15, 0xc4, 0x15])\n expect([...bigIntToBuffer(BigInt('9341376580368336208'), 8, false)]).eql([\n ...hexDecodeToBuffer('81A33C81D2020550'),\n ])\n })\n\n it('should handle writing to LE', () => {\n expect([...bigIntToBuffer(BigInt('10495708'), 0, true)]).eql([0xdc, 0x26, 0xa0])\n expect([...bigIntToBuffer(BigInt('10495708'), 4, true)]).eql([0xdc, 0x26, 0xa0, 0x00])\n expect([...bigIntToBuffer(BigInt('10495708'), 8, true)]).eql([0xdc, 0x26, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00])\n expect([...bigIntToBuffer(BigInt('3038102549'), 4, true)]).eql([0x15, 0xc4, 0x15, 0xb5])\n expect([...bigIntToBuffer(BigInt('9341376580368336208'), 8, true)]).eql([\n ...hexDecodeToBuffer('81A33C81D2020550').reverse(),\n ])\n })\n\n it('should handle large integers', () => {\n const buf = hexDecodeToBuffer(\n '1a981ce8bf86bf4a1bd79c2ef829914172f8d0e54cb7ad807552d56977e1c946872e2c7bd77052be30e7e9a7a35c4feff848a25759f5f2f5b0e96538',\n )\n const num = BigInt(\n '0x1a981ce8bf86bf4a1bd79c2ef829914172f8d0e54cb7ad807552d56977e1c946872e2c7bd77052be30e7e9a7a35c4feff848a25759f5f2f5b0e96538',\n )\n\n expect([...bigIntToBuffer(num, 0, false)]).eql([...buf])\n expect([...bigIntToBuffer(num, 0, true)]).eql([...buf.reverse()])\n })\n})\n\ndescribe('bufferToBigInt', () => {\n it('should handle reading BE', () => {\n expect(bufferToBigInt(new Uint8Array([0xa0, 0x26, 0xdc]), false).toString()).eq('10495708')\n expect(bufferToBigInt(new Uint8Array([0x00, 0xa0, 0x26, 0xdc]), false).toString()).eq('10495708')\n expect(bufferToBigInt(new Uint8Array([0xb5, 0x15, 0xc4, 0x15]), false).toString()).eq('3038102549')\n })\n\n it('should handle reading LE', () => {\n expect(bufferToBigInt(new Uint8Array([0xdc, 0x26, 0xa0]), true).toString()).eq('10495708')\n expect(bufferToBigInt(new Uint8Array([0xdc, 0x26, 0xa0, 0x00]), true).toString()).eq('10495708')\n expect(bufferToBigInt(new Uint8Array([0x15, 0xc4, 0x15, 0xb5]), true).toString()).eq('3038102549')\n })\n\n it('should handle large integers', () => {\n const buf = hexDecodeToBuffer(\n '1a981ce8bf86bf4a1bd79c2ef829914172f8d0e54cb7ad807552d56977e1c946872e2c7bd77052be30e7e9a7a35c4feff848a25759f5f2f5b0e96538',\n )\n const num = BigInt(\n '0x1a981ce8bf86bf4a1bd79c2ef829914172f8d0e54cb7ad807552d56977e1c946872e2c7bd77052be30e7e9a7a35c4feff848a25759f5f2f5b0e96538',\n )\n\n expect(bufferToBigInt(buf, false).toString()).eq(num.toString())\n expect(bufferToBigInt(buf.reverse(), true).toString()).eq(num.toString())\n })\n})\n\ndescribe('randomBigInt', async () => {\n const c = await defaultTestCryptoProvider()\n\n it('should return a random bigint', () => {\n const a = randomBigInt(c, 32)\n const b = randomBigInt(c, 32)\n\n expect(a).not.toEqual(b)\n })\n\n it('should return a random bigint up to specified byte length', () => {\n const a = randomBigInt(c, 32)\n const b = randomBigInt(c, 64)\n\n expect(bigIntBitLength(a)).toBeLessThanOrEqual(32 * 8)\n expect(bigIntBitLength(b)).toBeLessThanOrEqual(64 * 8)\n })\n})\n\ndescribe('randomBigIntBits', async () => {\n const c = await defaultTestCryptoProvider()\n\n it('should return a random bigint', () => {\n const a = randomBigIntBits(c, 32)\n const b = randomBigIntBits(c, 32)\n\n expect(a).not.toEqual(b)\n })\n\n it('should return a random bigint up to specified bit length', () => {\n const a = randomBigIntBits(c, 32)\n const b = randomBigIntBits(c, 64)\n\n expect(bigIntBitLength(a)).toBeLessThanOrEqual(32)\n expect(bigIntBitLength(b)).toBeLessThanOrEqual(64)\n })\n})\n\ndescribe('randomBigIntInRange', async () => {\n const c = await defaultTestCryptoProvider()\n\n it('should return a random bigint', () => {\n const a = randomBigIntInRange(c, 10000n)\n const b = randomBigIntInRange(c, 10000n)\n\n expect(a).not.toEqual(b)\n })\n\n it('should return a bigint within a given range', () => {\n const a = randomBigIntInRange(c, 200n, 100n)\n\n expect(a).toBeGreaterThanOrEqual(100n)\n expect(a).toBeLessThan(200n)\n })\n})\n\ndescribe('twoMultiplicity', () => {\n it('should return the multiplicity of 2 in the prime factorization of n', () => {\n expect(twoMultiplicity(0n)).toEqual(0n)\n expect(twoMultiplicity(1n)).toEqual(0n)\n expect(twoMultiplicity(2n)).toEqual(1n)\n expect(twoMultiplicity(4n)).toEqual(2n)\n expect(twoMultiplicity(65536n)).toEqual(16n)\n expect(twoMultiplicity(65537n)).toEqual(0n)\n })\n})\n\ndescribe('bigIntGcd', () => {\n it('should return the greatest common divisor of a and b', () => {\n expect(bigIntGcd(123n, 456n)).toEqual(3n)\n })\n\n it('should correctly handle zeros', () => {\n expect(bigIntGcd(0n, 0n)).toEqual(0n)\n expect(bigIntGcd(0n, 1n)).toEqual(1n)\n expect(bigIntGcd(1n, 0n)).toEqual(1n)\n })\n\n it('should correctly handle equal values', () => {\n expect(bigIntGcd(1n, 1n)).toEqual(1n)\n })\n})\n\ndescribe('bigIntModPow', () => {\n it('should correctly calculate modular exponentiation', () => {\n expect(bigIntModPow(2n, 3n, 5n)).toEqual(3n)\n expect(bigIntModPow(2n, 3n, 6n)).toEqual(2n)\n expect(bigIntModPow(2n, 3n, 7n)).toEqual(1n)\n expect(bigIntModPow(2n, 3n, 8n)).toEqual(0n)\n })\n\n it('should correctly handle very large numbers', () => {\n // calculating this with BigInt would either take forever or error with \"Maximum BigInt size exceeded\n expect(bigIntModPow(2n, 100000000000n, 100n)).toEqual(76n)\n })\n})\n\ndescribe('bigIntModInv', () => {\n it('should correctly calculate modular inverse', () => {\n expect(bigIntModInv(2n, 5n)).toEqual(3n)\n expect(bigIntModInv(2n, 7n)).toEqual(4n)\n })\n\n it(\"should error if there's no modular inverse\", () => {\n expect(() => bigIntModInv(2n, 6n)).toThrow(RangeError)\n expect(() => bigIntModInv(2n, 8n)).toThrow(RangeError)\n })\n\n it('should correctly handle very large numbers', () => {\n // calculating this with BigInt would either take forever or error with \"Maximum BigInt size exceeded\n expect(bigIntModInv(123123123123n, 1829n)).toEqual(318n)\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const buffer_utils_js_1 = require("./buffer-utils.js");
5
+ (0, vitest_1.describe)('buffersEqual', () => {
6
+ (0, vitest_1.it)('should return true for equal buffers', () => {
7
+ (0, vitest_1.expect)((0, buffer_utils_js_1.buffersEqual)(new Uint8Array([]), new Uint8Array([]))).is.true;
8
+ (0, vitest_1.expect)((0, buffer_utils_js_1.buffersEqual)(new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 3]))).is.true;
9
+ });
10
+ (0, vitest_1.it)('should return false for non-equal buffers', () => {
11
+ (0, vitest_1.expect)((0, buffer_utils_js_1.buffersEqual)(new Uint8Array([1]), new Uint8Array([]))).is.false;
12
+ (0, vitest_1.expect)((0, buffer_utils_js_1.buffersEqual)(new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 4]))).is.false;
13
+ });
14
+ });
15
+ (0, vitest_1.describe)('cloneBuffer', () => {
16
+ (0, vitest_1.it)('should clone buffer', () => {
17
+ const orig = new Uint8Array([1, 2, 3]);
18
+ const copy = (0, buffer_utils_js_1.cloneBuffer)(orig);
19
+ (0, vitest_1.expect)([...copy]).eql([1, 2, 3]);
20
+ orig[0] = 0xff;
21
+ (0, vitest_1.expect)(copy[0]).not.eql(0xff);
22
+ });
23
+ (0, vitest_1.it)('should clone buffer partially', () => {
24
+ const orig = new Uint8Array([1, 2, 3, 4, 5]);
25
+ const copy = (0, buffer_utils_js_1.cloneBuffer)(orig, 1, 4);
26
+ (0, vitest_1.expect)([...copy]).eql([2, 3, 4]);
27
+ orig[0] = 0xff;
28
+ (0, vitest_1.expect)(copy[0]).not.eql(0xff);
29
+ });
30
+ });
31
+ (0, vitest_1.describe)('concatBuffers', () => {
32
+ (0, vitest_1.it)('should concat buffers', () => {
33
+ const buf = (0, buffer_utils_js_1.concatBuffers)([new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])]);
34
+ (0, vitest_1.expect)([...buf]).eql([1, 2, 3, 4, 5, 6]);
35
+ });
36
+ (0, vitest_1.it)('should create a new buffer', () => {
37
+ const buf1 = new Uint8Array([1, 2, 3]);
38
+ const buf2 = new Uint8Array([4, 5, 6]);
39
+ const buf = (0, buffer_utils_js_1.concatBuffers)([buf1, buf2]);
40
+ buf[0] = 0xff;
41
+ (0, vitest_1.expect)(buf1[0]).not.eql(0xff);
42
+ });
43
+ (0, vitest_1.it)('should work without native Buffer', () => {
44
+ vitest_1.vi.stubGlobal('Buffer', undefined);
45
+ const buf1 = new Uint8Array([1, 2, 3]);
46
+ const buf2 = new Uint8Array([4, 5, 6]);
47
+ const buf = (0, buffer_utils_js_1.concatBuffers)([buf1, buf2]);
48
+ buf1[0] = 0xff;
49
+ (0, vitest_1.expect)([...buf]).eql([1, 2, 3, 4, 5, 6]);
50
+ });
51
+ (0, vitest_1.afterEach)(() => void vitest_1.vi.unstubAllGlobals());
52
+ });
53
+ (0, vitest_1.describe)('bufferToReversed', () => {
54
+ (0, vitest_1.it)('should reverse the buffer', () => {
55
+ const buf = (0, buffer_utils_js_1.bufferToReversed)(new Uint8Array([1, 2, 3, 4, 5, 6]));
56
+ (0, vitest_1.expect)([...buf]).eql([6, 5, 4, 3, 2, 1]);
57
+ });
58
+ (0, vitest_1.it)('should reverse a part of the buffer', () => {
59
+ const buf = (0, buffer_utils_js_1.bufferToReversed)(new Uint8Array([1, 2, 3, 4, 5, 6]), 1, 5);
60
+ (0, vitest_1.expect)([...buf]).eql([5, 4, 3, 2]);
61
+ });
62
+ (0, vitest_1.it)('should create a new buffer', () => {
63
+ const buf1 = new Uint8Array([1, 2, 3]);
64
+ const buf2 = (0, buffer_utils_js_1.bufferToReversed)(buf1);
65
+ buf2[0] = 0xff;
66
+ (0, vitest_1.expect)([...buf1]).eql([1, 2, 3]);
67
+ });
68
+ });
69
+ //# sourceMappingURL=buffer-utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer-utils.test.js","sourceRoot":"","sources":["../../../src/utils/buffer-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { afterEach, describe, expect, it, vi } from 'vitest'\n\nimport { buffersEqual, bufferToReversed, cloneBuffer, concatBuffers } from './buffer-utils.js'\n\ndescribe('buffersEqual', () => {\n it('should return true for equal buffers', () => {\n expect(buffersEqual(new Uint8Array([]), new Uint8Array([]))).is.true\n expect(buffersEqual(new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 3]))).is.true\n })\n\n it('should return false for non-equal buffers', () => {\n expect(buffersEqual(new Uint8Array([1]), new Uint8Array([]))).is.false\n expect(buffersEqual(new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 4]))).is.false\n })\n})\n\ndescribe('cloneBuffer', () => {\n it('should clone buffer', () => {\n const orig = new Uint8Array([1, 2, 3])\n const copy = cloneBuffer(orig)\n\n expect([...copy]).eql([1, 2, 3])\n orig[0] = 0xff\n expect(copy[0]).not.eql(0xff)\n })\n\n it('should clone buffer partially', () => {\n const orig = new Uint8Array([1, 2, 3, 4, 5])\n const copy = cloneBuffer(orig, 1, 4)\n\n expect([...copy]).eql([2, 3, 4])\n orig[0] = 0xff\n expect(copy[0]).not.eql(0xff)\n })\n})\n\ndescribe('concatBuffers', () => {\n it('should concat buffers', () => {\n const buf = concatBuffers([new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])])\n\n expect([...buf]).eql([1, 2, 3, 4, 5, 6])\n })\n\n it('should create a new buffer', () => {\n const buf1 = new Uint8Array([1, 2, 3])\n const buf2 = new Uint8Array([4, 5, 6])\n const buf = concatBuffers([buf1, buf2])\n\n buf[0] = 0xff\n expect(buf1[0]).not.eql(0xff)\n })\n\n it('should work without native Buffer', () => {\n vi.stubGlobal('Buffer', undefined)\n const buf1 = new Uint8Array([1, 2, 3])\n const buf2 = new Uint8Array([4, 5, 6])\n const buf = concatBuffers([buf1, buf2])\n\n buf1[0] = 0xff\n\n expect([...buf]).eql([1, 2, 3, 4, 5, 6])\n })\n\n afterEach(() => void vi.unstubAllGlobals())\n})\n\ndescribe('bufferToReversed', () => {\n it('should reverse the buffer', () => {\n const buf = bufferToReversed(new Uint8Array([1, 2, 3, 4, 5, 6]))\n\n expect([...buf]).eql([6, 5, 4, 3, 2, 1])\n })\n\n it('should reverse a part of the buffer', () => {\n const buf = bufferToReversed(new Uint8Array([1, 2, 3, 4, 5, 6]), 1, 5)\n\n expect([...buf]).eql([5, 4, 3, 2])\n })\n\n it('should create a new buffer', () => {\n const buf1 = new Uint8Array([1, 2, 3])\n const buf2 = bufferToReversed(buf1)\n\n buf2[0] = 0xff\n expect([...buf1]).eql([1, 2, 3])\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const condition_variable_js_1 = require("./condition-variable.js");
5
+ (0, vitest_1.describe)('ConditionVariable', () => {
6
+ (0, vitest_1.it)('should correctly unlock execution', async () => {
7
+ const cv = new condition_variable_js_1.ConditionVariable();
8
+ setTimeout(() => cv.notify(), 10);
9
+ await cv.wait();
10
+ (0, vitest_1.expect)(true).toBeTruthy();
11
+ });
12
+ (0, vitest_1.it)('should correctly time out', async () => {
13
+ const cv = new condition_variable_js_1.ConditionVariable();
14
+ await cv.wait(10);
15
+ (0, vitest_1.expect)(true).toBeTruthy();
16
+ });
17
+ (0, vitest_1.it)('should only unlock once', async () => {
18
+ const cv = new condition_variable_js_1.ConditionVariable();
19
+ setTimeout(() => {
20
+ cv.notify();
21
+ cv.notify();
22
+ }, 10);
23
+ await cv.wait();
24
+ (0, vitest_1.expect)(true).toBeTruthy();
25
+ });
26
+ });
27
+ //# sourceMappingURL=condition-variable.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-variable.test.js","sourceRoot":"","sources":["../../../src/utils/condition-variable.test.ts"],"names":[],"mappings":";;AAAA,mCAA6C;AAE7C,mEAA2D;AAE3D,IAAA,iBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,IAAA,WAAE,EAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,GAAG,IAAI,yCAAiB,EAAE,CAAA;QAElC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;QAEjC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAEf,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,EAAE,GAAG,IAAI,yCAAiB,EAAE,CAAA;QAElC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEjB,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,EAAE,GAAG,IAAI,yCAAiB,EAAE,CAAA;QAElC,UAAU,CAAC,GAAG,EAAE;YACZ,EAAE,CAAC,MAAM,EAAE,CAAA;YACX,EAAE,CAAC,MAAM,EAAE,CAAA;QACf,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;QAEf,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7B,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { ConditionVariable } from './condition-variable.js'\n\ndescribe('ConditionVariable', () => {\n it('should correctly unlock execution', async () => {\n const cv = new ConditionVariable()\n\n setTimeout(() => cv.notify(), 10)\n\n await cv.wait()\n\n expect(true).toBeTruthy()\n })\n\n it('should correctly time out', async () => {\n const cv = new ConditionVariable()\n\n await cv.wait(10)\n\n expect(true).toBeTruthy()\n })\n\n it('should only unlock once', async () => {\n const cv = new ConditionVariable()\n\n setTimeout(() => {\n cv.notify()\n cv.notify()\n }, 10)\n\n await cv.wait()\n\n expect(true).toBeTruthy()\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const controllable_promise_js_1 = require("./controllable-promise.js");
5
+ (0, vitest_1.describe)('createControllablePromise', () => {
6
+ (0, vitest_1.it)('should resolve', async () => {
7
+ const p = (0, controllable_promise_js_1.createControllablePromise)();
8
+ p.resolve(1);
9
+ await (0, vitest_1.expect)(p).resolves.toBe(1);
10
+ });
11
+ (0, vitest_1.it)('should reject', async () => {
12
+ const p = (0, controllable_promise_js_1.createControllablePromise)();
13
+ p.reject(1);
14
+ await (0, vitest_1.expect)(p).rejects.toBe(1);
15
+ });
16
+ });
17
+ //# sourceMappingURL=controllable-promise.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controllable-promise.test.js","sourceRoot":"","sources":["../../../src/utils/controllable-promise.test.ts"],"names":[],"mappings":";;AAAA,mCAA6C;AAE7C,uEAAqE;AAErE,IAAA,iBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;IACvC,IAAA,WAAE,EAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,CAAC,GAAG,IAAA,mDAAyB,GAAE,CAAA;QACrC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACZ,MAAM,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC3B,MAAM,CAAC,GAAG,IAAA,mDAAyB,GAAE,CAAA;QACrC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACX,MAAM,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { createControllablePromise } from './controllable-promise.js'\n\ndescribe('createControllablePromise', () => {\n it('should resolve', async () => {\n const p = createControllablePromise()\n p.resolve(1)\n await expect(p).resolves.toBe(1)\n })\n\n it('should reject', async () => {\n const p = createControllablePromise()\n p.reject(1)\n await expect(p).rejects.toBe(1)\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const index_js_1 = require("../index.js");
5
+ const node_js_1 = require("./node.js");
6
+ const crypto = new node_js_1.NodeCryptoProvider();
7
+ (0, vitest_1.describe)('parsePublicKey', () => {
8
+ (0, vitest_1.it)('should parse telegram public keys', () => {
9
+ (0, vitest_1.expect)((0, index_js_1.parsePublicKey)(crypto, `-----BEGIN RSA PUBLIC KEY-----
10
+ MIIBCgKCAQEAruw2yP/BCcsJliRoW5eBVBVle9dtjJw+OYED160Wybum9SXtBBLX
11
+ riwt4rROd9csv0t0OHCaTmRqBcQ0J8fxhN6/cpR1GWgOZRUAiQxoMnlt0R93LCX/
12
+ j1dnVa/gVbCjdSxpbrfY2g2L4frzjJvdl84Kd9ORYjDEAyFnEA7dD556OptgLQQ2
13
+ e2iVNq8NZLYTzLp5YpOdO1doK+ttrltggTCy5SrKeLoCPPbOgGsdxJxyz5KKcZnS
14
+ Lj16yE5HvJQn0CNpRdENvRUXe6tBP78O39oJ8BTHp9oIjd6XWXAsp2CvK45Ol8wF
15
+ XGF710w9lwCGNbmNxNYhtIkdqfsEcwR5JwIDAQAB
16
+ -----END RSA PUBLIC KEY-----`)).eql({
17
+ modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',
18
+ exponent: '010001',
19
+ fingerprint: '0bc35f3509f7b7a5',
20
+ old: false,
21
+ });
22
+ });
23
+ (0, vitest_1.it)('should be able to find a key by its fingerprint', () => {
24
+ (0, vitest_1.expect)((0, index_js_1.findKeyByFingerprints)(['b25898df208d2603'])).toMatchInlineSnapshot(`
25
+ {
26
+ "exponent": "010001",
27
+ "fingerprint": "b25898df208d2603",
28
+ "modulus": "c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5",
29
+ "old": false,
30
+ }
31
+ `);
32
+ });
33
+ (0, vitest_1.it)('should prefer new keys over old', () => {
34
+ (0, vitest_1.expect)((0, index_js_1.findKeyByFingerprints)(['71e025b6c76033e3', 'b25898df208d2603'])?.fingerprint).toEqual('b25898df208d2603');
35
+ });
36
+ (0, vitest_1.it)('should return null if not found', () => {
37
+ (0, vitest_1.expect)((0, index_js_1.findKeyByFingerprints)(['deadbeefdeadbeef'])).toBeNull();
38
+ });
39
+ });
40
+ //# sourceMappingURL=keys.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.test.js","sourceRoot":"","sources":["../../../../src/utils/crypto/keys.test.ts"],"names":[],"mappings":";;AAAA,mCAA6C;AAE7C,0CAAmE;AACnE,uCAA8C;AAE9C,MAAM,MAAM,GAAG,IAAI,4BAAkB,EAAE,CAAA;AAEvC,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,IAAA,WAAE,EAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,IAAA,eAAM,EACF,IAAA,yBAAc,EACV,MAAM,EACN;;;;;;;6BAOa,CAChB,CACJ,CAAC,GAAG,CAAC;YACF,OAAO,EACH,kgBAAkgB;YACtgB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,kBAAkB;YAC/B,GAAG,EAAE,KAAK;SACb,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,IAAA,eAAM,EAAC,IAAA,gCAAqB,EAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;SAOzE,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,IAAA,eAAM,EAAC,IAAA,gCAAqB,EAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpH,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,IAAA,eAAM,EAAC,IAAA,gCAAqB,EAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAClE,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { findKeyByFingerprints, parsePublicKey } from '../index.js'\nimport { NodeCryptoProvider } from './node.js'\n\nconst crypto = new NodeCryptoProvider()\n\ndescribe('parsePublicKey', () => {\n it('should parse telegram public keys', () => {\n expect(\n parsePublicKey(\n crypto,\n `-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAruw2yP/BCcsJliRoW5eBVBVle9dtjJw+OYED160Wybum9SXtBBLX\nriwt4rROd9csv0t0OHCaTmRqBcQ0J8fxhN6/cpR1GWgOZRUAiQxoMnlt0R93LCX/\nj1dnVa/gVbCjdSxpbrfY2g2L4frzjJvdl84Kd9ORYjDEAyFnEA7dD556OptgLQQ2\ne2iVNq8NZLYTzLp5YpOdO1doK+ttrltggTCy5SrKeLoCPPbOgGsdxJxyz5KKcZnS\nLj16yE5HvJQn0CNpRdENvRUXe6tBP78O39oJ8BTHp9oIjd6XWXAsp2CvK45Ol8wF\nXGF710w9lwCGNbmNxNYhtIkdqfsEcwR5JwIDAQAB\n-----END RSA PUBLIC KEY-----`,\n ),\n ).eql({\n modulus:\n 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\n exponent: '010001',\n fingerprint: '0bc35f3509f7b7a5',\n old: false,\n })\n })\n\n it('should be able to find a key by its fingerprint', () => {\n expect(findKeyByFingerprints(['b25898df208d2603'])).toMatchInlineSnapshot(`\n {\n \"exponent\": \"010001\",\n \"fingerprint\": \"b25898df208d2603\",\n \"modulus\": \"c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5\",\n \"old\": false,\n }\n `)\n })\n\n it('should prefer new keys over old', () => {\n expect(findKeyByFingerprints(['71e025b6c76033e3', 'b25898df208d2603'])?.fingerprint).toEqual('b25898df208d2603')\n })\n\n it('should return null if not found', () => {\n expect(findKeyByFingerprints(['deadbeefdeadbeef'])).toBeNull()\n })\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};