Noter: API и эксплуатация
Noter — CLI отправитель заметок, а не приложение-хранилище. Требуются PHP 8.2+ и ext-curl. Команда noter <text> берёт текст из аргумента; при отсутствии аргумента читает stdin.
Контракт приёмника
CLI выполняет HTTP POST на NOTER_URL и отправляет:
| Часть запроса | Значение |
|---|---|
| Content-Type | application/json |
| Заголовок авторизации приложения | X-API-KEY: <NOTER_KEY> |
| JSON body | {"content":"..."} |
Перед JSON-кодированием Noter HTML-экранирует содержимое, чтобы приёмник мог безопасно вставить строку в HTML; контракт backend должен это учитывать. Приёмник обязан сравнить ключ безопасным способом, ограничить размер body, проверить UTF-8/формат и сохранить данные. Не возвращайте заметку как доверенный HTML.
Конфигурация и результаты
Установщик сохраняет NOTER_URL и NOTER_KEY в /usr/local/noter/noter.zconf, каталог с правами 0700, файл с 0600. CLI сначала ищет noter.zconf в BASE_PATH установленного приложения/сборки, затем использует /usr/local/noter/noter.zconf. Удалённые URL должны использовать HTTPS. URL допускает только HTTP(S); connect timeout — 5 секунд, общий timeout — 20 секунд. Выходной код успешен только для HTTP 2xx. При транспортной ошибке сообщение не включает URL/ключ; HTTP status выводится в терминал.
Передача -k при установке может раскрыть ключ через shell history и список процессов. Предпочитайте скрытый интерактивный prompt или защищённый конфигурационный менеджер; не помещайте секреты в README, аргументы, CI logs и issue reports.
Зависимости и release
Текущий lock фиксирует localzet/http 2.0.2 и localzet/server 4.5.3. Опубликованный HttpClient tag рассчитан на Server 4; этот проект пока не мигрирован на Server 7. Сначала требуется совместимый стабильный HTTP client, затем отдельная проверка API и обновление Noter. CI проверяет Composer manifest/lock, lint, PHAR и loopback HTTP сценарии; release BIN дополнительно скачивает bundled PHP runtime с внешнего CDN, поэтому локальная CI сборка не подтверждает доступность CDN.

