@mtkruto/node 0.0.825 → 0.0.827

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 (111) hide show
  1. package/esm/client/client.d.ts +20 -0
  2. package/esm/client/client.js +52 -1
  3. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/DomHandler.d.ts +83 -0
  4. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/DomHandler.js +203 -0
  5. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/DomSerializer.d.ts +50 -0
  6. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/DomSerializer.js +274 -0
  7. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/ElementType.d.ts +47 -0
  8. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/ElementType.js +51 -0
  9. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/FeedHandler.d.ts +66 -0
  10. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/FeedHandler.js +191 -0
  11. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/Node.d.ts +168 -0
  12. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/Node.js +385 -0
  13. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/Parser.d.ts +159 -0
  14. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/Parser.js +431 -0
  15. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/Tokenizer.d.ts +181 -0
  16. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/Tokenizer.js +1046 -0
  17. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/mod.d.ts +42 -0
  18. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/mod.js +52 -0
  19. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/decode.d.ts +11 -0
  20. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/decode.js +122 -0
  21. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/decode_codepoint.d.ts +1 -0
  22. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/decode_codepoint.js +24 -0
  23. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/encode.d.ts +46 -0
  24. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/encode.js +121 -0
  25. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/decode.d.ts +31 -0
  26. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/decode.js +30 -0
  27. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/entities.d.ts +2128 -0
  28. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/entities.js +2127 -0
  29. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/legacy.d.ts +109 -0
  30. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/legacy.js +108 -0
  31. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/xml.d.ts +8 -0
  32. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/xml.js +1 -0
  33. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/mod.d.ts +90 -0
  34. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/mod.js +95 -0
  35. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/helpers.d.ts +50 -0
  36. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/helpers.js +128 -0
  37. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/legacy.d.ts +46 -0
  38. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/legacy.js +110 -0
  39. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/manipulation.d.ts +42 -0
  40. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/manipulation.js +120 -0
  41. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/mod.d.ts +6 -0
  42. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/mod.js +6 -0
  43. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/querying.d.ts +54 -0
  44. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/querying.js +110 -0
  45. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/stringify.d.ts +40 -0
  46. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/stringify.js +75 -0
  47. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/traversal.d.ts +58 -0
  48. package/esm/deps/deno.land/x/html_parser@v0.1.3/src/utils/traversal.js +101 -0
  49. package/esm/deps.d.ts +1 -0
  50. package/esm/deps.js +1 -0
  51. package/esm/storage/storage.d.ts +1 -1
  52. package/esm/types/0_message_entity.d.ts +90 -0
  53. package/esm/types/0_message_entity.js +128 -0
  54. package/esm/utilities/0_html.d.ts +2 -0
  55. package/esm/utilities/0_html.js +74 -0
  56. package/package.json +1 -1
  57. package/script/client/client.d.ts +20 -0
  58. package/script/client/client.js +52 -1
  59. package/script/deps/deno.land/x/html_parser@v0.1.3/src/DomHandler.d.ts +83 -0
  60. package/script/deps/deno.land/x/html_parser@v0.1.3/src/DomHandler.js +207 -0
  61. package/script/deps/deno.land/x/html_parser@v0.1.3/src/DomSerializer.d.ts +50 -0
  62. package/script/deps/deno.land/x/html_parser@v0.1.3/src/DomSerializer.js +301 -0
  63. package/script/deps/deno.land/x/html_parser@v0.1.3/src/ElementType.d.ts +47 -0
  64. package/script/deps/deno.land/x/html_parser@v0.1.3/src/ElementType.js +55 -0
  65. package/script/deps/deno.land/x/html_parser@v0.1.3/src/FeedHandler.d.ts +66 -0
  66. package/script/deps/deno.land/x/html_parser@v0.1.3/src/FeedHandler.js +222 -0
  67. package/script/deps/deno.land/x/html_parser@v0.1.3/src/Node.d.ts +168 -0
  68. package/script/deps/deno.land/x/html_parser@v0.1.3/src/Node.js +404 -0
  69. package/script/deps/deno.land/x/html_parser@v0.1.3/src/Parser.d.ts +159 -0
  70. package/script/deps/deno.land/x/html_parser@v0.1.3/src/Parser.js +438 -0
  71. package/script/deps/deno.land/x/html_parser@v0.1.3/src/Tokenizer.d.ts +181 -0
  72. package/script/deps/deno.land/x/html_parser@v0.1.3/src/Tokenizer.js +1052 -0
  73. package/script/deps/deno.land/x/html_parser@v0.1.3/src/mod.d.ts +42 -0
  74. package/script/deps/deno.land/x/html_parser@v0.1.3/src/mod.js +88 -0
  75. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/decode.d.ts +11 -0
  76. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/decode.js +128 -0
  77. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/decode_codepoint.d.ts +1 -0
  78. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/decode_codepoint.js +30 -0
  79. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/encode.d.ts +46 -0
  80. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/encode.js +129 -0
  81. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/decode.d.ts +31 -0
  82. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/decode.js +32 -0
  83. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/entities.d.ts +2128 -0
  84. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/entities.js +2129 -0
  85. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/legacy.d.ts +109 -0
  86. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/legacy.js +110 -0
  87. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/xml.d.ts +8 -0
  88. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/maps/xml.js +3 -0
  89. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/mod.d.ts +90 -0
  90. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/entities/mod.js +114 -0
  91. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/helpers.d.ts +50 -0
  92. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/helpers.js +134 -0
  93. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/legacy.d.ts +46 -0
  94. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/legacy.js +118 -0
  95. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/manipulation.d.ts +42 -0
  96. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/manipulation.js +129 -0
  97. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/mod.d.ts +6 -0
  98. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/mod.js +22 -0
  99. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/querying.d.ts +54 -0
  100. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/querying.js +119 -0
  101. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/stringify.d.ts +40 -0
  102. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/stringify.js +86 -0
  103. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/traversal.d.ts +58 -0
  104. package/script/deps/deno.land/x/html_parser@v0.1.3/src/utils/traversal.js +112 -0
  105. package/script/deps.d.ts +1 -0
  106. package/script/deps.js +3 -1
  107. package/script/storage/storage.d.ts +1 -1
  108. package/script/types/0_message_entity.d.ts +90 -0
  109. package/script/types/0_message_entity.js +156 -0
  110. package/script/utilities/0_html.d.ts +2 -0
  111. package/script/utilities/0_html.js +78 -0
