mtcute/packages/tl/README.md

93 lines
3.2 KiB
Markdown
Raw Normal View History

2021-08-05 20:38:24 +03:00
# @mtcute/tl
2021-04-08 12:19:38 +03:00
2021-08-05 20:38:24 +03:00
> TL schema and related utils used for MTCute.
2021-04-08 12:19:38 +03:00
Generated from TL layer **131** (last updated on 25.07.2021).
2021-04-08 12:19:38 +03:00
## About
This package contains JSON schema, type declarations, binary (de-)serialization, errors, RSA keys and helper functions.
Package's minor version is always TL schema layer number,
so version `1.42.0` means that this version was generated from TL layer 42.
> ⚠️ **Warning**: Always use strict or tilde constraint to ensure
> the same schema is used.
>
2021-08-05 20:38:24 +03:00
> I.e. use `"@mtcute/tl": "~1.42.0"` or `"@mtcute/tl": "1.42.0"`
> instead of `"@mtcute/tl": "^1.42.0"`, since the former would also
> match `1.43.0, 1.44.0, ...` and will probably break your build or runtime
2021-04-08 12:19:38 +03:00
- JSON schema, types, binary (de-)serialization and helper functions are generated directly from `.tl` files that are
automatically fetched from [TDesktop repository](https://github.com/telegramdesktop/tdesktop/).
- Errors are generated
from [`errors.csv`](https://github.com/LonamiWebs/Telethon/blob/master/telethon_generator/data/errors.csv)
that is automatically fetched from [Telethon repository](https://github.com/LonamiWebs/Telethon).
- RSA keys info is generated based on manually extracted PEMs from Telegram for Android source code.
## Contents
2021-08-05 20:38:24 +03:00
### `@mtcute/tl`
2021-04-08 12:19:38 +03:00
[Documentation](./modules/index.html)
TypeScript typings and type helpers generated from the schema.
By default, all types are immutable (have their fields marked as `readonly`). That is because most of the time you don't
really need to modify the objects, and modifying them will only lead to confusion. However, there are still valid
use-cases for mutable TL objects, so you can use exported
`tl.Mutable` type to make a given object type mutable.
`tl` is exported as a namespace to allow better code insights, and to avoid cluttering global namespace and very long
import statements.
```typescript
2021-08-05 20:38:24 +03:00
import { tl } from '@mtcute/tl'
2021-04-08 12:19:38 +03:00
const obj: tl.RawInputPeerChat = { _: 'inputPeerChat', chatId: 42 }
console.log(tl.isAnyInputPeer(obj)) // true
```
2021-08-05 20:38:24 +03:00
### `@mtcute/tl/raw-schema`
2021-04-08 12:19:38 +03:00
[Documentation](./modules/raw_schema.html)
JSON file describing all available TL classes, methods and unions. Can be used to write custom code generators
2021-08-05 20:38:24 +03:00
> This very file is used to generate binary serialization and TypeScript typings for `@mtcute/tl`.
2021-04-08 12:19:38 +03:00
```typescript
2021-08-05 20:38:24 +03:00
import * as tlSchema from '@mtcute/tl/raw-schema'
2021-04-08 12:19:38 +03:00
console.log(`Current layer: ${tlSchema.apiLayer}`)
// Current layer: 124
```
2021-08-05 20:38:24 +03:00
### `@mtcute/tl/binary/reader`
2021-04-08 12:19:38 +03:00
[Documentation](./modules/binary_reader.html)
Contains mapping used to read TL objects from binary streams.
```typescript
2021-08-05 20:38:24 +03:00
import readerMap from '@mtcute/tl/binary/reader'
2021-04-08 12:19:38 +03:00
import { BinaryReader } from './binary-reader'
const reader = new BinaryReader(Buffer.from([...]))
console.log(readerMap[0x5bb8e511 /* mt_message */].call(reader))
// { _: 'mt_message', ... }
```
2021-08-05 20:38:24 +03:00
### `@mtcute/tl/binary/writer`
2021-04-08 12:19:38 +03:00
[Documentation](./modules/binary_writer.html)
Contains mapping used to write TL objects to binary streams.
```typescript
2021-08-05 20:38:24 +03:00
import writerMap from '@mtcute/tl/binary/writer'
2021-04-08 12:19:38 +03:00
import { BinaryWriter } from './binary-writer'
const writer = new BinaryWriter()
writerMap[0x5bb8e511 /* mt_message */].call(writer, { ... })
console.log(writer.result())
// Buffer <11 e5 b8 5b ...>
```