{"id":19621316,"url":"https://github.com/commenthol/veloze-session","last_synced_at":"2026-01-30T11:00:13.105Z","repository":{"id":210747244,"uuid":"727377733","full_name":"commenthol/veloze-session","owner":"commenthol","description":"A session store","archived":false,"fork":false,"pushed_at":"2024-11-16T12:50:36.000Z","size":67,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-01T17:40:33.969Z","etag":null,"topics":["cookie","mongodb","redis","sequelize","session","store","veloze"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/commenthol.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-04T18:40:58.000Z","updated_at":"2024-11-16T12:50:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"64eb5d19-f19a-4d41-8480-3a278c913ab8","html_url":"https://github.com/commenthol/veloze-session","commit_stats":null,"previous_names":["commenthol/veloze-session"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/commenthol/veloze-session","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commenthol%2Fveloze-session","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commenthol%2Fveloze-session/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commenthol%2Fveloze-session/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commenthol%2Fveloze-session/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/commenthol","download_url":"https://codeload.github.com/commenthol/veloze-session/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commenthol%2Fveloze-session/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28911819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T08:15:08.179Z","status":"ssl_error","status_checked_at":"2026-01-30T08:14:31.507Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cookie","mongodb","redis","sequelize","session","store","veloze"],"created_at":"2024-11-11T11:22:20.152Z","updated_at":"2026-01-30T11:00:13.091Z","avatar_url":"https://github.com/commenthol.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![npm-badge][npm-badge]][npm]\n[![actions-badge][actions-badge]][actions]\n![types-badge][types-badge]\n\n# @veloze/session\n\nSession middleware for [veloze][]. Works also with [express][]\n\nComes packed with a\n\n- Cookie store as default (uses [HS256 JWT](https://jwt.io))\n- Memory store (not for production)\n- Redis store (using [ioredis](https://www.npmjs.com/package/ioredis))\n- SQL store (using [sequelize](https://www.npmjs.com/package/sequelize))\n\n\n**Table of Contents**\n\n\u003c!-- !toc --\u003e\n\n* [Usage](#usage)\n  * [MemoryStore](#memorystore)\n  * [RedisStore](#redisstore)\n  * [MongoStore](#mongostore)\n  * [SqlStore](#sqlstore)\n* [API](#api)\n* [License](#license)\n\n\u003c!-- toc! --\u003e\n\n# Usage\n\nInstallation\n\n```\nnpm i @veloze/session\n```\n\nIn your code:\n\n```js\nimport { Server, cookieParser } from 'veloze'\nimport { session } from '@veloze/session'\nimport { CookieStore } from '@veloze/session/CookieStore'\n\nconst app = new Server()\n\n// using Cookie store\napp.use(\n  cookieParser,\n  session({\n    store: new CookieStore({\n      // allows key rotation (1st secret is used for signing)\n      secrets: [\n        { kid: '2', secret: 's€cr3t'}, \n        { kid: '1', secret: 'older-s€cr3t'}\n      ]\n    }),\n    // session cookie name\n    name: 'session',\n    // session expiry\n    expires: '12 hours',\n    // cookie options\n    cookieOpts: { sameSite: 'Strict', httpOnly: true }\n  }),\n  async (req, res) =\u003e {\n    // get session data\n    const data = req.session\n    // change or add properties\n    data.username = 'alice'\n\n    // set session data with an object\n    req.session.set({ visits: 1, follows: ['bob'] })\n\n    // explicitly save the session\n    // session is also automatically saved before writing response headers\n    await req.session.save()\n\n    // reset session id, but maintain session data\n    await req.session.resetId()\n\n    // destroy the session\n    await req.session.destroy()\n  }\n)\n```\n\n## MemoryStore\n\nUsing Memory store\n\n\u003e **Note:** Do not use in production.\n\nSee `./examples/memorystore.js`\n\n\u003c!-- include (./examples/memorystore.js lang=js) --\u003e\n```js\nimport { Server, send, queryParser, cookieParser, response } from 'veloze'\nimport { session, MemoryStore } from '@veloze/session'\nimport { view } from './view.js'\n\nconst store = new MemoryStore()\n\nconst app = new Server({ onlyHTTP1: true })\n\napp.use(\n  send,\n  queryParser,\n  cookieParser,\n  // attach session middleware with store\n  session({\n    store,\n    expires: 10,\n    initialData: { visits: 0 }\n  })\n)\n\n//...\n```\n\u003c!-- /include --\u003e\n\n## RedisStore\n\nUse Redis as session storage\n\n\u003e **Note:** needs additional dependency\n\u003e ```sh\n\u003e npm i ioredis\n\u003e ```\n\nSee `./examples/redisstore.js`\n\n\u003c!-- include (./examples/redisstore.js lang=js) --\u003e\n```js\nimport { Server, send, queryParser, cookieParser, response } from 'veloze'\nimport { session } from '@veloze/session'\nimport { view } from './view.js'\n\n// import redis driver and store\nimport Redis from 'ioredis'\nimport { RedisStore } from '@veloze/session/RedisStore'\n\n// create redis client\nconst client = new Redis({\n  host: '127.0.0.1',\n  port: 6379\n  // username: '',\n  // password: '',\n  // db: 0,\n  // keyPrefix: 'session:',\n})\nconst store = new RedisStore({ client })\n\nconst app = new Server({ onlyHTTP1: true })\n\napp.use(\n  send,\n  queryParser,\n  cookieParser,\n  // attach session middleware with store\n  session({\n    store,\n    expires: 10,\n    initialData: { visits: 0 }\n  })\n)\n\n//...\n```\n\u003c!-- /include --\u003e\n\n## MongoStore\n\nUse MongoDB as session storage\n\n\u003e **Note:** needs additional dependency\n\u003e ```sh\n\u003e npm i mongodb\n\u003e ```\n\nSee `./examples/mongostore.js`\n\n\u003c!-- include (./examples/mongostore.js lang=js) --\u003e\n```js\nimport { Server, send, queryParser, cookieParser, response } from 'veloze'\nimport { session } from '@veloze/session'\nimport { view } from './view.js'\n\n// import mongo driver and store\nimport { MongoClient } from 'mongodb'\nimport { MongoStore } from '@veloze/session/MongoStore'\n\n// create mongo client\nconst client = new MongoClient('mongodb://root:example@localhost:27017')\nconst store = new MongoStore({ client })\n\nconst app = new Server({ onlyHTTP1: true })\n\napp.use(\n  send,\n  queryParser,\n  cookieParser,\n  // attach session middleware with store\n  session({\n    store,\n    expires: 10,\n    // extendExpiry: true,\n    initialData: { visits: 0 }\n  })\n)\n\n//...\n```\n\u003c!-- /include --\u003e\n\n## SqlStore\n\nUse Sequelize to connect to your favorite SQL Database\n\n\u003e **Note:** needs additional dependency\n\u003e ```sh\n\u003e # for postgres\n\u003e npm i pg\n\u003e # for mariadb, mysql\n\u003e npm i mysql2\n\u003e ```\n\nSee `./examples/postgresstore.js`\n\n\u003c!-- include (./examples/postgresstore.js lang=js) --\u003e\n```js\nimport { Server, send, queryParser, cookieParser, response } from 'veloze'\nimport { session } from '@veloze/session'\nimport { view } from './view.js'\n\n// import sequelize and store\nimport { Sequelize } from 'sequelize'\nimport { SqlStore } from '@veloze/session/SqlStore'\n\n/**\n * Create database in PostgreSQL first\n * connect to \"postgres\" database and run:\n * ```sql\n * CREATE DATABASE test;\n * ```\n */\n\n// creates postgres client\nconst client = new Sequelize({\n  dialect: 'postgres', // don't forget to install \"pg\"\n  host: 'localhost',\n  port: 5432,\n  username: 'root',\n  password: 'example',\n  database: 'test',\n  logging: false\n})\nconst store = new SqlStore({ client })\nawait store.init({ alter: true })\n\nconst app = new Server({ onlyHTTP1: true })\n\napp.use(\n  send,\n  queryParser,\n  cookieParser,\n  // attach session middleware with store\n  session({\n    store,\n    expires: 10,\n    // extendExpiry: true,\n    initialData: { visits: 0 }\n  })\n)\n\n//...\n```\n\u003c!-- /include --\u003e\n\n# API\n\n## Session Middleware\n\n```ts\n function session(opts: {\n    /** \n     * session store \n     * @default CookieStore\n     */\n    store?: import(\"./types\").Store | undefined;\n    /**\n     * session expiration\n     * @default '12 hours'\n     */\n    expires?: string | number | undefined;\n    /**\n     * session cookie name\n     * @default 'session'\n     */\n    name?: string | undefined;\n    /**\n     * Cookie options\n     */\n    cookieOpts?: import(\"veloze/types/types.js\").CookieOpts | undefined;\n    /**\n     * if `true` extend expiry on every request\n     * @default false\n     */\n    extendExpiry?: boolean | undefined;\n    /**\n     * initial session data (if no session found)\n     */\n    initialData?: object;\n    /**\n     * signing secrets; 1st used to sign, all others to verify;\n     * only required if using default CookieStore\n     */\n    secrets?: {\n        kid: string;\n        secret: string;\n    }[] | undefined;\n    randomId?: (() =\u003e string) | undefined;\n}): Promise\u003c(req, res, next) =\u003e void\u003e;\n```\n\n## Request Session Object \n\n```ts\nexport interface ReqSession {\n  /** set session data object */\n  set(data: object): void\n  /** extend the expiry time of the session */\n  extendExpiry(): void\n  /** renew the session Id */\n  resetId(): Promise\u003cvoid\u003e\n  /** explicitly save the session */\n  save(): Promise\u003cvoid\u003e\n  /** destroy the session */\n  destroy(): Promise\u003cvoid\u003e\n  /** set, get property on session object */\n  [property: string]: any\n}\n```\n\n# License\n\n[MIT licensed](./LICENSE)\n\n[npm-badge]: https://badgen.net/npm/v/@veloze/session\n[npm]: https://www.npmjs.com/package/@veloze/session\n[types-badge]: https://badgen.net/npm/types/@veloze/session\n[actions-badge]: https://github.com/commenthol/veloze-session/workflows/CI/badge.svg?branch=main\u0026event=push\n[actions]: https://github.com/commenthol/veloze-session/actions/workflows/ci.yml?query=branch%3Amain\n[veloze]: https://github.com/commenthol/veloze\n[express]: http://expressjs.com/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommenthol%2Fveloze-session","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommenthol%2Fveloze-session","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommenthol%2Fveloze-session/lists"}