@mtcute/convert 0.8.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 (154) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +46 -0
  3. package/cjs/dcs.d.ts +4 -0
  4. package/cjs/dcs.js +113 -0
  5. package/cjs/dcs.js.map +1 -0
  6. package/cjs/gramjs/convert.d.ts +4 -0
  7. package/cjs/gramjs/convert.js +29 -0
  8. package/cjs/gramjs/convert.js.map +1 -0
  9. package/cjs/gramjs/index.d.ts +4 -0
  10. package/cjs/gramjs/index.js +21 -0
  11. package/cjs/gramjs/index.js.map +1 -0
  12. package/cjs/gramjs/parse.d.ts +2 -0
  13. package/cjs/gramjs/parse.js +31 -0
  14. package/cjs/gramjs/parse.js.map +1 -0
  15. package/cjs/gramjs/serialize.d.ts +2 -0
  16. package/cjs/gramjs/serialize.js +24 -0
  17. package/cjs/gramjs/serialize.js.map +1 -0
  18. package/cjs/gramjs/types.d.ts +7 -0
  19. package/cjs/gramjs/types.js +3 -0
  20. package/cjs/gramjs/types.js.map +1 -0
  21. package/cjs/index.d.ts +5 -0
  22. package/cjs/index.js +22 -0
  23. package/cjs/index.js.map +1 -0
  24. package/cjs/mtkruto/convert.d.ts +4 -0
  25. package/cjs/mtkruto/convert.js +32 -0
  26. package/cjs/mtkruto/convert.js.map +1 -0
  27. package/cjs/mtkruto/index.d.ts +4 -0
  28. package/cjs/mtkruto/index.js +21 -0
  29. package/cjs/mtkruto/index.js.map +1 -0
  30. package/cjs/mtkruto/parse.d.ts +2 -0
  31. package/cjs/mtkruto/parse.js +28 -0
  32. package/cjs/mtkruto/parse.js.map +1 -0
  33. package/cjs/mtkruto/serialize.d.ts +2 -0
  34. package/cjs/mtkruto/serialize.js +15 -0
  35. package/cjs/mtkruto/serialize.js.map +1 -0
  36. package/cjs/mtkruto/types.d.ts +5 -0
  37. package/cjs/mtkruto/types.js +3 -0
  38. package/cjs/mtkruto/types.js.map +1 -0
  39. package/cjs/package.json +3 -0
  40. package/cjs/pyrogram/convert.d.ts +6 -0
  41. package/cjs/pyrogram/convert.js +41 -0
  42. package/cjs/pyrogram/convert.js.map +1 -0
  43. package/cjs/pyrogram/index.d.ts +4 -0
  44. package/cjs/pyrogram/index.js +21 -0
  45. package/cjs/pyrogram/index.js.map +1 -0
  46. package/cjs/pyrogram/parse.d.ts +2 -0
  47. package/cjs/pyrogram/parse.js +56 -0
  48. package/cjs/pyrogram/parse.js.map +1 -0
  49. package/cjs/pyrogram/serialize.d.ts +2 -0
  50. package/cjs/pyrogram/serialize.js +40 -0
  51. package/cjs/pyrogram/serialize.js.map +1 -0
  52. package/cjs/pyrogram/types.d.ts +8 -0
  53. package/cjs/pyrogram/types.js +3 -0
  54. package/cjs/pyrogram/types.js.map +1 -0
  55. package/cjs/telethon/convert.d.ts +4 -0
  56. package/cjs/telethon/convert.js +45 -0
  57. package/cjs/telethon/convert.js.map +1 -0
  58. package/cjs/telethon/index.d.ts +4 -0
  59. package/cjs/telethon/index.js +21 -0
  60. package/cjs/telethon/index.js.map +1 -0
  61. package/cjs/telethon/parse.d.ts +2 -0
  62. package/cjs/telethon/parse.js +33 -0
  63. package/cjs/telethon/parse.js.map +1 -0
  64. package/cjs/telethon/serialize.d.ts +2 -0
  65. package/cjs/telethon/serialize.js +34 -0
  66. package/cjs/telethon/serialize.js.map +1 -0
  67. package/cjs/telethon/types.d.ts +7 -0
  68. package/cjs/telethon/types.js +3 -0
  69. package/cjs/telethon/types.js.map +1 -0
  70. package/cjs/types.d.ts +1 -0
  71. package/cjs/types.js +3 -0
  72. package/cjs/types.js.map +1 -0
  73. package/cjs/utils/ip.d.ts +3 -0
  74. package/cjs/utils/ip.js +45 -0
  75. package/cjs/utils/ip.js.map +1 -0
  76. package/cjs/utils/rle.d.ts +3 -0
  77. package/cjs/utils/rle.js +55 -0
  78. package/cjs/utils/rle.js.map +1 -0
  79. package/esm/dcs.d.ts +4 -0
  80. package/esm/dcs.js +109 -0
  81. package/esm/dcs.js.map +1 -0
  82. package/esm/gramjs/convert.d.ts +4 -0
  83. package/esm/gramjs/convert.js +24 -0
  84. package/esm/gramjs/convert.js.map +1 -0
  85. package/esm/gramjs/index.d.ts +4 -0
  86. package/esm/gramjs/index.js +5 -0
  87. package/esm/gramjs/index.js.map +1 -0
  88. package/esm/gramjs/parse.d.ts +2 -0
  89. package/esm/gramjs/parse.js +27 -0
  90. package/esm/gramjs/parse.js.map +1 -0
  91. package/esm/gramjs/serialize.d.ts +2 -0
  92. package/esm/gramjs/serialize.js +20 -0
  93. package/esm/gramjs/serialize.js.map +1 -0
  94. package/esm/gramjs/types.d.ts +7 -0
  95. package/esm/gramjs/types.js +2 -0
  96. package/esm/gramjs/types.js.map +1 -0
  97. package/esm/index.d.ts +5 -0
  98. package/esm/index.js +6 -0
  99. package/esm/index.js.map +1 -0
  100. package/esm/mtkruto/convert.d.ts +4 -0
  101. package/esm/mtkruto/convert.js +27 -0
  102. package/esm/mtkruto/convert.js.map +1 -0
  103. package/esm/mtkruto/index.d.ts +4 -0
  104. package/esm/mtkruto/index.js +5 -0
  105. package/esm/mtkruto/index.js.map +1 -0
  106. package/esm/mtkruto/parse.d.ts +2 -0
  107. package/esm/mtkruto/parse.js +24 -0
  108. package/esm/mtkruto/parse.js.map +1 -0
  109. package/esm/mtkruto/serialize.d.ts +2 -0
  110. package/esm/mtkruto/serialize.js +11 -0
  111. package/esm/mtkruto/serialize.js.map +1 -0
  112. package/esm/mtkruto/types.d.ts +5 -0
  113. package/esm/mtkruto/types.js +2 -0
  114. package/esm/mtkruto/types.js.map +1 -0
  115. package/esm/pyrogram/convert.d.ts +6 -0
  116. package/esm/pyrogram/convert.js +36 -0
  117. package/esm/pyrogram/convert.js.map +1 -0
  118. package/esm/pyrogram/index.d.ts +4 -0
  119. package/esm/pyrogram/index.js +5 -0
  120. package/esm/pyrogram/index.js.map +1 -0
  121. package/esm/pyrogram/parse.d.ts +2 -0
  122. package/esm/pyrogram/parse.js +52 -0
  123. package/esm/pyrogram/parse.js.map +1 -0
  124. package/esm/pyrogram/serialize.d.ts +2 -0
  125. package/esm/pyrogram/serialize.js +36 -0
  126. package/esm/pyrogram/serialize.js.map +1 -0
  127. package/esm/pyrogram/types.d.ts +8 -0
  128. package/esm/pyrogram/types.js +2 -0
  129. package/esm/pyrogram/types.js.map +1 -0
  130. package/esm/telethon/convert.d.ts +4 -0
  131. package/esm/telethon/convert.js +40 -0
  132. package/esm/telethon/convert.js.map +1 -0
  133. package/esm/telethon/index.d.ts +4 -0
  134. package/esm/telethon/index.js +5 -0
  135. package/esm/telethon/index.js.map +1 -0
  136. package/esm/telethon/parse.d.ts +2 -0
  137. package/esm/telethon/parse.js +29 -0
  138. package/esm/telethon/parse.js.map +1 -0
  139. package/esm/telethon/serialize.d.ts +2 -0
  140. package/esm/telethon/serialize.js +30 -0
  141. package/esm/telethon/serialize.js.map +1 -0
  142. package/esm/telethon/types.d.ts +7 -0
  143. package/esm/telethon/types.js +2 -0
  144. package/esm/telethon/types.js.map +1 -0
  145. package/esm/types.d.ts +1 -0
  146. package/esm/types.js +2 -0
  147. package/esm/types.js.map +1 -0
  148. package/esm/utils/ip.d.ts +3 -0
  149. package/esm/utils/ip.js +39 -0
  150. package/esm/utils/ip.js.map +1 -0
  151. package/esm/utils/rle.d.ts +3 -0
  152. package/esm/utils/rle.js +49 -0
  153. package/esm/utils/rle.js.map +1 -0
  154. package/package.json +22 -0
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./convert.js"), exports);
18
+ __exportStar(require("./parse.js"), exports);
19
+ __exportStar(require("./serialize.js"), exports);
20
+ __exportStar(require("./types.js"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pyrogram/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,6CAA0B;AAC1B,iDAA8B;AAC9B,6CAA0B","sourcesContent":["export * from './convert.js'\nexport * from './parse.js'\nexport * from './serialize.js'\nexport * from './types.js'\n"]}
@@ -0,0 +1,2 @@
1
+ import { PyrogramSession } from './types.js';
2
+ export declare function parsePyrogramSession(session: string): PyrogramSession;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ // source: https://github.com/pyrogram/pyrogram/blob/master/pyrogram/storage/storage.py
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.parsePyrogramSession = void 0;
5
+ const core_1 = require("@mtcute/core");
6
+ const platform_js_1 = require("@mtcute/core/platform.js");
7
+ const utils_js_1 = require("@mtcute/core/utils.js");
8
+ const SESSION_STRING_SIZE = 351;
9
+ const SESSION_STRING_SIZE_64 = 356;
10
+ function parsePyrogramSession(session) {
11
+ const data = (0, platform_js_1.getPlatform)().base64Decode(session, true);
12
+ const dv = (0, utils_js_1.dataViewFromBuffer)(data);
13
+ if (session.length === SESSION_STRING_SIZE || session.length === SESSION_STRING_SIZE_64) {
14
+ // old format
15
+ // const OLD_SESSION_STRING_FORMAT = '>B?256sI?'
16
+ // const OLD_SESSION_STRING_FORMAT_64 = '>B?256sQ?'
17
+ const dcId = dv.getUint8(0);
18
+ const isTest = dv.getUint8(1) !== 0;
19
+ const authKey = data.subarray(2, 258);
20
+ let userId;
21
+ if (data.length === SESSION_STRING_SIZE) {
22
+ userId = dv.getUint32(258);
23
+ }
24
+ else {
25
+ const high = dv.getUint32(258);
26
+ const low = dv.getUint32(262);
27
+ userId = core_1.Long.fromBits(low, high).toNumber();
28
+ }
29
+ const isBot = dv.getUint8(data.length - 1) !== 0;
30
+ return {
31
+ dcId,
32
+ isTest,
33
+ authKey,
34
+ userId,
35
+ isBot,
36
+ };
37
+ }
38
+ // new format
39
+ // const SESSION_STRING_FORMAT = '>BI?256sQ?'
40
+ const dcId = dv.getUint8(0);
41
+ const apiId = dv.getUint32(1);
42
+ const isTest = dv.getUint8(5) !== 0;
43
+ const authKey = data.subarray(6, 262);
44
+ const userId = (0, utils_js_1.longFromBuffer)(data.subarray(262, 270), true, false).toNumber();
45
+ const isBot = dv.getUint8(270) !== 0;
46
+ return {
47
+ dcId,
48
+ apiId,
49
+ isTest,
50
+ authKey,
51
+ userId,
52
+ isBot,
53
+ };
54
+ }
55
+ exports.parsePyrogramSession = parsePyrogramSession;
56
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/pyrogram/parse.ts"],"names":[],"mappings":";AAAA,uFAAuF;;;AAEvF,uCAAmC;AACnC,0DAAsD;AACtD,oDAA0E;AAI1E,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAC/B,MAAM,sBAAsB,GAAG,GAAG,CAAA;AAElC,SAAgB,oBAAoB,CAAC,OAAe;IAChD,MAAM,IAAI,GAAG,IAAA,yBAAW,GAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACtD,MAAM,EAAE,GAAG,IAAA,6BAAkB,EAAC,IAAI,CAAC,CAAA;IAEnC,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,IAAI,OAAO,CAAC,MAAM,KAAK,sBAAsB,EAAE;QACrF,aAAa;QACb,gDAAgD;QAChD,mDAAmD;QACnD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAErC,IAAI,MAAM,CAAA;QAEV,IAAI,IAAI,CAAC,MAAM,KAAK,mBAAmB,EAAE;YACrC,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;SAC7B;aAAM;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAC9B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAC7B,MAAM,GAAG,WAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;SAC/C;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QAEhD,OAAO;YACH,IAAI;YACJ,MAAM;YACN,OAAO;YACP,MAAM;YACN,KAAK;SACR,CAAA;KACJ;IAED,aAAa;IACb,6CAA6C;IAC7C,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC3B,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,IAAA,yBAAc,EAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC9E,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAEpC,OAAO;QACH,IAAI;QACJ,KAAK;QACL,MAAM;QACN,OAAO;QACP,MAAM;QACN,KAAK;KACR,CAAA;AACL,CAAC;AAlDD,oDAkDC","sourcesContent":["// source: https://github.com/pyrogram/pyrogram/blob/master/pyrogram/storage/storage.py\n\nimport { Long } from '@mtcute/core'\nimport { getPlatform } from '@mtcute/core/platform.js'\nimport { dataViewFromBuffer, longFromBuffer } from '@mtcute/core/utils.js'\n\nimport { PyrogramSession } from './types.js'\n\nconst SESSION_STRING_SIZE = 351\nconst SESSION_STRING_SIZE_64 = 356\n\nexport function parsePyrogramSession(session: string): PyrogramSession {\n const data = getPlatform().base64Decode(session, true)\n const dv = dataViewFromBuffer(data)\n\n if (session.length === SESSION_STRING_SIZE || session.length === SESSION_STRING_SIZE_64) {\n // old format\n // const OLD_SESSION_STRING_FORMAT = '>B?256sI?'\n // const OLD_SESSION_STRING_FORMAT_64 = '>B?256sQ?'\n const dcId = dv.getUint8(0)\n const isTest = dv.getUint8(1) !== 0\n const authKey = data.subarray(2, 258)\n\n let userId\n\n if (data.length === SESSION_STRING_SIZE) {\n userId = dv.getUint32(258)\n } else {\n const high = dv.getUint32(258)\n const low = dv.getUint32(262)\n userId = Long.fromBits(low, high).toNumber()\n }\n\n const isBot = dv.getUint8(data.length - 1) !== 0\n\n return {\n dcId,\n isTest,\n authKey,\n userId,\n isBot,\n }\n }\n\n // new format\n // const SESSION_STRING_FORMAT = '>BI?256sQ?'\n const dcId = dv.getUint8(0)\n const apiId = dv.getUint32(1)\n const isTest = dv.getUint8(5) !== 0\n const authKey = data.subarray(6, 262)\n const userId = longFromBuffer(data.subarray(262, 270), true, false).toNumber()\n const isBot = dv.getUint8(270) !== 0\n\n return {\n dcId,\n apiId,\n isTest,\n authKey,\n userId,\n isBot,\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { PyrogramSession } from './types.js';
2
+ export declare function serializePyrogramSession(session: PyrogramSession): string;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializePyrogramSession = void 0;
4
+ const core_1 = require("@mtcute/core");
5
+ const platform_js_1 = require("@mtcute/core/platform.js");
6
+ const utils_js_1 = require("@mtcute/core/utils.js");
7
+ const SESSION_STRING_SIZE_OLD = 267;
8
+ const SESSION_STRING_SIZE = 271;
9
+ function serializePyrogramSession(session) {
10
+ if (session.authKey.length !== 256) {
11
+ throw new core_1.MtArgumentError('authKey must be 256 bytes long');
12
+ }
13
+ const userIdLong = core_1.Long.fromNumber(session.userId, true);
14
+ let u8;
15
+ if (session.apiId === undefined) {
16
+ // old format
17
+ u8 = new Uint8Array(SESSION_STRING_SIZE_OLD);
18
+ const dv = (0, utils_js_1.dataViewFromBuffer)(u8);
19
+ dv.setUint8(0, session.dcId);
20
+ dv.setUint8(1, session.isTest ? 1 : 0);
21
+ u8.set(session.authKey, 2);
22
+ dv.setUint32(258, userIdLong.high);
23
+ dv.setUint32(262, userIdLong.low);
24
+ dv.setUint8(266, session.isBot ? 1 : 0);
25
+ }
26
+ else {
27
+ u8 = new Uint8Array(SESSION_STRING_SIZE);
28
+ const dv = (0, utils_js_1.dataViewFromBuffer)(u8);
29
+ dv.setUint8(0, session.dcId);
30
+ dv.setUint32(1, session.apiId);
31
+ dv.setUint8(5, session.isTest ? 1 : 0);
32
+ u8.set(session.authKey, 6);
33
+ dv.setUint32(262, userIdLong.high);
34
+ dv.setUint32(266, userIdLong.low);
35
+ dv.setUint8(270, session.isBot ? 1 : 0);
36
+ }
37
+ return (0, platform_js_1.getPlatform)().base64Encode(u8, true);
38
+ }
39
+ exports.serializePyrogramSession = serializePyrogramSession;
40
+ //# sourceMappingURL=serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/pyrogram/serialize.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AACpD,0DAAsD;AACtD,oDAA0D;AAI1D,MAAM,uBAAuB,GAAG,GAAG,CAAA;AACnC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAE/B,SAAgB,wBAAwB,CAAC,OAAwB;IAC7D,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE;QAChC,MAAM,IAAI,sBAAe,CAAC,gCAAgC,CAAC,CAAA;KAC9D;IAED,MAAM,UAAU,GAAG,WAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAExD,IAAI,EAAc,CAAA;IAElB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;QAC7B,aAAa;QACb,EAAE,GAAG,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAA;QAC5C,MAAM,EAAE,GAAG,IAAA,6BAAkB,EAAC,EAAE,CAAC,CAAA;QAEjC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;QAC5B,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC1B,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QAClC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;QACjC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAC1C;SAAM;QACH,EAAE,GAAG,IAAI,UAAU,CAAC,mBAAmB,CAAC,CAAA;QACxC,MAAM,EAAE,GAAG,IAAA,6BAAkB,EAAC,EAAE,CAAC,CAAA;QAEjC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;QAC5B,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAC9B,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAE1B,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QAClC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;QACjC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAC1C;IAED,OAAO,IAAA,yBAAW,GAAE,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;AAC/C,CAAC;AAnCD,4DAmCC","sourcesContent":["import { Long, MtArgumentError } from '@mtcute/core'\nimport { getPlatform } from '@mtcute/core/platform.js'\nimport { dataViewFromBuffer } from '@mtcute/core/utils.js'\n\nimport { PyrogramSession } from './types.js'\n\nconst SESSION_STRING_SIZE_OLD = 267\nconst SESSION_STRING_SIZE = 271\n\nexport function serializePyrogramSession(session: PyrogramSession): string {\n if (session.authKey.length !== 256) {\n throw new MtArgumentError('authKey must be 256 bytes long')\n }\n\n const userIdLong = Long.fromNumber(session.userId, true)\n\n let u8: Uint8Array\n\n if (session.apiId === undefined) {\n // old format\n u8 = new Uint8Array(SESSION_STRING_SIZE_OLD)\n const dv = dataViewFromBuffer(u8)\n\n dv.setUint8(0, session.dcId)\n dv.setUint8(1, session.isTest ? 1 : 0)\n u8.set(session.authKey, 2)\n dv.setUint32(258, userIdLong.high)\n dv.setUint32(262, userIdLong.low)\n dv.setUint8(266, session.isBot ? 1 : 0)\n } else {\n u8 = new Uint8Array(SESSION_STRING_SIZE)\n const dv = dataViewFromBuffer(u8)\n\n dv.setUint8(0, session.dcId)\n dv.setUint32(1, session.apiId)\n dv.setUint8(5, session.isTest ? 1 : 0)\n u8.set(session.authKey, 6)\n\n dv.setUint32(262, userIdLong.high)\n dv.setUint32(266, userIdLong.low)\n dv.setUint8(270, session.isBot ? 1 : 0)\n }\n\n return getPlatform().base64Encode(u8, true)\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export interface PyrogramSession {
2
+ apiId?: number;
3
+ dcId: number;
4
+ isTest: boolean;
5
+ authKey: Uint8Array;
6
+ userId: number;
7
+ isBot: boolean;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/pyrogram/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PyrogramSession {\n apiId?: number\n dcId: number\n isTest: boolean\n authKey: Uint8Array\n userId: number\n isBot: boolean\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import { StringSessionData } from '@mtcute/core/utils.js';
2
+ import { TelethonSession } from './types.js';
3
+ export declare function convertFromTelethonSession(session: TelethonSession | string): StringSessionData;
4
+ export declare function convertToTelethonSession(session: StringSessionData | string): string;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertToTelethonSession = exports.convertFromTelethonSession = void 0;
4
+ const utils_js_1 = require("@mtcute/core/utils.js");
5
+ const reader_js_1 = require("@mtcute/tl/binary/reader.js");
6
+ const dcs_js_1 = require("../dcs.js");
7
+ const parse_js_1 = require("./parse.js");
8
+ const serialize_js_1 = require("./serialize.js");
9
+ function convertFromTelethonSession(session) {
10
+ if (typeof session === 'string') {
11
+ session = (0, parse_js_1.parseTelethonSession)(session);
12
+ }
13
+ const dc = {
14
+ id: session.dcId,
15
+ ipAddress: session.ipAddress,
16
+ port: session.port,
17
+ ipv6: session.ipv6,
18
+ };
19
+ return {
20
+ version: 3,
21
+ // we don't exactly have that information. try to deduce it from DC_MAPPING_TEST
22
+ // todo: we should maybe check this at connect?
23
+ testMode: (0, dcs_js_1.isTestDc)(session.ipAddress),
24
+ primaryDcs: {
25
+ main: dc,
26
+ media: dc,
27
+ },
28
+ authKey: session.authKey,
29
+ };
30
+ }
31
+ exports.convertFromTelethonSession = convertFromTelethonSession;
32
+ function convertToTelethonSession(session) {
33
+ if (typeof session === 'string') {
34
+ session = (0, utils_js_1.readStringSession)(reader_js_1.__tlReaderMap, session);
35
+ }
36
+ return (0, serialize_js_1.serializeTelethonSession)({
37
+ dcId: session.primaryDcs.main.id,
38
+ ipAddress: session.primaryDcs.main.ipAddress,
39
+ port: session.primaryDcs.main.port,
40
+ ipv6: session.primaryDcs.main.ipv6 ?? false,
41
+ authKey: session.authKey,
42
+ });
43
+ }
44
+ exports.convertToTelethonSession = convertToTelethonSession;
45
+ //# sourceMappingURL=convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/telethon/convert.ts"],"names":[],"mappings":";;;AAAA,oDAA2F;AAC3F,2DAA2D;AAE3D,sCAAoC;AACpC,yCAAiD;AACjD,iDAAyD;AAGzD,SAAgB,0BAA0B,CAAC,OAAiC;IACxE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC7B,OAAO,GAAG,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAA;KAC1C;IAED,MAAM,EAAE,GAAkB;QACtB,EAAE,EAAE,OAAO,CAAC,IAAI;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;KACrB,CAAA;IAED,OAAO;QACH,OAAO,EAAE,CAAC;QACV,gFAAgF;QAChF,+CAA+C;QAC/C,QAAQ,EAAE,IAAA,iBAAQ,EAAC,OAAO,CAAC,SAAS,CAAC;QACrC,UAAU,EAAE;YACR,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,EAAE;SACZ;QACD,OAAO,EAAE,OAAO,CAAC,OAAO;KAC3B,CAAA;AACL,CAAC;AAvBD,gEAuBC;AAED,SAAgB,wBAAwB,CAAC,OAAmC;IACxE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC7B,OAAO,GAAG,IAAA,4BAAiB,EAAC,yBAAa,EAAE,OAAO,CAAC,CAAA;KACtD;IAED,OAAO,IAAA,uCAAwB,EAAC;QAC5B,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAChC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;QAC5C,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI;QAClC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK;QAC3C,OAAO,EAAE,OAAO,CAAC,OAAO;KAC3B,CAAC,CAAA;AACN,CAAC;AAZD,4DAYC","sourcesContent":["import { BasicDcOption, readStringSession, StringSessionData } from '@mtcute/core/utils.js'\nimport { __tlReaderMap } from '@mtcute/tl/binary/reader.js'\n\nimport { isTestDc } from '../dcs.js'\nimport { parseTelethonSession } from './parse.js'\nimport { serializeTelethonSession } from './serialize.js'\nimport { TelethonSession } from './types.js'\n\nexport function convertFromTelethonSession(session: TelethonSession | string): StringSessionData {\n if (typeof session === 'string') {\n session = parseTelethonSession(session)\n }\n\n const dc: BasicDcOption = {\n id: session.dcId,\n ipAddress: session.ipAddress,\n port: session.port,\n ipv6: session.ipv6,\n }\n\n return {\n version: 3,\n // we don't exactly have that information. try to deduce it from DC_MAPPING_TEST\n // todo: we should maybe check this at connect?\n testMode: isTestDc(session.ipAddress),\n primaryDcs: {\n main: dc,\n media: dc,\n },\n authKey: session.authKey,\n }\n}\n\nexport function convertToTelethonSession(session: StringSessionData | string): string {\n if (typeof session === 'string') {\n session = readStringSession(__tlReaderMap, session)\n }\n\n return serializeTelethonSession({\n dcId: session.primaryDcs.main.id,\n ipAddress: session.primaryDcs.main.ipAddress,\n port: session.primaryDcs.main.port,\n ipv6: session.primaryDcs.main.ipv6 ?? false,\n authKey: session.authKey,\n })\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export * from './convert.js';
2
+ export * from './parse.js';
3
+ export * from './serialize.js';
4
+ export * from './types.js';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./convert.js"), exports);
18
+ __exportStar(require("./parse.js"), exports);
19
+ __exportStar(require("./serialize.js"), exports);
20
+ __exportStar(require("./types.js"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telethon/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,6CAA0B;AAC1B,iDAA8B;AAC9B,6CAA0B","sourcesContent":["export * from './convert.js'\nexport * from './parse.js'\nexport * from './serialize.js'\nexport * from './types.js'\n"]}
@@ -0,0 +1,2 @@
1
+ import { TelethonSession } from './types.js';
2
+ export declare function parseTelethonSession(session: string): TelethonSession;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseTelethonSession = void 0;
4
+ const core_1 = require("@mtcute/core");
5
+ const platform_js_1 = require("@mtcute/core/platform.js");
6
+ const utils_js_1 = require("@mtcute/core/utils.js");
7
+ const ip_js_1 = require("../utils/ip.js");
8
+ function parseTelethonSession(session) {
9
+ if (session[0] !== '1') {
10
+ // version
11
+ throw new core_1.MtArgumentError(`Invalid session string (version = ${session[0]})`);
12
+ }
13
+ session = session.slice(1);
14
+ const data = (0, platform_js_1.getPlatform)().base64Decode(session, true);
15
+ const dv = (0, utils_js_1.dataViewFromBuffer)(data);
16
+ const dcId = dv.getUint8(0);
17
+ const ipSize = session.length === 352 ? 4 : 16;
18
+ let pos = 1 + ipSize;
19
+ const ipBytes = data.subarray(1, pos);
20
+ const port = dv.getUint16(pos);
21
+ pos += 2;
22
+ const authKey = data.subarray(pos, pos + 256);
23
+ const ip = (0, ip_js_1.parseIpFromBytes)(ipBytes);
24
+ return {
25
+ dcId,
26
+ ipAddress: ip,
27
+ ipv6: ipSize === 16,
28
+ port,
29
+ authKey,
30
+ };
31
+ }
32
+ exports.parseTelethonSession = parseTelethonSession;
33
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/telethon/parse.ts"],"names":[],"mappings":";;;AAAA,uCAA8C;AAC9C,0DAAsD;AACtD,oDAA0D;AAE1D,0CAAiD;AAGjD,SAAgB,oBAAoB,CAAC,OAAe;IAChD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QACpB,UAAU;QACV,MAAM,IAAI,sBAAe,CAAC,qCAAqC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;KAChF;IAED,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE1B,MAAM,IAAI,GAAG,IAAA,yBAAW,GAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACtD,MAAM,EAAE,GAAG,IAAA,6BAAkB,EAAC,IAAI,CAAC,CAAA;IAEnC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAE3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9C,IAAI,GAAG,GAAG,CAAC,GAAG,MAAM,CAAA;IAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACrC,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC9B,GAAG,IAAI,CAAC,CAAA;IACR,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAA;IAE7C,MAAM,EAAE,GAAG,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAA;IAEpC,OAAO;QACH,IAAI;QACJ,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,MAAM,KAAK,EAAE;QACnB,IAAI;QACJ,OAAO;KACV,CAAA;AACL,CAAC;AA9BD,oDA8BC","sourcesContent":["import { MtArgumentError } from '@mtcute/core'\nimport { getPlatform } from '@mtcute/core/platform.js'\nimport { dataViewFromBuffer } from '@mtcute/core/utils.js'\n\nimport { parseIpFromBytes } from '../utils/ip.js'\nimport { TelethonSession } from './types.js'\n\nexport function parseTelethonSession(session: string): TelethonSession {\n if (session[0] !== '1') {\n // version\n throw new MtArgumentError(`Invalid session string (version = ${session[0]})`)\n }\n\n session = session.slice(1)\n\n const data = getPlatform().base64Decode(session, true)\n const dv = dataViewFromBuffer(data)\n\n const dcId = dv.getUint8(0)\n\n const ipSize = session.length === 352 ? 4 : 16\n let pos = 1 + ipSize\n\n const ipBytes = data.subarray(1, pos)\n const port = dv.getUint16(pos)\n pos += 2\n const authKey = data.subarray(pos, pos + 256)\n\n const ip = parseIpFromBytes(ipBytes)\n\n return {\n dcId,\n ipAddress: ip,\n ipv6: ipSize === 16,\n port,\n authKey,\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { TelethonSession } from './types.js';
2
+ export declare function serializeTelethonSession(session: TelethonSession): string;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeTelethonSession = void 0;
4
+ const core_1 = require("@mtcute/core");
5
+ const platform_js_1 = require("@mtcute/core/platform.js");
6
+ const utils_js_1 = require("@mtcute/core/utils.js");
7
+ const ip_js_1 = require("../utils/ip.js");
8
+ function serializeTelethonSession(session) {
9
+ if (session.authKey.length !== 256) {
10
+ throw new core_1.MtArgumentError('authKey must be 256 bytes long');
11
+ }
12
+ const ipSize = session.ipv6 ? 16 : 4;
13
+ const u8 = new Uint8Array(259 + ipSize);
14
+ const dv = (0, utils_js_1.dataViewFromBuffer)(u8);
15
+ dv.setUint8(0, session.dcId);
16
+ let pos;
17
+ if (session.ipv6) {
18
+ (0, ip_js_1.serializeIpv6ToBytes)(session.ipAddress, u8.subarray(1, 17));
19
+ pos = 17;
20
+ }
21
+ else {
22
+ (0, ip_js_1.serializeIpv4ToBytes)(session.ipAddress, u8.subarray(1, 5));
23
+ pos = 5;
24
+ }
25
+ dv.setUint16(pos, session.port);
26
+ pos += 2;
27
+ u8.set(session.authKey, pos);
28
+ let b64 = (0, platform_js_1.getPlatform)().base64Encode(u8, true);
29
+ while (b64.length % 4 !== 0)
30
+ b64 += '='; // for some reason telethon uses padding
31
+ return '1' + b64;
32
+ }
33
+ exports.serializeTelethonSession = serializeTelethonSession;
34
+ //# sourceMappingURL=serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/telethon/serialize.ts"],"names":[],"mappings":";;;AAAA,uCAA8C;AAC9C,0DAAsD;AACtD,oDAA0D;AAE1D,0CAA2E;AAG3E,SAAgB,wBAAwB,CAAC,OAAwB;IAC7D,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE;QAChC,MAAM,IAAI,sBAAe,CAAC,gCAAgC,CAAC,CAAA;KAC9D;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,CAAA;IACvC,MAAM,EAAE,GAAG,IAAA,6BAAkB,EAAC,EAAE,CAAC,CAAA;IAEjC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAE5B,IAAI,GAAG,CAAA;IAEP,IAAI,OAAO,CAAC,IAAI,EAAE;QACd,IAAA,4BAAoB,EAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC3D,GAAG,GAAG,EAAE,CAAA;KACX;SAAM;QACH,IAAA,4BAAoB,EAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,GAAG,GAAG,CAAC,CAAA;KACV;IAED,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,GAAG,IAAI,CAAC,CAAA;IACR,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAE5B,IAAI,GAAG,GAAG,IAAA,yBAAW,GAAE,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9C,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAAE,GAAG,IAAI,GAAG,CAAA,CAAC,wCAAwC;IAEhF,OAAO,GAAG,GAAG,GAAG,CAAA;AACpB,CAAC;AA7BD,4DA6BC","sourcesContent":["import { MtArgumentError } from '@mtcute/core'\nimport { getPlatform } from '@mtcute/core/platform.js'\nimport { dataViewFromBuffer } from '@mtcute/core/utils.js'\n\nimport { serializeIpv4ToBytes, serializeIpv6ToBytes } from '../utils/ip.js'\nimport { TelethonSession } from './types.js'\n\nexport function serializeTelethonSession(session: TelethonSession) {\n if (session.authKey.length !== 256) {\n throw new MtArgumentError('authKey must be 256 bytes long')\n }\n\n const ipSize = session.ipv6 ? 16 : 4\n const u8 = new Uint8Array(259 + ipSize)\n const dv = dataViewFromBuffer(u8)\n\n dv.setUint8(0, session.dcId)\n\n let pos\n\n if (session.ipv6) {\n serializeIpv6ToBytes(session.ipAddress, u8.subarray(1, 17))\n pos = 17\n } else {\n serializeIpv4ToBytes(session.ipAddress, u8.subarray(1, 5))\n pos = 5\n }\n\n dv.setUint16(pos, session.port)\n pos += 2\n u8.set(session.authKey, pos)\n\n let b64 = getPlatform().base64Encode(u8, true)\n while (b64.length % 4 !== 0) b64 += '=' // for some reason telethon uses padding\n\n return '1' + b64\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export interface TelethonSession {
2
+ dcId: number;
3
+ ipAddress: string;
4
+ ipv6: boolean;
5
+ port: number;
6
+ authKey: Uint8Array;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/telethon/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface TelethonSession {\n dcId: number\n ipAddress: string\n ipv6: boolean\n port: number\n authKey: Uint8Array\n}\n"]}
package/cjs/types.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/cjs/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -0,0 +1,3 @@
1
+ export declare function parseIpFromBytes(data: Uint8Array): string;
2
+ export declare function serializeIpv4ToBytes(ip: string, buf: Uint8Array): void;
3
+ export declare function serializeIpv6ToBytes(ip: string, buf: Uint8Array): void;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeIpv6ToBytes = exports.serializeIpv4ToBytes = exports.parseIpFromBytes = void 0;
4
+ const core_1 = require("@mtcute/core");
5
+ function parseIpFromBytes(data) {
6
+ if (data.length === 4) {
7
+ return `${data[0]}.${data[1]}.${data[2]}.${data[3]}`;
8
+ }
9
+ if (data.length === 16) {
10
+ let res = '';
11
+ for (let i = 0; i < 16; i += 2) {
12
+ res += data[i].toString(16).padStart(2, '0');
13
+ res += data[i + 1].toString(16).padStart(2, '0');
14
+ if (i < 14)
15
+ res += ':';
16
+ }
17
+ return res;
18
+ }
19
+ throw new core_1.MtArgumentError('Invalid IP address length');
20
+ }
21
+ exports.parseIpFromBytes = parseIpFromBytes;
22
+ function serializeIpv4ToBytes(ip, buf) {
23
+ const parts = ip.split('.');
24
+ if (parts.length !== 4) {
25
+ throw new core_1.MtArgumentError('Invalid IPv4 address');
26
+ }
27
+ buf[0] = Number(parts[0]);
28
+ buf[1] = Number(parts[1]);
29
+ buf[2] = Number(parts[2]);
30
+ buf[3] = Number(parts[3]);
31
+ }
32
+ exports.serializeIpv4ToBytes = serializeIpv4ToBytes;
33
+ function serializeIpv6ToBytes(ip, buf) {
34
+ const parts = ip.split(':');
35
+ if (parts.length !== 8) {
36
+ throw new core_1.MtArgumentError('Invalid IPv6 address');
37
+ }
38
+ for (let i = 0; i < 8; i++) {
39
+ const val = parseInt(parts[i], 16);
40
+ buf[i * 2] = val >> 8;
41
+ buf[i * 2 + 1] = val & 0xff;
42
+ }
43
+ }
44
+ exports.serializeIpv6ToBytes = serializeIpv6ToBytes;
45
+ //# sourceMappingURL=ip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ip.js","sourceRoot":"","sources":["../../../src/utils/ip.ts"],"names":[],"mappings":";;;AAAA,uCAA8C;AAE9C,SAAgB,gBAAgB,CAAC,IAAgB;IAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACnB,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;KACvD;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE;QACpB,IAAI,GAAG,GAAG,EAAE,CAAA;QAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5B,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAC5C,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAChD,IAAI,CAAC,GAAG,EAAE;gBAAE,GAAG,IAAI,GAAG,CAAA;SACzB;QAED,OAAO,GAAG,CAAA;KACb;IAED,MAAM,IAAI,sBAAe,CAAC,2BAA2B,CAAC,CAAA;AAC1D,CAAC;AAlBD,4CAkBC;AAED,SAAgB,oBAAoB,CAAC,EAAU,EAAE,GAAe;IAC5D,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACpB,MAAM,IAAI,sBAAe,CAAC,sBAAsB,CAAC,CAAA;KACpD;IAED,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7B,CAAC;AAXD,oDAWC;AAED,SAAgB,oBAAoB,CAAC,EAAU,EAAE,GAAe;IAC5D,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACpB,MAAM,IAAI,sBAAe,CAAC,sBAAsB,CAAC,CAAA;KACpD;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAClC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;QACrB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAA;KAC9B;AACL,CAAC;AAZD,oDAYC","sourcesContent":["import { MtArgumentError } from '@mtcute/core'\n\nexport function parseIpFromBytes(data: Uint8Array): string {\n if (data.length === 4) {\n return `${data[0]}.${data[1]}.${data[2]}.${data[3]}`\n }\n\n if (data.length === 16) {\n let res = ''\n\n for (let i = 0; i < 16; i += 2) {\n res += data[i].toString(16).padStart(2, '0')\n res += data[i + 1].toString(16).padStart(2, '0')\n if (i < 14) res += ':'\n }\n\n return res\n }\n\n throw new MtArgumentError('Invalid IP address length')\n}\n\nexport function serializeIpv4ToBytes(ip: string, buf: Uint8Array) {\n const parts = ip.split('.')\n\n if (parts.length !== 4) {\n throw new MtArgumentError('Invalid IPv4 address')\n }\n\n buf[0] = Number(parts[0])\n buf[1] = Number(parts[1])\n buf[2] = Number(parts[2])\n buf[3] = Number(parts[3])\n}\n\nexport function serializeIpv6ToBytes(ip: string, buf: Uint8Array) {\n const parts = ip.split(':')\n\n if (parts.length !== 8) {\n throw new MtArgumentError('Invalid IPv6 address')\n }\n\n for (let i = 0; i < 8; i++) {\n const val = parseInt(parts[i], 16)\n buf[i * 2] = val >> 8\n buf[i * 2 + 1] = val & 0xff\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export declare function telegramRleEncode(buf: Uint8Array): Uint8Array;
2
+ export declare function telegramRleDecode(buf: Uint8Array): Uint8Array;
3
+ export declare function assertNever(_: never): never;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ // tdlib's RLE only encodes consecutive \x00
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.assertNever = exports.telegramRleDecode = exports.telegramRleEncode = void 0;
5
+ function telegramRleEncode(buf) {
6
+ const len = buf.length;
7
+ const ret = [];
8
+ let count = 0;
9
+ for (let i = 0; i < len; i++) {
10
+ const cur = buf[i];
11
+ if (cur === 0) {
12
+ count += 1;
13
+ }
14
+ else {
15
+ if (count > 0) {
16
+ ret.push(0, count);
17
+ count = 0;
18
+ }
19
+ ret.push(cur);
20
+ }
21
+ }
22
+ if (count > 0) {
23
+ ret.push(0, count);
24
+ }
25
+ return new Uint8Array(ret);
26
+ }
27
+ exports.telegramRleEncode = telegramRleEncode;
28
+ function telegramRleDecode(buf) {
29
+ const len = buf.length;
30
+ const ret = [];
31
+ let prev = -1;
32
+ for (let i = 0; i < len; i++) {
33
+ const cur = buf[i];
34
+ if (prev === 0) {
35
+ for (let j = 0; j < cur; j++) {
36
+ ret.push(prev);
37
+ }
38
+ prev = -1;
39
+ }
40
+ else {
41
+ if (prev !== -1)
42
+ ret.push(prev);
43
+ prev = cur;
44
+ }
45
+ }
46
+ if (prev !== -1)
47
+ ret.push(prev);
48
+ return new Uint8Array(ret);
49
+ }
50
+ exports.telegramRleDecode = telegramRleDecode;
51
+ function assertNever(_) {
52
+ throw new Error('unreachable');
53
+ }
54
+ exports.assertNever = assertNever;
55
+ //# sourceMappingURL=rle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rle.js","sourceRoot":"","sources":["../../../src/utils/rle.ts"],"names":[],"mappings":";AAAA,4CAA4C;;;AAE5C,SAAgB,iBAAiB,CAAC,GAAe;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IACtB,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,KAAK,GAAG,CAAC,CAAA;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QAElB,IAAI,GAAG,KAAK,CAAC,EAAE;YACX,KAAK,IAAI,CAAC,CAAA;SACb;aAAM;YACH,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBAClB,KAAK,GAAG,CAAC,CAAA;aACZ;YAED,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAChB;KACJ;IAED,IAAI,KAAK,GAAG,CAAC,EAAE;QACX,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;KACrB;IAED,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC;AAzBD,8CAyBC;AAED,SAAgB,iBAAiB,CAAC,GAAe;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IACtB,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,IAAI,GAAG,CAAC,CAAC,CAAA;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QAElB,IAAI,IAAI,KAAK,CAAC,EAAE;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACjB;YACD,IAAI,GAAG,CAAC,CAAC,CAAA;SACZ;aAAM;YACH,IAAI,IAAI,KAAK,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,GAAG,GAAG,CAAA;SACb;KACJ;IAED,IAAI,IAAI,KAAK,CAAC,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE/B,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC;AAtBD,8CAsBC;AAED,SAAgB,WAAW,CAAC,CAAQ;IAChC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;AAClC,CAAC;AAFD,kCAEC","sourcesContent":["// tdlib's RLE only encodes consecutive \\x00\n\nexport function telegramRleEncode(buf: Uint8Array): Uint8Array {\n const len = buf.length\n const ret: number[] = []\n let count = 0\n\n for (let i = 0; i < len; i++) {\n const cur = buf[i]\n\n if (cur === 0) {\n count += 1\n } else {\n if (count > 0) {\n ret.push(0, count)\n count = 0\n }\n\n ret.push(cur)\n }\n }\n\n if (count > 0) {\n ret.push(0, count)\n }\n\n return new Uint8Array(ret)\n}\n\nexport function telegramRleDecode(buf: Uint8Array): Uint8Array {\n const len = buf.length\n const ret: number[] = []\n let prev = -1\n\n for (let i = 0; i < len; i++) {\n const cur = buf[i]\n\n if (prev === 0) {\n for (let j = 0; j < cur; j++) {\n ret.push(prev)\n }\n prev = -1\n } else {\n if (prev !== -1) ret.push(prev)\n prev = cur\n }\n }\n\n if (prev !== -1) ret.push(prev)\n\n return new Uint8Array(ret)\n}\n\nexport function assertNever(_: never): never {\n throw new Error('unreachable')\n}\n"]}
package/esm/dcs.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { DcOptions } from '@mtcute/core/utils.js';
2
+ export declare const DC_MAPPING_PROD: Record<number, DcOptions>;
3
+ export declare const DC_MAPPING_TEST: Record<number, DcOptions>;
4
+ export declare function isTestDc(ip: string): boolean;
package/esm/dcs.js ADDED
@@ -0,0 +1,109 @@
1
+ // some libraries only store the DCs in the source code, so we need to map them to the correct DCs
2
+ // this may not be very accurate, but it's better than nothing
3
+ // we *could* always map those to the primary dc (the client should handle that gracefully),
4
+ // but imo it's better to be as accurate as possible
5
+ // we'll also only map to ipv4 since that's more portable
6
+ export const DC_MAPPING_PROD = {
7
+ '1': {
8
+ main: {
9
+ id: 1,
10
+ ipAddress: '149.154.175.56',
11
+ port: 443,
12
+ },
13
+ media: {
14
+ id: 1,
15
+ ipAddress: '149.154.175.211',
16
+ port: 443,
17
+ },
18
+ },
19
+ '2': {
20
+ main: {
21
+ id: 2,
22
+ ipAddress: '149.154.167.41',
23
+ port: 443,
24
+ },
25
+ media: {
26
+ id: 2,
27
+ ipAddress: '149.154.167.35',
28
+ port: 443,
29
+ },
30
+ },
31
+ '3': {
32
+ main: {
33
+ id: 3,
34
+ ipAddress: '149.154.175.100',
35
+ port: 443,
36
+ },
37
+ media: {
38
+ id: 3,
39
+ ipAddress: '149.154.175.100',
40
+ port: 443,
41
+ },
42
+ },
43
+ '4': {
44
+ main: {
45
+ id: 4,
46
+ ipAddress: '149.154.167.91',
47
+ port: 443,
48
+ },
49
+ media: {
50
+ id: 4,
51
+ ipAddress: '149.154.167.255',
52
+ port: 443,
53
+ },
54
+ },
55
+ '5': {
56
+ main: {
57
+ id: 5,
58
+ ipAddress: '91.108.56.179',
59
+ port: 443,
60
+ },
61
+ media: {
62
+ id: 5,
63
+ ipAddress: '149.154.171.255',
64
+ port: 443,
65
+ },
66
+ },
67
+ };
68
+ export const DC_MAPPING_TEST = {
69
+ '1': {
70
+ main: {
71
+ id: 1,
72
+ ipAddress: '149.154.175.10',
73
+ port: 80,
74
+ },
75
+ media: {
76
+ id: 1,
77
+ ipAddress: '149.154.175.10',
78
+ port: 80,
79
+ },
80
+ },
81
+ '2': {
82
+ main: {
83
+ id: 2,
84
+ ipAddress: '149.154.167.40',
85
+ port: 443,
86
+ },
87
+ media: {
88
+ id: 2,
89
+ ipAddress: '149.154.167.40',
90
+ port: 443,
91
+ },
92
+ },
93
+ '3': {
94
+ main: {
95
+ id: 3,
96
+ ipAddress: '149.154.175.117',
97
+ port: 443,
98
+ },
99
+ media: {
100
+ id: 3,
101
+ ipAddress: '149.154.175.117',
102
+ port: 443,
103
+ },
104
+ },
105
+ };
106
+ export function isTestDc(ip) {
107
+ return Object.values(DC_MAPPING_TEST).some((dc) => dc.main.ipAddress === ip || dc.media.ipAddress === ip);
108
+ }
109
+ //# sourceMappingURL=dcs.js.map