unjwt 0.5.30 → 0.5.32

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 CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Sandro Circi
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.
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Sandro Circi
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.
@@ -1,22 +1,25 @@
1
- import { b as JWEEncryptOptions } from '../shared/unjwt.9mL1vSFP.mjs';
2
- export { d as JWEDecryptOptions, e as JWEDecryptResult, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from '../shared/unjwt.9mL1vSFP.mjs';
1
+ import { b as JWEEncryptOptions } from '../shared/unjwt.BU3IrsCv.mjs';
2
+ export { d as JWEDecryptOptions, e as JWEDecryptResult, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from '../shared/unjwt.BU3IrsCv.mjs';
3
3
  import { X as JWTClaims, E as ExpiresIn, r as JWK_Symmetric, u as JWK_Private, t as JWK_Public, Z as JWTClaimValidationOptions, w as JWKSet } from '../shared/unjwt.CtHrClHc.mjs';
4
4
  export { C as CompositeKey, f as ContentEncryptionAlgorithm, D as DeriveKeyOptions, e as DeriveKeyReturn, c as GenerateJWKOptions, d as GenerateJWKReturn, G as GenerateKeyAlgorithm, a as GenerateKeyOptions, b as GenerateKeyReturn, v as JWK, S as JWKAlgorithm, T as JWKPEMAlgorithm, J as JWKParameters, I as JWK_AES_CBC_HMAC, L as JWK_AES_GCM, H as JWK_AES_GCM_KW, F as JWK_AES_KW, s as JWK_Asymmetric, R as JWK_Asymmetric_Algorithm, j as JWK_EC, O as JWK_ECDH_ES, A as JWK_ECDSA, i as JWK_EC_Private, h as JWK_EC_Public, x as JWK_HMAC, p as JWK_OKP, o as JWK_OKP_Private, n as JWK_OKP_Public, P as JWK_OKP_SIGN, N as JWK_PBES2, m as JWK_RSA, B as JWK_RSA_ENC, z as JWK_RSA_PSS, l as JWK_RSA_Private, k as JWK_RSA_Public, y as JWK_RSA_SIGN, Q as JWK_Symmetric_Algorithm, q as JWK_oct, Y as JWT, V as JoseHeaderParameters, K as KeyManagementAlgorithm, U as UnwrapKeyOptions, W as WrapKeyOptions, g as WrapKeyResult } from '../shared/unjwt.CtHrClHc.mjs';
5
+ import { S as StrictOmit } from '../shared/unjwt.JdKqVANs.mjs';
5
6
  import { CookieSerializeOptions } from 'cookie-es';
6
7
  import { H3Event } from 'h3';
7
8
  import { c as JWSSignOptions } from '../shared/unjwt.BsLgL0DQ.mjs';
8
9
  export { d as deriveJWKFromPassword, e as exportJWKToPEM, g as generateJWK, i as importJWKFromPEM } from '../shared/unjwt.BjP_dGnX.mjs';
9
10
 
10
- type SessionData<T extends JWTClaims = JWTClaims> = Omit<T, "jti" | "iat" | "exp">;
11
- type SessionUpdate<T extends JWTClaims = JWTClaims> = Partial<SessionData<T>> | ((oldData: SessionData<T>) => Partial<SessionData<T>> | undefined);
12
- interface SessionManager<T extends JWTClaims = JWTClaims, ConfigMaxAge extends ExpiresIn | undefined = number | undefined> {
11
+ interface SessionClaims extends Required<Pick<JWTClaims, "jti" | "iat">>, StrictOmit<JWTClaims, "jti" | "iat"> {
12
+ }
13
+ type SessionData<T extends Record<string, any> = SessionClaims> = StrictOmit<T, "jti" | "iat" | "exp">;
14
+ type SessionUpdate<T extends Record<string, any> = SessionClaims> = Partial<SessionData<T>> | ((oldData: SessionData<T>) => Partial<SessionData<T>> | undefined);
15
+ interface SessionManager<T extends Record<string, any> = SessionClaims, ConfigMaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
13
16
  readonly id: string | undefined;
14
17
  readonly createdAt: number;
15
- readonly expiresAt: ConfigMaxAge extends ExpiresIn ? number : T["exp"];
18
+ readonly expiresAt: ConfigMaxAge extends ExpiresIn ? number : "exp" extends keyof T ? T["exp"] : number | undefined;
16
19
  readonly data: SessionData<T>;
17
20
  readonly token: string | undefined;
18
- update: (update: SessionUpdate<T>) => Promise<SessionManager<T>>;
19
- clear: () => Promise<SessionManager<T>>;
21
+ update: (update: SessionUpdate<T>) => Promise<SessionManager<T, ConfigMaxAge>>;
22
+ clear: () => Promise<SessionManager<T, ConfigMaxAge>>;
20
23
  }
21
24
 
22
25
  /**
@@ -26,14 +29,14 @@ interface SessionManager<T extends JWTClaims = JWTClaims, ConfigMaxAge extends E
26
29
  */
27
30
 
28
31
  declare const kGetSessionPromise$1: unique symbol;
29
- interface SessionJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
32
+ interface SessionJWE<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
30
33
  id: string;
31
34
  createdAt: number;
32
35
  expiresAt: MaxAge extends ExpiresIn ? number : T["exp"];
33
36
  data: SessionData<T>;
34
37
  [kGetSessionPromise$1]?: Promise<SessionJWE<T, MaxAge>>;
35
38
  }
36
- interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
39
+ interface SessionHooksJWE<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
37
40
  onRead?: (args: {
38
41
  session: SessionJWE<T, MaxAge>;
39
42
  event: H3Event;
@@ -59,7 +62,7 @@ interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends Expire
59
62
  config: SessionConfigJWE<T, MaxAge>;
60
63
  }) => void | Promise<void>;
61
64
  }
62
- interface SessionConfigJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
65
+ interface SessionConfigJWE<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
63
66
  /** @deprecated use `key` instead */
