als-cookie-options
v2.3.0
Published
A library for managing cookie settings in Node.js applications, providing structured ways to define and serialize cookie options with built-in security and validation.
Maintainers
Readme
als-cookie-options
als-cookie-options is a library for managing cookie settings in Node.js applications, providing a structured way to define and serialize cookie options with built-in security, validation, and enhanced customization through default settings.
V2.1: Enhanced flexibility with the
CookieOptionsclass, supporting universal usage and default configuration merging.
What's New in V2.1
- Dynamic Security Check: Automatically applies the
Secureattribute based on the request object. - Unified Option Handling: Merge default settings with overrides for dynamic use cases.
- Static Serialization: Improved
serializeOptionsmethod for universal quick serialization without instance creation. - Backward Compatibility: Maintains compatibility with v1 use cases while extending functionality.
Features
- Validation: Ensures that all cookie settings comply with standard specifications before serialization.
- Security: Automatically applies secure attributes when necessary, e.g.,
SameSite=NonerequiresSecure. - Default Configuration: Define global defaults and merge them with case-specific settings effortlessly.
- Flexibility: Offers customization for most cookie attributes, such as
domain,path,expires,httpOnly,secure, and more. - Dynamic Request Handling: Incorporates request-based security evaluation seamlessly.
Installation
Install als-cookie-options using npm:
npm install als-cookie-optionsUsage
Here's a basic example of how to use als-cookie-options with the enhanced CookieOptions class:
const CookieOptions = require('als-cookie-options');
// Define default settings
const defaultOptions = new CookieOptions({
domain: 'example.com',
path: '/',
secure: true,
httpOnly: true,
sameSite: 'strict'
});
// Override defaults for a specific case
const specificOptions = defaultOptions.getOptions({
maxAge: 3600,
path: '/secure'
});
console.log(specificOptions);
// Output: "Domain=example.com; Path=/secure; Secure; HttpOnly; SameSite=Strict; Max-Age=3600"API Reference
CookieOptions Class
Constructor: new CookieOptions(options)
Creates an instance of CookieOptions with optional default settings.
Parameters
options(Object, optional): Default cookie settings. Supported properties:domain(String, optional): Specifies the domain for the cookie.path(String, optional): Specifies the path for the cookie.expires(Date, optional): Specifies the expiration date of the cookie.maxAge(Number, optional): Specifies the number of seconds until the cookie expires.httpOnly(Boolean, optional): Specifies whether the cookie is HTTP-only.secure(Boolean, optional): Specifies whether the cookie should be secure.partitioned(Boolean, optional): Specifies whether the cookie should be partitioned (experimental).priority(String, optional): Specifies the priority of the cookie (low,medium,high).sameSite(String, optional): Specifies the SameSite attribute of the cookie (strict,lax,none).
Methods
getOptions(overrides, req)
Merges default settings with case-specific overrides and evaluates security based on the request object.
Parameters
overrides(Object, optional): Case-specific settings to override the defaults.req(Object, optional): The request object to dynamically evaluate security.
Returns
- (String): A serialized string suitable for use in a
Set-CookieHTTP header.
serializeOptions(options, req) (Static Method)
Quickly serializes the provided options without creating an instance of the class. Backward-compatible with v1-style usage.
Parameters
options(Object): Cookie options to serialize.req(Object, optional): The request object for security context.
Returns
- (String): A serialized string suitable for use in a
Set-CookieHTTP header.
Example
const CookieOptions = require('als-cookie-options');
// Define global defaults
const defaults = new CookieOptions({
domain: 'example.com',
path: '/',
secure: true,
httpOnly: true,
sameSite: 'lax'
});
// Merge defaults with overrides
const cookieString = defaults.getOptions({
maxAge: 7200,
priority: 'high'
});
console.log(cookieString);
// Output: "Domain=example.com; Path=/; Secure; HttpOnly; SameSite=Lax; Max-Age=7200; Priority=High"
// Static usage for quick serialization
const quickCookie = CookieOptions.serializeOptions({
domain: 'example.com',
secure: true,
sameSite: 'strict'
});
console.log(quickCookie);
// Output: "Domain=example.com; Secure; SameSite=Strict"Examples
Setting a Secure Cookie with Custom Options
const CookieOptions = require('als-cookie-options');
const defaults = new CookieOptions({
domain: 'example.com',
secure: true,
httpOnly: true,
sameSite: 'strict'
});
const cookieString = defaults.getOptions({
maxAge: 3600,
path: '/secure'
});
console.log(cookieString);
// Output: "Domain=example.com; Path=/secure; Secure; HttpOnly; SameSite=Strict; Max-Age=3600"Automatically Applying Secure for SameSite=None
const CookieOptions = require('als-cookie-options');
const defaults = new CookieOptions({
sameSite: 'none' // Automatically adds Secure
});
const cookieString = defaults.getOptions();
console.log(cookieString);
// Output: "SameSite=None; Secure"Handling Validation Errors
const CookieOptions = require('als-cookie-options');
try {
const options = new CookieOptions();
options.getOptions({ priority: 'invalid' }); // Throws an error
} catch (error) {
console.error(error.message);
// Output: "Invalid Priority value: invalid"
}
// Using static method for quick validation and serialization
try {
const quickOptions = CookieOptions.serializeOptions({ priority: 'ultra' });
} catch (error) {
console.error(error.message);
// Output: "Invalid Priority value: ultra"
}