@telegram.ts/types 1.0.1

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.
@@ -0,0 +1,163 @@
1
+ /** Describes Telegram Passport data shared with the bot by the user. */
2
+ export interface PassportData {
3
+ /** Array with information about documents and other Telegram Passport elements that was shared with the bot */
4
+ data: EncryptedPassportElement[];
5
+ /** Encrypted credentials required to decrypt the data */
6
+ credentials: EncryptedCredentials;
7
+ }
8
+ /** This object represents a file uploaded to Telegram Passport. Currently all Telegram Passport files are in JPEG format when decrypted and don't exceed 10MB. */
9
+ export interface PassportFile {
10
+ /** Identifier for this file, which can be used to download or reuse the file */
11
+ file_id: string;
12
+ /** Unique identifier for this file, which is supposed to be the same over time and for different bots. Can't be used to download or reuse the file. */
13
+ file_unique_id: string;
14
+ /** File size in bytes */
15
+ file_size: number;
16
+ /** Unix time when the file was uploaded */
17
+ file_date: number;
18
+ }
19
+ /** Describes documents or other Telegram Passport elements shared with the bot by the user. */
20
+ export interface EncryptedPassportElement {
21
+ /** Element type. One of “personal_details”, “passport”, “driver_license”, “identity_card”, “internal_passport”, “address”, “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration”, “temporary_registration”, “phone_number”, “email”. */
22
+ type: "personal_details" | "passport" | "driver_license" | "identity_card" | "internal_passport" | "address" | "utility_bill" | "bank_statement" | "rental_agreement" | "passport_registration" | "temporary_registration" | "phone_number" | "email";
23
+ /** Base64-encoded encrypted Telegram Passport element data provided by the user, available for “personal_details”, “passport”, “driver_license”, “identity_card”, “internal_passport” and “address” types. Can be decrypted and verified using the accompanying EncryptedCredentials. */
24
+ data?: string;
25
+ /** User's verified phone number, available only for “phone_number” type */
26
+ phone_number?: string;
27
+ /** User's verified email address, available only for “email” type */
28
+ email?: string;
29
+ /** Array of encrypted files with documents provided by the user, available for “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration” and “temporary_registration” types. Files can be decrypted and verified using the accompanying EncryptedCredentials. */
30
+ files?: PassportFile[];
31
+ /** Encrypted file with the front side of the document, provided by the user. Available for “passport”, “driver_license”, “identity_card” and “internal_passport”. The file can be decrypted and verified using the accompanying EncryptedCredentials. */
32
+ front_side?: PassportFile;
33
+ /** Encrypted file with the reverse side of the document, provided by the user. Available for “driver_license” and “identity_card”. The file can be decrypted and verified using the accompanying EncryptedCredentials. */
34
+ reverse_side?: PassportFile;
35
+ /** Encrypted file with the selfie of the user holding a document, provided by the user; available for “passport”, “driver_license”, “identity_card” and “internal_passport”. The file can be decrypted and verified using the accompanying EncryptedCredentials. */
36
+ selfie?: PassportFile;
37
+ /** Array of encrypted files with translated versions of documents provided by the user. Available if requested for “passport”, “driver_license”, “identity_card”, “internal_passport”, “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration” and “temporary_registration” types. Files can be decrypted and verified using the accompanying EncryptedCredentials. */
38
+ translation?: PassportFile[];
39
+ /** Base64-encoded element hash for using in PassportElementErrorUnspecified */
40
+ hash: string;
41
+ }
42
+ /** Describes data required for decrypting and authenticating EncryptedPassportElement. See the Telegram Passport Documentation for a complete description of the data decryption and authentication processes. */
43
+ export interface EncryptedCredentials {
44
+ /** Base64-encoded encrypted JSON-serialized data with unique user's payload, data hashes and secrets required for EncryptedPassportElement decryption and authentication */
45
+ data: string;
46
+ /** Base64-encoded data hash for data authentication */
47
+ hash: string;
48
+ /** Base64-encoded secret, encrypted with the bot's public RSA key, required for data decryption */
49
+ secret: string;
50
+ }
51
+ /** This object represents an error in the Telegram Passport element which was submitted that should be resolved by the user. It should be one of:
52
+ - PassportElementErrorDataField
53
+ - PassportElementErrorFrontSide
54
+ - PassportElementErrorReverseSide
55
+ - PassportElementErrorSelfie
56
+ - PassportElementErrorFile
57
+ - PassportElementErrorFiles
58
+ - PassportElementErrorTranslationFile
59
+ - PassportElementErrorTranslationFiles
60
+ - PassportElementErrorUnspecified
61
+ */
62
+ export type PassportElementError = PassportElementErrorDataField | PassportElementErrorFrontSide | PassportElementErrorReverseSide | PassportElementErrorSelfie | PassportElementErrorFile | PassportElementErrorFiles | PassportElementErrorTranslationFile | PassportElementErrorTranslationFiles | PassportElementErrorUnspecified;
63
+ /** Represents an issue in one of the data fields that was provided by the user. The error is considered resolved when the field's value changes. */
64
+ export interface PassportElementErrorDataField {
65
+ /** Error source, must be data */
66
+ source: "data";
67
+ /** The section of the user's Telegram Passport which has the error, one of “personal_details”, “passport”, “driver_license”, “identity_card”, “internal_passport”, “address” */
68
+ type: "personal_details" | "passport" | "driver_license" | "identity_card" | "internal_passport" | "address";
69
+ /** Name of the data field which has the error */
70
+ field_name: string;
71
+ /** Base64-encoded data hash */
72
+ data_hash: string;
73
+ /** Error message */
74
+ message: string;
75
+ }
76
+ /** Represents an issue with the front side of a document. The error is considered resolved when the file with the front side of the document changes. */
77
+ export interface PassportElementErrorFrontSide {
78
+ /** Error source, must be front_side */
79
+ source: "front_side";
80
+ /** The section of the user's Telegram Passport which has the issue, one of “passport”, “driver_license”, “identity_card”, “internal_passport” */
81
+ type: "passport" | "driver_license" | "identity_card" | "internal_passport";
82
+ /** Base64-encoded hash of the file with the front side of the document */
83
+ file_hash: string;
84
+ /** Error message */
85
+ message: string;
86
+ }
87
+ /** Represents an issue with the reverse side of a document. The error is considered resolved when the file with reverse side of the document changes. */
88
+ export interface PassportElementErrorReverseSide {
89
+ /** Error source, must be reverse_side */
90
+ source: "reverse_side";
91
+ /** The section of the user's Telegram Passport which has the issue, one of “driver_license”, “identity_card” */
92
+ type: "driver_license" | "identity_card";
93
+ /** Base64-encoded hash of the file with the reverse side of the document */
94
+ file_hash: string;
95
+ /** Error message */
96
+ message: string;
97
+ }
98
+ /** Represents an issue with the selfie with a document. The error is considered resolved when the file with the selfie changes. */
99
+ export interface PassportElementErrorSelfie {
100
+ /** Error source, must be selfie */
101
+ source: "selfie";
102
+ /** The section of the user's Telegram Passport which has the issue, one of “passport”, “driver_license”, “identity_card”, “internal_passport” */
103
+ type: "passport" | "driver_license" | "identity_card" | "internal_passport";
104
+ /** Base64-encoded hash of the file with the selfie */
105
+ file_hash: string;
106
+ /** Error message */
107
+ message: string;
108
+ }
109
+ /** Represents an issue with a document scan. The error is considered resolved when the file with the document scan changes. */
110
+ export interface PassportElementErrorFile {
111
+ /** Error source, must be file */
112
+ source: "file";
113
+ /** The section of the user's Telegram Passport which has the issue, one of “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration”, “temporary_registration” */
114
+ type: "utility_bill" | "bank_statement" | "rental_agreement" | "passport_registration" | "temporary_registration";
115
+ /** Base64-encoded file hash */
116
+ file_hash: string;
117
+ /** Error message */
118
+ message: string;
119
+ }
120
+ /** Represents an issue with a list of scans. The error is considered resolved when the list of files containing the scans changes. */
121
+ export interface PassportElementErrorFiles {
122
+ /** Error source, must be files */
123
+ source: "files";
124
+ /** The section of the user's Telegram Passport which has the issue, one of “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration”, “temporary_registration” */
125
+ type: "utility_bill" | "bank_statement" | "rental_agreement" | "passport_registration" | "temporary_registration";
126
+ /** List of base64-encoded file hashes */
127
+ file_hashes: string[];
128
+ /** Error message */
129
+ message: string;
130
+ }
131
+ /** Represents an issue with one of the files that constitute the translation of a document. The error is considered resolved when the file changes. */
132
+ export interface PassportElementErrorTranslationFile {
133
+ /** Error source, must be translation_file */
134
+ source: "translation_file";
135
+ /** Type of element of the user's Telegram Passport which has the issue, one of “passport”, “driver_license”, “identity_card”, “internal_passport”, “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration”, “temporary_registration” */
136
+ type: "passport" | "driver_license" | "identity_card" | "internal_passport" | "utility_bill" | "bank_statement" | "rental_agreement" | "passport_registration" | "temporary_registration";
137
+ /** Base64-encoded file hash */
138
+ file_hash: string;
139
+ /** Error message */
140
+ message: string;
141
+ }
142
+ /** Represents an issue with the translated version of a document. The error is considered resolved when a file with the document translation change. */
143
+ export interface PassportElementErrorTranslationFiles {
144
+ /** Error source, must be translation_files */
145
+ source: "translation_files";
146
+ /** Type of element of the user's Telegram Passport which has the issue, one of “passport”, “driver_license”, “identity_card”, “internal_passport”, “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration”, “temporary_registration” */
147
+ type: "passport" | "driver_license" | "identity_card" | "internal_passport" | "utility_bill" | "bank_statement" | "rental_agreement" | "passport_registration" | "temporary_registration";
148
+ /** List of base64-encoded file hashes */
149
+ file_hashes: string[];
150
+ /** Error message */
151
+ message: string;
152
+ }
153
+ /** Represents an issue in an unspecified place. The error is considered resolved when new data is added. */
154
+ export interface PassportElementErrorUnspecified {
155
+ /** Error source, must be unspecified */
156
+ source: "unspecified";
157
+ /** Type of element of the user's Telegram Passport which has the issue */
158
+ type: string;
159
+ /** Base64-encoded element hash */
160
+ element_hash: string;
161
+ /** Error message */
162
+ message: string;
163
+ }
@@ -0,0 +1,103 @@
1
+ import type {
2
+ User
3
+ } from "./manage.js";
4
+ /** This object represents a portion of the price for goods or services. */
5
+ export interface LabeledPrice {
6
+ /** Portion label */
7
+ label: string;
8
+ /** Price of the product in the smallest units of the currency (integer, not float/double). For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies). */
9
+ amount: number;
10
+ }
11
+ /** This object contains basic information about an invoice. */
12
+ export interface Invoice {
13
+ /** Product name */
14
+ title: string;
15
+ /** Product description */
16
+ description: string;
17
+ /** Unique bot deep-linking parameter that can be used to generate this invoice */
18
+ start_parameter: string;
19
+ /** Three-letter ISO 4217 currency code */
20
+ currency: string;
21
+ /** Total price in the smallest units of the currency (integer, not float/double). For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies). */
22
+ total_amount: number;
23
+ }
24
+ /** This object represents a shipping address. */
25
+ export interface ShippingAddress {
26
+ /** Two-letter ISO 3166-1 alpha-2 country code */
27
+ country_code: string;
28
+ /** State, if applicable */
29
+ state: string;
30
+ /** City */
31
+ city: string;
32
+ /** First line for the address */
33
+ street_line1: string;
34
+ /** Second line for the address */
35
+ street_line2: string;
36
+ /** Address post code */
37
+ post_code: string;
38
+ }
39
+ /** This object represents information about an order. */
40
+ export interface OrderInfo {
41
+ /** User name */
42
+ name?: string;
43
+ /** User's phone number */
44
+ phone_number?: string;
45
+ /** User email */
46
+ email?: string;
47
+ /** User shipping address */
48
+ shipping_address?: ShippingAddress;
49
+ }
50
+ /** This object represents one shipping option. */
51
+ export interface ShippingOption {
52
+ /** Shipping option identifier */
53
+ id: string;
54
+ /** Option title */
55
+ title: string;
56
+ /** List of price portions */
57
+ prices: LabeledPrice[];
58
+ }
59
+ /** This object contains basic information about a successful payment. */
60
+ export interface SuccessfulPayment {
61
+ /** Three-letter ISO 4217 currency code */
62
+ currency: string;
63
+ /** Total price in the smallest units of the currency (integer, not float/double). For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies). */
64
+ total_amount: number;
65
+ /** Bot specified invoice payload */
66
+ invoice_payload: string;
67
+ /** Identifier of the shipping option chosen by the user */
68
+ shipping_option_id?: string;
69
+ /** Order information provided by the user */
70
+ order_info?: OrderInfo;
71
+ /** Telegram payment identifier */
72
+ telegram_payment_charge_id: string;
73
+ /** Provider payment identifier */
74
+ provider_payment_charge_id: string;
75
+ }
76
+ /** This object contains information about an incoming shipping query. */
77
+ export interface ShippingQuery {
78
+ /** Unique query identifier */
79
+ id: string;
80
+ /** User who sent the query */
81
+ from: User;
82
+ /** Bot specified invoice payload */
83
+ invoice_payload: string;
84
+ /** User specified shipping address */
85
+ shipping_address: ShippingAddress;
86
+ }
87
+ /** This object contains information about an incoming pre-checkout query. */
88
+ export interface PreCheckoutQuery {
89
+ /** Unique query identifier */
90
+ id: string;
91
+ /** User who sent the query */
92
+ from: User;
93
+ /** Three-letter ISO 4217 currency code */
94
+ currency: string;
95
+ /** Total price in the smallest units of the currency (integer, not float/double). For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies). */
96
+ total_amount: number;
97
+ /** Bot specified invoice payload */
98
+ invoice_payload: string;
99
+ /** Identifier of the shipping option chosen by the user */
100
+ shipping_option_id?: string;
101
+ /** Order information provided by the user */
102
+ order_info?: OrderInfo;
103
+ }
@@ -0,0 +1,122 @@
1
+ import type {
2
+ WebAppInfo
3
+ } from "./markup.js";
4
+ /** This object represents the bot's name. */
5
+ export interface BotName {
6
+ /** The bot's name */
7
+ name: string;
8
+ }
9
+ /** This object represents the bot's description. */
10
+ export interface BotDescription {
11
+ /** The bot's description */
12
+ description: string;
13
+ }
14
+ /** This object represents the bot's short description. */
15
+ export interface BotShortDescription {
16
+ /** The bot's short description */
17
+ short_description: string;
18
+ }
19
+ /** This object describes the bot's menu button in a private chat. It should be one of
20
+ - MenuButtonCommands
21
+ - MenuButtonWebApp
22
+ - MenuButtonDefault
23
+
24
+ If a menu button other than MenuButtonDefault is set for a private chat, then it is applied in the chat. Otherwise the default menu button is applied. By default, the menu button opens the list of bot commands. */
25
+ export type MenuButton = MenuButtonCommands | MenuButtonWebApp | MenuButtonDefault;
26
+ /** Represents a menu button, which opens the bot's list of commands. */
27
+ export interface MenuButtonCommands {
28
+ /** Type of the button, must be commands */
29
+ type: "commands";
30
+ }
31
+ /** Represents a menu button, which launches a Web App. */
32
+ export interface MenuButtonWebApp {
33
+ /** Button type, must be web_app */
34
+ type: "web_app";
35
+ /** Text on the button */
36
+ text: string;
37
+ /** Description of the Web App that will be launched when the user presses the button. The Web App will be able to send an arbitrary message on behalf of the user using the method answerWebAppQuery. */
38
+ web_app: WebAppInfo;
39
+ }
40
+ /** Describes that no specific value for the menu button was set. */
41
+ export interface MenuButtonDefault {
42
+ /** Type of the button, must be default */
43
+ type: "default";
44
+ }
45
+ /** This object represents the scope to which bot commands are applied. Currently, the following 7 scopes are supported:
46
+ - BotCommandScopeDefault
47
+ - BotCommandScopeAllPrivateChats
48
+ - BotCommandScopeAllGroupChats
49
+ - BotCommandScopeAllChatAdministrators
50
+ - BotCommandScopeChat
51
+ - BotCommandScopeChatAdministrators
52
+ - BotCommandScopeChatMember
53
+
54
+ ## Determining list of commands
55
+
56
+ The following algorithm is used to determine the list of commands for a particular user viewing the bot menu. The first list of commands which is set is returned:
57
+
58
+ ### Commands in the chat with the bot
59
+ - botCommandScopeChat + language_code
60
+ - botCommandScopeChat
61
+ - botCommandScopeAllPrivateChats + language_code
62
+ - botCommandScopeAllPrivateChats
63
+ - botCommandScopeDefault + language_code
64
+ - botCommandScopeDefault
65
+
66
+ ### Commands in group and supergroup chats
67
+ - botCommandScopeChatMember + language_code
68
+ - botCommandScopeChatMember
69
+ - botCommandScopeChatAdministrators + language_code (administrators only)
70
+ - botCommandScopeChatAdministrators (administrators only)
71
+ - botCommandScopeChat + language_code
72
+ - botCommandScopeChat
73
+ - botCommandScopeAllChatAdministrators + language_code (administrators only)
74
+ - botCommandScopeAllChatAdministrators (administrators only)
75
+ - botCommandScopeAllGroupChats + language_code
76
+ - botCommandScopeAllGroupChats
77
+ - botCommandScopeDefault + language_code
78
+ - botCommandScopeDefault */
79
+ export type BotCommandScope = BotCommandScopeDefault | BotCommandScopeAllPrivateChats | BotCommandScopeAllGroupChats | BotCommandScopeAllChatAdministrators | BotCommandScopeChat | BotCommandScopeChatAdministrators | BotCommandScopeChatMember;
80
+ /** Represents the default scope of bot commands. Default commands are used if no commands with a narrower scope are specified for the user. */
81
+ export interface BotCommandScopeDefault {
82
+ /** Scope type, must be default */
83
+ type: "default";
84
+ }
85
+ /** Represents the scope of bot commands, covering all private chats. */
86
+ export interface BotCommandScopeAllPrivateChats {
87
+ /** Scope type, must be all_private_chats */
88
+ type: "all_private_chats";
89
+ }
90
+ /** Represents the scope of bot commands, covering all group and supergroup chats. */
91
+ export interface BotCommandScopeAllGroupChats {
92
+ /** Scope type, must be all_group_chats */
93
+ type: "all_group_chats";
94
+ }
95
+ /** Represents the scope of bot commands, covering all group and supergroup chat administrators. */
96
+ export interface BotCommandScopeAllChatAdministrators {
97
+ /** Scope type, must be all_chat_administrators */
98
+ type: "all_chat_administrators";
99
+ }
100
+ /** Represents the scope of bot commands, covering a specific chat. */
101
+ export interface BotCommandScopeChat {
102
+ /** Scope type, must be chat */
103
+ type: "chat";
104
+ /** Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) */
105
+ chat_id: number | string;
106
+ }
107
+ /** Represents the scope of bot commands, covering all administrators of a specific group or supergroup chat. */
108
+ export interface BotCommandScopeChatAdministrators {
109
+ /** Scope type, must be chat_administrators */
110
+ type: "chat_administrators";
111
+ /** Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) */
112
+ chat_id: number | string;
113
+ }
114
+ /** Represents the scope of bot commands, covering a specific member of a group or supergroup chat. */
115
+ export interface BotCommandScopeChatMember {
116
+ /** Scope type, must be chat_member */
117
+ type: "chat_member";
118
+ /** Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername) */
119
+ chat_id: number | string;
120
+ /** Unique identifier of the target user */
121
+ user_id: number;
122
+ }
@@ -0,0 +1,74 @@
1
+ import type {
2
+ ChosenInlineResult,
3
+ InlineQuery
4
+ } from "./inline.js";
5
+ import type {
6
+ Chat,
7
+ ChatJoinRequest,
8
+ ChatMemberUpdated,
9
+ User
10
+ } from "./manage.js";
11
+ import type {
12
+ CallbackQuery
13
+ } from "./markup.js";
14
+ import type {
15
+ Message,
16
+ Poll,
17
+ PollAnswer
18
+ } from "./message.js";
19
+ import type {
20
+ PreCheckoutQuery,
21
+ ShippingQuery
22
+ } from "./payment.js";
23
+ /** Internal namespace used to make some message types more accurate */
24
+ export declare namespace Update {
25
+ /** Internal type holding properties that message updates in channels share. */
26
+ interface Channel {
27
+ chat: Chat.ChannelChat;
28
+ }
29
+ /** Internal type holding properties that message updates outside of channels share. */
30
+ interface NonChannel {
31
+ chat: Exclude < Chat,
32
+ Chat.ChannelChat >;
33
+ from: User;
34
+ }
35
+ /** Internal type holding properties that updates about edited messages share. */
36
+ interface Edited {
37
+ /** Date the message was last edited in Unix time */
38
+ edit_date: number;
39
+ }
40
+ }
41
+ /** This object represents an incoming update.
42
+ At most one of the optional parameters can be present in any given update. */
43
+ export interface Update {
44
+ /** The update's unique identifier. Update identifiers start from a certain positive number and increase sequentially. This ID becomes especially handy if you're using webhooks, since it allows you to ignore repeated updates or to restore the correct update sequence, should they get out of order. If there are no new updates for at least a week, then identifier of the next update will be chosen randomly instead of sequentially. */
45
+ update_id: number;
46
+ /** New incoming message of any kind - text, photo, sticker, etc. */
47
+ message?: Message & Update.NonChannel;
48
+ /** New version of a message that is known to the bot and was edited */
49
+ edited_message?: Message & Update.Edited & Update.NonChannel;
50
+ /** New incoming channel post of any kind - text, photo, sticker, etc. */
51
+ channel_post?: Message & Update.Channel;
52
+ /** New version of a channel post that is known to the bot and was edited */
53
+ edited_channel_post?: Message & Update.Edited & Update.Channel;
54
+ /** New incoming inline query */
55
+ inline_query?: InlineQuery;
56
+ /** The result of an inline query that was chosen by a user and sent to their chat partner. Please see our documentation on the feedback collecting for details on how to enable these updates for your bot. */
57
+ chosen_inline_result?: ChosenInlineResult;
58
+ /** New incoming callback query */
59
+ callback_query?: CallbackQuery;
60
+ /** New incoming shipping query. Only for invoices with flexible price */
61
+ shipping_query?: ShippingQuery;
62
+ /** New incoming pre-checkout query. Contains full information about checkout */
63
+ pre_checkout_query?: PreCheckoutQuery;
64
+ /** New poll state. Bots receive only updates about stopped polls and polls, which are sent by the bot */
65
+ poll?: Poll;
66
+ /** A user changed their answer in a non-anonymous poll. Bots receive new votes only in polls that were sent by the bot itself. */
67
+ poll_answer?: PollAnswer;
68
+ /** The bot's chat member status was updated in a chat. For private chats, this update is received only when the bot is blocked or unblocked by the user. */
69
+ my_chat_member?: ChatMemberUpdated;
70
+ /** A chat member's status was updated in a chat. The bot must be an administrator in the chat and must explicitly specify “chat_member” in the list of allowed_updates to receive these updates. */
71
+ chat_member?: ChatMemberUpdated;
72
+ /** A request to join the chat has been sent. The bot must have the can_invite_users administrator right in the chat to receive these updates. */
73
+ chat_join_request?: ChatJoinRequest;
74
+ }