sveltekit-statefull-session

0.0.2 • Public • Published

Sveltekit Statefull session

Setup

Create a src/hooks.server.ts file in your svelte project using the following code:

// src/hooks.server.ts
import { InMemorySessionRepository, handleSession } from '@sveltekit-statefull-session/core';

const repository = new InMemorySessionRepository({ ttl: '5s'});
export const handle = handleSession(repository, { debug: true });

If you already have a hooks.server.ts file declared, you can chain handler with the sequence function.

In your src/app.d.ts file, copy the following code, and fill in the Session type

// See https://kit.svelte.dev/docs/types#app
import type { SveltekitSession } from "@sveltekit-statefull-session/core";

// for information about these interfaces
declare global {
	namespace App {
		// interface Error {}
		interface Locals {
			session: SveltekitSession<Session>;
		}
		// interface PageData {}
		// interface Platform {}
	}

	type Session = {
		// TODO: Whatever you want in your session
	}
}

export { };

You can access only from the server side to the session using the locals.session available from the RequestEvent property in any load function (or action function).

handleSession

handleSession takes 2 paramèters :

  • repository: Must be any instance of the SessionRepository interface
  • options: (optional) to fine tune the session

Options

Option Description Default
sessionCookieName Name of the session cookie 'svelte-session-key'
keyGenerator Function to generate a new session key crypto.randomUUID()
debug Log session events false
secure Secure the session cookie true

InMemorySessionRepository

Create an instance of InMemorySessionRepository using the 2 followings parameters :

  • ttl: A simple string describing how long should the session last. More information here

InMemorySessionRepository works only with the node adapter and only with a single instance of node.

RedisSessionRepository

You need to install the @redis/client, and create an instance in your src/hooks.server.ts using the createClient function.

You need to install the @sveltekit-statefull-session/repository-redis and create an instance of RedisSessionRepository.

Create an instance of RedisSessionRepository using the 2 followings parameters :

  • ttl: A simple string describing how long should the session last. More information here
  • client: The previously created instance of redis client

TTL

A ttl is a string declaring how long the session should last. The string must follow the following format ${number}${unit} :

  • number is the quantity of time
  • unit is the unit of time (currently only s: second, m: minute, h: hour are supported)

For instance :

const ttl1: TTL = '5m'  // 5 minutes
const ttl2: TTL = '2h'  // 2 hours
const ttl3: TTL = '36s' // 36 seconds

Examples

You can see a working example here: simple-session

Compile project

pnpm i
pnpm build
pnpm example

Todo

  • [x] Session TTL
  • [x] Cookie session id
  • [x] Create InMemory repository
  • [x] Create Redis repository
  • [ ] Create Prisma repository
  • [ ] Option for handleSession to refresh the TTL on update or not
  • [ ] Publish on npm repository with a github action
  • [ ] Playwright tests
  • [x] Create mono-repo for every repositories

Readme

Keywords

none

Package Sidebar

Install

npm i sveltekit-statefull-session

Weekly Downloads

16

Version

0.0.2

License

MIT

Unpacked Size

59.4 kB

Total Files

34

Last publish

Collaborators

  • yakanet