@c9up/ream 0.1.32 → 0.1.33

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 (188) hide show
  1. package/dist/Application.d.ts +27 -0
  2. package/dist/Application.d.ts.map +1 -1
  3. package/dist/Application.js +29 -0
  4. package/dist/Application.js.map +1 -1
  5. package/dist/ErrorBoundary.d.ts.map +1 -1
  6. package/dist/ErrorBoundary.js +13 -1
  7. package/dist/ErrorBoundary.js.map +1 -1
  8. package/dist/HttpKernel.d.ts +8 -0
  9. package/dist/HttpKernel.d.ts.map +1 -1
  10. package/dist/HttpKernel.js +35 -12
  11. package/dist/HttpKernel.js.map +1 -1
  12. package/dist/Ignitor.d.ts +8 -0
  13. package/dist/Ignitor.d.ts.map +1 -1
  14. package/dist/Ignitor.js +39 -0
  15. package/dist/Ignitor.js.map +1 -1
  16. package/dist/bodyparser/BodyParserMiddleware.d.ts +11 -4
  17. package/dist/bodyparser/BodyParserMiddleware.d.ts.map +1 -1
  18. package/dist/bodyparser/BodyParserMiddleware.js +55 -43
  19. package/dist/bodyparser/BodyParserMiddleware.js.map +1 -1
  20. package/dist/bodyparser/qsParse.d.ts +52 -0
  21. package/dist/bodyparser/qsParse.d.ts.map +1 -0
  22. package/dist/bodyparser/qsParse.js +161 -0
  23. package/dist/bodyparser/qsParse.js.map +1 -0
  24. package/dist/bootstrap/hyper-server.d.ts.map +1 -1
  25. package/dist/bootstrap/hyper-server.js +2 -8
  26. package/dist/bootstrap/hyper-server.js.map +1 -1
  27. package/dist/container/Container.d.ts +41 -0
  28. package/dist/container/Container.d.ts.map +1 -1
  29. package/dist/container/Container.js +193 -26
  30. package/dist/container/Container.js.map +1 -1
  31. package/dist/container/ContainerResolver.d.ts +46 -0
  32. package/dist/container/ContainerResolver.d.ts.map +1 -0
  33. package/dist/container/ContainerResolver.js +60 -0
  34. package/dist/container/ContainerResolver.js.map +1 -0
  35. package/dist/container/ContextualBindingsBuilder.d.ts +20 -0
  36. package/dist/container/ContextualBindingsBuilder.d.ts.map +1 -0
  37. package/dist/container/ContextualBindingsBuilder.js +31 -0
  38. package/dist/container/ContextualBindingsBuilder.js.map +1 -0
  39. package/dist/container/types.d.ts +9 -6
  40. package/dist/container/types.d.ts.map +1 -1
  41. package/dist/decorators/Service.d.ts +1 -5
  42. package/dist/decorators/Service.d.ts.map +1 -1
  43. package/dist/decorators/Service.js +10 -1
  44. package/dist/decorators/Service.js.map +1 -1
  45. package/dist/events/Emitter.d.ts +66 -6
  46. package/dist/events/Emitter.d.ts.map +1 -1
  47. package/dist/events/Emitter.js +165 -28
  48. package/dist/events/Emitter.js.map +1 -1
  49. package/dist/graphql/GraphQLEngine.d.ts.map +1 -1
  50. package/dist/graphql/GraphQLEngine.js +5 -5
  51. package/dist/graphql/GraphQLEngine.js.map +1 -1
  52. package/dist/helpers/duration.d.ts +32 -0
  53. package/dist/helpers/duration.d.ts.map +1 -0
  54. package/dist/helpers/duration.js +74 -0
  55. package/dist/helpers/duration.js.map +1 -0
  56. package/dist/helpers/napi-loader.d.ts +10 -1
  57. package/dist/helpers/napi-loader.d.ts.map +1 -1
  58. package/dist/helpers/napi-loader.js +18 -3
  59. package/dist/helpers/napi-loader.js.map +1 -1
  60. package/dist/helpers/types.d.ts +1 -1
  61. package/dist/helpers/types.d.ts.map +1 -1
  62. package/dist/http/Exception.d.ts.map +1 -1
  63. package/dist/http/Exception.js +17 -5
  64. package/dist/http/Exception.js.map +1 -1
  65. package/dist/http/HttpContext.d.ts +16 -5
  66. package/dist/http/HttpContext.d.ts.map +1 -1
  67. package/dist/http/HttpContext.js +4 -2
  68. package/dist/http/HttpContext.js.map +1 -1
  69. package/dist/http/RedirectBuilder.d.ts +48 -2
  70. package/dist/http/RedirectBuilder.d.ts.map +1 -1
  71. package/dist/http/RedirectBuilder.js +95 -14
  72. package/dist/http/RedirectBuilder.js.map +1 -1
  73. package/dist/http/Request.d.ts +128 -8
  74. package/dist/http/Request.d.ts.map +1 -1
  75. package/dist/http/Request.js +259 -8
  76. package/dist/http/Request.js.map +1 -1
  77. package/dist/http/Response.d.ts +74 -3
  78. package/dist/http/Response.d.ts.map +1 -1
  79. package/dist/http/Response.js +177 -4
  80. package/dist/http/Response.js.map +1 -1
  81. package/dist/index.d.ts +9 -3
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +5 -1
  84. package/dist/index.js.map +1 -1
  85. package/dist/router/Router.d.ts +36 -7
  86. package/dist/router/Router.d.ts.map +1 -1
  87. package/dist/router/Router.js +66 -22
  88. package/dist/router/Router.js.map +1 -1
  89. package/dist/security/CookieSigner.d.ts +35 -4
  90. package/dist/security/CookieSigner.d.ts.map +1 -1
  91. package/dist/security/CookieSigner.js +99 -10
  92. package/dist/security/CookieSigner.js.map +1 -1
  93. package/dist/server/Server.d.ts +2 -3
  94. package/dist/server/Server.d.ts.map +1 -1
  95. package/dist/server/Server.js +30 -13
  96. package/dist/server/Server.js.map +1 -1
  97. package/dist/session/ReadOnlyValuesStore.d.ts +24 -0
  98. package/dist/session/ReadOnlyValuesStore.d.ts.map +1 -0
  99. package/dist/session/ReadOnlyValuesStore.js +45 -0
  100. package/dist/session/ReadOnlyValuesStore.js.map +1 -0
  101. package/dist/session/Session.d.ts +181 -9
  102. package/dist/session/Session.d.ts.map +1 -1
  103. package/dist/session/Session.js +284 -33
  104. package/dist/session/Session.js.map +1 -1
  105. package/dist/session/SessionMiddleware.d.ts.map +1 -1
  106. package/dist/session/SessionMiddleware.js +87 -33
  107. package/dist/session/SessionMiddleware.js.map +1 -1
  108. package/dist/session/drivers/DatabaseDriver.d.ts +66 -0
  109. package/dist/session/drivers/DatabaseDriver.d.ts.map +1 -0
  110. package/dist/session/drivers/DatabaseDriver.js +132 -0
  111. package/dist/session/drivers/DatabaseDriver.js.map +1 -0
  112. package/dist/session/drivers/FileDriver.d.ts +22 -0
  113. package/dist/session/drivers/FileDriver.d.ts.map +1 -0
  114. package/dist/session/drivers/FileDriver.js +66 -0
  115. package/dist/session/drivers/FileDriver.js.map +1 -0
  116. package/dist/session/drivers/MemoryDriver.d.ts +10 -2
  117. package/dist/session/drivers/MemoryDriver.d.ts.map +1 -1
  118. package/dist/session/drivers/MemoryDriver.js +70 -0
  119. package/dist/session/drivers/MemoryDriver.js.map +1 -1
  120. package/dist/session/drivers/RedisDriver.d.ts +10 -2
  121. package/dist/session/drivers/RedisDriver.d.ts.map +1 -1
  122. package/dist/session/drivers/RedisDriver.js +58 -0
  123. package/dist/session/drivers/RedisDriver.js.map +1 -1
  124. package/dist/session/templateTags.d.ts +42 -0
  125. package/dist/session/templateTags.d.ts.map +1 -0
  126. package/dist/session/templateTags.js +101 -0
  127. package/dist/session/templateTags.js.map +1 -0
  128. package/dist/testing/RequestBuilder.d.ts +38 -1
  129. package/dist/testing/RequestBuilder.d.ts.map +1 -1
  130. package/dist/testing/RequestBuilder.js +40 -1
  131. package/dist/testing/RequestBuilder.js.map +1 -1
  132. package/dist/testing/TestClient.d.ts +3 -1
  133. package/dist/testing/TestClient.d.ts.map +1 -1
  134. package/dist/testing/TestClient.js +3 -1
  135. package/dist/testing/TestClient.js.map +1 -1
  136. package/dist/types/helpers.d.ts +1 -1
  137. package/dist/types/helpers.d.ts.map +1 -1
  138. package/dist/utils/Macroable.d.ts +14 -5
  139. package/dist/utils/Macroable.d.ts.map +1 -1
  140. package/dist/utils/Macroable.js +20 -18
  141. package/dist/utils/Macroable.js.map +1 -1
  142. package/events.win32-x64-msvc.node +0 -0
  143. package/index.win32-x64-msvc.node +0 -0
  144. package/package.json +1 -1
  145. package/scheduler.win32-x64-msvc.node +0 -0
  146. package/src/Application.ts +39 -0
  147. package/src/ErrorBoundary.ts +13 -1
  148. package/src/HttpKernel.ts +45 -19
  149. package/src/Ignitor.ts +39 -0
  150. package/src/bodyparser/BodyParserMiddleware.ts +66 -44
  151. package/src/bodyparser/qsParse.ts +179 -0
  152. package/src/bootstrap/hyper-server.ts +2 -9
  153. package/src/container/Container.ts +265 -25
  154. package/src/container/ContainerResolver.ts +84 -0
  155. package/src/container/ContextualBindingsBuilder.ts +41 -0
  156. package/src/container/types.ts +11 -7
  157. package/src/decorators/Service.ts +16 -3
  158. package/src/events/Emitter.ts +200 -25
  159. package/src/graphql/GraphQLEngine.ts +7 -8
  160. package/src/helpers/duration.ts +71 -0
  161. package/src/helpers/napi-loader.ts +19 -3
  162. package/src/helpers/types.ts +4 -1
  163. package/src/http/Exception.ts +17 -5
  164. package/src/http/HttpContext.ts +20 -5
  165. package/src/http/RedirectBuilder.ts +126 -11
  166. package/src/http/Request.ts +283 -13
  167. package/src/http/Response.ts +213 -6
  168. package/src/index.ts +17 -3
  169. package/src/router/Router.ts +98 -33
  170. package/src/security/CookieSigner.ts +102 -10
  171. package/src/server/Server.ts +36 -16
  172. package/src/session/ReadOnlyValuesStore.ts +52 -0
  173. package/src/session/Session.ts +364 -37
  174. package/src/session/SessionMiddleware.ts +93 -30
  175. package/src/session/drivers/DatabaseDriver.ts +184 -0
  176. package/src/session/drivers/FileDriver.ts +82 -0
  177. package/src/session/drivers/MemoryDriver.ts +75 -2
  178. package/src/session/drivers/RedisDriver.ts +77 -2
  179. package/src/session/templateTags.ts +124 -0
  180. package/src/testing/RequestBuilder.ts +76 -0
  181. package/src/testing/TestClient.ts +10 -2
  182. package/src/types/helpers.ts +4 -1
  183. package/src/utils/Macroable.ts +23 -8
  184. package/dist/utils/inflect.d.ts +0 -17
  185. package/dist/utils/inflect.d.ts.map +0 -1
  186. package/dist/utils/inflect.js +0 -32
  187. package/dist/utils/inflect.js.map +0 -1
  188. package/src/utils/inflect.ts +0 -29
