Files
usenet-indexer/start/env.ts
T
Daan MeijerandClaude Opus 5.5 530a752cca
Test and deploy / test (push) Successful in 1m37s
Test and deploy / deploy (push) Successful in 2m10s
Seed: finished ranges marked done; relay XOVER timeout 10 minutes
- A range reported to its end but not finished (its node went away at
  the very end) was leased again with start past end; nodes asked for
  "from 49208000000 to 49207999999", got 400, and the range failed after
  five leases. The orchestrator now marks such ranges done before
  leasing, and runRange reports them done without fetching.
- Some old ranges come so slowly that one XOVER of 20k headers takes over
  two minutes: five ranges failed on "NNTP reply timed out". The relay
  pool's timeout is SEED_NNTP_TIMEOUT_MS (default 10 minutes, the node's
  HTTP timeout).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 19:21:30 +02:00

92 lines
3.6 KiB
TypeScript

/*
|--------------------------------------------------------------------------
| Environment variables service
|--------------------------------------------------------------------------
|
| The `Env.create` method creates an instance of the Env service. The
| service validates the environment variables and also cast values
| to JavaScript data types.
|
*/
import { Env } from '@adonisjs/core/env'
export default await Env.create(new URL('../', import.meta.url), {
// Node
NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const),
PORT: Env.schema.number(),
HOST: Env.schema.string({ format: 'host' }),
LOG_LEVEL: Env.schema.string(),
// App
APP_KEY: Env.schema.secret(),
APP_URL: Env.schema.string({ format: 'url', tld: false }),
// Session
SESSION_DRIVER: Env.schema.enum(['cookie', 'memory', 'database'] as const),
// Database
DB_CONNECTION: Env.schema.string(),
DB_HOST: Env.schema.string({ format: 'host' }),
DB_PORT: Env.schema.number(),
DB_USER: Env.schema.string(),
DB_PASSWORD: Env.schema.secret.optional(),
DB_DATABASE: Env.schema.string(),
DB_POOL_MAX: Env.schema.number.optional(),
DB_SYNCHRONOUS_COMMIT: Env.schema.enum.optional(['on', 'off'] as const),
// Redis
REDIS_HOST: Env.schema.string({ format: 'host' }),
REDIS_PORT: Env.schema.number(),
REDIS_PASSWORD: Env.schema.secret.optional(),
// Usenet (NNTP)
NNTP_HOST: Env.schema.string({ format: 'host' }),
NNTP_PORT: Env.schema.number(),
NNTP_USER: Env.schema.string(),
NNTP_PASSWORD: Env.schema.secret(),
NNTP_SECURE: Env.schema.boolean(),
NNTP_POOL_SIZE: Env.schema.number.optional(),
NNTP_COMMAND_TIMEOUT_MS: Env.schema.number.optional(),
NNTP_TLS_SERVERNAME: Env.schema.string.optional(),
SEED_NNTP_CONNECTIONS: Env.schema.number.optional(),
SEED_NNTP_TIMEOUT_MS: Env.schema.number.optional(),
// Indexer (config/indexer.ts)
BACKFILL_MAX_QUEUED: Env.schema.number.optional(),
STAGING_GROUPS: Env.schema.string.optional(),
COUNTER_GROUPING_GROUPS: Env.schema.string.optional(),
FILE_CONCURRENCY: Env.schema.number.optional(),
GC_REINDEX_INTERVAL_MS: Env.schema.number.optional(),
GC_UNFINGERPRINTED_SECONDS: Env.schema.number.optional(),
STAGING_TTL_SECONDS: Env.schema.number.optional(),
BACKFILL_MAX_NVME_GB: Env.schema.number.optional(),
BACKFILL_MAX_HDD_GB: Env.schema.number.optional(),
INDEX_INTERVAL_MS: Env.schema.number.optional(),
INDEX_BATCH_SIZE: Env.schema.number.optional(),
INDEX_MAX_BATCHES_PER_TICK: Env.schema.number.optional(),
INDEX_INITIAL_BACKFILL: Env.schema.number.optional(),
FETCH_CONCURRENCY: Env.schema.number.optional(),
BODY_CONCURRENCY: Env.schema.number.optional(),
COLLECTION_CONCURRENCY: Env.schema.number.optional(),
DEFERRED_SETTLE_MS: Env.schema.number.optional(),
DEFERRED_EXPAND_MAX_PARTS: Env.schema.number.optional(),
DEFERRED_CONCURRENCY: Env.schema.number.optional(),
SPOT_CONCURRENCY: Env.schema.number.optional(),
SPOT_IMPORT_DAYS: Env.schema.number.optional(),
// Newznab API (/api): required as ?apikey= when set
NEWZNAB_API_KEY: Env.schema.secret.optional(),
// Garbage collection (config/gc.ts)
GC_INTERVAL_MS: Env.schema.number.optional(),
GC_COMPLETED_AGE_SECONDS: Env.schema.number.optional(),
GC_FAILED_AGE_SECONDS: Env.schema.number.optional(),
GC_BINARY_STALE_SECONDS: Env.schema.number.optional(),
GC_BODY_QUEUE_MAX: Env.schema.number.optional(),
GC_DEFERRED_RETENTION_DAYS: Env.schema.number.optional(),
GC_SINGLE_ARTICLE_SECONDS: Env.schema.number.optional(),
GC_EMPTY_RELEASE_SECONDS: Env.schema.number.optional(),
GC_DELETE_BUDGET_MS: Env.schema.number.optional(),
})