npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

yuniq-cookie

v1.0.2

Published

YuniqCookie is a powerful and versatile cookie management library for Node.js, optimized for web scraping, browser automation, and API interactions. It offers advanced features including automatic expiration handling, domain-specific filtering, HTTP reque

Downloads

230

Readme

yuniq-cookie is a sophisticated cookie management library for Node.js, designed to handle cookies in various use cases such as web scraping, browser automation, API consumption, and more. This library offers advanced features such as cookie expiration management, domain filtering, serialization for HTTP requests, and the ability to import/export cookies in Netscape format.

Inspired by the tough-cookie library, yuniq-cookie brings additional functionality and detailed cookie representation for use in modern applications.

Features

•	Comprehensive Cookie Management: Add, remove, retrieve, and iterate over cookies easily.
•	Expiration Management: Automatically handles expired cookies.
•	Domain-Specific Handling: Work with cookies filtered by specific domains or URLs.
•	Netscape Format Support: Import and export cookies using the classic Netscape cookie format.
•	Detailed Cookie Representation: Inspect cookies in detailed format, useful for debugging or data export.
•	Asynchronous Operations: Seamless integration of async workflows using callback-based APIs.
•	HTTP Header Serialization: Convert cookies into formats suitable for HTTP requests and responses.

Installation

Install the package via npm:

npm install yuniq-cookie

Usage

Basic Example

const { CookieJar } = require('yuniq-cookie');

// Create a new CookieJar instance const jar = new CookieJar();

// Add a cookie to the jar jar.setCookieSync('name=value; Domain=example.com', 'http://example.com');

// Retrieve all cookies for a domain const cookies = jar.getAllCookies('http://example.com'); console.log(cookies);

// Convert cookies to a header string for HTTP requests const cookieHeader = jar.toHeader('http://example.com'); console.log(cookieHeader); // Outputs "name=value" for the Cookie header

// Check the number of cookies stored in the jar console.log(jar.size); // Outputs the number of cookies stored

API Reference

Core Methods

fromArray(cookies: DetailedCookie[]): void

Imports an array of cookies into the CookieJar. This method is particularly useful when you have an external source of cookies (such as a session export) that you want to restore in the current context.

•	Parameters:
•	cookies: An array of DetailedCookie objects to be added to the jar. Each cookie should follow the detailed structure, including properties like name, value, domain, path, and expires.
•	Usage:

const detailedCookies = [ { name: 'session', value: 'xyz', domain: 'example.com', path: '/', expires: new Date() }, { name: 'token', value: 'abc', domain: 'example.com', path: '/', expires: new Date() } ];

jar.fromArray(detailedCookies); console.log(jar.size); // The number of cookies now includes the imported cookies

setResponseCookies(cookies: string[], url: string): void

Parses and stores cookies received from an HTTP response. This method is designed to handle the Set-Cookie header from HTTP responses, allowing you to store cookies associated with a specific URL.

•	Parameters:
•	cookies: An array of strings representing the cookies from the Set-Cookie header.
•	url: The URL from which the cookies were received. This ensures that the cookies are stored with the correct domain and path information.
•	Usage:

const responseCookies = [ 'sessionid=abc123; Domain=example.com; Path=/; HttpOnly', 'user_token=xyz789; Domain=example.com; Path=/; Secure' ];

jar.setResponseCookies(responseCookies, 'http://example.com'); console.log(jar.getAllCookies('http://example.com')); // Outputs the parsed cookies

toNetscapeFormat(): string

Serializes all cookies in the CookieJar to the Netscape cookie file format. This format is often used for saving and loading cookies in older tools and browser extensions. It’s a simple plain-text format that is still widely supported for certain applications.

•	Returns: A string containing all cookies in the Netscape format, which can be saved to a file or sent to an external application.
•	Usage:

const netscapeFormat = jar.toNetscapeFormat(); console.log(netscapeFormat); // Outputs the Netscape-style cookie string

parseNetscapeCookies(netscapeCookieString: string): void

