Deploy FileDrop / deploy (push) Failing after 19s
BOT_TOKENS env:
- Single BOT_TOKENS env var (comma-separated) replaces BOT_TOKEN + ADDITIONAL_BOT_TOKENS
- Backward compat: falls back to BOT_TOKEN + ADDITIONAL_BOT_TOKENS if BOT_TOKENS unset
- Config exposes botTokens: string[] instead of botToken + additionalBotTokens
- Updated env.ts, bot-pool.ts, docker-compose.yml, .env.example, CLAUDE.md, all tests
Speed audit (S3 -> Telegram upload flow):
- Hoisted 5 dynamic await import('../../../db/index') to top-level static imports
in s3-controller.ts (3x) and web-api-controller.ts (2x)
-> saves module resolution + async overhead on every upload
- Removed stale UPLOAD_CONCURRENCY env from docker-compose.yml
(already removed from env.ts in prior refactor)
Upload flow is already concurrent:
- streamBodyToTemp() uses Bun.file(path).writer() — O(1) memory, safe for multi-GB blobs
- utils/chunked-storage.ts reads chunks serially but uploads concurrently with
inFlight backpressure at effectiveConcurrency * 2 (= 16 with 8 bots)
- bot-pool.ts: per-bot PQueue(concurrency=1), 8 bots = 8 concurrent uploads per file,
selectBot() picks least-loaded, 429 detection + inner+outer retry loops
- TELEGRAM_API_TIMEOUT_MS=120s — ample for 48MB chunks
- Infrastructure chunked-storage.ts (DI-based, dead code) has serial upload trap —
noted for future cleanup
21 lines
874 B
TypeScript
21 lines
874 B
TypeScript
/**
|
|
* Test environment setup — sets default env vars BEFORE any module is loaded.
|
|
*
|
|
* This prevents `src/env.ts` from throwing at import time when required
|
|
* environment variables are absent. Add this file as a `--preload` argument
|
|
* to `bun test` calls in package.json.
|
|
*
|
|
* Only the 5 env vars that `src/env.ts` considers required are set here.
|
|
* Optional vars (S3_SECRET_KEY, ADMIN_API_TOKEN, etc.) use their own
|
|
* defaults in `src/env.ts` and are not touched.
|
|
*/
|
|
|
|
process.env.BOT_TOKENS ||= '123456:ABC-DEF,789012:GHI-JKL,345678:MNO-PQR';
|
|
process.env.STORAGE_CHANNEL_ID ||= '-1001234567890';
|
|
process.env.BASE_URL ||= 'https://example.com';
|
|
process.env.DATABASE_URL ||= 'postgresql://user:pass@localhost:5432/test';
|
|
process.env.PORT ||= '3000';
|
|
process.env.NODE_ENV = 'test';
|
|
|
|
// Keep old env names for backward compat with tests that reference them directly
|