@mtcute/core 0.1.0

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 (502) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +26 -0
  3. package/cjs/base-client.d.ts +297 -0
  4. package/cjs/base-client.js +324 -0
  5. package/cjs/base-client.js.map +1 -0
  6. package/cjs/index.d.ts +10 -0
  7. package/cjs/index.js +30 -0
  8. package/cjs/index.js.map +1 -0
  9. package/cjs/network/auth-key.d.ts +21 -0
  10. package/cjs/network/auth-key.js +101 -0
  11. package/cjs/network/auth-key.js.map +1 -0
  12. package/cjs/network/authorization.d.ts +9 -0
  13. package/cjs/network/authorization.js +332 -0
  14. package/cjs/network/authorization.js.map +1 -0
  15. package/cjs/network/config-manager.d.ts +33 -0
  16. package/cjs/network/config-manager.js +93 -0
  17. package/cjs/network/config-manager.js.map +1 -0
  18. package/cjs/network/index.d.ts +4 -0
  19. package/cjs/network/index.js +20 -0
  20. package/cjs/network/index.js.map +1 -0
  21. package/cjs/network/mtproto-session.d.ts +116 -0
  22. package/cjs/network/mtproto-session.js +209 -0
  23. package/cjs/network/mtproto-session.js.map +1 -0
  24. package/cjs/network/multi-session-connection.d.ts +33 -0
  25. package/cjs/network/multi-session-connection.js +243 -0
  26. package/cjs/network/multi-session-connection.js.map +1 -0
  27. package/cjs/network/network-manager.d.ts +190 -0
  28. package/cjs/network/network-manager.js +547 -0
  29. package/cjs/network/network-manager.js.map +1 -0
  30. package/cjs/network/persistent-connection.d.ts +51 -0
  31. package/cjs/network/persistent-connection.js +173 -0
  32. package/cjs/network/persistent-connection.js.map +1 -0
  33. package/cjs/network/reconnection.d.ts +11 -0
  34. package/cjs/network/reconnection.js +18 -0
  35. package/cjs/network/reconnection.js.map +1 -0
  36. package/cjs/network/session-connection.d.ts +72 -0
  37. package/cjs/network/session-connection.js +1363 -0
  38. package/cjs/network/session-connection.js.map +1 -0
  39. package/cjs/network/transports/abstract.d.ts +99 -0
  40. package/cjs/network/transports/abstract.js +38 -0
  41. package/cjs/network/transports/abstract.js.map +1 -0
  42. package/cjs/network/transports/index.d.ts +8 -0
  43. package/cjs/network/transports/index.js +26 -0
  44. package/cjs/network/transports/index.js.map +1 -0
  45. package/cjs/network/transports/intermediate.d.ts +20 -0
  46. package/cjs/network/transports/intermediate.js +67 -0
  47. package/cjs/network/transports/intermediate.js.map +1 -0
  48. package/cjs/network/transports/obfuscated.d.ts +18 -0
  49. package/cjs/network/transports/obfuscated.js +83 -0
  50. package/cjs/network/transports/obfuscated.js.map +1 -0
  51. package/cjs/network/transports/streamed.d.ts +24 -0
  52. package/cjs/network/transports/streamed.js +32 -0
  53. package/cjs/network/transports/streamed.js.map +1 -0
  54. package/cjs/network/transports/tcp.d.ts +33 -0
  55. package/cjs/network/transports/tcp.js +130 -0
  56. package/cjs/network/transports/tcp.js.map +1 -0
  57. package/cjs/network/transports/websocket.d.ts +47 -0
  58. package/cjs/network/transports/websocket.js +124 -0
  59. package/cjs/network/transports/websocket.js.map +1 -0
  60. package/cjs/network/transports/wrapped.d.ts +11 -0
  61. package/cjs/network/transports/wrapped.js +26 -0
  62. package/cjs/network/transports/wrapped.js.map +1 -0
  63. package/cjs/package.json +3 -0
  64. package/cjs/storage/abstract.d.ts +174 -0
  65. package/cjs/storage/abstract.js +3 -0
  66. package/cjs/storage/abstract.js.map +1 -0
  67. package/cjs/storage/index.d.ts +5 -0
  68. package/cjs/storage/index.js +22 -0
  69. package/cjs/storage/index.js.map +1 -0
  70. package/cjs/storage/json-file.d.ts +31 -0
  71. package/cjs/storage/json-file.js +90 -0
  72. package/cjs/storage/json-file.js.map +1 -0
  73. package/cjs/storage/json.d.ts +9 -0
  74. package/cjs/storage/json.js +65 -0
  75. package/cjs/storage/json.js.map +1 -0
  76. package/cjs/storage/localstorage.d.ts +7 -0
  77. package/cjs/storage/localstorage.js +25 -0
  78. package/cjs/storage/localstorage.js.map +1 -0
  79. package/cjs/storage/memory.d.ts +98 -0
  80. package/cjs/storage/memory.js +299 -0
  81. package/cjs/storage/memory.js.map +1 -0
  82. package/cjs/types/errors.d.ts +53 -0
  83. package/cjs/types/errors.js +58 -0
  84. package/cjs/types/errors.js.map +1 -0
  85. package/cjs/types/index.d.ts +3 -0
  86. package/cjs/types/index.js +20 -0
  87. package/cjs/types/index.js.map +1 -0
  88. package/cjs/types/peers.d.ts +4 -0
  89. package/cjs/types/peers.js +3 -0
  90. package/cjs/types/peers.js.map +1 -0
  91. package/cjs/types/utils.d.ts +6 -0
  92. package/cjs/types/utils.js +9 -0
  93. package/cjs/types/utils.js.map +1 -0
  94. package/cjs/utils/async-lock.d.ts +10 -0
  95. package/cjs/utils/async-lock.js +43 -0
  96. package/cjs/utils/async-lock.js.map +1 -0
  97. package/cjs/utils/bigint-utils.d.ts +40 -0
  98. package/cjs/utils/bigint-utils.js +104 -0
  99. package/cjs/utils/bigint-utils.js.map +1 -0
  100. package/cjs/utils/binary/asn1-parser.d.ts +17 -0
  101. package/cjs/utils/binary/asn1-parser.js +121 -0
  102. package/cjs/utils/binary/asn1-parser.js.map +1 -0
  103. package/cjs/utils/buffer-utils.d.ts +21 -0
  104. package/cjs/utils/buffer-utils.js +63 -0
  105. package/cjs/utils/buffer-utils.js.map +1 -0
  106. package/cjs/utils/condition-variable.d.ts +9 -0
  107. package/cjs/utils/condition-variable.js +28 -0
  108. package/cjs/utils/condition-variable.js.map +1 -0
  109. package/cjs/utils/controllable-promise.d.ts +16 -0
  110. package/cjs/utils/controllable-promise.js +25 -0
  111. package/cjs/utils/controllable-promise.js.map +1 -0
  112. package/cjs/utils/crypto/abstract.d.ts +23 -0
  113. package/cjs/utils/crypto/abstract.js +19 -0
  114. package/cjs/utils/crypto/abstract.js.map +1 -0
  115. package/cjs/utils/crypto/common.d.ts +12 -0
  116. package/cjs/utils/crypto/common.js +54 -0
  117. package/cjs/utils/crypto/common.js.map +1 -0
  118. package/cjs/utils/crypto/factorization.d.ts +5 -0
  119. package/cjs/utils/crypto/factorization.js +69 -0
  120. package/cjs/utils/crypto/factorization.js.map +1 -0
  121. package/cjs/utils/crypto/index.d.ts +5 -0
  122. package/cjs/utils/crypto/index.js +23 -0
  123. package/cjs/utils/crypto/index.js.map +1 -0
  124. package/cjs/utils/crypto/keys.d.ts +27 -0
  125. package/cjs/utils/crypto/keys.js +70 -0
  126. package/cjs/utils/crypto/keys.js.map +1 -0
  127. package/cjs/utils/crypto/miller-rabin.d.ts +2 -0
  128. package/cjs/utils/crypto/miller-rabin.js +44 -0
  129. package/cjs/utils/crypto/miller-rabin.js.map +1 -0
  130. package/cjs/utils/crypto/mtproto.d.ts +31 -0
  131. package/cjs/utils/crypto/mtproto.js +66 -0
  132. package/cjs/utils/crypto/mtproto.js.map +1 -0
  133. package/cjs/utils/crypto/node-crypto.d.ts +10 -0
  134. package/cjs/utils/crypto/node-crypto.js +46 -0
  135. package/cjs/utils/crypto/node-crypto.js.map +1 -0
  136. package/cjs/utils/crypto/password.d.ts +29 -0
  137. package/cjs/utils/crypto/password.js +106 -0
  138. package/cjs/utils/crypto/password.js.map +1 -0
  139. package/cjs/utils/crypto/subtle.d.ts +12 -0
  140. package/cjs/utils/crypto/subtle.js +86 -0
  141. package/cjs/utils/crypto/subtle.js.map +1 -0
  142. package/cjs/utils/crypto/utils.d.ts +14 -0
  143. package/cjs/utils/crypto/utils.js +30 -0
  144. package/cjs/utils/crypto/utils.js.map +1 -0
  145. package/cjs/utils/default-dcs.d.ts +7 -0
  146. package/cjs/utils/default-dcs.js +76 -0
  147. package/cjs/utils/default-dcs.js.map +1 -0
  148. package/cjs/utils/deque.d.ts +29 -0
  149. package/cjs/utils/deque.js +210 -0
  150. package/cjs/utils/deque.js.map +1 -0
  151. package/cjs/utils/early-timer.d.ts +42 -0
  152. package/cjs/utils/early-timer.js +79 -0
  153. package/cjs/utils/early-timer.js.map +1 -0
  154. package/cjs/utils/flood-control.d.ts +14 -0
  155. package/cjs/utils/flood-control.js +65 -0
  156. package/cjs/utils/flood-control.js.map +1 -0
  157. package/cjs/utils/function-utils.d.ts +13 -0
  158. package/cjs/utils/function-utils.js +30 -0
  159. package/cjs/utils/function-utils.js.map +1 -0
  160. package/cjs/utils/index.d.ts +24 -0
  161. package/cjs/utils/index.js +41 -0
  162. package/cjs/utils/index.js.map +1 -0
  163. package/cjs/utils/linked-list.d.ts +21 -0
  164. package/cjs/utils/linked-list.js +73 -0
  165. package/cjs/utils/linked-list.js.map +1 -0
  166. package/cjs/utils/links/bots.d.ts +71 -0
  167. package/cjs/utils/links/bots.js +259 -0
  168. package/cjs/utils/links/bots.js.map +1 -0
  169. package/cjs/utils/links/bundle.d.ts +7 -0
  170. package/cjs/utils/links/bundle.js +24 -0
  171. package/cjs/utils/links/bundle.js.map +1 -0
  172. package/cjs/utils/links/calls.d.ts +16 -0
  173. package/cjs/utils/links/calls.js +59 -0
  174. package/cjs/utils/links/calls.js.map +1 -0
  175. package/cjs/utils/links/chat.d.ts +46 -0
  176. package/cjs/utils/links/chat.js +160 -0
  177. package/cjs/utils/links/chat.js.map +1 -0
  178. package/cjs/utils/links/common.d.ts +31 -0
  179. package/cjs/utils/links/common.js +60 -0
  180. package/cjs/utils/links/common.js.map +1 -0
  181. package/cjs/utils/links/index.d.ts +2 -0
  182. package/cjs/utils/links/index.js +29 -0
  183. package/cjs/utils/links/index.js.map +1 -0
  184. package/cjs/utils/links/misc.d.ts +19 -0
  185. package/cjs/utils/links/misc.js +77 -0
  186. package/cjs/utils/links/misc.js.map +1 -0
  187. package/cjs/utils/links/proxy.d.ts +17 -0
  188. package/cjs/utils/links/proxy.js +61 -0
  189. package/cjs/utils/links/proxy.js.map +1 -0
  190. package/cjs/utils/links/stickers.d.ts +9 -0
  191. package/cjs/utils/links/stickers.js +28 -0
  192. package/cjs/utils/links/stickers.js.map +1 -0
  193. package/cjs/utils/links/user.d.ts +27 -0
  194. package/cjs/utils/links/user.js +81 -0
  195. package/cjs/utils/links/user.js.map +1 -0
  196. package/cjs/utils/logger.d.ts +54 -0
  197. package/cjs/utils/logger.js +158 -0
  198. package/cjs/utils/logger.js.map +1 -0
  199. package/cjs/utils/long-utils.d.ts +75 -0
  200. package/cjs/utils/long-utils.js +161 -0
  201. package/cjs/utils/long-utils.js.map +1 -0
  202. package/cjs/utils/lru-map.d.ts +21 -0
  203. package/cjs/utils/lru-map.js +107 -0
  204. package/cjs/utils/lru-map.js.map +1 -0
  205. package/cjs/utils/lru-set.d.ts +22 -0
  206. package/cjs/utils/lru-set.js +48 -0
  207. package/cjs/utils/lru-set.js.map +1 -0
  208. package/cjs/utils/misc-utils.d.ts +7 -0
  209. package/cjs/utils/misc-utils.js +15 -0
  210. package/cjs/utils/misc-utils.js.map +1 -0
  211. package/cjs/utils/peer-utils.d.ts +35 -0
  212. package/cjs/utils/peer-utils.js +188 -0
  213. package/cjs/utils/peer-utils.js.map +1 -0
  214. package/cjs/utils/platform/crypto.d.ts +1 -0
  215. package/cjs/utils/platform/crypto.js +8 -0
  216. package/cjs/utils/platform/crypto.js.map +1 -0
  217. package/cjs/utils/platform/crypto.web.d.ts +1 -0
  218. package/cjs/utils/platform/crypto.web.js +14 -0
  219. package/cjs/utils/platform/crypto.web.js.map +1 -0
  220. package/cjs/utils/platform/error-reporting.d.ts +3 -0
  221. package/cjs/utils/platform/error-reporting.js +22 -0
  222. package/cjs/utils/platform/error-reporting.js.map +1 -0
  223. package/cjs/utils/platform/logging.d.ts +1 -0
  224. package/cjs/utils/platform/logging.js +35 -0
  225. package/cjs/utils/platform/logging.js.map +1 -0
  226. package/cjs/utils/platform/logging.web.d.ts +1 -0
  227. package/cjs/utils/platform/logging.web.js +35 -0
  228. package/cjs/utils/platform/logging.web.js.map +1 -0
  229. package/cjs/utils/platform/random.d.ts +1 -0
  230. package/cjs/utils/platform/random.js +7 -0
  231. package/cjs/utils/platform/random.js.map +1 -0
  232. package/cjs/utils/platform/random.web.d.ts +1 -0
  233. package/cjs/utils/platform/random.web.js +10 -0
  234. package/cjs/utils/platform/random.web.js.map +1 -0
  235. package/cjs/utils/platform/transport.d.ts +1 -0
  236. package/cjs/utils/platform/transport.js +8 -0
  237. package/cjs/utils/platform/transport.js.map +1 -0
  238. package/cjs/utils/platform/transport.web.d.ts +1 -0
  239. package/cjs/utils/platform/transport.web.js +15 -0
  240. package/cjs/utils/platform/transport.web.js.map +1 -0
  241. package/cjs/utils/sorted-array.d.ts +17 -0
  242. package/cjs/utils/sorted-array.js +83 -0
  243. package/cjs/utils/sorted-array.js.map +1 -0
  244. package/cjs/utils/string-session.d.ts +11 -0
  245. package/cjs/utils/string-session.js +73 -0
  246. package/cjs/utils/string-session.js.map +1 -0
  247. package/cjs/utils/tl-json.d.ts +13 -0
  248. package/cjs/utils/tl-json.js +62 -0
  249. package/cjs/utils/tl-json.js.map +1 -0
  250. package/cjs/utils/type-assertions.d.ts +37 -0
  251. package/cjs/utils/type-assertions.js +70 -0
  252. package/cjs/utils/type-assertions.js.map +1 -0
  253. package/esm/base-client.d.ts +297 -0
  254. package/esm/base-client.js +317 -0
  255. package/esm/base-client.js.map +1 -0
  256. package/esm/index.d.ts +10 -0
  257. package/esm/index.js +11 -0
  258. package/esm/index.js.map +1 -0
  259. package/esm/network/auth-key.d.ts +21 -0
  260. package/esm/network/auth-key.js +97 -0
  261. package/esm/network/auth-key.js.map +1 -0
  262. package/esm/network/authorization.d.ts +9 -0
  263. package/esm/network/authorization.js +325 -0
  264. package/esm/network/authorization.js.map +1 -0
  265. package/esm/network/config-manager.d.ts +33 -0
  266. package/esm/network/config-manager.js +89 -0
  267. package/esm/network/config-manager.js.map +1 -0
  268. package/esm/network/index.d.ts +4 -0
  269. package/esm/network/index.js +4 -0
  270. package/esm/network/index.js.map +1 -0
  271. package/esm/network/mtproto-session.d.ts +116 -0
  272. package/esm/network/mtproto-session.js +202 -0
  273. package/esm/network/mtproto-session.js.map +1 -0
  274. package/esm/network/multi-session-connection.d.ts +33 -0
  275. package/esm/network/multi-session-connection.js +236 -0
  276. package/esm/network/multi-session-connection.js.map +1 -0
  277. package/esm/network/network-manager.d.ts +190 -0
  278. package/esm/network/network-manager.js +542 -0
  279. package/esm/network/network-manager.js.map +1 -0
  280. package/esm/network/persistent-connection.d.ts +51 -0
  281. package/esm/network/persistent-connection.js +166 -0
  282. package/esm/network/persistent-connection.js.map +1 -0
  283. package/esm/network/reconnection.d.ts +11 -0
  284. package/esm/network/reconnection.js +14 -0
  285. package/esm/network/reconnection.js.map +1 -0
  286. package/esm/network/session-connection.d.ts +72 -0
  287. package/esm/network/session-connection.js +1356 -0
  288. package/esm/network/session-connection.js.map +1 -0
  289. package/esm/network/transports/abstract.d.ts +99 -0
  290. package/esm/network/transports/abstract.js +34 -0
  291. package/esm/network/transports/abstract.js.map +1 -0
  292. package/esm/network/transports/index.d.ts +8 -0
  293. package/esm/network/transports/index.js +9 -0
  294. package/esm/network/transports/index.js.map +1 -0
  295. package/esm/network/transports/intermediate.d.ts +20 -0
  296. package/esm/network/transports/intermediate.js +62 -0
  297. package/esm/network/transports/intermediate.js.map +1 -0
  298. package/esm/network/transports/obfuscated.d.ts +18 -0
  299. package/esm/network/transports/obfuscated.js +79 -0
  300. package/esm/network/transports/obfuscated.js.map +1 -0
  301. package/esm/network/transports/streamed.d.ts +24 -0
  302. package/esm/network/transports/streamed.js +25 -0
  303. package/esm/network/transports/streamed.js.map +1 -0
  304. package/esm/network/transports/tcp.d.ts +33 -0
  305. package/esm/network/transports/tcp.js +122 -0
  306. package/esm/network/transports/tcp.js.map +1 -0
  307. package/esm/network/transports/websocket.d.ts +47 -0
  308. package/esm/network/transports/websocket.js +116 -0
  309. package/esm/network/transports/websocket.js.map +1 -0
  310. package/esm/network/transports/wrapped.d.ts +11 -0
  311. package/esm/network/transports/wrapped.js +19 -0
  312. package/esm/network/transports/wrapped.js.map +1 -0
  313. package/esm/storage/abstract.d.ts +174 -0
  314. package/esm/storage/abstract.js +2 -0
  315. package/esm/storage/abstract.js.map +1 -0
  316. package/esm/storage/index.d.ts +5 -0
  317. package/esm/storage/index.js +6 -0
  318. package/esm/storage/index.js.map +1 -0
  319. package/esm/storage/json-file.d.ts +31 -0
  320. package/esm/storage/json-file.js +63 -0
  321. package/esm/storage/json-file.js.map +1 -0
  322. package/esm/storage/json.d.ts +9 -0
  323. package/esm/storage/json.js +61 -0
  324. package/esm/storage/json.js.map +1 -0
  325. package/esm/storage/localstorage.d.ts +7 -0
  326. package/esm/storage/localstorage.js +21 -0
  327. package/esm/storage/localstorage.js.map +1 -0
  328. package/esm/storage/memory.d.ts +98 -0
  329. package/esm/storage/memory.js +295 -0
  330. package/esm/storage/memory.js.map +1 -0
  331. package/esm/types/errors.d.ts +53 -0
  332. package/esm/types/errors.js +49 -0
  333. package/esm/types/errors.js.map +1 -0
  334. package/esm/types/index.d.ts +3 -0
  335. package/esm/types/index.js +4 -0
  336. package/esm/types/index.js.map +1 -0
  337. package/esm/types/peers.d.ts +4 -0
  338. package/esm/types/peers.js +2 -0
  339. package/esm/types/peers.js.map +1 -0
  340. package/esm/types/utils.d.ts +6 -0
  341. package/esm/types/utils.js +5 -0
  342. package/esm/types/utils.js.map +1 -0
  343. package/esm/utils/async-lock.d.ts +10 -0
  344. package/esm/utils/async-lock.js +39 -0
  345. package/esm/utils/async-lock.js.map +1 -0
  346. package/esm/utils/bigint-utils.d.ts +40 -0
  347. package/esm/utils/bigint-utils.js +92 -0
  348. package/esm/utils/bigint-utils.js.map +1 -0
  349. package/esm/utils/binary/asn1-parser.d.ts +17 -0
  350. package/esm/utils/binary/asn1-parser.js +116 -0
  351. package/esm/utils/binary/asn1-parser.js.map +1 -0
  352. package/esm/utils/buffer-utils.d.ts +21 -0
  353. package/esm/utils/buffer-utils.js +55 -0
  354. package/esm/utils/buffer-utils.js.map +1 -0
  355. package/esm/utils/condition-variable.d.ts +9 -0
  356. package/esm/utils/condition-variable.js +24 -0
  357. package/esm/utils/condition-variable.js.map +1 -0
  358. package/esm/utils/controllable-promise.d.ts +16 -0
  359. package/esm/utils/controllable-promise.js +20 -0
  360. package/esm/utils/controllable-promise.js.map +1 -0
  361. package/esm/utils/crypto/abstract.d.ts +23 -0
  362. package/esm/utils/crypto/abstract.js +15 -0
  363. package/esm/utils/crypto/abstract.js.map +1 -0
  364. package/esm/utils/crypto/common.d.ts +12 -0
  365. package/esm/utils/crypto/common.js +50 -0
  366. package/esm/utils/crypto/common.js.map +1 -0
  367. package/esm/utils/crypto/factorization.d.ts +5 -0
  368. package/esm/utils/crypto/factorization.js +62 -0
  369. package/esm/utils/crypto/factorization.js.map +1 -0
  370. package/esm/utils/crypto/index.d.ts +5 -0
  371. package/esm/utils/crypto/index.js +6 -0
  372. package/esm/utils/crypto/index.js.map +1 -0
  373. package/esm/utils/crypto/keys.d.ts +27 -0
  374. package/esm/utils/crypto/keys.js +64 -0
  375. package/esm/utils/crypto/keys.js.map +1 -0
  376. package/esm/utils/crypto/miller-rabin.d.ts +2 -0
  377. package/esm/utils/crypto/miller-rabin.js +37 -0
  378. package/esm/utils/crypto/miller-rabin.js.map +1 -0
  379. package/esm/utils/crypto/mtproto.d.ts +31 -0
  380. package/esm/utils/crypto/mtproto.js +60 -0
  381. package/esm/utils/crypto/mtproto.js.map +1 -0
  382. package/esm/utils/crypto/node-crypto.d.ts +10 -0
  383. package/esm/utils/crypto/node-crypto.js +42 -0
  384. package/esm/utils/crypto/node-crypto.js.map +1 -0
  385. package/esm/utils/crypto/password.d.ts +29 -0
  386. package/esm/utils/crypto/password.js +97 -0
  387. package/esm/utils/crypto/password.js.map +1 -0
  388. package/esm/utils/crypto/subtle.d.ts +12 -0
  389. package/esm/utils/crypto/subtle.js +59 -0
  390. package/esm/utils/crypto/subtle.js.map +1 -0
  391. package/esm/utils/crypto/utils.d.ts +14 -0
  392. package/esm/utils/crypto/utils.js +25 -0
  393. package/esm/utils/crypto/utils.js.map +1 -0
  394. package/esm/utils/default-dcs.d.ts +7 -0
  395. package/esm/utils/default-dcs.js +73 -0
  396. package/esm/utils/default-dcs.js.map +1 -0
  397. package/esm/utils/deque.d.ts +29 -0
  398. package/esm/utils/deque.js +206 -0
  399. package/esm/utils/deque.js.map +1 -0
  400. package/esm/utils/early-timer.d.ts +42 -0
  401. package/esm/utils/early-timer.js +75 -0
  402. package/esm/utils/early-timer.js.map +1 -0
  403. package/esm/utils/flood-control.d.ts +14 -0
  404. package/esm/utils/flood-control.js +61 -0
  405. package/esm/utils/flood-control.js.map +1 -0
  406. package/esm/utils/function-utils.d.ts +13 -0
  407. package/esm/utils/function-utils.js +26 -0
  408. package/esm/utils/function-utils.js.map +1 -0
  409. package/esm/utils/index.d.ts +24 -0
  410. package/esm/utils/index.js +25 -0
  411. package/esm/utils/index.js.map +1 -0
  412. package/esm/utils/linked-list.d.ts +21 -0
  413. package/esm/utils/linked-list.js +69 -0
  414. package/esm/utils/linked-list.js.map +1 -0
  415. package/esm/utils/links/bots.d.ts +71 -0
  416. package/esm/utils/links/bots.js +256 -0
  417. package/esm/utils/links/bots.js.map +1 -0
  418. package/esm/utils/links/bundle.d.ts +7 -0
  419. package/esm/utils/links/bundle.js +8 -0
  420. package/esm/utils/links/bundle.js.map +1 -0
  421. package/esm/utils/links/calls.d.ts +16 -0
  422. package/esm/utils/links/calls.js +56 -0
  423. package/esm/utils/links/calls.js.map +1 -0
  424. package/esm/utils/links/chat.d.ts +46 -0
  425. package/esm/utils/links/chat.js +157 -0
  426. package/esm/utils/links/chat.js.map +1 -0
  427. package/esm/utils/links/common.d.ts +31 -0
  428. package/esm/utils/links/common.js +56 -0
  429. package/esm/utils/links/common.js.map +1 -0
  430. package/esm/utils/links/index.d.ts +2 -0
  431. package/esm/utils/links/index.js +3 -0
  432. package/esm/utils/links/index.js.map +1 -0
  433. package/esm/utils/links/misc.d.ts +19 -0
  434. package/esm/utils/links/misc.js +74 -0
  435. package/esm/utils/links/misc.js.map +1 -0
  436. package/esm/utils/links/proxy.d.ts +17 -0
  437. package/esm/utils/links/proxy.js +58 -0
  438. package/esm/utils/links/proxy.js.map +1 -0
  439. package/esm/utils/links/stickers.d.ts +9 -0
  440. package/esm/utils/links/stickers.js +25 -0
  441. package/esm/utils/links/stickers.js.map +1 -0
  442. package/esm/utils/links/user.d.ts +27 -0
  443. package/esm/utils/links/user.js +78 -0
  444. package/esm/utils/links/user.js.map +1 -0
  445. package/esm/utils/logger.d.ts +54 -0
  446. package/esm/utils/logger.js +154 -0
  447. package/esm/utils/logger.js.map +1 -0
  448. package/esm/utils/long-utils.d.ts +75 -0
  449. package/esm/utils/long-utils.js +148 -0
  450. package/esm/utils/long-utils.js.map +1 -0
  451. package/esm/utils/lru-map.d.ts +21 -0
  452. package/esm/utils/lru-map.js +103 -0
  453. package/esm/utils/lru-map.js.map +1 -0
  454. package/esm/utils/lru-set.d.ts +22 -0
  455. package/esm/utils/lru-set.js +44 -0
  456. package/esm/utils/lru-set.js.map +1 -0
  457. package/esm/utils/misc-utils.d.ts +7 -0
  458. package/esm/utils/misc-utils.js +10 -0
  459. package/esm/utils/misc-utils.js.map +1 -0
  460. package/esm/utils/peer-utils.d.ts +35 -0
  461. package/esm/utils/peer-utils.js +179 -0
  462. package/esm/utils/peer-utils.js.map +1 -0
  463. package/esm/utils/platform/crypto.d.ts +1 -0
  464. package/esm/utils/platform/crypto.js +4 -0
  465. package/esm/utils/platform/crypto.js.map +1 -0
  466. package/esm/utils/platform/crypto.web.d.ts +1 -0
  467. package/esm/utils/platform/crypto.web.js +10 -0
  468. package/esm/utils/platform/crypto.web.js.map +1 -0
  469. package/esm/utils/platform/error-reporting.d.ts +3 -0
  470. package/esm/utils/platform/error-reporting.js +18 -0
  471. package/esm/utils/platform/error-reporting.js.map +1 -0
  472. package/esm/utils/platform/logging.d.ts +1 -0
  473. package/esm/utils/platform/logging.js +32 -0
  474. package/esm/utils/platform/logging.js.map +1 -0
  475. package/esm/utils/platform/logging.web.d.ts +1 -0
  476. package/esm/utils/platform/logging.web.js +31 -0
  477. package/esm/utils/platform/logging.web.js.map +1 -0
  478. package/esm/utils/platform/random.d.ts +1 -0
  479. package/esm/utils/platform/random.js +4 -0
  480. package/esm/utils/platform/random.js.map +1 -0
  481. package/esm/utils/platform/random.web.d.ts +1 -0
  482. package/esm/utils/platform/random.web.js +6 -0
  483. package/esm/utils/platform/random.web.js.map +1 -0
  484. package/esm/utils/platform/transport.d.ts +1 -0
  485. package/esm/utils/platform/transport.js +4 -0
  486. package/esm/utils/platform/transport.js.map +1 -0
  487. package/esm/utils/platform/transport.web.d.ts +1 -0
  488. package/esm/utils/platform/transport.web.js +12 -0
  489. package/esm/utils/platform/transport.web.js.map +1 -0
  490. package/esm/utils/sorted-array.d.ts +17 -0
  491. package/esm/utils/sorted-array.js +79 -0
  492. package/esm/utils/sorted-array.js.map +1 -0
  493. package/esm/utils/string-session.d.ts +11 -0
  494. package/esm/utils/string-session.js +68 -0
  495. package/esm/utils/string-session.js.map +1 -0
  496. package/esm/utils/tl-json.d.ts +13 -0
  497. package/esm/utils/tl-json.js +57 -0
  498. package/esm/utils/tl-json.js.map +1 -0
  499. package/esm/utils/type-assertions.d.ts +37 -0
  500. package/esm/utils/type-assertions.js +61 -0
  501. package/esm/utils/type-assertions.js.map +1 -0
  502. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bots.js","sourceRoot":"","sources":["../../../../src/utils/links/bots.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { isPresent } from '../type-assertions.js'\nimport { deeplinkBuilder } from './common.js'\n\n/**\n * Bot deeplinks\n *\n * Used to link to bots with a start parameter\n */\nexport const botStart = deeplinkBuilder<{\n /** Bot username */\n username: string\n /** Start parameter */\n parameter: string\n}>({\n internalBuild: ({ username, parameter }) => ['resolve', { domain: username, start: parameter }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const username = query.get('domain')\n const parameter = query.get('start')\n\n if (!username || !parameter) return null\n\n return { username, parameter }\n },\n externalBuild: ({ username, parameter }) => [username, { start: parameter }],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const username = path\n const parameter = query.get('start')\n\n if (!parameter) return null\n\n return { username, parameter }\n },\n})\n\ntype BotAdminRight = Exclude<keyof tl.RawChatAdminRights, '_'>\n\nfunction normalizeBotAdmin(rights?: BotAdminRight[]): string | undefined {\n if (!rights?.length) return\n\n return rights\n .map((it) => {\n switch (it) {\n case 'changeInfo':\n return 'change_info'\n case 'postMessages':\n return 'post_messages'\n case 'editMessages':\n return 'edit_messages'\n case 'deleteMessages':\n return 'delete_messages'\n case 'banUsers':\n return 'restrict_members'\n case 'inviteUsers':\n return 'invite_users'\n case 'pinMessages':\n return 'pin_messages'\n case 'manageTopics':\n return 'manage_topics'\n case 'addAdmins':\n return 'promote_members'\n case 'manageCall':\n return 'manage_video_chats'\n case 'anonymous':\n return 'anonymous'\n case 'other':\n return 'manage_chat'\n case 'postStories':\n return 'post_stories'\n case 'editStories':\n return 'edit_stories'\n case 'deleteStories':\n return 'delete_stories'\n }\n })\n .join('+')\n}\n\nfunction parseBotAdmin(rights: string | null): BotAdminRight[] | undefined {\n if (!rights) return\n\n return rights\n .split('+')\n .map((it) => {\n switch (it) {\n case 'change_info':\n return 'changeInfo'\n case 'post_messages':\n return 'postMessages'\n case 'edit_messages':\n return 'editMessages'\n case 'delete_messages':\n return 'deleteMessages'\n case 'restrict_members':\n return 'banUsers'\n case 'invite_users':\n return 'inviteUsers'\n case 'pin_messages':\n return 'pinMessages'\n case 'manage_topics':\n return 'manageTopics'\n case 'promote_members':\n return 'addAdmins'\n case 'manage_video_chats':\n return 'manageCall'\n case 'anonymous':\n return 'anonymous'\n case 'manage_chat':\n return 'other'\n case 'post_stories':\n return 'postStories'\n case 'edit_stories':\n return 'editStories'\n case 'delete_stories':\n return 'deleteStories'\n default:\n return null\n }\n })\n .filter(isPresent)\n}\n\n/**\n * Bot add to group links\n *\n * Used to ask the user to add a bot to a group, optionally asking for admin rights.\n * Note that the user is still free to choose which rights to grant, and\n * whether to grant them at all.\n */\nexport const botAddToGroup = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** If specified, the client will call `/start parameter` on the bot once the bot has been added */\n parameter?: string\n /** Admin rights to request */\n admin?: BotAdminRight[]\n}>({\n internalBuild: ({ bot, parameter, admin }) => [\n 'resolve',\n { domain: bot, startgroup: parameter ?? true, admin: normalizeBotAdmin(admin) },\n ],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const parameter = query.get('startgroup')\n const admin = query.get('admin')\n\n if (!bot || parameter === null) return null\n\n return {\n bot,\n parameter: parameter === '' ? undefined : parameter,\n admin: parseBotAdmin(admin),\n }\n },\n\n externalBuild: ({ bot, parameter, admin }) => [\n bot,\n { startgroup: parameter ?? true, admin: normalizeBotAdmin(admin) },\n ],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const bot = path\n const parameter = query.get('startgroup')\n const admin = query.get('admin')\n\n if (parameter === null) return null\n\n return {\n bot,\n parameter: parameter === '' ? undefined : parameter,\n admin: parseBotAdmin(admin),\n }\n },\n})\n\n/**\n * Bot add to channel links\n *\n * Used to ask the user to add a bot to a channel, optionally with admin rights.\n * Note that the user is still free to choose which rights to grant, and\n * whether to grant them at all.\n */\nexport const botAddToChannel = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** Admin rights to request */\n admin?: BotAdminRight[]\n}>({\n internalBuild: ({ bot, admin }) => [\n 'resolve',\n { domain: bot, startchannel: true, admin: normalizeBotAdmin(admin) },\n ],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const parameter = query.get('startchannel')\n const admin = query.get('admin')\n\n if (!bot || parameter === null) return null\n\n return {\n bot,\n admin: parseBotAdmin(admin),\n }\n },\n\n externalBuild: ({ bot, admin }) => [bot, { startchannel: true, admin: normalizeBotAdmin(admin) }],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const bot = path\n const parameter = query.get('startchannel')\n const admin = query.get('admin')\n\n if (parameter === null) return null\n\n return {\n bot,\n admin: parseBotAdmin(admin),\n }\n },\n})\n\n/**\n * Game links\n *\n * Used to share games.\n */\nexport const botGame = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** Game short name */\n game: string\n}>({\n internalBuild: ({ bot, game }) => ['resolve', { domain: bot, game }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const game = query.get('game')\n\n if (!bot || !game) return null\n\n return { bot, game }\n },\n externalBuild: ({ bot, game }) => [bot, { game }],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const bot = path\n const game = query.get('game')\n\n if (!game) return null\n\n return { bot, game }\n },\n})\n\n/**\n * Named bot web app links\n *\n * Used to share named bot web apps.\n *\n * These links are different from bot attachment menu deep links,\n * because they don't require the user to install an attachment menu,\n * and a single bot can offer multiple named web apps, distinguished by\n * their `short_name`.\n */\nexport const botWebApp = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** App short name */\n app: string\n /** Parameter to be passed by the client to messages.requestAppWebView as `start_param` */\n parameter?: string\n}>({\n internalBuild: ({ bot, app, parameter }) => ['resolve', { domain: bot, appname: app, startapp: parameter }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const app = query.get('appname')\n const parameter = query.get('startapp')\n\n if (!bot || !app) return null\n\n return { bot, app, parameter: parameter || undefined }\n },\n\n externalBuild: ({ bot, app, parameter }) => [`${bot}/${app}`, { startapp: parameter }],\n externalParse: (path, query) => {\n const [bot, app, rest] = path.split('/')\n\n if (!app || rest) return null\n\n const parameter = query.get('startapp')\n\n return { bot, app, parameter: parameter || undefined }\n },\n})\n"]}
