jlnstack

Groups

Batch operations on related cookies

Cookie Groups

Use createCookieGroup to combine related cookies and perform batch operations.

Creating a Group

import { createCookie, createCookieGroup } from "@jlnstack/cookies/next"

const sessionCookie = createCookie<string>("session")
const userCookie = createCookie<{ id: number; name: string }>("user")

const authCookies = createCookieGroup({
  session: sessionCookie,
  user: userCookie,
})

Group Options

The second argument accepts options for the group:

Prefix

Add a prefix to all cookie names in the group:

const authCookies = createCookieGroup(
  {
    session: sessionCookie,
    user: userCookie,
  },
  { prefix: "auth_" }
)

// Cookie names become "auth_session" and "auth_user"
authCookies.session.name // "auth_session"
authCookies.user.name    // "auth_user"

Apply default cookie options to all cookies in the group:

const authCookies = createCookieGroup(
  {
    session: sessionCookie,
    user: userCookie,
  },
  {
    defaults: {
      secure: true,
      httpOnly: true,
      sameSite: "strict",
    },
  }
)

// All set operations use these defaults
await authCookies.session.set("token123")
await authCookies.set({ user: { id: 1, name: "John" } })

You can override defaults per set call:

await authCookies.set(
  { session: "token123" },
  { maxAge: 60 * 60 } // Overrides defaults.maxAge, keeps other defaults
)

Combining Options

Use both prefix and defaults together:

const authCookies = createCookieGroup(
  { session: sessionCookie, user: userCookie },
  {
    prefix: "myapp_",
    defaults: { secure: true, httpOnly: true },
  }
)

Reading All Cookies

Get all cookie values in a single call:

const { session, user } = await authCookies.get()
// session: string | undefined
// user: { id: number; name: string } | undefined

Writing Cookies

Set one or more cookies at once. Only the cookies you specify will be updated:

// Set only the session cookie
await authCookies.set({ session: "token123" })

// Set both cookies
await authCookies.set({
  session: "token123",
  user: { id: 1, name: "John" },
})

// With options
await authCookies.set(
  { session: "token123" },
  { maxAge: 60 * 60 * 24 * 7 }
)

Deleting All Cookies

Delete all cookies in the group:

await authCookies.deleteAll()

Access individual cookies as properties for fine-grained control:

await authCookies.session.set("token123")
const session = await authCookies.session.get()
await authCookies.session.delete()

On this page