UNPKG

amazon-cognito-identity-js

Version:

Amazon Cognito Identity Provider JavaScript SDK

117 lines (107 loc) 2.93 kB
import * as Cookies from 'js-cookie'; /** @class */ export default class CookieStorage { /** * Constructs a new CookieStorage object * @param {object} data Creation options. * @param {string} data.domain Cookies domain (default: domain of the page * where the cookie was created, excluding subdomains) * @param {string} data.path Cookies path (default: '/') * @param {integer} data.expires Cookie expiration (in days, default: 365) * @param {boolean} data.secure Cookie secure flag (default: true) * @param {string} data.sameSite Cookie request behavior (default: null) */ constructor(data = {}) { if (data.domain) { this.domain = data.domain; } if (data.path) { this.path = data.path; } else { this.path = '/'; } if (Object.prototype.hasOwnProperty.call(data, 'expires')) { this.expires = data.expires; } else { this.expires = 365; } if (Object.prototype.hasOwnProperty.call(data, 'secure')) { this.secure = data.secure; } else { this.secure = true; } if (Object.prototype.hasOwnProperty.call(data, 'sameSite')) { if (!['strict', 'lax', 'none'].includes(data.sameSite)) { throw new Error( 'The sameSite value of cookieStorage must be "lax", "strict" or "none".' ); } if (data.sameSite === 'none' && !this.secure) { throw new Error( 'sameSite = None requires the Secure attribute in latest browser versions.' ); } this.sameSite = data.sameSite; } else { this.sameSite = null; } } /** * This is used to set a specific item in storage * @param {string} key - the key for the item * @param {object} value - the value * @returns {string} value that was set */ setItem(key, value) { const options = { path: this.path, expires: this.expires, domain: this.domain, secure: this.secure, }; if (this.sameSite) { options.sameSite = this.sameSite; } Cookies.set(key, value, options); return Cookies.get(key); } /** * This is used to get a specific key from storage * @param {string} key - the key for the item * This is used to clear the storage * @returns {string} the data item */ getItem(key) { return Cookies.get(key); } /** * This is used to remove an item from storage * @param {string} key - the key being set * @returns {string} value - value that was deleted */ removeItem(key) { const options = { path: this.path, expires: this.expires, domain: this.domain, secure: this.secure, }; if (this.sameSite) { options.sameSite = this.sameSite; } return Cookies.remove(key, options); } /** * This is used to clear the storage of optional * items that were previously set * @returns {} an empty object */ clear() { const cookies = Cookies.get(); let numKeys = Object.keys(cookies).length; for (let index = 0; index < numKeys; ++index) { this.removeItem(Object.keys(cookies)[index]); } return {}; } }