
Research
Supply Chain Attack on Axios Pulls Malicious Dependency from npm
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.
anna-archieve
Advanced tools
A powerful Node.js tool for searching and downloading books from Anna's Archive with Cloudflare bypass
A powerful Node.js tool for searching and downloading books from Anna's Archive with built-in Cloudflare bypass capabilities.
# Install globally for CLI usage
npm install -g anna-archieve
# Or install locally for your project
npm install anna-archieve
# Search and download the first result
anna-archieve "The Great Gatsby"
# Search by author and title
anna-archieve "George Orwell 1984"
# Direct download using MD5 hash
anna-archieve --hash a1b2c3d4e5f6789...
# Get help
anna-archieve --help
# Basic search
node scraper.js "book title or author name"
# Examples
node scraper.js "The Catcher in the Rye"
node scraper.js "Stephen King"
node scraper.js "978-0134685991" # ISBN search
# Direct hash lookup
node scraper.js --hash MD5_HASH_HERE
# Display help
node scraper.js --help
const AnnasArchiveScraper = require('anna-archieve');
// Initialize scraper
const scraper = new AnnasArchiveScraper({
headless: true, // Run in headless mode
timeout: 30000, // Request timeout in ms
retryAttempts: 3, // Number of retry attempts
waitTime: 8000 // Wait time for Cloudflare
});
// Search for books
async function searchBooks() {
try {
const books = await scraper.searchBooks('The Great Gatsby');
console.log('Found books:', books);
// books array contains:
// [
// {
// title: "The Great Gatsby",
// md5: "a1b2c3d4e5f6...",
// url: "https://annas-archive.org/md5/a1b2c3d4e5f6..."
// }
// ]
} catch (error) {
console.error('Search failed:', error);
}
}
// Get download link
async function getDownloadLink() {
try {
const downloadUrl = await scraper.getDownloadLink('MD5_HASH_HERE');
if (downloadUrl) {
console.log('Download URL:', downloadUrl);
}
} catch (error) {
console.error('Download failed:', error);
}
}
// Search and download in one step
async function downloadBook() {
try {
const downloadUrl = await scraper.downloadBook('The Great Gatsby');
if (downloadUrl) {
console.log('Ready to download:', downloadUrl);
}
} catch (error) {
console.error('Download failed:', error);
}
}
When initializing the scraper, you can pass various options:
const scraper = new AnnasArchiveScraper({
headless: true, // Run browser in headless mode (default: true)
timeout: 30000, // Page load timeout in milliseconds (default: 30000)
retryAttempts: 3, // Number of retry attempts (default: 3)
waitTime: 8000, // Wait time for Cloudflare bypass (default: 8000)
});
new AnnasArchiveScraper(options)
Parameters:
options (Object, optional): Configuration optionsSearch for books on Anna's Archive.
Parameters:
query (string): Search query (title, author, ISBN, etc.)Returns: Promise - Array of book objects
Example:
const books = await scraper.searchBooks('Machine Learning');
Get download link for a specific book using its MD5 hash.
Parameters:
md5Hash (string): MD5 hash of the bookReturns: Promise<string|null> - Download URL or null if not found
Example:
const url = await scraper.getDownloadLink('a1b2c3d4e5f6...');
Download a book with built-in retry mechanism.
Parameters:
query (string): Search query or MD5 hashisHash (boolean, optional): Whether query is an MD5 hash (default: false)Returns: Promise<string|null> - Download URL or null if failed
Example:
// Search and download
const url = await scraper.downloadBook('The Art of War');
// Direct hash download
const url = await scraper.downloadBook('a1b2c3d4e5f6...', true);
# Clone the repository
git clone https://github.com/vaibhav1405/anna-archieve.git
cd anna-archieve
# Install dependencies
npm install
# Run the scraper
npm start "your search query"
npm run start # Run the scraper
npm run dev # Run with nodemon for development
npm run lint # Fix linting issues
npm run lint:check # Check for linting issues
npm run example # Run example search
npm run help # Show help message
npm run clean # Clean and reinstall dependencies
anna-archieve/
├── scraper.js # Main scraper class and CLI
├── package.json # Package configuration
├── README.md # This file
├── LICENSE # License file
└── node_modules/ # Dependencies
This tool is for educational purposes only. Users are responsible for:
Cloudflare blocks requests
waitTime optionTimeout errors
timeout optionNo download links found
Installation issues
npm cache clean --forceContributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
npm run lint:checkThis project is licensed under the ISC License - see the LICENSE file for details.
If you encounter any issues or have questions:
⭐ If you find this tool useful, please consider giving it a star on GitHub!
FAQs
A powerful Node.js tool for searching and downloading books from Anna's Archive with Cloudflare bypass
We found that anna-archieve demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.

Security News
TeamPCP is partnering with ransomware group Vect to turn open source supply chain attacks on tools like Trivy and LiteLLM into large-scale ransomware operations.