For a Node.js solution with automatic restart on network loss, you'll need:
1. **Range requests** with the S3 SDK to resume from last byte
2. **State persistence** to track completed chunks
3. **Retry logic** with exponential backoff
4. **Chunk verification** (SHA256)
I implemented exactly this in S3Ra (https://github.com/Fellurion/NGAPP) - it's an Electron app with a Node.js backend.
**Core implementation approach:**
- Split downloads into configurable chunks (default 200MB)
- Store chunk state in JSON: `{chunks: [{index: 0, completed: true, hash: '...'}]}`
- Use `getObject` with Range header: `Range: 'bytes=start-end'`
- Verify each chunk before marking complete
- On restart: read state file, resume from first incomplete chunk