Pigeon — наше настольное приложение для разработчиков. Его идея лежит между Postman и Wireshark: от первого он берёт удобную работу с запросами, а от второго — внимание к тому, что на самом деле проходит по сети и в потоках сообщений.
Современный сервис редко ограничивается HTTP. Рядом работают gRPC, очереди и брокеры, а для каждого нужен свой инструмент. Мы хотели держать всё в одном окне и не отправлять рабочие запросы в чужое облако.
Какие протоколы поддерживаются
| Группа | Протоколы |
|---|---|
| Запрос и ответ | HTTP, GraphQL, gRPC, JSON-RPC |
| Живые соединения | WebSocket |
| Брокеры сообщений | MQTT, RabbitMQ, Kafka |
Для потоковых протоколов приложение показывает сообщения вживую, а длину списка ограничивает, чтобы долгое соединение не съело память.
Как устроено
Pigeon написан на Electron, React и TypeScript. Сеть работает в основном процессе, интерфейс общается с ним через IPC, а каждый протокол живёт в собственном адаптере. Общая модель запроса выглядит так:
export type ProtocolType =
'http' | 'graphql' | 'websocket' | 'grpc' | 'jsonrpc' | 'mqtt' | 'rabbitmq' | 'kafka'
export interface BaseRequest {
network?: NetworkOptions
id: string
name: string
protocol: ProtocolType
createdAt: number
updatedAt: number
}Настройки сети общие для всех протоколов: тайм-аут, проверка TLS, редиректы, прокси и свои сертификаты.
export interface NetworkOptions {
timeout?: number
verifySsl?: boolean
followRedirects?: boolean
proxyUrl?: string
caPaths?: string[]
}Ваши данные остаются у вас
Запросы и коллекции хранятся на вашем компьютере. Данные шифруются через системное хранилище ключей, а файл создаётся с правами 0600:
writeFileSync(`${file}.tmp`, safeStorage.encryptString(value), { mode: 0o600 })Если надёжное шифрование недоступно, приложение работает только в памяти и предупреждает об этом.
История запросов намеренно не хранит содержимое: в теле запроса или ответа могут оказаться секреты. Заголовки авторизации, куки, пароли и токены скрываются:
const sensitiveKey = /authorization|cookie|password|secret|token|api[-_]?key/i
const HIDDEN = '[redacted]'Из ссылок удаляются логин, пароль и чувствительные параметры. Чтобы сохранить запрос целиком, используйте коллекции.
Ограничения
Ответы ограничены 10 МБ. HTTP, GraphQL, TLS и прокси покрыты регрессионными тестами, а работу с реальными MQTT, RabbitMQ и Kafka ещё предстоит проверить на настоящих развёртываниях.
Что дальше
Pigeon активно развивается и пока не выпущен публично. Ссылки на загрузку и исходный код появятся здесь, когда первая версия будет готова.