import { CookieOptions, createSessionStorage } from "@remix-run/node"; // or cloudflare/deno import { db } from "~/utils/db.server"; function createDatabaseSessionStorage({ cookie } : { cookie: {name : string} & CookieOptions } ) { // Configure your database client... return createSessionStorage({ cookie, async createData(data, expires) { var session; if(data && data.user_id){ session = await db.session.create({data:{data: JSON.stringify({ data }), user:{connect:{id: data.user_id}}}}); } else { session = await db.session.create({data:{data: JSON.stringify({ data })}}); } return session.id; }, async readData(id) { let sessiondata = await db.session.findUnique({select: {user_id: true, data: true, user: true},where:{id: id}}) || null; return sessiondata; }, async updateData(id, data, expires) { if(data && data.user_id){ await db.session.upsert({create:{data: JSON.stringify({ data }), user:{connect:{id: data.user_id}}}, update:{data: JSON.stringify({ data }), user:{connect:{id: data.user_id}}}, where: {id: id}}); } else { await db.session.upsert({create:{data: JSON.stringify({ data })}, update:{data: JSON.stringify({ data })}, where: {id: id}}); } }, async deleteData(id) { await db.session.delete({where: {id: id}}); }, }); } const { getSession, commitSession, destroySession } = createDatabaseSessionStorage( { // a Cookie from `createCookie` or the CookieOptions to create one cookie: { name: "__session", httpOnly: true, maxAge: 31556952, path: "/", sameSite: "lax", secrets: ["super_secret_cookie_thingy"], secure: false, }, } ); export { getSession, commitSession, destroySession };