Parses a string containing cookies in the Netscape format and adds them to the CookieJar. This method is useful when you need to import cookies from tools that export in the Netscape format (e.g., browser extensions).

•	Parameters:
•	netscapeCookieString: A string containing cookies in the Netscape format.
•	Usage:

const netscapeCookieString = `

Netscape HTTP Cookie File

.example.com TRUE / FALSE 0 sessionid abc123 .example.com TRUE / FALSE 0 user_token xyz789 `;

jar.parseNetscapeCookies(netscapeCookieString); console.log(jar.getAllCookies('http://example.com')); // The cookies are now added to the jar

toCookieString(url: string): string

Converts the cookies associated with a specific domain or URL into a string formatted for use in an HTTP Cookie header. This is useful when sending requests to servers that expect cookies in the Cookie header.

•	Parameters:
•	url: The URL or domain for which to serialize the cookies.
•	Returns: A string that can be used in the Cookie header of an HTTP request, formatted as name=value; another=cookie.
•	Usage:

const cookieString = jar.toCookieString('http://example.com'); console.log(cookieString); // Outputs "sessionid=abc123; user_token=xyz789"

General Methods

setCookieSync(cookieString: string, url: string): void

Synchronously sets a cookie in the CookieJar. The cookieString should follow the standard cookie format (e.g., name=value; Domain=example.com; Path=/; Expires=...).

•	Parameters:
•	cookieString: The string representation of the cookie to be added.
•	url: The URL that the cookie is associated with.

getAllCookies(url: string): Cookie[]

Retrieves all cookies stored in the jar that are associated with a specific domain or URL.

•	Parameters:
•	url: The domain or URL for which to retrieve cookies.
•	Returns: An array of Cookie objects.

toArray(): DetailedCookie[]

Converts all non-expired cookies in the jar into an array of DetailedCookie objects. Each DetailedCookie includes properties such as name, value, domain, path, expires, and more.

•	Returns: An array of DetailedCookie objects.

isEmpty(): boolean

Checks whether the cookie jar is empty.

•	Returns: true if the jar is empty, otherwise false.

size(): number

Returns the total number of cookies currently stored in the jar.

Symbol.iterator: Iterator

Enables iteration over the cookies in the jar using a for...of loop. Each iteration yields a Cookie object.

•	Usage:

for (const cookie of jar) { console.log(cookie); }

Advanced Example

Handling Cookies in HTTP Responses

const responseCookies = [ 'auth_token=abcdef; Domain=example.com; Path=/; HttpOnly', 'session_id=xyz123; Domain=example.com; Path=/; Secure' ];

// Set cookies from HTTP response jar.setResponseCookies(responseCookies, 'http://example.com');

// Retrieve and inspect cookies const cookies = jar.getAllCookies('http://example.com'); console.log(cookies);

// Serialize cookies for sending in an HTTP request const cookieHeader = jar.toCookieString('http://example.com'); console.log(cookieHeader); // "auth_token=abcdef; session_id=xyz123"

Importing and Exporting Netscape Cookies

// Export cookies to Netscape format const netscapeCookies = jar.toNetscapeFormat(); console.log(netscapeCookies);

// Parse and import cookies from Netscape format const netscapeCookieString = `

Netscape HTTP Cookie File

.example.com TRUE / FALSE 0 auth_token abc123 .example.com TRUE / FALSE 0 session_id xyz789 `; jar.parseNetscapeCookies(netscapeCookieString); console.log('Netscape cookies parsed and added to the jar.');

Conclusion

yuniq-cookie offers a complete solution for managing HTTP cookies in Node.js environments. Whether you’re dealing with cookie expiration, domain-specific filtering, or exporting cookies in Netscape format, this library provides the flexibility and power needed for handling cookies in modern applications.

By supporting both synchronous and asynchronous workflows, as well as detailed cookie management features, yuniq-cookie is the ideal choice for any developer looking for a robust cookie management solution.

Explore the API to take full advantage of its capabilities, and feel free to contribute or report issues on the GitHub repository!

License

This project is licensed under the MIT License.