@@ -0,0 +1,101 @@
1
+ import { isTag } from '../Node.js';
2
+ const emptyArray = [];
3
+ /**
4
+ * Get a node's children.
5
+ *
6
+ * @param elem Node to get the children of.
7
+ * @returns `elem`'s children, or an empty array.
8
+ */
9
+ export function getChildren(elem) {
10
+ return elem.children ?? emptyArray;
11
+ }
12
+ /**
13
+ * Get a node's parent.
14
+ *
15
+ * @param elem Node to get the parent of.
16
+ * @returns `elem`'s parent node.
17
+ */
18
+ export function getParent(elem) {
19
+ return elem.parent || null;
20
+ }
21
+ /**
22
+ * Gets an elements siblings, including the element itself.
23
+ *
24
+ * Attempts to get the children through the element's parent first.
25
+ * If we don't have a parent (the element is a root node),
26
+ * we walk the element's `prev` & `next` to get all remaining nodes.
27
+ *
28
+ * @param elem Element to get the siblings of.
29
+ * @returns `elem`'s siblings.
30
+ */
31
+ export function getSiblings(elem) {
32
+ const parent = getParent(elem);
33
+ if (parent != null)
34
+ return getChildren(parent);
35
+ const siblings = [elem];
36
+ let { prev, next } = elem;
37
+ while (prev != null) {
38
+ siblings.unshift(prev);
39
+ ({ prev } = prev);
40
+ }
41
+ while (next != null) {
42
+ siblings.push(next);
43
+ ({ next } = next);
44
+ }
45
+ return siblings;
46
+ }
47
+ /**
48
+ * Gets an attribute from an element.
49
+ *
50
+ * @param elem Element to check.
51
+ * @param name Attribute name to retrieve.
52
+ * @returns The element's attribute value, or `undefined`.
53
+ */
54
+ export function getAttributeValue(elem, name) {
55
+ return elem.attribs?.[name];
56
+ }
57
+ /**
58
+ * Checks whether an element has an attribute.
59
+ *
60
+ * @param elem Element to check.
61
+ * @param name Attribute name to look for.
62
+ * @returns Returns whether `elem` has the attribute `name`.
63
+ */
64
+ export function hasAttrib(elem, name) {
65
+ return (elem.attribs != null &&
66
+ Object.prototype.hasOwnProperty.call(elem.attribs, name) &&
67
+ elem.attribs[name] != null);
68
+ }
69
+ /**
70
+ * Get the tag name of an element.
71
+ *
72
+ * @param elem The element to get the name for.
73
+ * @returns The tag name of `elem`.
74
+ */
75
+ export function getName(elem) {
76
+ return elem.name;
77
+ }
78
+ /**
79
+ * Returns the next element sibling of a node.
80
+ *
81
+ * @param elem The element to get the next sibling of.
82
+ * @returns `elem`'s next sibling that is a tag.
83
+ */
84
+ export function nextElementSibling(elem) {
85
+ let { next } = elem;
86
+ while (next !== null && !isTag(next))
87
+ ({ next } = next);
88
+ return next;
89
+ }
90
+ /**
91
+ * Returns the previous element sibling of a node.
92
+ *
93
+ * @param elem The element to get the previous sibling of.
94
+ * @returns `elem`'s previous sibling that is a tag.
95
+ */
96
+ export function prevElementSibling(elem) {
97
+ let { prev } = elem;
98
+ while (prev !== null && !isTag(prev))
99
+ ({ prev } = prev);
100
+ return prev;
101
+ }
package/esm/deps.d.ts CHANGED
@@ -2,3 +2,4 @@ export * from "./deps/deno.land/std@0.186.0/testing/asserts.js";
2
2
  export { ctr256Decrypt, ctr256Encrypt, factorize, ige256Decrypt, ige256Encrypt, init as initTgCrypto } from "./deps/deno.land/x/tgcrypto@0.1.3/mod.js";
