@arikajs/session 0.0.5

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.
Files changed (42) hide show
  1. package/README.md +429 -0
  2. package/dist/Contracts/SessionDriver.d.ts +33 -0
  3. package/dist/Contracts/SessionDriver.d.ts.map +1 -0
  4. package/dist/Contracts/SessionDriver.js +3 -0
  5. package/dist/Contracts/SessionDriver.js.map +1 -0
  6. package/dist/CookieSessionId.d.ts +35 -0
  7. package/dist/CookieSessionId.d.ts.map +1 -0
  8. package/dist/CookieSessionId.js +129 -0
  9. package/dist/CookieSessionId.js.map +1 -0
  10. package/dist/Drivers/DatabaseDriver.d.ts +19 -0
  11. package/dist/Drivers/DatabaseDriver.d.ts.map +1 -0
  12. package/dist/Drivers/DatabaseDriver.js +90 -0
  13. package/dist/Drivers/DatabaseDriver.js.map +1 -0
  14. package/dist/Drivers/FileDriver.d.ts +18 -0
  15. package/dist/Drivers/FileDriver.d.ts.map +1 -0
  16. package/dist/Drivers/FileDriver.js +170 -0
  17. package/dist/Drivers/FileDriver.js.map +1 -0
  18. package/dist/Drivers/MemoryDriver.d.ts +16 -0
  19. package/dist/Drivers/MemoryDriver.d.ts.map +1 -0
  20. package/dist/Drivers/MemoryDriver.js +53 -0
  21. package/dist/Drivers/MemoryDriver.js.map +1 -0
  22. package/dist/Drivers/RedisDriver.d.ts +20 -0
  23. package/dist/Drivers/RedisDriver.d.ts.map +1 -0
  24. package/dist/Drivers/RedisDriver.js +54 -0
  25. package/dist/Drivers/RedisDriver.js.map +1 -0
  26. package/dist/Middleware/StartSession.d.ts +19 -0
  27. package/dist/Middleware/StartSession.d.ts.map +1 -0
  28. package/dist/Middleware/StartSession.js +109 -0
  29. package/dist/Middleware/StartSession.js.map +1 -0
  30. package/dist/Session.d.ts +88 -0
  31. package/dist/Session.d.ts.map +1 -0
  32. package/dist/Session.js +232 -0
  33. package/dist/Session.js.map +1 -0
  34. package/dist/SessionManager.d.ts +51 -0
  35. package/dist/SessionManager.d.ts.map +1 -0
  36. package/dist/SessionManager.js +117 -0
  37. package/dist/SessionManager.js.map +1 -0
  38. package/dist/index.d.ts +10 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +20 -0
  41. package/dist/index.js.map +1 -0
  42. package/package.json +47 -0
