Ошибки и их решения
Каталог известных ошибок с решениями. Используй Ctrl+F для поиска по тексту ошибки.
Build & TypeScript
Missing entry-point to Worker script
Сообщение:
✘ [ERROR] Missing entry-point to Worker script or to assets directoryПричина: В wrangler.toml отсутствует поле main.
Решение:
# Проверь wrangler.toml
cat workers/gateway/wrangler.toml | grep main
# Должно быть:
main = "src/index.ts"Контекст: Возникает при pnpm build или wrangler deploy если wrangler.toml не сгенерирован.
Cannot find module '@happ-integ/...'
Сообщение:
error TS2307: Cannot find module '@happ-integ/db' or its corresponding type declarations.Причина: Пакет не собран или не установлен.
Решение:
# 1. Установи зависимости
pnpm install
# 2. Собери все пакеты
pnpm build
# 3. Если не помогло - очисти кэш
rm -rf node_modules/.cache
pnpm installType 'X' is not assignable to type 'Y'
Сообщение:
error TS2345: Argument of type 'X' is not assignable to parameter of type 'Y'.Причина: Несовпадение типов, часто после изменения интерфейсов.
Решение:
- Проверь что импортируешь правильный тип из
types.ts - Убедись что payload соответствует интерфейсу
- Пересобери пакеты:
pnpm build
Unused variable/import
Сообщение:
error @typescript-eslint/no-unused-vars: 'xxx' is defined but never usedПричина: ESLint обнаружил неиспользуемую переменную.
Решение:
# Автофикс
pnpm lint:fix
# Или удали переменную вручнуюDeploy & Cloudflare
Service binding not found
Сообщение:
✘ [ERROR] Service "integ-xxx" not foundПричина: Worker интеграции не задеплоен, но указан в service bindings gateway.
Решение:
# 1. Задеплой интеграцию сначала
pnpm deploy:dev --filter=xxx
# 2. Потом gateway
pnpm deploy:dev --filter=integ-gatewayКонтекст: CI/CD деплоит интеграции перед gateway автоматически.
D1 database not found
Сообщение:
✘ [ERROR] D1 database 'integ-db' does not existПричина: База данных не создана в Cloudflare.
Решение:
# Для dev окружения
wrangler d1 create integ-db --env dev
# Обнови database_id в wrangler.tomlKV namespace not found
Сообщение:
✘ [ERROR] KV namespace 'integ-kv' not foundПричина: KV namespace не создан.
Решение:
# Создай namespace
wrangler kv:namespace create integ-kv --env dev
# Обнови namespace_id в wrangler.tomlSecret not found
Сообщение:
Error: Secret CRYPTO_KEY not foundПричина: Секрет не синхронизирован с Cloudflare.
Решение:
# Синхронизируй секреты из Doppler
pnpm sync-secrets:dev
# Или вручную
wrangler secret put CRYPTO_KEY --env devToo many redirects (ERR_TOO_MANY_REDIRECTS)
Сообщение:
Too many redirects
# или в логах:
Unexpected redirect 301 to https://...Пример: Запрос к https://prod.ua.happ.tools/api/sips/298/originate/ возвращает бесконечные редиректы.
Причина: Настройка Cloudflare SSL/TLS → Flexible. При Flexible режиме:
- Cloudflare принимает HTTPS от клиента
- Cloudflare отправляет HTTP на origin сервер
- Origin сервер (Django/nginx) видит HTTP и редиректит на HTTPS
- Cloudflare снова отправляет HTTP → бесконечный цикл
Решение:
- Открой Cloudflare Dashboard → домен (например
happ.tools) - SSL/TLS → Overview
- Измени режим с Flexible на Full или Full (strict)
Flexible (❌ проблема):
Client --HTTPS--> Cloudflare --HTTP--> Origin --301 HTTPS--> loop
Full (✅ решение):
Client --HTTPS--> Cloudflare --HTTPS--> Origin --200 OK-->Важно: Это НЕ проблема кода. Не нужно добавлять:
redirect: "manual"в fetch- User-Agent headers
- Ручную обработку редиректов
Контекст: Ошибка возникала при вызове Voice Assistant API из Cloudflare Workers. После смены SSL на Full — работает без изменений в коде.
Runtime & D1
Cannot read properties of undefined (reading 'duration')
Сообщение:
TypeError: Cannot read properties of undefined (reading 'duration')
at aggregateD1Meta (cloudflare-internal:d1-api:482:41)Причина: Баг в wrangler/miniflare — метод d1.exec() вызывает ошибку во внутренней функции aggregateD1Meta при работе с D1.
Решение: Использовать d1.prepare().run() вместо d1.exec():
// ❌ Вызывает ошибку
await d1.exec("CREATE TABLE IF NOT EXISTS ...");
// ✅ Работает корректно
await d1.prepare("CREATE TABLE IF NOT EXISTS ...").run();Контекст: Ошибка возникает в локальном dev окружении (wrangler dev). В production обычно не проявляется. Исправлено в packages/core/src/migrations.ts.
D1_ERROR: no such table
Сообщение:
D1_ERROR: no such table: sofa_callsПричина: Миграции не выполнены.
Решение:
Миграции применяются через код при вызове POST /{integration}/setup:
# Локально (worker должен быть запущен)
curl -X POST http://localhost:8787/{integration}/setup
# На dev/prod (после деплоя)
curl -X POST https://integ.dev.happ.tools/{integration}/setup
# Проверить статус миграций
pnpm migrate:statusUNIQUE constraint failed
Сообщение:
D1_ERROR: UNIQUE constraint failed: table.columnПричина: Попытка вставить дубликат уникального значения.
Решение:
// Используй upsert вместо insert
await db.upsert("table", data, ["id"]);
// Или проверяй существование
const existing = await db.selectOne("table", { id });
if (!existing) {
await db.insert("table", data);
}Credentials decryption failed
Сообщение:
Error: Failed to decrypt credentialsПричина: Неверный CRYPTO_KEY или CRYPTO_SALT.
Решение:
- Проверь что
CRYPTO_KEYиCRYPTO_SALTодинаковы во всех окружениях - Если ключи менялись — нужно пересоздать credentials:
# Вызови /setup для пересоздания
curl -X POST https://integ.happ.tools/{integration}/setup \
-H "Content-Type: application/json" \
-d '{"force": true}'Development (Local)
Port already in use
Сообщение:
Error: listen EADDRINUSE: address already in use :::8787Причина: Порт занят другим процессом.
Решение:
# Найди процесс
lsof -i :8787
# Убей его
kill -9 <PID>
# Или используй другой порт
pnpm start sofa -- --port 8788Miniflare storage error
Сообщение:
Error: ENOENT: no such file or directory, open '.../miniflare/...'Причина: Локальное хранилище повреждено.
Решение:
# Пересоздай локальные базы
pnpm setup:resetFailed to connect to turbo daemon
Сообщение:
x Failed to connect to daemon.
`-> unable to connect to daemon after 3 retriesПричина: Turbo daemon завис или его socket повреждён.
Решение:
# Очисти кэш turbo и убей процессы
rm -rf node_modules/.cache/turbo ~/.turbo
pkill -f "turbo.*daemon"
# Запусти заново
pnpm start sofaDoppler not configured
Сообщение:
Error: Doppler project not configuredПричина: Doppler CLI не настроен для проекта.
Решение:
doppler login
doppler setup
# Выбери project: integ-core
# Выбери config: dev (или local)CI/CD
Turbo cache miss causing slow builds
Симптом: CI занимает >5 минут вместо <1 минуты.
Причина: Изменения в зависимостях инвалидируют кэш.
Решение: Это нормально после изменений в package.json или shared пакетах. Следующие билды будут быстрее.
Pre-commit hook failed
Сообщение:
husky - pre-commit script failed (code 1)Причина: Код не прошёл lint или typecheck.
Решение:
# Посмотри детали ошибки выше в логе
# Обычно это:
# 1. ESLint ошибки
pnpm lint:fix
# 2. TypeScript ошибки
pnpm typecheck
# 3. Prettier
pnpm formatPR merge conflict
Симптом: GitHub показывает конфликт при merge.
Решение:
# Обнови ветку
git fetch origin dev
git merge origin/dev
# Разреши конфликты
git add .
git commit -m "Merge dev"
git pushQuick Reference
| Ошибка | Быстрое решение |
|---|---|
Cannot find module | pnpm install && pnpm build |
no such table | POST /{integration}/setup |
reading 'duration' (D1) | Заменить d1.exec() на d1.prepare().run() |
Secret not found | pnpm sync-secrets:dev |
Too many redirects | Cloudflare SSL: Flexible → Full |
Port in use | kill -9 $(lsof -t -i:8787) |
Pre-commit failed | pnpm lint:fix && pnpm format |
Failed to connect to daemon | rm -rf ~/.turbo && pkill -f turbo |
Связанные документы
- TROUBLESHOOTING — расширенный troubleshooting
- DEVELOPMENT — настройка локальной разработки
- SECRETS — управление секретами
- CI_CD — настройка CI/CD