3
3
  export { gunzip, gzip } from "./deps/raw.githubusercontent.com/MTKruto/compress/master/gzip/gzip.js";
4
4
  export { Mutex } from "async-mutex";
5
+ export { Parser } from "./deps/deno.land/x/html_parser@v0.1.3/src/mod.js";
package/esm/deps.js CHANGED
@@ -2,3 +2,4 @@ export * from "./deps/deno.land/std@0.186.0/testing/asserts.js";
2
2
  export { ctr256Decrypt, ctr256Encrypt, factorize, ige256Decrypt, ige256Encrypt, init as initTgCrypto } from "./deps/deno.land/x/tgcrypto@0.1.3/mod.js";
3
3
  export { gunzip, gzip } from "./deps/raw.githubusercontent.com/MTKruto/compress/master/gzip/gzip.js";
4
4
  export { Mutex } from "async-mutex";
5
+ export { Parser } from "./deps/deno.land/x/html_parser@v0.1.3/src/mod.js";
@@ -19,5 +19,5 @@ export declare abstract class Storage {
19
19
  getUserAccessHash(id: bigint): Promise<bigint | null>;
20
20
  private readonly username__;
21
21
  updateUsernames(type: "user" | "channel", id: bigint, usernames: string[]): Promise<void>;
22
- getUsername(username: string): Promise<readonly ["user" | "channel", bigint, Date] | null>;
22
+ getUsername(username: string): Promise<readonly ["channel" | "user", bigint, Date] | null>;
23
23
  }