64
67
  secret?: string | JWK_Symmetric | {
65
68
  privateKey: JWK_Private | JWK_Symmetric;
@@ -103,16 +106,16 @@ type CompatEvent$1 = {
103
106
  /**
104
107
  * Create a session manager for the current request.
105
108
  */
106
- declare function useJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>): Promise<SessionManager<T, MaxAge>>;
109
+ declare function useJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>): Promise<SessionManager<T, MaxAge>>;
107
110
  /**
108
111
  * Get (and lazily initialize) the session for the current request.
109
112
  */
110
- declare function getJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>): Promise<SessionJWE<T, MaxAge>>;
111
- declare function getJWESessionToken<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>): string | undefined;
113
+ declare function getJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>): Promise<SessionJWE<T, MaxAge>>;
114
+ declare function getJWESessionToken<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>): string | undefined;
112
115
  /**
113
116
  * Update the session (optionally mutating the session data) and re-issue the JWE token.
114
117
  */
115
- declare function updateJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: SessionConfigJWE<T, MaxAge>, update?: SessionUpdate<T>): Promise<SessionJWE<T, MaxAge>>;
118
+ declare function updateJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: SessionConfigJWE<T, MaxAge>, update?: SessionUpdate<T>): Promise<SessionJWE<T, MaxAge>>;
116
119
  /**
117
120
  * Produce a JWE for the current session.
118
121
  * Payload structure:
@@ -123,15 +126,15 @@ declare function updateJWESession<T extends JWTClaims = JWTClaims, MaxAge extend
123
126
  * data: Record<string, any>;
124
127
  * }
125
128
  */
126
- declare function sealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>): Promise<string>;
129
+ declare function sealJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>): Promise<string>;
127
130
  /**
128
131
  * Decrypt the JWE and return a Session-compatible object.
129
132
  */
130
- declare function unsealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(_event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>, sealed: string): Promise<Partial<SessionJWE<T, MaxAge>>>;
133
+ declare function unsealJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(_event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>, sealed: string): Promise<Partial<SessionJWE<T, MaxAge>>>;
131
134
  /**
132
135
  * Clear the session (delete from context and drop cookie).
133
136
  */
134
- declare function clearJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: Partial<SessionConfigJWE<T, MaxAge>>): Promise<void>;
137
+ declare function clearJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: Partial<SessionConfigJWE<T, MaxAge>>): Promise<void>;
135
138
 
136
139
  /**
137
140
  * This is a fork of h3 library's session utility functions.
@@ -140,14 +143,14 @@ declare function clearJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
140
143
  */
141
144
 
142
145
  declare const kGetSessionPromise: unique symbol;
143
- interface SessionJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
146
+ interface SessionJWS<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
144
147
  id: string;
145
148
  createdAt: number;
146
149
  expiresAt: MaxAge extends ExpiresIn ? number : T["exp"];
147
150
  data: SessionData<T>;
148
151
  [kGetSessionPromise]?: Promise<SessionJWS<T, MaxAge>>;
149
152
  }
150
- interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
153
+ interface SessionHooksJWS<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
151
154
  onRead?: (args: {
152
155
  session: SessionJWS<T, MaxAge>;
153
156
  event: H3Event;
@@ -173,7 +176,7 @@ interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends Expire
173
176
  config: SessionConfigJWS<T, MaxAge>;
174
177
  }) => void | Promise<void>;
175
178
  }
176
- interface SessionConfigJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
179
+ interface SessionConfigJWS<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
177
180
  /**
178
181
  * JWK (private for signing with RS/ES/PS, or symmetric oct) used for signing.
179
182
  */
@@ -215,21 +218,21 @@ type CompatEvent = {
215
218
  * Create a session manager for the current request using JWS (signed only, not encrypted).
216
219
  * NOTE: Contents are visible to clients (Base64URL-decoded JSON). Do not store secrets in session data.
217
220
  */
218
- declare function useJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent, config: SessionConfigJWS<T, MaxAge>): Promise<SessionManager<T, MaxAge>>;
221
+ declare function useJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent, config: SessionConfigJWS<T, MaxAge>): Promise<SessionManager<T, MaxAge>>;
219
222
  /**
220
223
  * Retrieve (and lazily initialize) the session.
221
224
  */
222
- declare function getJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent, config: SessionConfigJWS<T, MaxAge>): Promise<SessionJWS<T, MaxAge>>;
225
+ declare function getJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent, config: SessionConfigJWS<T, MaxAge>): Promise<SessionJWS<T, MaxAge>>;
223
226
  /**
224
227
  * Update session data (if provided) and reissue JWS.
225
228
  */
226
- declare function updateJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: SessionConfigJWS<T, MaxAge>, update?: SessionUpdate<T>): Promise<SessionJWS<T, MaxAge>>;
229
+ declare function updateJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: SessionConfigJWS<T, MaxAge>, update?: SessionUpdate<T>): Promise<SessionJWS<T, MaxAge>>;
227
230
  /**
228
231
  * Sign current session as a compact JWS.
229
232
  * Payload claims:
230
233
  * jti, iat, exp?, data, plus optional extraClaims (cannot override reserved)
231
234
  */
232
- declare function signJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent, config: SessionConfigJWS<T, MaxAge>): Promise<string>;
235
+ declare function signJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent, config: SessionConfigJWS<T, MaxAge>): Promise<string>;
233
236
  /**
234
237
  * Verify and parse a compact JWS into a Session structure.
235
238
  * Performs:
@@ -238,11 +241,11 @@ declare function signJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends
238
241
  * - ensures jti & iat presence
239
242
  * - enforces maxAge if provided
240
243
  */
241
- declare function verifyJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(_event: H3Event | CompatEvent, config: SessionConfigJWS<T, MaxAge>, token: string): Promise<Partial<SessionJWS<T, MaxAge>>>;
244
+ declare function verifyJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(_event: H3Event | CompatEvent, config: SessionConfigJWS<T, MaxAge>, token: string): Promise<Partial<SessionJWS<T, MaxAge>>>;
242
245
  /**
243
246
  * Destroy the session (context + cookie).
244
247
  */
