mirror of
https://github.com/Permissionless-Software-Foundation/psf-bch-api.git
synced 2026-09-21 16:52:00 -07:00
77 lines
3.3 KiB
Markdown
77 lines
3.3 KiB
Markdown
# 2026-03-17 Update Log
|
|
|
|
## Summary
|
|
|
|
Enhanced REST request logging to capture client network identity in Winston logs, enabled proxy-aware IP resolution, and reduced Fulcrum error-log noise for expected missing-transaction requests.
|
|
|
|
## Changes Made
|
|
|
|
- Updated `bin/server.js`:
|
|
- Set Express proxy handling with `app.set('trust proxy', true)`.
|
|
- Kept the current Winston request message format (`"${req.method} ${req.path}"`).
|
|
- Added structured Winston metadata fields to request logs:
|
|
- `client_ip` from `req.ip`
|
|
- `remote_address` from `req.socket.remoteAddress`
|
|
- Updated `src/adapters/fulcrum-api.js`:
|
|
- Added parsing helpers to normalize Fulcrum error messages from multiple response shapes.
|
|
- Mapped common daemon missing-TX error (`No such mempool or blockchain transaction`) to:
|
|
- status `404`
|
|
- message `Transaction not found`
|
|
- Updated `src/use-cases/fulcrum-use-cases.js`:
|
|
- Removed duplicate error logging in `getTransactionDetails()` and now rethrows adapter errors without a second error-level log.
|
|
- Updated `src/controllers/rest-api/fulcrum/controller.js`:
|
|
- Added TXID validation (`64`-character hex) for `GET /v6/fulcrum/tx/data/:txid`.
|
|
- Updated `handleError()` logging policy:
|
|
- `Transaction not found` (`404`) logs at `info`
|
|
- other `4xx` logs at `warn`
|
|
- `5xx` logs at `error`
|
|
|
|
## Useful Fields Available for REST Request Logging
|
|
|
|
- Routing and request basics:
|
|
- `method` (`req.method`)
|
|
- `path` (`req.path`)
|
|
- `original_url` (`req.originalUrl`)
|
|
- `query` (`req.query`)
|
|
- Client network identity:
|
|
- `client_ip` (`req.ip`)
|
|
- `forwarded_ips` (`req.ips`, when behind one or more proxies)
|
|
- `remote_address` (`req.socket.remoteAddress`)
|
|
- HTTP and transport:
|
|
- `protocol` (`req.protocol`)
|
|
- `secure` (`req.secure`)
|
|
- `http_version` (`req.httpVersion`)
|
|
- `host` (`req.get('host')`)
|
|
- `origin` (`req.get('origin')`)
|
|
- `referer` (`req.get('referer')`)
|
|
- `user_agent` (`req.get('user-agent')`)
|
|
- Request/response performance and size:
|
|
- `status_code` (`res.statusCode`, from `res.on('finish')`)
|
|
- `duration_ms` (elapsed time between request start and response finish)
|
|
- `request_size_bytes` (`req.get('content-length')`)
|
|
- `response_size_bytes` (`res.getHeader('content-length')`)
|
|
- App-specific request context in this codebase:
|
|
- `basic_auth_valid` (`req.locals.basicAuthValid`)
|
|
- x402 decision/bypass status (derived from middleware path and config)
|
|
|
|
## Already Logging
|
|
|
|
- In Winston request logs:
|
|
- `message` with method + path (for example `GET /v6/full-node/blockchain/getBlockCount`)
|
|
- `client_ip`
|
|
- `remote_address`
|
|
- `timestamp` (from Winston timestamp formatter)
|
|
- `level`
|
|
- In console endpoint logs:
|
|
- Request line with method, path, and `req.ip`
|
|
- Response line with method, path, and final `res.statusCode`
|
|
|
|
## Outcome
|
|
|
|
- Request logs now preserve existing behavior while adding IP attribution fields.
|
|
- `trust proxy` ensures `req.ip` is proxy-aware when the server is deployed behind a reverse proxy.
|
|
- The project now has a documented list of high-value request fields for future logging expansion.
|
|
- Fulcrum missing-transaction lookups now return cleaner API semantics (`404 Transaction not found`).
|
|
- Duplicate error logs for a single missing TX lookup were removed.
|
|
- Invalid TXIDs are rejected early with a `400` validation error.
|