@mtcute/core 0.1.2 → 0.2.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 (107) hide show
  1. package/cjs/base-client.d.ts +3 -6
  2. package/cjs/base-client.js +12 -20
  3. package/cjs/base-client.js.map +1 -1
  4. package/cjs/network/index.d.ts +1 -1
  5. package/cjs/network/index.js.map +1 -1
  6. package/cjs/network/multi-session-connection.js +17 -4
  7. package/cjs/network/multi-session-connection.js.map +1 -1
  8. package/cjs/network/network-manager.d.ts +1 -1
  9. package/cjs/network/network-manager.js +12 -5
  10. package/cjs/network/network-manager.js.map +1 -1
  11. package/cjs/network/transports/intermediate.test.js +1 -3
  12. package/cjs/network/transports/intermediate.test.js.map +1 -1
  13. package/cjs/network/transports/tcp.test.js +96 -90
  14. package/cjs/network/transports/tcp.test.js.map +1 -1
  15. package/cjs/storage/abstract.d.ts +18 -0
  16. package/cjs/storage/abstract.js.map +1 -1
  17. package/cjs/storage/idb.d.ts +101 -0
  18. package/cjs/storage/idb.js +458 -0
  19. package/cjs/storage/idb.js.map +1 -0
  20. package/cjs/storage/idb.test.d.ts +1 -0
  21. package/cjs/storage/idb.test.js +21 -0
  22. package/cjs/storage/idb.test.js.map +1 -0
  23. package/cjs/storage/index.d.ts +0 -4
  24. package/cjs/storage/index.js +0 -4
  25. package/cjs/storage/index.js.map +1 -1
  26. package/cjs/storage/json-file.d.ts +12 -0
  27. package/cjs/storage/json-file.js +12 -0
  28. package/cjs/storage/json-file.js.map +1 -1
  29. package/cjs/storage/json.js +3 -2
  30. package/cjs/storage/json.js.map +1 -1
  31. package/cjs/storage/json.test.js +4 -5
  32. package/cjs/storage/json.test.js.map +1 -1
  33. package/cjs/storage/localstorage.d.ts +12 -0
  34. package/cjs/storage/localstorage.js +12 -0
  35. package/cjs/storage/localstorage.js.map +1 -1
  36. package/cjs/storage/memory.d.ts +12 -1
  37. package/cjs/storage/memory.js +65 -3
  38. package/cjs/storage/memory.js.map +1 -1
  39. package/cjs/storage/memory.test.js +2 -1
  40. package/cjs/storage/memory.test.js.map +1 -1
  41. package/cjs/utils/controllable-promise.d.ts +0 -5
  42. package/cjs/utils/controllable-promise.js +1 -7
  43. package/cjs/utils/controllable-promise.js.map +1 -1
  44. package/cjs/utils/crypto/mtproto.test.js +26 -23
  45. package/cjs/utils/crypto/mtproto.test.js.map +1 -1
  46. package/cjs/utils/crypto/node.test.js +9 -8
  47. package/cjs/utils/crypto/node.test.js.map +1 -1
  48. package/cjs/utils/crypto/utils.test.js +4 -4
  49. package/cjs/utils/crypto/utils.test.js.map +1 -1
  50. package/cjs/utils/logger.test.js +10 -8
  51. package/cjs/utils/logger.test.js.map +1 -1
  52. package/cjs/utils/peer-utils.js +3 -1
  53. package/cjs/utils/peer-utils.js.map +1 -1
  54. package/esm/base-client.d.ts +3 -6
  55. package/esm/base-client.js +2 -10
  56. package/esm/base-client.js.map +1 -1
  57. package/esm/network/index.d.ts +1 -1
  58. package/esm/network/index.js.map +1 -1
  59. package/esm/network/multi-session-connection.js +17 -4
  60. package/esm/network/multi-session-connection.js.map +1 -1
  61. package/esm/network/network-manager.d.ts +1 -1
  62. package/esm/network/network-manager.js +12 -5
  63. package/esm/network/network-manager.js.map +1 -1
  64. package/esm/network/transports/intermediate.test.js +1 -3
  65. package/esm/network/transports/intermediate.test.js.map +1 -1
  66. package/esm/network/transports/tcp.test.js +96 -90
  67. package/esm/network/transports/tcp.test.js.map +1 -1
  68. package/esm/storage/abstract.d.ts +18 -0
  69. package/esm/storage/abstract.js.map +1 -1
  70. package/esm/storage/idb.d.ts +101 -0
  71. package/esm/storage/idb.js +454 -0
  72. package/esm/storage/idb.js.map +1 -0
  73. package/esm/storage/idb.test.d.ts +1 -0
  74. package/esm/storage/idb.test.js +19 -0
  75. package/esm/storage/idb.test.js.map +1 -0
  76. package/esm/storage/index.d.ts +0 -4
  77. package/esm/storage/index.js +0 -4
  78. package/esm/storage/index.js.map +1 -1
  79. package/esm/storage/json-file.d.ts +12 -0
  80. package/esm/storage/json-file.js +12 -0
  81. package/esm/storage/json-file.js.map +1 -1
  82. package/esm/storage/json.js +3 -2
  83. package/esm/storage/json.js.map +1 -1
  84. package/esm/storage/json.test.js +4 -5
  85. package/esm/storage/json.test.js.map +1 -1
  86. package/esm/storage/localstorage.d.ts +12 -0
  87. package/esm/storage/localstorage.js +12 -0
  88. package/esm/storage/localstorage.js.map +1 -1
  89. package/esm/storage/memory.d.ts +12 -1
  90. package/esm/storage/memory.js +65 -3
  91. package/esm/storage/memory.js.map +1 -1
  92. package/esm/storage/memory.test.js +2 -1
  93. package/esm/storage/memory.test.js.map +1 -1
  94. package/esm/utils/controllable-promise.d.ts +0 -5
  95. package/esm/utils/controllable-promise.js +0 -5
  96. package/esm/utils/controllable-promise.js.map +1 -1
  97. package/esm/utils/crypto/mtproto.test.js +27 -24
  98. package/esm/utils/crypto/mtproto.test.js.map +1 -1
  99. package/esm/utils/crypto/node.test.js +9 -8
  100. package/esm/utils/crypto/node.test.js.map +1 -1
  101. package/esm/utils/crypto/utils.test.js +4 -4
  102. package/esm/utils/crypto/utils.test.js.map +1 -1
  103. package/esm/utils/logger.test.js +10 -8
  104. package/esm/utils/logger.test.js.map +1 -1
  105. package/esm/utils/peer-utils.js +3 -1
  106. package/esm/utils/peer-utils.js.map +1 -1
  107. package/package.json +20 -16
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/storage/memory.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { LruMap, toggleChannelIdMark } from '../utils/index.js'\nimport { ITelegramStorage } from './abstract.js'\n\nconst CURRENT_VERSION = 1\n\ntype PeerInfoWithUpdated = ITelegramStorage.PeerInfo & { updated: number }\n\nexport interface MemorySessionState {\n // forwards compatibility for persistent storages\n $version: typeof CURRENT_VERSION\n\n defaultDcs: ITelegramStorage.DcOptions | null\n authKeys: Map<number, Uint8Array>\n authKeysTemp: Map<string, Uint8Array>\n authKeysTempExpiry: Map<string, number>\n\n // marked peer id -> entity info\n entities: Map<number, PeerInfoWithUpdated>\n // phone number -> peer id\n phoneIndex: Map<string, number>\n // username -> peer id\n usernameIndex: Map<string, number>\n\n // common pts, date, seq, qts\n gpts: [number, number, number, number] | null\n // channel pts\n pts: Map<number, number>\n\n // state for fsm\n fsm: Map<\n string,\n {\n // value\n v: unknown\n // expires\n e?: number\n }\n >\n\n // state for rate limiter\n rl: Map<\n string,\n {\n // reset\n res: number\n // remaining\n rem: number\n }\n >\n\n self: ITelegramStorage.SelfInfo | null\n}\n\nconst USERNAME_TTL = 86400000 // 24 hours\n\nexport class MemoryStorage implements ITelegramStorage {\n protected _state!: MemorySessionState\n private _cachedInputPeers: LruMap<number, tl.TypeInputPeer> = new LruMap(100)\n\n private _cachedFull: LruMap<number, tl.TypeUser | tl.TypeChat>\n\n private _vacuumTimeout?: NodeJS.Timeout\n private _vacuumInterval: number\n\n constructor(params?: {\n /**\n * Maximum number of cached full entities.\n *\n * Note that full entities are **NOT** persisted\n * to the disk (in case this storage is backed\n * by a local storage), and only available within\n * the current runtime.\n *\n * @default `100`, use `0` to disable\n */\n cacheSize?: number\n\n /**\n * Interval in milliseconds for vacuuming the storage.\n *\n * When vacuuming, the storage will remove expired FSM\n * states to reduce memory usage.\n *\n * @default `300_000` (5 minutes)\n */\n vacuumInterval?: number\n }) {\n this.reset(true)\n this._cachedFull = new LruMap(params?.cacheSize ?? 100)\n this._vacuumInterval = params?.vacuumInterval ?? 300_000\n }\n\n load(): void {\n this._vacuumTimeout = setInterval(this._vacuum.bind(this), this._vacuumInterval)\n }\n\n destroy(): void {\n clearInterval(this._vacuumTimeout)\n }\n\n reset(withAuthKeys = false): void {\n this._state = {\n $version: CURRENT_VERSION,\n defaultDcs: null,\n authKeys: withAuthKeys ? new Map<number, Uint8Array>() : this._state.authKeys,\n authKeysTemp: withAuthKeys ? new Map<string, Uint8Array>() : this._state.authKeysTemp,\n authKeysTempExpiry: withAuthKeys ? new Map<string, number>() : this._state.authKeysTempExpiry,\n entities: new Map(),\n phoneIndex: new Map(),\n usernameIndex: new Map(),\n gpts: null,\n pts: new Map(),\n fsm: new Map(),\n rl: new Map(),\n self: null,\n }\n }\n\n /**\n * Set a given object as an underlying state.\n *\n * Note that this object will be used as-is, so if\n * you plan on using it somewhere else, be sure to copy it beforehand.\n */\n protected _setStateFrom(obj: MemorySessionState): void {\n if (obj.$version !== CURRENT_VERSION) return\n\n // populate indexes if needed\n let populate = false\n\n if (!obj.phoneIndex?.size) {\n obj.phoneIndex = new Map()\n populate = true\n }\n if (!obj.usernameIndex?.size) {\n obj.usernameIndex = new Map()\n populate = true\n }\n\n if (populate) {\n Object.values(obj.entities).forEach((ent: ITelegramStorage.PeerInfo) => {\n if (ent.phone) obj.phoneIndex.set(ent.phone, ent.id)\n\n if (ent.username) {\n obj.usernameIndex.set(ent.username, ent.id)\n }\n })\n }\n\n this._state = obj\n }\n\n private _vacuum(): void {\n // remove expired entities from fsm and rate limit storages\n\n const now = Date.now()\n\n // make references in advance to avoid lookups\n const state = this._state\n const fsm = state.fsm\n const rl = state.rl\n\n for (const [key, item] of fsm) {\n if (item.e && item.e < now) {\n fsm.delete(key)\n }\n }\n\n for (const [key, item] of rl) {\n if (item.res < now) {\n rl.delete(key)\n }\n }\n }\n\n getDefaultDcs(): ITelegramStorage.DcOptions | null {\n return this._state.defaultDcs\n }\n\n setDefaultDcs(dcs: ITelegramStorage.DcOptions | null): void {\n this._state.defaultDcs = dcs\n }\n\n setTempAuthKeyFor(dcId: number, index: number, key: Uint8Array | null, expiresAt: number): void {\n const k = `${dcId}:${index}`\n\n if (key) {\n this._state.authKeysTemp.set(k, key)\n this._state.authKeysTempExpiry.set(k, expiresAt)\n } else {\n this._state.authKeysTemp.delete(k)\n this._state.authKeysTempExpiry.delete(k)\n }\n }\n\n setAuthKeyFor(dcId: number, key: Uint8Array | null): void {\n if (key) {\n this._state.authKeys.set(dcId, key)\n } else {\n this._state.authKeys.delete(dcId)\n }\n }\n\n getAuthKeyFor(dcId: number, tempIndex?: number): Uint8Array | null {\n if (tempIndex !== undefined) {\n const k = `${dcId}:${tempIndex}`\n\n if (Date.now() > (this._state.authKeysTempExpiry.get(k) ?? 0)) {\n return null\n }\n\n return this._state.authKeysTemp.get(k) ?? null\n }\n\n return this._state.authKeys.get(dcId) ?? null\n }\n\n dropAuthKeysFor(dcId: number): void {\n this._state.authKeys.delete(dcId)\n\n for (const key of this._state.authKeysTemp.keys()) {\n if (key.startsWith(`${dcId}:`)) {\n this._state.authKeysTemp.delete(key)\n this._state.authKeysTempExpiry.delete(key)\n }\n }\n }\n\n updatePeers(peers: PeerInfoWithUpdated[]): void {\n for (const peer of peers) {\n this._cachedFull.set(peer.id, peer.full)\n\n peer.updated = Date.now()\n const old = this._state.entities.get(peer.id)\n\n if (old) {\n // delete old index entries if needed\n if (old.username && peer.username !== old.username) {\n this._state.usernameIndex.delete(old.username)\n }\n if (old.phone && old.phone !== peer.phone) {\n this._state.phoneIndex.delete(old.phone)\n }\n }\n\n if (peer.username) {\n this._state.usernameIndex.set(peer.username, peer.id)\n }\n\n if (peer.phone) this._state.phoneIndex.set(peer.phone, peer.id)\n\n this._state.entities.set(peer.id, peer)\n }\n }\n\n protected _getInputPeer(peerInfo?: ITelegramStorage.PeerInfo): tl.TypeInputPeer | null {\n if (!peerInfo) return null\n\n switch (peerInfo.type) {\n case 'user':\n return {\n _: 'inputPeerUser',\n userId: peerInfo.id,\n accessHash: peerInfo.accessHash,\n }\n case 'chat':\n return {\n _: 'inputPeerChat',\n chatId: -peerInfo.id,\n }\n case 'channel':\n return {\n _: 'inputPeerChannel',\n channelId: toggleChannelIdMark(peerInfo.id),\n accessHash: peerInfo.accessHash,\n }\n }\n }\n\n getPeerById(peerId: number): tl.TypeInputPeer | null {\n if (this._cachedInputPeers.has(peerId)) {\n return this._cachedInputPeers.get(peerId)!\n }\n const peer = this._getInputPeer(this._state.entities.get(peerId))\n if (peer) this._cachedInputPeers.set(peerId, peer)\n\n return peer\n }\n\n getPeerByPhone(phone: string): tl.TypeInputPeer | null {\n const peerId = this._state.phoneIndex.get(phone)\n if (!peerId) return null\n\n return this._getInputPeer(this._state.entities.get(peerId))\n }\n\n getPeerByUsername(username: string): tl.TypeInputPeer | null {\n const id = this._state.usernameIndex.get(username.toLowerCase())\n if (!id) return null\n const peer = this._state.entities.get(id)\n if (!peer) return null\n\n if (Date.now() - peer.updated > USERNAME_TTL) return null\n\n return this._getInputPeer(peer)\n }\n\n getSelf(): ITelegramStorage.SelfInfo | null {\n return this._state.self\n }\n\n setSelf(self: ITelegramStorage.SelfInfo | null): void {\n this._state.self = self\n }\n\n setManyChannelPts(values: Map<number, number>): void {\n for (const [id, pts] of values) {\n this._state.pts.set(id, pts)\n }\n }\n\n getChannelPts(entityId: number): number | null {\n return this._state.pts.get(entityId) ?? null\n }\n\n getUpdatesState(): [number, number, number, number] | null {\n return this._state.gpts ?? null\n }\n\n setUpdatesPts(val: number): void {\n if (!this._state.gpts) this._state.gpts = [0, 0, 0, 0]\n this._state.gpts[0] = val\n }\n\n setUpdatesQts(val: number): void {\n if (!this._state.gpts) this._state.gpts = [0, 0, 0, 0]\n this._state.gpts[1] = val\n }\n\n setUpdatesDate(val: number): void {\n if (!this._state.gpts) this._state.gpts = [0, 0, 0, 0]\n this._state.gpts[2] = val\n }\n\n setUpdatesSeq(val: number): void {\n if (!this._state.gpts) this._state.gpts = [0, 0, 0, 0]\n this._state.gpts[3] = val\n }\n\n getFullPeerById(id: number): tl.TypeUser | tl.TypeChat | null {\n return this._cachedFull.get(id) ?? null\n }\n\n // IStateStorage implementation\n\n getState(key: string): unknown {\n const val = this._state.fsm.get(key)\n if (!val) return null\n\n if (val.e && val.e < Date.now()) {\n // expired\n this._state.fsm.delete(key)\n\n return null\n }\n\n return val.v\n }\n\n setState(key: string, state: unknown, ttl?: number): void {\n this._state.fsm.set(key, {\n v: state,\n e: ttl ? Date.now() + ttl * 1000 : undefined,\n })\n }\n\n deleteState(key: string): void {\n this._state.fsm.delete(key)\n }\n\n getCurrentScene(key: string): string | null {\n return this.getState(`$current_scene_${key}`) as string | null\n }\n\n setCurrentScene(key: string, scene: string, ttl?: number): void {\n return this.setState(`$current_scene_${key}`, scene, ttl)\n }\n\n deleteCurrentScene(key: string): void {\n this._state.fsm.delete(`$current_scene_${key}`)\n }\n\n getRateLimit(key: string, limit: number, window: number): [number, number] {\n // leaky bucket\n const now = Date.now()\n\n const item = this._state.rl.get(key)\n\n if (!item) {\n const state = {\n res: now + window * 1000,\n rem: limit,\n }\n\n this._state.rl.set(key, state)\n\n return [state.rem, state.res]\n }\n\n if (item.res < now) {\n // expired\n\n const state = {\n res: now + window * 1000,\n rem: limit,\n }\n\n this._state.rl.set(key, state)\n\n return [state.rem, state.res]\n }\n\n item.rem = item.rem > 0 ? item.rem - 1 : 0\n\n return [item.rem, item.res]\n }\n\n resetRateLimit(key: string): void {\n this._state.rl.delete(key)\n }\n}\n"]}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/storage/memory.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { LruMap, toggleChannelIdMark } from '../utils/index.js'\nimport { ITelegramStorage } from './abstract.js'\n\nconst CURRENT_VERSION = 2\n\ntype PeerInfoWithUpdated = ITelegramStorage.PeerInfo & { updated: number }\n\nexport interface MemorySessionState {\n // forwards compatibility for persistent storages\n $version: typeof CURRENT_VERSION\n\n defaultDcs: ITelegramStorage.DcOptions | null\n authKeys: Map<number, Uint8Array>\n authKeysTemp: Map<string, Uint8Array>\n authKeysTempExpiry: Map<string, number>\n\n // marked peer id -> entity info\n entities: Map<number, PeerInfoWithUpdated>\n // phone number -> peer id\n phoneIndex: Map<string, number>\n // username -> peer id\n usernameIndex: Map<string, number>\n\n // reference messages. peer id -> `${chat id}:${msg id}][]\n refs: Map<number, Set<string>>\n\n // common pts, date, seq, qts\n gpts: [number, number, number, number] | null\n // channel pts\n pts: Map<number, number>\n\n // state for fsm\n fsm: Map<\n string,\n {\n // value\n v: unknown\n // expires\n e?: number\n }\n >\n\n // state for rate limiter\n rl: Map<\n string,\n {\n // reset\n res: number\n // remaining\n rem: number\n }\n >\n\n self: ITelegramStorage.SelfInfo | null\n}\n\nconst USERNAME_TTL = 86400000 // 24 hours\n\n/**\n * In-memory storage implementation for mtcute.\n *\n * This storage is **not persistent**, meaning that all data\n * **will** be lost on restart. Only use this storage for testing,\n * or if you know what you're doing.\n */\nexport class MemoryStorage implements ITelegramStorage {\n protected _state!: MemorySessionState\n private _cachedInputPeers: LruMap<number, tl.TypeInputPeer> = new LruMap(100)\n\n private _cachedFull: LruMap<number, tl.TypeUser | tl.TypeChat>\n\n private _vacuumTimeout?: NodeJS.Timeout\n private _vacuumInterval: number\n\n constructor(params?: {\n /**\n * Maximum number of cached full entities.\n *\n * Note that full entities are **NOT** persisted\n * to the disk (in case this storage is backed\n * by a local storage), and only available within\n * the current runtime.\n *\n * @default `100`, use `0` to disable\n */\n cacheSize?: number\n\n /**\n * Interval in milliseconds for vacuuming the storage.\n *\n * When vacuuming, the storage will remove expired FSM\n * states to reduce memory usage.\n *\n * @default `300_000` (5 minutes)\n */\n vacuumInterval?: number\n }) {\n this.reset(true)\n this._cachedFull = new LruMap(params?.cacheSize ?? 100)\n this._vacuumInterval = params?.vacuumInterval ?? 300_000\n }\n\n load(): void {\n this._vacuumTimeout = setInterval(this._vacuum.bind(this), this._vacuumInterval)\n }\n\n destroy(): void {\n clearInterval(this._vacuumTimeout)\n }\n\n reset(withAuthKeys = false): void {\n this._state = {\n $version: CURRENT_VERSION,\n defaultDcs: null,\n authKeys: withAuthKeys ? new Map<number, Uint8Array>() : this._state.authKeys,\n authKeysTemp: withAuthKeys ? new Map<string, Uint8Array>() : this._state.authKeysTemp,\n authKeysTempExpiry: withAuthKeys ? new Map<string, number>() : this._state.authKeysTempExpiry,\n entities: new Map(),\n phoneIndex: new Map(),\n usernameIndex: new Map(),\n refs: new Map(),\n gpts: null,\n pts: new Map(),\n fsm: new Map(),\n rl: new Map(),\n self: null,\n }\n this._cachedInputPeers?.clear()\n this._cachedFull?.clear()\n }\n\n /**\n * Set a given object as an underlying state.\n *\n * Note that this object will be used as-is, so if\n * you plan on using it somewhere else, be sure to copy it beforehand.\n */\n protected _setStateFrom(obj: MemorySessionState): void {\n let ver = obj.$version as number\n\n if (ver === 1) {\n // v2: introduced message references\n obj.refs = new Map()\n obj.$version = ver = 2\n }\n if (ver !== CURRENT_VERSION) return\n\n // populate indexes if needed\n let populate = false\n\n if (!obj.phoneIndex?.size) {\n obj.phoneIndex = new Map()\n populate = true\n }\n if (!obj.usernameIndex?.size) {\n obj.usernameIndex = new Map()\n populate = true\n }\n\n if (populate) {\n Object.values(obj.entities).forEach((ent: ITelegramStorage.PeerInfo) => {\n if (ent.phone) obj.phoneIndex.set(ent.phone, ent.id)\n\n if (ent.username) {\n obj.usernameIndex.set(ent.username, ent.id)\n }\n })\n }\n\n this._state = obj\n }\n\n private _vacuum(): void {\n // remove expired entities from fsm and rate limit storages\n\n const now = Date.now()\n\n // make references in advance to avoid lookups\n const state = this._state\n const fsm = state.fsm\n const rl = state.rl\n\n for (const [key, item] of fsm) {\n if (item.e && item.e < now) {\n fsm.delete(key)\n }\n }\n\n for (const [key, item] of rl) {\n if (item.res < now) {\n rl.delete(key)\n }\n }\n }\n\n getDefaultDcs(): ITelegramStorage.DcOptions | null {\n return this._state.defaultDcs\n }\n\n setDefaultDcs(dcs: ITelegramStorage.DcOptions | null): void {\n this._state.defaultDcs = dcs\n }\n\n setTempAuthKeyFor(dcId: number, index: number, key: Uint8Array | null, expiresAt: number): void {\n const k = `${dcId}:${index}`\n\n if (key) {\n this._state.authKeysTemp.set(k, key)\n this._state.authKeysTempExpiry.set(k, expiresAt)\n } else {\n this._state.authKeysTemp.delete(k)\n this._state.authKeysTempExpiry.delete(k)\n }\n }\n\n setAuthKeyFor(dcId: number, key: Uint8Array | null): void {\n if (key) {\n this._state.authKeys.set(dcId, key)\n } else {\n this._state.authKeys.delete(dcId)\n }\n }\n\n getAuthKeyFor(dcId: number, tempIndex?: number): Uint8Array | null {\n if (tempIndex !== undefined) {\n const k = `${dcId}:${tempIndex}`\n\n if (Date.now() > (this._state.authKeysTempExpiry.get(k) ?? 0)) {\n return null\n }\n\n return this._state.authKeysTemp.get(k) ?? null\n }\n\n return this._state.authKeys.get(dcId) ?? null\n }\n\n dropAuthKeysFor(dcId: number): void {\n this._state.authKeys.delete(dcId)\n\n for (const key of this._state.authKeysTemp.keys()) {\n if (key.startsWith(`${dcId}:`)) {\n this._state.authKeysTemp.delete(key)\n this._state.authKeysTempExpiry.delete(key)\n }\n }\n }\n\n updatePeers(peers: PeerInfoWithUpdated[]): void {\n for (const peer of peers) {\n this._cachedFull.set(peer.id, peer.full)\n\n peer.updated = Date.now()\n const old = this._state.entities.get(peer.id)\n\n if (old) {\n // delete old index entries if needed\n if (old.username && peer.username !== old.username) {\n this._state.usernameIndex.delete(old.username)\n }\n if (old.phone && old.phone !== peer.phone) {\n this._state.phoneIndex.delete(old.phone)\n }\n }\n\n if (peer.username) {\n this._state.usernameIndex.set(peer.username, peer.id)\n }\n\n if (peer.phone) this._state.phoneIndex.set(peer.phone, peer.id)\n\n this._state.entities.set(peer.id, peer)\n\n // no point in storing references anymore, since we have the full peer\n if (this._state.refs.has(peer.id)) {\n this._state.refs.delete(peer.id)\n }\n }\n }\n\n protected _getInputPeer(peerInfo?: ITelegramStorage.PeerInfo): tl.TypeInputPeer | null {\n if (!peerInfo) return null\n\n switch (peerInfo.type) {\n case 'user':\n return {\n _: 'inputPeerUser',\n userId: peerInfo.id,\n accessHash: peerInfo.accessHash,\n }\n case 'chat':\n return {\n _: 'inputPeerChat',\n chatId: -peerInfo.id,\n }\n case 'channel':\n return {\n _: 'inputPeerChannel',\n channelId: toggleChannelIdMark(peerInfo.id),\n accessHash: peerInfo.accessHash,\n }\n }\n }\n\n private _findPeerByRef(peerId: number): tl.TypeInputPeer | null {\n const refs = this._state.refs.get(peerId)\n if (!refs || refs.size === 0) return null\n\n const [ref] = refs.values()\n const [chatId, msgId] = ref.split(':').map(Number)\n\n const chatPeer = this._getInputPeer(this._state.entities.get(chatId))\n if (!chatPeer) return null\n\n if (peerId > 0) {\n // user\n return {\n _: 'inputPeerUserFromMessage',\n msgId,\n userId: peerId,\n peer: chatPeer,\n }\n }\n\n // channel\n return {\n _: 'inputPeerChannelFromMessage',\n msgId,\n channelId: toggleChannelIdMark(peerId),\n peer: chatPeer,\n }\n }\n\n getPeerById(peerId: number): tl.TypeInputPeer | null {\n if (this._cachedInputPeers.has(peerId)) {\n return this._cachedInputPeers.get(peerId)!\n }\n\n let peer = this._getInputPeer(this._state.entities.get(peerId))\n if (!peer) peer = this._findPeerByRef(peerId)\n if (peer) this._cachedInputPeers.set(peerId, peer)\n\n return peer\n }\n\n getPeerByPhone(phone: string): tl.TypeInputPeer | null {\n const peerId = this._state.phoneIndex.get(phone)\n if (!peerId) return null\n\n return this._getInputPeer(this._state.entities.get(peerId))\n }\n\n getPeerByUsername(username: string): tl.TypeInputPeer | null {\n const id = this._state.usernameIndex.get(username.toLowerCase())\n if (!id) return null\n const peer = this._state.entities.get(id)\n if (!peer) return null\n\n if (Date.now() - peer.updated > USERNAME_TTL) return null\n\n return this._getInputPeer(peer)\n }\n\n saveReferenceMessage(peerId: number, chatId: number, messageId: number): void {\n if (!this._state.refs.has(peerId)) {\n this._state.refs.set(peerId, new Set())\n }\n\n this._state.refs.get(peerId)!.add(`${chatId}:${messageId}`)\n }\n\n deleteReferenceMessages(chatId: number, messageIds: number[]): void {\n // not the most efficient way, but it's fine\n for (const refs of this._state.refs.values()) {\n for (const msg of messageIds) {\n refs.delete(`${chatId}:${msg}`)\n }\n }\n }\n\n getSelf(): ITelegramStorage.SelfInfo | null {\n return this._state.self\n }\n\n setSelf(self: ITelegramStorage.SelfInfo | null): void {\n this._state.self = self\n }\n\n setManyChannelPts(values: Map<number, number>): void {\n for (const [id, pts] of values) {\n this._state.pts.set(id, pts)\n }\n }\n\n getChannelPts(entityId: number): number | null {\n return this._state.pts.get(entityId) ?? null\n }\n\n getUpdatesState(): [number, number, number, number] | null {\n return this._state.gpts ?? null\n }\n\n setUpdatesPts(val: number): void {\n if (!this._state.gpts) this._state.gpts = [0, 0, 0, 0]\n this._state.gpts[0] = val\n }\n\n setUpdatesQts(val: number): void {\n if (!this._state.gpts) this._state.gpts = [0, 0, 0, 0]\n this._state.gpts[1] = val\n }\n\n setUpdatesDate(val: number): void {\n if (!this._state.gpts) this._state.gpts = [0, 0, 0, 0]\n this._state.gpts[2] = val\n }\n\n setUpdatesSeq(val: number): void {\n if (!this._state.gpts) this._state.gpts = [0, 0, 0, 0]\n this._state.gpts[3] = val\n }\n\n getFullPeerById(id: number): tl.TypeUser | tl.TypeChat | null {\n return this._cachedFull.get(id) ?? null\n }\n\n // IStateStorage implementation\n\n getState(key: string): unknown {\n const val = this._state.fsm.get(key)\n if (!val) return null\n\n if (val.e && val.e < Date.now()) {\n // expired\n this._state.fsm.delete(key)\n\n return null\n }\n\n return val.v\n }\n\n setState(key: string, state: unknown, ttl?: number): void {\n this._state.fsm.set(key, {\n v: state,\n e: ttl ? Date.now() + ttl * 1000 : undefined,\n })\n }\n\n deleteState(key: string): void {\n this._state.fsm.delete(key)\n }\n\n getCurrentScene(key: string): string | null {\n return this.getState(`$current_scene_${key}`) as string | null\n }\n\n setCurrentScene(key: string, scene: string, ttl?: number): void {\n return this.setState(`$current_scene_${key}`, scene, ttl)\n }\n\n deleteCurrentScene(key: string): void {\n this._state.fsm.delete(`$current_scene_${key}`)\n }\n\n getRateLimit(key: string, limit: number, window: number): [number, number] {\n // leaky bucket\n const now = Date.now()\n\n const item = this._state.rl.get(key)\n\n if (!item) {\n const state = {\n res: now + window * 1000,\n rem: limit,\n }\n\n this._state.rl.set(key, state)\n\n return [state.rem, state.res]\n }\n\n if (item.res < now) {\n // expired\n\n const state = {\n res: now + window * 1000,\n rem: limit,\n }\n\n this._state.rl.set(key, state)\n\n return [state.rem, state.res]\n }\n\n item.rem = item.rem > 0 ? item.rem - 1 : 0\n\n return [item.rem, item.res]\n }\n\n resetRateLimit(key: string): void {\n this._state.rl.delete(key)\n }\n}\n"]}
@@ -12,7 +12,7 @@ const memory_js_1 = require("./memory.js");
12
12
  constructor() {
13
13
  super();
14
14
  this._setStateFrom({
15
- $version: 1,
15
+ $version: 2,
16
16
  defaultDcs: null,
17
17
  authKeys: new Map(),
18
18
  authKeysTemp: new Map(),
@@ -24,6 +24,7 @@ const memory_js_1 = require("./memory.js");
24
24
  pts: new Map(),
25
25
  fsm: new Map(),
26
26
  rl: new Map(),
27
+ refs: new Map(),
27
28
  self: null,
28
29
  });
29
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory.test.js","sourceRoot":"","sources":["../../../src/storage/memory.test.ts"],"names":[],"mappings":";;AAAA,mCAA6C;AAE7C,uCAA4D;AAE5D,2CAA2C;AAE3C,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,IAAA,kBAAW,EAAC,IAAI,yBAAa,EAAE,CAAC,CAAA;IAChC,IAAA,uBAAgB,EAAC,IAAI,yBAAa,EAAE,CAAC,CAAA;IAErC,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;QACvB,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;YAC9C,MAAM,qBAAsB,SAAQ,yBAAa;gBAC7C;oBACI,KAAK,EAAE,CAAA;oBACP,IAAI,CAAC,aAAa,CAAC;wBACf,QAAQ,EAAE,CAAC;wBACX,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI,GAAG,EAAE;wBACnB,YAAY,EAAE,IAAI,GAAG,EAAE;wBACvB,kBAAkB,EAAE,IAAI,GAAG,EAAE;wBAC7B,QAAQ,EAAE,IAAI,GAAG,EAAE;wBACnB,UAAU,EAAE,IAAI,GAAG,EAAE;wBACrB,aAAa,EAAE,IAAI,GAAG,EAAE;wBACxB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBAClB,GAAG,EAAE,IAAI,GAAG,EAAE;wBACd,GAAG,EAAE,IAAI,GAAG,EAAE;wBACd,EAAE,EAAE,IAAI,GAAG,EAAE;wBACb,IAAI,EAAE,IAAI;qBACb,CAAC,CAAA;gBACN,CAAC;aACJ;YAED,MAAM,CAAC,GAAG,IAAI,qBAAqB,EAAE,CAAA;YAErC,IAAA,eAAM,EAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;QAEF,IAAA,WAAE,EAAC,0CAA0C,EAAE,GAAG,EAAE;YAChD,MAAM,qBAAsB,SAAQ,yBAAa;gBAC7C;oBACI,KAAK,EAAE,CAAA;oBACP,2BAA2B;oBAC3B,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAS,CAAC,CAAA;gBAC9C,CAAC;aACJ;YAED,MAAM,CAAC,GAAG,IAAI,qBAAqB,EAAE,CAAA;YAErC,IAAA,eAAM,EAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { testStateStorage, testStorage } from '@mtcute/test'\n\nimport { MemoryStorage } from './memory.js'\n\ndescribe('MemoryStorage', () => {\n testStorage(new MemoryStorage())\n testStateStorage(new MemoryStorage())\n\n describe('extending', () => {\n it('should allow populating from an object', () => {\n class ExtendedMemoryStorage extends MemoryStorage {\n constructor() {\n super()\n this._setStateFrom({\n $version: 1,\n defaultDcs: null,\n authKeys: new Map(),\n authKeysTemp: new Map(),\n authKeysTempExpiry: new Map(),\n entities: new Map(),\n phoneIndex: new Map(),\n usernameIndex: new Map(),\n gpts: [1, 2, 3, 4],\n pts: new Map(),\n fsm: new Map(),\n rl: new Map(),\n self: null,\n })\n }\n }\n\n const s = new ExtendedMemoryStorage()\n\n expect(s.getUpdatesState()).toEqual([1, 2, 3, 4])\n })\n\n it('should silently fail if version is wrong', () => {\n class ExtendedMemoryStorage extends MemoryStorage {\n constructor() {\n super()\n // eslint-disable-next-line\n this._setStateFrom({ $version: 0 } as any)\n }\n }\n\n const s = new ExtendedMemoryStorage()\n\n expect(s.getUpdatesState()).toEqual(null)\n })\n })\n})\n"]}
1
+ {"version":3,"file":"memory.test.js","sourceRoot":"","sources":["../../../src/storage/memory.test.ts"],"names":[],"mappings":";;AAAA,mCAA6C;AAE7C,uCAA4D;AAE5D,2CAA2C;AAE3C,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,IAAA,kBAAW,EAAC,IAAI,yBAAa,EAAE,CAAC,CAAA;IAChC,IAAA,uBAAgB,EAAC,IAAI,yBAAa,EAAE,CAAC,CAAA;IAErC,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;QACvB,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;YAC9C,MAAM,qBAAsB,SAAQ,yBAAa;gBAC7C;oBACI,KAAK,EAAE,CAAA;oBACP,IAAI,CAAC,aAAa,CAAC;wBACf,QAAQ,EAAE,CAAC;wBACX,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI,GAAG,EAAE;wBACnB,YAAY,EAAE,IAAI,GAAG,EAAE;wBACvB,kBAAkB,EAAE,IAAI,GAAG,EAAE;wBAC7B,QAAQ,EAAE,IAAI,GAAG,EAAE;wBACnB,UAAU,EAAE,IAAI,GAAG,EAAE;wBACrB,aAAa,EAAE,IAAI,GAAG,EAAE;wBACxB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBAClB,GAAG,EAAE,IAAI,GAAG,EAAE;wBACd,GAAG,EAAE,IAAI,GAAG,EAAE;wBACd,EAAE,EAAE,IAAI,GAAG,EAAE;wBACb,IAAI,EAAE,IAAI,GAAG,EAAE;wBACf,IAAI,EAAE,IAAI;qBACb,CAAC,CAAA;gBACN,CAAC;aACJ;YAED,MAAM,CAAC,GAAG,IAAI,qBAAqB,EAAE,CAAA;YAErC,IAAA,eAAM,EAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;QAEF,IAAA,WAAE,EAAC,0CAA0C,EAAE,GAAG,EAAE;YAChD,MAAM,qBAAsB,SAAQ,yBAAa;gBAC7C;oBACI,KAAK,EAAE,CAAA;oBACP,2BAA2B;oBAC3B,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAS,CAAC,CAAA;gBAC9C,CAAC;aACJ;YAED,MAAM,CAAC,GAAG,IAAI,qBAAqB,EAAE,CAAA;YAErC,IAAA,eAAM,EAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { testStateStorage, testStorage } from '@mtcute/test'\n\nimport { MemoryStorage } from './memory.js'\n\ndescribe('MemoryStorage', () => {\n testStorage(new MemoryStorage())\n testStateStorage(new MemoryStorage())\n\n describe('extending', () => {\n it('should allow populating from an object', () => {\n class ExtendedMemoryStorage extends MemoryStorage {\n constructor() {\n super()\n this._setStateFrom({\n $version: 2,\n defaultDcs: null,\n authKeys: new Map(),\n authKeysTemp: new Map(),\n authKeysTempExpiry: new Map(),\n entities: new Map(),\n phoneIndex: new Map(),\n usernameIndex: new Map(),\n gpts: [1, 2, 3, 4],\n pts: new Map(),\n fsm: new Map(),\n rl: new Map(),\n refs: new Map(),\n self: null,\n })\n }\n }\n\n const s = new ExtendedMemoryStorage()\n\n expect(s.getUpdatesState()).toEqual([1, 2, 3, 4])\n })\n\n it('should silently fail if version is wrong', () => {\n class ExtendedMemoryStorage extends MemoryStorage {\n constructor() {\n super()\n // eslint-disable-next-line\n this._setStateFrom({ $version: 0 } as any)\n }\n }\n\n const s = new ExtendedMemoryStorage()\n\n expect(s.getUpdatesState()).toEqual(null)\n })\n })\n})\n"]}
@@ -5,11 +5,6 @@ export type ControllablePromise<T = unknown> = Promise<T> & {
5
5
  resolve(val: T): void;
6
6
  reject(err?: unknown): void;
7
7
  };
8
- /**
9
- * The promise was cancelled
10
- */
11
- export declare class PromiseCancelledError extends Error {
12
- }
13
8
  /**
14
9
  * Creates a promise that can be resolved or rejected from outside.
15
10
  */
@@ -1,12 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createControllablePromise = exports.PromiseCancelledError = void 0;
4
- /**
5
- * The promise was cancelled
6
- */
7
- class PromiseCancelledError extends Error {
8
- }
9
- exports.PromiseCancelledError = PromiseCancelledError;
3
+ exports.createControllablePromise = void 0;
10
4
  /**
11
5
  * Creates a promise that can be resolved or rejected from outside.
12
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"controllable-promise.js","sourceRoot":"","sources":["../../../src/utils/controllable-promise.ts"],"names":[],"mappings":";;;AAQA;;GAEG;AACH,MAAa,qBAAsB,SAAQ,KAAK;CAAG;AAAnD,sDAAmD;AAEnD;;GAEG;AACH,SAAgB,yBAAyB;IACrC,IAAI,QAA2C,CAAA;IAC/C,IAAI,OAAyC,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/C,QAAQ,GAAG,OAAO,CAAA;QAClB,OAAO,GAAG,MAAM,CAAA;IACpB,CAAC,CAAC,CAGD;IAAC,OAAkC,CAAC,OAAO,GAAG,QAAS,CACvD;IAAC,OAAkC,CAAC,MAAM,GAAG,OAAQ,CAAA;IAEtD,OAAO,OAAiC,CAAA;AAC5C,CAAC;AAbD,8DAaC","sourcesContent":["/**\n * A promise that can be resolved or rejected from outside.\n */\nexport type ControllablePromise<T = unknown> = Promise<T> & {\n resolve(val: T): void\n reject(err?: unknown): void\n}\n\n/**\n * The promise was cancelled\n */\nexport class PromiseCancelledError extends Error {}\n\n/**\n * Creates a promise that can be resolved or rejected from outside.\n */\nexport function createControllablePromise<T = unknown>(): ControllablePromise<T> {\n let _resolve: ControllablePromise<T>['resolve']\n let _reject: ControllablePromise<T>['reject']\n const promise = new Promise<T>((resolve, reject) => {\n _resolve = resolve\n _reject = reject\n })\n // ts doesn't like this, but it's fine\n\n ;(promise as ControllablePromise<T>).resolve = _resolve!\n ;(promise as ControllablePromise<T>).reject = _reject!\n\n return promise as ControllablePromise<T>\n}\n"]}
1
+ {"version":3,"file":"controllable-promise.js","sourceRoot":"","sources":["../../../src/utils/controllable-promise.ts"],"names":[],"mappings":";;;AAQA;;GAEG;AACH,SAAgB,yBAAyB;IACrC,IAAI,QAA2C,CAAA;IAC/C,IAAI,OAAyC,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/C,QAAQ,GAAG,OAAO,CAAA;QAClB,OAAO,GAAG,MAAM,CAAA;IACpB,CAAC,CAAC,CAGD;IAAC,OAAkC,CAAC,OAAO,GAAG,QAAS,CACvD;IAAC,OAAkC,CAAC,MAAM,GAAG,OAAQ,CAAA;IAEtD,OAAO,OAAiC,CAAA;AAC5C,CAAC;AAbD,8DAaC","sourcesContent":["/**\n * A promise that can be resolved or rejected from outside.\n */\nexport type ControllablePromise<T = unknown> = Promise<T> & {\n resolve(val: T): void\n reject(err?: unknown): void\n}\n\n/**\n * Creates a promise that can be resolved or rejected from outside.\n */\nexport function createControllablePromise<T = unknown>(): ControllablePromise<T> {\n let _resolve: ControllablePromise<T>['resolve']\n let _reject: ControllablePromise<T>['reject']\n const promise = new Promise<T>((resolve, reject) => {\n _resolve = resolve\n _reject = reject\n })\n // ts doesn't like this, but it's fine\n\n ;(promise as ControllablePromise<T>).resolve = _resolve!\n ;(promise as ControllablePromise<T>).reject = _reject!\n\n return promise as ControllablePromise<T>\n}\n"]}
@@ -1,46 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- /* eslint-disable no-restricted-globals */
4
3
  const vitest_1 = require("vitest");
4
+ const test_1 = require("@mtcute/test");
5
+ const index_js_1 = require("../index.js");
5
6
  const mtproto_js_1 = require("./mtproto.js");
6
- const node_js_1 = require("./node.js");
7
- const authKey = Buffer.alloc(2048 / 8, Buffer.from('98cb29c6ffa89e79da695a54f572e6cb101e81c688b63a4bf73c3622dec230e0', 'hex'));
8
- const messageKey = Buffer.from('25d701f2a29205526757825a99eb2d32');
9
- (0, vitest_1.describe)('mtproto 2.0', () => {
7
+ const authKeyChunk = (0, index_js_1.hexDecodeToBuffer)('98cb29c6ffa89e79da695a54f572e6cb101e81c688b63a4bf73c3622dec230e0');
8
+ const authKey = (0, index_js_1.concatBuffers)(Array.from({ length: 8 }, () => authKeyChunk));
9
+ const messageKey = (0, index_js_1.hexDecodeToBuffer)('25d701f2a29205526757825a99eb2d32');
10
+ (0, vitest_1.describe)('mtproto 2.0', async () => {
11
+ const crypto = await (0, test_1.defaultTestCryptoProvider)();
12
+ const createAesIgeSpy = vitest_1.vi.spyOn(crypto, 'createAesIge');
13
+ (0, vitest_1.beforeEach)(() => void createAesIgeSpy.mockClear());
10
14
  (0, vitest_1.it)('should correctly derive message key and iv for client', () => {
11
- const crypto = new node_js_1.NodeCryptoProvider();
12
- const spy = vitest_1.vi.spyOn(crypto, 'createAesIge');
13
15
  (0, mtproto_js_1.createAesIgeForMessage)(crypto, authKey, messageKey, true);
14
- (0, vitest_1.expect)(spy).toHaveBeenCalledWith(Buffer.from('7acac59ab48cd370e478daf6c64545ab9f32d5c9197f25febe052110f61875ca', 'hex'), Buffer.from('2746ccc19fc260c08f3d2696389f415392103dbcc3a8bf69da9394c3c3d95bd3', 'hex'));
16
+ (0, vitest_1.expect)((0, index_js_1.hexEncode)(createAesIgeSpy.mock.calls[0][0])).toEqual('af3f8e1ffa75f4c981eec33a3e5bbaa2ea48f9bb93e91597627eb1f67960a0c9');
17
+ (0, vitest_1.expect)((0, index_js_1.hexEncode)(createAesIgeSpy.mock.calls[0][1])).toEqual('9874d77f95155b35221bff94b7df4594c6996e2a62e44fcb7d93c8c4e41b79ee');
15
18
  });
16
19
  (0, vitest_1.it)('should correctly derive message key and iv for server', () => {
17
- const crypto = new node_js_1.NodeCryptoProvider();
18
- const spy = vitest_1.vi.spyOn(crypto, 'createAesIge');
19
20
  (0, mtproto_js_1.createAesIgeForMessage)(crypto, authKey, messageKey, false);
20
- (0, vitest_1.expect)(spy).toHaveBeenCalledWith(Buffer.from('c7cf179e7ebab144ba87de05415db4157d2fc66df4790b2fd405a6c8cbe4c0b3', 'hex'), Buffer.from('0916a7bd9880eacd4eeb868577a4c6a50e76fca4ac5c1bcfbafe3b9f76ccd806', 'hex'));
21
+ (0, vitest_1.expect)((0, index_js_1.hexEncode)(createAesIgeSpy.mock.calls[0][0])).toEqual('d4b378e1e0525f10ff9d4c42807ccce5b30a033a8088c0b922b5259421751648');
22
+ (0, vitest_1.expect)((0, index_js_1.hexEncode)(createAesIgeSpy.mock.calls[0][1])).toEqual('4d7194f42f0135d2fd83050b403265b4c40ee3e9e9fba56f0f4d8ea6bcb121f5');
21
23
  });
22
24
  });
23
- (0, vitest_1.describe)('mtproto 1.0', () => {
25
+ (0, vitest_1.describe)('mtproto 1.0', async () => {
26
+ const crypto = await (0, test_1.defaultTestCryptoProvider)();
27
+ const createAesIgeSpy = vitest_1.vi.spyOn(crypto, 'createAesIge');
28
+ (0, vitest_1.beforeEach)(() => void createAesIgeSpy.mockClear());
24
29
  (0, vitest_1.it)('should correctly derive message key and iv for client', () => {
25
- const crypto = new node_js_1.NodeCryptoProvider();
26
- const spy = vitest_1.vi.spyOn(crypto, 'createAesIge');
27
30
  (0, mtproto_js_1.createAesIgeForMessageOld)(crypto, authKey, messageKey, true);
28
- (0, vitest_1.expect)(spy).toHaveBeenCalledWith(Buffer.from('aad61cb5b7be5e8435174d74665f8a978e85806d0970ad4958642ca49e3c8834', 'hex'), Buffer.from('4065736fe6586e94aad9f024062f1b9988e8a44e2aff4e11aad61cb5b7be5e84', 'hex'));
31
+ (0, vitest_1.expect)((0, index_js_1.hexEncode)(createAesIgeSpy.mock.calls[0][0])).toEqual('1fc7b40b1d9ffbdaf4d652525a748864259698f89214abf27c0d36cb9d4cd5db');
32
+ (0, vitest_1.expect)((0, index_js_1.hexEncode)(createAesIgeSpy.mock.calls[0][1])).toEqual('7251fbda39ec5e6e089f15ded5963b03d6d8d0f7078898431fc7b40b1d9ffbda');
29
33
  });
30
34
  (0, vitest_1.it)('should correctly derive message key and iv for server', () => {
31
- const crypto = new node_js_1.NodeCryptoProvider();
32
- const spy = vitest_1.vi.spyOn(crypto, 'createAesIge');
33
35
  (0, mtproto_js_1.createAesIgeForMessageOld)(crypto, authKey, messageKey, false);
34
- (0, vitest_1.expect)(spy).toHaveBeenCalledWith(Buffer.from('d57682a17105e43b92bc5025ea80e88ef708240fc19450dfe072a8760f9534da', 'hex'), Buffer.from('07addff7beeb7705ef3a9d5090bd73c992d57291bb8a7079d57682a17105e43b', 'hex'));
36
+ (0, vitest_1.expect)((0, index_js_1.hexEncode)(createAesIgeSpy.mock.calls[0][0])).toEqual('af0e4e01318654be40ab42b125909d43b44bdeef571ff1a5dfb81474ae26d467');
37
+ (0, vitest_1.expect)((0, index_js_1.hexEncode)(createAesIgeSpy.mock.calls[0][1])).toEqual('15c9ba6021d2c5cf04f0842540ae216a970b4eac8f46ef01af0e4e01318654be');
35
38
  });
36
39
  });
37
- (0, vitest_1.describe)('mtproto key/iv from nonce', () => {
40
+ (0, vitest_1.describe)('mtproto key/iv from nonce', async () => {
41
+ const crypto = await (0, test_1.defaultTestCryptoProvider)();
38
42
  (0, vitest_1.it)('should correctly derive message key and iv for given nonces', () => {
39
- const crypto = new node_js_1.NodeCryptoProvider();
40
- const res = (0, mtproto_js_1.generateKeyAndIvFromNonce)(crypto, Buffer.from('8af24c551836e5ed7002f5857e6e71b2', 'hex'), Buffer.from('3bf48b2d3152f383d82d1f2b32ac7fb5', 'hex'));
43
+ const res = (0, mtproto_js_1.generateKeyAndIvFromNonce)(crypto, (0, test_1.u8HexDecode)('8af24c551836e5ed7002f5857e6e71b2'), (0, test_1.u8HexDecode)('3bf48b2d3152f383d82d1f2b32ac7fb5'));
41
44
  (0, vitest_1.expect)(res).to.eql([
42
- Buffer.from('b0b5ffeadff0249fa6292f5ae0351556fd6619ba5dd4809601669292456d3e5a', 'hex'),
43
- Buffer.from('13fef5bfd8c46b12dfd1753013b86cc012e1ce8ed6f8ecdd7bf36f3a3bf48b2d', 'hex'),
45
+ (0, test_1.u8HexDecode)('b0b5ffeadff0249fa6292f5ae0351556fd6619ba5dd4809601669292456d3e5a'),
46
+ (0, test_1.u8HexDecode)('13fef5bfd8c46b12dfd1753013b86cc012e1ce8ed6f8ecdd7bf36f3a3bf48b2d'),
44
47
  ]);
45
48
  });
46
49
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mtproto.test.js","sourceRoot":"","sources":["../../../../src/utils/crypto/mtproto.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport { describe, expect, it, vi } from 'vitest'\n\nimport { createAesIgeForMessage, createAesIgeForMessageOld, generateKeyAndIvFromNonce } from './mtproto.js'\nimport { NodeCryptoProvider } from './node.js'\n\nconst authKey = Buffer.alloc(\n 2048 / 8,\n Buffer.from('98cb29c6ffa89e79da695a54f572e6cb101e81c688b63a4bf73c3622dec230e0', 'hex'),\n)\nconst messageKey = Buffer.from('25d701f2a29205526757825a99eb2d32')\n\ndescribe('mtproto 2.0', () => {\n it('should correctly derive message key and iv for client', () => {\n const crypto = new NodeCryptoProvider()\n const spy = vi.spyOn(crypto, 'createAesIge')\n\n createAesIgeForMessage(crypto, authKey, messageKey, true)\n\n expect(spy).toHaveBeenCalledWith(\n Buffer.from('7acac59ab48cd370e478daf6c64545ab9f32d5c9197f25febe052110f61875ca', 'hex'),\n Buffer.from('2746ccc19fc260c08f3d2696389f415392103dbcc3a8bf69da9394c3c3d95bd3', 'hex'),\n )\n })\n\n it('should correctly derive message key and iv for server', () => {\n const crypto = new NodeCryptoProvider()\n const spy = vi.spyOn(crypto, 'createAesIge')\n\n createAesIgeForMessage(crypto, authKey, messageKey, false)\n\n expect(spy).toHaveBeenCalledWith(\n Buffer.from('c7cf179e7ebab144ba87de05415db4157d2fc66df4790b2fd405a6c8cbe4c0b3', 'hex'),\n Buffer.from('0916a7bd9880eacd4eeb868577a4c6a50e76fca4ac5c1bcfbafe3b9f76ccd806', 'hex'),\n )\n })\n})\n\ndescribe('mtproto 1.0', () => {\n it('should correctly derive message key and iv for client', () => {\n const crypto = new NodeCryptoProvider()\n const spy = vi.spyOn(crypto, 'createAesIge')\n\n createAesIgeForMessageOld(crypto, authKey, messageKey, true)\n\n expect(spy).toHaveBeenCalledWith(\n Buffer.from('aad61cb5b7be5e8435174d74665f8a978e85806d0970ad4958642ca49e3c8834', 'hex'),\n Buffer.from('4065736fe6586e94aad9f024062f1b9988e8a44e2aff4e11aad61cb5b7be5e84', 'hex'),\n )\n })\n\n it('should correctly derive message key and iv for server', () => {\n const crypto = new NodeCryptoProvider()\n const spy = vi.spyOn(crypto, 'createAesIge')\n\n createAesIgeForMessageOld(crypto, authKey, messageKey, false)\n\n expect(spy).toHaveBeenCalledWith(\n Buffer.from('d57682a17105e43b92bc5025ea80e88ef708240fc19450dfe072a8760f9534da', 'hex'),\n Buffer.from('07addff7beeb7705ef3a9d5090bd73c992d57291bb8a7079d57682a17105e43b', 'hex'),\n )\n })\n})\n\ndescribe('mtproto key/iv from nonce', () => {\n it('should correctly derive message key and iv for given nonces', () => {\n const crypto = new NodeCryptoProvider()\n\n const res = generateKeyAndIvFromNonce(\n crypto,\n Buffer.from('8af24c551836e5ed7002f5857e6e71b2', 'hex'),\n Buffer.from('3bf48b2d3152f383d82d1f2b32ac7fb5', 'hex'),\n )\n\n expect(res).to.eql([\n Buffer.from('b0b5ffeadff0249fa6292f5ae0351556fd6619ba5dd4809601669292456d3e5a', 'hex'),\n Buffer.from('13fef5bfd8c46b12dfd1753013b86cc012e1ce8ed6f8ecdd7bf36f3a3bf48b2d', 'hex'),\n ])\n })\n})\n"]}
1
+ {"version":3,"file":"mtproto.test.js","sourceRoot":"","sources":["../../../../src/utils/crypto/mtproto.test.ts"],"names":[],"mappings":";;AAAA,mCAA6D;AAE7D,uCAAqE;AAErE,0CAAyE;AACzE,6CAA2G;AAE3G,MAAM,YAAY,GAAG,IAAA,4BAAiB,EAAC,kEAAkE,CAAC,CAAA;AAC1G,MAAM,OAAO,GAAG,IAAA,wBAAa,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;AAC5E,MAAM,UAAU,GAAG,IAAA,4BAAiB,EAAC,kCAAkC,CAAC,CAAA;AAExE,IAAA,iBAAQ,EAAC,aAAa,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAyB,GAAE,CAAA;IAChD,MAAM,eAAe,GAAG,WAAE,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAExD,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC,CAAA;IAElD,IAAA,WAAE,EAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,IAAA,mCAAsB,EAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAEzD,IAAA,eAAM,EAAC,IAAA,oBAAS,EAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CACvD,kEAAkE,CACrE,CAAA;QACD,IAAA,eAAM,EAAC,IAAA,oBAAS,EAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CACvD,kEAAkE,CACrE,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,IAAA,mCAAsB,EAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;QAE1D,IAAA,eAAM,EAAC,IAAA,oBAAS,EAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CACvD,kEAAkE,CACrE,CAAA;QACD,IAAA,eAAM,EAAC,IAAA,oBAAS,EAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CACvD,kEAAkE,CACrE,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,IAAA,iBAAQ,EAAC,aAAa,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAyB,GAAE,CAAA;IAChD,MAAM,eAAe,GAAG,WAAE,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAExD,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC,CAAA;IAElD,IAAA,WAAE,EAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,IAAA,sCAAyB,EAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAE5D,IAAA,eAAM,EAAC,IAAA,oBAAS,EAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CACvD,kEAAkE,CACrE,CAAA;QACD,IAAA,eAAM,EAAC,IAAA,oBAAS,EAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CACvD,kEAAkE,CACrE,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,IAAA,WAAE,EAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,IAAA,sCAAyB,EAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;QAE7D,IAAA,eAAM,EAAC,IAAA,oBAAS,EAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CACvD,kEAAkE,CACrE,CAAA;QACD,IAAA,eAAM,EAAC,IAAA,oBAAS,EAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CACvD,kEAAkE,CACrE,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,IAAA,iBAAQ,EAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;IAC7C,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAyB,GAAE,CAAA;IAEhD,IAAA,WAAE,EAAC,6DAA6D,EAAE,GAAG,EAAE;QACnE,MAAM,GAAG,GAAG,IAAA,sCAAyB,EACjC,MAAM,EACN,IAAA,kBAAW,EAAC,kCAAkC,CAAC,EAC/C,IAAA,kBAAW,EAAC,kCAAkC,CAAC,CAClD,CAAA;QAED,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;YACf,IAAA,kBAAW,EAAC,kEAAkE,CAAC;YAC/E,IAAA,kBAAW,EAAC,kEAAkE,CAAC;SAClF,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA","sourcesContent":["import { beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport { defaultTestCryptoProvider, u8HexDecode } from '@mtcute/test'\n\nimport { concatBuffers, hexDecodeToBuffer, hexEncode } from '../index.js'\nimport { createAesIgeForMessage, createAesIgeForMessageOld, generateKeyAndIvFromNonce } from './mtproto.js'\n\nconst authKeyChunk = hexDecodeToBuffer('98cb29c6ffa89e79da695a54f572e6cb101e81c688b63a4bf73c3622dec230e0')\nconst authKey = concatBuffers(Array.from({ length: 8 }, () => authKeyChunk))\nconst messageKey = hexDecodeToBuffer('25d701f2a29205526757825a99eb2d32')\n\ndescribe('mtproto 2.0', async () => {\n const crypto = await defaultTestCryptoProvider()\n const createAesIgeSpy = vi.spyOn(crypto, 'createAesIge')\n\n beforeEach(() => void createAesIgeSpy.mockClear())\n\n it('should correctly derive message key and iv for client', () => {\n createAesIgeForMessage(crypto, authKey, messageKey, true)\n\n expect(hexEncode(createAesIgeSpy.mock.calls[0][0])).toEqual(\n 'af3f8e1ffa75f4c981eec33a3e5bbaa2ea48f9bb93e91597627eb1f67960a0c9',\n )\n expect(hexEncode(createAesIgeSpy.mock.calls[0][1])).toEqual(\n '9874d77f95155b35221bff94b7df4594c6996e2a62e44fcb7d93c8c4e41b79ee',\n )\n })\n\n it('should correctly derive message key and iv for server', () => {\n createAesIgeForMessage(crypto, authKey, messageKey, false)\n\n expect(hexEncode(createAesIgeSpy.mock.calls[0][0])).toEqual(\n 'd4b378e1e0525f10ff9d4c42807ccce5b30a033a8088c0b922b5259421751648',\n )\n expect(hexEncode(createAesIgeSpy.mock.calls[0][1])).toEqual(\n '4d7194f42f0135d2fd83050b403265b4c40ee3e9e9fba56f0f4d8ea6bcb121f5',\n )\n })\n})\n\ndescribe('mtproto 1.0', async () => {\n const crypto = await defaultTestCryptoProvider()\n const createAesIgeSpy = vi.spyOn(crypto, 'createAesIge')\n\n beforeEach(() => void createAesIgeSpy.mockClear())\n\n it('should correctly derive message key and iv for client', () => {\n createAesIgeForMessageOld(crypto, authKey, messageKey, true)\n\n expect(hexEncode(createAesIgeSpy.mock.calls[0][0])).toEqual(\n '1fc7b40b1d9ffbdaf4d652525a748864259698f89214abf27c0d36cb9d4cd5db',\n )\n expect(hexEncode(createAesIgeSpy.mock.calls[0][1])).toEqual(\n '7251fbda39ec5e6e089f15ded5963b03d6d8d0f7078898431fc7b40b1d9ffbda',\n )\n })\n\n it('should correctly derive message key and iv for server', () => {\n createAesIgeForMessageOld(crypto, authKey, messageKey, false)\n\n expect(hexEncode(createAesIgeSpy.mock.calls[0][0])).toEqual(\n 'af0e4e01318654be40ab42b125909d43b44bdeef571ff1a5dfb81474ae26d467',\n )\n expect(hexEncode(createAesIgeSpy.mock.calls[0][1])).toEqual(\n '15c9ba6021d2c5cf04f0842540ae216a970b4eac8f46ef01af0e4e01318654be',\n )\n })\n})\n\ndescribe('mtproto key/iv from nonce', async () => {\n const crypto = await defaultTestCryptoProvider()\n\n it('should correctly derive message key and iv for given nonces', () => {\n const res = generateKeyAndIvFromNonce(\n crypto,\n u8HexDecode('8af24c551836e5ed7002f5857e6e71b2'),\n u8HexDecode('3bf48b2d3152f383d82d1f2b32ac7fb5'),\n )\n\n expect(res).to.eql([\n u8HexDecode('b0b5ffeadff0249fa6292f5ae0351556fd6619ba5dd4809601669292456d3e5a'),\n u8HexDecode('13fef5bfd8c46b12dfd1753013b86cc012e1ce8ed6f8ecdd7bf36f3a3bf48b2d'),\n ])\n })\n})\n"]}
@@ -2,12 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const vitest_1 = require("vitest");
4
4
  const test_1 = require("@mtcute/test");
5
- const node_js_1 = require("./node.js");
6
- (0, vitest_1.describe)('NodeCryptoProvider', () => {
7
- if (typeof process === 'undefined') {
8
- console.warn('Skipping NodeCryptoProvider tests');
9
- return;
10
- }
11
- (0, test_1.testCryptoProvider)(new node_js_1.NodeCryptoProvider());
12
- });
5
+ if (import.meta.env.TEST_ENV === 'node') {
6
+ (0, vitest_1.describe)('NodeCryptoProvider', async () => {
7
+ const { NodeCryptoProvider } = await import('./node.js');
8
+ (0, test_1.testCryptoProvider)(new NodeCryptoProvider());
9
+ });
10
+ }
11
+ else {
12
+ vitest_1.describe.skip('NodeCryptoProvider', () => { });
13
+ }
13
14
  //# sourceMappingURL=node.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.test.js","sourceRoot":"","sources":["../../../../src/utils/crypto/node.test.ts"],"names":[],"mappings":";;AAAA,mCAAiC;AAEjC,uCAAiD;AAEjD,uCAA8C;AAE9C,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;IAChC,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;QAEjD,OAAM;KACT;IAED,IAAA,yBAAkB,EAAC,IAAI,4BAAkB,EAAE,CAAC,CAAA;AAChD,CAAC,CAAC,CAAA","sourcesContent":["import { describe } from 'vitest'\n\nimport { testCryptoProvider } from '@mtcute/test'\n\nimport { NodeCryptoProvider } from './node.js'\n\ndescribe('NodeCryptoProvider', () => {\n if (typeof process === 'undefined') {\n console.warn('Skipping NodeCryptoProvider tests')\n\n return\n }\n\n testCryptoProvider(new NodeCryptoProvider())\n})\n"]}
1
+ {"version":3,"file":"node.test.js","sourceRoot":"","sources":["../../../../src/utils/crypto/node.test.ts"],"names":[],"mappings":";;AAAA,mCAAiC;AAEjC,uCAAiD;AAEjD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;IACrC,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;QAExD,IAAA,yBAAkB,EAAC,IAAI,kBAAkB,EAAE,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;CACL;KAAM;IACH,iBAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;CAChD","sourcesContent":["import { describe } from 'vitest'\n\nimport { testCryptoProvider } from '@mtcute/test'\n\nif (import.meta.env.TEST_ENV === 'node') {\n describe('NodeCryptoProvider', async () => {\n const { NodeCryptoProvider } = await import('./node.js')\n\n testCryptoProvider(new NodeCryptoProvider())\n })\n} else {\n describe.skip('NodeCryptoProvider', () => {})\n}\n"]}
@@ -8,8 +8,8 @@ const utils_js_1 = require("./utils.js");
8
8
  const data = (0, tl_runtime_1.utf8EncodeToBuffer)('hello');
9
9
  const key = (0, tl_runtime_1.utf8EncodeToBuffer)('xor');
10
10
  const xored = (0, utils_js_1.xorBuffer)(data, key);
11
- (0, vitest_1.expect)(data.toString()).eq('hello');
12
- (0, vitest_1.expect)(key.toString()).eq('xor');
11
+ (0, vitest_1.expect)((0, tl_runtime_1.utf8Decode)(data)).eq('hello');
12
+ (0, vitest_1.expect)((0, tl_runtime_1.utf8Decode)(key)).eq('xor');
13
13
  (0, vitest_1.expect)((0, tl_runtime_1.hexEncode)(xored)).eq('100a1e6c6f');
14
14
  });
15
15
  (0, vitest_1.it)('should be deterministic', () => {
@@ -35,7 +35,7 @@ const utils_js_1 = require("./utils.js");
35
35
  const key = (0, tl_runtime_1.utf8EncodeToBuffer)('xor');
36
36
  (0, utils_js_1.xorBufferInPlace)(data, key);
37
37
  (0, vitest_1.expect)((0, tl_runtime_1.hexEncode)(data)).eq('100a1e6c6f');
38
- (0, vitest_1.expect)(key.toString()).eq('xor');
38
+ (0, vitest_1.expect)((0, tl_runtime_1.utf8Decode)(key)).eq('xor');
39
39
  });
40
40
  (0, vitest_1.it)('second call should decode content', () => {
41
41
  const data = (0, tl_runtime_1.utf8EncodeToBuffer)('hello');
@@ -43,7 +43,7 @@ const utils_js_1 = require("./utils.js");
43
43
  (0, utils_js_1.xorBufferInPlace)(data, key);
44
44
  (0, vitest_1.expect)((0, tl_runtime_1.hexEncode)(data)).eq('100a1e6c6f');
45
45
  (0, utils_js_1.xorBufferInPlace)(data, key);
46
- (0, vitest_1.expect)(data.toString()).eq('hello');
46
+ (0, vitest_1.expect)((0, tl_runtime_1.utf8Decode)(data)).eq('hello');
47
47
  });
48
48
  });
49
49
  //# sourceMappingURL=utils.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../src/utils/crypto/utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { hexEncode, utf8Decode, utf8EncodeToBuffer } from '@mtcute/tl-runtime'\n\nimport { xorBuffer, xorBufferInPlace } from './utils.js'\n\ndescribe('xorBuffer', () => {\n it('should xor buffers without modifying original', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n const xored = xorBuffer(data, key)\n expect(data.toString()).eq('hello')\n expect(key.toString()).eq('xor')\n expect(hexEncode(xored)).eq('100a1e6c6f')\n })\n\n it('should be deterministic', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n const xored1 = xorBuffer(data, key)\n expect(hexEncode(xored1)).eq('100a1e6c6f')\n\n const xored2 = xorBuffer(data, key)\n expect(hexEncode(xored2)).eq('100a1e6c6f')\n })\n\n it('second call should decode content', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n const xored1 = xorBuffer(data, key)\n expect(hexEncode(xored1)).eq('100a1e6c6f')\n\n const xored2 = xorBuffer(xored1, key)\n expect(utf8Decode(xored2)).eq('hello')\n })\n})\n\ndescribe('xorBufferInPlace', () => {\n it('should xor buffers by modifying original', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n xorBufferInPlace(data, key)\n expect(hexEncode(data)).eq('100a1e6c6f')\n expect(key.toString()).eq('xor')\n })\n\n it('second call should decode content', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n xorBufferInPlace(data, key)\n expect(hexEncode(data)).eq('100a1e6c6f')\n\n xorBufferInPlace(data, key)\n expect(data.toString()).eq('hello')\n })\n})\n"]}
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../src/utils/crypto/utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { hexEncode, utf8Decode, utf8EncodeToBuffer } from '@mtcute/tl-runtime'\n\nimport { xorBuffer, xorBufferInPlace } from './utils.js'\n\ndescribe('xorBuffer', () => {\n it('should xor buffers without modifying original', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n const xored = xorBuffer(data, key)\n expect(utf8Decode(data)).eq('hello')\n expect(utf8Decode(key)).eq('xor')\n expect(hexEncode(xored)).eq('100a1e6c6f')\n })\n\n it('should be deterministic', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n const xored1 = xorBuffer(data, key)\n expect(hexEncode(xored1)).eq('100a1e6c6f')\n\n const xored2 = xorBuffer(data, key)\n expect(hexEncode(xored2)).eq('100a1e6c6f')\n })\n\n it('second call should decode content', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n const xored1 = xorBuffer(data, key)\n expect(hexEncode(xored1)).eq('100a1e6c6f')\n\n const xored2 = xorBuffer(xored1, key)\n expect(utf8Decode(xored2)).eq('hello')\n })\n})\n\ndescribe('xorBufferInPlace', () => {\n it('should xor buffers by modifying original', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n xorBufferInPlace(data, key)\n expect(hexEncode(data)).eq('100a1e6c6f')\n expect(utf8Decode(key)).eq('xor')\n })\n\n it('second call should decode content', () => {\n const data = utf8EncodeToBuffer('hello')\n const key = utf8EncodeToBuffer('xor')\n\n xorBufferInPlace(data, key)\n expect(hexEncode(data)).eq('100a1e6c6f')\n\n xorBufferInPlace(data, key)\n expect(utf8Decode(data)).eq('hello')\n })\n})\n"]}
@@ -93,14 +93,16 @@ const logger_js_1 = require("./logger.js");
93
93
  mgr.info('test %j', { a: 1 });
94
94
  (0, vitest_1.expect)(spy).toHaveBeenCalledWith(3, 3, 'base', 'test {"a":1}', []);
95
95
  });
96
- (0, vitest_1.it)('should format buffers inside as hex strings', () => {
97
- const [mgr, spy] = createManager();
98
- // eslint-disable-next-line no-restricted-globals
99
- mgr.info('test %j', { a: Buffer.from([1, 2, 3]) });
100
- mgr.info('test Uint8Array %j', { a: new Uint8Array([1, 2, 3]) });
101
- (0, vitest_1.expect)(spy).toHaveBeenCalledWith(3, 3, 'base', 'test {"a":"010203"}', []);
102
- (0, vitest_1.expect)(spy).toHaveBeenCalledWith(3, 3, 'base', 'test Uint8Array {"a":"010203"}', []);
103
- });
96
+ if (import.meta.env.TEST_ENV === 'node') {
97
+ (0, vitest_1.it)('should format Buffers inside as hex strings', () => {
98
+ const [mgr, spy] = createManager();
99
+ // eslint-disable-next-line no-restricted-globals
100
+ mgr.info('test %j', { a: Buffer.from([1, 2, 3]) });
101
+ mgr.info('test Uint8Array %j', { a: new Uint8Array([1, 2, 3]) });
102
+ (0, vitest_1.expect)(spy).toHaveBeenCalledWith(3, 3, 'base', 'test {"a":"010203"}', []);
103
+ (0, vitest_1.expect)(spy).toHaveBeenCalledWith(3, 3, 'base', 'test Uint8Array {"a":"010203"}', []);
104
+ });
105
+ }
104
106
  (0, vitest_1.it)('should trim long buffers', () => {
105
107
  const [mgr, spy] = createManager();
106
108
  const _150hexZeros = Array(150).fill('00').join('');
@@ -1 +1 @@
1
- {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../../src/utils/logger.test.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\nimport { describe, expect, it, vi } from 'vitest'\n\nimport { LogManager } from './logger.js'\n\ndescribe('logger', () => {\n const createManager = () => {\n const mgr = new LogManager()\n\n const spy = vi.fn<Parameters<typeof mgr.handler>>()\n mgr.handler = spy\n\n return [mgr, spy] as const\n }\n\n it('should only log messages below the set level', () => {\n const [mgr, spy] = createManager()\n\n mgr.level = LogManager.INFO\n mgr.error('test error')\n mgr.warn('test warn')\n mgr.info('test info')\n mgr.debug('test debug')\n mgr.verbose('test verbose')\n\n expect(spy).toHaveBeenCalledTimes(3)\n expect(spy).toHaveBeenCalledWith(3, 1, 'base', 'test error', [])\n expect(spy).toHaveBeenCalledWith(3, 2, 'base', 'test warn', [])\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test info', [])\n })\n\n it('should create child loggers', () => {\n const [mgr, spy] = createManager()\n\n mgr.create('child').info('test info')\n\n expect(spy).toHaveBeenCalledWith(0, 3, 'child', 'test info', [])\n })\n\n it('should apply filtering by tags', () => {\n const [mgr, spy] = createManager()\n\n const test1 = mgr.create('test1')\n const test2 = mgr.create('test2')\n\n mgr.filter((tag) => tag === 'test1')\n\n test1.info('test1 info')\n test2.info('test2 info')\n\n expect(spy).toHaveBeenCalledTimes(1)\n expect(spy).toHaveBeenCalledWith(5, 3, 'test1', 'test1 info', [])\n })\n\n it('should recursively add prefixes', () => {\n const [mgr, spy] = createManager()\n\n const test = mgr.create('test1')\n const test2 = test.create('test2')\n\n test.prefix = '[TEST] '\n test2.prefix = '[TEST2] '\n\n test2.create('test3').info('test info')\n\n expect(spy).toHaveBeenCalledWith(1, 3, 'test3', '[TEST] [TEST2] test info', [])\n })\n\n describe('formatting', () => {\n it('should pass generic format strings through', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %s', 'info')\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test %s', ['info'])\n })\n\n describe('%h', () => {\n it('should format buffers as hex strings', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %h', new Uint8Array([0x01, 0x02, 0x03]))\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test 010203', [])\n })\n\n it('should format numbers as hex', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %h', 0x010203)\n mgr.info('test bigint %h', 0x010203n)\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test 10203', [])\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test bigint 10203', [])\n })\n\n it('should format everything else as normal strings', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %h', {})\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test [object Object]', [])\n })\n })\n\n describe('%b', () => {\n it('should format booleans as strings', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %b', true)\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test true', [])\n })\n\n it('should coerce everything to boolean', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %b', 123)\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test true', [])\n })\n })\n\n describe('%j', () => {\n it('should format objects as JSON', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %j', { a: 1 })\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test {\"a\":1}', [])\n })\n\n it('should format buffers inside as hex strings', () => {\n const [mgr, spy] = createManager()\n\n // eslint-disable-next-line no-restricted-globals\n mgr.info('test %j', { a: Buffer.from([1, 2, 3]) })\n mgr.info('test Uint8Array %j', { a: new Uint8Array([1, 2, 3]) })\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test {\"a\":\"010203\"}', [])\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test Uint8Array {\"a\":\"010203\"}', [])\n })\n\n it('should trim long buffers', () => {\n const [mgr, spy] = createManager()\n\n const _150hexZeros = Array(150).fill('00').join('')\n\n mgr.info('test %j', { a: new Uint8Array(300) })\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', `test {\"a\":\"${_150hexZeros}...\"}`, [])\n })\n\n it('should have %J variation accepting iterators', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %J', new Set([1, 2, 3]))\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test [1,2,3]', [])\n })\n })\n\n describe('%l', () => {\n it('should format Longs as strings', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %l', Long.fromInt(123))\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test 123', [])\n })\n })\n })\n})\n"]}
1
+ {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../../src/utils/logger.test.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\nimport { describe, expect, it, vi } from 'vitest'\n\nimport { LogManager } from './logger.js'\n\ndescribe('logger', () => {\n const createManager = () => {\n const mgr = new LogManager()\n\n const spy = vi.fn<Parameters<typeof mgr.handler>>()\n mgr.handler = spy\n\n return [mgr, spy] as const\n }\n\n it('should only log messages below the set level', () => {\n const [mgr, spy] = createManager()\n\n mgr.level = LogManager.INFO\n mgr.error('test error')\n mgr.warn('test warn')\n mgr.info('test info')\n mgr.debug('test debug')\n mgr.verbose('test verbose')\n\n expect(spy).toHaveBeenCalledTimes(3)\n expect(spy).toHaveBeenCalledWith(3, 1, 'base', 'test error', [])\n expect(spy).toHaveBeenCalledWith(3, 2, 'base', 'test warn', [])\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test info', [])\n })\n\n it('should create child loggers', () => {\n const [mgr, spy] = createManager()\n\n mgr.create('child').info('test info')\n\n expect(spy).toHaveBeenCalledWith(0, 3, 'child', 'test info', [])\n })\n\n it('should apply filtering by tags', () => {\n const [mgr, spy] = createManager()\n\n const test1 = mgr.create('test1')\n const test2 = mgr.create('test2')\n\n mgr.filter((tag) => tag === 'test1')\n\n test1.info('test1 info')\n test2.info('test2 info')\n\n expect(spy).toHaveBeenCalledTimes(1)\n expect(spy).toHaveBeenCalledWith(5, 3, 'test1', 'test1 info', [])\n })\n\n it('should recursively add prefixes', () => {\n const [mgr, spy] = createManager()\n\n const test = mgr.create('test1')\n const test2 = test.create('test2')\n\n test.prefix = '[TEST] '\n test2.prefix = '[TEST2] '\n\n test2.create('test3').info('test info')\n\n expect(spy).toHaveBeenCalledWith(1, 3, 'test3', '[TEST] [TEST2] test info', [])\n })\n\n describe('formatting', () => {\n it('should pass generic format strings through', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %s', 'info')\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test %s', ['info'])\n })\n\n describe('%h', () => {\n it('should format buffers as hex strings', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %h', new Uint8Array([0x01, 0x02, 0x03]))\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test 010203', [])\n })\n\n it('should format numbers as hex', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %h', 0x010203)\n mgr.info('test bigint %h', 0x010203n)\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test 10203', [])\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test bigint 10203', [])\n })\n\n it('should format everything else as normal strings', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %h', {})\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test [object Object]', [])\n })\n })\n\n describe('%b', () => {\n it('should format booleans as strings', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %b', true)\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test true', [])\n })\n\n it('should coerce everything to boolean', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %b', 123)\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test true', [])\n })\n })\n\n describe('%j', () => {\n it('should format objects as JSON', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %j', { a: 1 })\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test {\"a\":1}', [])\n })\n\n if (import.meta.env.TEST_ENV === 'node') {\n it('should format Buffers inside as hex strings', () => {\n const [mgr, spy] = createManager()\n\n // eslint-disable-next-line no-restricted-globals\n mgr.info('test %j', { a: Buffer.from([1, 2, 3]) })\n mgr.info('test Uint8Array %j', { a: new Uint8Array([1, 2, 3]) })\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test {\"a\":\"010203\"}', [])\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test Uint8Array {\"a\":\"010203\"}', [])\n })\n }\n\n it('should trim long buffers', () => {\n const [mgr, spy] = createManager()\n\n const _150hexZeros = Array(150).fill('00').join('')\n\n mgr.info('test %j', { a: new Uint8Array(300) })\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', `test {\"a\":\"${_150hexZeros}...\"}`, [])\n })\n\n it('should have %J variation accepting iterators', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %J', new Set([1, 2, 3]))\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test [1,2,3]', [])\n })\n })\n\n describe('%l', () => {\n it('should format Longs as strings', () => {\n const [mgr, spy] = createManager()\n\n mgr.info('test %l', Long.fromInt(123))\n\n expect(spy).toHaveBeenCalledWith(3, 3, 'base', 'test 123', [])\n })\n })\n })\n})\n"]}
@@ -51,6 +51,7 @@ function getMarkedPeerId(peer, peerType) {
51
51
  throw new errors_js_1.MtArgumentError('Invalid peer type');
52
52
  }
53
53
  switch (peer._) {
54
+ case 'mtcute.dummyInputPeerMinUser':
54
55
  case 'peerUser':
55
56
  case 'inputPeerUser':
56
57
  case 'inputPeerUserFromMessage':
@@ -60,6 +61,7 @@ function getMarkedPeerId(peer, peerType) {
60
61
  case 'peerChat':
61
62
  case 'inputPeerChat':
62
63
  return -peer.chatId;
64
+ case 'mtcute.dummyInputPeerMinChannel':
63
65
  case 'peerChannel':
64
66
  case 'inputPeerChannel':
65
67
  case 'inputPeerChannelFromMessage':
@@ -67,7 +69,7 @@ function getMarkedPeerId(peer, peerType) {
67
69
  case 'inputChannelFromMessage':
68
70
  return ZERO_CHANNEL_ID - peer.channelId;
69
71
  }
70
- throw new errors_js_1.MtArgumentError('Invalid peer');
72
+ throw new errors_js_1.MtArgumentError(`Invalid peer: ${peer._}`);
71
73
  }
72
74
  exports.getMarkedPeerId = getMarkedPeerId;
73
75
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"peer-utils.js","sourceRoot":"","sources":["../../../src/utils/peer-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError, MtUnsupportedError } from '../types/errors.js'\nimport { BasicPeerType } from '../types/peers.js'\n\n// src: https://github.com/tdlib/td/blob/master/td/telegram/DialogId.h\nconst ZERO_CHANNEL_ID = -1000000000000\nconst ZERO_SECRET_CHAT_ID = -2000000000000\nconst MAX_SECRET_CHAT_ID = -1997852516353 // ZERO_SECRET_CHAT_ID + 0x7fffffff\n// src: https://github.com/tdlib/td/blob/master/td/telegram/ChatId.h\n// const MAX_CHAT_ID = 999999999999\nconst MIN_MARKED_CHAT_ID = -999999999999 // -MAX_CHAT_ID\n// src: https://github.com/tdlib/td/blob/master/td/telegram/UserId.h\n// MAX_USER_ID = (1ll << 40) - 1\nconst MAX_USER_ID = 1099511627775\n// src: https://github.com/tdlib/td/blob/master/td/telegram/ChannelId.h\n// the last (1 << 31) - 1 identifiers will be used for secret chat dialog identifiers\n// MAX_CHANNEL_ID = 1000000000000ll - (1ll << 31)\n// const MAX_CHANNEL_ID = 997852516352\nconst MIN_MARKED_CHANNEL_ID = -1997852516352 // ZERO_CHANNEL_ID - MAX_CHANNEL_ID\n\n/**\n * Add or remove channel marker from ID\n */\nexport function toggleChannelIdMark(id: number): number {\n return ZERO_CHANNEL_ID - id\n}\n\n/**\n * Get the bare (non-marked) ID from a {@link tl.TypePeer}\n */\nexport function getBarePeerId(peer: tl.TypePeer): number {\n switch (peer._) {\n case 'peerUser':\n return peer.userId\n case 'peerChat':\n return peer.chatId\n case 'peerChannel':\n return peer.channelId\n }\n}\n\n// src: https://github.com/tdlib/td/blob/master/td/telegram/DialogId.cpp\n\n/**\n * Get the marked (non-bare) ID from a {@link tl.TypePeer}\n *\n * *Mark* is bot API compatible, which is:\n * - ID stays the same for users\n * - ID is negated for chats\n * - ID is negated and `-1e12` is subtracted for channels\n */\nexport function getMarkedPeerId(peerId: number, peerType: BasicPeerType): number\nexport function getMarkedPeerId(peer: tl.TypePeer | tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel): number\n\nexport function getMarkedPeerId(\n peer: tl.TypePeer | tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel | number,\n peerType?: BasicPeerType,\n): number {\n if (typeof peer === 'number') {\n switch (peerType) {\n case 'user':\n return peer\n case 'chat':\n return -peer\n case 'channel':\n return ZERO_CHANNEL_ID - peer\n }\n throw new MtArgumentError('Invalid peer type')\n }\n\n switch (peer._) {\n case 'peerUser':\n case 'inputPeerUser':\n case 'inputPeerUserFromMessage':\n case 'inputUser':\n case 'inputUserFromMessage':\n return peer.userId\n case 'peerChat':\n case 'inputPeerChat':\n return -peer.chatId\n case 'peerChannel':\n case 'inputPeerChannel':\n case 'inputPeerChannelFromMessage':\n case 'inputChannel':\n case 'inputChannelFromMessage':\n return ZERO_CHANNEL_ID - peer.channelId\n }\n\n throw new MtArgumentError('Invalid peer')\n}\n\n/**\n * Extract basic peer type from {@link tl.TypePeer} or its marked ID.\n */\nexport function getBasicPeerType(peer: tl.TypePeer | number): BasicPeerType {\n if (typeof peer !== 'number') {\n switch (peer._) {\n case 'peerUser':\n return 'user'\n case 'peerChat':\n return 'chat'\n case 'peerChannel':\n return 'channel'\n }\n }\n\n if (peer < 0) {\n if (MIN_MARKED_CHAT_ID <= peer) {\n return 'chat'\n }\n\n if (MIN_MARKED_CHANNEL_ID <= peer && peer !== ZERO_CHANNEL_ID) {\n return 'channel'\n }\n\n if (MAX_SECRET_CHAT_ID >= peer && peer !== ZERO_SECRET_CHAT_ID) {\n // return 'secret'\n throw new MtUnsupportedError('Secret chats are not supported')\n }\n } else if (peer > 0 && peer <= MAX_USER_ID) {\n return 'user'\n }\n\n throw new MtArgumentError(`Invalid marked peer id: ${peer}`)\n}\n\n/**\n * Extract bare peer ID from marked ID.\n *\n * @param peerId Marked peer ID\n */\nexport function markedPeerIdToBare(peerId: number): number {\n const type = getBasicPeerType(peerId)\n\n switch (type) {\n case 'user':\n return peerId\n case 'chat':\n return -peerId\n case 'channel':\n return toggleChannelIdMark(peerId)\n }\n}\n\n/**\n * Extracts all (cacheable) entities from a TlObject or a list of them.\n * Only checks `.user`, `.chat`, `.channel`, `.users` and `.chats` properties\n */\nexport function* getAllPeersFrom(obj: tl.TlObject | tl.TlObject[]): Iterable<tl.TypeUser | tl.TypeChat> {\n if (typeof obj !== 'object') return\n\n if (Array.isArray(obj)) {\n for (const it of obj) {\n yield* getAllPeersFrom(it)\n }\n\n return\n }\n\n switch (obj._) {\n case 'user':\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj\n\n return\n }\n\n if ('user' in obj && typeof obj.user === 'object' && obj.user._ === 'user') {\n yield obj.user\n }\n\n if ('chat' in obj && typeof obj.chat === 'object') {\n switch (obj.chat._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj.chat\n break\n }\n }\n\n if ('channel' in obj && typeof obj.channel === 'object') {\n switch (obj.channel._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj.channel\n break\n }\n }\n\n if ('users' in obj && Array.isArray(obj.users) && obj.users.length) {\n for (const user of obj.users) {\n // .users is sometimes number[]\n if (typeof user === 'object' && user._ === 'user') {\n yield user\n }\n }\n }\n\n if ('chats' in obj && Array.isArray(obj.chats) && obj.chats.length) {\n for (const chat of obj.chats) {\n // .chats is sometimes number[]\n if (typeof chat === 'object') {\n switch (chat._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield chat\n break\n }\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"peer-utils.js","sourceRoot":"","sources":["../../../src/utils/peer-utils.ts"],"names":[],"mappings":";;;AAEA,kDAAwE;AAGxE,sEAAsE;AACtE,MAAM,eAAe,GAAG,CAAC,aAAa,CAAA;AACtC,MAAM,mBAAmB,GAAG,CAAC,aAAa,CAAA;AAC1C,MAAM,kBAAkB,GAAG,CAAC,aAAa,CAAA,CAAC,mCAAmC;AAC7E,oEAAoE;AACpE,mCAAmC;AACnC,MAAM,kBAAkB,GAAG,CAAC,YAAY,CAAA,CAAC,eAAe;AACxD,oEAAoE;AACpE,gCAAgC;AAChC,MAAM,WAAW,GAAG,aAAa,CAAA;AACjC,uEAAuE;AACvE,qFAAqF;AACrF,iDAAiD;AACjD,sCAAsC;AACtC,MAAM,qBAAqB,GAAG,CAAC,aAAa,CAAA,CAAC,mCAAmC;AAEhF;;GAEG;AACH,SAAgB,mBAAmB,CAAC,EAAU;IAC1C,OAAO,eAAe,GAAG,EAAE,CAAA;AAC/B,CAAC;AAFD,kDAEC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,IAAiB;IAC3C,QAAQ,IAAI,CAAC,CAAC,EAAE;QACZ,KAAK,UAAU;YACX,OAAO,IAAI,CAAC,MAAM,CAAA;QACtB,KAAK,UAAU;YACX,OAAO,IAAI,CAAC,MAAM,CAAA;QACtB,KAAK,aAAa;YACd,OAAO,IAAI,CAAC,SAAS,CAAA;KAC5B;AACL,CAAC;AATD,sCASC;AAeD,SAAgB,eAAe,CAC3B,IAAsF,EACtF,QAAwB;IAExB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,QAAQ,QAAQ,EAAE;YACd,KAAK,MAAM;gBACP,OAAO,IAAI,CAAA;YACf,KAAK,MAAM;gBACP,OAAO,CAAC,IAAI,CAAA;YAChB,KAAK,SAAS;gBACV,OAAO,eAAe,GAAG,IAAI,CAAA;SACpC;QACD,MAAM,IAAI,2BAAe,CAAC,mBAAmB,CAAC,CAAA;KACjD;IAED,QAAQ,IAAI,CAAC,CAAC,EAAE;QACZ,KAAK,8BAA8B,CAAC;QACpC,KAAK,UAAU,CAAC;QAChB,KAAK,eAAe,CAAC;QACrB,KAAK,0BAA0B,CAAC;QAChC,KAAK,WAAW,CAAC;QACjB,KAAK,sBAAsB;YACvB,OAAO,IAAI,CAAC,MAAM,CAAA;QACtB,KAAK,UAAU,CAAC;QAChB,KAAK,eAAe;YAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAA;QACvB,KAAK,iCAAiC,CAAC;QACvC,KAAK,aAAa,CAAC;QACnB,KAAK,kBAAkB,CAAC;QACxB,KAAK,6BAA6B,CAAC;QACnC,KAAK,cAAc,CAAC;QACpB,KAAK,yBAAyB;YAC1B,OAAO,eAAe,GAAG,IAAI,CAAC,SAAS,CAAA;KAC9C;IAED,MAAM,IAAI,2BAAe,CAAC,iBAAiB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;AACxD,CAAC;AArCD,0CAqCC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,IAA0B;IACvD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,QAAQ,IAAI,CAAC,CAAC,EAAE;YACZ,KAAK,UAAU;gBACX,OAAO,MAAM,CAAA;YACjB,KAAK,UAAU;gBACX,OAAO,MAAM,CAAA;YACjB,KAAK,aAAa;gBACd,OAAO,SAAS,CAAA;SACvB;KACJ;IAED,IAAI,IAAI,GAAG,CAAC,EAAE;QACV,IAAI,kBAAkB,IAAI,IAAI,EAAE;YAC5B,OAAO,MAAM,CAAA;SAChB;QAED,IAAI,qBAAqB,IAAI,IAAI,IAAI,IAAI,KAAK,eAAe,EAAE;YAC3D,OAAO,SAAS,CAAA;SACnB;QAED,IAAI,kBAAkB,IAAI,IAAI,IAAI,IAAI,KAAK,mBAAmB,EAAE;YAC5D,kBAAkB;YAClB,MAAM,IAAI,8BAAkB,CAAC,gCAAgC,CAAC,CAAA;SACjE;KACJ;SAAM,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,WAAW,EAAE;QACxC,OAAO,MAAM,CAAA;KAChB;IAED,MAAM,IAAI,2BAAe,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAA;AAChE,CAAC;AA9BD,4CA8BC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,MAAc;IAC7C,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAErC,QAAQ,IAAI,EAAE;QACV,KAAK,MAAM;YACP,OAAO,MAAM,CAAA;QACjB,KAAK,MAAM;YACP,OAAO,CAAC,MAAM,CAAA;QAClB,KAAK,SAAS;YACV,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;KACzC;AACL,CAAC;AAXD,gDAWC;AAED;;;GAGG;AACH,QAAe,CAAC,CAAC,eAAe,CAAC,GAAgC;IAC7D,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAM;IAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACpB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;YAClB,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;SAC7B;QAED,OAAM;KACT;IAED,QAAQ,GAAG,CAAC,CAAC,EAAE;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,kBAAkB;YACnB,MAAM,GAAG,CAAA;YAET,OAAM;KACb;IAED,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE;QACxE,MAAM,GAAG,CAAC,IAAI,CAAA;KACjB;IAED,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;QAC/C,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;YAChB,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,eAAe,CAAC;YACrB,KAAK,kBAAkB;gBACnB,MAAM,GAAG,CAAC,IAAI,CAAA;gBACd,MAAK;SACZ;KACJ;IAED,IAAI,SAAS,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE;QACrD,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE;YACnB,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,eAAe,CAAC;YACrB,KAAK,kBAAkB;gBACnB,MAAM,GAAG,CAAC,OAAO,CAAA;gBACjB,MAAK;SACZ;KACJ;IAED,IAAI,OAAO,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE;QAChE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE;YAC1B,+BAA+B;YAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE;gBAC/C,MAAM,IAAI,CAAA;aACb;SACJ;KACJ;IAED,IAAI,OAAO,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE;QAChE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE;YAC1B,+BAA+B;YAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC1B,QAAQ,IAAI,CAAC,CAAC,EAAE;oBACZ,KAAK,MAAM,CAAC;oBACZ,KAAK,SAAS,CAAC;oBACf,KAAK,eAAe,CAAC;oBACrB,KAAK,kBAAkB;wBACnB,MAAM,IAAI,CAAA;wBACV,MAAK;iBACZ;aACJ;SACJ;KACJ;AACL,CAAC;AAxED,0CAwEC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError, MtUnsupportedError } from '../types/errors.js'\nimport { BasicPeerType } from '../types/peers.js'\n\n// src: https://github.com/tdlib/td/blob/master/td/telegram/DialogId.h\nconst ZERO_CHANNEL_ID = -1000000000000\nconst ZERO_SECRET_CHAT_ID = -2000000000000\nconst MAX_SECRET_CHAT_ID = -1997852516353 // ZERO_SECRET_CHAT_ID + 0x7fffffff\n// src: https://github.com/tdlib/td/blob/master/td/telegram/ChatId.h\n// const MAX_CHAT_ID = 999999999999\nconst MIN_MARKED_CHAT_ID = -999999999999 // -MAX_CHAT_ID\n// src: https://github.com/tdlib/td/blob/master/td/telegram/UserId.h\n// MAX_USER_ID = (1ll << 40) - 1\nconst MAX_USER_ID = 1099511627775\n// src: https://github.com/tdlib/td/blob/master/td/telegram/ChannelId.h\n// the last (1 << 31) - 1 identifiers will be used for secret chat dialog identifiers\n// MAX_CHANNEL_ID = 1000000000000ll - (1ll << 31)\n// const MAX_CHANNEL_ID = 997852516352\nconst MIN_MARKED_CHANNEL_ID = -1997852516352 // ZERO_CHANNEL_ID - MAX_CHANNEL_ID\n\n/**\n * Add or remove channel marker from ID\n */\nexport function toggleChannelIdMark(id: number): number {\n return ZERO_CHANNEL_ID - id\n}\n\n/**\n * Get the bare (non-marked) ID from a {@link tl.TypePeer}\n */\nexport function getBarePeerId(peer: tl.TypePeer): number {\n switch (peer._) {\n case 'peerUser':\n return peer.userId\n case 'peerChat':\n return peer.chatId\n case 'peerChannel':\n return peer.channelId\n }\n}\n\n// src: https://github.com/tdlib/td/blob/master/td/telegram/DialogId.cpp\n\n/**\n * Get the marked (non-bare) ID from a {@link tl.TypePeer}\n *\n * *Mark* is bot API compatible, which is:\n * - ID stays the same for users\n * - ID is negated for chats\n * - ID is negated and `-1e12` is subtracted for channels\n */\nexport function getMarkedPeerId(peerId: number, peerType: BasicPeerType): number\nexport function getMarkedPeerId(peer: tl.TypePeer | tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel): number\n\nexport function getMarkedPeerId(\n peer: tl.TypePeer | tl.TypeInputPeer | tl.TypeInputUser | tl.TypeInputChannel | number,\n peerType?: BasicPeerType,\n): number {\n if (typeof peer === 'number') {\n switch (peerType) {\n case 'user':\n return peer\n case 'chat':\n return -peer\n case 'channel':\n return ZERO_CHANNEL_ID - peer\n }\n throw new MtArgumentError('Invalid peer type')\n }\n\n switch (peer._) {\n case 'mtcute.dummyInputPeerMinUser':\n case 'peerUser':\n case 'inputPeerUser':\n case 'inputPeerUserFromMessage':\n case 'inputUser':\n case 'inputUserFromMessage':\n return peer.userId\n case 'peerChat':\n case 'inputPeerChat':\n return -peer.chatId\n case 'mtcute.dummyInputPeerMinChannel':\n case 'peerChannel':\n case 'inputPeerChannel':\n case 'inputPeerChannelFromMessage':\n case 'inputChannel':\n case 'inputChannelFromMessage':\n return ZERO_CHANNEL_ID - peer.channelId\n }\n\n throw new MtArgumentError(`Invalid peer: ${peer._}`)\n}\n\n/**\n * Extract basic peer type from {@link tl.TypePeer} or its marked ID.\n */\nexport function getBasicPeerType(peer: tl.TypePeer | number): BasicPeerType {\n if (typeof peer !== 'number') {\n switch (peer._) {\n case 'peerUser':\n return 'user'\n case 'peerChat':\n return 'chat'\n case 'peerChannel':\n return 'channel'\n }\n }\n\n if (peer < 0) {\n if (MIN_MARKED_CHAT_ID <= peer) {\n return 'chat'\n }\n\n if (MIN_MARKED_CHANNEL_ID <= peer && peer !== ZERO_CHANNEL_ID) {\n return 'channel'\n }\n\n if (MAX_SECRET_CHAT_ID >= peer && peer !== ZERO_SECRET_CHAT_ID) {\n // return 'secret'\n throw new MtUnsupportedError('Secret chats are not supported')\n }\n } else if (peer > 0 && peer <= MAX_USER_ID) {\n return 'user'\n }\n\n throw new MtArgumentError(`Invalid marked peer id: ${peer}`)\n}\n\n/**\n * Extract bare peer ID from marked ID.\n *\n * @param peerId Marked peer ID\n */\nexport function markedPeerIdToBare(peerId: number): number {\n const type = getBasicPeerType(peerId)\n\n switch (type) {\n case 'user':\n return peerId\n case 'chat':\n return -peerId\n case 'channel':\n return toggleChannelIdMark(peerId)\n }\n}\n\n/**\n * Extracts all (cacheable) entities from a TlObject or a list of them.\n * Only checks `.user`, `.chat`, `.channel`, `.users` and `.chats` properties\n */\nexport function* getAllPeersFrom(obj: tl.TlObject | tl.TlObject[]): Iterable<tl.TypeUser | tl.TypeChat> {\n if (typeof obj !== 'object') return\n\n if (Array.isArray(obj)) {\n for (const it of obj) {\n yield* getAllPeersFrom(it)\n }\n\n return\n }\n\n switch (obj._) {\n case 'user':\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj\n\n return\n }\n\n if ('user' in obj && typeof obj.user === 'object' && obj.user._ === 'user') {\n yield obj.user\n }\n\n if ('chat' in obj && typeof obj.chat === 'object') {\n switch (obj.chat._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj.chat\n break\n }\n }\n\n if ('channel' in obj && typeof obj.channel === 'object') {\n switch (obj.channel._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield obj.channel\n break\n }\n }\n\n if ('users' in obj && Array.isArray(obj.users) && obj.users.length) {\n for (const user of obj.users) {\n // .users is sometimes number[]\n if (typeof user === 'object' && user._ === 'user') {\n yield user\n }\n }\n }\n\n if ('chats' in obj && Array.isArray(obj.chats) && obj.chats.length) {\n for (const chat of obj.chats) {\n // .chats is sometimes number[]\n if (typeof chat === 'object') {\n switch (chat._) {\n case 'chat':\n case 'channel':\n case 'chatForbidden':\n case 'channelForbidden':\n yield chat\n break\n }\n }\n }\n }\n}\n"]}