@@ -0,0 +1,88 @@
1
+ import { SessionDriver } from './Contracts/SessionDriver';
2
+ /**
3
+ * Per-request session instance.
4
+ *
5
+ * Features:
6
+ * - Lazy loading: session data is loaded from the driver only on first access
7
+ * - Write optimization: data is only persisted when it has been modified (dirty)
8
+ * - Flash data: one-request messages automatically cleared after the next request
9
+ * - Session regeneration: generate a new ID to prevent session fixation
10
+ */
11
+ export declare class Session {
12
+ private readonly driver;
13
+ private _sessionId;
14
+ private readonly ttlSeconds;
15
+ private _data;
16
+ private _dirty;
17
+ private _destroyed;
18
+ private _newId;
19
+ constructor(driver: SessionDriver, _sessionId: string, ttlSeconds: number);
20
+ private ensureLoaded;
21
+ /**
22
+ * Get the current session ID.
23
+ */
24
+ getId(): string;
25
+ /**
26
+ * Check if the session has been modified.
27
+ */
28
+ isDirty(): boolean;
29
+ /**
30
+ * Check if the session has been destroyed.
31
+ */
32
+ isDestroyed(): boolean;
33
+ /**
34
+ * Set a value in the session.
35
+ */
36
+ set(key: string, value: any): Promise<void>;
37
+ /**
38
+ * Alias for set() — compatible with the old put() convention.
39
+ */
40
+ put(key: string, value: any): Promise<void>;
41
+ /**
42
+ * Get a value from the session. Returns defaultValue if not found.
43
+ */
44
+ get(key: string, defaultValue?: any): Promise<any>;
45
+ /**
46
+ * Check whether a key exists in the session.
47
+ */
48
+ has(key: string): Promise<boolean>;
49
+ /**
50
+ * Remove a key from the session.
51
+ */
52
+ forget(key: string): Promise<void>;
53
+ /**
54
+ * Return all session data.
55
+ */
56
+ all(): Promise<Record<string, any>>;
57
+ /**
58
+ * Store flash data — only available during the next request.
59
+ */
60
+ flash(key: string, value: any): Promise<void>;
61
+ /**
62
+ * Keep flash keys alive for one more request.
63
+ */
64
+ reflash(...keys: string[]): Promise<void>;
65
+ /**
66
+ * Completely destroy this session (removes from storage).
67
+ */
68
+ destroy(): Promise<void>;
69
+ /**
70
+ * Regenerate the session ID (prevents session fixation).
71
+ * The old session is destroyed and a new ID is created.
72
+ */
73
+ regenerate(): Promise<string>;
74
+ /**
75
+ * Persist session data back to the driver.
76
+ * Only writes if data has changed (write optimization).
77
+ */
78
+ save(): Promise<void>;
79
+ /**
80
+ * On load: remove flash keys from the PREVIOUS request (unless kept).
81
+ */
82
+ private ageFlashData;
83
+ /**
84
+ * On save: move __flash_new__ → __flash__ for the next request.
85
+ */
86
+ private prepareFlashForNextRequest;
87
+ }
88
+ //# sourceMappingURL=Session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D;;;;;;;;GAQG;AACH,qBAAa,OAAO;IAOZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAR/B,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAuB;gBAGhB,MAAM,EAAE,aAAa,EAC9B,UAAU,EAAE,MAAM,EACT,UAAU,EAAE,MAAM;YAOzB,YAAY;IAa1B;;OAEG;IACI,KAAK,IAAI,MAAM;IAItB;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;OAEG;IACI,WAAW,IAAI,OAAO;IAI7B;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAKrE;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/C;;OAEG;IACU,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAKhD;;OAEG;IACU,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D;;OAEG;IACU,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrC;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAa1C;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBlC;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAOrC"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Session = void 0;
37
+ /**
38
+ * Per-request session instance.
39
+ *
40
+ * Features:
41
+ * - Lazy loading: session data is loaded from the driver only on first access
42
+ * - Write optimization: data is only persisted when it has been modified (dirty)
43
+ * - Flash data: one-request messages automatically cleared after the next request
44
+ * - Session regeneration: generate a new ID to prevent session fixation
45
+ */
46
+ class Session {
47
+ constructor(driver, _sessionId, ttlSeconds) {
48
+ this.driver = driver;
49
+ this._sessionId = _sessionId;
50
+ this.ttlSeconds = ttlSeconds;
51
+ this._data = null; // null = not yet loaded
52
+ this._dirty = false;
53
+ this._destroyed = false;
54
+ this._newId = null; // set when regenerated
55
+ }
56
+ // ──────────────────────────────────────────────────────────────────────────
57
+ // Lazy loading
58
+ // ──────────────────────────────────────────────────────────────────────────
59
+ async ensureLoaded() {
60
+ if (this._data === null) {
61
+ const loaded = await this.driver.load(this._sessionId);
62
+ this._data = loaded ?? {};
63
+ // Age out flash data from the previous request
64
+ this.ageFlashData();
65
+ }
66
+ }
67
+ // ──────────────────────────────────────────────────────────────────────────
68
+ // Public API
69
+ // ──────────────────────────────────────────────────────────────────────────
70
+ /**
71
+ * Get the current session ID.
72
+ */
73
+ getId() {
74
+ return this._newId ?? this._sessionId;
75
+ }
76
+ /**
77
+ * Check if the session has been modified.
78
+ */
79
+ isDirty() {
80
+ return this._dirty;
81
+ }
82
+ /**
83
+ * Check if the session has been destroyed.
84
+ */
85
+ isDestroyed() {
86
+ return this._destroyed;
87
+ }
88
+ /**
89
+ * Set a value in the session.
90
+ */
91
+ async set(key, value) {
92
+ await this.ensureLoaded();
93
+ this._data[key] = value;
94
+ this._dirty = true;
95
+ }
96
+ /**
97
+ * Alias for set() — compatible with the old put() convention.
98
+ */
99
+ async put(key, value) {
100
+ return this.set(key, value);
101
+ }
102
+ /**
103
+ * Get a value from the session. Returns defaultValue if not found.
104
+ */
105
+ async get(key, defaultValue = null) {
106
+ await this.ensureLoaded();
107
+ return key in this._data ? this._data[key] : defaultValue;
108
+ }
109
+ /**
110
+ * Check whether a key exists in the session.
111
+ */
112
+ async has(key) {
113
+ await this.ensureLoaded();
114
+ return key in this._data;
115
+ }
116
+ /**
117
+ * Remove a key from the session.
118
+ */
119
+ async forget(key) {
120
+ await this.ensureLoaded();
121
+ if (key in this._data) {
122
+ delete this._data[key];
123
+ this._dirty = true;
124
+ }
125
+ }
126
+ /**
127
+ * Return all session data.
128
+ */
129
+ async all() {
130
+ await this.ensureLoaded();
131
+ return { ...this._data };
132
+ }
133
+ /**
134
+ * Store flash data — only available during the next request.
135
+ */
136
+ async flash(key, value) {
137
+ await this.ensureLoaded();
138
+ this._data[key] = value;
139
+ // Track which keys are flash so we can purge them
140
+ const flashKeys = this._data['__flash__'] ?? [];
141
+ if (!flashKeys.includes(key))
142
+ flashKeys.push(key);
143
+ this._data['__flash__'] = flashKeys;
144
+ this._dirty = true;
145
+ }
146
+ /**
147
+ * Keep flash keys alive for one more request.
148
+ */
149
+ async reflash(...keys) {
150
+ await this.ensureLoaded();
151
+ const flashKeys = this._data['__flash__'] ?? [];
152
+ const keepKeys = this._data['__flash_keep__'] ?? [];
153
+ const targets = keys.length > 0 ? keys : flashKeys;
154
+ for (const k of targets) {
155
+ if (!keepKeys.includes(k))
156
+ keepKeys.push(k);
157
+ }
158
+ this._data['__flash_keep__'] = keepKeys;
159
+ this._dirty = true;
160
+ }
161
+ /**
162
+ * Completely destroy this session (removes from storage).
163
+ */
164
+ async destroy() {
165
+ await this.driver.destroy(this._sessionId);
166
+ this._data = {};
167
+ this._dirty = false;
168
+ this._destroyed = true;
169
+ }
170
+ /**
171
+ * Regenerate the session ID (prevents session fixation).
172
+ * The old session is destroyed and a new ID is created.
173
+ */
174
+ async regenerate() {
175
+ await this.ensureLoaded();
176
+ await this.driver.destroy(this._sessionId);
177
+ const crypto = await Promise.resolve().then(() => __importStar(require('node:crypto')));
178
+ this._newId = crypto.randomBytes(20).toString('hex');
179
+ this._dirty = true;
180
+ return this._newId;
181
+ }
182
+ // ──────────────────────────────────────────────────────────────────────────
183
+ // Lifecycle (called by StartSession middleware)
184
+ // ──────────────────────────────────────────────────────────────────────────
185
+ /**
186
+ * Persist session data back to the driver.
187
+ * Only writes if data has changed (write optimization).
188
+ */
189
+ async save() {
190
+ if (this._destroyed)
191
+ return;
192
+ if (this._data === null)
193
+ return; // never accessed, skip write
194
+ // Promote next-request flash keys
195
+ this.prepareFlashForNextRequest();
196
+ if (this._dirty) {
197
+ const id = this._newId ?? this._sessionId;
198
+ await this.driver.save(id, this._data, this.ttlSeconds);
199
+ }
200
+ }
201
+ // ──────────────────────────────────────────────────────────────────────────
202
+ // Flash internals
203
+ // ──────────────────────────────────────────────────────────────────────────
204
+ /**
205
+ * On load: remove flash keys from the PREVIOUS request (unless kept).
206
+ */
207
+ ageFlashData() {
208
+ const flashKeys = this._data['__flash__'] ?? [];
209
+ const keepKeys = this._data['__flash_keep__'] ?? [];
210
+ for (const key of flashKeys) {
211
+ if (!keepKeys.includes(key)) {
212
+ delete this._data[key];
213
+ }
214
+ }
215
+ // Reset tracking
216
+ this._data['__flash__'] = [];
217
+ this._data['__flash_keep__'] = [];
218
+ }
219
+ /**
220
+ * On save: move __flash_new__ → __flash__ for the next request.
221
+ */
222
+ prepareFlashForNextRequest() {
223
+ if (!this._data)
224
+ return;
225
+ const newFlash = this._data['__flash_new__'] ?? [];
226
+ const existing = this._data['__flash__'] ?? [];
227
+ this._data['__flash__'] = [...new Set([...existing, ...newFlash])];
228
+ delete this._data['__flash_new__'];
229
+ }
230
+ }
231
+ exports.Session = Session;
232
+ //# sourceMappingURL=Session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { SessionDriver } from './Contracts/SessionDriver';
2
+ import { Session } from './Session';
3
+ import { CookieSessionId } from './CookieSessionId';
4
+ export interface SessionConfig {
5
+ driver: string;
6
+ lifetime: number;
7
+ cookie: string;
8
+ path: string;
9
+ storagePath: string;
10
+ secure: boolean;
11
+ httpOnly: boolean;
12
+ sameSite: string;
13
+ locking: boolean;
14
+ lockTimeout: number;
15
+ gcProbability: number;
16
+ secret: string;
17
+ connection?: any;
18
+ table?: string;
19
+ prefix?: string;
20
+ }
21
+ /**
22
+ * SessionManager creates and manages session instances backed by configurable drivers.
23
+ */
24
+ export declare class SessionManager {
25
+ private readonly config;
26
+ private customCreators;
27
+ private driverInstances;
28
+ constructor(config: SessionConfig);
29
+ /**
30
+ * Resolve a driver instance (cached per driver name).
31
+ */
32
+ driver(name?: string): SessionDriver;
33
+ /**
34
+ * Create a new Session instance for the given raw session ID (from cookie).
35
+ */
36
+ createSession(sessionId: string): Session;
37
+ /**
38
+ * The CookieSessionId helper for reading/writing session cookies.
39
+ */
40
+ getCookieHelper(): CookieSessionId;
41
+ /**
42
+ * Register a custom driver factory.
43
+ */
44
+ extend(driverName: string, factory: (config: SessionConfig) => SessionDriver): this;
45
+ private createDriver;
46
+ private createMemoryDriver;
47
+ private createFileDriver;
48
+ private createRedisDriver;
49
+ private createDatabaseDriver;
50
+ }
51
+ //# sourceMappingURL=SessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../src/SessionManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,cAAc;IAIX,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,cAAc,CAAoE;IAC1F,OAAO,CAAC,eAAe,CAAyC;gBAEnC,MAAM,EAAE,aAAa;IAElD;;OAEG;IACI,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa;IAU3C;;OAEG;IACI,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQhD;;OAEG;IACI,eAAe,IAAI,eAAe;IAIzC;;OAEG;IACI,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,GAAG,IAAI;IAK1F,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,oBAAoB;CAM/B"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SessionManager = void 0;
37
+ const path = __importStar(require("node:path"));
38
+ const MemoryDriver_1 = require("./Drivers/MemoryDriver");
39
+ const FileDriver_1 = require("./Drivers/FileDriver");
40
+ const RedisDriver_1 = require("./Drivers/RedisDriver");
41
+ const DatabaseDriver_1 = require("./Drivers/DatabaseDriver");
42
+ const Session_1 = require("./Session");
43
+ const CookieSessionId_1 = require("./CookieSessionId");
44
+ /**
45
+ * SessionManager creates and manages session instances backed by configurable drivers.
46
+ */
47
+ class SessionManager {
48
+ constructor(config) {
49
+ this.config = config;
50
+ this.customCreators = new Map();
51
+ this.driverInstances = new Map();
52
+ }
53
+ /**
54
+ * Resolve a driver instance (cached per driver name).
55
+ */
56
+ driver(name) {
57
+ const driverName = name ?? this.config.driver;
58
+ if (!this.driverInstances.has(driverName)) {
59
+ this.driverInstances.set(driverName, this.createDriver(driverName));
60
+ }
61
+ return this.driverInstances.get(driverName);
62
+ }
63
+ /**
64
+ * Create a new Session instance for the given raw session ID (from cookie).
65
+ */
66
+ createSession(sessionId) {
67
+ return new Session_1.Session(this.driver(), sessionId, this.config.lifetime * 60);
68
+ }
69
+ /**
70
+ * The CookieSessionId helper for reading/writing session cookies.
71
+ */
72
+ getCookieHelper() {
73
+ return new CookieSessionId_1.CookieSessionId(this.config.cookie, this.config.secret);
74
+ }
75
+ /**
76
+ * Register a custom driver factory.
77
+ */
78
+ extend(driverName, factory) {
79
+ this.customCreators.set(driverName, factory);
80
+ return this;
81
+ }
82
+ createDriver(name) {
83
+ if (this.customCreators.has(name)) {
84
+ return this.customCreators.get(name)(this.config);
85
+ }
86
+ switch (name) {
87
+ case 'memory': return this.createMemoryDriver();
88
+ case 'file': return this.createFileDriver();
89
+ case 'redis': return this.createRedisDriver();
90
+ case 'database': return this.createDatabaseDriver();
91
+ default:
92
+ throw new Error(`Session driver [${name}] is not supported.`);
93
+ }
94
+ }
95
+ createMemoryDriver() {
96
+ return new MemoryDriver_1.MemoryDriver();
97
+ }
98
+ createFileDriver() {
99
+ const p = this.config.storagePath;
100
+ const absPath = path.isAbsolute(p) ? p : path.resolve(process.cwd(), p);
101
+ return new FileDriver_1.FileDriver(absPath);
102
+ }
103
+ createRedisDriver() {
104
+ if (!this.config.connection) {
105
+ throw new Error('Redis connection is required for the [redis] session driver.');
106
+ }
107
+ return new RedisDriver_1.RedisDriver(this.config.connection, this.config.prefix ?? 'arika_session:');
108
+ }
109
+ createDatabaseDriver() {
110
+ if (!this.config.connection) {
111
+ throw new Error('Database connection is required for the [database] session driver.');
112
+ }
113
+ return new DatabaseDriver_1.DatabaseDriver(this.config.connection, this.config.table ?? 'sessions');
114
+ }
115
+ }
116
+ exports.SessionManager = SessionManager;
117
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../src/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { Session } from './Session';
2
+ export { SessionManager } from './SessionManager';
3
+ export { CookieSessionId } from './CookieSessionId';
4
+ export { StartSession } from './Middleware/StartSession';
5
+ export { SessionDriver } from './Contracts/SessionDriver';
6
+ export { MemoryDriver } from './Drivers/MemoryDriver';
7
+ export { FileDriver } from './Drivers/FileDriver';
8
+ export { RedisDriver } from './Drivers/RedisDriver';
9
+ export { DatabaseDriver } from './Drivers/DatabaseDriver';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatabaseDriver = exports.RedisDriver = exports.FileDriver = exports.MemoryDriver = exports.StartSession = exports.CookieSessionId = exports.SessionManager = exports.Session = void 0;
4
+ var Session_1 = require("./Session");
5
+ Object.defineProperty(exports, "Session", { enumerable: true, get: function () { return Session_1.Session; } });
6
+ var SessionManager_1 = require("./SessionManager");
7
+ Object.defineProperty(exports, "SessionManager", { enumerable: true, get: function () { return SessionManager_1.SessionManager; } });
8
+ var CookieSessionId_1 = require("./CookieSessionId");
9
+ Object.defineProperty(exports, "CookieSessionId", { enumerable: true, get: function () { return CookieSessionId_1.CookieSessionId; } });
10
+ var StartSession_1 = require("./Middleware/StartSession");
11
+ Object.defineProperty(exports, "StartSession", { enumerable: true, get: function () { return StartSession_1.StartSession; } });
12
+ var MemoryDriver_1 = require("./Drivers/MemoryDriver");
13
+ Object.defineProperty(exports, "MemoryDriver", { enumerable: true, get: function () { return MemoryDriver_1.MemoryDriver; } });
14
+ var FileDriver_1 = require("./Drivers/FileDriver");
15
+ Object.defineProperty(exports, "FileDriver", { enumerable: true, get: function () { return FileDriver_1.FileDriver; } });
16
+ var RedisDriver_1 = require("./Drivers/RedisDriver");
17
+ Object.defineProperty(exports, "RedisDriver", { enumerable: true, get: function () { return RedisDriver_1.RedisDriver; } });
18
+ var DatabaseDriver_1 = require("./Drivers/DatabaseDriver");
19
+ Object.defineProperty(exports, "DatabaseDriver", { enumerable: true, get: function () { return DatabaseDriver_1.DatabaseDriver; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,0DAAyD;AAAhD,4GAAA,YAAY,OAAA;AAErB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,mDAAkD;AAAzC,wGAAA,UAAU,OAAA;AACnB,qDAAoD;AAA3C,0GAAA,WAAW,OAAA;AACpB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@arikajs/session",
3
+ "version": "0.0.5",
4
+ "description": "Powerful, secure, driver-based session management for the ArikaJS framework.",
5
+ "license": "MIT",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc -p tsconfig.json",
10
+ "clean": "rm -rf dist",
11
+ "prepare": "echo skip",
12
+ "dev": "tsc -p tsconfig.json --watch"
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "keywords": [
18
+ "arika",
19
+ "arika-js",
20
+ "session",
21
+ "middleware",
22
+ "cookies",
23
+ "web"
24
+ ],
25
+ "engines": {
26
+ "node": ">=20.0.0"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/ArikaJs/arikajs.git",
31
+ "directory": "packages/session"
32
+ },
33
+ "bugs": {
34
+ "url": "https://github.com/ArikaJs/arikajs/issues"
35
+ },
36
+ "homepage": "https://github.com/ArikaJs/arikajs/tree/main/packages/session#readme",
37
+ "dependencies": {
38
+ "cookie": "^0.6.0",
39
+ "ioredis": "^5.3.2"
40
+ },
41
+ "devDependencies": {
42
+ "@types/cookie": "^0.6.0",
43
+ "@types/node": "^20.11.24",
44
+ "typescript": "^5.3.3"
45
+ },
46
+ "author": "Prakash Tank"
47
+ }