.ts
TypeScript
(application/typescript)
// 3rd-party
import { preHandlerHookHandler } from "fastify";
// lib
import { Const } from "../../const";

export const sessionSetupPreHandler: preHandlerHookHandler = (
  request,
  reply,
  done
) => {
  if (request.cookies.theme_scheme == null) {
    reply.setCookie("theme_scheme", Const.DEFAULT_THEME_SCHEME);
  }

  // Handle flash messages logic
  if (request.session.data.flash_message != null) {
    if (request.session.data.flash_message_shown_once) {
      // Reset the flash message one request after it is shown.
      request.session.data.flash_message = null;
      request.session.data.flash_data = null;
      request.session.data.flash_message_shown_once = false;
    } else {
      // Set the flash message as shown once so it can be hidden on next request.
      request.session.data.flash_message_shown_once = true;
    }
  }

  done();
};