UNPKG

@piggly/fastify-chassis

Version:

An ESM/CommonJS toolkit to help you to do common operations in your back-end applications with Fastify and NodeJS.

146 lines 4.13 kB
/* eslint-disable no-console */ import { ServiceProvider, } from '@piggly/ddd-toolkit'; /** * @file Cookie builder service. * @copyright Piggly Lab 2024 */ export class CookieBuilderService { /** * Settings. * * @type {CookieBuilderServiceSettings} * @protected * @memberof CookieBuilderService * @since 5.1.0 * @author Caique Araujo <caique@piggly.com.br> */ _settings; /** * Constructor. * * @public * @constructor * @memberof CookieBuilderService * @since 5.1.0 * @author Caique Araujo <caique@piggly.com.br> */ constructor(settings) { this._settings = settings; } /** * Clear cookie. * * @param {FastifyReply} reply * @param {string} name * @public * @memberof CookieBuilderService * @since 5.1.0 * @author Caique Araujo <caique@piggly.com.br> */ clear(reply, name) { if (!reply?.clearCookie) { console.warn('CookieBuilderService', 'Reply does not have clearCookie method.'); return; } reply.clearCookie(name, { domain: this._settings.domain, path: '/', }); } /** * Get cookie value. * * @param {FastifyRequest} request * @param {string} name * @param {string} default_value * @returns {TOrUndefined<string>} * @public * @memberof CookieBuilderService * @since 5.1.0 * @author Caique Araujo <caique@piggly.com.br> */ get(request, name, default_value) { if (!request?.cookies) { console.warn('CookieBuilderService', 'Request does not have cookies.'); return default_value; } return request.cookies[name] ?? default_value; } /** * Check if has cookie. * * @param {FastifyRequest} request * @param {string} name * @returns {boolean} * @public * @memberof CookieBuilderService * @since 5.1.0 * @author Caique Araujo <caique@piggly.com.br> */ has(request, name) { return request.cookies[name] !== undefined; } /** * Register application service. * * @param {FastifyReply} reply * @param {string} name * @param {string} value * @param {CookieOptions} options * @public * @static * @memberof CookieBuilderService * @since 5.1.0 * @author Caique Araujo <caique@piggly.com.br> */ set(reply, name, value, options) { if (!reply?.setCookie) { console.warn('CookieBuilderService', 'Reply does not have setCookie method.'); return; } reply.setCookie(name, value, { domain: options?.domain ?? this._settings.domain, encode: options?.encode, expires: options?.expires, httpOnly: options?.httpOnly ?? false, maxAge: options?.maxAge, partitioned: options?.partitioned, path: options?.path ?? '/', priority: options?.priority, sameSite: options?.sameSite ?? 'lax', secure: options?.secure ?? this._settings.environment === 'production', signed: options?.signed ?? false, }); } /** * Register application service. * * @param {CookieBuilderService} service * @public * @static * @memberof CookieBuilderService * @since 5.1.0 * @author Caique Araujo <caique@piggly.com.br> */ static register(service) { if (ServiceProvider.has('CookieBuilderService')) { return; } ServiceProvider.register('CookieBuilderService', service); } /** * Resolve application service. * * @returns {CookieBuilderService} * @throws {Error} If service is not registered. * @public * @static * @memberof CookieBuilderService * @since 5.1.0 * @author Caique Araujo <caique@piggly.com.br> */ static resolve() { return ServiceProvider.resolve('CookieBuilderService'); } } //# sourceMappingURL=CookieBuilderService.js.map