@@ -0,0 +1,90 @@
1
+ import * as types from "../tl/2_types.js";
2
+ export declare enum MessageEntityType {
3
+ Mention = "mention",
4
+ Hashtag = "hashtag",
5
+ BotCommand = "bot_command",
6
+ URL = "url",
7
+ Email = "email",
8
+ Bold = "bold",
9
+ Italic = "italic",
10
+ Code = "code",
11
+ Pre = "pre",
12
+ TextURL = "text_url",
13
+ MentionName = "mention_name",
14
+ Cashtag = "cashtag",
15
+ Phone = "phone",
16
+ Underline = "underline",
17
+ Strike = "strike",
18
+ Blockquote = "blockquote",
19
+ BankCard = "bank_card",
20
+ Spoiler = "spoiler",
21
+ CustomEmoji = "custom_emoji"
22
+ }
23
+ export interface MessageEntityBase {
24
+ offset: number;
25
+ length: number;
26
+ }
27
+ export interface MessageEntityMention extends MessageEntityBase {
28
+ type: MessageEntityType.Mention;
29
+ }
30
+ export interface MessageEntityHashtag extends MessageEntityBase {
31
+ type: MessageEntityType.Hashtag;
32
+ }
33
+ export interface MessageEntityBotCommand extends MessageEntityBase {
34
+ type: MessageEntityType.BotCommand;
35
+ }
36
+ export interface MessageEntityURL extends MessageEntityBase {
37
+ type: MessageEntityType.URL;
38
+ }
39
+ export interface MessageEntityEmailAddress extends MessageEntityBase {
40
+ type: MessageEntityType.Email;
41
+ }
42
+ export interface MessageEntityBold extends MessageEntityBase {
43
+ type: MessageEntityType.Bold;
44
+ }
45
+ export interface MessageEntityItalic extends MessageEntityBase {
46
+ type: MessageEntityType.Italic;
47
+ }
48
+ export interface MessageEntityPre extends MessageEntityBase {
49
+ type: MessageEntityType.Pre;
50
+ language: string;
51
+ }
52
+ export interface MessageEntityCode extends MessageEntityBase {
53
+ type: MessageEntityType.Code;
54
+ }
55
+ export interface MessageEntityTextURL extends MessageEntityBase {
56
+ type: MessageEntityType.TextURL;
57
+ url: string;
58
+ }
59
+ export interface MessageEntityMentionName extends MessageEntityBase {
60
+ type: MessageEntityType.MentionName;
61
+ userId: number;
62
+ }
63
+ export interface MessageEntityCashtag extends MessageEntityBase {
64
+ type: MessageEntityType.Cashtag;
65
+ }
66
+ export interface MessageEntityPhone extends MessageEntityBase {
67
+ type: MessageEntityType.Phone;
68
+ }
69
+ export interface MessageEntityUnderline extends MessageEntityBase {
70
+ type: MessageEntityType.Underline;
71
+ }
72
+ export interface MessageEntityStrike extends MessageEntityBase {
73
+ type: MessageEntityType.Strike;
74
+ }
75
+ export interface MessageEntityBlockquote extends MessageEntityBase {
76
+ type: MessageEntityType.Blockquote;
77
+ }
78
+ export interface MessageEntityBankCard extends MessageEntityBase {
79
+ type: MessageEntityType.BankCard;
80
+ }
81
+ export interface MessageEntitySpoiler extends MessageEntityBase {
82
+ type: MessageEntityType.Spoiler;
83
+ }
84
+ export interface MessageEntityCustomEmoji extends MessageEntityBase {
85
+ type: MessageEntityType.CustomEmoji;
86
+ documentId: bigint;
87
+ }
88
+ export type MessageEntity = MessageEntityMention | MessageEntityHashtag | MessageEntityBotCommand | MessageEntityURL | MessageEntityEmailAddress | MessageEntityBold | MessageEntityItalic | MessageEntityCode | MessageEntityPre | MessageEntityTextURL | MessageEntityMentionName | MessageEntityCashtag | MessageEntityPhone | MessageEntityUnderline | MessageEntityStrike | MessageEntityBlockquote | MessageEntityBankCard | MessageEntitySpoiler | MessageEntityCustomEmoji;
89
+ export declare function fromTlObject(obj: types.TypeMessageEntity): MessageEntity | null;
90
+ export declare function toTlObject(entity: MessageEntity): types.MessageEntityMention | types.MessageEntityHashtag | types.MessageEntityBotCommand | types.MessageEntityURL | types.MessageEntityEmail | types.MessageEntityBold | types.MessageEntityItalic | types.MessageEntityCode | types.MessageEntityPre | types.MessageEntityTextURL | types.MessageEntityMentionName | types.MessageEntityPhone | types.MessageEntityCashtag | types.MessageEntityUnderline | types.MessageEntityStrike | types.MessageEntityBlockquote | types.MessageEntityBankCard | types.MessageEntitySpoiler | types.MessageEntityCustomEmoji;
@@ -0,0 +1,128 @@
1
+ import * as types from "../tl/2_types.js";
2
+ export var MessageEntityType;
3
+ (function (MessageEntityType) {
4
+ MessageEntityType["Mention"] = "mention";
5
+ MessageEntityType["Hashtag"] = "hashtag";
6
+ MessageEntityType["BotCommand"] = "bot_command";
7
+ MessageEntityType["URL"] = "url";
8
+ MessageEntityType["Email"] = "email";
9
+ MessageEntityType["Bold"] = "bold";
10
+ MessageEntityType["Italic"] = "italic";
11
+ MessageEntityType["Code"] = "code";
12
+ MessageEntityType["Pre"] = "pre";
13
+ MessageEntityType["TextURL"] = "text_url";
14
+ MessageEntityType["MentionName"] = "mention_name";
15
+ MessageEntityType["Cashtag"] = "cashtag";
16
+ MessageEntityType["Phone"] = "phone";
17
+ MessageEntityType["Underline"] = "underline";
18
+ MessageEntityType["Strike"] = "strike";
19
+ MessageEntityType["Blockquote"] = "blockquote";
20
+ MessageEntityType["BankCard"] = "bank_card";
21
+ MessageEntityType["Spoiler"] = "spoiler";
22
+ MessageEntityType["CustomEmoji"] = "custom_emoji";
23
+ })(MessageEntityType || (MessageEntityType = {}));
24
+ export function fromTlObject(obj) {
25
+ if (obj instanceof types.MessageEntityMention) {
26
+ return { type: MessageEntityType.Mention, offset: obj.offset, length: obj.length };
27
+ }
28
+ else if (obj instanceof types.MessageEntityHashtag) {
29
+ return { type: MessageEntityType.Hashtag, offset: obj.offset, length: obj.length };
30
+ }
31
+ else if (obj instanceof types.MessageEntityBotCommand) {
32
+ return { type: MessageEntityType.BotCommand, offset: obj.offset, length: obj.length };
33
+ }
34
+ else if (obj instanceof types.MessageEntityURL) {
35
+ return { type: MessageEntityType.URL, offset: obj.offset, length: obj.length };
36
+ }
37
+ else if (obj instanceof types.MessageEntityEmail) {
38
+ return { type: MessageEntityType.Email, offset: obj.offset, length: obj.length };
39
+ }
40
+ else if (obj instanceof types.MessageEntityBold) {
41
+ return { type: MessageEntityType.Bold, offset: obj.offset, length: obj.length };
42
+ }
43
+ else if (obj instanceof types.MessageEntityItalic) {
44
+ return { type: MessageEntityType.Italic, offset: obj.offset, length: obj.length };
45
+ }
46
+ else if (obj instanceof types.MessageEntityCode) {
47
+ return { type: MessageEntityType.Code, offset: obj.offset, length: obj.length };
48
+ }
49
+ else if (obj instanceof types.MessageEntityPre) {
50
+ return { type: MessageEntityType.Pre, offset: obj.offset, length: obj.length, language: obj.language };
51
+ }
52
+ else if (obj instanceof types.MessageEntityTextURL) {
53
+ return { type: MessageEntityType.TextURL, offset: obj.offset, length: obj.length, url: obj.url };
54
+ }
55
+ else if (obj instanceof types.MessageEntityMentionName) {
56
+ return { type: MessageEntityType.MentionName, offset: obj.offset, length: obj.length, userId: Number(obj.userId) };
57
+ }
58
+ else if (obj instanceof types.MessageEntityCashtag) {
59
+ return { type: MessageEntityType.Cashtag, offset: obj.offset, length: obj.length };
60
+ }
61
+ else if (obj instanceof types.MessageEntityPhone) {
62
+ return { type: MessageEntityType.Phone, offset: obj.offset, length: obj.length };
63
+ }
64
+ else if (obj instanceof types.MessageEntityUnderline) {
65
+ return { type: MessageEntityType.Underline, offset: obj.offset, length: obj.length };
66
+ }
67
+ else if (obj instanceof types.MessageEntityStrike) {
68
+ return { type: MessageEntityType.Strike, offset: obj.offset, length: obj.length };
69
+ }
70
+ else if (obj instanceof types.MessageEntityBlockquote) {
71
+ return { type: MessageEntityType.Blockquote, offset: obj.offset, length: obj.length };
72
+ }
73
+ else if (obj instanceof types.MessageEntityBankCard) {
74
+ return { type: MessageEntityType.BankCard, offset: obj.offset, length: obj.length };
75
+ }
76
+ else if (obj instanceof types.MessageEntitySpoiler) {
77
+ return { type: MessageEntityType.Spoiler, offset: obj.offset, length: obj.length };
78
+ }
79
+ else if (obj instanceof types.MessageEntityCustomEmoji) {
80
+ return { type: MessageEntityType.CustomEmoji, offset: obj.offset, length: obj.length, documentId: obj.documentId };
81
+ }
82
+ else {
83
+ return null;
84
+ }
85
+ }
86
+ export function toTlObject(entity) {
87
+ const { offset, length } = entity;
88
+ switch (entity.type) {
89
+ case MessageEntityType.Mention:
90
+ return new types.MessageEntityMention({ offset, length });
91
+ case MessageEntityType.Hashtag:
92
+ return new types.MessageEntityHashtag({ offset, length });
93
+ case MessageEntityType.BotCommand:
94
+ return new types.MessageEntityBotCommand({ offset, length });
95
+ case MessageEntityType.URL:
96
+ return new types.MessageEntityURL({ offset, length });
97
+ case MessageEntityType.Email:
98
+ return new types.MessageEntityEmail({ offset, length });
99
+ case MessageEntityType.Bold:
100
+ return new types.MessageEntityBold({ offset, length });
101
+ case MessageEntityType.Italic:
102
+ return new types.MessageEntityItalic({ offset, length });
103
+ case MessageEntityType.Code:
104
+ return new types.MessageEntityCode({ offset, length });
105
+ case MessageEntityType.Pre:
106
+ return new types.MessageEntityPre({ offset, length, language: entity.language });
107
+ case MessageEntityType.TextURL:
108
+ return new types.MessageEntityTextURL({ offset, length, url: entity.url });
109
+ case MessageEntityType.MentionName:
110
+ return new types.MessageEntityMentionName({ offset, length, userId: BigInt(entity.userId) });
111
+ case MessageEntityType.Cashtag:
112
+ return new types.MessageEntityCashtag({ offset, length });
113
+ case MessageEntityType.Phone:
114
+ return new types.MessageEntityPhone({ offset, length });
115
+ case MessageEntityType.Underline:
116
+ return new types.MessageEntityUnderline({ offset, length });
117
+ case MessageEntityType.Strike:
118
+ return new types.MessageEntityStrike({ offset, length });
119
+ case MessageEntityType.Blockquote:
120
+ return new types.MessageEntityBlockquote({ offset, length });
121
+ case MessageEntityType.BankCard:
122
+ return new types.MessageEntityBankCard({ offset, length });
123
+ case MessageEntityType.Spoiler:
124
+ return new types.MessageEntitySpoiler({ offset, length });
125
+ case MessageEntityType.CustomEmoji:
126
+ return new types.MessageEntityCustomEmoji({ offset, length, documentId: entity.documentId });
127
+ }
128
+ }
@@ -0,0 +1,2 @@
1
+ import { MessageEntity } from "../types/0_message_entity.js";
2
+ export declare function parseHtml(html: string): readonly [string, MessageEntity[]];
@@ -0,0 +1,74 @@
1
+ import { Parser } from "../deps.js";
2
+ import { MessageEntityType } from "../types/0_message_entity.js";
3
+ export function parseHtml(html) {
4
+ let text = "";
5
+ const entities = new Array();
6
+ const queue = new Array();
7
+ const parser = new Parser({
8
+ onopentag(name, attribs) {
9
+ switch (name) {
10
+ case "b":
11
+ case "strong":
12
+ queue.push({ type: MessageEntityType.Bold, offset: text.length, length: 0 });
13
+ break;
14
+ case "em":
15
+ case "i":
16
+ queue.push({ type: MessageEntityType.Italic, offset: text.length, length: 0 });
17
+ break;
18
+ case "code":
19
+ queue.push({ type: MessageEntityType.Code, offset: text.length, length: 0 });
20
+ break;
21
+ case "pre": {
22
+ const language = attribs.language ?? "";
23
+ queue.push({ type: MessageEntityType.Pre, offset: text.length, length: 0, language });
24
+ break;
25
+ }
26
+ case "a": {
27
+ const url = attribs.href;
28
+ if (!url) {
29
+ throw new Error("Missing attribute href");
30
+ }
31
+ queue.push({ type: MessageEntityType.TextURL, offset: text.length, length: 0, url });
32
+ break;
33
+ }
34
+ case "ins":
35
+ case "u":
36
+ queue.push({ type: MessageEntityType.Underline, offset: text.length, length: 0 });
37
+ break;
38
+ case "del":
39
+ case "strike":
40
+ queue.push({ type: MessageEntityType.Strike, offset: text.length, length: 0 });
41
+ break;
42
+ case "span":
43
+ if (attribs.class != "tg-spoiler") {
44
+ throw new Error("The class attribute must be tg-spoiler");
45
+ }
46
+ // falls through
47
+ case "tg-spoiler":
48
+ queue.push({ type: MessageEntityType.Spoiler, offset: text.length, length: 0 });
49
+ break;
50
+ case "tg-emoji":
51
+ if (!attribs["emoji-id"]) {
52
+ throw new Error("Missing attribute emoji-id");
53
+ }
54
+ queue.push({ type: MessageEntityType.Spoiler, offset: text.length, length: 0 });
55
+ }
56
+ },
57
+ ontext(data) {
58
+ text += data;
59
+ const lastItem = queue[queue.length - 1];
60
+ if (lastItem) {
61
+ lastItem.length += data.length;
62
+ }
63
+ },
64
+ onclosetag() {
65
+ const lastItem = queue.pop();
66
+ if (lastItem) {
67
+ entities.push(lastItem);
68
+ }
69
+ },
70
+ });
71
+ parser.write(html);
72
+ parser.end();
73
+ return [text, entities];
74
+ }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "module": "./esm/mod.js",
3
3
  "main": "./script/mod.js",
