pnpm + TypeScript workspace per design doc §13:
- apps/{web,api,worker} skeletons (Next.js 16, Fastify 5, BullMQ)
- packages/{core,solana,prometheus,db,config} (core has real types/DTOs;
solana/prometheus are stubs)
- programs/pyre-core placeholder (future Anchor, v1.0)
- docs/: PYRE_MVP_DESIGN (canonical), ARCHITECTURE, SECURITY, TOKEN_CLASSIFICATION
- CLAUDE.md, README, .env.example (no private-key var by design)
Skeleton + docs only — no Solana/business logic yet. All workspaces typecheck clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
39 lines
1.3 KiB
Markdown
39 lines
1.3 KiB
Markdown
# @pyre/config
|
|
|
|
Shared configuration and environment loading for PYRE.
|
|
|
|
## Purpose
|
|
|
|
Per §13: shared config and environment loading. Provides a typed `Env` interface
|
|
and a `loadConfig()` loader that maps the variables in the repo-root
|
|
`.env.example` into typed config.
|
|
|
|
## Trust rule
|
|
|
|
There is intentionally **no** wallet private-key / mnemonic variable here, and
|
|
there never will be (§3). All signing happens client-side in the user's wallet.
|
|
|
|
## Variables (mirrors `.env.example`)
|
|
|
|
- **Solana** — `SOLANA_RPC_URL`, `SOLANA_RPC_WS_URL`, `SOLANA_CLUSTER`
|
|
- **Database** — `DATABASE_URL`
|
|
- **Redis** — `REDIS_URL`
|
|
- **AI** — `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `IMAGE_GEN_PROVIDER`,
|
|
`IMAGE_GEN_API_KEY`
|
|
- **App URLs / ports** — `WEB_PORT`, `API_PORT`, `WEB_PUBLIC_URL`,
|
|
`API_PUBLIC_URL`
|
|
- **Admin / security** — `ADMIN_API_TOKEN`, `RATE_LIMIT_SCAN_PER_MIN`
|
|
- **Classification thresholds** — `PROTECTED_USD_THRESHOLD`,
|
|
`MAX_PRICE_IMPACT_BPS`, `QUOTE_MAX_AGE_MS`
|
|
- **Optional / later phases** — `IPFS_OR_ARWEAVE_ENDPOINT`,
|
|
`IPFS_OR_ARWEAVE_TOKEN`, `PUMPFUN_CREATOR_WALLET_PUBKEY` (public key only)
|
|
|
|
## Status
|
|
|
|
**Skeleton.** Defines `Env`; `loadConfig()` is a stub.
|
|
|
|
## TODO
|
|
|
|
- Implement `loadConfig()` — read `process.env`, validate/coerce, apply defaults,
|
|
fail fast on missing required values. Never hardcode secrets.
|