245
- declare function clearJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: Partial<SessionConfigJWS<T, MaxAge>>): Promise<void>;
248
+ declare function clearJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: Partial<SessionConfigJWS<T, MaxAge>>): Promise<void>;
246
249
 
247
250
  export { JWEEncryptOptions, JWKSet, JWK_Private, JWK_Public, JWK_Symmetric, JWTClaimValidationOptions, JWTClaims, clearJWESession, clearJWSSession, getJWESession, getJWESessionToken, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
248
- export type { SessionConfigJWE, SessionConfigJWS, SessionData, SessionHooksJWE, SessionHooksJWS, SessionJWE, SessionJWEConfig, SessionJWS, SessionJWSConfig, SessionManager, SessionUpdate };
251
+ export type { SessionClaims, SessionConfigJWE, SessionConfigJWS, SessionData, SessionHooksJWE, SessionHooksJWS, SessionJWE, SessionJWEConfig, SessionJWS, SessionJWSConfig, SessionManager, SessionUpdate };
@@ -148,6 +148,19 @@ function getJWESessionToken(event, config) {
148
148
  token = parse(String(cookieHeader))[sessionName];
149
149
  }
150
150
  }
151
+ if (!token) {
152
+ const setCookie2 = _getResHeader$1(event, "set-cookie");
153
+ if (typeof setCookie2 === "string") {
154
+ token = findSetCookie$1(setCookie2, sessionName);
155
+ } else if (Array.isArray(setCookie2)) {
156
+ for (const sc of setCookie2) {
157
+ token = findSetCookie$1(sc, sessionName);
158
+ if (token) {
159
+ break;
160
+ }
161
+ }
162
+ }
163
+ }
151
164
  return token;
152
165
  }
153
166
  function _getReqHeader$1(event, name) {
@@ -161,6 +174,14 @@ function _getReqHeader$1(event, name) {
161
174
  return event.headers.get(name);
162
175
  }
163
176
  }
177
+ function _getResHeader$1(event, name) {
178
+ if (event.node) {
179
+ return event.node?.res.getHeader(name);
180
+ }
181
+ if (event.response) {
182
+ return event.response.headers?.get(name);
183
+ }
184
+ }
164
185
  async function updateJWESession(event, config, update) {
165
186
  const sessionName = config.name || DEFAULT_NAME$1;
166
187
  const session = event.context.sessions?.[sessionName] || await getJWESession(event, config);
@@ -316,6 +337,11 @@ function getDecryptKey(key) {
316
337
  }
317
338
  return _key;
318
339
  }
340
+ function findSetCookie$1(setCookie2, name) {
341
+ const regex = new RegExp(`(?:^|,\\s*)${name}=([^;]+)`);
342
+ const match = setCookie2.match(regex);
343
+ return match ? match[1] : void 0;
344
+ }
319
345
 
