PostgreSQL storage provider for mtcute. Uses any pg-compatible client (Pool, Client, or PoolClient).
All tables are created in a dedicated schema (mtcute by default), with automatic migrations.
pnpm add @mtcute/postgres pg
import { TelegramClient } from '@mtcute/node'
import { PostgresStorage } from '@mtcute/postgres'
import pg from 'pg'
const pool = new pg.Pool({ connectionString: 'postgres://localhost/mydb' })
const tg = new TelegramClient({
apiId: 12345,
apiHash: 'abcdef',
storage: new PostgresStorage(pool),
})
const self = await tg.start()
console.log(`logged in as ${self.displayName}`)
new PostgresStorage(pool, {
// PostgreSQL schema to use for all tables (default: 'mtcute')
schema: 'my_schema',
// Whether to automatically close the client when the storage is destroyed (default: true)
// Calls .end(), .release(), or .close() depending on what the client supports
autoClose: true,
})
You can use PGlite for an embedded PostgreSQL instance that requires no external server:
import { PGlite } from '@electric-sql/pglite'
import { PostgresStorage } from '@mtcute/postgres'
const pglite = await PGlite.create()
const storage = new PostgresStorage(pglite)
PGlite satisfies the PgClient interface out of the box, so no adapters are needed.
You can pass any object that satisfies the PgClient interface (a query method matching pg's signature):
import { PostgresStorage } from '@mtcute/postgres'
// with a single client
const client = new pg.Client({ connectionString: '...' })
await client.connect()
const storage = new PostgresStorage(client)
// with a pool client
const poolClient = await pool.connect()
const storage = new PostgresStorage(poolClient)
Note: By default, mtcute will automatically close the client (via
.end(),.release(), or.close()) when the storage is destroyed. SetautoClose: falseif you want to manage the connection lifecycle yourself.
All tables are created under the configured schema (default mtcute). The following tables are used:
| Table | Purpose |
|---|---|
migrations |
Tracks migration versions per repository |
auth_keys |
Persistent authorization keys per DC |
temp_auth_keys |
Temporary authorization keys with expiry |
key_value |
General-purpose key-value store |
peers |
Cached peer information (users, chats, channels) |
message_refs |
Reference messages for peer access hash resolution |