@qumra/app-session-storage-prisma
v1.0.2
Published
Prisma-based session storage adapter for Qumra apps — supports PostgreSQL, MySQL, SQLite, and more
Downloads
305
Readme
@qumra/app-session-storage-prisma
Prisma-based session storage for Qumra apps — supports PostgreSQL, MySQL, SQLite, and more.
Installation
npm install @qumra/app-session-storage-prisma @qumra/app-sdkRequires @prisma/client >=5.0.0 as a peer dependency:
npm install -D @prisma/clientPrisma Schema Setup
Add a Session model to your Prisma schema:
model Session {
id String @id @default(cuid())
store String @db.VarChar(255)
userId String? @db.VarChar(255)
data Json?
expiresAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([store])
@@index([expiresAt])
}Run migrations to apply the schema:
npx prisma migrate dev --name initUsage with qumraApp
Initialize the session storage adapter:
import { qumraApp } from '@qumra/app-sdk';
import { PrismaSessionStorage } from '@qumra/app-session-storage-prisma';
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
const sessionStorage = new PrismaSessionStorage(prisma);
const app = qumraApp({
sessionStorage,
// ... other config
});API Reference
storeSession(store, session)
Stores or updates a session in the database.
await sessionStorage.storeSession('my-store', {
id: 'session-123',
userId: 'user-456',
data: { preferences: { theme: 'dark' } },
expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),
});loadSession(store, id)
Retrieves a session by store and ID. Returns null if not found or expired.
const session = await sessionStorage.loadSession('my-store', 'session-123');deleteSession(store, id)
Deletes a single session.
await sessionStorage.deleteSession('my-store', 'session-123');deleteSessions(store, ids)
Deletes multiple sessions in a single operation.
await sessionStorage.deleteSessions('my-store', ['session-123', 'session-456']);findSessionsByStore(store, options?)
Finds all sessions for a given store with optional filtering.
const sessions = await sessionStorage.findSessionsByStore('my-store', {
userId: 'user-456',
limit: 10,
offset: 0,
});Session Interface
Sessions conform to the following interface:
interface Session {
id: string;
store: string;
userId?: string;
data?: Record<string, any>;
expiresAt?: Date;
createdAt: Date;
updatedAt: Date;
}id: Unique session identifierstore: Logical store/namespace identifieruserId: Optional user associationdata: Arbitrary session metadataexpiresAt: Optional expiration timestampcreatedAt: Session creation timeupdatedAt: Last modification time
Qumra Ecosystem
| Package | Description | |---|---| | @qumra/app-sdk | Core SDK — sessions, security, errors | | @qumra/app-react-router | React Router 7 integration | | @qumra/app-session-storage-prisma | Prisma session storage | | @qumra/app-session-storage-mongodb | MongoDB session storage | | @qumra/jisr | App Bridge — Admin communication | | @qumra/manara | Design system & components | | @qumra/riwaq | UI Extensions SDK |
License
ISC © Qumra