320
346
  /**
321
347
  * This is a fork of h3 library's session utility functions.
@@ -460,6 +486,19 @@ function getJWSSessionToken(event, config) {
460
486
  token = parse(String(cookieHeader))[sessionName];
461
487
  }
462
488
  }
489
+ if (!token) {
490
+ const setCookie2 = _getResHeader(event, "set-cookie");
491
+ if (typeof setCookie2 === "string") {
492
+ token = findSetCookie(setCookie2, sessionName);
493
+ } else if (Array.isArray(setCookie2)) {
494
+ for (const sc of setCookie2) {
495
+ token = findSetCookie(sc, sessionName);
496
+ if (token) {
497
+ break;
498
+ }
499
+ }
500
+ }
501
+ }
463
502
  return token;
464
503
  }
465
504
  function _getReqHeader(event, name) {
@@ -473,6 +512,14 @@ function _getReqHeader(event, name) {
473
512
  return event.headers.get(name);
474
513
  }
475
514
  }
515
+ function _getResHeader(event, name) {
516
+ if (event.node) {
517
+ return event.node?.res.getHeader(name);
518
+ }
519
+ if (event.response) {
520
+ return event.response.headers?.get(name);
521
+ }
522
+ }
476
523
  async function updateJWSSession(event, config, update) {
477
524
  const sessionName = config.name || DEFAULT_NAME;
478
525
  const session = event.context.sessions?.[sessionName] || await getJWSSession(event, config);
@@ -620,5 +667,10 @@ function getVerifyKey(key) {
620
667
  }
621
668
  return _key;
622
669
  }
670
+ function findSetCookie(setCookie2, name) {
671
+ const regex = new RegExp(`(?:^|,\\s*)${name}=([^;]+)`);
672
+ const match = setCookie2.match(regex);
673
+ return match ? match[1] : void 0;
674
+ }
623
675
 
624
676
  export { clearJWESession, clearJWSSession, getJWESession, getJWESessionToken, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
@@ -1,7 +1,8 @@
1
- export { d as JWEDecryptOptions, e as JWEDecryptResult, b as JWEEncryptOptions, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from '../shared/unjwt.9mL1vSFP.mjs';
1
+ export { d as JWEDecryptOptions, e as JWEDecryptResult, b as JWEEncryptOptions, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from '../shared/unjwt.BU3IrsCv.mjs';
2
2
  export { C as CompositeKey, f as ContentEncryptionAlgorithm, D as DeriveKeyOptions, e as DeriveKeyReturn, c as GenerateJWKOptions, d as GenerateJWKReturn, G as GenerateKeyAlgorithm, a as GenerateKeyOptions, b as GenerateKeyReturn, v as JWK, S as JWKAlgorithm, T as JWKPEMAlgorithm, J as JWKParameters, w as JWKSet, I as JWK_AES_CBC_HMAC, L as JWK_AES_GCM, H as JWK_AES_GCM_KW, F as JWK_AES_KW, s as JWK_Asymmetric, R as JWK_Asymmetric_Algorithm, j as JWK_EC, O as JWK_ECDH_ES, A as JWK_ECDSA, i as JWK_EC_Private, h as JWK_EC_Public, x as JWK_HMAC, p as JWK_OKP, o as JWK_OKP_Private, n as JWK_OKP_Public, P as JWK_OKP_SIGN, N as JWK_PBES2, u as JWK_Private, t as JWK_Public, m as JWK_RSA, B as JWK_RSA_ENC, z as JWK_RSA_PSS, l as JWK_RSA_Private, k as JWK_RSA_Public, y as JWK_RSA_SIGN, r as JWK_Symmetric, Q as JWK_Symmetric_Algorithm, q as JWK_oct, Y as JWT, Z as JWTClaimValidationOptions, X as JWTClaims, V as JoseHeaderParameters, K as KeyManagementAlgorithm, U as UnwrapKeyOptions, W as WrapKeyOptions, g as WrapKeyResult } from '../shared/unjwt.CtHrClHc.mjs';
3
- export { SessionConfigJWE, SessionConfigJWS, SessionData, SessionHooksJWE, SessionHooksJWS, SessionJWE, SessionJWEConfig, SessionJWS, SessionJWSConfig, SessionManager, SessionUpdate, clearJWESession, clearJWSSession, getJWESession, getJWESessionToken, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession } from './h3.mjs';
3
+ export { SessionClaims, SessionConfigJWE, SessionConfigJWS, SessionData, SessionHooksJWE, SessionHooksJWS, SessionJWE, SessionJWEConfig, SessionJWS, SessionJWSConfig, SessionManager, SessionUpdate, clearJWESession, clearJWSSession, getJWESession, getJWESessionToken, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession } from './h3.mjs';
4
4
  export { d as deriveJWKFromPassword, e as exportJWKToPEM, g as generateJWK, i as importJWKFromPEM } from '../shared/unjwt.BjP_dGnX.mjs';
5
+ import '../shared/unjwt.JdKqVANs.mjs';
5
6
  import 'cookie-es';
6
7
  import 'h3';
7
8
  import '../shared/unjwt.BsLgL0DQ.mjs';
@@ -1,33 +1,36 @@
1
- import { b as JWEEncryptOptions } from '../shared/unjwt.9mL1vSFP.mjs';
2
- export { d as JWEDecryptOptions, e as JWEDecryptResult, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from '../shared/unjwt.9mL1vSFP.mjs';
1
+ import { b as JWEEncryptOptions } from '../shared/unjwt.BU3IrsCv.mjs';
2
+ export { d as JWEDecryptOptions, e as JWEDecryptResult, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from '../shared/unjwt.BU3IrsCv.mjs';
3
3
  import { X as JWTClaims, E as ExpiresIn, r as JWK_Symmetric, u as JWK_Private, t as JWK_Public, Z as JWTClaimValidationOptions, w as JWKSet } from '../shared/unjwt.CtHrClHc.mjs';
4
4
  export { C as CompositeKey, f as ContentEncryptionAlgorithm, D as DeriveKeyOptions, e as DeriveKeyReturn, c as GenerateJWKOptions, d as GenerateJWKReturn, G as GenerateKeyAlgorithm, a as GenerateKeyOptions, b as GenerateKeyReturn, v as JWK, S as JWKAlgorithm, T as JWKPEMAlgorithm, J as JWKParameters, I as JWK_AES_CBC_HMAC, L as JWK_AES_GCM, H as JWK_AES_GCM_KW, F as JWK_AES_KW, s as JWK_Asymmetric, R as JWK_Asymmetric_Algorithm, j as JWK_EC, O as JWK_ECDH_ES, A as JWK_ECDSA, i as JWK_EC_Private, h as JWK_EC_Public, x as JWK_HMAC, p as JWK_OKP, o as JWK_OKP_Private, n as JWK_OKP_Public, P as JWK_OKP_SIGN, N as JWK_PBES2, m as JWK_RSA, B as JWK_RSA_ENC, z as JWK_RSA_PSS, l as JWK_RSA_Private, k as JWK_RSA_Public, y as JWK_RSA_SIGN, Q as JWK_Symmetric_Algorithm, q as JWK_oct, Y as JWT, V as JoseHeaderParameters, K as KeyManagementAlgorithm, U as UnwrapKeyOptions, W as WrapKeyOptions, g as WrapKeyResult } from '../shared/unjwt.CtHrClHc.mjs';
5
+ import { S as StrictOmit } from '../shared/unjwt.JdKqVANs.mjs';
5
6
  import { HTTPEvent } from 'h3';
6
7
  import { CookieSerializeOptions } from 'cookie-es';
7
8
  import { c as JWSSignOptions } from '../shared/unjwt.BsLgL0DQ.mjs';
8
9
  export { d as deriveJWKFromPassword, e as exportJWKToPEM, g as generateJWK, i as importJWKFromPEM } from '../shared/unjwt.BjP_dGnX.mjs';
9
10
 
10
- type SessionData<T extends JWTClaims = JWTClaims> = Omit<T, "jti" | "iat" | "exp">;
11
- type SessionUpdate<T extends JWTClaims = JWTClaims> = Partial<SessionData<T>> | ((oldData: SessionData<T>) => Partial<SessionData<T>> | undefined);
12
- interface SessionManager<T extends JWTClaims = JWTClaims, ConfigMaxAge extends ExpiresIn | undefined = number | undefined> {
11
+ interface SessionClaims extends Required<Pick<JWTClaims, "jti" | "iat">>, StrictOmit<JWTClaims, "jti" | "iat"> {
12
+ }
13
+ type SessionData<T extends Record<string, any> = SessionClaims> = StrictOmit<T, "jti" | "iat" | "exp">;
14
+ type SessionUpdate<T extends Record<string, any> = SessionClaims> = Partial<SessionData<T>> | ((oldData: SessionData<T>) => Partial<SessionData<T>> | undefined);
15
+ interface SessionManager<T extends Record<string, any> = SessionClaims, ConfigMaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
13
16
  readonly id: string | undefined;
14
17
  readonly createdAt: number;
15
- readonly expiresAt: ConfigMaxAge extends ExpiresIn ? number : T["exp"];
18
+ readonly expiresAt: ConfigMaxAge extends ExpiresIn ? number : "exp" extends keyof T ? T["exp"] : number | undefined;
16
19
  readonly data: SessionData<T>;
17
20
  readonly token: string | undefined;
18
- update: (update: SessionUpdate<T>) => Promise<SessionManager<T>>;
19
- clear: () => Promise<SessionManager<T>>;
21
+ update: (update: SessionUpdate<T>) => Promise<SessionManager<T, ConfigMaxAge>>;
22
+ clear: () => Promise<SessionManager<T, ConfigMaxAge>>;
20
23
  }
21
24
 
22
25
  declare const kGetSessionPromise$1: unique symbol;
23
- interface SessionJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
26
+ interface SessionJWE<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
24
27
  id: string;
25
28
  createdAt: number;
26
29
  expiresAt: MaxAge extends ExpiresIn ? number : T["exp"];
27
30
  data: SessionData<T>;
28
31
  [kGetSessionPromise$1]?: Promise<SessionJWE<T, MaxAge>>;
29
32
  }
30
- interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
33
+ interface SessionHooksJWE<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
31
34
  onRead?: (args: {
32
35
  session: SessionJWE<T, MaxAge>;
33
36
  event: HTTPEvent;
@@ -53,7 +56,7 @@ interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends Expire
53
56
  config: SessionConfigJWE<T, MaxAge>;
54
57
  }) => void | Promise<void>;
55
58
  }
56
- interface SessionConfigJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
59
+ interface SessionConfigJWE<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
57
60
  /** Shared secret used, string for PBES2 or Json Web Key (JWK) */