4
4
  "name": "@mtkruto/node",
5
- "version": "0.0.825",
5
+ "version": "0.0.827",
6
6
  "description": "MTKruto for Node.js",
7
7
  "author": "Roj <rojvv@icloud.com>",
8
8
  "license": "LGPL-3.0-or-later",
@@ -4,7 +4,12 @@ import * as functions from "../tl/3_functions.js";
4
4
  import { ClientAbstract } from "./client_abstract.js";
5
5
  import { Storage } from "../storage/storage.js";
6
6
  import { DC, TransportProvider } from "../transport/transport_provider.js";
7
+ import { MessageEntity } from "../types/0_message_entity.js";
7
8
  export declare const restartAuth: unique symbol;
9
+ export declare enum ParseMode {
10
+ None = "none",
11
+ HTML = "html"
12
+ }
8
13
  export interface AuthorizeUserParams<S = string> {
9
14
  phone: S | (() => MaybePromise<S>);
10
15
  code: S | (() => MaybePromise<S>);
@@ -12,6 +17,10 @@ export interface AuthorizeUserParams<S = string> {
12
17
  }
13
18
  export type UpdatesHandler = null | ((client: Client, update: types.Updates) => MaybePromise<void>);
14
19
  export interface ClientParams {
20
+ /**
21
+ * Default parse mode. Defauls to `ParseMode.None`.
22
+ */
23
+ parseMode?: ParseMode;
15
24
  /**
16
25
  * The transport provider to use. Defaults to `defaultTransportProvider`.
17
26
  */
@@ -51,6 +60,7 @@ export declare class Client extends ClientAbstract {
51
60
  private promises;
52
61
  private toAcknowledge;
53
62
  updatesHandler: UpdatesHandler;
63
+ readonly parseMode: ParseMode;
54
64
  readonly appVersion: string;
55
65
  readonly deviceModel: string;
56
66
  readonly langCode: string;
@@ -117,4 +127,14 @@ export declare class Client extends ClientAbstract {
117
127
  private processUsers;
118
128
  private processUpdates;
119
129
  getInputPeer(id: string | number): Promise<types.InputPeerChat | types.InputPeerUser | types.InputPeerChannel>;
130
+ sendMessage(chatId: number | string, text: string, params?: {
131
+ parseMode?: ParseMode;
132
+ entities?: MessageEntity[];
133
+ disableWebPagePreview?: boolean;
134
+ disableNotification?: boolean;
135
+ protectContent?: boolean;
136
+ replyToMessageId?: number;
137
+ messageThreadId?: number;
138
+ sendAs?: number | string;
139
+ }): Promise<types.TypeUpdates>;
120
140
  }
@@ -23,10 +23,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.Client = exports.restartAuth = void 0;
26
+ exports.Client = exports.ParseMode = exports.restartAuth = void 0;
27
27
  const deps_js_1 = require("../deps.js");
28
28
  const constants_js_1 = require("../constants.js");
29
29
  const _0_bigint_js_1 = require("../utilities/0_bigint.js");
30
+ const _0_html_js_1 = require("../utilities/0_html.js");
30
31
  const _1_message_js_1 = require("../utilities/1_message.js");
31
32
  const _1_password_js_1 = require("../utilities/1_password.js");
32
33
  const _1_tl_object_js_1 = require("../tl/1_tl_object.js");
@@ -40,7 +41,13 @@ const client_abstract_js_1 = require("./client_abstract.js");
40
41
  const client_plain_js_1 = require("./client_plain.js");
41
42
  const storage_memory_js_1 = require("../storage/storage_memory.js");
42
43
  const _0_hash_js_1 = require("../utilities/0_hash.js");
44
+ const _0_message_entity_js_1 = require("../types/0_message_entity.js");
43
45
  exports.restartAuth = Symbol();
46
+ var ParseMode;
47
+ (function (ParseMode) {
48
+ ParseMode["None"] = "none";
49
+ ParseMode["HTML"] = "html";
50
+ })(ParseMode = exports.ParseMode || (exports.ParseMode = {}));
44
51
  class Client extends client_abstract_js_1.ClientAbstract {
45
52
  /**
46
53
  * Constructs the client.
@@ -106,6 +113,12 @@ class Client extends client_abstract_js_1.ClientAbstract {
106
113
  writable: true,
107
114
  value: null
108
115
  });
116
+ Object.defineProperty(this, "parseMode", {
117
+ enumerable: true,
118
+ configurable: true,
119
+ writable: true,
120
+ value: void 0
121
+ });
109
122
  Object.defineProperty(this, "appVersion", {
110
123
  enumerable: true,
111
124
  configurable: true,
@@ -148,6 +161,7 @@ class Client extends client_abstract_js_1.ClientAbstract {
148
161
  writable: true,
149
162
  value: false
150
163
  });
164
+ this.parseMode = params?.parseMode ?? ParseMode.None;
151
165
  this.appVersion = params?.appVersion ?? constants_js_1.DEFAULT_APP_VERSION;
152
166
  this.deviceModel = params?.deviceModel ?? constants_js_1.DEFAULT_DEVICE_MODEL;
153
167
  this.langCode = params?.langCode ?? constants_js_1.DEFAULT_LANG_CODE;
@@ -610,5 +624,42 @@ class Client extends client_abstract_js_1.ClientAbstract {
610
624
  throw new Error("ID format unknown or not implemented");
611
625
  }
612
626
  }
627
+ async sendMessage(chatId, text, params) {
628
+ const entities_ = params?.entities ?? [];
629
+ const parseMode = params?.parseMode ?? this.parseMode;
630
+ switch (parseMode) {
631
+ case ParseMode.None:
632
+ break;
633
+ case ParseMode.HTML: {
634
+ const [newText, entitiesToPush] = (0, _0_html_js_1.parseHtml)(text);
635
+ text = newText;
636
+ for (const entity of entitiesToPush) {
637
+ entities_.push(entity);
638
+ }
639
+ }
640
+ }
641
+ const peer = await this.getInputPeer(chatId);
642
+ const randomId = (0, _0_bigint_js_1.getRandomId)();
643
+ const message = text;
644
+ const noWebpage = params?.disableWebPagePreview ? true : undefined;
645
+ const silent = params?.disableNotification ? true : undefined;
646
+ const noforwards = params?.protectContent ? true : undefined;
647
+ const replyToMsgId = params?.replyToMessageId;
648
+ const topMsgId = params?.messageThreadId;
649
+ const sendAs = params?.sendAs ? await this.getInputPeer(params.sendAs) : undefined;
650
+ const entities = entities_?.length > 0 ? entities_.map((v) => (0, _0_message_entity_js_1.toTlObject)(v)) : undefined;
651
+ return await this.invoke(new functions.MessagesSendMessage({
652
+ peer,
653
+ randomId,
654
+ message,
655
+ noWebpage,
656
+ silent,
657
+ noforwards,
658
+ replyToMsgId,
659
+ topMsgId,
660
+ sendAs,
661
+ entities,
662
+ }));
663
+ }
613
664
  }
614
665
  exports.Client = Client;
@@ -0,0 +1,83 @@
1
+ import { Node, Element, Document, NodeWithChildren, DataNode } from './Node.js';
2
+ export interface DomHandlerOptions {
3
+ /**
4
+ * Add a `startIndex` property to nodes.
5
+ * When the parser is used in a non-streaming fashion, `startIndex` is an integer
6
+ * indicating the position of the start of the node in the document.
7
+ *
8
+ * @default false
9
+ */
10
+ withStartIndices?: boolean;
11
+ /**
12
+ * Add an `endIndex` property to nodes.
13
+ * When the parser is used in a non-streaming fashion, `endIndex` is an integer
14
+ * indicating the position of the end of the node in the document.
15
+ *
16
+ * @default false
17
+ */
18
+ withEndIndices?: boolean;
19
+ /**
20
+ * Replace all whitespace with single spaces.
21
+ *
22
+ * **Note:** Enabling this might break your markup.
23
+ *
24
+ * @default false
25
+ * @deprecated
26
+ */
27
+ normalizeWhitespace?: boolean;
28
+ /**
29
+ * Treat the markup as XML.
30
+ *
31
+ * @default false
32
+ */
33
+ xmlMode?: boolean;
34
+ }
35
+ interface ParserInterface {
36
+ startIndex: number | null;
37
+ endIndex: number | null;
38
+ }
39
+ type Callback = (error: Error | null, dom: Node[]) => void;
40
+ type ElementCallback = (element: Element) => void;
41
+ export declare class DomHandler {
42
+ /** The elements of the DOM */
43
+ dom: Node[];
44
+ /** The root element for the DOM */
45
+ root: Document;
46
+ /** Called once parsing has completed. */
47
+ private readonly callback;
48
+ /** Settings for the handler. */
49
+ private readonly options;
50
+ /** Callback whenever a tag is closed. */
51
+ private readonly elementCB;
52
+ /** Indicated whether parsing has been completed. */
53
+ private done;
54
+ /** Stack of open tags. */
55
+ protected tagStack: NodeWithChildren[];
56
+ /** A data node that is still being written to. */
57
+ protected lastNode: DataNode | null;
58
+ /** Reference to the parser instance. Used for location information. */
59
+ private parser;
60
+ /**
61
+ * @param callback Called once parsing has completed.
62
+ * @param options Settings for the handler.
63
+ * @param elementCB Callback whenever a tag is closed.
64
+ */
65
+ constructor(callback?: Callback | null, options?: DomHandlerOptions | null, elementCB?: ElementCallback);
66
+ onparserinit(parser: ParserInterface): void;
67
+ onreset(): void;
68
+ onend(): void;
69
+ onerror(error: Error): void;
70
+ onclosetag(): void;
71
+ onopentag(name: string, attribs: {
72
+ [key: string]: string;
73
+ }): void;
74
+ ontext(data: string): void;
75
+ oncomment(data: string): void;
76
+ oncommentend(): void;
77
+ oncdatastart(): void;
78
+ oncdataend(): void;
79
+ onprocessinginstruction(name: string, data: string): void;
80
+ protected handleCallback(error: Error | null): void;
81
+ protected addNode(node: Node): void;
82
+ }
83
+ export default DomHandler;