@@ -9,6 +9,17 @@
9
9
  *
10
10
  * Backed by pluggable drivers (cookie, memory, redis).
11
11
  */
12
+ /** Whether a driver carries the tagging half of the contract. */
13
+ export function supportsTagging(driver) {
14
+ return ('tag' in driver &&
15
+ typeof driver.tag === 'function' &&
16
+ 'tagged' in driver &&
17
+ typeof driver.tagged === 'function');
18
+ }
19
+ /** Where `flashAll` / `flashOnly` / `flashExcept` put the request input. */
20
+ const FLASH_INPUT_KEY = 'input';
21
+ /** Where the intended URL is stored, out of the way of app keys. */
22
+ const INTENDED_URL_KEY = '__intended_url';
12
23
  /**
13
24
  * Generate a fresh session ID. Format mirrors AdonisJS / express-session —
14
25
  * 32 bytes of base64url entropy (~256 bits). Defined here so `regenerate()`
@@ -25,11 +36,17 @@ function generateSessionId() {
25
36
  }
26
37
  return btoa(str).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
27
38
  }
39
+ /** A non-null, non-array object — the shape flash data must have to be keyed. */
40
+ function isPlainRecord(value) {
41
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
42
+ }
28
43
  export class Session {
29
44
  #data = {};
30
45
  #flashData = {};
31
46
  #previousFlash = {};
32
47
  #dirty = false;
48
+ /** Reads the request's original input; absent outside a request. */
49
+ #readInput;
33
50
  #sessionId;
34
51
  /**
35
52
  * The session id active when the request arrived, captured at construction.
@@ -39,16 +56,30 @@ export class Session {
39
56
  */
40
57
  #originalSessionId;
41
58
  #regenerated = false;
59
+ /** Whether this session was created for THIS request (no incoming cookie). */
60
+ #fresh = false;
61
+ /** The store behind it, when there is one — absent for a bare unit-test session. */
62
+ #driver;
63
+ /** Session lifetime in seconds, used by {@link commit}. */
64
+ #ttl = 0;
65
+ /** Whether {@link initiate} already ran, so a second call is a no-op. */
66
+ #initiated = false;
42
67
  constructor(sessionId, data = {}) {
43
68
  this.#sessionId = sessionId;
44
69
  this.#originalSessionId = sessionId;
70
+ this.#hydrate(data);
71
+ }
72
+ /**
73
+ * Seat stored data: the payload becomes the session, and the flash bag it
74
+ * carried becomes THIS request's `old()` / `flashMessages`.
75
+ *
76
+ * Shared by the constructor and {@link initiate}, so a session loaded from
77
+ * the store lands in exactly the same state as one handed its data directly.
78
+ */
79
+ #hydrate(data) {
45
80
  this.#data = { ...data };
46
81
  const flash = data.__flash;
47
- this.#previousFlash =
48
- typeof flash === 'object' && flash !== null && !Array.isArray(flash)
49
- ? // biome-ignore lint/suspicious/noExplicitAny: flash narrowed to non-null non-array object; branded as Record for key access
50
- flash
51
- : {};
82
+ this.#previousFlash = isPlainRecord(flash) ? { ...flash } : {};
52
83
  delete this.#data.__flash;
53
84
  }