58
61
  key: string | JWK_Symmetric | {
59
62
  privateKey: JWK_Private | JWK_Symmetric;
@@ -81,38 +84,38 @@ interface SessionConfigJWE<T extends JWTClaims = JWTClaims, MaxAge extends Expir
81
84
  /**
82
85
  * Create a session manager for the current request.
83
86
  */
84
- declare function useJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): Promise<SessionManager<T, MaxAge>>;
87
+ declare function useJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): Promise<SessionManager<T, MaxAge>>;
85
88
  /**
86
89
  * Get the session for the current request.
87
90
  */
88
- declare function getJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): Promise<SessionJWE<T, MaxAge>>;
89
- declare function getJWESessionToken<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): string | undefined;
91
+ declare function getJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): Promise<SessionJWE<T, MaxAge>>;
92
+ declare function getJWESessionToken<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): string | undefined;
90
93
  /**
91
94
  * Update the session data for the current request.
92
95
  */
93
- declare function updateJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>, update?: SessionUpdate<T>): Promise<SessionJWE<T, MaxAge>>;
96
+ declare function updateJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>, update?: SessionUpdate<T>): Promise<SessionJWE<T, MaxAge>>;
94
97
  /**
95
98
  * Produce a JWE for the current session.
96
99
  */
97
- declare function sealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): Promise<string>;
100
+ declare function sealJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): Promise<string>;
98
101
  /**
99
102
  * Decrypt the JWE and return a Session-compatible object.
100
103
  */
101
- declare function unsealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(_event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>, sealed: string): Promise<Partial<SessionJWE<T, MaxAge>>>;
104
+ declare function unsealJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(_event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>, sealed: string): Promise<Partial<SessionJWE<T, MaxAge>>>;
102
105
  /**
103
106
  * Clear the session (delete from context and drop cookie).
104
107
  */
105
- declare function clearJWESession<T extends JWTClaims, MaxAge extends ExpiresIn | undefined>(event: HTTPEvent, config: Partial<SessionConfigJWE<T, MaxAge>>): Promise<void>;
108
+ declare function clearJWESession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: Partial<SessionConfigJWE<T, MaxAge>>): Promise<void>;
106
109
 
107
110
  declare const kGetSessionPromise: unique symbol;
108
- interface SessionJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
111
+ interface SessionJWS<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
109
112
  id: string;
110
113
  createdAt: number;
111
114
  expiresAt: MaxAge extends ExpiresIn ? number : T["exp"];
112
115
  data: SessionData<T>;
113
116
  [kGetSessionPromise]?: Promise<SessionJWS<T, MaxAge>>;
114
117
  }
115
- interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
118
+ interface SessionHooksJWS<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
116
119
  onRead?: (args: {
117
120
  session: SessionJWS<T, MaxAge>;
118
121
  event: HTTPEvent;
@@ -138,7 +141,7 @@ interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends Expire
138
141
  config: SessionConfigJWS<T, MaxAge>;
139
142
  }) => void | Promise<void>;
140
143
  }
141
- interface SessionConfigJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
144
+ interface SessionConfigJWS<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
142
145
  key: JWK_Symmetric | {
143
146
  privateKey: JWK_Private;
144
147
  publicKey: JWK_Public | JWK_Public[] | JWKSet;
@@ -156,13 +159,13 @@ interface SessionConfigJWS<T extends JWTClaims = JWTClaims, MaxAge extends Expir
156
159
  };
157
160
  hooks?: SessionHooksJWS<T, MaxAge>;
158
161
  }
