You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/ru/tma/init-data.md
+86-33Lines changed: 86 additions & 33 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,16 @@ head:
13
13
14
14
# Валидация WebAppInitData
15
15
16
-
Библиотека `@gramio/init-data` позволяет проверять подлинность данных, передаваемых из Telegram Mini Apps на ваш сервер, обеспечивая безопасное взаимодействие между веб-приложением и ботом.
16
+
`@gramio/init-data` — это библиотека на TypeScript для безопасной проверки, разбора и генерации строк инициализации (init data) Telegram Web App. Она предоставляет набор утилит для работы с init data Telegram Mini App, обеспечивая целостность и подлинность пользовательских данных, передаваемых из Telegram-клиента на ваш сервер. Библиотека не зависит от фреймворка.
17
+
18
+
Основные возможности:
19
+
20
+
- Проверка подлинности init data Telegram Web App с помощью токена бота
21
+
- Разбор и получение структурированных данных пользователя и чата из строки init data
22
+
- Генерация валидных строк init data для тестирования и документации
23
+
- Строгие типы TypeScript для всех структур и методов
24
+
25
+
[Документация и справочник](https://jsr.io/@gramio/init-data@latest/doc)
17
26
18
27
## Установка
19
28
@@ -32,70 +41,114 @@ pnpm add @gramio/init-data
32
41
```
33
42
34
43
```bash [bun]
35
-
bun add @gramio/init-data
44
+
bun install @gramio/init-data
36
45
```
37
46
38
47
:::
39
48
40
-
### validateAndParseInitData
49
+
# getBotTokenSecretKey
50
+
51
+
Получает секретный ключ из токена вашего Telegram-бота. Этот ключ необходим для проверки хэша строки init data, отправленной из Telegram Web App. Всегда используйте этот метод для генерации ключа перед валидацией или подписью init data, если хотите максимальную производительность. Если не передавать ключ в методы проверки, он будет вычисляться **при каждом вызове**.
Проверяет подлинность строки init data Telegram Web App с помощью секретного ключа или токена бота. Если данные валидны, возвращает объект [WebAppInitData](https://core.telegram.org/bots/webapps#webappinitdata). Если данные некорректны — возвращает `false`.
const result =validateAndParseInitData(initData, secretKey);
76
+
77
+
if (!result) {
78
+
// Данные невалидны или подделаны
49
79
}
50
80
51
-
console.log(initData.user);
81
+
// Доступ к данным пользователя и чата
82
+
const userId =result.user?.id;
83
+
const chatId =result.chat?.id;
52
84
```
53
85
54
-
## Проверка init-data
86
+
# validateInitData
87
+
88
+
Проверяет подлинность строки init data Telegram Web App с помощью секретного ключа или токена бота. Возвращает `true`, если данные валидны, иначе — `false`. Этот метод только проверяет данные и **не разбирает** их. Используйте, если нужно только проверить подлинность без извлечения информации о пользователе или чате.
console.log("Внимание: Данные не прошли проверку!");
99
+
if (!isValid) {
100
+
// Данные невалидны или подделаны
71
101
}
102
+
// Если true — строке init data можно доверять
72
103
```
73
104
74
-
## Получение данных пользователя
105
+
# parseInitData
106
+
107
+
Разбирает строку init data Telegram Web App и возвращает объект [WebAppInitData](https://core.telegram.org/bots/webapps#webappinitdata). Этот метод **не выполняет проверку** подлинности или целостности — используйте его только после проверки через `validateInitData` или `validateAndParseInitData`.
console.log(initData.user); // Информация о пользователе
84
-
console.log(initData.auth_date); // Дата аутентификации
85
-
console.log(initData.hash); // Хэш для проверки
115
+
// Доступ к данным пользователя и чата
116
+
const userId =parsed.user?.id;
117
+
const chatId =parsed.chat?.id;
86
118
```
87
119
88
-
## Безопасность
120
+
#signInitData
89
121
90
-
Всегда проверяйте данные init-data перед использованием, чтобы гарантировать, что запрос действительно поступил из Telegram и данные не были подделаны.
122
+
Генерирует валидную строку initdata из объекта данных и секретного ключа или токена бота. Полезно для тестирования, документации или генерации примеров для клиентов API.
91
123
92
-
## Пример интеграции с Elysia
124
+
```ts
125
+
import {
126
+
signInitData,
127
+
getBotTokenSecretKey,
128
+
typeWebAppUser,
129
+
} from"@gramio/init-data";
130
+
131
+
const botToken =process.env.BOT_TOKENasstring;
132
+
const secretKey =getBotTokenSecretKey(botToken);
133
+
134
+
const data = {
135
+
user: {
136
+
id: 1,
137
+
first_name: "durov",
138
+
username: "durov",
139
+
},
140
+
} satisfiesWebAppUser;
93
141
94
-
Этот пример демонстрирует, как интегрировать `@gramio/init-data` с Elysia с помощью удобного плагина с типо-безопасностью.
Copy file name to clipboardExpand all lines: docs/tma/init-data.md
+111-6Lines changed: 111 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,15 @@
1
1
# Init data
2
2
3
-
WIP
3
+
`@gramio/init-data` is a TypeScript library for securely validating, parsing, and generating Telegram Web App init data strings. It provides a set of utilities to help you work with the Telegram Mini App authentication init data, ensuring the integrity and authenticity of user data passed from the Telegram client to your backend. The library is framework-agnostic.
4
+
5
+
Key features:
6
+
7
+
- Validates the authenticity of Telegram Web App init data using your bot token
8
+
- Parses and exposes structured user and chat data from the init data string
9
+
- Generates valid init data strings for testing and documentation
10
+
- Provides strong TypeScript types for all data structures and methods
@@ -24,13 +33,109 @@ bun install @gramio/init-data
24
33
25
34
:::
26
35
27
-
## Elysia integration example
36
+
# getBotTokenSecretKey
37
+
38
+
Get a secret key from your Telegram bot token. This secret key is required to validate the hash of the init data string sent by the Telegram Web App. Always use this method to generate the secret key before validating or signing init data if you wants reach maximum performance. If you don't provide it to validate init data methods it will execute it on **every call**.
Verifies the authenticity of the Telegram Web App init data string using the secret key or bot token. If the data is valid, it parses and returns the [WebAppInitData](https://core.telegram.org/bots/webapps#webappinitdata) object. If the data is invalid, it returns `false`.
const result =validateAndParseInitData(initData, secretKey);
63
+
64
+
if (!result) {
65
+
// Handle invalid or tampered data
66
+
}
67
+
68
+
// Access user and chat data
69
+
const userId =result.user?.id;
70
+
const chatId =result.chat?.id;
71
+
```
72
+
73
+
# validateInitData
74
+
75
+
Checks the authenticity of the Telegram Web App init data string using the secret key or bot token. Returns `true` if the data is valid, otherwise returns `false`. This method only validates the data and does **not parse** it. Use this when you only need to check authenticity without extracting user or chat information.
// If valid, you can safely trust the init data string
90
+
```
91
+
92
+
# parseInitData
93
+
94
+
Parses the Telegram Web App init data string and returns the [WebAppInitData](https://core.telegram.org/bots/webapps#webappinitdata) object. This method does not perform any validation or authenticity checks. Use it only if you have already verified the data with `validateInitData` or `validateAndParseInitData`.
Generates a valid init data string from a data object and a secret key or bot token. This is useful for testing, documentation, or generating example values for API clients.
0 commit comments