@@ -0,0 +1,7 @@
1
+ export * from './bots.js';
2
+ export * from './calls.js';
3
+ export * from './chat.js';
4
+ export * from './misc.js';
5
+ export * from './proxy.js';
6
+ export * from './stickers.js';
7
+ export * from './user.js';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./bots.js"), exports);
18
+ __exportStar(require("./calls.js"), exports);
19
+ __exportStar(require("./chat.js"), exports);
20
+ __exportStar(require("./misc.js"), exports);
21
+ __exportStar(require("./proxy.js"), exports);
22
+ __exportStar(require("./stickers.js"), exports);
23
+ __exportStar(require("./user.js"), exports);
24
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../src/utils/links/bundle.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,6CAA0B;AAC1B,4CAAyB;AACzB,4CAAyB;AACzB,6CAA0B;AAC1B,gDAA6B;AAC7B,4CAAyB","sourcesContent":["export * from './bots.js'\nexport * from './calls.js'\nexport * from './chat.js'\nexport * from './misc.js'\nexport * from './proxy.js'\nexport * from './stickers.js'\nexport * from './user.js'\n"]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Video chat/Livestream links
3
+ *
4
+ * Used to join video/voice chats in groups, and livestreams in channels.
5
+ * Such links are generated using phone.exportGroupCallInvite.
6
+ */
7
+ export declare const videoChat: import("./common.js").Deeplink<{
8
+ username: string;
9
+ /**
10
+ * Invite hash exported if the `can_self_unmute` flag is set when calling `phone.exportGroupCallInvite`:
11
+ * should be passed to `phone.joinGroupCall`, allows the user to speak in livestreams
12
+ * or muted group chats.
13
+ */
14
+ inviteHash?: string | undefined;
15
+ isLivestream?: boolean | undefined;
16
+ }>;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.videoChat = void 0;
4
+ const common_js_1 = require("./common.js");
5
+ /**
6
+ * Video chat/Livestream links
7
+ *
8
+ * Used to join video/voice chats in groups, and livestreams in channels.
9
+ * Such links are generated using phone.exportGroupCallInvite.
10
+ */
11
+ exports.videoChat = (0, common_js_1.deeplinkBuilder)({
12
+ internalBuild: ({ username, inviteHash, isLivestream }) => [
13
+ 'resolve',
14
+ {
15
+ domain: username,
16
+ [isLivestream ? 'livestream' : 'videochat']: inviteHash || true,
17
+ },
18
+ ],
19
+ externalBuild: ({ username, inviteHash, isLivestream }) => [
20
+ username,
21
+ {
22
+ [isLivestream ? 'livestream' : 'videochat']: inviteHash || true,
23
+ },
24
+ ],
25
+ internalParse: (path, query) => {
26
+ if (path !== 'resolve')
27
+ return null;
28
+ const domain = query.get('domain');
29
+ if (!domain)
30
+ return null;
31
+ const livestream = query.get('livestream');
32
+ const videochat = query.get('videochat');
33
+ const voicechat = query.get('voicechat');
34
+ if (livestream === null && videochat === null && voicechat === null)
35
+ return null;
36
+ const inviteHash = livestream || videochat || voicechat;
37
+ return {
38
+ username: domain,
39
+ inviteHash: inviteHash || undefined,
40
+ isLivestream: livestream !== null,
41
+ };
42
+ },
43
+ externalParse: (path, query) => {
44
+ if (path.length <= 1 || path.includes('/') || path[0] === '+')
45
+ return null;
46
+ const livestream = query.get('livestream');
47
+ const videochat = query.get('videochat');
48
+ const voicechat = query.get('voicechat');
49
+ if (livestream === null && videochat === null && voicechat === null)
50
+ return null;
51
+ const inviteHash = livestream || videochat || voicechat;
52
+ return {
53
+ username: path,
54
+ inviteHash: inviteHash || undefined,
55
+ isLivestream: livestream !== null,
56
+ };
57
+ },
58
+ });
59
+ //# sourceMappingURL=calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../../src/utils/links/calls.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAE7C;;;;;GAKG;AACU,QAAA,SAAS,GAAG,IAAA,2BAAe,EASrC;IACC,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QACvD,SAAS;QACT;YACI,MAAM,EAAE,QAAQ;YAChB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,UAAU,IAAI,IAAI;SAClE;KACJ;IACD,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QACvD,QAAQ;QACR;YACI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,UAAU,IAAI,IAAI;SAClE;KACJ;IACD,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QAEnC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAExB,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAExC,IAAI,UAAU,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAEhF,MAAM,UAAU,GAAG,UAAU,IAAI,SAAS,IAAI,SAAS,CAAA;QAEvD,OAAO;YACH,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,UAAU,IAAI,SAAS;YACnC,YAAY,EAAE,UAAU,KAAK,IAAI;SACpC,CAAA;IACL,CAAC;IACD,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QAE1E,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAExC,IAAI,UAAU,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAEhF,MAAM,UAAU,GAAG,UAAU,IAAI,SAAS,IAAI,SAAS,CAAA;QAEvD,OAAO;YACH,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,UAAU,IAAI,SAAS;YACnC,YAAY,EAAE,UAAU,KAAK,IAAI;SACpC,CAAA;IACL,CAAC;CACJ,CAAC,CAAA","sourcesContent":["import { deeplinkBuilder } from './common.js'\n\n/**\n * Video chat/Livestream links\n *\n * Used to join video/voice chats in groups, and livestreams in channels.\n * Such links are generated using phone.exportGroupCallInvite.\n */\nexport const videoChat = deeplinkBuilder<{\n username: string\n /**\n * Invite hash exported if the `can_self_unmute` flag is set when calling `phone.exportGroupCallInvite`:\n * should be passed to `phone.joinGroupCall`, allows the user to speak in livestreams\n * or muted group chats.\n */\n inviteHash?: string\n isLivestream?: boolean\n}>({\n internalBuild: ({ username, inviteHash, isLivestream }) => [\n 'resolve',\n {\n domain: username,\n [isLivestream ? 'livestream' : 'videochat']: inviteHash || true,\n },\n ],\n externalBuild: ({ username, inviteHash, isLivestream }) => [\n username,\n {\n [isLivestream ? 'livestream' : 'videochat']: inviteHash || true,\n },\n ],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const domain = query.get('domain')\n if (!domain) return null\n\n const livestream = query.get('livestream')\n const videochat = query.get('videochat')\n const voicechat = query.get('voicechat')\n\n if (livestream === null && videochat === null && voicechat === null) return null\n\n const inviteHash = livestream || videochat || voicechat\n\n return {\n username: domain,\n inviteHash: inviteHash || undefined,\n isLivestream: livestream !== null,\n }\n },\n externalParse: (path, query) => {\n if (path.length <= 1 || path.includes('/') || path[0] === '+') return null\n\n const livestream = query.get('livestream')\n const videochat = query.get('videochat')\n const voicechat = query.get('voicechat')\n\n if (livestream === null && videochat === null && voicechat === null) return null\n\n const inviteHash = livestream || videochat || voicechat\n\n return {\n username: path,\n inviteHash: inviteHash || undefined,\n isLivestream: livestream !== null,\n }\n },\n})\n"]}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Chat invite links
3
+ *
4
+ * Used to invite users to private groups and channels
5
+ */
6
+ export declare const chatInvite: import("./common.js").Deeplink<{
7
+ hash: string;
8
+ }>;
9
+ /**
10
+ * Chat folder links
11
+ */
12
+ export declare const chatFolder: import("./common.js").Deeplink<{
13
+ slug: string;
14
+ }>;
15
+ /**
16
+ * Message links
17
+ *
18
+ * Used to link to specific messages in public or private groups and channels.
19
+ *
20
+ * Note: `channelId` is a non-marked channel ID
21
+ */
22
+ export declare const message: import("./common.js").Deeplink<({
23
+ username: string;
24
+ } | {
25
+ channelId: number;
26
+ }) & {
27
+ /** Message ID */
28
+ id: number;
29
+ /** Thread ID */
30
+ threadId?: number | undefined;
31
+ /**
32
+ * For comments, `id` will contain the message ID of the channel message that started
33
+ * the comment section and this field will contain the message ID of the comment in
34
+ * the discussion group.
35
+ */
36
+ commentId?: number | undefined;
37
+ /**
38
+ * Timestamp at which to start playing the media file present
39
+ * in the body or in the webpage preview of the message
40
+ */
41
+ mediaTimestamp?: number | undefined;
42
+ /**
43
+ * Whether this is a link to a specific message in the album or to the entire album
44
+ */
45
+ single?: boolean | undefined;
46
+ }>;
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.message = exports.chatFolder = exports.chatInvite = void 0;
4
+ /* eslint-disable indent,func-call-spacing */
5
+ const common_js_1 = require("./common.js");
6
+ /**
7
+ * Chat invite links
8
+ *
9
+ * Used to invite users to private groups and channels
10
+ */
11
+ exports.chatInvite = (0, common_js_1.deeplinkBuilder)({
12
+ internalBuild: ({ hash }) => ['join', { invite: hash }],
13
+ internalParse: (path, query) => {
14
+ if (path !== 'join')
15
+ return null;
16
+ const invite = query.get('invite');
17
+ if (!invite)
18
+ return null;
19
+ return { hash: invite };
20
+ },
21
+ externalBuild: ({ hash }) => [`+${hash}`, null],
22
+ externalParse: (path) => {
23
+ const m = path.match(/^(?:\+|joinchat\/)([a-zA-Z0-9_-]+)$/);
24
+ if (!m)
25
+ return null;
26
+ if (m[1].match(/^[0-9]+$/)) {
27
+ // phone number
28
+ return null;
29
+ }
30
+ return { hash: m[1] };
31
+ },
32
+ });
33
+ /**
34
+ * Chat folder links
35
+ */
36
+ exports.chatFolder = (0, common_js_1.deeplinkBuilder)({
37
+ internalBuild: ({ slug }) => ['addlist', { slug }],
38
+ internalParse: (path, query) => {
39
+ if (path !== 'addlist')
40
+ return null;
41
+ const slug = query.get('slug');
42
+ if (!slug)
43
+ return null;
44
+ return { slug };
45
+ },
46
+ externalBuild: ({ slug }) => [`addlist/${slug}`, null],
47
+ externalParse: (path) => {
48
+ const [prefix, slug] = path.split('/');
49
+ if (prefix !== 'addlist')
50
+ return null;
51
+ return { slug };
52
+ },
53
+ });
54
+ function parseMediaTimestamp(timestamp) {
55
+ let m;
56
+ if ((m = timestamp.match(/^(\d+)$/))) {
57
+ return Number(m[1]);
58
+ }
59
+ if ((m = timestamp.match(/^(\d+):(\d{1,2})$/))) {
60
+ return Number(m[1]) * 60 + Number(m[2]);
61
+ }
62
+ if ((m = timestamp.match(/^(?:(\d+)h)?(?:(\d{1,2})m)?(?:(\d{1,2})s)$/))) {
63
+ return (Number(m[1]) || 0) * 3600 + (Number(m[2]) || 0) * 60 + (Number(m[3]) || 0);
64
+ }
65
+ return undefined;
66
+ }
67
+ /**
68
+ * Message links
69
+ *
70
+ * Used to link to specific messages in public or private groups and channels.
71
+ *
72
+ * Note: `channelId` is a non-marked channel ID
73
+ */
74
+ exports.message = (0, common_js_1.deeplinkBuilder)({
75
+ internalBuild: (params) => {
76
+ const common = {
77
+ post: params.id,
78
+ thread: params.threadId,
79
+ comment: params.commentId,
80
+ t: params.mediaTimestamp,
81
+ single: params.single ? '' : undefined,
82
+ };
83
+ if ('username' in params) {
84
+ return ['resolve', { domain: params.username, ...common }];
85
+ }
86
+ return ['privatepost', { channel: params.channelId, ...common }];
87
+ },
88
+ internalParse: (path, query) => {
89
+ const common = {
90
+ id: Number(query.get('post')),
91
+ threadId: query.has('thread') ? Number(query.get('thread')) : undefined,
92
+ commentId: query.has('comment') ? Number(query.get('comment')) : undefined,
93
+ mediaTimestamp: query.has('t') ? parseMediaTimestamp(query.get('t')) : undefined,
94
+ single: query.has('single'),
95
+ };
96
+ if (path === 'resolve') {
97
+ const username = query.get('domain');
98
+ if (!username)
99
+ return null;
100
+ return { username, ...common };
101
+ }
102
+ if (path === 'privatepost') {
103
+ const channelId = Number(query.get('channel'));
104
+ if (!channelId)
105
+ return null;
106
+ return { channelId, ...common };
107
+ }
108
+ return null;
109
+ },
110
+ externalBuild: (params) => {
111
+ const common = {
112
+ comment: params.commentId,
113
+ t: params.mediaTimestamp,
114
+ single: params.single ? '' : undefined,
115
+ };
116
+ if ('username' in params) {
117
+ if (params.threadId) {
118
+ return [`${params.username}/${params.threadId}/${params.id}`, common];
119
+ }
120
+ return [`${params.username}/${params.id}`, common];
121
+ }
122
+ if (params.threadId) {
123
+ return [`c/${params.channelId}/${params.threadId}/${params.id}`, common];
124
+ }
125
+ return [`c/${params.channelId}/${params.id}`, common];
126
+ },
127
+ externalParse: (path, query) => {
128
+ const chunks = path.split('/');
129
+ if (chunks.length < 2)
130
+ return null;
131
+ const id = Number(chunks[chunks.length - 1]);
132
+ if (isNaN(id))
133
+ return null;
134
+ const common = {
135
+ id,
136
+ commentId: query.has('comment') ? Number(query.get('comment')) : undefined,
137
+ mediaTimestamp: query.has('t') ? parseMediaTimestamp(query.get('t')) : undefined,
138
+ single: query.has('single'),
139
+ };
140
+ if (chunks[0] === 'c') {
141
+ const channelId = Number(chunks[1]);
142
+ if (isNaN(channelId))
143
+ return null;
144
+ return {
145
+ channelId,
146
+ threadId: chunks[3] ? Number(chunks[2]) : undefined,
147
+ ...common,
148
+ };
149
+ }
150
+ const username = chunks[0];
151
+ if (username[0] === '+')
152
+ return null;
153
+ return {
154
+ username,
155
+ threadId: chunks[2] ? Number(chunks[1]) : undefined,
156
+ ...common,
157
+ };
158
+ },
159
+ });
160
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../../src/utils/links/chat.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAC7C,2CAA6C;AAE7C;;;;GAIG;AACU,QAAA,UAAU,GAAG,IAAA,2BAAe,EAAmB;IACxD,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACvD,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAEhC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAExB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAC3B,CAAC;IACD,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC;IAC/C,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;QAC3D,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAEnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;YACxB,eAAe;YACf,OAAO,IAAI,CAAA;SACd;QAED,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzB,CAAC;CACJ,CAAC,CAAA;AAEF;;GAEG;AACU,QAAA,UAAU,GAAG,IAAA,2BAAe,EAAmB;IACxD,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC;IAClD,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QAEnC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QAEtB,OAAO,EAAE,IAAI,EAAE,CAAA;IACnB,CAAC;IACD,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,CAAC;IACtD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QACpB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QAErC,OAAO,EAAE,IAAI,EAAE,CAAA;IACnB,CAAC;CACJ,CAAC,CAAA;AAEF,SAAS,mBAAmB,CAAC,SAAiB;IAC1C,IAAI,CAAC,CAAA;IAEL,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE;QAClC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KACtB;IAED,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAAE;QAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAC1C;IAED,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,EAAE;QACrE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;KACrF;IAED,OAAO,SAAS,CAAA;AACpB,CAAC;AAED;;;;;;GAMG;AACU,QAAA,OAAO,GAAG,IAAA,2BAAe,EAyBpC;IACE,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG;YACX,IAAI,EAAE,MAAM,CAAC,EAAE;YACf,MAAM,EAAE,MAAM,CAAC,QAAQ;YACvB,OAAO,EAAE,MAAM,CAAC,SAAS;YACzB,CAAC,EAAE,MAAM,CAAC,cAAc;YACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SACzC,CAAA;QAED,IAAI,UAAU,IAAI,MAAM,EAAE;YACtB,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;SAC7D;QAED,OAAO,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;IACpE,CAAC;IACD,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG;YACX,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7B,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YACvE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC1E,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACjF,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC9B,CAAA;QAED,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACpC,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAA;YAE1B,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAA;SACjC;QAED,IAAI,IAAI,KAAK,aAAa,EAAE;YACxB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;YAC9C,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAA;YAE3B,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAA;SAClC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG;YACX,OAAO,EAAE,MAAM,CAAC,SAAS;YACzB,CAAC,EAAE,MAAM,CAAC,cAAc;YACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SACzC,CAAA;QAED,IAAI,UAAU,IAAI,MAAM,EAAE;YACtB,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACjB,OAAO,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;aACxE;YAED,OAAO,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;SACrD;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;SAC3E;QAED,OAAO,CAAC,KAAK,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IACzD,CAAC;IACD,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAE9B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QAElC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5C,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAA;QAE1B,MAAM,MAAM,GAAG;YACX,EAAE;YACF,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC1E,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACjF,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC9B,CAAA;QAED,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YACnB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YACnC,IAAI,KAAK,CAAC,SAAS,CAAC;gBAAE,OAAO,IAAI,CAAA;YAEjC,OAAO;gBACH,SAAS;gBACT,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBACnD,GAAG,MAAM;aACZ,CAAA;SACJ;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QAEpC,OAAO;YACH,QAAQ;YACR,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YACnD,GAAG,MAAM;SACZ,CAAA;IACL,CAAC;CACJ,CAAC,CAAA","sourcesContent":["/* eslint-disable indent,func-call-spacing */\nimport { deeplinkBuilder } from './common.js'\n\n/**\n * Chat invite links\n *\n * Used to invite users to private groups and channels\n */\nexport const chatInvite = deeplinkBuilder<{ hash: string }>({\n internalBuild: ({ hash }) => ['join', { invite: hash }],\n internalParse: (path, query) => {\n if (path !== 'join') return null\n\n const invite = query.get('invite')\n if (!invite) return null\n\n return { hash: invite }\n },\n externalBuild: ({ hash }) => [`+${hash}`, null],\n externalParse: (path) => {\n const m = path.match(/^(?:\\+|joinchat\\/)([a-zA-Z0-9_-]+)$/)\n if (!m) return null\n\n if (m[1].match(/^[0-9]+$/)) {\n // phone number\n return null\n }\n\n return { hash: m[1] }\n },\n})\n\n/**\n * Chat folder links\n */\nexport const chatFolder = deeplinkBuilder<{ slug: string }>({\n internalBuild: ({ slug }) => ['addlist', { slug }],\n internalParse: (path, query) => {\n if (path !== 'addlist') return null\n\n const slug = query.get('slug')\n if (!slug) return null\n\n return { slug }\n },\n externalBuild: ({ slug }) => [`addlist/${slug}`, null],\n externalParse: (path) => {\n const [prefix, slug] = path.split('/')\n if (prefix !== 'addlist') return null\n\n return { slug }\n },\n})\n\nfunction parseMediaTimestamp(timestamp: string) {\n let m\n\n if ((m = timestamp.match(/^(\\d+)$/))) {\n return Number(m[1])\n }\n\n if ((m = timestamp.match(/^(\\d+):(\\d{1,2})$/))) {\n return Number(m[1]) * 60 + Number(m[2])\n }\n\n if ((m = timestamp.match(/^(?:(\\d+)h)?(?:(\\d{1,2})m)?(?:(\\d{1,2})s)$/))) {\n return (Number(m[1]) || 0) * 3600 + (Number(m[2]) || 0) * 60 + (Number(m[3]) || 0)\n }\n\n return undefined\n}\n\n/**\n * Message links\n *\n * Used to link to specific messages in public or private groups and channels.\n *\n * Note: `channelId` is a non-marked channel ID\n */\nexport const message = deeplinkBuilder<\n ({ username: string } | { channelId: number }) & {\n /** Message ID */\n id: number\n /** Thread ID */\n threadId?: number\n\n /**\n * For comments, `id` will contain the message ID of the channel message that started\n * the comment section and this field will contain the message ID of the comment in\n * the discussion group.\n */\n commentId?: number\n\n /**\n * Timestamp at which to start playing the media file present\n * in the body or in the webpage preview of the message\n */\n mediaTimestamp?: number\n\n /**\n * Whether this is a link to a specific message in the album or to the entire album\n */\n single?: boolean\n }\n>({\n internalBuild: (params) => {\n const common = {\n post: params.id,\n thread: params.threadId,\n comment: params.commentId,\n t: params.mediaTimestamp,\n single: params.single ? '' : undefined,\n }\n\n if ('username' in params) {\n return ['resolve', { domain: params.username, ...common }]\n }\n\n return ['privatepost', { channel: params.channelId, ...common }]\n },\n internalParse: (path, query) => {\n const common = {\n id: Number(query.get('post')),\n threadId: query.has('thread') ? Number(query.get('thread')) : undefined,\n commentId: query.has('comment') ? Number(query.get('comment')) : undefined,\n mediaTimestamp: query.has('t') ? parseMediaTimestamp(query.get('t')!) : undefined,\n single: query.has('single'),\n }\n\n if (path === 'resolve') {\n const username = query.get('domain')\n if (!username) return null\n\n return { username, ...common }\n }\n\n if (path === 'privatepost') {\n const channelId = Number(query.get('channel'))\n if (!channelId) return null\n\n return { channelId, ...common }\n }\n\n return null\n },\n\n externalBuild: (params) => {\n const common = {\n comment: params.commentId,\n t: params.mediaTimestamp,\n single: params.single ? '' : undefined,\n }\n\n if ('username' in params) {\n if (params.threadId) {\n return [`${params.username}/${params.threadId}/${params.id}`, common]\n }\n\n return [`${params.username}/${params.id}`, common]\n }\n\n if (params.threadId) {\n return [`c/${params.channelId}/${params.threadId}/${params.id}`, common]\n }\n\n return [`c/${params.channelId}/${params.id}`, common]\n },\n externalParse: (path, query) => {\n const chunks = path.split('/')\n\n if (chunks.length < 2) return null\n\n const id = Number(chunks[chunks.length - 1])\n if (isNaN(id)) return null\n\n const common = {\n id,\n commentId: query.has('comment') ? Number(query.get('comment')) : undefined,\n mediaTimestamp: query.has('t') ? parseMediaTimestamp(query.get('t')!) : undefined,\n single: query.has('single'),\n }\n\n if (chunks[0] === 'c') {\n const channelId = Number(chunks[1])\n if (isNaN(channelId)) return null\n\n return {\n channelId,\n threadId: chunks[3] ? Number(chunks[2]) : undefined,\n ...common,\n }\n }\n\n const username = chunks[0]\n if (username[0] === '+') return null\n\n return {\n username,\n threadId: chunks[2] ? Number(chunks[1]) : undefined,\n ...common,\n }\n },\n})\n"]}
@@ -0,0 +1,31 @@
1
+ export interface CommonDeeplinkOptions {
2
+ /**
3
+ * Protocol to use for deeplink
4
+ * - `tg` - use `tg://` protocol links (default)
5
+ * - `http` - use `http://` protocol
6
+ * - `https` - use `https://` protocol
7
+ * - `none` - don't use any protocol
8
+ *
9
+ * @default 'https'
10
+ */
11
+ protocol?: 'tg' | 'http' | 'https' | 'none';
12
+ /**
13
+ * For protocols except `tg://`, domain to use
14
+ *
15
+ * @default 't.me'
16
+ */
17
+ domain?: string;
18
+ }
19
+ type InputQuery = Record<string, string | number | true | undefined> | null;
20
+ interface BuildDeeplinkOptions<T> {
21
+ internalBuild?: (options: T) => [string, InputQuery];
22
+ internalParse?: (path: string, query: URLSearchParams) => T | null;
23
+ externalBuild?: (options: T) => [string, InputQuery];
24
+ externalParse?: (path: string, query: URLSearchParams) => T | null;
25
+ }
26
+ export type Deeplink<T> = {
27
+ (options: T & CommonDeeplinkOptions): string;
28
+ parse: (url: string) => T | null;
29
+ };
30
+ export declare function deeplinkBuilder<T>(params: BuildDeeplinkOptions<T>): Deeplink<T>;
31
+ export {};
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deeplinkBuilder = void 0;
4
+ function writeQuery(query) {
5
+ if (!query)
6
+ return '';
7
+ let str = '';
8
+ for (const [key, value] of Object.entries(query)) {
9
+ // eslint-disable-next-line eqeqeq
10
+ if (value == undefined)
11
+ continue;
12
+ if (str)
13
+ str += '&';
14
+ if (value === true) {
15
+ str += `${key}`;
16
+ continue;
17
+ }
18
+ str += `${key}=${encodeURIComponent(value)}`;
19
+ }
20
+ if (!str)
21
+ return '';
22
+ return `?${str}`;
23
+ }
24
+ function deeplinkBuilder(params) {
25
+ const { internalBuild, internalParse, externalBuild, externalParse } = params;
26
+ const fn_ = (options) => {
27
+ const { protocol = 'https', domain = 't.me', ...rest } = options;
28
+ if (protocol === 'tg') {
29
+ if (!internalBuild)
30
+ throw new Error('tg:// deeplink is not supported');
31
+ const [path, query] = internalBuild(rest);
32
+ return `tg://${path}${writeQuery(query)}`;
33
+ }
34
+ if (!externalBuild)
35
+ throw new Error('t.me deeplink is not supported');
36
+ const [path, query] = externalBuild(rest);
37
+ return `${protocol}://${domain}/${path}${writeQuery(query)}`;
38
+ };
39
+ const fn = fn_;
40
+ fn.parse = (url) => {
41
+ const isInternal = url.startsWith('tg://');
42
+ // URL with non-standard protocols has bad behavior across environments
43
+ if (isInternal)
44
+ url = `https://fake/${url.slice(5)}`;
45
+ const parsed = new URL(url);
46
+ if (isInternal) {
47
+ if (!internalParse)
48
+ throw new Error('tg:// deeplink is not supported');
49
+ const path = parsed.pathname.slice(1);
50
+ return internalParse(path, parsed.searchParams);
51
+ }
52
+ if (!externalParse)
53
+ throw new Error('t.me deeplink is not supported');
54
+ const path = parsed.pathname.slice(1);
55
+ return externalParse(path, parsed.searchParams);
56
+ };
57
+ return fn;
58
+ }
59
+ exports.deeplinkBuilder = deeplinkBuilder;
60
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/utils/links/common.ts"],"names":[],"mappings":";;;AAmCA,SAAS,UAAU,CAAC,KAAiB;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IAErB,IAAI,GAAG,GAAG,EAAE,CAAA;IAEZ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC9C,kCAAkC;QAClC,IAAI,KAAK,IAAI,SAAS;YAAE,SAAQ;QAEhC,IAAI,GAAG;YAAE,GAAG,IAAI,GAAG,CAAA;QAEnB,IAAI,KAAK,KAAK,IAAI,EAAE;YAChB,GAAG,IAAI,GAAG,GAAG,EAAE,CAAA;YACf,SAAQ;SACX;QAED,GAAG,IAAI,GAAG,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAA;KAC/C;IAED,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IAEnB,OAAO,IAAI,GAAG,EAAE,CAAA;AACpB,CAAC;AAED,SAAgB,eAAe,CAAI,MAA+B;IAC9D,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,CAAA;IAE7E,MAAM,GAAG,GAAG,CAAC,OAAkC,EAAE,EAAE;QAC/C,MAAM,EAAE,QAAQ,GAAG,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;QAEhE,IAAI,QAAQ,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAEtE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,IAAS,CAAC,CAAA;YAE9C,OAAO,QAAQ,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAA;SAC5C;QAED,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QAErE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,IAAS,CAAC,CAAA;QAE9C,OAAO,GAAG,QAAQ,MAAM,MAAM,IAAI,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAA;IAChE,CAAC,CAAA;IAED,MAAM,EAAE,GAAG,GAAkB,CAAA;IAE7B,EAAE,CAAC,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE;QACvB,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAE1C,uEAAuE;QACvE,IAAI,UAAU;YAAE,GAAG,GAAG,gBAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAEpD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAE3B,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAEtE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAErC,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;SAClD;QAED,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QAErE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAErC,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;IACnD,CAAC,CAAA;IAED,OAAO,EAAE,CAAA;AACb,CAAC;AA/CD,0CA+CC","sourcesContent":["export interface CommonDeeplinkOptions {\n /**\n * Protocol to use for deeplink\n * - `tg` - use `tg://` protocol links (default)\n * - `http` - use `http://` protocol\n * - `https` - use `https://` protocol\n * - `none` - don't use any protocol\n *\n * @default 'https'\n */\n protocol?: 'tg' | 'http' | 'https' | 'none'\n\n /**\n * For protocols except `tg://`, domain to use\n *\n * @default 't.me'\n */\n domain?: string\n}\n\ntype InputQuery = Record<string, string | number | true | undefined> | null\n\ninterface BuildDeeplinkOptions<T> {\n internalBuild?: (options: T) => [string, InputQuery]\n internalParse?: (path: string, query: URLSearchParams) => T | null\n\n externalBuild?: (options: T) => [string, InputQuery]\n externalParse?: (path: string, query: URLSearchParams) => T | null\n}\n\nexport type Deeplink<T> = {\n (options: T & CommonDeeplinkOptions): string\n parse: (url: string) => T | null\n}\n\nfunction writeQuery(query: InputQuery) {\n if (!query) return ''\n\n let str = ''\n\n for (const [key, value] of Object.entries(query)) {\n // eslint-disable-next-line eqeqeq\n if (value == undefined) continue\n\n if (str) str += '&'\n\n if (value === true) {\n str += `${key}`\n continue\n }\n\n str += `${key}=${encodeURIComponent(value)}`\n }\n\n if (!str) return ''\n\n return `?${str}`\n}\n\nexport function deeplinkBuilder<T>(params: BuildDeeplinkOptions<T>): Deeplink<T> {\n const { internalBuild, internalParse, externalBuild, externalParse } = params\n\n const fn_ = (options: T & CommonDeeplinkOptions) => {\n const { protocol = 'https', domain = 't.me', ...rest } = options\n\n if (protocol === 'tg') {\n if (!internalBuild) throw new Error('tg:// deeplink is not supported')\n\n const [path, query] = internalBuild(rest as T)\n\n return `tg://${path}${writeQuery(query)}`\n }\n\n if (!externalBuild) throw new Error('t.me deeplink is not supported')\n\n const [path, query] = externalBuild(rest as T)\n\n return `${protocol}://${domain}/${path}${writeQuery(query)}`\n }\n\n const fn = fn_ as Deeplink<T>\n\n fn.parse = (url: string) => {\n const isInternal = url.startsWith('tg://')\n\n // URL with non-standard protocols has bad behavior across environments\n if (isInternal) url = `https://fake/${url.slice(5)}`\n\n const parsed = new URL(url)\n\n if (isInternal) {\n if (!internalParse) throw new Error('tg:// deeplink is not supported')\n\n const path = parsed.pathname.slice(1)\n\n return internalParse(path, parsed.searchParams)\n }\n\n if (!externalParse) throw new Error('t.me deeplink is not supported')\n\n const path = parsed.pathname.slice(1)\n\n return externalParse(path, parsed.searchParams)\n }\n\n return fn\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import * as links from './bundle.js';
2
+ export { links };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.links = void 0;
27
+ const links = __importStar(require("./bundle.js"));
28
+ exports.links = links;
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/links/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAoC;AAC3B,sBAAK","sourcesContent":["import * as links from './bundle.js'\nexport { links }\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Share links
3
+ *
4
+ * Used to share a prepared message and URL into a chosen chat's text field.
5
+ */
6
+ export declare const share: import("./common.js").Deeplink<{
7
+ url: string;
8
+ text?: string | undefined;
9
+ }>;
10
+ /**
11
+ * Boost links
12
+ *
13
+ * Used by users to boost channels, granting them the ability to post stories.
14
+ */
15
+ export declare const boost: import("./common.js").Deeplink<{
16
+ username: string;
17
+ } | {
18
+ channelId: number;
19
+ }>;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.boost = exports.share = void 0;
4
+ const common_js_1 = require("./common.js");
5
+ /**
6
+ * Share links
7
+ *
8
+ * Used to share a prepared message and URL into a chosen chat's text field.
9
+ */
10
+ exports.share = (0, common_js_1.deeplinkBuilder)({
11
+ internalBuild: ({ url, text }) => ['msg_url', { url, text }],
12
+ internalParse: (path, query) => {
13
+ if (path !== 'msg_url')
14
+ return null;
15
+ const url = query.get('url');
16
+ if (!url)
17
+ return null;
18
+ const text = query.get('text');
19
+ return { url, text: text || undefined };
20
+ },
21
+ externalBuild: ({ url, text }) => ['share', { url, text }],
22
+ externalParse: (path, query) => {
23
+ if (path !== 'share')
24
+ return null;
25
+ const url = query.get('url');
26
+ if (!url)
27
+ return null;
28
+ const text = query.get('text');
29
+ return { url, text: text || undefined };
30
+ },
31
+ });
32
+ /**
33
+ * Boost links
34
+ *
35
+ * Used by users to boost channels, granting them the ability to post stories.
36
+ */
37
+ exports.boost = (0, common_js_1.deeplinkBuilder)({
38
+ internalBuild: (params) => {
39
+ if ('username' in params) {
40
+ return ['boost', { domain: params.username }];
41
+ }
42
+ return ['boost', { channel: params.channelId }];
43
+ },
44
+ internalParse: (path, query) => {
45
+ if (path !== 'boost')
46
+ return null;
47
+ const username = query.get('domain');
48
+ if (username) {
49
+ return { username };
50
+ }
51
+ const channelId = Number(query.get('channel'));
52
+ if (!isNaN(channelId)) {
53
+ return { channelId: Number(channelId) };
54
+ }
55
+ return null;
56
+ },
57
+ externalBuild: (params) => {
58
+ if ('username' in params) {
59
+ return [params.username, { boost: true }];
60
+ }
61
+ return [`c/${params.channelId}`, { boost: true }];
62
+ },
63
+ externalParse: (path, query) => {
64
+ if (!query.has('boost'))
65
+ return null;
66
+ if (path.startsWith('c/')) {
67
+ const channelId = Number(path.slice(2));
68
+ if (isNaN(channelId))
69
+ return null;
70
+ return { channelId };
71
+ }
72
+ if (path.includes('/'))
73
+ return null;
74
+ return { username: path };
75
+ },
76
+ });
77
+ //# sourceMappingURL=misc.js.map