159
- declare function useJWSSession<T extends JWTClaims, MaxAge extends ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>): Promise<SessionManager<T, MaxAge>>;
160
- declare function getJWSSession<T extends JWTClaims, MaxAge extends ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>): Promise<SessionJWS<T, MaxAge>>;
161
- declare function getJWSSessionToken<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>): string | undefined;
162
- declare function updateJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>, update?: SessionUpdate<T>): Promise<SessionJWS<T, MaxAge>>;
163
- declare function signJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>): Promise<string>;
164
- declare function verifyJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(_event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>, token: string): Promise<Partial<SessionJWS<T, MaxAge>>>;
165
- declare function clearJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: Partial<SessionConfigJWS<T, MaxAge>>): Promise<void>;
162
+ declare function useJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>): Promise<SessionManager<T, MaxAge>>;
163
+ declare function getJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>): Promise<SessionJWS<T, MaxAge>>;
164
+ declare function getJWSSessionToken<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>): string | undefined;
165
+ declare function updateJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>, update?: SessionUpdate<T>): Promise<SessionJWS<T, MaxAge>>;
166
+ declare function signJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>): Promise<string>;
167
+ declare function verifyJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(_event: HTTPEvent, config: SessionConfigJWS<T, MaxAge>, token: string): Promise<Partial<SessionJWS<T, MaxAge>>>;
168
+ declare function clearJWSSession<T extends Record<string, any> = SessionClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: Partial<SessionConfigJWS<T, MaxAge>>): Promise<void>;
166
169
 
