@boostkit/session 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 BoostKit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,100 @@
1
+ import { ServiceProvider, type Application } from '@boostkit/core';
2
+ import type { AppResponse, MiddlewareHandler } from '@boostkit/contracts';
3
+ declare module '@boostkit/contracts' {
4
+ interface AppRequest {
5
+ session: SessionInstance;
6
+ }
7
+ }
8
+ export interface SessionConfig {
9
+ driver: 'cookie' | 'redis';
10
+ lifetime: number;
11
+ secret: string;
12
+ cookie: {
13
+ name: string;
14
+ secure: boolean;
15
+ httpOnly: boolean;
16
+ sameSite: 'lax' | 'strict' | 'none';
17
+ path: string;
18
+ };
19
+ redis?: {
20
+ prefix?: string;
21
+ url?: string;
22
+ host?: string;
23
+ port?: number;
24
+ password?: string;
25
+ };
26
+ }
27
+ interface SessionPayload {
28
+ id: string;
29
+ data: Record<string, unknown>;
30
+ flash_next: Record<string, unknown>;
31
+ }
32
+ interface InternalDriver {
33
+ /** Load payload from the raw cookie value (undefined = no cookie). */
34
+ load(cookieValue: string | undefined): Promise<SessionPayload>;
35
+ /** Persist payload and return the value to store in the cookie. */
36
+ persist(payload: SessionPayload, ttlSeconds: number): Promise<string>;
37
+ /** Destroy a session by ID. */
38
+ destroy(id: string): Promise<void>;
39
+ }
40
+ export declare class SessionInstance {
41
+ private _data;
42
+ private _flash;
43
+ private _flashNext;
44
+ private _id;
45
+ private readonly _driver;
46
+ private readonly _config;
47
+ constructor(payload: SessionPayload, driver: InternalDriver, config: SessionConfig);
48
+ get<T>(key: string, fallback?: T): T | undefined;
49
+ put(key: string, value: unknown): void;
50
+ forget(key: string): void;
51
+ flush(): void;
52
+ /** Store a value that will be readable on the *next* request via getFlash(). */
53
+ flash(key: string, value: unknown): void;
54
+ /** Read a flash value set by the *previous* request. */
55
+ getFlash<T>(key: string, fallback?: T): T | undefined;
56
+ has(key: string): boolean;
57
+ all(): Record<string, unknown>;
58
+ id(): string;
59
+ regenerate(): Promise<void>;
60
+ save(res: AppResponse): Promise<void>;
61
+ }
62
+ export declare class Session {
63
+ private static current;
64
+ static get<T>(key: string, fallback?: T): T | undefined;
65
+ static put(key: string, value: unknown): void;
66
+ static forget(key: string): void;
67
+ static flash(key: string, value: unknown): void;
68
+ static getFlash<T>(key: string, fallback?: T): T | undefined;
69
+ static has(key: string): boolean;
70
+ static all(): Record<string, unknown>;
71
+ static regenerate(): Promise<void>;
72
+ }
73
+ export declare function sessionMiddleware(config: SessionConfig): MiddlewareHandler;
74
+ /**
75
+ * Session middleware that reads its config from the DI container.
76
+ * Requires session() provider to be registered in bootstrap/providers.ts.
77
+ *
78
+ * Usage in routes:
79
+ * import { SessionMiddleware } from '@boostkit/session'
80
+ * Route.get('/path', handler, [SessionMiddleware()])
81
+ */
82
+ export declare function SessionMiddleware(): MiddlewareHandler;
83
+ /**
84
+ * Returns a SessionServiceProvider class configured for the given session config.
85
+ *
86
+ * Built-in drivers: cookie (signed HMAC — no external deps)
87
+ * redis (requires ioredis: pnpm add ioredis)
88
+ *
89
+ * Usage in bootstrap/providers.ts:
90
+ * import { session } from '@boostkit/session'
91
+ * import configs from '../config/index.js'
92
+ * export default [..., session(configs.session), ...]
93
+ *
94
+ * Usage in bootstrap/app.ts:
95
+ * import { sessionMiddleware } from '@boostkit/session'
96
+ * .withMiddleware((m) => { m.use(sessionMiddleware(configs.session)) })
97
+ */
98
+ export declare function session(config: SessionConfig): new (app: Application) => ServiceProvider;
99
+ export {};
100
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,289 @@
1
+ import { createHmac, randomUUID } from 'node:crypto';
2
+ import { AsyncLocalStorage } from 'node:async_hooks';
3
+ import { ServiceProvider, app } from '@boostkit/core';
4
+ // ─── SessionInstance ───────────────────────────────────────
5
+ export class SessionInstance {
6
+ _data;
7
+ _flash;
8
+ _flashNext;
9
+ _id;
10
+ _driver;
11
+ _config;
12
+ constructor(payload, driver, config) {
13
+ this._id = payload.id;
14
+ this._data = { ...payload.data };
15
+ this._flash = { ...payload.flash_next }; // prev flash_next → current flash
16
+ this._flashNext = {};
17
+ this._driver = driver;
18
+ this._config = config;
19
+ }
20
+ get(key, fallback) {
21
+ return (key in this._data ? this._data[key] : fallback);
22
+ }
23
+ put(key, value) {
24
+ this._data[key] = value;
25
+ }
26
+ forget(key) {
27
+ delete this._data[key];
28
+ }
29
+ flush() {
30
+ this._data = {};
31
+ }
32
+ /** Store a value that will be readable on the *next* request via getFlash(). */
33
+ flash(key, value) {
34
+ this._flashNext[key] = value;
35
+ }
36
+ /** Read a flash value set by the *previous* request. */
37
+ getFlash(key, fallback) {
38
+ return (key in this._flash ? this._flash[key] : fallback);
39
+ }
40
+ has(key) {
41
+ return key in this._data;
42
+ }
43
+ all() {
44
+ return { ...this._data };
45
+ }
46
+ id() {
47
+ return this._id;
48
+ }
49
+ async regenerate() {
50
+ await this._driver.destroy(this._id);
51
+ this._id = randomUUID();
52
+ }
53
+ async save(res) {
54
+ const payload = {
55
+ id: this._id,
56
+ data: this._data,
57
+ flash_next: this._flashNext,
58
+ };
59
+ const ttl = this._config.lifetime * 60;
60
+ const cookieValue = await this._driver.persist(payload, ttl);
61
+ const cookieStr = buildCookieHeader(this._config.cookie.name, cookieValue, this._config);
62
+ res.raw.header('Set-Cookie', cookieStr);
63
+ }
64
+ }
65
+ // ─── AsyncLocalStorage + Session Facade ───────────────────
66
+ const _als = new AsyncLocalStorage();
67
+ export class Session {
68
+ static current() {
69
+ const s = _als.getStore();
70
+ if (!s)
71
+ throw new Error('[BoostKit Session] No session in context. Use sessionMiddleware.');
72
+ return s;
73
+ }
74
+ static get(key, fallback) {
75
+ return this.current().get(key, fallback);
76
+ }
77
+ static put(key, value) {
78
+ this.current().put(key, value);
79
+ }
80
+ static forget(key) {
81
+ this.current().forget(key);
82
+ }
83
+ static flash(key, value) {
84
+ this.current().flash(key, value);
85
+ }
86
+ static getFlash(key, fallback) {
87
+ return this.current().getFlash(key, fallback);
88
+ }
89
+ static has(key) {
90
+ return this.current().has(key);
91
+ }
92
+ static all() {
93
+ return this.current().all();
94
+ }
95
+ static regenerate() {
96
+ return this.current().regenerate();
97
+ }
98
+ }
99
+ // ─── Cookie Driver ─────────────────────────────────────────
100
+ function signPayload(payload, secret) {
101
+ const b64 = Buffer.from(JSON.stringify(payload)).toString('base64url');
102
+ const hmac = createHmac('sha256', secret).update(b64).digest('base64url');
103
+ return `${b64}.${hmac}`;
104
+ }
105
+ function verifyPayload(cookieValue, secret) {
106
+ const dotIdx = cookieValue.lastIndexOf('.');
107
+ if (dotIdx === -1)
108
+ return null;
109
+ const b64 = cookieValue.slice(0, dotIdx);
110
+ const hmac = cookieValue.slice(dotIdx + 1);
111
+ const expected = createHmac('sha256', secret).update(b64).digest('base64url');
112
+ // Constant-time comparison
113
+ if (expected.length !== hmac.length)
114
+ return null;
115
+ let mismatch = 0;
116
+ for (let i = 0; i < expected.length; i++) {
117
+ mismatch |= (expected.codePointAt(i) ?? 0) ^ (hmac.codePointAt(i) ?? 0);
118
+ }
119
+ if (mismatch !== 0)
120
+ return null;
121
+ try {
122
+ return JSON.parse(Buffer.from(b64, 'base64url').toString('utf8'));
123
+ }
124
+ catch {
125
+ return null;
126
+ }
127
+ }
128
+ class CookieDriver {
129
+ secret;
130
+ constructor(secret) {
131
+ this.secret = secret;
132
+ }
133
+ async load(cookieValue) {
134
+ if (!cookieValue)
135
+ return this.empty();
136
+ return verifyPayload(cookieValue, this.secret) ?? this.empty();
137
+ }
138
+ async persist(payload, _ttl) {
139
+ return signPayload(payload, this.secret);
140
+ }
141
+ async destroy(_id) {
142
+ // Cookie driver: nothing to destroy server-side
143
+ }
144
+ empty() {
145
+ return { id: randomUUID(), data: {}, flash_next: {} };
146
+ }
147
+ }
148
+ // ─── Redis Driver ──────────────────────────────────────────
149
+ class RedisDriver {
150
+ config;
151
+ client;
152
+ prefix;
153
+ constructor(config) {
154
+ this.config = config;
155
+ this.prefix = config.prefix ?? 'session:';
156
+ }
157
+ async getClient() {
158
+ if (!this.client) {
159
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
160
+ const { Redis } = await import('ioredis');
161
+ this.client = this.config.url
162
+ ? new Redis(this.config.url)
163
+ : new Redis({
164
+ host: this.config.host ?? '127.0.0.1',
165
+ port: this.config.port ?? 6379,
166
+ password: this.config.password,
167
+ });
168
+ }
169
+ return this.client;
170
+ }
171
+ key(id) { return `${this.prefix}${id}`; }
172
+ async load(cookieValue) {
173
+ if (!cookieValue)
174
+ return this.empty();
175
+ try {
176
+ const client = await this.getClient();
177
+ const raw = await client.get(this.key(cookieValue));
178
+ if (!raw)
179
+ return this.emptyWithId(cookieValue);
180
+ return JSON.parse(raw);
181
+ }
182
+ catch {
183
+ return this.empty();
184
+ }
185
+ }
186
+ async persist(payload, ttl) {
187
+ const client = await this.getClient();
188
+ await client.set(this.key(payload.id), JSON.stringify(payload), 'EX', ttl);
189
+ return payload.id;
190
+ }
191
+ async destroy(id) {
192
+ try {
193
+ const client = await this.getClient();
194
+ await client.del(this.key(id));
195
+ }
196
+ catch {
197
+ // ignore
198
+ }
199
+ }
200
+ empty() {
201
+ return { id: randomUUID(), data: {}, flash_next: {} };
202
+ }
203
+ emptyWithId(id) {
204
+ return { id, data: {}, flash_next: {} };
205
+ }
206
+ }
207
+ // ─── Helpers ───────────────────────────────────────────────
208
+ function parseCookie(header, name) {
209
+ for (const part of header.split(';')) {
210
+ const eqIdx = part.indexOf('=');
211
+ if (eqIdx === -1)
212
+ continue;
213
+ const k = part.slice(0, eqIdx).trim();
214
+ if (k === name)
215
+ return part.slice(eqIdx + 1).trim();
216
+ }
217
+ return undefined;
218
+ }
219
+ function buildCookieHeader(name, value, config) {
220
+ const parts = [
221
+ `${name}=${value}`,
222
+ `Path=${config.cookie.path}`,
223
+ `Max-Age=${config.lifetime * 60}`,
224
+ `SameSite=${config.cookie.sameSite}`,
225
+ ];
226
+ if (config.cookie.httpOnly)
227
+ parts.push('HttpOnly');
228
+ if (config.cookie.secure)
229
+ parts.push('Secure');
230
+ return parts.join('; ');
231
+ }
232
+ function makeDriver(config) {
233
+ if (config.driver === 'redis')
234
+ return new RedisDriver(config.redis ?? {});
235
+ return new CookieDriver(config.secret);
236
+ }
237
+ // ─── Session Middleware ────────────────────────────────────
238
+ export function sessionMiddleware(config) {
239
+ const driver = makeDriver(config);
240
+ return async (req, res, next) => {
241
+ const cookieHeader = req.headers['cookie'] ?? '';
242
+ const cookieValue = parseCookie(cookieHeader, config.cookie.name);
243
+ const payload = await driver.load(cookieValue);
244
+ const session = new SessionInstance(payload, driver, config);
245
+ req.raw['__bk_session'] = session;
246
+ await _als.run(session, next);
247
+ await session.save(res);
248
+ };
249
+ }
250
+ // ─── Zero-config middleware (reads config from DI) ─────────
251
+ /**
252
+ * Session middleware that reads its config from the DI container.
253
+ * Requires session() provider to be registered in bootstrap/providers.ts.
254
+ *
255
+ * Usage in routes:
256
+ * import { SessionMiddleware } from '@boostkit/session'
257
+ * Route.get('/path', handler, [SessionMiddleware()])
258
+ */
259
+ export function SessionMiddleware() {
260
+ const config = app().make('session.config');
261
+ return sessionMiddleware(config);
262
+ }
263
+ // ─── Service Provider Factory ──────────────────────────────
264
+ /**
265
+ * Returns a SessionServiceProvider class configured for the given session config.
266
+ *
267
+ * Built-in drivers: cookie (signed HMAC — no external deps)
268
+ * redis (requires ioredis: pnpm add ioredis)
269
+ *
270
+ * Usage in bootstrap/providers.ts:
271
+ * import { session } from '@boostkit/session'
272
+ * import configs from '../config/index.js'
273
+ * export default [..., session(configs.session), ...]
274
+ *
275
+ * Usage in bootstrap/app.ts:
276
+ * import { sessionMiddleware } from '@boostkit/session'
277
+ * .withMiddleware((m) => { m.use(sessionMiddleware(configs.session)) })
278
+ */
279
+ export function session(config) {
280
+ class SessionServiceProvider extends ServiceProvider {
281
+ register() { }
282
+ boot() {
283
+ this.app.instance('session.config', config);
284
+ console.log(`[SessionServiceProvider] booted — driver: ${config.driver}`);
285
+ }
286
+ }
287
+ return SessionServiceProvider;
288
+ }
289
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@boostkit/session",
3
+ "version": "0.0.2",
4
+ "license": "MIT",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/boostkitjs/boostkit",
8
+ "directory": "packages/session"
9
+ },
10
+ "type": "module",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "import": "./dist/index.js",
19
+ "types": "./dist/index.d.ts"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "@boostkit/contracts": "0.0.2",
24
+ "@boostkit/core": "0.0.4"
25
+ },
26
+ "optionalDependencies": {
27
+ "ioredis": "^5.3.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^20.0.0",
31
+ "typescript": "^5.4.0"
32
+ },
33
+ "scripts": {
34
+ "build": "tsc",
35
+ "dev": "tsc --watch",
36
+ "typecheck": "tsc --noEmit",
37
+ "clean": "rm -rf dist"
38
+ }
39
+ }