@mtcute/core 0.10.2 → 0.11.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 (963) hide show
  1. package/cjs/highlevel/base.d.ts +1 -1
  2. package/cjs/highlevel/base.js +29 -23
  3. package/cjs/highlevel/base.js.map +1 -1
  4. package/cjs/highlevel/client.d.ts +3 -2
  5. package/cjs/highlevel/client.js +1 -0
  6. package/cjs/highlevel/client.js.map +1 -1
  7. package/cjs/highlevel/managers/app-config-manager.js +7 -5
  8. package/cjs/highlevel/managers/app-config-manager.js.map +1 -1
  9. package/cjs/highlevel/methods/_init.js.map +1 -1
  10. package/cjs/highlevel/methods/auth/start-test.js.map +1 -1
  11. package/cjs/highlevel/methods/auth/start.js.map +1 -1
  12. package/cjs/highlevel/methods/auth/utils.js.map +1 -1
  13. package/cjs/highlevel/methods/bots/get-callback-answer.js.map +1 -1
  14. package/cjs/highlevel/methods/bots/get-game-high-scores.js.map +1 -1
  15. package/cjs/highlevel/methods/bots/normalize-command-scope.js.map +1 -1
  16. package/cjs/highlevel/methods/bots/set-my-commands.js.map +1 -1
  17. package/cjs/highlevel/methods/chats/add-chat-members.js.map +1 -1
  18. package/cjs/highlevel/methods/chats/ban-chat-member.js.map +1 -1
  19. package/cjs/highlevel/methods/chats/batched-queries.js.map +1 -1
  20. package/cjs/highlevel/methods/chats/delete-chat-photo.js.map +1 -1
  21. package/cjs/highlevel/methods/chats/delete-history.js.map +1 -1
  22. package/cjs/highlevel/methods/chats/get-chat-event-log.js.map +1 -1
  23. package/cjs/highlevel/methods/chats/get-chat-member.js.map +1 -1
  24. package/cjs/highlevel/methods/chats/get-chat-members.js.map +1 -1
  25. package/cjs/highlevel/methods/chats/get-chat-preview.js.map +1 -1
  26. package/cjs/highlevel/methods/chats/get-chat.js.map +1 -1
  27. package/cjs/highlevel/methods/chats/get-full-chat.js.map +1 -1
  28. package/cjs/highlevel/methods/chats/get-nearby-chats.js.map +1 -1
  29. package/cjs/highlevel/methods/chats/get-similar-channels.js.map +1 -1
  30. package/cjs/highlevel/methods/chats/iter-chat-event-log.js.map +1 -1
  31. package/cjs/highlevel/methods/chats/iter-chat-members.js.map +1 -1
  32. package/cjs/highlevel/methods/chats/join-chat.js.map +1 -1
  33. package/cjs/highlevel/methods/chats/kick-chat-member.js.map +1 -1
  34. package/cjs/highlevel/methods/chats/leave-chat.js.map +1 -1
  35. package/cjs/highlevel/methods/chats/open-chat.js.map +1 -1
  36. package/cjs/highlevel/methods/chats/reorder-usernames.js.map +1 -1
  37. package/cjs/highlevel/methods/chats/restrict-chat-member.js.map +1 -1
  38. package/cjs/highlevel/methods/chats/save-draft.js.map +1 -1
  39. package/cjs/highlevel/methods/chats/set-chat-color.js.map +1 -1
  40. package/cjs/highlevel/methods/chats/set-chat-photo.js.map +1 -1
  41. package/cjs/highlevel/methods/chats/set-chat-title.js.map +1 -1
  42. package/cjs/highlevel/methods/chats/toggle-fragment-username.js.map +1 -1
  43. package/cjs/highlevel/methods/chats/unarchive-chats.js.map +1 -1
  44. package/cjs/highlevel/methods/chats/unban-chat-member.js.map +1 -1
  45. package/cjs/highlevel/methods/contacts/delete-contacts.js.map +1 -1
  46. package/cjs/highlevel/methods/dialogs/create-folder.js.map +1 -1
  47. package/cjs/highlevel/methods/dialogs/edit-folder.js.map +1 -1
  48. package/cjs/highlevel/methods/dialogs/find-folder.js.map +1 -1
  49. package/cjs/highlevel/methods/dialogs/get-folders.js.map +1 -1
  50. package/cjs/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
  51. package/cjs/highlevel/methods/files/download-buffer.js.map +1 -1
  52. package/cjs/highlevel/methods/files/download-iterable.js +1 -1
  53. package/cjs/highlevel/methods/files/download-iterable.js.map +1 -1
  54. package/cjs/highlevel/methods/files/download-node-stream.js.map +1 -1
  55. package/cjs/highlevel/methods/files/download-stream.js.map +1 -1
  56. package/cjs/highlevel/methods/files/normalize-file-to-document.js.map +1 -1
  57. package/cjs/highlevel/methods/files/normalize-input-file.js.map +1 -1
  58. package/cjs/highlevel/methods/files/normalize-input-media.js +1 -2
  59. package/cjs/highlevel/methods/files/normalize-input-media.js.map +1 -1
  60. package/cjs/highlevel/methods/files/upload-file.js +7 -6
  61. package/cjs/highlevel/methods/files/upload-file.js.map +1 -1
  62. package/cjs/highlevel/methods/files/upload-media.js.map +1 -1
  63. package/cjs/highlevel/methods/forums/iter-forum-topics.js.map +1 -1
  64. package/cjs/highlevel/methods/invite-links/get-primary-invite-link.js.map +1 -1
  65. package/cjs/highlevel/methods/invite-links/iter-invite-link-members.js.map +1 -1
  66. package/cjs/highlevel/methods/invite-links/iter-invite-links.js.map +1 -1
  67. package/cjs/highlevel/methods/messages/close-poll.js.map +1 -1
  68. package/cjs/highlevel/methods/messages/delete-messages.js.map +1 -1
  69. package/cjs/highlevel/methods/messages/edit-inline-message.js.map +1 -1
  70. package/cjs/highlevel/methods/messages/edit-message.js.map +1 -1
  71. package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
  72. package/cjs/highlevel/methods/messages/forward-messages.js.map +1 -1
  73. package/cjs/highlevel/methods/messages/get-callback-query-message.js.map +1 -1
  74. package/cjs/highlevel/methods/messages/get-discussion-message.js.map +1 -1
  75. package/cjs/highlevel/methods/messages/get-history.js +5 -1
  76. package/cjs/highlevel/methods/messages/get-history.js.map +1 -1
  77. package/cjs/highlevel/methods/messages/get-message-by-link.js.map +1 -1
  78. package/cjs/highlevel/methods/messages/get-message-group.js.map +1 -1
  79. package/cjs/highlevel/methods/messages/get-message-reactions.js.map +1 -1
  80. package/cjs/highlevel/methods/messages/get-messages.js.map +1 -1
  81. package/cjs/highlevel/methods/messages/get-reply-to.js.map +1 -1
  82. package/cjs/highlevel/methods/messages/iter-history.js.map +1 -1
  83. package/cjs/highlevel/methods/messages/iter-reaction-users.js.map +1 -1
  84. package/cjs/highlevel/methods/messages/iter-search-global.js.map +1 -1
  85. package/cjs/highlevel/methods/messages/iter-search-messages.js.map +1 -1
  86. package/cjs/highlevel/methods/messages/read-history.js.map +1 -1
  87. package/cjs/highlevel/methods/messages/send-answer.js.map +1 -1
  88. package/cjs/highlevel/methods/messages/send-comment.js.map +1 -1
  89. package/cjs/highlevel/methods/messages/send-common.js.map +1 -1
  90. package/cjs/highlevel/methods/messages/send-copy-group.js.map +1 -1
  91. package/cjs/highlevel/methods/messages/send-copy.js.map +1 -1
  92. package/cjs/highlevel/methods/messages/send-media-group.js.map +1 -1
  93. package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
  94. package/cjs/highlevel/methods/messages/send-quote.js.map +1 -1
  95. package/cjs/highlevel/methods/messages/send-text.js.map +1 -1
  96. package/cjs/highlevel/methods/messages/send-typing.js.map +1 -1
  97. package/cjs/highlevel/methods/messages/send-vote.js.map +1 -1
  98. package/cjs/highlevel/methods/messages/translate-text.js.map +1 -1
  99. package/cjs/highlevel/methods/messages/unpin-all-messages.js.map +1 -1
  100. package/cjs/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
  101. package/cjs/highlevel/methods/misc/normalize-text.js.map +1 -1
  102. package/cjs/highlevel/methods/misc/with-params.js.map +1 -1
  103. package/cjs/highlevel/methods/password/change-cloud-password.js.map +1 -1
  104. package/cjs/highlevel/methods/password/enable-cloud-password.js.map +1 -1
  105. package/cjs/highlevel/methods/password/remove-cloud-password.js.map +1 -1
  106. package/cjs/highlevel/methods/premium/can-apply-boost.js.map +1 -1
  107. package/cjs/highlevel/methods/premium/iter-boosters.js.map +1 -1
  108. package/cjs/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
  109. package/cjs/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
  110. package/cjs/highlevel/methods/stickers/get-custom-emojis.js.map +1 -1
  111. package/cjs/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
  112. package/cjs/highlevel/methods/stories/can-send-story.js.map +1 -1
  113. package/cjs/highlevel/methods/stories/edit-story.js.map +1 -1
  114. package/cjs/highlevel/methods/stories/find-in-update.js.map +1 -1
  115. package/cjs/highlevel/methods/stories/hide-my-stories-views.js.map +1 -1
  116. package/cjs/highlevel/methods/stories/iter-all-stories.js.map +1 -1
  117. package/cjs/highlevel/methods/stories/iter-profile-stories.js.map +1 -1
  118. package/cjs/highlevel/methods/stories/iter-story-viewers.js.map +1 -1
  119. package/cjs/highlevel/methods/stories/send-story.js.map +1 -1
  120. package/cjs/highlevel/methods/users/delete-profile-photos.js.map +1 -1
  121. package/cjs/highlevel/methods/users/get-users.js.map +1 -1
  122. package/cjs/highlevel/methods/users/iter-profile-photos.js.map +1 -1
  123. package/cjs/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  124. package/cjs/highlevel/methods/users/resolve-peer.js.map +1 -1
  125. package/cjs/highlevel/methods/users/set-my-emoji-status.js.map +1 -1
  126. package/cjs/highlevel/methods/users/set-my-profile-photo.js.map +1 -1
  127. package/cjs/highlevel/storage/service/current-user.js +2 -0
  128. package/cjs/highlevel/storage/service/current-user.js.map +1 -1
  129. package/cjs/highlevel/storage/service/peers.js +5 -1
  130. package/cjs/highlevel/storage/service/peers.js.map +1 -1
  131. package/cjs/highlevel/storage/service/ref-messages.js +3 -0
  132. package/cjs/highlevel/storage/service/ref-messages.js.map +1 -1
  133. package/cjs/highlevel/storage/service/updates.js +1 -0
  134. package/cjs/highlevel/storage/service/updates.js.map +1 -1
  135. package/cjs/highlevel/storage/storage.d.ts +1 -1
  136. package/cjs/highlevel/storage/storage.js +17 -4
  137. package/cjs/highlevel/storage/storage.js.map +1 -1
  138. package/cjs/highlevel/types/auth/sent-code.js +1 -0
  139. package/cjs/highlevel/types/auth/sent-code.js.map +1 -1
  140. package/cjs/highlevel/types/bots/game-high-score.js +2 -0
  141. package/cjs/highlevel/types/bots/game-high-score.js.map +1 -1
  142. package/cjs/highlevel/types/bots/inline-message/factories.js.map +1 -1
  143. package/cjs/highlevel/types/bots/inline-result/factories.js.map +1 -1
  144. package/cjs/highlevel/types/bots/keyboards/builder.js +2 -1
  145. package/cjs/highlevel/types/bots/keyboards/builder.js.map +1 -1
  146. package/cjs/highlevel/types/bots/keyboards/factories.js.map +1 -1
  147. package/cjs/highlevel/types/calls/discard-reason.js.map +1 -1
  148. package/cjs/highlevel/types/conversation.js +13 -7
  149. package/cjs/highlevel/types/conversation.js.map +1 -1
  150. package/cjs/highlevel/types/errors.js +3 -0
  151. package/cjs/highlevel/types/errors.js.map +1 -1
  152. package/cjs/highlevel/types/files/file-location.js +3 -0
  153. package/cjs/highlevel/types/files/file-location.js.map +1 -1
  154. package/cjs/highlevel/types/files/uploaded-file.js +1 -1
  155. package/cjs/highlevel/types/files/uploaded-file.js.map +1 -1
  156. package/cjs/highlevel/types/files/utils.d.ts +3 -3
  157. package/cjs/highlevel/types/files/utils.js.map +1 -1
  158. package/cjs/highlevel/types/files/web-document.js +1 -0
  159. package/cjs/highlevel/types/files/web-document.js.map +1 -1
  160. package/cjs/highlevel/types/media/audio.js +3 -2
  161. package/cjs/highlevel/types/media/audio.js.map +1 -1
  162. package/cjs/highlevel/types/media/contact.js +2 -1
  163. package/cjs/highlevel/types/media/contact.js.map +1 -1
  164. package/cjs/highlevel/types/media/dice.js +125 -124
  165. package/cjs/highlevel/types/media/dice.js.map +1 -1
  166. package/cjs/highlevel/types/media/document-utils.js.map +1 -1
  167. package/cjs/highlevel/types/media/document.js +2 -4
  168. package/cjs/highlevel/types/media/document.js.map +1 -1
  169. package/cjs/highlevel/types/media/game.js +2 -1
  170. package/cjs/highlevel/types/media/game.js.map +1 -1
  171. package/cjs/highlevel/types/media/invoice.js +4 -1
  172. package/cjs/highlevel/types/media/invoice.js.map +1 -1
  173. package/cjs/highlevel/types/media/location.js +4 -5
  174. package/cjs/highlevel/types/media/location.js.map +1 -1
  175. package/cjs/highlevel/types/media/photo.js +8 -1
  176. package/cjs/highlevel/types/media/photo.js.map +1 -1
  177. package/cjs/highlevel/types/media/poll.js +4 -1
  178. package/cjs/highlevel/types/media/poll.js.map +1 -1
  179. package/cjs/highlevel/types/media/sticker.js +3 -1
  180. package/cjs/highlevel/types/media/sticker.js.map +1 -1
  181. package/cjs/highlevel/types/media/story.js +3 -1
  182. package/cjs/highlevel/types/media/story.js.map +1 -1
  183. package/cjs/highlevel/types/media/thumbnail.js +35 -22
  184. package/cjs/highlevel/types/media/thumbnail.js.map +1 -1
  185. package/cjs/highlevel/types/media/venue.js +2 -1
  186. package/cjs/highlevel/types/media/venue.js.map +1 -1
  187. package/cjs/highlevel/types/media/video.js +3 -1
  188. package/cjs/highlevel/types/media/video.js.map +1 -1
  189. package/cjs/highlevel/types/media/voice.js +2 -1
  190. package/cjs/highlevel/types/media/voice.js.map +1 -1
  191. package/cjs/highlevel/types/media/web-page.js +2 -1
  192. package/cjs/highlevel/types/media/web-page.js.map +1 -1
  193. package/cjs/highlevel/types/messages/dialog.js +3 -0
  194. package/cjs/highlevel/types/messages/dialog.js.map +1 -1
  195. package/cjs/highlevel/types/messages/draft-message.js +1 -0
  196. package/cjs/highlevel/types/messages/draft-message.js.map +1 -1
  197. package/cjs/highlevel/types/messages/message-action.js.map +1 -1
  198. package/cjs/highlevel/types/messages/message-entity.js +2 -0
  199. package/cjs/highlevel/types/messages/message-entity.js.map +1 -1
  200. package/cjs/highlevel/types/messages/message-forward.js +2 -0
  201. package/cjs/highlevel/types/messages/message-forward.js.map +1 -1
  202. package/cjs/highlevel/types/messages/message-media.js.map +1 -1
  203. package/cjs/highlevel/types/messages/message-reactions.js +4 -0
  204. package/cjs/highlevel/types/messages/message-reactions.js.map +1 -1
  205. package/cjs/highlevel/types/messages/message-replies.js +2 -0
  206. package/cjs/highlevel/types/messages/message-replies.js.map +1 -1
  207. package/cjs/highlevel/types/messages/message.js +6 -0
  208. package/cjs/highlevel/types/messages/message.js.map +1 -1
  209. package/cjs/highlevel/types/messages/replied-message.js +2 -0
  210. package/cjs/highlevel/types/messages/replied-message.js.map +1 -1
  211. package/cjs/highlevel/types/misc/sticker-set.js +7 -1
  212. package/cjs/highlevel/types/misc/sticker-set.js.map +1 -1
  213. package/cjs/highlevel/types/misc/takeout-session.js +5 -0
  214. package/cjs/highlevel/types/misc/takeout-session.js.map +1 -1
  215. package/cjs/highlevel/types/peers/chat-colors.js +2 -0
  216. package/cjs/highlevel/types/peers/chat-colors.js.map +1 -1
  217. package/cjs/highlevel/types/peers/chat-event/actions.js.map +1 -1
  218. package/cjs/highlevel/types/peers/chat-event/filters.js.map +1 -1
  219. package/cjs/highlevel/types/peers/chat-event/index.js +2 -0
  220. package/cjs/highlevel/types/peers/chat-event/index.js.map +1 -1
  221. package/cjs/highlevel/types/peers/chat-invite-link-member.js +2 -0
  222. package/cjs/highlevel/types/peers/chat-invite-link-member.js.map +1 -1
  223. package/cjs/highlevel/types/peers/chat-invite-link.js +2 -0
  224. package/cjs/highlevel/types/peers/chat-invite-link.js.map +1 -1
  225. package/cjs/highlevel/types/peers/chat-location.js +1 -0
  226. package/cjs/highlevel/types/peers/chat-location.js.map +1 -1
  227. package/cjs/highlevel/types/peers/chat-member.js +2 -0
  228. package/cjs/highlevel/types/peers/chat-member.js.map +1 -1
  229. package/cjs/highlevel/types/peers/chat-permissions.js +1 -0
  230. package/cjs/highlevel/types/peers/chat-permissions.js.map +1 -1
  231. package/cjs/highlevel/types/peers/chat-photo.js +5 -0
  232. package/cjs/highlevel/types/peers/chat-photo.js.map +1 -1
  233. package/cjs/highlevel/types/peers/chat-preview.js +2 -0
  234. package/cjs/highlevel/types/peers/chat-preview.js.map +1 -1
  235. package/cjs/highlevel/types/peers/chat.js +12 -1
  236. package/cjs/highlevel/types/peers/chat.js.map +1 -1
  237. package/cjs/highlevel/types/peers/forum-topic.js +9 -6
  238. package/cjs/highlevel/types/peers/forum-topic.js.map +1 -1
  239. package/cjs/highlevel/types/peers/peer.js.map +1 -1
  240. package/cjs/highlevel/types/peers/peers-index.js +3 -1
  241. package/cjs/highlevel/types/peers/peers-index.js.map +1 -1
  242. package/cjs/highlevel/types/peers/user.js +5 -1
  243. package/cjs/highlevel/types/peers/user.js.map +1 -1
  244. package/cjs/highlevel/types/premium/boost-slot.js +2 -0
  245. package/cjs/highlevel/types/premium/boost-slot.js.map +1 -1
  246. package/cjs/highlevel/types/premium/boost-stats.js +1 -0
  247. package/cjs/highlevel/types/premium/boost-stats.js.map +1 -1
  248. package/cjs/highlevel/types/premium/boost.js +2 -0
  249. package/cjs/highlevel/types/premium/boost.js.map +1 -1
  250. package/cjs/highlevel/types/reactions/emoji-status.js +1 -0
  251. package/cjs/highlevel/types/reactions/emoji-status.js.map +1 -1
  252. package/cjs/highlevel/types/reactions/peer-reaction.js +2 -0
  253. package/cjs/highlevel/types/reactions/peer-reaction.js.map +1 -1
  254. package/cjs/highlevel/types/reactions/reaction-count.js +1 -0
  255. package/cjs/highlevel/types/reactions/reaction-count.js.map +1 -1
  256. package/cjs/highlevel/types/reactions/types.js.map +1 -1
  257. package/cjs/highlevel/types/stories/all-stories.d.ts +2 -2
  258. package/cjs/highlevel/types/stories/all-stories.js +3 -1
  259. package/cjs/highlevel/types/stories/all-stories.js.map +1 -1
  260. package/cjs/highlevel/types/stories/interactive/base.js +1 -0
  261. package/cjs/highlevel/types/stories/interactive/base.js.map +1 -1
  262. package/cjs/highlevel/types/stories/interactive/channel-post.js +3 -1
  263. package/cjs/highlevel/types/stories/interactive/channel-post.js.map +1 -1
  264. package/cjs/highlevel/types/stories/interactive/index.js.map +1 -1
  265. package/cjs/highlevel/types/stories/interactive/input.js +1 -0
  266. package/cjs/highlevel/types/stories/interactive/input.js.map +1 -1
  267. package/cjs/highlevel/types/stories/interactive/location.js +2 -1
  268. package/cjs/highlevel/types/stories/interactive/location.js.map +1 -1
  269. package/cjs/highlevel/types/stories/interactive/reaction.js +2 -1
  270. package/cjs/highlevel/types/stories/interactive/reaction.js.map +1 -1
  271. package/cjs/highlevel/types/stories/interactive/venue.js +2 -1
  272. package/cjs/highlevel/types/stories/interactive/venue.js.map +1 -1
  273. package/cjs/highlevel/types/stories/peer-stories.js +2 -0
  274. package/cjs/highlevel/types/stories/peer-stories.js.map +1 -1
  275. package/cjs/highlevel/types/stories/stealth-mode.js +1 -0
  276. package/cjs/highlevel/types/stories/stealth-mode.js.map +1 -1
  277. package/cjs/highlevel/types/stories/story-interactions.js +2 -0
  278. package/cjs/highlevel/types/stories/story-interactions.js.map +1 -1
  279. package/cjs/highlevel/types/stories/story-viewer.d.ts +1 -1
  280. package/cjs/highlevel/types/stories/story-viewer.js +6 -0
  281. package/cjs/highlevel/types/stories/story-viewer.js.map +1 -1
  282. package/cjs/highlevel/types/stories/story.js +2 -0
  283. package/cjs/highlevel/types/stories/story.js.map +1 -1
  284. package/cjs/highlevel/types/updates/bot-chat-join-request.js +2 -0
  285. package/cjs/highlevel/types/updates/bot-chat-join-request.js.map +1 -1
  286. package/cjs/highlevel/types/updates/bot-reaction.js +4 -0
  287. package/cjs/highlevel/types/updates/bot-reaction.js.map +1 -1
  288. package/cjs/highlevel/types/updates/bot-stopped.js +2 -0
  289. package/cjs/highlevel/types/updates/bot-stopped.js.map +1 -1
  290. package/cjs/highlevel/types/updates/callback-query.js +4 -0
  291. package/cjs/highlevel/types/updates/callback-query.js.map +1 -1
  292. package/cjs/highlevel/types/updates/chat-join-request.js +2 -0
  293. package/cjs/highlevel/types/updates/chat-join-request.js.map +1 -1
  294. package/cjs/highlevel/types/updates/chat-member-update.js +2 -0
  295. package/cjs/highlevel/types/updates/chat-member-update.js.map +1 -1
  296. package/cjs/highlevel/types/updates/chosen-inline-result.js +2 -0
  297. package/cjs/highlevel/types/updates/chosen-inline-result.js.map +1 -1
  298. package/cjs/highlevel/types/updates/delete-message-update.js +1 -0
  299. package/cjs/highlevel/types/updates/delete-message-update.js.map +1 -1
  300. package/cjs/highlevel/types/updates/delete-story-update.js +2 -0
  301. package/cjs/highlevel/types/updates/delete-story-update.js.map +1 -1
  302. package/cjs/highlevel/types/updates/history-read-update.js +1 -0
  303. package/cjs/highlevel/types/updates/history-read-update.js.map +1 -1
  304. package/cjs/highlevel/types/updates/inline-query.js +2 -0
  305. package/cjs/highlevel/types/updates/inline-query.js.map +1 -1
  306. package/cjs/highlevel/types/updates/parse-update.js.map +1 -1
  307. package/cjs/highlevel/types/updates/poll-update.js +2 -0
  308. package/cjs/highlevel/types/updates/poll-update.js.map +1 -1
  309. package/cjs/highlevel/types/updates/poll-vote.js +2 -0
  310. package/cjs/highlevel/types/updates/poll-vote.js.map +1 -1
  311. package/cjs/highlevel/types/updates/pre-checkout-query.js +2 -0
  312. package/cjs/highlevel/types/updates/pre-checkout-query.js.map +1 -1
  313. package/cjs/highlevel/types/updates/story-update.js +2 -0
  314. package/cjs/highlevel/types/updates/story-update.js.map +1 -1
  315. package/cjs/highlevel/types/updates/user-status-update.js +1 -0
  316. package/cjs/highlevel/types/updates/user-status-update.js.map +1 -1
  317. package/cjs/highlevel/types/updates/user-typing-update.js +1 -0
  318. package/cjs/highlevel/types/updates/user-typing-update.js.map +1 -1
  319. package/cjs/highlevel/updates/manager.d.ts +1 -1
  320. package/cjs/highlevel/updates/manager.js +50 -28
  321. package/cjs/highlevel/updates/manager.js.map +1 -1
  322. package/cjs/highlevel/updates/parsed.js.map +1 -1
  323. package/cjs/highlevel/updates/utils.js.map +1 -1
  324. package/cjs/highlevel/utils/convert-file-id.js.map +1 -1
  325. package/cjs/highlevel/utils/entities.js.map +1 -1
  326. package/cjs/highlevel/utils/file-type.d.ts +1 -0
  327. package/cjs/highlevel/utils/file-type.js +35 -1
  328. package/cjs/highlevel/utils/file-type.js.map +1 -1
  329. package/cjs/highlevel/utils/file-utils.js +1 -1
  330. package/cjs/highlevel/utils/file-utils.js.map +1 -1
  331. package/cjs/highlevel/utils/inline-utils.js.map +1 -1
  332. package/cjs/highlevel/utils/inspectable.js.map +1 -1
  333. package/cjs/highlevel/utils/memoize.js.map +1 -1
  334. package/cjs/highlevel/utils/peer-utils.js.map +1 -1
  335. package/cjs/highlevel/utils/query-batcher.js.map +1 -1
  336. package/cjs/highlevel/utils/rps-meter.js +3 -0
  337. package/cjs/highlevel/utils/rps-meter.js.map +1 -1
  338. package/cjs/highlevel/utils/stream-utils.js.map +1 -1
  339. package/cjs/highlevel/utils/string-session.d.ts +1 -2
  340. package/cjs/highlevel/utils/string-session.js +27 -7
  341. package/cjs/highlevel/utils/string-session.js.map +1 -1
  342. package/cjs/highlevel/utils/voice-utils.js.map +1 -1
  343. package/cjs/highlevel/worker/app-config.d.ts +2 -3
  344. package/cjs/highlevel/worker/app-config.js +6 -3
  345. package/cjs/highlevel/worker/app-config.js.map +1 -1
  346. package/cjs/highlevel/worker/errors.js.map +1 -1
  347. package/cjs/highlevel/worker/invoker.js +3 -2
  348. package/cjs/highlevel/worker/invoker.js.map +1 -1
  349. package/cjs/highlevel/worker/port.d.ts +16 -17
  350. package/cjs/highlevel/worker/port.js +74 -49
  351. package/cjs/highlevel/worker/port.js.map +1 -1
  352. package/cjs/highlevel/worker/protocol.d.ts +2 -2
  353. package/cjs/highlevel/worker/protocol.js.map +1 -1
  354. package/cjs/highlevel/worker/storage.d.ts +9 -13
  355. package/cjs/highlevel/worker/storage.js +34 -19
  356. package/cjs/highlevel/worker/storage.js.map +1 -1
  357. package/cjs/highlevel/worker/worker.js +3 -0
  358. package/cjs/highlevel/worker/worker.js.map +1 -1
  359. package/cjs/network/auth-key.js +8 -1
  360. package/cjs/network/auth-key.js.map +1 -1
  361. package/cjs/network/authorization.js.map +1 -1
  362. package/cjs/network/client.d.ts +1 -1
  363. package/cjs/network/client.js +39 -14
  364. package/cjs/network/client.js.map +1 -1
  365. package/cjs/network/config-manager.js.map +1 -1
  366. package/cjs/network/mtproto-session.d.ts +1 -1
  367. package/cjs/network/mtproto-session.js +40 -30
  368. package/cjs/network/mtproto-session.js.map +1 -1
  369. package/cjs/network/multi-session-connection.d.ts +2 -2
  370. package/cjs/network/multi-session-connection.js +13 -7
  371. package/cjs/network/multi-session-connection.js.map +1 -1
  372. package/cjs/network/network-manager.d.ts +2 -3
  373. package/cjs/network/network-manager.js +49 -28
  374. package/cjs/network/network-manager.js.map +1 -1
  375. package/cjs/network/persistent-connection.d.ts +3 -3
  376. package/cjs/network/persistent-connection.js +33 -22
  377. package/cjs/network/persistent-connection.js.map +1 -1
  378. package/cjs/network/server-salt.js +4 -5
  379. package/cjs/network/server-salt.js.map +1 -1
  380. package/cjs/network/session-connection.d.ts +1 -1
  381. package/cjs/network/session-connection.js +22 -12
  382. package/cjs/network/session-connection.js.map +1 -1
  383. package/cjs/network/transports/abstract.d.ts +2 -2
  384. package/cjs/network/transports/abstract.js +1 -0
  385. package/cjs/network/transports/abstract.js.map +1 -1
  386. package/cjs/network/transports/intermediate.js +1 -0
  387. package/cjs/network/transports/intermediate.js.map +1 -1
  388. package/cjs/network/transports/obfuscated.js +3 -0
  389. package/cjs/network/transports/obfuscated.js.map +1 -1
  390. package/cjs/network/transports/streamed.d.ts +1 -1
  391. package/cjs/network/transports/streamed.js +1 -4
  392. package/cjs/network/transports/streamed.js.map +1 -1
  393. package/cjs/network/transports/wrapped.d.ts +1 -1
  394. package/cjs/network/transports/wrapped.js +2 -0
  395. package/cjs/network/transports/wrapped.js.map +1 -1
  396. package/cjs/platform.js.map +1 -1
  397. package/cjs/storage/driver.js +3 -4
  398. package/cjs/storage/driver.js.map +1 -1
  399. package/cjs/storage/memory/driver.js +1 -3
  400. package/cjs/storage/memory/driver.js.map +1 -1
  401. package/cjs/storage/memory/index.js +5 -7
  402. package/cjs/storage/memory/index.js.map +1 -1
  403. package/cjs/storage/memory/repository/auth-keys.d.ts +1 -1
  404. package/cjs/storage/memory/repository/auth-keys.js +2 -0
  405. package/cjs/storage/memory/repository/auth-keys.js.map +1 -1
  406. package/cjs/storage/memory/repository/kv.d.ts +1 -1
  407. package/cjs/storage/memory/repository/kv.js +2 -0
  408. package/cjs/storage/memory/repository/kv.js.map +1 -1
  409. package/cjs/storage/memory/repository/peers.d.ts +1 -1
  410. package/cjs/storage/memory/repository/peers.js +2 -0
  411. package/cjs/storage/memory/repository/peers.js.map +1 -1
  412. package/cjs/storage/memory/repository/ref-messages.d.ts +1 -1
  413. package/cjs/storage/memory/repository/ref-messages.js +2 -0
  414. package/cjs/storage/memory/repository/ref-messages.js.map +1 -1
  415. package/cjs/storage/service/auth-keys.js +2 -0
  416. package/cjs/storage/service/auth-keys.js.map +1 -1
  417. package/cjs/storage/service/base.js +4 -0
  418. package/cjs/storage/service/base.js.map +1 -1
  419. package/cjs/storage/service/default-dcs.js +2 -0
  420. package/cjs/storage/service/default-dcs.js.map +1 -1
  421. package/cjs/storage/service/future-salts.js +2 -1
  422. package/cjs/storage/service/future-salts.js.map +1 -1
  423. package/cjs/storage/sqlite/driver.js +10 -10
  424. package/cjs/storage/sqlite/driver.js.map +1 -1
  425. package/cjs/storage/sqlite/index.d.ts +1 -1
  426. package/cjs/storage/sqlite/index.js +5 -0
  427. package/cjs/storage/sqlite/index.js.map +1 -1
  428. package/cjs/storage/sqlite/repository/auth-keys.js +9 -0
  429. package/cjs/storage/sqlite/repository/auth-keys.js.map +1 -1
  430. package/cjs/storage/sqlite/repository/kv.js +5 -0
  431. package/cjs/storage/sqlite/repository/kv.js.map +1 -1
  432. package/cjs/storage/sqlite/repository/peers.js +6 -0
  433. package/cjs/storage/sqlite/repository/peers.js.map +1 -1
  434. package/cjs/storage/sqlite/repository/ref-messages.d.ts +1 -1
  435. package/cjs/storage/sqlite/repository/ref-messages.js +6 -0
  436. package/cjs/storage/sqlite/repository/ref-messages.js.map +1 -1
  437. package/cjs/storage/storage.d.ts +1 -3
  438. package/cjs/storage/storage.js +21 -13
  439. package/cjs/storage/storage.js.map +1 -1
  440. package/cjs/types/errors.js +13 -0
  441. package/cjs/types/errors.js.map +1 -1
  442. package/cjs/utils/async-lock.js +1 -3
  443. package/cjs/utils/async-lock.js.map +1 -1
  444. package/cjs/utils/bigint-utils.js.map +1 -1
  445. package/cjs/utils/binary/asn1-parser.js.map +1 -1
  446. package/cjs/utils/buffer-utils.js.map +1 -1
  447. package/cjs/utils/condition-variable.js +2 -0
  448. package/cjs/utils/condition-variable.js.map +1 -1
  449. package/cjs/utils/crypto/factorization.js.map +1 -1
  450. package/cjs/utils/crypto/keys.js.map +1 -1
  451. package/cjs/utils/crypto/miller-rabin.js.map +1 -1
  452. package/cjs/utils/crypto/password.js.map +1 -1
  453. package/cjs/utils/crypto/utils.js.map +1 -1
  454. package/cjs/utils/dcs.js +1 -1
  455. package/cjs/utils/dcs.js.map +1 -1
  456. package/cjs/utils/deque.js +8 -2
  457. package/cjs/utils/deque.js.map +1 -1
  458. package/cjs/utils/early-timer.js +4 -1
  459. package/cjs/utils/early-timer.js.map +1 -1
  460. package/cjs/utils/error-reporting.js.map +1 -1
  461. package/cjs/utils/function-utils.js.map +1 -1
  462. package/cjs/utils/linked-list.js +4 -1
  463. package/cjs/utils/linked-list.js.map +1 -1
  464. package/cjs/utils/links/bots.js.map +1 -1
  465. package/cjs/utils/links/chat.js.map +1 -1
  466. package/cjs/utils/links/common.js.map +1 -1
  467. package/cjs/utils/links/misc.js.map +1 -1
  468. package/cjs/utils/logger.d.ts +2 -2
  469. package/cjs/utils/logger.js +21 -14
  470. package/cjs/utils/logger.js.map +1 -1
  471. package/cjs/utils/long-utils.js +2 -6
  472. package/cjs/utils/long-utils.js.map +1 -1
  473. package/cjs/utils/lru-map.js +5 -1
  474. package/cjs/utils/lru-map.js.map +1 -1
  475. package/cjs/utils/lru-set.js +4 -0
  476. package/cjs/utils/lru-set.js.map +1 -1
  477. package/cjs/utils/peer-utils.js.map +1 -1
  478. package/cjs/utils/reloadable.d.ts +1 -1
  479. package/cjs/utils/reloadable.js +10 -7
  480. package/cjs/utils/reloadable.js.map +1 -1
  481. package/cjs/utils/sorted-array.js +2 -0
  482. package/cjs/utils/sorted-array.js.map +1 -1
  483. package/cjs/utils/tl-json.js.map +1 -1
  484. package/cjs/utils/type-assertions.js.map +1 -1
  485. package/esm/highlevel/base.d.ts +1 -1
  486. package/esm/highlevel/base.js +29 -23
  487. package/esm/highlevel/base.js.map +1 -1
  488. package/esm/highlevel/client.d.ts +2 -1
  489. package/esm/highlevel/client.js +1 -0
  490. package/esm/highlevel/client.js.map +1 -1
  491. package/esm/highlevel/managers/app-config-manager.js +7 -5
  492. package/esm/highlevel/managers/app-config-manager.js.map +1 -1
  493. package/esm/highlevel/methods/_init.js.map +1 -1
  494. package/esm/highlevel/methods/auth/start-test.js.map +1 -1
  495. package/esm/highlevel/methods/auth/start.js.map +1 -1
  496. package/esm/highlevel/methods/auth/utils.js.map +1 -1
  497. package/esm/highlevel/methods/bots/get-callback-answer.js.map +1 -1
  498. package/esm/highlevel/methods/bots/get-game-high-scores.js.map +1 -1
  499. package/esm/highlevel/methods/bots/normalize-command-scope.js.map +1 -1
  500. package/esm/highlevel/methods/bots/set-my-commands.js.map +1 -1
  501. package/esm/highlevel/methods/chats/add-chat-members.js.map +1 -1
  502. package/esm/highlevel/methods/chats/ban-chat-member.js.map +1 -1
  503. package/esm/highlevel/methods/chats/batched-queries.js.map +1 -1
  504. package/esm/highlevel/methods/chats/delete-chat-photo.js.map +1 -1
  505. package/esm/highlevel/methods/chats/delete-history.js.map +1 -1
  506. package/esm/highlevel/methods/chats/get-chat-event-log.js.map +1 -1
  507. package/esm/highlevel/methods/chats/get-chat-member.js.map +1 -1
  508. package/esm/highlevel/methods/chats/get-chat-members.js.map +1 -1
  509. package/esm/highlevel/methods/chats/get-chat-preview.js.map +1 -1
  510. package/esm/highlevel/methods/chats/get-chat.js.map +1 -1
  511. package/esm/highlevel/methods/chats/get-full-chat.js.map +1 -1
  512. package/esm/highlevel/methods/chats/get-nearby-chats.js.map +1 -1
  513. package/esm/highlevel/methods/chats/get-similar-channels.js.map +1 -1
  514. package/esm/highlevel/methods/chats/iter-chat-event-log.js.map +1 -1
  515. package/esm/highlevel/methods/chats/iter-chat-members.js.map +1 -1
  516. package/esm/highlevel/methods/chats/join-chat.js.map +1 -1
  517. package/esm/highlevel/methods/chats/kick-chat-member.js.map +1 -1
  518. package/esm/highlevel/methods/chats/leave-chat.js.map +1 -1
  519. package/esm/highlevel/methods/chats/open-chat.js.map +1 -1
  520. package/esm/highlevel/methods/chats/reorder-usernames.js.map +1 -1
  521. package/esm/highlevel/methods/chats/restrict-chat-member.js.map +1 -1
  522. package/esm/highlevel/methods/chats/save-draft.js.map +1 -1
  523. package/esm/highlevel/methods/chats/set-chat-color.js.map +1 -1
  524. package/esm/highlevel/methods/chats/set-chat-photo.js.map +1 -1
  525. package/esm/highlevel/methods/chats/set-chat-title.js.map +1 -1
  526. package/esm/highlevel/methods/chats/toggle-fragment-username.js.map +1 -1
  527. package/esm/highlevel/methods/chats/unarchive-chats.js.map +1 -1
  528. package/esm/highlevel/methods/chats/unban-chat-member.js.map +1 -1
  529. package/esm/highlevel/methods/contacts/delete-contacts.js.map +1 -1
  530. package/esm/highlevel/methods/dialogs/create-folder.js.map +1 -1
  531. package/esm/highlevel/methods/dialogs/edit-folder.js.map +1 -1
  532. package/esm/highlevel/methods/dialogs/find-folder.js.map +1 -1
  533. package/esm/highlevel/methods/dialogs/get-folders.js.map +1 -1
  534. package/esm/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
  535. package/esm/highlevel/methods/files/download-buffer.js.map +1 -1
  536. package/esm/highlevel/methods/files/download-iterable.js +1 -1
  537. package/esm/highlevel/methods/files/download-iterable.js.map +1 -1
  538. package/esm/highlevel/methods/files/download-node-stream.js.map +1 -1
  539. package/esm/highlevel/methods/files/download-stream.js.map +1 -1
  540. package/esm/highlevel/methods/files/normalize-file-to-document.js.map +1 -1
  541. package/esm/highlevel/methods/files/normalize-input-file.js.map +1 -1
  542. package/esm/highlevel/methods/files/normalize-input-media.js +1 -2
  543. package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
  544. package/esm/highlevel/methods/files/upload-file.js +8 -7
  545. package/esm/highlevel/methods/files/upload-file.js.map +1 -1
  546. package/esm/highlevel/methods/files/upload-media.js.map +1 -1
  547. package/esm/highlevel/methods/forums/iter-forum-topics.js.map +1 -1
  548. package/esm/highlevel/methods/invite-links/get-primary-invite-link.js.map +1 -1
  549. package/esm/highlevel/methods/invite-links/iter-invite-link-members.js.map +1 -1
  550. package/esm/highlevel/methods/invite-links/iter-invite-links.js.map +1 -1
  551. package/esm/highlevel/methods/messages/close-poll.js.map +1 -1
  552. package/esm/highlevel/methods/messages/delete-messages.js.map +1 -1
  553. package/esm/highlevel/methods/messages/edit-inline-message.js.map +1 -1
  554. package/esm/highlevel/methods/messages/edit-message.js.map +1 -1
  555. package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
  556. package/esm/highlevel/methods/messages/forward-messages.js.map +1 -1
  557. package/esm/highlevel/methods/messages/get-callback-query-message.js.map +1 -1
  558. package/esm/highlevel/methods/messages/get-discussion-message.js.map +1 -1
  559. package/esm/highlevel/methods/messages/get-history.js +5 -1
  560. package/esm/highlevel/methods/messages/get-history.js.map +1 -1
  561. package/esm/highlevel/methods/messages/get-message-by-link.js.map +1 -1
  562. package/esm/highlevel/methods/messages/get-message-group.js.map +1 -1
  563. package/esm/highlevel/methods/messages/get-message-reactions.js.map +1 -1
  564. package/esm/highlevel/methods/messages/get-messages.js.map +1 -1
  565. package/esm/highlevel/methods/messages/get-reply-to.js.map +1 -1
  566. package/esm/highlevel/methods/messages/iter-history.js.map +1 -1
  567. package/esm/highlevel/methods/messages/iter-reaction-users.js.map +1 -1
  568. package/esm/highlevel/methods/messages/iter-search-global.js.map +1 -1
  569. package/esm/highlevel/methods/messages/iter-search-messages.js.map +1 -1
  570. package/esm/highlevel/methods/messages/read-history.js.map +1 -1
  571. package/esm/highlevel/methods/messages/send-answer.js.map +1 -1
  572. package/esm/highlevel/methods/messages/send-comment.js.map +1 -1
  573. package/esm/highlevel/methods/messages/send-common.js.map +1 -1
  574. package/esm/highlevel/methods/messages/send-copy-group.js.map +1 -1
  575. package/esm/highlevel/methods/messages/send-copy.js.map +1 -1
  576. package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
  577. package/esm/highlevel/methods/messages/send-media.js.map +1 -1
  578. package/esm/highlevel/methods/messages/send-quote.js.map +1 -1
  579. package/esm/highlevel/methods/messages/send-text.js.map +1 -1
  580. package/esm/highlevel/methods/messages/send-typing.js.map +1 -1
  581. package/esm/highlevel/methods/messages/send-vote.js.map +1 -1
  582. package/esm/highlevel/methods/messages/translate-text.js.map +1 -1
  583. package/esm/highlevel/methods/messages/unpin-all-messages.js.map +1 -1
  584. package/esm/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
  585. package/esm/highlevel/methods/misc/normalize-text.js.map +1 -1
  586. package/esm/highlevel/methods/misc/with-params.js.map +1 -1
  587. package/esm/highlevel/methods/password/change-cloud-password.js.map +1 -1
  588. package/esm/highlevel/methods/password/enable-cloud-password.js.map +1 -1
  589. package/esm/highlevel/methods/password/remove-cloud-password.js.map +1 -1
  590. package/esm/highlevel/methods/premium/can-apply-boost.js.map +1 -1
  591. package/esm/highlevel/methods/premium/iter-boosters.js.map +1 -1
  592. package/esm/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
  593. package/esm/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
  594. package/esm/highlevel/methods/stickers/get-custom-emojis.js.map +1 -1
  595. package/esm/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
  596. package/esm/highlevel/methods/stories/can-send-story.js.map +1 -1
  597. package/esm/highlevel/methods/stories/edit-story.js.map +1 -1
  598. package/esm/highlevel/methods/stories/find-in-update.js.map +1 -1
  599. package/esm/highlevel/methods/stories/hide-my-stories-views.js.map +1 -1
  600. package/esm/highlevel/methods/stories/iter-all-stories.js.map +1 -1
  601. package/esm/highlevel/methods/stories/iter-profile-stories.js.map +1 -1
  602. package/esm/highlevel/methods/stories/iter-story-viewers.js.map +1 -1
  603. package/esm/highlevel/methods/stories/send-story.js.map +1 -1
  604. package/esm/highlevel/methods/users/delete-profile-photos.js.map +1 -1
  605. package/esm/highlevel/methods/users/get-users.js.map +1 -1
  606. package/esm/highlevel/methods/users/iter-profile-photos.js.map +1 -1
  607. package/esm/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  608. package/esm/highlevel/methods/users/resolve-peer.js.map +1 -1
  609. package/esm/highlevel/methods/users/set-my-emoji-status.js.map +1 -1
  610. package/esm/highlevel/methods/users/set-my-profile-photo.js.map +1 -1
  611. package/esm/highlevel/storage/service/current-user.js +2 -0
  612. package/esm/highlevel/storage/service/current-user.js.map +1 -1
  613. package/esm/highlevel/storage/service/peers.js +5 -1
  614. package/esm/highlevel/storage/service/peers.js.map +1 -1
  615. package/esm/highlevel/storage/service/ref-messages.js +3 -0
  616. package/esm/highlevel/storage/service/ref-messages.js.map +1 -1
  617. package/esm/highlevel/storage/service/updates.js +1 -0
  618. package/esm/highlevel/storage/service/updates.js.map +1 -1
  619. package/esm/highlevel/storage/storage.d.ts +1 -1
  620. package/esm/highlevel/storage/storage.js +17 -4
  621. package/esm/highlevel/storage/storage.js.map +1 -1
  622. package/esm/highlevel/types/auth/sent-code.js +1 -0
  623. package/esm/highlevel/types/auth/sent-code.js.map +1 -1
  624. package/esm/highlevel/types/bots/game-high-score.js +2 -0
  625. package/esm/highlevel/types/bots/game-high-score.js.map +1 -1
  626. package/esm/highlevel/types/bots/inline-message/factories.js.map +1 -1
  627. package/esm/highlevel/types/bots/inline-result/factories.js.map +1 -1
  628. package/esm/highlevel/types/bots/keyboards/builder.js +2 -1
  629. package/esm/highlevel/types/bots/keyboards/builder.js.map +1 -1
  630. package/esm/highlevel/types/bots/keyboards/factories.js.map +1 -1
  631. package/esm/highlevel/types/calls/discard-reason.js.map +1 -1
  632. package/esm/highlevel/types/conversation.js +13 -7
  633. package/esm/highlevel/types/conversation.js.map +1 -1
  634. package/esm/highlevel/types/errors.js +3 -0
  635. package/esm/highlevel/types/errors.js.map +1 -1
  636. package/esm/highlevel/types/files/file-location.js +3 -0
  637. package/esm/highlevel/types/files/file-location.js.map +1 -1
  638. package/esm/highlevel/types/files/uploaded-file.js +1 -1
  639. package/esm/highlevel/types/files/uploaded-file.js.map +1 -1
  640. package/esm/highlevel/types/files/utils.d.ts +1 -1
  641. package/esm/highlevel/types/files/utils.js.map +1 -1
  642. package/esm/highlevel/types/files/web-document.js +1 -0
  643. package/esm/highlevel/types/files/web-document.js.map +1 -1
  644. package/esm/highlevel/types/media/audio.js +3 -2
  645. package/esm/highlevel/types/media/audio.js.map +1 -1
  646. package/esm/highlevel/types/media/contact.js +2 -1
  647. package/esm/highlevel/types/media/contact.js.map +1 -1
  648. package/esm/highlevel/types/media/dice.js +125 -124
  649. package/esm/highlevel/types/media/dice.js.map +1 -1
  650. package/esm/highlevel/types/media/document-utils.js.map +1 -1
  651. package/esm/highlevel/types/media/document.js +2 -4
  652. package/esm/highlevel/types/media/document.js.map +1 -1
  653. package/esm/highlevel/types/media/game.js +2 -1
  654. package/esm/highlevel/types/media/game.js.map +1 -1
  655. package/esm/highlevel/types/media/invoice.js +4 -1
  656. package/esm/highlevel/types/media/invoice.js.map +1 -1
  657. package/esm/highlevel/types/media/location.js +4 -5
  658. package/esm/highlevel/types/media/location.js.map +1 -1
  659. package/esm/highlevel/types/media/photo.js +8 -1
  660. package/esm/highlevel/types/media/photo.js.map +1 -1
  661. package/esm/highlevel/types/media/poll.js +4 -1
  662. package/esm/highlevel/types/media/poll.js.map +1 -1
  663. package/esm/highlevel/types/media/sticker.js +3 -1
  664. package/esm/highlevel/types/media/sticker.js.map +1 -1
  665. package/esm/highlevel/types/media/story.js +3 -1
  666. package/esm/highlevel/types/media/story.js.map +1 -1
  667. package/esm/highlevel/types/media/thumbnail.js +35 -22
  668. package/esm/highlevel/types/media/thumbnail.js.map +1 -1
  669. package/esm/highlevel/types/media/venue.js +2 -1
  670. package/esm/highlevel/types/media/venue.js.map +1 -1
  671. package/esm/highlevel/types/media/video.js +3 -1
  672. package/esm/highlevel/types/media/video.js.map +1 -1
  673. package/esm/highlevel/types/media/voice.js +2 -1
  674. package/esm/highlevel/types/media/voice.js.map +1 -1
  675. package/esm/highlevel/types/media/web-page.js +2 -1
  676. package/esm/highlevel/types/media/web-page.js.map +1 -1
  677. package/esm/highlevel/types/messages/dialog.js +3 -0
  678. package/esm/highlevel/types/messages/dialog.js.map +1 -1
  679. package/esm/highlevel/types/messages/draft-message.js +1 -0
  680. package/esm/highlevel/types/messages/draft-message.js.map +1 -1
  681. package/esm/highlevel/types/messages/message-action.js.map +1 -1
  682. package/esm/highlevel/types/messages/message-entity.js +2 -0
  683. package/esm/highlevel/types/messages/message-entity.js.map +1 -1
  684. package/esm/highlevel/types/messages/message-forward.js +2 -0
  685. package/esm/highlevel/types/messages/message-forward.js.map +1 -1
  686. package/esm/highlevel/types/messages/message-media.js.map +1 -1
  687. package/esm/highlevel/types/messages/message-reactions.js +4 -0
  688. package/esm/highlevel/types/messages/message-reactions.js.map +1 -1
  689. package/esm/highlevel/types/messages/message-replies.js +2 -0
  690. package/esm/highlevel/types/messages/message-replies.js.map +1 -1
  691. package/esm/highlevel/types/messages/message.js +6 -0
  692. package/esm/highlevel/types/messages/message.js.map +1 -1
  693. package/esm/highlevel/types/messages/replied-message.js +2 -0
  694. package/esm/highlevel/types/messages/replied-message.js.map +1 -1
  695. package/esm/highlevel/types/misc/sticker-set.js +7 -1
  696. package/esm/highlevel/types/misc/sticker-set.js.map +1 -1
  697. package/esm/highlevel/types/misc/takeout-session.js +5 -0
  698. package/esm/highlevel/types/misc/takeout-session.js.map +1 -1
  699. package/esm/highlevel/types/peers/chat-colors.js +2 -0
  700. package/esm/highlevel/types/peers/chat-colors.js.map +1 -1
  701. package/esm/highlevel/types/peers/chat-event/actions.js.map +1 -1
  702. package/esm/highlevel/types/peers/chat-event/filters.js.map +1 -1
  703. package/esm/highlevel/types/peers/chat-event/index.js +2 -0
  704. package/esm/highlevel/types/peers/chat-event/index.js.map +1 -1
  705. package/esm/highlevel/types/peers/chat-invite-link-member.js +2 -0
  706. package/esm/highlevel/types/peers/chat-invite-link-member.js.map +1 -1
  707. package/esm/highlevel/types/peers/chat-invite-link.js +2 -0
  708. package/esm/highlevel/types/peers/chat-invite-link.js.map +1 -1
  709. package/esm/highlevel/types/peers/chat-location.js +1 -0
  710. package/esm/highlevel/types/peers/chat-location.js.map +1 -1
  711. package/esm/highlevel/types/peers/chat-member.js +2 -0
  712. package/esm/highlevel/types/peers/chat-member.js.map +1 -1
  713. package/esm/highlevel/types/peers/chat-permissions.js +1 -0
  714. package/esm/highlevel/types/peers/chat-permissions.js.map +1 -1
  715. package/esm/highlevel/types/peers/chat-photo.js +5 -0
  716. package/esm/highlevel/types/peers/chat-photo.js.map +1 -1
  717. package/esm/highlevel/types/peers/chat-preview.js +2 -0
  718. package/esm/highlevel/types/peers/chat-preview.js.map +1 -1
  719. package/esm/highlevel/types/peers/chat.js +12 -1
  720. package/esm/highlevel/types/peers/chat.js.map +1 -1
  721. package/esm/highlevel/types/peers/forum-topic.js +9 -6
  722. package/esm/highlevel/types/peers/forum-topic.js.map +1 -1
  723. package/esm/highlevel/types/peers/peer.js.map +1 -1
  724. package/esm/highlevel/types/peers/peers-index.js +3 -1
  725. package/esm/highlevel/types/peers/peers-index.js.map +1 -1
  726. package/esm/highlevel/types/peers/user.js +5 -1
  727. package/esm/highlevel/types/peers/user.js.map +1 -1
  728. package/esm/highlevel/types/premium/boost-slot.js +2 -0
  729. package/esm/highlevel/types/premium/boost-slot.js.map +1 -1
  730. package/esm/highlevel/types/premium/boost-stats.js +1 -0
  731. package/esm/highlevel/types/premium/boost-stats.js.map +1 -1
  732. package/esm/highlevel/types/premium/boost.js +2 -0
  733. package/esm/highlevel/types/premium/boost.js.map +1 -1
  734. package/esm/highlevel/types/reactions/emoji-status.js +1 -0
  735. package/esm/highlevel/types/reactions/emoji-status.js.map +1 -1
  736. package/esm/highlevel/types/reactions/peer-reaction.js +2 -0
  737. package/esm/highlevel/types/reactions/peer-reaction.js.map +1 -1
  738. package/esm/highlevel/types/reactions/reaction-count.js +1 -0
  739. package/esm/highlevel/types/reactions/reaction-count.js.map +1 -1
  740. package/esm/highlevel/types/reactions/types.js.map +1 -1
  741. package/esm/highlevel/types/stories/all-stories.d.ts +2 -2
  742. package/esm/highlevel/types/stories/all-stories.js +3 -1
  743. package/esm/highlevel/types/stories/all-stories.js.map +1 -1
  744. package/esm/highlevel/types/stories/interactive/base.js +1 -0
  745. package/esm/highlevel/types/stories/interactive/base.js.map +1 -1
  746. package/esm/highlevel/types/stories/interactive/channel-post.js +3 -1
  747. package/esm/highlevel/types/stories/interactive/channel-post.js.map +1 -1
  748. package/esm/highlevel/types/stories/interactive/index.js.map +1 -1
  749. package/esm/highlevel/types/stories/interactive/input.js +1 -0
  750. package/esm/highlevel/types/stories/interactive/input.js.map +1 -1
  751. package/esm/highlevel/types/stories/interactive/location.js +2 -1
  752. package/esm/highlevel/types/stories/interactive/location.js.map +1 -1
  753. package/esm/highlevel/types/stories/interactive/reaction.js +2 -1
  754. package/esm/highlevel/types/stories/interactive/reaction.js.map +1 -1
  755. package/esm/highlevel/types/stories/interactive/venue.js +2 -1
  756. package/esm/highlevel/types/stories/interactive/venue.js.map +1 -1
  757. package/esm/highlevel/types/stories/peer-stories.js +2 -0
  758. package/esm/highlevel/types/stories/peer-stories.js.map +1 -1
  759. package/esm/highlevel/types/stories/stealth-mode.js +1 -0
  760. package/esm/highlevel/types/stories/stealth-mode.js.map +1 -1
  761. package/esm/highlevel/types/stories/story-interactions.js +2 -0
  762. package/esm/highlevel/types/stories/story-interactions.js.map +1 -1
  763. package/esm/highlevel/types/stories/story-viewer.d.ts +1 -1
  764. package/esm/highlevel/types/stories/story-viewer.js +6 -0
  765. package/esm/highlevel/types/stories/story-viewer.js.map +1 -1
  766. package/esm/highlevel/types/stories/story.js +2 -0
  767. package/esm/highlevel/types/stories/story.js.map +1 -1
  768. package/esm/highlevel/types/updates/bot-chat-join-request.js +2 -0
  769. package/esm/highlevel/types/updates/bot-chat-join-request.js.map +1 -1
  770. package/esm/highlevel/types/updates/bot-reaction.js +4 -0
  771. package/esm/highlevel/types/updates/bot-reaction.js.map +1 -1
  772. package/esm/highlevel/types/updates/bot-stopped.js +2 -0
  773. package/esm/highlevel/types/updates/bot-stopped.js.map +1 -1
  774. package/esm/highlevel/types/updates/callback-query.js +4 -0
  775. package/esm/highlevel/types/updates/callback-query.js.map +1 -1
  776. package/esm/highlevel/types/updates/chat-join-request.js +2 -0
  777. package/esm/highlevel/types/updates/chat-join-request.js.map +1 -1
  778. package/esm/highlevel/types/updates/chat-member-update.js +2 -0
  779. package/esm/highlevel/types/updates/chat-member-update.js.map +1 -1
  780. package/esm/highlevel/types/updates/chosen-inline-result.js +2 -0
  781. package/esm/highlevel/types/updates/chosen-inline-result.js.map +1 -1
  782. package/esm/highlevel/types/updates/delete-message-update.js +1 -0
  783. package/esm/highlevel/types/updates/delete-message-update.js.map +1 -1
  784. package/esm/highlevel/types/updates/delete-story-update.js +2 -0
  785. package/esm/highlevel/types/updates/delete-story-update.js.map +1 -1
  786. package/esm/highlevel/types/updates/history-read-update.js +1 -0
  787. package/esm/highlevel/types/updates/history-read-update.js.map +1 -1
  788. package/esm/highlevel/types/updates/inline-query.js +2 -0
  789. package/esm/highlevel/types/updates/inline-query.js.map +1 -1
  790. package/esm/highlevel/types/updates/parse-update.js.map +1 -1
  791. package/esm/highlevel/types/updates/poll-update.js +2 -0
  792. package/esm/highlevel/types/updates/poll-update.js.map +1 -1
  793. package/esm/highlevel/types/updates/poll-vote.js +2 -0
  794. package/esm/highlevel/types/updates/poll-vote.js.map +1 -1
  795. package/esm/highlevel/types/updates/pre-checkout-query.js +2 -0
  796. package/esm/highlevel/types/updates/pre-checkout-query.js.map +1 -1
  797. package/esm/highlevel/types/updates/story-update.js +2 -0
  798. package/esm/highlevel/types/updates/story-update.js.map +1 -1
  799. package/esm/highlevel/types/updates/user-status-update.js +1 -0
  800. package/esm/highlevel/types/updates/user-status-update.js.map +1 -1
  801. package/esm/highlevel/types/updates/user-typing-update.js +1 -0
  802. package/esm/highlevel/types/updates/user-typing-update.js.map +1 -1
  803. package/esm/highlevel/updates/manager.js +50 -28
  804. package/esm/highlevel/updates/manager.js.map +1 -1
  805. package/esm/highlevel/updates/parsed.js.map +1 -1
  806. package/esm/highlevel/updates/utils.js.map +1 -1
  807. package/esm/highlevel/utils/convert-file-id.js.map +1 -1
  808. package/esm/highlevel/utils/entities.js.map +1 -1
  809. package/esm/highlevel/utils/file-type.d.ts +1 -0
  810. package/esm/highlevel/utils/file-type.js +34 -0
  811. package/esm/highlevel/utils/file-type.js.map +1 -1
  812. package/esm/highlevel/utils/file-utils.js +1 -1
  813. package/esm/highlevel/utils/file-utils.js.map +1 -1
  814. package/esm/highlevel/utils/inline-utils.js.map +1 -1
  815. package/esm/highlevel/utils/inspectable.js.map +1 -1
  816. package/esm/highlevel/utils/memoize.js.map +1 -1
  817. package/esm/highlevel/utils/peer-utils.js.map +1 -1
  818. package/esm/highlevel/utils/query-batcher.js.map +1 -1
  819. package/esm/highlevel/utils/rps-meter.js +3 -0
  820. package/esm/highlevel/utils/rps-meter.js.map +1 -1
  821. package/esm/highlevel/utils/stream-utils.js.map +1 -1
  822. package/esm/highlevel/utils/string-session.d.ts +1 -2
  823. package/esm/highlevel/utils/string-session.js +27 -7
  824. package/esm/highlevel/utils/string-session.js.map +1 -1
  825. package/esm/highlevel/utils/voice-utils.js.map +1 -1
  826. package/esm/highlevel/worker/app-config.d.ts +2 -3
  827. package/esm/highlevel/worker/app-config.js +6 -3
  828. package/esm/highlevel/worker/app-config.js.map +1 -1
  829. package/esm/highlevel/worker/errors.js.map +1 -1
  830. package/esm/highlevel/worker/invoker.js +3 -2
  831. package/esm/highlevel/worker/invoker.js.map +1 -1
  832. package/esm/highlevel/worker/port.d.ts +16 -17
  833. package/esm/highlevel/worker/port.js +74 -49
  834. package/esm/highlevel/worker/port.js.map +1 -1
  835. package/esm/highlevel/worker/protocol.d.ts +1 -1
  836. package/esm/highlevel/worker/protocol.js.map +1 -1
  837. package/esm/highlevel/worker/storage.d.ts +9 -13
  838. package/esm/highlevel/worker/storage.js +34 -19
  839. package/esm/highlevel/worker/storage.js.map +1 -1
  840. package/esm/highlevel/worker/worker.js +3 -0
  841. package/esm/highlevel/worker/worker.js.map +1 -1
  842. package/esm/network/auth-key.js +8 -1
  843. package/esm/network/auth-key.js.map +1 -1
  844. package/esm/network/authorization.js.map +1 -1
  845. package/esm/network/client.js +39 -14
  846. package/esm/network/client.js.map +1 -1
  847. package/esm/network/config-manager.js.map +1 -1
  848. package/esm/network/mtproto-session.js +40 -30
  849. package/esm/network/mtproto-session.js.map +1 -1
  850. package/esm/network/multi-session-connection.d.ts +1 -1
  851. package/esm/network/multi-session-connection.js +13 -7
  852. package/esm/network/multi-session-connection.js.map +1 -1
  853. package/esm/network/network-manager.d.ts +2 -3
  854. package/esm/network/network-manager.js +49 -28
  855. package/esm/network/network-manager.js.map +1 -1
  856. package/esm/network/persistent-connection.d.ts +2 -2
  857. package/esm/network/persistent-connection.js +33 -22
  858. package/esm/network/persistent-connection.js.map +1 -1
  859. package/esm/network/server-salt.js +4 -5
  860. package/esm/network/server-salt.js.map +1 -1
  861. package/esm/network/session-connection.d.ts +1 -1
  862. package/esm/network/session-connection.js +22 -12
  863. package/esm/network/session-connection.js.map +1 -1
  864. package/esm/network/transports/abstract.d.ts +1 -1
  865. package/esm/network/transports/abstract.js +1 -0
  866. package/esm/network/transports/abstract.js.map +1 -1
  867. package/esm/network/transports/intermediate.js +1 -0
  868. package/esm/network/transports/intermediate.js.map +1 -1
  869. package/esm/network/transports/obfuscated.js +3 -0
  870. package/esm/network/transports/obfuscated.js.map +1 -1
  871. package/esm/network/transports/streamed.js +1 -4
  872. package/esm/network/transports/streamed.js.map +1 -1
  873. package/esm/network/transports/wrapped.js +2 -0
  874. package/esm/network/transports/wrapped.js.map +1 -1
  875. package/esm/platform.js.map +1 -1
  876. package/esm/storage/driver.js +3 -4
  877. package/esm/storage/driver.js.map +1 -1
  878. package/esm/storage/memory/driver.js +1 -3
  879. package/esm/storage/memory/driver.js.map +1 -1
  880. package/esm/storage/memory/index.js +5 -7
  881. package/esm/storage/memory/index.js.map +1 -1
  882. package/esm/storage/memory/repository/auth-keys.d.ts +1 -1
  883. package/esm/storage/memory/repository/auth-keys.js +2 -0
  884. package/esm/storage/memory/repository/auth-keys.js.map +1 -1
  885. package/esm/storage/memory/repository/kv.d.ts +1 -1
  886. package/esm/storage/memory/repository/kv.js +2 -0
  887. package/esm/storage/memory/repository/kv.js.map +1 -1
  888. package/esm/storage/memory/repository/peers.d.ts +1 -1
  889. package/esm/storage/memory/repository/peers.js +2 -0
  890. package/esm/storage/memory/repository/peers.js.map +1 -1
  891. package/esm/storage/memory/repository/ref-messages.d.ts +1 -1
  892. package/esm/storage/memory/repository/ref-messages.js +2 -0
  893. package/esm/storage/memory/repository/ref-messages.js.map +1 -1
  894. package/esm/storage/service/auth-keys.js +2 -0
  895. package/esm/storage/service/auth-keys.js.map +1 -1
  896. package/esm/storage/service/base.js +4 -0
  897. package/esm/storage/service/base.js.map +1 -1
  898. package/esm/storage/service/default-dcs.js +2 -0
  899. package/esm/storage/service/default-dcs.js.map +1 -1
  900. package/esm/storage/service/future-salts.js +2 -1
  901. package/esm/storage/service/future-salts.js.map +1 -1
  902. package/esm/storage/sqlite/driver.js +10 -10
  903. package/esm/storage/sqlite/driver.js.map +1 -1
  904. package/esm/storage/sqlite/index.d.ts +1 -1
  905. package/esm/storage/sqlite/index.js +5 -0
  906. package/esm/storage/sqlite/index.js.map +1 -1
  907. package/esm/storage/sqlite/repository/auth-keys.js +9 -0
  908. package/esm/storage/sqlite/repository/auth-keys.js.map +1 -1
  909. package/esm/storage/sqlite/repository/kv.js +5 -0
  910. package/esm/storage/sqlite/repository/kv.js.map +1 -1
  911. package/esm/storage/sqlite/repository/peers.js +6 -0
  912. package/esm/storage/sqlite/repository/peers.js.map +1 -1
  913. package/esm/storage/sqlite/repository/ref-messages.d.ts +1 -1
  914. package/esm/storage/sqlite/repository/ref-messages.js +6 -0
  915. package/esm/storage/sqlite/repository/ref-messages.js.map +1 -1
  916. package/esm/storage/storage.d.ts +1 -3
  917. package/esm/storage/storage.js +21 -13
  918. package/esm/storage/storage.js.map +1 -1
  919. package/esm/types/errors.js +13 -0
  920. package/esm/types/errors.js.map +1 -1
  921. package/esm/utils/async-lock.js +1 -3
  922. package/esm/utils/async-lock.js.map +1 -1
  923. package/esm/utils/bigint-utils.js.map +1 -1
  924. package/esm/utils/binary/asn1-parser.js.map +1 -1
  925. package/esm/utils/buffer-utils.js.map +1 -1
  926. package/esm/utils/condition-variable.js +2 -0
  927. package/esm/utils/condition-variable.js.map +1 -1
  928. package/esm/utils/crypto/factorization.js.map +1 -1
  929. package/esm/utils/crypto/keys.js.map +1 -1
  930. package/esm/utils/crypto/miller-rabin.js.map +1 -1
  931. package/esm/utils/crypto/password.js.map +1 -1
  932. package/esm/utils/crypto/utils.js.map +1 -1
  933. package/esm/utils/dcs.js +1 -1
  934. package/esm/utils/dcs.js.map +1 -1
  935. package/esm/utils/deque.js +8 -2
  936. package/esm/utils/deque.js.map +1 -1
  937. package/esm/utils/early-timer.js +4 -1
  938. package/esm/utils/early-timer.js.map +1 -1
  939. package/esm/utils/error-reporting.js.map +1 -1
  940. package/esm/utils/function-utils.js.map +1 -1
  941. package/esm/utils/linked-list.js +4 -1
  942. package/esm/utils/linked-list.js.map +1 -1
  943. package/esm/utils/links/bots.js.map +1 -1
  944. package/esm/utils/links/chat.js.map +1 -1
  945. package/esm/utils/links/common.js.map +1 -1
  946. package/esm/utils/links/misc.js.map +1 -1
  947. package/esm/utils/logger.d.ts +2 -2
  948. package/esm/utils/logger.js +21 -14
  949. package/esm/utils/logger.js.map +1 -1
  950. package/esm/utils/long-utils.js +2 -6
  951. package/esm/utils/long-utils.js.map +1 -1
  952. package/esm/utils/lru-map.js +5 -1
  953. package/esm/utils/lru-map.js.map +1 -1
  954. package/esm/utils/lru-set.js +4 -0
  955. package/esm/utils/lru-set.js.map +1 -1
  956. package/esm/utils/peer-utils.js.map +1 -1
  957. package/esm/utils/reloadable.js +10 -7
  958. package/esm/utils/reloadable.js.map +1 -1
  959. package/esm/utils/sorted-array.js +2 -0
  960. package/esm/utils/sorted-array.js.map +1 -1
  961. package/esm/utils/tl-json.js.map +1 -1
  962. package/esm/utils/type-assertions.js.map +1 -1
  963. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/driver.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPlatform } from '../../platform.js'\nimport { BaseStorageDriver } from '../driver.js'\nimport { ISqliteDatabase, ISqliteStatement } from './types.js'\n\nconst MIGRATIONS_TABLE_NAME = 'mtcute_migrations'\nconst MIGRATIONS_TABLE_SQL = `\ncreate table if not exists ${MIGRATIONS_TABLE_NAME} (\n repo text not null primary key,\n version integer not null\n);\n`.trim()\n\ntype MigrationFunction = (db: ISqliteDatabase) => void\n\nexport abstract class BaseSqliteStorageDriver extends BaseStorageDriver {\n db!: ISqliteDatabase\n\n private _pending: [ISqliteStatement, unknown[]][] = []\n private _runMany!: (stmts: [ISqliteStatement, unknown[]][]) => void\n private _cleanup?: () => void\n\n private _migrations: Map<string, Map<number, MigrationFunction>> = new Map()\n private _maxVersion: Map<string, number> = new Map()\n\n // todo: remove in 1.0.0\n private _legacyMigrations: Map<string, MigrationFunction> = new Map()\n\n registerLegacyMigration(repo: string, migration: MigrationFunction): void {\n if (this.loaded) {\n throw new Error('Cannot register migrations after loading')\n }\n\n this._legacyMigrations.set(repo, migration)\n }\n\n registerMigration(repo: string, version: number, migration: MigrationFunction): void {\n if (this.loaded) {\n throw new Error('Cannot register migrations after loading')\n }\n\n let map = this._migrations.get(repo)\n\n if (!map) {\n map = new Map()\n this._migrations.set(repo, map)\n }\n\n if (map.has(version)) {\n throw new Error(`Migration for ${repo} version ${version} is already registered`)\n }\n\n map.set(version, migration)\n\n const prevMax = this._maxVersion.get(repo) ?? 0\n\n if (version > prevMax) {\n this._maxVersion.set(repo, version)\n }\n }\n\n private _onLoad = new Set<(db: ISqliteDatabase) => void>()\n\n onLoad(cb: (db: ISqliteDatabase) => void): void {\n if (this.loaded) {\n cb(this.db)\n } else {\n this._onLoad.add(cb)\n }\n }\n\n _writeLater(stmt: ISqliteStatement, params: unknown[]): void {\n this._pending.push([stmt, params])\n }\n\n private _runLegacyMigrations = false\n\n _initialize(): void {\n const hasLegacyTables = this.db\n .prepare(\"select name from sqlite_master where type = 'table' and name = 'kv'\")\n .get()\n\n if (hasLegacyTables) {\n this._log.info('legacy tables detected, will run migrations')\n this._runLegacyMigrations = true\n }\n\n this.db.exec(MIGRATIONS_TABLE_SQL)\n\n const writeVersion = this.db.prepare(\n `insert or replace into ${MIGRATIONS_TABLE_NAME} (repo, version) values (?, ?)`,\n )\n const getVersion = this.db.prepare(`select version from ${MIGRATIONS_TABLE_NAME} where repo = ?`)\n\n const didUpgrade = new Set<string>()\n\n for (const repo of this._migrations.keys()) {\n const res = getVersion.get(repo) as { version: number } | undefined\n\n const startVersion = res?.version ?? 0\n let fromVersion = startVersion\n\n const migrations = this._migrations.get(repo)!\n const targetVer = this._maxVersion.get(repo)!\n\n while (fromVersion < targetVer) {\n const nextVersion = fromVersion + 1\n const migration = migrations.get(nextVersion)\n\n if (!migration) {\n throw new Error(`No migration for ${repo} to version ${nextVersion}`)\n }\n\n migration(this.db)\n\n fromVersion = nextVersion\n didUpgrade.add(repo)\n }\n\n if (fromVersion !== startVersion) {\n writeVersion.run(repo, targetVer)\n }\n }\n }\n\n abstract _createDatabase(): ISqliteDatabase\n\n _load(): void {\n this.db = this._createDatabase()\n\n this._runMany = this.db.transaction((stmts: [ISqliteStatement, unknown[]][]) => {\n stmts.forEach((stmt) => {\n stmt[0].run(stmt[1])\n })\n })\n\n this.db.transaction(() => this._initialize())()\n\n this._cleanup = getPlatform().beforeExit(() => {\n this._save()\n this._destroy()\n })\n for (const cb of this._onLoad) cb(this.db)\n\n if (this._runLegacyMigrations) {\n this.db.transaction(() => {\n for (const migration of this._legacyMigrations.values()) {\n migration(this.db)\n }\n\n // in case _writeLater was used\n this._runMany(this._pending)\n })()\n }\n }\n\n _save(): void {\n if (!this._pending.length) return\n\n this._runMany(this._pending)\n this._pending = []\n }\n\n _destroy(): void {\n this.db.close()\n this._cleanup?.()\n this._cleanup = undefined\n }\n}\n"]}
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/driver.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPlatform } from '../../platform.js'\nimport { BaseStorageDriver } from '../driver.js'\nimport { ISqliteDatabase, ISqliteStatement } from './types.js'\n\nconst MIGRATIONS_TABLE_NAME = 'mtcute_migrations'\nconst MIGRATIONS_TABLE_SQL = `\ncreate table if not exists ${MIGRATIONS_TABLE_NAME} (\n repo text not null primary key,\n version integer not null\n);\n`.trim()\n\ntype MigrationFunction = (db: ISqliteDatabase) => void\n\nexport abstract class BaseSqliteStorageDriver extends BaseStorageDriver {\n db!: ISqliteDatabase\n\n private _pending: [ISqliteStatement, unknown[]][] = []\n private _runMany!: (stmts: [ISqliteStatement, unknown[]][]) => void\n private _cleanup?: () => void\n\n private _migrations: Map<string, Map<number, MigrationFunction>> = new Map()\n private _maxVersion: Map<string, number> = new Map()\n\n // todo: remove in 1.0.0\n private _legacyMigrations: Map<string, MigrationFunction> = new Map()\n\n registerLegacyMigration(repo: string, migration: MigrationFunction): void {\n if (this.loaded) {\n throw new Error('Cannot register migrations after loading')\n }\n\n this._legacyMigrations.set(repo, migration)\n }\n\n registerMigration(repo: string, version: number, migration: MigrationFunction): void {\n if (this.loaded) {\n throw new Error('Cannot register migrations after loading')\n }\n\n let map = this._migrations.get(repo)\n\n if (!map) {\n map = new Map()\n this._migrations.set(repo, map)\n }\n\n if (map.has(version)) {\n throw new Error(`Migration for ${repo} version ${version} is already registered`)\n }\n\n map.set(version, migration)\n\n const prevMax = this._maxVersion.get(repo) ?? 0\n\n if (version > prevMax) {\n this._maxVersion.set(repo, version)\n }\n }\n\n private _onLoad = new Set<(db: ISqliteDatabase) => void>()\n\n onLoad(cb: (db: ISqliteDatabase) => void): void {\n if (this.loaded) {\n cb(this.db)\n } else {\n this._onLoad.add(cb)\n }\n }\n\n _writeLater(stmt: ISqliteStatement, params: unknown[]): void {\n this._pending.push([stmt, params])\n }\n\n private _runLegacyMigrations = false\n\n _initialize(): void {\n const hasLegacyTables = this.db\n .prepare(\"select name from sqlite_master where type = 'table' and name = 'kv'\")\n .get()\n\n if (hasLegacyTables) {\n this._log.info('legacy tables detected, will run migrations')\n this._runLegacyMigrations = true\n }\n\n this.db.exec(MIGRATIONS_TABLE_SQL)\n\n const writeVersion = this.db.prepare(\n `insert or replace into ${MIGRATIONS_TABLE_NAME} (repo, version) values (?, ?)`,\n )\n const getVersion = this.db.prepare(`select version from ${MIGRATIONS_TABLE_NAME} where repo = ?`)\n\n const didUpgrade = new Set<string>()\n\n for (const repo of this._migrations.keys()) {\n const res = getVersion.get(repo) as { version: number } | undefined\n\n const startVersion = res?.version ?? 0\n let fromVersion = startVersion\n\n const migrations = this._migrations.get(repo)!\n const targetVer = this._maxVersion.get(repo)!\n\n while (fromVersion < targetVer) {\n const nextVersion = fromVersion + 1\n const migration = migrations.get(nextVersion)\n\n if (!migration) {\n throw new Error(`No migration for ${repo} to version ${nextVersion}`)\n }\n\n migration(this.db)\n\n fromVersion = nextVersion\n didUpgrade.add(repo)\n }\n\n if (fromVersion !== startVersion) {\n writeVersion.run(repo, targetVer)\n }\n }\n }\n\n abstract _createDatabase(): ISqliteDatabase\n\n _load(): void {\n this.db = this._createDatabase()\n\n this._runMany = this.db.transaction((stmts: [ISqliteStatement, unknown[]][]) => {\n stmts.forEach((stmt) => {\n stmt[0].run(stmt[1])\n })\n })\n\n this.db.transaction(() => this._initialize())()\n\n this._cleanup = getPlatform().beforeExit(() => {\n this._save()\n this._destroy()\n })\n for (const cb of this._onLoad) cb(this.db)\n\n if (this._runLegacyMigrations) {\n this.db.transaction(() => {\n for (const migration of this._legacyMigrations.values()) {\n migration(this.db)\n }\n\n // in case _writeLater was used\n this._runMany(this._pending)\n })()\n }\n }\n\n _save(): void {\n if (!this._pending.length) return\n\n this._runMany(this._pending)\n this._pending = []\n }\n\n _destroy(): void {\n this.db.close()\n this._cleanup?.()\n this._cleanup = undefined\n }\n}\n"]}
@@ -9,9 +9,9 @@ export { BaseSqliteStorageDriver };
9
9
  export * from './types.js';
10
10
  export declare class BaseSqliteStorage implements IMtStorageProvider, ITelegramStorageProvider {
11
11
  readonly driver: BaseSqliteStorageDriver;
12
- constructor(driver: BaseSqliteStorageDriver);
13
12
  readonly authKeys: SqliteAuthKeysRepository;
14
13
  readonly kv: SqliteKeyValueRepository;
15
14
  readonly refMessages: SqliteRefMessagesRepository;
16
15
  readonly peers: SqlitePeersRepository;
16
+ constructor(driver: BaseSqliteStorageDriver);
17
17
  }
@@ -6,6 +6,11 @@ import { SqliteRefMessagesRepository } from './repository/ref-messages.js';
6
6
  export { BaseSqliteStorageDriver };
7
7
  export * from './types.js';
8
8
  export class BaseSqliteStorage {
9
+ driver;
10
+ authKeys;
11
+ kv;
12
+ refMessages;
13
+ peers;
9
14
  constructor(driver) {
10
15
  this.driver = driver;
11
16
  this.authKeys = new SqliteAuthKeysRepository(this.driver);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AAE1E,OAAO,EAAE,uBAAuB,EAAE,CAAA;AAClC,cAAc,YAAY,CAAA;AAE1B,MAAM,OAAO,iBAAiB;IAC1B,YAAqB,MAA+B;QAA/B,WAAM,GAAN,MAAM,CAAyB;QAE3C,aAAQ,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpD,OAAE,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9C,gBAAW,GAAG,IAAI,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1D,UAAK,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IALA,CAAC;CAM3D","sourcesContent":["import { ITelegramStorageProvider } from '../../highlevel/storage/provider.js'\nimport { IMtStorageProvider } from '../provider.js'\nimport { BaseSqliteStorageDriver } from './driver.js'\nimport { SqliteAuthKeysRepository } from './repository/auth-keys.js'\nimport { SqliteKeyValueRepository } from './repository/kv.js'\nimport { SqlitePeersRepository } from './repository/peers.js'\nimport { SqliteRefMessagesRepository } from './repository/ref-messages.js'\n\nexport { BaseSqliteStorageDriver }\nexport * from './types.js'\n\nexport class BaseSqliteStorage implements IMtStorageProvider, ITelegramStorageProvider {\n constructor(readonly driver: BaseSqliteStorageDriver) {}\n\n readonly authKeys = new SqliteAuthKeysRepository(this.driver)\n readonly kv = new SqliteKeyValueRepository(this.driver)\n readonly refMessages = new SqliteRefMessagesRepository(this.driver)\n readonly peers = new SqlitePeersRepository(this.driver)\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/storage/sqlite/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AAE1E,OAAO,EAAE,uBAAuB,EAAE,CAAA;AAClC,cAAc,YAAY,CAAA;AAE1B,MAAM,OAAO,iBAAiB;IAML;IALZ,QAAQ,CAAA;IACR,EAAE,CAAA;IACF,WAAW,CAAA;IACX,KAAK,CAAA;IAEd,YAAqB,MAA+B;QAA/B,WAAM,GAAN,MAAM,CAAyB;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACzD,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACnD,IAAI,CAAC,WAAW,GAAG,IAAI,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC/D,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvD,CAAC;CACJ","sourcesContent":["import { ITelegramStorageProvider } from '../../highlevel/storage/provider.js'\nimport { IMtStorageProvider } from '../provider.js'\nimport { BaseSqliteStorageDriver } from './driver.js'\nimport { SqliteAuthKeysRepository } from './repository/auth-keys.js'\nimport { SqliteKeyValueRepository } from './repository/kv.js'\nimport { SqlitePeersRepository } from './repository/peers.js'\nimport { SqliteRefMessagesRepository } from './repository/ref-messages.js'\n\nexport { BaseSqliteStorageDriver }\nexport * from './types.js'\n\nexport class BaseSqliteStorage implements IMtStorageProvider, ITelegramStorageProvider {\n readonly authKeys\n readonly kv\n readonly refMessages\n readonly peers\n\n constructor(readonly driver: BaseSqliteStorageDriver) {\n this.authKeys = new SqliteAuthKeysRepository(this.driver)\n this.kv = new SqliteKeyValueRepository(this.driver)\n this.refMessages = new SqliteRefMessagesRepository(this.driver)\n this.peers = new SqlitePeersRepository(this.driver)\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  export class SqliteAuthKeysRepository {
2
+ _driver;
2
3
  constructor(_driver) {
3
4
  this._driver = _driver;
4
5
  _driver.registerMigration('auth_keys', 1, (db) => {
@@ -27,6 +28,8 @@ export class SqliteAuthKeysRepository {
27
28
  this._delAll = db.prepare('delete from auth_keys');
28
29
  });
29
30
  }
31
+ _set;
32
+ _del;
30
33
  set(dc, key) {
31
34
  if (!key) {
32
35
  this._del.run(dc);
@@ -34,12 +37,15 @@ export class SqliteAuthKeysRepository {
34
37
  }
35
38
  this._set.run(dc, key);
36
39
  }
40
+ _get;
37
41
  get(dc) {
38
42
  const row = this._get.get(dc);
39
43
  if (!row)
40
44
  return null;
41
45
  return row.key;
42
46
  }
47
+ _setTemp;
48
+ _delTemp;
43
49
  setTemp(dc, idx, key, expires) {
44
50
  if (!key) {
45
51
  this._delTemp.run(dc, idx);
@@ -47,16 +53,19 @@ export class SqliteAuthKeysRepository {
47
53
  }
48
54
  this._setTemp.run(dc, idx, key, expires);
49
55
  }
56
+ _getTemp;
50
57
  getTemp(dc, idx, now) {
51
58
  const row = this._getTemp.get(dc, idx, now);
52
59
  if (!row)
53
60
  return null;
54
61
  return row.key;
55
62
  }
63
+ _delTempAll;
56
64
  deleteByDc(dc) {
57
65
  this._del.run(dc);
58
66
  this._delTempAll.run(dc);
59
67
  }
68
+ _delAll;
60
69
  deleteAll() {
61
70
  this._delAll.run();
62
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth-keys.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/auth-keys.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,wBAAwB;IACjC,YAAqB,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QACjD,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAC7C,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;aAYP,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;YAClB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAA;YAChE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAA;YAErG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAA;YAClF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CACnC,mFAAmF,CACtF,CAAA;YAED,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAA;YAC5D,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAA;YACjF,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAA;YACxE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;IACN,CAAC;IAID,GAAG,CAAC,EAAU,EAAE,GAAsB;QAClC,IAAI,CAAC,GAAG,EAAE;YACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEjB,OAAM;SACT;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC;IAGD,GAAG,CAAC,EAAU;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAQ,GAAkB,CAAC,GAAG,CAAA;IAClC,CAAC;IAID,OAAO,CAAC,EAAU,EAAE,GAAW,EAAE,GAAsB,EAAE,OAAe;QACpE,IAAI,CAAC,GAAG,EAAE;YACN,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YAE1B,OAAM;SACT;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAGD,OAAO,CAAC,EAAU,EAAE,GAAW,EAAE,GAAW;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAQ,GAAsB,CAAC,GAAG,CAAA;IACtC,CAAC;IAGD,UAAU,CAAC,EAAU;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAGD,SAAS;QACL,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;CACJ","sourcesContent":["import { IAuthKeysRepository } from '../../repository/auth-keys.js'\nimport { BaseSqliteStorageDriver } from '../driver.js'\nimport { ISqliteStatement } from '../types.js'\n\ninterface AuthKeyDto {\n dc: number\n key: Uint8Array\n}\n\ninterface TempAuthKeyDto extends AuthKeyDto {\n expires?: number\n idx?: number\n}\n\nexport class SqliteAuthKeysRepository implements IAuthKeysRepository {\n constructor(readonly _driver: BaseSqliteStorageDriver) {\n _driver.registerMigration('auth_keys', 1, (db) => {\n db.exec(`\n create table if not exists auth_keys (\n dc integer primary key,\n key blob not null\n );\n create table if not exists temp_auth_keys (\n dc integer not null,\n idx integer not null,\n key blob not null,\n expires integer not null,\n primary key (dc, idx)\n );\n `)\n })\n _driver.onLoad((db) => {\n this._get = db.prepare('select key from auth_keys where dc = ?')\n this._getTemp = db.prepare('select key from temp_auth_keys where dc = ? and idx = ? and expires > ?')\n\n this._set = db.prepare('insert or replace into auth_keys (dc, key) values (?, ?)')\n this._setTemp = this._driver.db.prepare(\n 'insert or replace into temp_auth_keys (dc, idx, key, expires) values (?, ?, ?, ?)',\n )\n\n this._del = db.prepare('delete from auth_keys where dc = ?')\n this._delTemp = db.prepare('delete from temp_auth_keys where dc = ? and idx = ?')\n this._delTempAll = db.prepare('delete from temp_auth_keys where dc = ?')\n this._delAll = db.prepare('delete from auth_keys')\n })\n }\n\n private _set!: ISqliteStatement\n private _del!: ISqliteStatement\n set(dc: number, key: Uint8Array | null): void {\n if (!key) {\n this._del.run(dc)\n\n return\n }\n\n this._set.run(dc, key)\n }\n\n private _get!: ISqliteStatement\n get(dc: number): Uint8Array | null {\n const row = this._get.get(dc)\n if (!row) return null\n\n return (row as AuthKeyDto).key\n }\n\n private _setTemp!: ISqliteStatement\n private _delTemp!: ISqliteStatement\n setTemp(dc: number, idx: number, key: Uint8Array | null, expires: number): void {\n if (!key) {\n this._delTemp.run(dc, idx)\n\n return\n }\n\n this._setTemp.run(dc, idx, key, expires)\n }\n\n private _getTemp!: ISqliteStatement\n getTemp(dc: number, idx: number, now: number): Uint8Array | null {\n const row = this._getTemp.get(dc, idx, now)\n if (!row) return null\n\n return (row as TempAuthKeyDto).key\n }\n\n private _delTempAll!: ISqliteStatement\n deleteByDc(dc: number): void {\n this._del.run(dc)\n this._delTempAll.run(dc)\n }\n\n private _delAll!: ISqliteStatement\n deleteAll(): void {\n this._delAll.run()\n }\n}\n"]}
1
+ {"version":3,"file":"auth-keys.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/auth-keys.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,wBAAwB;IACZ;IAArB,YAAqB,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QACjD,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAC7C,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;aAYP,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;YAClB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAA;YAChE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAA;YAErG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAA;YAClF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CACnC,mFAAmF,CACtF,CAAA;YAED,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAA;YAC5D,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAA;YACjF,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAA;YACxE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,IAAI,CAAmB;IACvB,IAAI,CAAmB;IAC/B,GAAG,CAAC,EAAU,EAAE,GAAsB;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEjB,OAAM;QACV,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC;IAEO,IAAI,CAAmB;IAC/B,GAAG,CAAC,EAAU;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAQ,GAAkB,CAAC,GAAG,CAAA;IAClC,CAAC;IAEO,QAAQ,CAAmB;IAC3B,QAAQ,CAAmB;IACnC,OAAO,CAAC,EAAU,EAAE,GAAW,EAAE,GAAsB,EAAE,OAAe;QACpE,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YAE1B,OAAM;QACV,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAEO,QAAQ,CAAmB;IACnC,OAAO,CAAC,EAAU,EAAE,GAAW,EAAE,GAAW;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAQ,GAAsB,CAAC,GAAG,CAAA;IACtC,CAAC;IAEO,WAAW,CAAmB;IACtC,UAAU,CAAC,EAAU;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAEO,OAAO,CAAmB;IAClC,SAAS;QACL,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;CACJ","sourcesContent":["import { IAuthKeysRepository } from '../../repository/auth-keys.js'\nimport { BaseSqliteStorageDriver } from '../driver.js'\nimport { ISqliteStatement } from '../types.js'\n\ninterface AuthKeyDto {\n dc: number\n key: Uint8Array\n}\n\ninterface TempAuthKeyDto extends AuthKeyDto {\n expires?: number\n idx?: number\n}\n\nexport class SqliteAuthKeysRepository implements IAuthKeysRepository {\n constructor(readonly _driver: BaseSqliteStorageDriver) {\n _driver.registerMigration('auth_keys', 1, (db) => {\n db.exec(`\n create table if not exists auth_keys (\n dc integer primary key,\n key blob not null\n );\n create table if not exists temp_auth_keys (\n dc integer not null,\n idx integer not null,\n key blob not null,\n expires integer not null,\n primary key (dc, idx)\n );\n `)\n })\n _driver.onLoad((db) => {\n this._get = db.prepare('select key from auth_keys where dc = ?')\n this._getTemp = db.prepare('select key from temp_auth_keys where dc = ? and idx = ? and expires > ?')\n\n this._set = db.prepare('insert or replace into auth_keys (dc, key) values (?, ?)')\n this._setTemp = this._driver.db.prepare(\n 'insert or replace into temp_auth_keys (dc, idx, key, expires) values (?, ?, ?, ?)',\n )\n\n this._del = db.prepare('delete from auth_keys where dc = ?')\n this._delTemp = db.prepare('delete from temp_auth_keys where dc = ? and idx = ?')\n this._delTempAll = db.prepare('delete from temp_auth_keys where dc = ?')\n this._delAll = db.prepare('delete from auth_keys')\n })\n }\n\n private _set!: ISqliteStatement\n private _del!: ISqliteStatement\n set(dc: number, key: Uint8Array | null): void {\n if (!key) {\n this._del.run(dc)\n\n return\n }\n\n this._set.run(dc, key)\n }\n\n private _get!: ISqliteStatement\n get(dc: number): Uint8Array | null {\n const row = this._get.get(dc)\n if (!row) return null\n\n return (row as AuthKeyDto).key\n }\n\n private _setTemp!: ISqliteStatement\n private _delTemp!: ISqliteStatement\n setTemp(dc: number, idx: number, key: Uint8Array | null, expires: number): void {\n if (!key) {\n this._delTemp.run(dc, idx)\n\n return\n }\n\n this._setTemp.run(dc, idx, key, expires)\n }\n\n private _getTemp!: ISqliteStatement\n getTemp(dc: number, idx: number, now: number): Uint8Array | null {\n const row = this._getTemp.get(dc, idx, now)\n if (!row) return null\n\n return (row as TempAuthKeyDto).key\n }\n\n private _delTempAll!: ISqliteStatement\n deleteByDc(dc: number): void {\n this._del.run(dc)\n this._delTempAll.run(dc)\n }\n\n private _delAll!: ISqliteStatement\n deleteAll(): void {\n this._delAll.run()\n }\n}\n"]}
@@ -4,6 +4,7 @@ import { CurrentUserService } from '../../../highlevel/storage/service/current-u
4
4
  import { UpdatesStateService } from '../../../highlevel/storage/service/updates.js';
5
5
  import { DefaultDcsService } from '../../service/default-dcs.js';
6
6
  export class SqliteKeyValueRepository {
7
+ _driver;
7
8
  constructor(_driver) {
8
9
  this._driver = _driver;
9
10
  _driver.registerMigration('kv', 1, (db) => {
@@ -73,18 +74,22 @@ export class SqliteKeyValueRepository {
73
74
  /* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-floating-promises */
74
75
  /* eslint-enable @typescript-eslint/no-unsafe-argument */
75
76
  }
77
+ _set;
76
78
  set(key, value) {
77
79
  this._driver._writeLater(this._set, [key, value]);
78
80
  }
81
+ _get;
79
82
  get(key) {
80
83
  const res = this._get.get(key);
81
84
  if (!res)
82
85
  return null;
83
86
  return res.value;
84
87
  }
88
+ _del;
85
89
  delete(key) {
86
90
  this._del.run(key);
87
91
  }
92
+ _delAll;
88
93
  deleteAll() {
89
94
  this._delAll.run();
90
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/kv.ts"],"names":[],"mappings":"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","sourcesContent":["import { __tlReaderMap } from '@mtcute/tl/binary/reader.js'\nimport { __tlWriterMap } from '@mtcute/tl/binary/writer.js'\n\nimport { CurrentUserService } from '../../../highlevel/storage/service/current-user.js'\nimport { UpdatesStateService } from '../../../highlevel/storage/service/updates.js'\nimport { IKeyValueRepository } from '../../repository/key-value.js'\nimport { ServiceOptions } from '../../service/base.js'\nimport { DefaultDcsService } from '../../service/default-dcs.js'\nimport { BaseSqliteStorageDriver } from '../driver.js'\nimport { ISqliteStatement } from '../types.js'\n\ninterface KeyValueDto {\n key: string\n value: Uint8Array\n}\n\nexport class SqliteKeyValueRepository implements IKeyValueRepository {\n constructor(readonly _driver: BaseSqliteStorageDriver) {\n _driver.registerMigration('kv', 1, (db) => {\n db.exec(`\n create table key_value (\n key text primary key,\n value blob not null\n );\n `)\n })\n _driver.onLoad((db) => {\n this._get = db.prepare('select value from key_value where key = ?')\n this._set = db.prepare('insert or replace into key_value (key, value) values (?, ?)')\n this._del = db.prepare('delete from key_value where key = ?')\n this._delAll = db.prepare('delete from key_value')\n })\n\n // awkward dependencies, unsafe code, awful crutches\n // all in the name of backwards compatibility\n /* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any */\n /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-floating-promises */\n /* eslint-disable @typescript-eslint/no-unsafe-argument */\n _driver.registerLegacyMigration('kv', (db) => {\n // fetch all values from the old table\n const all = db.prepare('select key, value from kv').all() as { key: string; value: string }[]\n const obj: Record<string, any> = {}\n\n for (const { key, value } of all) {\n obj[key] = JSON.parse(value)\n }\n\n db.exec('drop table kv')\n\n // lol\n const options: ServiceOptions = {\n driver: this._driver,\n readerMap: __tlReaderMap,\n writerMap: __tlWriterMap,\n // eslint-disable-next-line dot-notation\n log: this._driver['_log'],\n }\n\n if (obj.self) {\n new CurrentUserService(this, options).store({\n userId: obj.self.userId,\n isBot: obj.self.isBot,\n isPremium: false,\n usernames: [],\n })\n }\n\n if (obj.pts) {\n const svc = new UpdatesStateService(this, options)\n svc.setPts(obj.pts)\n if (obj.qts) svc.setQts(obj.qts)\n if (obj.date) svc.setDate(obj.date)\n if (obj.seq) svc.setSeq(obj.seq)\n\n // also fetch channel states. they were moved to kv from a separate table\n const channels = db.prepare('select * from pts').all() as any[]\n\n for (const channel of channels) {\n svc.setChannelPts(channel.channel_id, channel.pts)\n }\n }\n db.exec('drop table pts')\n\n if (obj.def_dc) {\n new DefaultDcsService(this, options).store(obj.def_dc)\n }\n })\n /* eslint-enable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any */\n /* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-floating-promises */\n /* eslint-enable @typescript-eslint/no-unsafe-argument */\n }\n\n private _set!: ISqliteStatement\n set(key: string, value: Uint8Array): void {\n this._driver._writeLater(this._set, [key, value])\n }\n\n private _get!: ISqliteStatement\n get(key: string): Uint8Array | null {\n const res = this._get.get(key)\n if (!res) return null\n\n return (res as KeyValueDto).value\n }\n\n private _del!: ISqliteStatement\n delete(key: string): void {\n this._del.run(key)\n }\n\n private _delAll!: ISqliteStatement\n deleteAll(): void {\n this._delAll.run()\n }\n}\n"]}
1
+ {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/kv.ts"],"names":[],"mappings":"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","sourcesContent":["import { __tlReaderMap } from '@mtcute/tl/binary/reader.js'\nimport { __tlWriterMap } from '@mtcute/tl/binary/writer.js'\n\nimport { CurrentUserService } from '../../../highlevel/storage/service/current-user.js'\nimport { UpdatesStateService } from '../../../highlevel/storage/service/updates.js'\nimport { IKeyValueRepository } from '../../repository/key-value.js'\nimport { ServiceOptions } from '../../service/base.js'\nimport { DefaultDcsService } from '../../service/default-dcs.js'\nimport { BaseSqliteStorageDriver } from '../driver.js'\nimport { ISqliteStatement } from '../types.js'\n\ninterface KeyValueDto {\n key: string\n value: Uint8Array\n}\n\nexport class SqliteKeyValueRepository implements IKeyValueRepository {\n constructor(readonly _driver: BaseSqliteStorageDriver) {\n _driver.registerMigration('kv', 1, (db) => {\n db.exec(`\n create table key_value (\n key text primary key,\n value blob not null\n );\n `)\n })\n _driver.onLoad((db) => {\n this._get = db.prepare('select value from key_value where key = ?')\n this._set = db.prepare('insert or replace into key_value (key, value) values (?, ?)')\n this._del = db.prepare('delete from key_value where key = ?')\n this._delAll = db.prepare('delete from key_value')\n })\n\n // awkward dependencies, unsafe code, awful crutches\n // all in the name of backwards compatibility\n /* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any */\n /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-floating-promises */\n /* eslint-disable @typescript-eslint/no-unsafe-argument */\n _driver.registerLegacyMigration('kv', (db) => {\n // fetch all values from the old table\n const all = db.prepare('select key, value from kv').all() as { key: string; value: string }[]\n const obj: Record<string, any> = {}\n\n for (const { key, value } of all) {\n obj[key] = JSON.parse(value)\n }\n\n db.exec('drop table kv')\n\n // lol\n const options: ServiceOptions = {\n driver: this._driver,\n readerMap: __tlReaderMap,\n writerMap: __tlWriterMap,\n // eslint-disable-next-line dot-notation\n log: this._driver['_log'],\n }\n\n if (obj.self) {\n new CurrentUserService(this, options).store({\n userId: obj.self.userId,\n isBot: obj.self.isBot,\n isPremium: false,\n usernames: [],\n })\n }\n\n if (obj.pts) {\n const svc = new UpdatesStateService(this, options)\n svc.setPts(obj.pts)\n if (obj.qts) svc.setQts(obj.qts)\n if (obj.date) svc.setDate(obj.date)\n if (obj.seq) svc.setSeq(obj.seq)\n\n // also fetch channel states. they were moved to kv from a separate table\n const channels = db.prepare('select * from pts').all() as any[]\n\n for (const channel of channels) {\n svc.setChannelPts(channel.channel_id, channel.pts)\n }\n }\n db.exec('drop table pts')\n\n if (obj.def_dc) {\n new DefaultDcsService(this, options).store(obj.def_dc)\n }\n })\n /* eslint-enable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any */\n /* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-floating-promises */\n /* eslint-enable @typescript-eslint/no-unsafe-argument */\n }\n\n private _set!: ISqliteStatement\n set(key: string, value: Uint8Array): void {\n this._driver._writeLater(this._set, [key, value])\n }\n\n private _get!: ISqliteStatement\n get(key: string): Uint8Array | null {\n const res = this._get.get(key)\n if (!res) return null\n\n return (res as KeyValueDto).value\n }\n\n private _del!: ISqliteStatement\n delete(key: string): void {\n this._del.run(key)\n }\n\n private _delAll!: ISqliteStatement\n deleteAll(): void {\n this._delAll.run()\n }\n}\n"]}
@@ -9,6 +9,7 @@ function mapPeerDto(dto) {
9
9
  };
10
10
  }
11
11
  export class SqlitePeersRepository {
12
+ _driver;
12
13
  constructor(_driver) {
13
14
  this._driver = _driver;
14
15
  _driver.registerMigration('peers', 1, (db) => {
@@ -37,6 +38,7 @@ export class SqlitePeersRepository {
37
38
  db.exec('drop table entities');
38
39
  });
39
40
  }
41
+ _store;
40
42
  store(peer) {
41
43
  this._driver._writeLater(this._store, [
42
44
  peer.id,
@@ -48,24 +50,28 @@ export class SqlitePeersRepository {
48
50
  peer.complete,
49
51
  ]);
50
52
  }
53
+ _getById;
51
54
  getById(id) {
52
55
  const row = this._getById.get(id);
53
56
  if (!row)
54
57
  return null;
55
58
  return mapPeerDto(row);
56
59
  }
60
+ _getByUsername;
57
61
  getByUsername(username) {
58
62
  const row = this._getByUsername.get(username);
59
63
  if (!row)
60
64
  return null;
61
65
  return mapPeerDto(row);
62
66
  }
67
+ _getByPhone;
63
68
  getByPhone(phone) {
64
69
  const row = this._getByPhone.get(phone);
65
70
  if (!row)
66
71
  return null;
67
72
  return mapPeerDto(row);
68
73
  }
74
+ _delAll;
69
75
  deleteAll() {
70
76
  this._delAll.run();
71
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"peers.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/peers.ts"],"names":[],"mappings":"AAcA,SAAS,UAAU,CAAC,GAAY;IAC5B,OAAO;QACH,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,UAAU,EAAE,GAAG,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAa;QAChD,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACzB,CAAA;AACL,CAAC;AAED,MAAM,OAAO,qBAAqB;IAC9B,YAAqB,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QACjD,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YACzC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;aAWP,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,CACpB,wGAAwG,CAC3G,CAAA;YAED,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAA;YAC9D,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,CAC5B,uFAAuF,CAC1F,CAAA;YACD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAA;YAEpE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;YAC5C,qDAAqD;YACrD,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACN,CAAC;IAGD,KAAK,CAAC,IAA+B;QACjC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE;YAClC,IAAI,CAAC,EAAE;YACP,IAAI,CAAC,UAAU;YACf,mDAAmD;YACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9B,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,QAAQ;SAChB,CAAC,CAAA;IACN,CAAC;IAGD,OAAO,CAAC,EAAU;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAO,UAAU,CAAC,GAAc,CAAC,CAAA;IACrC,CAAC;IAGD,aAAa,CAAC,QAAgB;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC7C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAO,UAAU,CAAC,GAAc,CAAC,CAAA;IACrC,CAAC;IAGD,UAAU,CAAC,KAAa;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAO,UAAU,CAAC,GAAc,CAAC,CAAA;IACrC,CAAC;IAGD,SAAS;QACL,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;CACJ","sourcesContent":["import { IPeersRepository } from '../../../highlevel/storage/repository/peers.js'\nimport { BaseSqliteStorageDriver } from '../driver.js'\nimport { ISqliteStatement } from '../types.js'\n\ninterface PeerDto {\n id: number\n hash: string\n usernames: string\n updated: number\n phone: string | null\n // eslint-disable-next-line no-restricted-globals\n complete: Buffer\n}\n\nfunction mapPeerDto(dto: PeerDto): IPeersRepository.PeerInfo {\n return {\n id: dto.id,\n accessHash: dto.hash,\n usernames: JSON.parse(dto.usernames) as string[],\n updated: dto.updated,\n phone: dto.phone || undefined,\n complete: dto.complete,\n }\n}\n\nexport class SqlitePeersRepository implements IPeersRepository {\n constructor(readonly _driver: BaseSqliteStorageDriver) {\n _driver.registerMigration('peers', 1, (db) => {\n db.exec(`\n create table peers (\n id integer primary key,\n hash text not null,\n usernames json not null,\n updated integer not null,\n phone text,\n complete blob\n );\n create index idx_peers_usernames on peers (usernames);\n create index idx_peers_phone on peers (phone);\n `)\n })\n _driver.onLoad((db) => {\n this._store = db.prepare(\n 'insert or replace into peers (id, hash, usernames, updated, phone, complete) values (?, ?, ?, ?, ?, ?)',\n )\n\n this._getById = db.prepare('select * from peers where id = ?')\n this._getByUsername = db.prepare(\n 'select * from peers where exists (select 1 from json_each(usernames) where value = ?)',\n )\n this._getByPhone = db.prepare('select * from peers where phone = ?')\n\n this._delAll = db.prepare('delete from peers')\n })\n _driver.registerLegacyMigration('peers', (db) => {\n // not too important information, just drop the table\n db.exec('drop table entities')\n })\n }\n\n private _store!: ISqliteStatement\n store(peer: IPeersRepository.PeerInfo): void {\n this._driver._writeLater(this._store, [\n peer.id,\n peer.accessHash,\n // add commas to make it easier to search with LIKE\n JSON.stringify(peer.usernames),\n peer.updated,\n peer.phone,\n peer.complete,\n ])\n }\n\n private _getById!: ISqliteStatement\n getById(id: number): IPeersRepository.PeerInfo | null {\n const row = this._getById.get(id)\n if (!row) return null\n\n return mapPeerDto(row as PeerDto)\n }\n\n private _getByUsername!: ISqliteStatement\n getByUsername(username: string): IPeersRepository.PeerInfo | null {\n const row = this._getByUsername.get(username)\n if (!row) return null\n\n return mapPeerDto(row as PeerDto)\n }\n\n private _getByPhone!: ISqliteStatement\n getByPhone(phone: string): IPeersRepository.PeerInfo | null {\n const row = this._getByPhone.get(phone)\n if (!row) return null\n\n return mapPeerDto(row as PeerDto)\n }\n\n private _delAll!: ISqliteStatement\n deleteAll(): void {\n this._delAll.run()\n }\n}\n"]}
1
+ {"version":3,"file":"peers.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/peers.ts"],"names":[],"mappings":"AAaA,SAAS,UAAU,CAAC,GAAY;IAC5B,OAAO;QACH,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,UAAU,EAAE,GAAG,CAAC,IAAI;QACpB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAa;QAChD,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACzB,CAAA;AACL,CAAC;AAED,MAAM,OAAO,qBAAqB;IACT;IAArB,YAAqB,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QACjD,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YACzC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;aAWP,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,CACpB,wGAAwG,CAC3G,CAAA;YAED,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAA;YAC9D,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,CAC5B,uFAAuF,CAC1F,CAAA;YACD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAA;YAEpE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;YAC5C,qDAAqD;YACrD,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,MAAM,CAAmB;IACjC,KAAK,CAAC,IAA+B;QACjC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE;YAClC,IAAI,CAAC,EAAE;YACP,IAAI,CAAC,UAAU;YACf,mDAAmD;YACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9B,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,QAAQ;SAChB,CAAC,CAAA;IACN,CAAC;IAEO,QAAQ,CAAmB;IACnC,OAAO,CAAC,EAAU;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAO,UAAU,CAAC,GAAc,CAAC,CAAA;IACrC,CAAC;IAEO,cAAc,CAAmB;IACzC,aAAa,CAAC,QAAgB;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC7C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAO,UAAU,CAAC,GAAc,CAAC,CAAA;IACrC,CAAC;IAEO,WAAW,CAAmB;IACtC,UAAU,CAAC,KAAa;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,OAAO,UAAU,CAAC,GAAc,CAAC,CAAA;IACrC,CAAC;IAEO,OAAO,CAAmB;IAClC,SAAS;QACL,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;CACJ","sourcesContent":["import { IPeersRepository } from '../../../highlevel/storage/repository/peers.js'\nimport { BaseSqliteStorageDriver } from '../driver.js'\nimport { ISqliteStatement } from '../types.js'\n\ninterface PeerDto {\n id: number\n hash: string\n usernames: string\n updated: number\n phone: string | null\n complete: Uint8Array\n}\n\nfunction mapPeerDto(dto: PeerDto): IPeersRepository.PeerInfo {\n return {\n id: dto.id,\n accessHash: dto.hash,\n usernames: JSON.parse(dto.usernames) as string[],\n updated: dto.updated,\n phone: dto.phone || undefined,\n complete: dto.complete,\n }\n}\n\nexport class SqlitePeersRepository implements IPeersRepository {\n constructor(readonly _driver: BaseSqliteStorageDriver) {\n _driver.registerMigration('peers', 1, (db) => {\n db.exec(`\n create table peers (\n id integer primary key,\n hash text not null,\n usernames json not null,\n updated integer not null,\n phone text,\n complete blob\n );\n create index idx_peers_usernames on peers (usernames);\n create index idx_peers_phone on peers (phone);\n `)\n })\n _driver.onLoad((db) => {\n this._store = db.prepare(\n 'insert or replace into peers (id, hash, usernames, updated, phone, complete) values (?, ?, ?, ?, ?, ?)',\n )\n\n this._getById = db.prepare('select * from peers where id = ?')\n this._getByUsername = db.prepare(\n 'select * from peers where exists (select 1 from json_each(usernames) where value = ?)',\n )\n this._getByPhone = db.prepare('select * from peers where phone = ?')\n\n this._delAll = db.prepare('delete from peers')\n })\n _driver.registerLegacyMigration('peers', (db) => {\n // not too important information, just drop the table\n db.exec('drop table entities')\n })\n }\n\n private _store!: ISqliteStatement\n store(peer: IPeersRepository.PeerInfo): void {\n this._driver._writeLater(this._store, [\n peer.id,\n peer.accessHash,\n // add commas to make it easier to search with LIKE\n JSON.stringify(peer.usernames),\n peer.updated,\n peer.phone,\n peer.complete,\n ])\n }\n\n private _getById!: ISqliteStatement\n getById(id: number): IPeersRepository.PeerInfo | null {\n const row = this._getById.get(id)\n if (!row) return null\n\n return mapPeerDto(row as PeerDto)\n }\n\n private _getByUsername!: ISqliteStatement\n getByUsername(username: string): IPeersRepository.PeerInfo | null {\n const row = this._getByUsername.get(username)\n if (!row) return null\n\n return mapPeerDto(row as PeerDto)\n }\n\n private _getByPhone!: ISqliteStatement\n getByPhone(phone: string): IPeersRepository.PeerInfo | null {\n const row = this._getByPhone.get(phone)\n if (!row) return null\n\n return mapPeerDto(row as PeerDto)\n }\n\n private _delAll!: ISqliteStatement\n deleteAll(): void {\n this._delAll.run()\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { IReferenceMessagesRepository } from '@mtcute/core';
1
+ import { IReferenceMessagesRepository } from '../../../highlevel/storage/repository/ref-messages.js';
2
2
  import { BaseSqliteStorageDriver } from '../driver.js';
3
3
  export declare class SqliteRefMessagesRepository implements IReferenceMessagesRepository {
4
4
  readonly _driver: BaseSqliteStorageDriver;
@@ -1,4 +1,5 @@
1
1
  export class SqliteRefMessagesRepository {
2
+ _driver;
2
3
  constructor(_driver) {
3
4
  this._driver = _driver;
4
5
  _driver.registerMigration('ref_messages', 1, (db) => {
@@ -20,9 +21,11 @@ export class SqliteRefMessagesRepository {
20
21
  this._delAll = this._driver.db.prepare('delete from message_refs');
21
22
  });
22
23
  }
24
+ _store;
23
25
  store(peerId, chatId, msgId) {
24
26
  this._store.run(peerId, chatId, msgId);
25
27
  }
28
+ _getByPeer;
26
29
  getByPeer(peerId) {
27
30
  const res = this._getByPeer.get(peerId);
28
31
  if (!res)
@@ -30,14 +33,17 @@ export class SqliteRefMessagesRepository {
30
33
  const res_ = res;
31
34
  return [res_.chat_id, res_.msg_id];
32
35
  }
36
+ _del;
33
37
  delete(chatId, msgIds) {
34
38
  for (const msgId of msgIds) {
35
39
  this._driver._writeLater(this._del, [chatId, msgId]);
36
40
  }
37
41
  }
42
+ _delByPeer;
38
43
  deleteByPeer(peerId) {
39
44
  this._delByPeer.run(peerId);
40
45
  }
46
+ _delAll;
41
47
  deleteAll() {
42
48
  this._delAll.run();
43
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ref-messages.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/ref-messages.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,2BAA2B;IACpC,YAAqB,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QACjD,OAAO,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAChD,EAAE,CAAC,IAAI,CAAC;;;;;;;;aAQP,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CACjC,iFAAiF,CACpF,CAAA;YAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAA;YAEvG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAA;YAChG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAA;YACvF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;IACN,CAAC;IAGD,KAAK,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IAC1C,CAAC;IAGD,SAAS,CAAC,MAAc;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,MAAM,IAAI,GAAG,GAA0B,CAAA;QAEvC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IAGD,MAAM,CAAC,MAAc,EAAE,MAAgB;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;SACvD;IACL,CAAC;IAGD,YAAY,CAAC,MAAc;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,CAAC;IAGD,SAAS;QACL,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;CACJ","sourcesContent":["import { IReferenceMessagesRepository } from '@mtcute/core'\n\nimport { BaseSqliteStorageDriver } from '../driver.js'\nimport { ISqliteStatement } from '../types.js'\n\ninterface ReferenceMessageDto {\n peer_id: number\n chat_id: number\n msg_id: number\n}\n\nexport class SqliteRefMessagesRepository implements IReferenceMessagesRepository {\n constructor(readonly _driver: BaseSqliteStorageDriver) {\n _driver.registerMigration('ref_messages', 1, (db) => {\n db.exec(`\n create table if not exists message_refs (\n peer_id integer not null,\n chat_id integer not null,\n msg_id integer not null\n );\n create index if not exists idx_message_refs_peer on message_refs (peer_id);\n create index if not exists idx_message_refs on message_refs (chat_id, msg_id);\n `)\n })\n _driver.onLoad(() => {\n this._store = this._driver.db.prepare(\n 'insert or replace into message_refs (peer_id, chat_id, msg_id) values (?, ?, ?)',\n )\n\n this._getByPeer = this._driver.db.prepare('select chat_id, msg_id from message_refs where peer_id = ?')\n\n this._del = this._driver.db.prepare('delete from message_refs where chat_id = ? and msg_id = ?')\n this._delByPeer = this._driver.db.prepare('delete from message_refs where peer_id = ?')\n this._delAll = this._driver.db.prepare('delete from message_refs')\n })\n }\n\n private _store!: ISqliteStatement\n store(peerId: number, chatId: number, msgId: number): void {\n this._store.run(peerId, chatId, msgId)\n }\n\n private _getByPeer!: ISqliteStatement\n getByPeer(peerId: number): [number, number] | null {\n const res = this._getByPeer.get(peerId)\n if (!res) return null\n\n const res_ = res as ReferenceMessageDto\n\n return [res_.chat_id, res_.msg_id]\n }\n\n private _del!: ISqliteStatement\n delete(chatId: number, msgIds: number[]): void {\n for (const msgId of msgIds) {\n this._driver._writeLater(this._del, [chatId, msgId])\n }\n }\n\n private _delByPeer!: ISqliteStatement\n deleteByPeer(peerId: number): void {\n this._delByPeer.run(peerId)\n }\n\n private _delAll!: ISqliteStatement\n deleteAll(): void {\n this._delAll.run()\n }\n}\n"]}
1
+ {"version":3,"file":"ref-messages.js","sourceRoot":"","sources":["../../../../../src/storage/sqlite/repository/ref-messages.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,2BAA2B;IACf;IAArB,YAAqB,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QACjD,OAAO,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAChD,EAAE,CAAC,IAAI,CAAC;;;;;;;;aAQP,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CACjC,iFAAiF,CACpF,CAAA;YAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAA;YAEvG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAA;YAChG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAA;YACvF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,MAAM,CAAmB;IACjC,KAAK,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IAC1C,CAAC;IAEO,UAAU,CAAmB;IACrC,SAAS,CAAC,MAAc;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,MAAM,IAAI,GAAG,GAA0B,CAAA;QAEvC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IAEO,IAAI,CAAmB;IAC/B,MAAM,CAAC,MAAc,EAAE,MAAgB;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;QACxD,CAAC;IACL,CAAC;IAEO,UAAU,CAAmB;IACrC,YAAY,CAAC,MAAc;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,CAAC;IAEO,OAAO,CAAmB;IAClC,SAAS;QACL,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;CACJ","sourcesContent":["import { IReferenceMessagesRepository } from '../../../highlevel/storage/repository/ref-messages.js'\nimport { BaseSqliteStorageDriver } from '../driver.js'\nimport { ISqliteStatement } from '../types.js'\n\ninterface ReferenceMessageDto {\n peer_id: number\n chat_id: number\n msg_id: number\n}\n\nexport class SqliteRefMessagesRepository implements IReferenceMessagesRepository {\n constructor(readonly _driver: BaseSqliteStorageDriver) {\n _driver.registerMigration('ref_messages', 1, (db) => {\n db.exec(`\n create table if not exists message_refs (\n peer_id integer not null,\n chat_id integer not null,\n msg_id integer not null\n );\n create index if not exists idx_message_refs_peer on message_refs (peer_id);\n create index if not exists idx_message_refs on message_refs (chat_id, msg_id);\n `)\n })\n _driver.onLoad(() => {\n this._store = this._driver.db.prepare(\n 'insert or replace into message_refs (peer_id, chat_id, msg_id) values (?, ?, ?)',\n )\n\n this._getByPeer = this._driver.db.prepare('select chat_id, msg_id from message_refs where peer_id = ?')\n\n this._del = this._driver.db.prepare('delete from message_refs where chat_id = ? and msg_id = ?')\n this._delByPeer = this._driver.db.prepare('delete from message_refs where peer_id = ?')\n this._delAll = this._driver.db.prepare('delete from message_refs')\n })\n }\n\n private _store!: ISqliteStatement\n store(peerId: number, chatId: number, msgId: number): void {\n this._store.run(peerId, chatId, msgId)\n }\n\n private _getByPeer!: ISqliteStatement\n getByPeer(peerId: number): [number, number] | null {\n const res = this._getByPeer.get(peerId)\n if (!res) return null\n\n const res_ = res as ReferenceMessageDto\n\n return [res_.chat_id, res_.msg_id]\n }\n\n private _del!: ISqliteStatement\n delete(chatId: number, msgIds: number[]): void {\n for (const msgId of msgIds) {\n this._driver._writeLater(this._del, [chatId, msgId])\n }\n }\n\n private _delByPeer!: ISqliteStatement\n deleteByPeer(peerId: number): void {\n this._delByPeer.run(peerId)\n }\n\n private _delAll!: ISqliteStatement\n deleteAll(): void {\n this._delAll.run()\n }\n}\n"]}
@@ -2,7 +2,6 @@ import { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime';
2
2
  import { Logger } from '../utils/logger.js';
3
3
  import { IMtStorageProvider } from './provider.js';
4
4
  import { AuthKeysService } from './service/auth-keys.js';
5
- import { ServiceOptions } from './service/base.js';
6
5
  import { DefaultDcsService } from './service/default-dcs.js';
7
6
  import { FutureSaltsService } from './service/future-salts.js';
8
7
  interface StorageManagerOptions {
@@ -13,14 +12,13 @@ interface StorageManagerOptions {
13
12
  }
14
13
  export declare class StorageManager {
15
14
  readonly options: StorageManagerOptions & StorageManagerExtraOptions;
16
- constructor(options: StorageManagerOptions & StorageManagerExtraOptions);
17
15
  readonly provider: IMtStorageProvider;
18
16
  readonly driver: import("./driver.js").IStorageDriver;
19
17
  readonly log: Logger;
20
- readonly _serviceOptions: ServiceOptions;
21
18
  readonly dcs: DefaultDcsService;
22
19
  readonly salts: FutureSaltsService;
23
20
  readonly keys: AuthKeysService;
21
+ constructor(options: StorageManagerOptions & StorageManagerExtraOptions);
24
22
  private _cleanupRestore?;
25
23
  private _load;
26
24
  load(): Promise<void>;
@@ -4,30 +4,38 @@ import { AuthKeysService } from './service/auth-keys.js';
4
4
  import { DefaultDcsService } from './service/default-dcs.js';
5
5
  import { FutureSaltsService } from './service/future-salts.js';
6
6
  export class StorageManager {
7
+ options;
8
+ provider;
9
+ driver;
10
+ log;
11
+ dcs;
12
+ salts;
13
+ keys;
7
14
  constructor(options) {
8
15
  this.options = options;
9
16
  this.provider = this.options.provider;
10
17
  this.driver = this.provider.driver;
11
18
  this.log = this.options.log.create('storage');
12
- this._serviceOptions = {
19
+ const serviceOptions = {
13
20
  driver: this.driver,
14
21
  readerMap: this.options.readerMap,
15
22
  writerMap: this.options.writerMap,
16
23
  log: this.log,
17
24
  };
18
- this.dcs = new DefaultDcsService(this.provider.kv, this._serviceOptions);
19
- this.salts = new FutureSaltsService(this.provider.kv, this._serviceOptions);
20
- this.keys = new AuthKeysService(this.provider.authKeys, this.salts, this._serviceOptions);
21
- this._load = asyncResettable(async () => {
22
- this.driver.setup?.(this.log);
23
- if (this.options.cleanup ?? true) {
24
- this._cleanupRestore = getPlatform().beforeExit(() => {
25
- this._destroy().catch((err) => this.log.error('cleanup error: %s', err));
26
- });
27
- }
28
- await this.driver.load?.();
29
- });
25
+ this.dcs = new DefaultDcsService(this.provider.kv, serviceOptions);
26
+ this.salts = new FutureSaltsService(this.provider.kv, serviceOptions);
27
+ this.keys = new AuthKeysService(this.provider.authKeys, this.salts, serviceOptions);
30
28
  }
29
+ _cleanupRestore;
30
+ _load = asyncResettable(async () => {
31
+ this.driver.setup?.(this.log);
32
+ if (this.options.cleanup ?? true) {
33
+ this._cleanupRestore = getPlatform().beforeExit(() => {
34
+ this._destroy().catch((err) => this.log.error('cleanup error: %s', err));
35
+ });
36
+ }
37
+ await this.driver.load?.();
38
+ });
31
39
  load() {
32
40
  return this._load.run();
33
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAgC9D,MAAM,OAAO,cAAc;IACvB,YAAqB,OAA2D;QAA3D,YAAO,GAAP,OAAO,CAAoD;QAEvE,aAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAChC,WAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;QAC7B,QAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAExC,oBAAe,GAAmB;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,GAAG,EAAE,IAAI,CAAC,GAAG;SAChB,CAAA;QAEQ,QAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QACnE,UAAK,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QACtE,SAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAIrF,UAAK,GAAG,eAAe,CAAC,KAAK,IAAI,EAAE;YACvC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAE7B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE;gBAC9B,IAAI,CAAC,eAAe,GAAG,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE;oBACjD,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAA;gBAC5E,CAAC,CAAC,CAAA;aACL;YAED,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAA;QAC9B,CAAC,CAAC,CAAA;IA7BiF,CAAC;IA8BpF,IAAI;QACA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK;QAC5B,IAAI,YAAY,EAAE;YACd,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;SAC3C;QACD,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAA;QAClC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAEO,KAAK,CAAC,QAAQ;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAAE,OAAM;QAClC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAEvB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,EAAE,CAAA;YACtB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;SACnC;QAED,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;IACzB,CAAC;CACJ","sourcesContent":["import { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { getPlatform } from '../platform.js'\nimport { asyncResettable } from '../utils/index.js'\nimport { Logger } from '../utils/logger.js'\nimport { IMtStorageProvider } from './provider.js'\nimport { AuthKeysService } from './service/auth-keys.js'\nimport { ServiceOptions } from './service/base.js'\nimport { DefaultDcsService } from './service/default-dcs.js'\nimport { FutureSaltsService } from './service/future-salts.js'\n\ninterface StorageManagerOptions {\n provider: IMtStorageProvider\n log: Logger\n readerMap: TlReaderMap\n writerMap: TlWriterMap\n}\n\n/**\n * Additional options for {@link StorageManager}, that\n * can be customized by the user.\n *\n * @internal\n */\nexport interface StorageManagerExtraOptions {\n /**\n * Interval in milliseconds for saving the storage.\n *\n * When saving, the storage is expected to persist\n * all changes to disk, so that they are not lost.\n */\n saveInterval?: number\n\n /**\n * Whether to finalize database before exiting.\n *\n * @default `true`\n */\n cleanup?: boolean\n}\n\nexport class StorageManager {\n constructor(readonly options: StorageManagerOptions & StorageManagerExtraOptions) {}\n\n readonly provider = this.options.provider\n readonly driver = this.provider.driver\n readonly log = this.options.log.create('storage')\n\n readonly _serviceOptions: ServiceOptions = {\n driver: this.driver,\n readerMap: this.options.readerMap,\n writerMap: this.options.writerMap,\n log: this.log,\n }\n\n readonly dcs = new DefaultDcsService(this.provider.kv, this._serviceOptions)\n readonly salts = new FutureSaltsService(this.provider.kv, this._serviceOptions)\n readonly keys = new AuthKeysService(this.provider.authKeys, this.salts, this._serviceOptions)\n\n private _cleanupRestore?: () => void\n\n private _load = asyncResettable(async () => {\n this.driver.setup?.(this.log)\n\n if (this.options.cleanup ?? true) {\n this._cleanupRestore = getPlatform().beforeExit(() => {\n this._destroy().catch((err) => this.log.error('cleanup error: %s', err))\n })\n }\n\n await this.driver.load?.()\n })\n load(): Promise<void> {\n return this._load.run()\n }\n\n async save(): Promise<void> {\n await this.driver.save?.()\n }\n\n async clear(withAuthKeys = false) {\n if (withAuthKeys) {\n await this.provider.authKeys.deleteAll()\n }\n await this.provider.kv.deleteAll()\n await this.save()\n }\n\n private async _destroy(): Promise<void> {\n if (!this._load.finished()) return\n await this._load.wait()\n\n await this.driver.destroy?.()\n this._load.reset()\n }\n\n async destroy(): Promise<void> {\n if (this._cleanupRestore) {\n this._cleanupRestore()\n this._cleanupRestore = undefined\n }\n\n await this._destroy()\n }\n}\n"]}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage/storage.ts"],"names":[],"mappings":"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","sourcesContent":["import { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { getPlatform } from '../platform.js'\nimport { asyncResettable } from '../utils/index.js'\nimport { Logger } from '../utils/logger.js'\nimport { IMtStorageProvider } from './provider.js'\nimport { AuthKeysService } from './service/auth-keys.js'\nimport { ServiceOptions } from './service/base.js'\nimport { DefaultDcsService } from './service/default-dcs.js'\nimport { FutureSaltsService } from './service/future-salts.js'\n\ninterface StorageManagerOptions {\n provider: IMtStorageProvider\n log: Logger\n readerMap: TlReaderMap\n writerMap: TlWriterMap\n}\n\n/**\n * Additional options for {@link StorageManager}, that\n * can be customized by the user.\n *\n * @internal\n */\nexport interface StorageManagerExtraOptions {\n /**\n * Interval in milliseconds for saving the storage.\n *\n * When saving, the storage is expected to persist\n * all changes to disk, so that they are not lost.\n */\n saveInterval?: number\n\n /**\n * Whether to finalize database before exiting.\n *\n * @default `true`\n */\n cleanup?: boolean\n}\n\nexport class StorageManager {\n readonly provider\n readonly driver\n readonly log\n readonly dcs\n readonly salts\n readonly keys\n\n constructor(readonly options: StorageManagerOptions & StorageManagerExtraOptions) {\n this.provider = this.options.provider\n this.driver = this.provider.driver\n this.log = this.options.log.create('storage')\n\n const serviceOptions: ServiceOptions = {\n driver: this.driver,\n readerMap: this.options.readerMap,\n writerMap: this.options.writerMap,\n log: this.log,\n }\n\n this.dcs = new DefaultDcsService(this.provider.kv, serviceOptions)\n this.salts = new FutureSaltsService(this.provider.kv, serviceOptions)\n this.keys = new AuthKeysService(this.provider.authKeys, this.salts, serviceOptions)\n }\n\n private _cleanupRestore?: () => void\n\n private _load = asyncResettable(async () => {\n this.driver.setup?.(this.log)\n\n if (this.options.cleanup ?? true) {\n this._cleanupRestore = getPlatform().beforeExit(() => {\n this._destroy().catch((err) => this.log.error('cleanup error: %s', err))\n })\n }\n\n await this.driver.load?.()\n })\n load(): Promise<void> {\n return this._load.run()\n }\n\n async save(): Promise<void> {\n await this.driver.save?.()\n }\n\n async clear(withAuthKeys = false) {\n if (withAuthKeys) {\n await this.provider.authKeys.deleteAll()\n }\n await this.provider.kv.deleteAll()\n await this.save()\n }\n\n private async _destroy(): Promise<void> {\n if (!this._load.finished()) return\n await this._load.wait()\n\n await this.driver.destroy?.()\n this._load.reset()\n }\n\n async destroy(): Promise<void> {\n if (this._cleanupRestore) {\n this._cleanupRestore()\n this._cleanupRestore = undefined\n }\n\n await this._destroy()\n }\n}\n"]}
@@ -33,6 +33,18 @@ export class MtUnsupportedError extends MtcuteError {
33
33
  * Feel free to open an issue about this!
34
34
  */
35
35
  export class MtTypeAssertionError extends MtcuteError {
36
+ /**
37
+ * Context at which the error occurred.
38
+ * Usually a user-friendly string containing name
39
+ * of the high-level API method, name of the TL
40
+ * RPC method, and path of the entity,
41
+ * like this: `signIn (@ auth.signIn -> user)`
42
+ */
43
+ context;
44
+ /** Expected TL type */
45
+ expected;
46
+ /** Actual TL type */
47
+ actual;
36
48
  constructor(context, expected, actual) {
37
49
  super(`Type assertion error at ${context}: expected ${expected}, but got ${actual}`);
38
50
  this.context = context;
@@ -41,6 +53,7 @@ export class MtTypeAssertionError extends MtcuteError {
41
53
  }
42
54
  }
43
55
  export class MtTimeoutError extends MtcuteError {
56
+ timeout;
44
57
  constructor(timeout) {
45
58
  super(`Request timed out${timeout ? ` after ${timeout}ms` : ''}`);
46
59
  this.timeout = timeout;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/types/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAG;AAEzC;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;CAAG;AAEnD;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;CAAG;AAEnD;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAmB,SAAQ,WAAW;CAAG;AAEtD;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IAgBjD,YAAY,OAAe,EAAE,QAAgB,EAAE,MAAc;QACzD,KAAK,CAAC,2BAA2B,OAAO,cAAc,QAAQ,aAAa,MAAM,EAAE,CAAC,CAAA;QACpF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;CACJ;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC3C,YAAqB,OAAgB;QACjC,KAAK,CAAC,oBAAoB,OAAO,CAAC,CAAC,CAAC,UAAU,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QADhD,YAAO,GAAP,OAAO,CAAS;IAErC,CAAC;CACJ","sourcesContent":["/**\n * Base class for all mtcute errors\n */\nexport class MtcuteError extends Error {}\n\n/**\n * Method invocation was invalid because some argument\n * passed was invalid.\n */\nexport class MtArgumentError extends MtcuteError {}\n\n/**\n * Something isn't right with security of the connection.\n */\nexport class MtSecurityError extends MtcuteError {}\n\n/**\n * Either you requested or the server returned something\n * that is not (yet) supported.\n *\n * Stay tuned for future updates!\n *\n * In some cases, this error may mean that you are missing some\n * optional peer dependencies, or that the feature is not supported\n * in the current environment.\n */\nexport class MtUnsupportedError extends MtcuteError {}\n\n/**\n * Server returned something of an unexpected type.\n *\n * This is usually a problem on library side.\n * Feel free to open an issue about this!\n */\nexport class MtTypeAssertionError extends MtcuteError {\n /**\n * Context at which the error occurred.\n * Usually a user-friendly string containing name\n * of the high-level API method, name of the TL\n * RPC method, and path of the entity,\n * like this: `signIn (@ auth.signIn -> user)`\n */\n context: string\n\n /** Expected TL type */\n expected: string\n\n /** Actual TL type */\n actual: string\n\n constructor(context: string, expected: string, actual: string) {\n super(`Type assertion error at ${context}: expected ${expected}, but got ${actual}`)\n this.context = context\n this.expected = expected\n this.actual = actual\n }\n}\n\nexport class MtTimeoutError extends MtcuteError {\n constructor(readonly timeout?: number) {\n super(`Request timed out${timeout ? ` after ${timeout}ms` : ''}`)\n }\n}\n"]}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/types/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAG;AAEzC;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;CAAG;AAEnD;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;CAAG;AAEnD;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAmB,SAAQ,WAAW;CAAG;AAEtD;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACjD;;;;;;OAMG;IACH,OAAO,CAAQ;IAEf,uBAAuB;IACvB,QAAQ,CAAQ;IAEhB,qBAAqB;IACrB,MAAM,CAAQ;IAEd,YAAY,OAAe,EAAE,QAAgB,EAAE,MAAc;QACzD,KAAK,CAAC,2BAA2B,OAAO,cAAc,QAAQ,aAAa,MAAM,EAAE,CAAC,CAAA;QACpF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;CACJ;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IACtB;IAArB,YAAqB,OAAgB;QACjC,KAAK,CAAC,oBAAoB,OAAO,CAAC,CAAC,CAAC,UAAU,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QADhD,YAAO,GAAP,OAAO,CAAS;IAErC,CAAC;CACJ","sourcesContent":["/**\n * Base class for all mtcute errors\n */\nexport class MtcuteError extends Error {}\n\n/**\n * Method invocation was invalid because some argument\n * passed was invalid.\n */\nexport class MtArgumentError extends MtcuteError {}\n\n/**\n * Something isn't right with security of the connection.\n */\nexport class MtSecurityError extends MtcuteError {}\n\n/**\n * Either you requested or the server returned something\n * that is not (yet) supported.\n *\n * Stay tuned for future updates!\n *\n * In some cases, this error may mean that you are missing some\n * optional peer dependencies, or that the feature is not supported\n * in the current environment.\n */\nexport class MtUnsupportedError extends MtcuteError {}\n\n/**\n * Server returned something of an unexpected type.\n *\n * This is usually a problem on library side.\n * Feel free to open an issue about this!\n */\nexport class MtTypeAssertionError extends MtcuteError {\n /**\n * Context at which the error occurred.\n * Usually a user-friendly string containing name\n * of the high-level API method, name of the TL\n * RPC method, and path of the entity,\n * like this: `signIn (@ auth.signIn -> user)`\n */\n context: string\n\n /** Expected TL type */\n expected: string\n\n /** Actual TL type */\n actual: string\n\n constructor(context: string, expected: string, actual: string) {\n super(`Type assertion error at ${context}: expected ${expected}, but got ${actual}`)\n this.context = context\n this.expected = expected\n this.actual = actual\n }\n}\n\nexport class MtTimeoutError extends MtcuteError {\n constructor(readonly timeout?: number) {\n super(`Request timed out${timeout ? ` after ${timeout}ms` : ''}`)\n }\n}\n"]}
@@ -4,9 +4,7 @@ import { Deque } from './deque.js';
4
4
  * behaviour.
5
5
  */
6
6
  export class AsyncLock {
7
- constructor() {
8
- this._queue = new Deque();
9
- }
7
+ _queue = new Deque();
10
8
  async acquire() {
11
9
  let info;
12
10
  while ((info = this._queue.peekFront())) {
@@ -1 +1 @@
1
- {"version":3,"file":"async-lock.js","sourceRoot":"","sources":["../../../src/utils/async-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIlC;;;GAGG;AACH,MAAM,OAAO,SAAS;IAAtB;QACY,WAAM,GAAG,IAAI,KAAK,EAAY,CAAA;IAmC1C,CAAC;IAjCG,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAA;QAER,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE;YACrC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;SAChB;QAED,IAAI,MAAkB,CAAA;QACtB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACvC,MAAM,GAAG,OAAO,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAO,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,OAAO;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE9D,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAChC,CAAC;IAED,IAAI,CAAC,IAAyB;QAC1B,IAAI,GAAG,GAAY,IAAI,CAAA;QAEvB,OAAO,IAAI,CAAC,OAAO,EAAE;aAChB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;aAClB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;aAC5B,IAAI,CAAC,GAAG,EAAE;YACP,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,+DAA+D;YAC/D,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAA;QACtB,CAAC,CAAC,CAAA;IACV,CAAC;CACJ","sourcesContent":["import { Deque } from './deque.js'\n\ntype LockInfo = [Promise<void>, () => void]\n\n/**\n * Simple class implementing a semaphore like\n * behaviour.\n */\nexport class AsyncLock {\n private _queue = new Deque<LockInfo>()\n\n async acquire(): Promise<void> {\n let info\n\n while ((info = this._queue.peekFront())) {\n await info[0]\n }\n\n let unlock: () => void\n const prom = new Promise<void>((resolve) => {\n unlock = resolve\n })\n\n this._queue.pushBack([prom, unlock!])\n }\n\n release(): void {\n if (!this._queue.length) throw new Error('Nothing to release')\n\n this._queue.popFront()![1]()\n }\n\n with(func: () => Promise<void>): Promise<void> {\n let err: unknown = null\n\n return this.acquire()\n .then(() => func())\n .catch((e) => void (err = e))\n .then(() => {\n this.release()\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n if (err) throw err\n })\n }\n}\n"]}
1
+ {"version":3,"file":"async-lock.js","sourceRoot":"","sources":["../../../src/utils/async-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIlC;;;GAGG;AACH,MAAM,OAAO,SAAS;IACV,MAAM,GAAG,IAAI,KAAK,EAAY,CAAA;IAEtC,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAA;QAER,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,MAAkB,CAAA;QACtB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACvC,MAAM,GAAG,OAAO,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAO,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,OAAO;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE9D,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAChC,CAAC;IAED,IAAI,CAAC,IAAyB;QAC1B,IAAI,GAAG,GAAY,IAAI,CAAA;QAEvB,OAAO,IAAI,CAAC,OAAO,EAAE;aAChB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;aAClB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;aAC5B,IAAI,CAAC,GAAG,EAAE;YACP,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,+DAA+D;YAC/D,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAA;QACtB,CAAC,CAAC,CAAA;IACV,CAAC;CACJ","sourcesContent":["import { Deque } from './deque.js'\n\ntype LockInfo = [Promise<void>, () => void]\n\n/**\n * Simple class implementing a semaphore like\n * behaviour.\n */\nexport class AsyncLock {\n private _queue = new Deque<LockInfo>()\n\n async acquire(): Promise<void> {\n let info\n\n while ((info = this._queue.peekFront())) {\n await info[0]\n }\n\n let unlock: () => void\n const prom = new Promise<void>((resolve) => {\n unlock = resolve\n })\n\n this._queue.pushBack([prom, unlock!])\n }\n\n release(): void {\n if (!this._queue.length) throw new Error('Nothing to release')\n\n this._queue.popFront()![1]()\n }\n\n with(func: () => Promise<void>): Promise<void> {\n let err: unknown = null\n\n return this.acquire()\n .then(() => func())\n .catch((e) => void (err = e))\n .then(() => {\n this.release()\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n if (err) throw err\n })\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bigint-utils.js","sourceRoot":"","sources":["../../../src/utils/bigint-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferToReversed } from './buffer-utils.js'\nimport { ICryptoProvider } from './crypto/abstract.js'\n\n/**\n * Get the minimum number of bits required to represent a number\n */\nexport function bigIntBitLength(n: bigint) {\n // not the fastest way, but at least not .toString(2) and not too complex\n // taken from: https://stackoverflow.com/a/76616288/22656950\n\n const i = (n.toString(16).length - 1) * 4\n\n return i + 32 - Math.clz32(Number(n >> BigInt(i)))\n}\n\n/**\n * Convert a big integer to a buffer\n *\n * @param value Value to convert\n * @param length Length of the resulting buffer (by default it's the minimum required)\n * @param le Whether to use little-endian encoding\n */\nexport function bigIntToBuffer(value: bigint, length = 0, le = false): Uint8Array {\n const bits = bigIntBitLength(value)\n const bytes = Math.ceil(bits / 8)\n\n if (length !== 0 && bytes > length) {\n throw new Error('Value out of bounds')\n }\n\n if (length === 0) length = bytes\n\n const buf = new ArrayBuffer(length)\n const u8 = new Uint8Array(buf)\n\n const unaligned = length % 8\n const dv = new DataView(buf, 0, length - unaligned)\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n dv.setBigUint64(i, value & 0xffffffffffffffffn, true)\n value >>= 64n\n }\n\n if (unaligned > 0) {\n for (let i = length - unaligned; i < length; i++) {\n u8[i] = Number(value & 0xffn)\n value >>= 8n\n }\n }\n\n if (!le) u8.reverse()\n\n return u8\n}\n\n/**\n * Convert a buffer to a big integer\n *\n * @param buffer Buffer to convert\n * @param le Whether to use little-endian encoding\n */\nexport function bufferToBigInt(buffer: Uint8Array, le = false): bigint {\n if (le) buffer = bufferToReversed(buffer)\n\n const unaligned = buffer.length % 8\n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength - unaligned)\n\n let res = 0n\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n res = (res << 64n) | BigInt(dv.getBigUint64(i, false))\n }\n\n if (unaligned > 0) {\n for (let i = buffer.length - unaligned; i < buffer.length; i++) {\n res = (res << 8n) | BigInt(buffer[i])\n }\n }\n\n return res\n}\n\n/**\n * Generate a cryptographically safe random big integer of the given size (in bytes)\n * @param size Size in bytes\n */\nexport function randomBigInt(crypto: ICryptoProvider, size: number): bigint {\n return bufferToBigInt(crypto.randomBytes(size))\n}\n\n/**\n * Generate a random big integer of the given size (in bits)\n * @param bits\n */\nexport function randomBigIntBits(crypto: ICryptoProvider, bits: number): bigint {\n let num = randomBigInt(crypto, Math.ceil(bits / 8))\n\n const bitLength = bigIntBitLength(num)\n\n if (bitLength > bits) {\n const toTrim = bitLength - bits\n num >>= BigInt(toTrim)\n }\n\n return num\n}\n\n/**\n * Generate a random big integer in the range [min, max)\n *\n * @param max Maximum value (exclusive)\n * @param min Minimum value (inclusive)\n */\nexport function randomBigIntInRange(crypto: ICryptoProvider, max: bigint, min = 1n): bigint {\n const interval = max - min\n if (interval < 0n) throw new Error('expected min < max')\n\n const byteSize = bigIntBitLength(interval) / 8\n\n let result = randomBigInt(crypto, byteSize)\n while (result > interval) result -= interval\n\n return min + result\n}\n\n/**\n * Compute the multiplicity of 2 in the prime factorization of n\n * @param n\n */\nexport function twoMultiplicity(n: bigint): bigint {\n if (n === 0n) return 0n\n\n let m = 0n\n let pow = 1n\n\n while (true) {\n if ((n & pow) !== 0n) return m\n m += 1n\n pow <<= 1n\n }\n}\n\nexport function bigIntMin(a: bigint, b: bigint): bigint {\n return a < b ? a : b\n}\n\nexport function bigIntAbs(a: bigint): bigint {\n return a < 0n ? -a : a\n}\n\nexport function bigIntGcd(a: bigint, b: bigint): bigint {\n // using euclidean algorithm is fast enough on smaller numbers\n // https://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations\n\n while (b !== 0n) {\n const t = b\n b = a % b\n a = t\n }\n\n return a\n}\n\nexport function bigIntModPow(base: bigint, exp: bigint, mod: bigint): bigint {\n // using the binary method is good enough for our use case\n // https://en.wikipedia.org/wiki/Modular_exponentiation#Right-to-left_binary_method\n\n base %= mod\n\n let result = 1n\n\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod\n }\n\n exp >>= 1n\n base = base ** 2n % mod\n }\n\n return result\n}\n\n// below code is based on https://github.com/juanelas/bigint-mod-arith, MIT license\n\nfunction eGcd(a: bigint, b: bigint): [bigint, bigint, bigint] {\n let x = 0n\n let y = 1n\n let u = 1n\n let v = 0n\n\n while (a !== 0n) {\n const q = b / a\n const r: bigint = b % a\n const m = x - u * q\n const n = y - v * q\n b = a\n a = r\n x = u\n y = v\n u = m\n v = n\n }\n\n return [b, x, y]\n}\n\nfunction toZn(a: number | bigint, n: number | bigint): bigint {\n if (typeof a === 'number') a = BigInt(a)\n if (typeof n === 'number') n = BigInt(n)\n\n if (n <= 0n) {\n throw new RangeError('n must be > 0')\n }\n\n const aZn = a % n\n\n return aZn < 0n ? aZn + n : aZn\n}\n\nexport function bigIntModInv(a: bigint, n: bigint): bigint {\n const [g, x] = eGcd(toZn(a, n), n)\n\n if (g !== 1n) {\n throw new RangeError(`${a.toString()} does not have inverse modulo ${n.toString()}`) // modular inverse does not exist\n } else {\n return toZn(x, n)\n }\n}\n"]}
1
+ {"version":3,"file":"bigint-utils.js","sourceRoot":"","sources":["../../../src/utils/bigint-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferToReversed } from './buffer-utils.js'\nimport { ICryptoProvider } from './crypto/abstract.js'\n\n/**\n * Get the minimum number of bits required to represent a number\n */\nexport function bigIntBitLength(n: bigint) {\n // not the fastest way, but at least not .toString(2) and not too complex\n // taken from: https://stackoverflow.com/a/76616288/22656950\n\n const i = (n.toString(16).length - 1) * 4\n\n return i + 32 - Math.clz32(Number(n >> BigInt(i)))\n}\n\n/**\n * Convert a big integer to a buffer\n *\n * @param value Value to convert\n * @param length Length of the resulting buffer (by default it's the minimum required)\n * @param le Whether to use little-endian encoding\n */\nexport function bigIntToBuffer(value: bigint, length = 0, le = false): Uint8Array {\n const bits = bigIntBitLength(value)\n const bytes = Math.ceil(bits / 8)\n\n if (length !== 0 && bytes > length) {\n throw new Error('Value out of bounds')\n }\n\n if (length === 0) length = bytes\n\n const buf = new ArrayBuffer(length)\n const u8 = new Uint8Array(buf)\n\n const unaligned = length % 8\n const dv = new DataView(buf, 0, length - unaligned)\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n dv.setBigUint64(i, value & 0xffffffffffffffffn, true)\n value >>= 64n\n }\n\n if (unaligned > 0) {\n for (let i = length - unaligned; i < length; i++) {\n u8[i] = Number(value & 0xffn)\n value >>= 8n\n }\n }\n\n if (!le) u8.reverse()\n\n return u8\n}\n\n/**\n * Convert a buffer to a big integer\n *\n * @param buffer Buffer to convert\n * @param le Whether to use little-endian encoding\n */\nexport function bufferToBigInt(buffer: Uint8Array, le = false): bigint {\n if (le) buffer = bufferToReversed(buffer)\n\n const unaligned = buffer.length % 8\n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength - unaligned)\n\n let res = 0n\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n res = (res << 64n) | BigInt(dv.getBigUint64(i, false))\n }\n\n if (unaligned > 0) {\n for (let i = buffer.length - unaligned; i < buffer.length; i++) {\n res = (res << 8n) | BigInt(buffer[i])\n }\n }\n\n return res\n}\n\n/**\n * Generate a cryptographically safe random big integer of the given size (in bytes)\n * @param size Size in bytes\n */\nexport function randomBigInt(crypto: ICryptoProvider, size: number): bigint {\n return bufferToBigInt(crypto.randomBytes(size))\n}\n\n/**\n * Generate a random big integer of the given size (in bits)\n * @param bits\n */\nexport function randomBigIntBits(crypto: ICryptoProvider, bits: number): bigint {\n let num = randomBigInt(crypto, Math.ceil(bits / 8))\n\n const bitLength = bigIntBitLength(num)\n\n if (bitLength > bits) {\n const toTrim = bitLength - bits\n num >>= BigInt(toTrim)\n }\n\n return num\n}\n\n/**\n * Generate a random big integer in the range [min, max)\n *\n * @param max Maximum value (exclusive)\n * @param min Minimum value (inclusive)\n */\nexport function randomBigIntInRange(crypto: ICryptoProvider, max: bigint, min = 1n): bigint {\n const interval = max - min\n if (interval < 0n) throw new Error('expected min < max')\n\n const byteSize = bigIntBitLength(interval) / 8\n\n let result = randomBigInt(crypto, byteSize)\n while (result > interval) result -= interval\n\n return min + result\n}\n\n/**\n * Compute the multiplicity of 2 in the prime factorization of n\n * @param n\n */\nexport function twoMultiplicity(n: bigint): bigint {\n if (n === 0n) return 0n\n\n let m = 0n\n let pow = 1n\n\n while (true) {\n if ((n & pow) !== 0n) return m\n m += 1n\n pow <<= 1n\n }\n}\n\nexport function bigIntMin(a: bigint, b: bigint): bigint {\n return a < b ? a : b\n}\n\nexport function bigIntAbs(a: bigint): bigint {\n return a < 0n ? -a : a\n}\n\nexport function bigIntGcd(a: bigint, b: bigint): bigint {\n // using euclidean algorithm is fast enough on smaller numbers\n // https://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations\n\n while (b !== 0n) {\n const t = b\n b = a % b\n a = t\n }\n\n return a\n}\n\nexport function bigIntModPow(base: bigint, exp: bigint, mod: bigint): bigint {\n // using the binary method is good enough for our use case\n // https://en.wikipedia.org/wiki/Modular_exponentiation#Right-to-left_binary_method\n\n base %= mod\n\n let result = 1n\n\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod\n }\n\n exp >>= 1n\n base = base ** 2n % mod\n }\n\n return result\n}\n\n// below code is based on https://github.com/juanelas/bigint-mod-arith, MIT license\n\nfunction eGcd(a: bigint, b: bigint): [bigint, bigint, bigint] {\n let x = 0n\n let y = 1n\n let u = 1n\n let v = 0n\n\n while (a !== 0n) {\n const q = b / a\n const r: bigint = b % a\n const m = x - u * q\n const n = y - v * q\n b = a\n a = r\n x = u\n y = v\n u = m\n v = n\n }\n\n return [b, x, y]\n}\n\nfunction toZn(a: number | bigint, n: number | bigint): bigint {\n if (typeof a === 'number') a = BigInt(a)\n if (typeof n === 'number') n = BigInt(n)\n\n if (n <= 0n) {\n throw new RangeError('n must be > 0')\n }\n\n const aZn = a % n\n\n return aZn < 0n ? aZn + n : aZn\n}\n\nexport function bigIntModInv(a: bigint, n: bigint): bigint {\n const [g, x] = eGcd(toZn(a, n), n)\n\n if (g !== 1n) {\n throw new RangeError(`${a.toString()} does not have inverse modulo ${n.toString()}`) // modular inverse does not exist\n } else {\n return toZn(x, n)\n }\n}\n"]}