167
170
  export { JWEEncryptOptions, JWKSet, JWK_Private, JWK_Public, JWK_Symmetric, JWTClaimValidationOptions, JWTClaims, clearJWESession, clearJWSSession, getJWESession, getJWESessionToken, getJWSSession, getJWSSessionToken, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
168
- export type { SessionConfigJWE, SessionConfigJWS, SessionData, SessionHooksJWE, SessionHooksJWS, SessionJWE, SessionJWS, SessionManager, SessionUpdate };
171
+ export type { SessionClaims, SessionConfigJWE, SessionConfigJWS, SessionData, SessionHooksJWE, SessionHooksJWS, SessionJWE, SessionJWS, SessionManager, SessionUpdate };
@@ -133,6 +133,12 @@ function getJWESessionToken(event, config) {
133
133
  if (!token) {
134
134
  token = getChunkedCookie(event, sessionName);
135
135
  }
136
+ if (!token && hasWritableResponse$1(event)) {
137
+ const setCookie = event.res.headers.get("set-cookie");
138
+ if (typeof setCookie === "string") {
139
+ token = findSetCookie$1(setCookie, sessionName);
140
+ }
141
+ }
136
142
  return token;
137
143
  }
138
144
  async function updateJWESession(event, config, update) {
@@ -298,6 +304,11 @@ function getDecryptKey(key) {
298
304
  }
299
305
  return _key;
300
306
  }
307
+ function findSetCookie$1(setCookie, name) {
308
+ const regex = new RegExp(`(?:^|,\\s*)${name}=([^;]+)`);
309
+ const match = setCookie.match(regex);
310
+ return match ? match[1] : void 0;
311
+ }
301
312
 
302
313
  const kGetSessionPromise = Symbol("h3_jws_getSession");
303
314
  const DEFAULT_NAME = "h3-jws";
@@ -424,6 +435,12 @@ function getJWSSessionToken(event, config) {
424
435
  if (!token) {
425
436
  token = getChunkedCookie(event, sessionName);
426
437
  }
438
+ if (!token && hasWritableResponse(event)) {
439
+ const setCookie = event.res.headers.get("set-cookie");
440
+ if (typeof setCookie === "string") {
441
+ token = findSetCookie(setCookie, sessionName);
442
+ }
443
+ }
427
444
  return token;
428
445
  }
429
446
  async function updateJWSSession(event, config, update) {
@@ -596,5 +613,10 @@ function getVerifyKey(key) {
596
613
  }
597
614
  return _key;
598
615
  }
616
+ function findSetCookie(setCookie, name) {
617
+ const regex = new RegExp(`(?:^|,\\s*)${name}=([^;]+)`);
618
+ const match = setCookie.match(regex);
619
+ return match ? match[1] : void 0;
620
+ }
599
621
 
600
622
  export { clearJWESession, clearJWSSession, getJWESession, getJWESessionToken, getJWSSession, getJWSSessionToken, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
package/dist/index.d.mts CHANGED
@@ -1,7 +1,8 @@
1
1
  export { C as CompositeKey, f as ContentEncryptionAlgorithm, D as DeriveKeyOptions, e as DeriveKeyReturn, E as ExpiresIn, c as GenerateJWKOptions, d as GenerateJWKReturn, G as GenerateKeyAlgorithm, a as GenerateKeyOptions, b as GenerateKeyReturn, v as JWK, S as JWKAlgorithm, T as JWKPEMAlgorithm, J as JWKParameters, w as JWKSet, I as JWK_AES_CBC_HMAC, L as JWK_AES_GCM, H as JWK_AES_GCM_KW, F as JWK_AES_KW, s as JWK_Asymmetric, R as JWK_Asymmetric_Algorithm, j as JWK_EC, O as JWK_ECDH_ES, A as JWK_ECDSA, i as JWK_EC_Private, h as JWK_EC_Public, x as JWK_HMAC, p as JWK_OKP, o as JWK_OKP_Private, n as JWK_OKP_Public, P as JWK_OKP_SIGN, N as JWK_PBES2, u as JWK_Private, t as JWK_Public, m as JWK_RSA, B as JWK_RSA_ENC, z as JWK_RSA_PSS, l as JWK_RSA_Private, k as JWK_RSA_Public, y as JWK_RSA_SIGN, r as JWK_Symmetric, Q as JWK_Symmetric_Algorithm, q as JWK_oct, Y as JWT, Z as JWTClaimValidationOptions, X as JWTClaims, V as JoseHeaderParameters, K as KeyManagementAlgorithm, M as MaxTokenAge, U as UnwrapKeyOptions, W as WrapKeyOptions, g as WrapKeyResult } from './shared/unjwt.CtHrClHc.mjs';
2
- export { i as utils } from './shared/unjwt.BrNGm4On.mjs';
3
- export { j as jwe } from './shared/unjwt.VUfJDcCJ.mjs';
2
+ export { i as utils } from './shared/unjwt.CkkdXjZD.mjs';
3
+ export { j as jwe } from './shared/unjwt.B9nv94SS.mjs';
4
4
  export { j as jwk } from './shared/unjwt.BjP_dGnX.mjs';
5
5
  export { j as jws } from './shared/unjwt.C5jNR_1K.mjs';
6
6
  export { J as JWSAlgorithm, a as JWSHeaderParameters, f as JWSKeyLookupFunction, b as JWSProtectedHeader, c as JWSSignOptions, e as JWSVerifyOptions, d as JWSVerifyResult } from './shared/unjwt.BsLgL0DQ.mjs';
7
- export { d as JWEDecryptOptions, e as JWEDecryptResult, b as JWEEncryptOptions, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from './shared/unjwt.9mL1vSFP.mjs';
7
+ export { d as JWEDecryptOptions, e as JWEDecryptResult, b as JWEEncryptOptions, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from './shared/unjwt.BU3IrsCv.mjs';
8
+ import './shared/unjwt.JdKqVANs.mjs';
package/dist/jwe.d.mts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { C as CompositeKey, f as ContentEncryptionAlgorithm, D as DeriveKeyOptions, e as DeriveKeyReturn, c as GenerateJWKOptions, d as GenerateJWKReturn, G as GenerateKeyAlgorithm, a as GenerateKeyOptions, b as GenerateKeyReturn, v as JWK, S as JWKAlgorithm, T as JWKPEMAlgorithm, J as JWKParameters, w as JWKSet, I as JWK_AES_CBC_HMAC, L as JWK_AES_GCM, H as JWK_AES_GCM_KW, F as JWK_AES_KW, s as JWK_Asymmetric, R as JWK_Asymmetric_Algorithm, j as JWK_EC, O as JWK_ECDH_ES, A as JWK_ECDSA, i as JWK_EC_Private, h as JWK_EC_Public, x as JWK_HMAC, p as JWK_OKP, o as JWK_OKP_Private, n as JWK_OKP_Public, P as JWK_OKP_SIGN, N as JWK_PBES2, u as JWK_Private, t as JWK_Public, m as JWK_RSA, B as JWK_RSA_ENC, z as JWK_RSA_PSS, l as JWK_RSA_Private, k as JWK_RSA_Public, y as JWK_RSA_SIGN, r as JWK_Symmetric, Q as JWK_Symmetric_Algorithm, q as JWK_oct, Y as JWT, Z as JWTClaimValidationOptions, X as JWTClaims, V as JoseHeaderParameters, K as KeyManagementAlgorithm, U as UnwrapKeyOptions, W as WrapKeyOptions, g as WrapKeyResult } from './shared/unjwt.CtHrClHc.mjs';
2
- export { d as JWEDecryptOptions, e as JWEDecryptResult, b as JWEEncryptOptions, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from './shared/unjwt.9mL1vSFP.mjs';
3
- export { d as decrypt, e as encrypt } from './shared/unjwt.VUfJDcCJ.mjs';
2
+ export { d as JWEDecryptOptions, e as JWEDecryptResult, b as JWEEncryptOptions, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from './shared/unjwt.BU3IrsCv.mjs';
3
+ export { d as decrypt, e as encrypt } from './shared/unjwt.B9nv94SS.mjs';
4
+ import './shared/unjwt.JdKqVANs.mjs';
@@ -1,5 +1,5 @@
1
1
  import { X as JWTClaims, v as JWK, K as KeyManagementAlgorithm, f as ContentEncryptionAlgorithm, r as JWK_Symmetric, u as JWK_Private, C as CompositeKey, D as DeriveKeyOptions, e as DeriveKeyReturn, c as GenerateJWKOptions, d as GenerateJWKReturn, G as GenerateKeyAlgorithm, a as GenerateKeyOptions, b as GenerateKeyReturn, S as JWKAlgorithm, T as JWKPEMAlgorithm, J as JWKParameters, w as JWKSet, I as JWK_AES_CBC_HMAC, L as JWK_AES_GCM, H as JWK_AES_GCM_KW, F as JWK_AES_KW, s as JWK_Asymmetric, R as JWK_Asymmetric_Algorithm, j as JWK_EC, O as JWK_ECDH_ES, A as JWK_ECDSA, i as JWK_EC_Private, h as JWK_EC_Public, x as JWK_HMAC, p as JWK_OKP, o as JWK_OKP_Private, n as JWK_OKP_Public, P as JWK_OKP_SIGN, N as JWK_PBES2, t as JWK_Public, m as JWK_RSA, B as JWK_RSA_ENC, z as JWK_RSA_PSS, l as JWK_RSA_Private, k as JWK_RSA_Public, y as JWK_RSA_SIGN, Q as JWK_Symmetric_Algorithm, q as JWK_oct, Y as JWT, Z as JWTClaimValidationOptions, V as JoseHeaderParameters, U as UnwrapKeyOptions, W as WrapKeyOptions, g as WrapKeyResult } from './unjwt.CtHrClHc.mjs';
2
- import { b as JWEEncryptOptions, c as JWEKeyLookupFunction, d as JWEDecryptOptions, e as JWEDecryptResult, J as JWEHeaderParameters, a as JWEKeyManagementHeaderParameters } from './unjwt.9mL1vSFP.mjs';
2
+ import { b as JWEEncryptOptions, c as JWEKeyLookupFunction, d as JWEDecryptOptions, e as JWEDecryptResult, J as JWEHeaderParameters, a as JWEKeyManagementHeaderParameters } from './unjwt.BU3IrsCv.mjs';
3
3
 
4
4
  /**
5
5
  * Encrypts a payload to produce a JWE Compact Serialization string.
@@ -1,4 +1,5 @@
1
1
  import { K as KeyManagementAlgorithm, f as ContentEncryptionAlgorithm, E as ExpiresIn, V as JoseHeaderParameters, h as JWK_EC_Public, i as JWK_EC_Private, v as JWK, Z as JWTClaimValidationOptions, X as JWTClaims } from './unjwt.CtHrClHc.mjs';
2
+ import { S as StrictOmit } from './unjwt.JdKqVANs.mjs';
2
3
 
3
4
  /** Recognized JWE Header Parameters, any other Header Members may also be present. */
4
5
  interface JWEHeaderParameters extends JoseHeaderParameters {
@@ -79,7 +80,7 @@ interface JWEEncryptOptions {
79
80
  /** Time at which the JWT should expire, if no `exp` was already provided (only when typ is "JWT" or explicitly parsing JWT). */
80
81
  expiresIn?: ExpiresIn;
81
82
  /** Additional JWE Protected Header parameters. */
82
- protectedHeader?: Omit<JWEHeaderParameters, "alg" | "enc" | "iv" | "tag" | "p2s" | "p2c" | "epk" | "apu" | "apv">;
83
+ protectedHeader?: StrictOmit<JWEHeaderParameters, "alg" | "enc" | "iv" | "tag" | "p2s" | "p2c" | "epk" | "apu" | "apv">;
83
84
  /** Initialization Vector for AES-GCMKW key wrapping. Generated if not provided. */
84
85
  keyManagementIV?: Uint8Array<ArrayBuffer>;
85
86
  /** PBES2 Salt value (p2s). Required for PBES2 algorithms. */
@@ -1,4 +1,5 @@
1
1
  import { E as ExpiresIn, X as JWTClaims, Z as JWTClaimValidationOptions, v as JWK, w as JWKSet, q as JWK_oct, u as JWK_Private, t as JWK_Public } from './unjwt.CtHrClHc.mjs';
2
+ import { S as StrictOmit } from './unjwt.JdKqVANs.mjs';
2
3
 
3
4
  /**
4
5
  * Apply default typ/cty semantics shared by JWS & JWE.
@@ -101,6 +102,7 @@ declare function isPrivateJWK(key: unknown): key is JWK_Private;
101
102
  */
102
103
  declare function isPublicJWK(key: unknown): key is JWK_Public;
103
104
 
105
+ declare const index_StrictOmit: typeof StrictOmit;
104
106
  declare const index_applyTypCtyDefaults: typeof applyTypCtyDefaults;
105
107
  declare const index_assertCryptoKey: typeof assertCryptoKey;
106
108
  declare const index_base64Decode: typeof base64Decode;
@@ -134,6 +136,7 @@ declare const index_validateCriticalHeadersJWS: typeof validateCriticalHeadersJW
134
136
  declare const index_validateJwtClaims: typeof validateJwtClaims;
135
137
  declare namespace index {
136
138
  export {
139
+ index_StrictOmit as StrictOmit,
137
140
  index_applyTypCtyDefaults as applyTypCtyDefaults,
138
141
  index_assertCryptoKey as assertCryptoKey,
139
142
  index_base64Decode as base64Decode,
@@ -0,0 +1,5 @@
1
+ type StrictOmit<T, K extends keyof T | (string & {}) | (number & {}) | (symbol & {})> = {
2
+ [P in keyof T as P extends K ? never : P]: T[P];
3
+ };
4
+
5
+ export type { StrictOmit as S };
package/dist/utils.d.mts CHANGED
@@ -1,2 +1,3 @@
1
1
  import './shared/unjwt.CtHrClHc.mjs';
2
- export { s as applyTypCtyDefaults, j as assertCryptoKey, d as base64Decode, b as base64Encode, e as base64UrlDecode, c as base64UrlEncode, z as computeExpiresInSeconds, B as computeJwtTimeClaims, A as computeMaxTokenAgeSeconds, f as concatUint8Arrays, v as decodeMaybeJWTString, x as decodePayloadFromB64UrlSegment, w as decodePayloadFromBytes, y as getPlaintextBytes, o as isAsymmetricJWK, k as isCryptoKey, l as isCryptoKeyPair, g as isJWK, h as isJWKSet, u as isJWTContent, p as isPrivateJWK, q as isPublicJWK, n as isSymmetricJWK, m as maybeArray, r as randomBytes, F as sanitizeObject, a as textDecoder, t as textEncoder, E as validateCriticalHeadersJWE, D as validateCriticalHeadersJWS, C as validateJwtClaims } from './shared/unjwt.BrNGm4On.mjs';
2
+ export { S as StrictOmit } from './shared/unjwt.JdKqVANs.mjs';
3
+ export { s as applyTypCtyDefaults, j as assertCryptoKey, d as base64Decode, b as base64Encode, e as base64UrlDecode, c as base64UrlEncode, z as computeExpiresInSeconds, B as computeJwtTimeClaims, A as computeMaxTokenAgeSeconds, f as concatUint8Arrays, v as decodeMaybeJWTString, x as decodePayloadFromB64UrlSegment, w as decodePayloadFromBytes, y as getPlaintextBytes, o as isAsymmetricJWK, k as isCryptoKey, l as isCryptoKeyPair, g as isJWK, h as isJWKSet, u as isJWTContent, p as isPrivateJWK, q as isPublicJWK, n as isSymmetricJWK, m as maybeArray, r as randomBytes, F as sanitizeObject, a as textDecoder, t as textEncoder, E as validateCriticalHeadersJWE, D as validateCriticalHeadersJWS, C as validateJwtClaims } from './shared/unjwt.CkkdXjZD.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unjwt",
3
- "version": "0.5.30",
3
+ "version": "0.5.32",
4
4
  "description": "Low-level JWT utilities",
5
5
  "repository": "sandros94/unjwt",
6
6
  "license": "MIT",
@@ -56,7 +56,7 @@
56
56
  "lint": "eslint . && prettier -c .",
57
57
  "lint:fix": "automd && eslint . --fix && prettier -w .",
58
58
  "prepack": "pnpm build",
59
- "release": "pnpm test && pnpm prepack && changelogen --release --push --publish",
59
+ "release": "pnpm test && pnpm prepack && changelogen --release --push",
60
60
  "test": "pnpm lint && pnpm test:types && vitest run --slowTestThreshold=1000",
61
61
  "test:coverage": "pnpm lint && pnpm test:types && vitest run --coverage --slowTestThreshold=1000",
62
62
  "test:types": "tsc --noEmit --skipLibCheck",