54
85
  /** Current session id. Mutated by `regenerate()`. */
@@ -82,11 +113,11 @@ export class Session {
82
113
  }
83
114
  /** Get a session value. */
84
115
  get(key, defaultValue) {
85
- if (key in this.#data) {
86
- // biome-ignore lint/suspicious/noExplicitAny: session data stored as unknown; caller brands the value type via T
116
+ // The store is untyped by nature, so `T` is the CALLER's claim about what
117
+ // it put there — one assertion from `unknown`, which is what `T` means
118
+ // here. Going through `any` first widened nothing and hid the intent.
119
+ if (key in this.#data)
87
120
  return this.#data[key];
88
- }
89
- // biome-ignore lint/suspicious/noExplicitAny: generic default — caller brands the value type via T
90
121
  return defaultValue;
91
122
  }
92
123
  /** Set a session value. */
@@ -128,34 +159,141 @@ export class Session {
128
159
  this.increment(key, -amount);
129
160
  }
130
161
  // ─── Flash data ───────────────────────────────────────────
131
- /** Set flash data (available only on the next request). */
162
+ /**
163
+ * @internal Give the session read access to the request's ORIGINAL input.
164
+ *
165
+ * AdonisJS's session holds the HTTP context and reads `request.original()`;
166
+ * ream's Session stays free of it, so the middleware injects a reader. Absent
167
+ * (a session built outside a request), the input-flashing methods flash
168
+ * nothing rather than throwing.
169
+ */
170
+ setInputReader(read) {
171
+ this.#readInput = read;
172
+ }
173
+ /** The request's original input, or nothing when there is no request. */
174
+ #input() {
175
+ return this.#readInput?.() ?? {};
176
+ }
177
+ /**
178
+ * Set flash data, available only on the next request.
179
+ *
180
+ * Takes a key and a value, or an object of both (AdonisJS accepts either).
181
+ */
132
182
  flash(key, value) {
133
- this.#flashData[key] = value;
183
+ if (typeof key === 'string')
184
+ this.#flashData[key] = value;
185
+ else
186
+ Object.assign(this.#flashData, key);
134
187
  this.#dirty = true;
135
188
  }
136
- /** Flash all current input. */
137
- flashAll(input) {
138
- for (const [k, v] of Object.entries(input)) {
139
- this.#flashData[k] = v;
189
+ /**
190
+ * Flash the whole request input for the next request (AdonisJS `flashAll`).
191
+ *
192
+ * Takes NO argument: it reads the request's original input itself, which is
193
+ * what makes `session.flashAll()` before a redirect-back repopulate a form.
194
+ */
195
+ flashAll() {
196
+ this.flash(FLASH_INPUT_KEY, this.#input());
197
+ }
198
+ /** Flash only these input keys (AdonisJS `flashOnly`). */
199
+ flashOnly(keys) {
200
+ const input = this.#input();
201
+ const picked = {};
202
+ for (const key of keys) {
203
+ if (Object.hasOwn(input, key))
204
+ picked[key] = input[key];
140
205
  }
141
- this.#dirty = true;
206
+ this.flash(FLASH_INPUT_KEY, picked);
142
207
  }
143
- /** Flash only specific keys. */
144
- flashOnly(input, keys) {
145
- for (const k of keys) {
146
- if (k in input)
147
- this.#flashData[k] = input[k];
208
+ /**
209
+ * Flash the request input except these keys (AdonisJS `flashExcept`).
210
+ *
211
+ * session.flashExcept(['password', '_csrf'])
212
+ */
213
+ flashExcept(keys) {
214
+ const omit = new Set(keys);
215
+ const kept = {};
216
+ for (const [key, value] of Object.entries(this.#input())) {
217
+ if (!omit.has(key))
218
+ kept[key] = value;
148
219
  }
149
- this.#dirty = true;
220
+ this.flash(FLASH_INPUT_KEY, kept);
221
+ }
222
+ /**
223
+ * Flash an error collection under `errorsBag` (AdonisJS `flashErrors`) —
224
+ * where the `@error` / `@errors` template tags read from.
225
+ */
226
+ flashErrors(errors) {
227
+ this.flash({ errorsBag: errors });
150
228
  }
151
- /** Flash all except specific keys. */
152
- flashExcept(input, keys) {
153
- const keySet = new Set(keys);
154
- for (const [k, v] of Object.entries(input)) {
155
- if (!keySet.has(k))
156
- this.#flashData[k] = v;
229
+ /**
230
+ * Flash a validation failure the way a form expects it (AdonisJS
231
+ * `flashValidationErrors`): the per-field messages under `inputErrorsBag`,
232
+ * a summary under `errorsBag`, and — unless told otherwise — the input, so
233
+ * the redisplayed form keeps what the user typed.
234
+ */
235
+ flashValidationErrors(error, withInput = true) {
236
+ const bag = {};
237
+ for (const message of error.messages ?? []) {
238
+ if (message.field === undefined || message.message === undefined)
239
+ continue;
240
+ const existing = bag[message.field] ?? [];
241
+ existing.push(message.message);
242
+ bag[message.field] = existing;
157
243
  }
158
- this.#dirty = true;
244
+ this.flash('inputErrorsBag', bag);
245
+ this.flashErrors({
246
+ [error.code ?? 'E_VALIDATION_ERROR']: Object.values(bag).flat(),
247
+ });
248
+ if (withInput)
249
+ this.flashAll();
250
+ }
251
+ /**
252
+ * Keep the PREVIOUS request's flash data for one more request (AdonisJS
253
+ * `reflash`) — what a redirect chain needs so a message survives the hop.
254
+ */
255
+ reflash() {
256
+ this.flash(this.#previousFlash);
257
+ }
258
+ /** Keep only these keys of the previous flash data (AdonisJS `reflashOnly`). */
259
+ reflashOnly(keys) {
260
+ for (const key of keys) {
261
+ if (Object.hasOwn(this.#previousFlash, key)) {
262
+ this.flash(key, this.#previousFlash[key]);
263
+ }
264
+ }
265
+ }
266
+ /** Keep the previous flash data except these keys (AdonisJS `reflashExcept`). */
267
+ reflashExcept(keys) {
268
+ const omit = new Set(keys);
269
+ for (const [key, value] of Object.entries(this.#previousFlash)) {
270
+ if (!omit.has(key))
271
+ this.flash(key, value);
272
+ }
273
+ }
274
+ // ─── Intended URL ─────────────────────────────────────────
275
+ /**
276
+ * Remember where the user was heading (AdonisJS `setIntendedUrl`).
277
+ *
278
+ * An auth middleware stores it before redirecting to the login page, so the
279
+ * user lands back on the page they asked for instead of a generic dashboard.
280
+ */
281
+ setIntendedUrl(url) {
282
+ this.put(INTENDED_URL_KEY, url);
283
+ }
284
+ /** The remembered URL, or null. */
285
+ getIntendedUrl() {
286
+ const url = this.get(INTENDED_URL_KEY);
287
+ return typeof url === 'string' ? url : null;
288
+ }
289
+ /** Read it and forget it — the usual call right after a successful login. */
290
+ pullIntendedUrl() {
291
+ const url = this.getIntendedUrl();
292
+ this.clearIntendedUrl();
293
+ return url;
294
+ }
295
+ clearIntendedUrl() {
296
+ this.forget(INTENDED_URL_KEY);
159
297
  }
160
298
  /** Get a flashed value from the previous request. */
161
299
  flashMessages() {
@@ -163,11 +301,10 @@ export class Session {
163
301
  }
164
302
  /** Get a specific flash message from the previous request. */
165
303
  old(key, defaultValue) {
166
- if (key in this.#previousFlash) {
167
- // biome-ignore lint/suspicious/noExplicitAny: flash data stored as unknown; caller brands the value type via T
304
+ // Same contract as `get`: `T` is the caller's claim about a store that is
305
+ // untyped by nature.
306
+ if (key in this.#previousFlash)
168
307
  return this.#previousFlash[key];
169
- }
170
- // biome-ignore lint/suspicious/noExplicitAny: generic default — caller brands the value type via T
171
308
  return defaultValue;
172
309
  }
173
310
  // ─── Serialization ────────────────────────────────────────
@@ -182,5 +319,119 @@ export class Session {
182
319
  isDirty() {
183
320
  return this.#dirty;
184
321
  }
322
+ /** AdonisJS spelling of {@link isDirty}. */
323
+ get hasBeenModified() {
324
+ return this.#dirty;
325
+ }
326
+ /**
327
+ * Whether this session was created during THIS request — no session cookie
328
+ * came in with it (AdonisJS `fresh`).
329
+ */
330
+ get fresh() {
331
+ return this.#fresh;
332
+ }
333
+ /**
334
+ * Whether the session holds nothing (AdonisJS `isEmpty`). Flash data counts:
335
+ * a session carrying only a flash message still has something to write.
336
+ */
337
+ get isEmpty() {
338
+ return Object.keys(this.#data).length === 0 && Object.keys(this.#flashData).length === 0;
339
+ }
340
+ /**
341
+ * Whether writes are refused (AdonisJS `readonly`). Always false here: ream
342
+ * has no read-only session mode, and reporting `true` would tell a caller
343
+ * its writes were dropped when they were not.
344
+ */
345
+ get readonly() {
346
+ return false;
347
+ }
348
+ /**
349
+ * @internal Wire the store this session lives in. Called by
350
+ * `SessionMiddleware`; a session built by hand in a test has none, and
351
+ * {@link initiate} / {@link commit} then have nothing to do.
352
+ */
353
+ setStore(driver, options) {
354
+ this.#driver = driver;
355
+ this.#fresh = options.fresh;
356
+ this.#ttl = options.ttl;
357
+ }
358
+ /**
359
+ * Load the session from its store (AdonisJS `initiate`).
360
+ *
361
+ * Idempotent, as upstream: calling it twice is a no-op, so a middleware that
362
+ * runs on a sub-request cannot wipe what the outer one already read.
363
+ */
364
+ async initiate() {
365
+ if (this.#initiated || this.#driver === undefined)
366
+ return;
367
+ this.#initiated = true;
368
+ this.#hydrate(await this.#driver.read(this.#sessionId));
369
+ }
370
+ /**
371
+ * Persist the session to its store (AdonisJS `commit`).
372
+ *
373
+ * - regenerated: write under the NEW id first, then drop the old entry, so a
374
+ * crash between the two leaves the user with a valid session under one id
375
+ * rather than none.
376
+ * - modified: write.
377
+ * - untouched but pre-existing: touch, to slide the expiry.
378
+ * - untouched and brand new: nothing. Writing here would hand out a session
379
+ * id pointing at a row nobody asked for.
380
+ */
381
+ async commit() {
382
+ const driver = this.#driver;
383
+ if (driver === undefined)
384
+ return;
385
+ if (this.#regenerated) {
386
+ await driver.write(this.#sessionId, this.toJSON(), this.#ttl);
387
+ try {
388
+ await driver.destroy(this.#originalSessionId);
389
+ }
390
+ catch {
391
+ // Benign: a stale entry the TTL reclaims. The session is already live
392
+ // under the new id, and failing the request here would be worse.
393
+ }
394
+ return;
395
+ }
396
+ if (this.#dirty) {
397
+ await driver.write(this.#sessionId, this.toJSON(), this.#ttl);
398
+ return;
399
+ }
400
+ if (!this.#fresh)
401
+ await driver.touch(this.#sessionId, this.#ttl);
402
+ }
403
+ /**
404
+ * Whether the store behind this session can tag sessions with a user
405
+ * (AdonisJS `supportsTagging`). False under the cookie and file drivers.
406
+ */
407
+ supportsTagging() {
408
+ return this.#driver !== undefined && supportsTagging(this.#driver);
409
+ }
410
+ /**
411
+ * Associate this session with a user, so every session that user holds can
412
+ * be found later (AdonisJS `tag`) — what "log out from all my devices" and
413
+ * "your active sessions" are built on. Call it at login.
414
+ */
415
+ async tag(userId) {
416
+ await this.#taggingDriver('tag').tag(this.#sessionId, userId);
417
+ }
418
+ /** Drop the association made by {@link tag} (AdonisJS `untag`). Call it at logout. */
419
+ async untag(userId) {
420
+ await this.#taggingDriver('untag').untag(this.#sessionId, userId);
421
+ }
422
+ /**
423
+ * The store, asserted to support tagging. Throws naming the method rather
424
+ * than resolving to a no-op: a login that believes it tagged the session
425
+ * would leave "log out everywhere" silently doing nothing.
426
+ */
427
+ #taggingDriver(method) {
428
+ if (this.#driver === undefined) {
429
+ throw new Error(`session.${method}() needs a session store — this session was built without one.`);
430
+ }
431
+ if (!supportsTagging(this.#driver)) {
432
+ throw new Error(`session.${method}() is not supported by the configured session store. Use the memory, redis, or database store.`);
433
+ }
434
+ return this.#driver;
435
+ }
185
436
  }
186
437
  //# sourceMappingURL=Session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/session/Session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/session/Session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionMiddleware.d.ts","sourceRoot":"","sources":["../../src/session/SessionMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAKzD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,cAAc,CAAA;AAWhE,MAAM,CAAC,OAAO,OAAO,iBAAiB;;gBAKxB,MAAM,CAAC,EAAE,aAAa,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IA8BlD,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;CAyGzD"}
1
+ {"version":3,"file":"SessionMiddleware.d.ts","sourceRoot":"","sources":["../../src/session/SessionMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAQzD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,cAAc,CAAA;AAqBhE,MAAM,CAAC,OAAO,OAAO,iBAAiB;;gBAKxB,MAAM,CAAC,EAAE,aAAa,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IA2DlD,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;CAyGzD"}
@@ -5,20 +5,39 @@
5
5
  * and writes back after the handler runs.
6
6
  */
7
7
  import { randomBytes } from 'node:crypto';
8
+ import { durationToSeconds } from '../helpers/duration.js';
8
9
  import { CookieDriver } from './drivers/CookieDriver.js';
10
+ import { DatabaseDriver } from './drivers/DatabaseDriver.js';
11
+ import { FileDriver } from './drivers/FileDriver.js';
9
12
  import { MemoryDriver } from './drivers/MemoryDriver.js';
10
13
  import { RedisDriver } from './drivers/RedisDriver.js';
11
14
  import { quasarConnection } from './quasar.js';
15
+ import { ReadOnlyValuesStore } from './ReadOnlyValuesStore.js';
12
16
  import { Session } from './Session.js';
17
+ /** Duck-typed check for a connection the database store can drive. */
18
+ function isSessionDbConnection(value) {
19
+ return (typeof value === 'object' &&
20
+ value !== null &&
21
+ typeof Reflect.get(value, 'query') === 'function' &&
22
+ typeof Reflect.get(value, 'execute') === 'function');
23
+ }
13
24
  export default class SessionMiddleware {
14
25
  #driver;
15
26
  #cookieDriver = null;
16
27
  #config;
17
28
  constructor(config) {
29
+ // `store` + `stores` (AdonisJS) and `driver` (ream) name the same thing.
30
+ // A named store supplies the driver and its own options, so
31
+ // `{ store: 'redis', stores: { redis: { driver: 'redis' } } }` works.
32
+ const selected = config?.store ?? config?.driver;
33
+ const named = selected ? config?.stores?.[selected] : undefined;
18
34
  this.#config = {
19
- driver: config?.driver ?? 'memory',
35
+ driver: named?.driver ?? selected ?? 'memory',
20
36
  cookieName: config?.cookieName ?? 'ream_session',
21
- maxAge: config?.maxAge ?? 7200,
37
+ // `age` is the AdonisJS key and accepts a duration string.
38
+ maxAge: config?.age !== undefined
39
+ ? durationToSeconds(config.age, 'a session age')
40
+ : (config?.maxAge ?? 7200),
22
41
  clearWithBrowser: config?.clearWithBrowser ?? false,
23
42
  rolling: config?.rolling ?? false,
24
43
  };
@@ -32,6 +51,24 @@ export default class SessionMiddleware {
32
51
  else if (this.#config.driver === 'memory') {
33
52
  this.#driver = new MemoryDriver();
34
53
  }
54
+ else if (this.#config.driver === 'file') {
55
+ const location = config?.location ?? named?.location;
56
+ if (typeof location !== 'string') {
57
+ throw new Error('File session driver requires a `location`. Set session.location (or stores.<name>.location) to a writable directory.');
58
+ }
59
+ this.#driver = new FileDriver({ location });
60
+ }
61
+ else if (this.#config.driver === 'database') {
62
+ const connection = config?.dbConnection ?? named?.connection;
63
+ if (!isSessionDbConnection(connection)) {
64
+ throw new Error('Database session driver requires a `connection` exposing query() and execute().');
65
+ }
66
+ this.#driver = new DatabaseDriver({
67
+ connection,
68
+ tableName: typeof config?.tableName === 'string' ? config.tableName : undefined,
69
+ gcProbability: typeof config?.gcProbability === 'number' ? config.gcProbability : undefined,
70
+ });
71
+ }
35
72
  else if (this.#config.driver === 'redis') {
36
73
  // Either the app hands a client in, or it names a quasar connection —
37
74
  // the same choice echo, bay and warden offer. Nothing is dialled here:
@@ -49,15 +86,25 @@ export default class SessionMiddleware {
49
86
  const rolling = this.#config.rolling;
50
87
  const isProduction = process.env.NODE_ENV === 'production';
51
88
  // Read session ID from cookie — pre-parsed by the Rust HyperServer.
52
- let sessionId = ctx.request.plainCookie(cookieName);
89
+ let sessionId = ctx.request.plainCookie(cookieName, undefined, {
90
+ encoded: false,
91
+ });
53
92
  const hadIncomingCookie = sessionId !== null;
54
93
  // Cookie driver: the cookie value IS the session data (encrypted)
55
94
  if (this.#cookieDriver) {
56
95
  const data = await this.#driver.read(sessionId ?? '');
57
96
  sessionId = sessionId ?? generateSessionId();
58
97
  const session = new Session(sessionId, data);
98
+ // No store to commit to: the cookie written below IS the storage, so the
99
+ // session is seated without one and `commit()` has nothing to do.
100
+ session.setStore(this.#driver, { fresh: !hadIncomingCookie, ttl: maxAge });
59
101
  ctx.store.set('session', session);
60
102
  ctx.session = session;
103
+ session.setInputReader(() => ctx.request.original());
104
+ // Same as the server-side branch below: without it `{{ flashMessages }}`
105
+ // and the `@error` / `@errors` / `@inputError` tags saw nothing at all
106
+ // under the cookie driver, so a form silently lost its messages.
107
+ shareSessionWithView(ctx, session);
61
108
  await next();
62
109
  // Default: only emit Set-Cookie if the session was actually modified —
63
110
  // sending a cookie on every response defeats HTTP caching, leaks state
@@ -74,6 +121,9 @@ export default class SessionMiddleware {
74
121
  'Switch to a server-side driver (memory/redis) or reduce session data.\n');
75
122
  }
76
123
  ctx.response.plainCookie(cookieName, encoded, {
124
+ // Already encrypted by the cookie driver; packing it again would
125
+ // only make the cookie bigger and change nothing.
126
+ encode: false,
77
127
  maxAge: this.#config.clearWithBrowser ? undefined : maxAge,
78
128
  path: '/',
79
129
  httpOnly: true,
@@ -87,40 +137,21 @@ export default class SessionMiddleware {
87
137
  if (!sessionId) {
88
138
  sessionId = generateSessionId();
89
139
  }
90
- const data = await this.#driver.read(sessionId);
91
- const session = new Session(sessionId, data);
140
+ const session = new Session(sessionId);
141
+ session.setStore(this.#driver, { fresh: !hadIncomingCookie, ttl: maxAge });
142
+ await session.initiate();
92
143
  ctx.store.set('session', session);
93
144
  ctx.session = session;
145
+ // `flashAll()` takes no argument (AdonisJS): it reads the request's own
146
+ // input, which is what repopulates a form after a redirect-back.
147
+ session.setInputReader(() => ctx.request.original());
148
+ shareSessionWithView(ctx, session);
94
149
  await next();
95
- // Session-fixation mitigation: if the handler called `session.regenerate()`
96
- // (typically via Warden's SessionStrategy.login), the session id has been
97
- // rotated. Migrate the driver storage atomically — write under the new
98
- // id first, then destroy the old entry so a crash between calls leaves
99
- // the user with a valid session under one of the two ids rather than
100
- // none. The cookie below picks up `session.sessionId` which already
101
- // returns the new value.
150
+ // The store half of the lifecycle — including the session-fixation
151
+ // migration when the handler called `regenerate()` — belongs to the
152
+ // session, as it does upstream.
102
153
  const regenerated = session.wasRegenerated();
103
- const isNew = !hadIncomingCookie;
104
- if (regenerated) {
105
- const originalId = session.originalSessionId();
106
- const currentId = session.sessionId;
107
- await this.#driver.write(currentId, session.toJSON(), maxAge);
108
- // Best-effort: a destroy failure leaves a stale entry that TTL will
109
- // sweep, but should not crash the request. The new session is already
110
- // live under `currentId`.
111
- try {
112
- await this.#driver.destroy(originalId);
113
- }
114
- catch {
115
- // benign — TTL will reclaim it.
116
- }
117
- }
118
- else if (session.isDirty()) {
119
- await this.#driver.write(sessionId, session.toJSON(), maxAge);
120
- }
121
- else if (!isNew) {
122
- await this.#driver.touch(sessionId, maxAge);
123
- }
154
+ await session.commit();
124
155
  // Emit Set-Cookie only when there is server-side state worth
125
156
  // pinning to the browser: the session was modified (isDirty → we
126
157
  // just wrote it), regenerated (rotated id post-login), or rolling
@@ -132,6 +163,9 @@ export default class SessionMiddleware {
132
163
  // the cookie-driver path above (which already omits `isNew`).
133
164
  if (session.isDirty() || regenerated || (rolling && hadIncomingCookie)) {
134
165
  ctx.response.plainCookie(cookieName, session.sessionId, {
166
+ // An opaque id — packing it would invalidate every session cookie
167
+ // already in a browser for no gain.
168
+ encode: false,
135
169
  maxAge: this.#config.clearWithBrowser ? undefined : maxAge,
136
170
  path: '/',
137
171
  httpOnly: true,
@@ -144,4 +178,24 @@ export default class SessionMiddleware {
144
178
  function generateSessionId() {
145
179
  return randomBytes(24).toString('base64url');
146
180
  }
181
+ /**
182
+ * Share the session with the request's view, as AdonisJS's session does.
183
+ *
184
+ * A migrated template reads `{{ old('email') }}`, `@error('email')` and
185
+ * `{{ flashMessages.get(...) }}` unchanged, so the three names and their shapes
186
+ * have to match. Skipped when the app installed no template layer.
187
+ */
188
+ function shareSessionWithView(ctx, session) {
189
+ const view = Reflect.get(Object(ctx), 'view');
190
+ const share = Reflect.get(Object(view), 'share');
191
+ if (typeof share !== 'function')
192
+ return;
193
+ const flashMessages = new ReadOnlyValuesStore(session.flashMessages());
194
+ share.call(view, {
195
+ session: new ReadOnlyValuesStore(session.all()),
196
+ flashMessages,
197
+ // Adonis exposes the previous request's input under `old`.
198
+ old: (key, defaultValue) => flashMessages.get(key, defaultValue),
199
+ });
200
+ }
147
201
  //# sourceMappingURL=SessionMiddleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionMiddleware.js","sourceRoot":"","sources":["../../src/session/SessionMiddleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionMiddleware.js","sourceRoot":"","sources":["../../src/session/SessionMiddleware.ts"],"names":[],"mappings":"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"}