unjwt 0.5.28 → 0.5.30
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/dist/adapters/h3.d.mts +26 -26
- package/dist/adapters/h3.mjs +59 -41
- package/dist/adapters/h3v1.d.mts +1 -1
- package/dist/adapters/h3v1.mjs +5 -5
- package/dist/adapters/h3v2.d.mts +27 -26
- package/dist/adapters/h3v2.mjs +53 -33
- package/dist/index.mjs +4 -4
- package/dist/jwe.mjs +3 -3
- package/dist/jwk.mjs +2 -2
- package/dist/jws.mjs +3 -3
- package/dist/shared/{unjwt.C86hA0o-.mjs → unjwt.Be8NxwFK.mjs} +1 -1
- package/dist/shared/{unjwt.D-FATaw1.mjs → unjwt.DQVUT7FU.mjs} +2 -2
- package/dist/shared/{unjwt.epPK1KFr.mjs → unjwt.DyouTtLD.mjs} +1 -1
- package/dist/shared/{unjwt.CiBEuvtQ.mjs → unjwt.KqQq9jpF.mjs} +2 -2
- package/dist/utils.mjs +1 -1
- package/package.json +1 -1
package/dist/adapters/h3.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { b as JWEEncryptOptions } from '../shared/unjwt.9mL1vSFP.mjs';
|
|
2
2
|
export { d as JWEDecryptOptions, e as JWEDecryptResult, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from '../shared/unjwt.9mL1vSFP.mjs';
|
|
3
|
-
import { X as JWTClaims, r as JWK_Symmetric, u as JWK_Private, t as JWK_Public, Z as JWTClaimValidationOptions, w as JWKSet } from '../shared/unjwt.CtHrClHc.mjs';
|
|
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
5
|
import { CookieSerializeOptions } from 'cookie-es';
|
|
6
6
|
import { H3Event } from 'h3';
|
|
@@ -9,13 +9,12 @@ export { d as deriveJWKFromPassword, e as exportJWKToPEM, g as generateJWK, i as
|
|
|
9
9
|
|
|
10
10
|
type SessionData<T extends JWTClaims = JWTClaims> = Omit<T, "jti" | "iat" | "exp">;
|
|
11
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
|
|
12
|
+
interface SessionManager<T extends JWTClaims = JWTClaims, ConfigMaxAge extends ExpiresIn | undefined = number | undefined> {
|
|
13
13
|
readonly id: string | undefined;
|
|
14
14
|
readonly createdAt: number;
|
|
15
|
-
readonly expiresAt:
|
|
16
|
-
exp: number;
|
|
17
|
-
} ? number : ConfigMaxAge;
|
|
15
|
+
readonly expiresAt: ConfigMaxAge extends ExpiresIn ? number : T["exp"];
|
|
18
16
|
readonly data: SessionData<T>;
|
|
17
|
+
readonly token: string | undefined;
|
|
19
18
|
update: (update: SessionUpdate<T>) => Promise<SessionManager<T>>;
|
|
20
19
|
clear: () => Promise<SessionManager<T>>;
|
|
21
20
|
}
|
|
@@ -27,14 +26,14 @@ interface SessionManager<T extends JWTClaims = JWTClaims, ConfigMaxAge extends n
|
|
|
27
26
|
*/
|
|
28
27
|
|
|
29
28
|
declare const kGetSessionPromise$1: unique symbol;
|
|
30
|
-
interface SessionJWE<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
29
|
+
interface SessionJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
31
30
|
id: string;
|
|
32
31
|
createdAt: number;
|
|
33
|
-
expiresAt: MaxAge extends
|
|
32
|
+
expiresAt: MaxAge extends ExpiresIn ? number : T["exp"];
|
|
34
33
|
data: SessionData<T>;
|
|
35
34
|
[kGetSessionPromise$1]?: Promise<SessionJWE<T, MaxAge>>;
|
|
36
35
|
}
|
|
37
|
-
interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
36
|
+
interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
38
37
|
onRead?: (args: {
|
|
39
38
|
session: SessionJWE<T, MaxAge>;
|
|
40
39
|
event: H3Event;
|
|
@@ -60,7 +59,7 @@ interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends number
|
|
|
60
59
|
config: SessionConfigJWE<T, MaxAge>;
|
|
61
60
|
}) => void | Promise<void>;
|
|
62
61
|
}
|
|
63
|
-
interface SessionConfigJWE<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
62
|
+
interface SessionConfigJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
64
63
|
/** @deprecated use `key` instead */
|
|
65
64
|
secret?: string | JWK_Symmetric | {
|
|
66
65
|
privateKey: JWK_Private | JWK_Symmetric;
|
|
@@ -104,15 +103,16 @@ type CompatEvent$1 = {
|
|
|
104
103
|
/**
|
|
105
104
|
* Create a session manager for the current request.
|
|
106
105
|
*/
|
|
107
|
-
declare function useJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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>>;
|
|
108
107
|
/**
|
|
109
108
|
* Get (and lazily initialize) the session for the current request.
|
|
110
109
|
*/
|
|
111
|
-
declare function getJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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;
|
|
112
112
|
/**
|
|
113
113
|
* Update the session (optionally mutating the session data) and re-issue the JWE token.
|
|
114
114
|
*/
|
|
115
|
-
declare function updateJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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>>;
|
|
116
116
|
/**
|
|
117
117
|
* Produce a JWE for the current session.
|
|
118
118
|
* Payload structure:
|
|
@@ -123,15 +123,15 @@ declare function updateJWESession<T extends JWTClaims = JWTClaims, MaxAge extend
|
|
|
123
123
|
* data: Record<string, any>;
|
|
124
124
|
* }
|
|
125
125
|
*/
|
|
126
|
-
declare function sealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
126
|
+
declare function sealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent$1, config: SessionConfigJWE<T, MaxAge>): Promise<string>;
|
|
127
127
|
/**
|
|
128
128
|
* Decrypt the JWE and return a Session-compatible object.
|
|
129
129
|
*/
|
|
130
|
-
declare function unsealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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>>>;
|
|
131
131
|
/**
|
|
132
132
|
* Clear the session (delete from context and drop cookie).
|
|
133
133
|
*/
|
|
134
|
-
declare function clearJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
134
|
+
declare function clearJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: Partial<SessionConfigJWE<T, MaxAge>>): Promise<void>;
|
|
135
135
|
|
|
136
136
|
/**
|
|
137
137
|
* This is a fork of h3 library's session utility functions.
|
|
@@ -140,14 +140,14 @@ declare function clearJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
|
140
140
|
*/
|
|
141
141
|
|
|
142
142
|
declare const kGetSessionPromise: unique symbol;
|
|
143
|
-
interface SessionJWS<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
143
|
+
interface SessionJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
144
144
|
id: string;
|
|
145
145
|
createdAt: number;
|
|
146
|
-
expiresAt: MaxAge extends
|
|
146
|
+
expiresAt: MaxAge extends ExpiresIn ? number : T["exp"];
|
|
147
147
|
data: SessionData<T>;
|
|
148
148
|
[kGetSessionPromise]?: Promise<SessionJWS<T, MaxAge>>;
|
|
149
149
|
}
|
|
150
|
-
interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
150
|
+
interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
151
151
|
onRead?: (args: {
|
|
152
152
|
session: SessionJWS<T, MaxAge>;
|
|
153
153
|
event: H3Event;
|
|
@@ -173,7 +173,7 @@ interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends number
|
|
|
173
173
|
config: SessionConfigJWS<T, MaxAge>;
|
|
174
174
|
}) => void | Promise<void>;
|
|
175
175
|
}
|
|
176
|
-
interface SessionConfigJWS<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
176
|
+
interface SessionConfigJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
177
177
|
/**
|
|
178
178
|
* JWK (private for signing with RS/ES/PS, or symmetric oct) used for signing.
|
|
179
179
|
*/
|
|
@@ -215,21 +215,21 @@ type CompatEvent = {
|
|
|
215
215
|
* Create a session manager for the current request using JWS (signed only, not encrypted).
|
|
216
216
|
* NOTE: Contents are visible to clients (Base64URL-decoded JSON). Do not store secrets in session data.
|
|
217
217
|
*/
|
|
218
|
-
declare function useJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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>>;
|
|
219
219
|
/**
|
|
220
220
|
* Retrieve (and lazily initialize) the session.
|
|
221
221
|
*/
|
|
222
|
-
declare function getJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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>>;
|
|
223
223
|
/**
|
|
224
224
|
* Update session data (if provided) and reissue JWS.
|
|
225
225
|
*/
|
|
226
|
-
declare function updateJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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>>;
|
|
227
227
|
/**
|
|
228
228
|
* Sign current session as a compact JWS.
|
|
229
229
|
* Payload claims:
|
|
230
230
|
* jti, iat, exp?, data, plus optional extraClaims (cannot override reserved)
|
|
231
231
|
*/
|
|
232
|
-
declare function signJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
232
|
+
declare function signJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event | CompatEvent, config: SessionConfigJWS<T, MaxAge>): Promise<string>;
|
|
233
233
|
/**
|
|
234
234
|
* Verify and parse a compact JWS into a Session structure.
|
|
235
235
|
* Performs:
|
|
@@ -238,11 +238,11 @@ declare function signJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
|
238
238
|
* - ensures jti & iat presence
|
|
239
239
|
* - enforces maxAge if provided
|
|
240
240
|
*/
|
|
241
|
-
declare function verifyJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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>>>;
|
|
242
242
|
/**
|
|
243
243
|
* Destroy the session (context + cookie).
|
|
244
244
|
*/
|
|
245
|
-
declare function clearJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
245
|
+
declare function clearJWSSession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: H3Event, config: Partial<SessionConfigJWS<T, MaxAge>>): Promise<void>;
|
|
246
246
|
|
|
247
|
-
export { JWEEncryptOptions, JWKSet, JWK_Private, JWK_Public, JWK_Symmetric, JWTClaimValidationOptions, JWTClaims, clearJWESession, clearJWSSession, getJWESession, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
|
|
247
|
+
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
248
|
export type { SessionConfigJWE, SessionConfigJWS, SessionData, SessionHooksJWE, SessionHooksJWS, SessionJWE, SessionJWEConfig, SessionJWS, SessionJWSConfig, SessionManager, SessionUpdate };
|
package/dist/adapters/h3.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { k as deriveJWKFromPassword, h as exportJWKToPEM, c as generateJWK, f as importJWKFromPEM } from '../shared/unjwt.
|
|
1
|
+
export { k as deriveJWKFromPassword, h as exportJWKToPEM, c as generateJWK, f as importJWKFromPEM } from '../shared/unjwt.DyouTtLD.mjs';
|
|
2
2
|
import { isEvent, setCookie } from 'h3';
|
|
3
3
|
import { parse } from 'cookie-es';
|
|
4
|
-
import { e as encrypt, d as decrypt } from '../shared/unjwt.
|
|
5
|
-
import { p as
|
|
6
|
-
import { s as sign, v as verify } from '../shared/unjwt.
|
|
4
|
+
import { e as encrypt, d as decrypt } from '../shared/unjwt.KqQq9jpF.mjs';
|
|
5
|
+
import { p as computeExpiresInSeconds, q as isSymmetricJWK, u as isPrivateJWK, w as isPublicJWK } from '../shared/unjwt.Be8NxwFK.mjs';
|
|
6
|
+
import { s as sign, v as verify } from '../shared/unjwt.DQVUT7FU.mjs';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* This is a fork of h3 library's session utility functions.
|
|
@@ -33,6 +33,9 @@ async function useJWESession(event, config) {
|
|
|
33
33
|
get data() {
|
|
34
34
|
return event.context.sessions?.[sessionName]?.data || {};
|
|
35
35
|
},
|
|
36
|
+
get token() {
|
|
37
|
+
return getJWESessionToken(event, config);
|
|
38
|
+
},
|
|
36
39
|
update: async (update) => {
|
|
37
40
|
if (!isEvent(event)) {
|
|
38
41
|
throw new Error("[h3] Cannot update read-only session.");
|
|
@@ -84,20 +87,7 @@ async function getJWESession(event, config) {
|
|
|
84
87
|
data: /* @__PURE__ */ Object.create(null)
|
|
85
88
|
};
|
|
86
89
|
event.context.sessions[sessionName] = session;
|
|
87
|
-
|
|
88
|
-
if (config.sessionHeader !== false) {
|
|
89
|
-
const headerName = typeof config.sessionHeader === "string" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;
|
|
90
|
-
const headerValue = _getReqHeader$1(event, headerName);
|
|
91
|
-
if (typeof headerValue === "string") {
|
|
92
|
-
token = headerValue.startsWith("Bearer ") ? headerValue.slice(7).trim() : headerValue;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (!token) {
|
|
96
|
-
const cookieHeader = _getReqHeader$1(event, "cookie");
|
|
97
|
-
if (cookieHeader) {
|
|
98
|
-
token = parse(String(cookieHeader))[sessionName];
|
|
99
|
-
}
|
|
100
|
-
}
|
|
90
|
+
const token = getJWESessionToken(event, config);
|
|
101
91
|
if (token) {
|
|
102
92
|
const promise = unsealJWESession(event, config, token).catch(async (error_) => {
|
|
103
93
|
if (error_ instanceof Error && (error_.message.includes("Token has expired") || error_.message.includes("Token is too old"))) {
|
|
@@ -132,7 +122,7 @@ async function getJWESession(event, config) {
|
|
|
132
122
|
}
|
|
133
123
|
session.id = config.generateId?.() ?? crypto.randomUUID();
|
|
134
124
|
session.createdAt = config.jwe?.encryptOptions?.currentDate?.getTime() ?? Date.now();
|
|
135
|
-
session.expiresAt = config.maxAge ? session.createdAt + config.maxAge * 1e3
|
|
125
|
+
session.expiresAt = config.maxAge === void 0 ? void 0 : session.createdAt + computeExpiresInSeconds(config.maxAge) * 1e3;
|
|
136
126
|
await updateJWESession(event, config);
|
|
137
127
|
}
|
|
138
128
|
await config.hooks?.onRead?.({
|
|
@@ -142,6 +132,24 @@ async function getJWESession(event, config) {
|
|
|
142
132
|
});
|
|
143
133
|
return session;
|
|
144
134
|
}
|
|
135
|
+
function getJWESessionToken(event, config) {
|
|
136
|
+
const sessionName = config.name || DEFAULT_NAME$1;
|
|
137
|
+
let token;
|
|
138
|
+
if (config.sessionHeader !== false) {
|
|
139
|
+
const headerName = typeof config.sessionHeader === "string" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;
|
|
140
|
+
const headerValue = _getReqHeader$1(event, headerName);
|
|
141
|
+
if (typeof headerValue === "string") {
|
|
142
|
+
token = headerValue.startsWith("Bearer ") ? headerValue.slice(7).trim() : headerValue;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (!token) {
|
|
146
|
+
const cookieHeader = _getReqHeader$1(event, "cookie");
|
|
147
|
+
if (cookieHeader) {
|
|
148
|
+
token = parse(String(cookieHeader))[sessionName];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return token;
|
|
152
|
+
}
|
|
145
153
|
function _getReqHeader$1(event, name) {
|
|
146
154
|
if (event.node) {
|
|
147
155
|
return event.node?.req.headers[name];
|
|
@@ -172,10 +180,10 @@ async function updateJWESession(event, config, update) {
|
|
|
172
180
|
setCookie(event, sessionName, sealed, {
|
|
173
181
|
...DEFAULT_COOKIE$1,
|
|
174
182
|
...config.cookie,
|
|
175
|
-
expires: config.maxAge ? new Date(
|
|
183
|
+
expires: config.maxAge === void 0 ? void 0 : new Date(
|
|
176
184
|
// createdAt is ms, maxAge is seconds
|
|
177
|
-
session.createdAt + config.maxAge * 1e3
|
|
178
|
-
)
|
|
185
|
+
session.createdAt + computeExpiresInSeconds(config.maxAge) * 1e3
|
|
186
|
+
)
|
|
179
187
|
});
|
|
180
188
|
}
|
|
181
189
|
return session;
|
|
@@ -185,7 +193,7 @@ async function sealJWESession(event, config) {
|
|
|
185
193
|
const sessionName = config.name || DEFAULT_NAME$1;
|
|
186
194
|
const session = event.context.sessions?.[sessionName] || await getJWESession(event, config);
|
|
187
195
|
const iatSeconds = Math.floor(session.createdAt / 1e3);
|
|
188
|
-
const expSeconds = config.maxAge
|
|
196
|
+
const expSeconds = config.maxAge === void 0 ? void 0 : iatSeconds + computeExpiresInSeconds(config.maxAge);
|
|
189
197
|
const payload = {
|
|
190
198
|
...session.data,
|
|
191
199
|
jti: session.id,
|
|
@@ -337,6 +345,9 @@ async function useJWSSession(event, config) {
|
|
|
337
345
|
get data() {
|
|
338
346
|
return event.context.sessions?.[sessionName]?.data || {};
|
|
339
347
|
},
|
|
348
|
+
get token() {
|
|
349
|
+
return getJWSSessionToken(event, config);
|
|
350
|
+
},
|
|
340
351
|
update: async (update) => {
|
|
341
352
|
if (!isEvent(event)) {
|
|
342
353
|
throw new Error("[h3] Cannot update read-only session.");
|
|
@@ -388,20 +399,7 @@ async function getJWSSession(event, config) {
|
|
|
388
399
|
data: /* @__PURE__ */ Object.create(null)
|
|
389
400
|
};
|
|
390
401
|
event.context.sessions[sessionName] = session;
|
|
391
|
-
|
|
392
|
-
if (config.sessionHeader !== false) {
|
|
393
|
-
const headerName = typeof config.sessionHeader === "string" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;
|
|
394
|
-
const headerValue = _getReqHeader(event, headerName);
|
|
395
|
-
if (typeof headerValue === "string") {
|
|
396
|
-
token = headerValue.startsWith("Bearer ") ? headerValue.slice(7).trim() : headerValue;
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
if (!token) {
|
|
400
|
-
const cookieHeader = _getReqHeader(event, "cookie");
|
|
401
|
-
if (cookieHeader) {
|
|
402
|
-
token = parse(String(cookieHeader))[sessionName];
|
|
403
|
-
}
|
|
404
|
-
}
|
|
402
|
+
const token = getJWSSessionToken(event, config);
|
|
405
403
|
if (token) {
|
|
406
404
|
const promise = verifyJWSSession(event, config, token).catch(async (error_) => {
|
|
407
405
|
if (error_ instanceof Error && (error_.message.includes("Token has expired") || error_.message.includes("Token is too old"))) {
|
|
@@ -436,7 +434,7 @@ async function getJWSSession(event, config) {
|
|
|
436
434
|
}
|
|
437
435
|
session.id = config.generateId?.() ?? crypto.randomUUID();
|
|
438
436
|
session.createdAt = config.jws?.signOptions?.currentDate?.getTime() ?? Date.now();
|
|
439
|
-
session.expiresAt = config.maxAge ? session.createdAt + config.maxAge * 1e3
|
|
437
|
+
session.expiresAt = config.maxAge === void 0 ? void 0 : session.createdAt + computeExpiresInSeconds(config.maxAge) * 1e3;
|
|
440
438
|
await updateJWSSession(event, config);
|
|
441
439
|
}
|
|
442
440
|
await config.hooks?.onRead?.({
|
|
@@ -446,6 +444,24 @@ async function getJWSSession(event, config) {
|
|
|
446
444
|
});
|
|
447
445
|
return session;
|
|
448
446
|
}
|
|
447
|
+
function getJWSSessionToken(event, config) {
|
|
448
|
+
const sessionName = config.name || DEFAULT_NAME;
|
|
449
|
+
let token;
|
|
450
|
+
if (config.sessionHeader !== false) {
|
|
451
|
+
const headerName = typeof config.sessionHeader === "string" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;
|
|
452
|
+
const headerValue = _getReqHeader(event, headerName);
|
|
453
|
+
if (typeof headerValue === "string") {
|
|
454
|
+
token = headerValue.startsWith("Bearer ") ? headerValue.slice(7).trim() : headerValue;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
if (!token) {
|
|
458
|
+
const cookieHeader = _getReqHeader(event, "cookie");
|
|
459
|
+
if (cookieHeader) {
|
|
460
|
+
token = parse(String(cookieHeader))[sessionName];
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return token;
|
|
464
|
+
}
|
|
449
465
|
function _getReqHeader(event, name) {
|
|
450
466
|
if (event.node) {
|
|
451
467
|
return event.node.req.headers[name];
|
|
@@ -476,7 +492,9 @@ async function updateJWSSession(event, config, update) {
|
|
|
476
492
|
setCookie(event, sessionName, token, {
|
|
477
493
|
...DEFAULT_COOKIE,
|
|
478
494
|
...config.cookie,
|
|
479
|
-
expires: config.maxAge
|
|
495
|
+
expires: config.maxAge === void 0 ? void 0 : new Date(
|
|
496
|
+
session.createdAt + computeExpiresInSeconds(config.maxAge) * 1e3
|
|
497
|
+
)
|
|
480
498
|
});
|
|
481
499
|
}
|
|
482
500
|
return session;
|
|
@@ -486,7 +504,7 @@ async function signJWSSession(event, config) {
|
|
|
486
504
|
const sessionName = config.name || DEFAULT_NAME;
|
|
487
505
|
const session = event.context.sessions?.[sessionName] || await getJWSSession(event, config);
|
|
488
506
|
const iatSeconds = Math.floor(session.createdAt / 1e3);
|
|
489
|
-
const expSeconds = config.maxAge
|
|
507
|
+
const expSeconds = config.maxAge === void 0 ? void 0 : iatSeconds + computeExpiresInSeconds(config.maxAge);
|
|
490
508
|
const payload = {
|
|
491
509
|
...session.data,
|
|
492
510
|
jti: session.id,
|
|
@@ -603,4 +621,4 @@ function getVerifyKey(key) {
|
|
|
603
621
|
return _key;
|
|
604
622
|
}
|
|
605
623
|
|
|
606
|
-
export { clearJWESession, clearJWSSession, getJWESession, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
|
|
624
|
+
export { clearJWESession, clearJWSSession, getJWESession, getJWESessionToken, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
|
package/dist/adapters/h3v1.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
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';
|
|
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, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession } from './h3.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';
|
|
4
4
|
export { d as deriveJWKFromPassword, e as exportJWKToPEM, g as generateJWK, i as importJWKFromPEM } from '../shared/unjwt.BjP_dGnX.mjs';
|
|
5
5
|
import 'cookie-es';
|
|
6
6
|
import 'h3';
|
package/dist/adapters/h3v1.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { k as deriveJWKFromPassword, h as exportJWKToPEM, c as generateJWK, f as importJWKFromPEM } from '../shared/unjwt.
|
|
2
|
-
export { clearJWESession, clearJWSSession, getJWESession, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession } from './h3.mjs';
|
|
3
|
-
import '../shared/unjwt.
|
|
1
|
+
export { k as deriveJWKFromPassword, h as exportJWKToPEM, c as generateJWK, f as importJWKFromPEM } from '../shared/unjwt.DyouTtLD.mjs';
|
|
2
|
+
export { clearJWESession, clearJWSSession, getJWESession, getJWESessionToken, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession } from './h3.mjs';
|
|
3
|
+
import '../shared/unjwt.Be8NxwFK.mjs';
|
|
4
4
|
import 'h3';
|
|
5
5
|
import 'cookie-es';
|
|
6
|
-
import '../shared/unjwt.
|
|
7
|
-
import '../shared/unjwt.
|
|
6
|
+
import '../shared/unjwt.KqQq9jpF.mjs';
|
|
7
|
+
import '../shared/unjwt.DQVUT7FU.mjs';
|
package/dist/adapters/h3v2.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { b as JWEEncryptOptions } from '../shared/unjwt.9mL1vSFP.mjs';
|
|
2
2
|
export { d as JWEDecryptOptions, e as JWEDecryptResult, J as JWEHeaderParameters, c as JWEKeyLookupFunction, a as JWEKeyManagementHeaderParameters } from '../shared/unjwt.9mL1vSFP.mjs';
|
|
3
|
-
import { X as JWTClaims, r as JWK_Symmetric, u as JWK_Private, t as JWK_Public, Z as JWTClaimValidationOptions, w as JWKSet } from '../shared/unjwt.CtHrClHc.mjs';
|
|
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
5
|
import { HTTPEvent } from 'h3';
|
|
6
6
|
import { CookieSerializeOptions } from 'cookie-es';
|
|
@@ -9,26 +9,25 @@ export { d as deriveJWKFromPassword, e as exportJWKToPEM, g as generateJWK, i as
|
|
|
9
9
|
|
|
10
10
|
type SessionData<T extends JWTClaims = JWTClaims> = Omit<T, "jti" | "iat" | "exp">;
|
|
11
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
|
|
12
|
+
interface SessionManager<T extends JWTClaims = JWTClaims, ConfigMaxAge extends ExpiresIn | undefined = number | undefined> {
|
|
13
13
|
readonly id: string | undefined;
|
|
14
14
|
readonly createdAt: number;
|
|
15
|
-
readonly expiresAt:
|
|
16
|
-
exp: number;
|
|
17
|
-
} ? number : ConfigMaxAge;
|
|
15
|
+
readonly expiresAt: ConfigMaxAge extends ExpiresIn ? number : T["exp"];
|
|
18
16
|
readonly data: SessionData<T>;
|
|
17
|
+
readonly token: string | undefined;
|
|
19
18
|
update: (update: SessionUpdate<T>) => Promise<SessionManager<T>>;
|
|
20
19
|
clear: () => Promise<SessionManager<T>>;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
declare const kGetSessionPromise$1: unique symbol;
|
|
24
|
-
interface SessionJWE<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
23
|
+
interface SessionJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
25
24
|
id: string;
|
|
26
25
|
createdAt: number;
|
|
27
|
-
expiresAt: MaxAge extends
|
|
26
|
+
expiresAt: MaxAge extends ExpiresIn ? number : T["exp"];
|
|
28
27
|
data: SessionData<T>;
|
|
29
28
|
[kGetSessionPromise$1]?: Promise<SessionJWE<T, MaxAge>>;
|
|
30
29
|
}
|
|
31
|
-
interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
30
|
+
interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
32
31
|
onRead?: (args: {
|
|
33
32
|
session: SessionJWE<T, MaxAge>;
|
|
34
33
|
event: HTTPEvent;
|
|
@@ -54,7 +53,7 @@ interface SessionHooksJWE<T extends JWTClaims = JWTClaims, MaxAge extends number
|
|
|
54
53
|
config: SessionConfigJWE<T, MaxAge>;
|
|
55
54
|
}) => void | Promise<void>;
|
|
56
55
|
}
|
|
57
|
-
interface SessionConfigJWE<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
56
|
+
interface SessionConfigJWE<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
58
57
|
/** Shared secret used, string for PBES2 or Json Web Key (JWK) */
|
|
59
58
|
key: string | JWK_Symmetric | {
|
|
60
59
|
privateKey: JWK_Private | JWK_Symmetric;
|
|
@@ -82,37 +81,38 @@ interface SessionConfigJWE<T extends JWTClaims = JWTClaims, MaxAge extends numbe
|
|
|
82
81
|
/**
|
|
83
82
|
* Create a session manager for the current request.
|
|
84
83
|
*/
|
|
85
|
-
declare function useJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
84
|
+
declare function useJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): Promise<SessionManager<T, MaxAge>>;
|
|
86
85
|
/**
|
|
87
86
|
* Get the session for the current request.
|
|
88
87
|
*/
|
|
89
|
-
declare function getJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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;
|
|
90
90
|
/**
|
|
91
91
|
* Update the session data for the current request.
|
|
92
92
|
*/
|
|
93
|
-
declare function updateJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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>>;
|
|
94
94
|
/**
|
|
95
95
|
* Produce a JWE for the current session.
|
|
96
96
|
*/
|
|
97
|
-
declare function sealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
97
|
+
declare function sealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined>(event: HTTPEvent, config: SessionConfigJWE<T, MaxAge>): Promise<string>;
|
|
98
98
|
/**
|
|
99
99
|
* Decrypt the JWE and return a Session-compatible object.
|
|
100
100
|
*/
|
|
101
|
-
declare function unsealJWESession<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
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>>>;
|
|
102
102
|
/**
|
|
103
103
|
* Clear the session (delete from context and drop cookie).
|
|
104
104
|
*/
|
|
105
|
-
declare function clearJWESession<T extends JWTClaims, MaxAge extends
|
|
105
|
+
declare function clearJWESession<T extends JWTClaims, MaxAge extends ExpiresIn | undefined>(event: HTTPEvent, config: Partial<SessionConfigJWE<T, MaxAge>>): Promise<void>;
|
|
106
106
|
|
|
107
107
|
declare const kGetSessionPromise: unique symbol;
|
|
108
|
-
interface SessionJWS<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
108
|
+
interface SessionJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
109
109
|
id: string;
|
|
110
110
|
createdAt: number;
|
|
111
|
-
expiresAt: MaxAge extends
|
|
111
|
+
expiresAt: MaxAge extends ExpiresIn ? number : T["exp"];
|
|
112
112
|
data: SessionData<T>;
|
|
113
113
|
[kGetSessionPromise]?: Promise<SessionJWS<T, MaxAge>>;
|
|
114
114
|
}
|
|
115
|
-
interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
115
|
+
interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
116
116
|
onRead?: (args: {
|
|
117
117
|
session: SessionJWS<T, MaxAge>;
|
|
118
118
|
event: HTTPEvent;
|
|
@@ -138,7 +138,7 @@ interface SessionHooksJWS<T extends JWTClaims = JWTClaims, MaxAge extends number
|
|
|
138
138
|
config: SessionConfigJWS<T, MaxAge>;
|
|
139
139
|
}) => void | Promise<void>;
|
|
140
140
|
}
|
|
141
|
-
interface SessionConfigJWS<T extends JWTClaims = JWTClaims, MaxAge extends
|
|
141
|
+
interface SessionConfigJWS<T extends JWTClaims = JWTClaims, MaxAge extends ExpiresIn | undefined = ExpiresIn | undefined> {
|
|
142
142
|
key: JWK_Symmetric | {
|
|
143
143
|
privateKey: JWK_Private;
|
|
144
144
|
publicKey: JWK_Public | JWK_Public[] | JWKSet;
|
|
@@ -156,12 +156,13 @@ interface SessionConfigJWS<T extends JWTClaims = JWTClaims, MaxAge extends numbe
|
|
|
156
156
|
};
|
|
157
157
|
hooks?: SessionHooksJWS<T, MaxAge>;
|
|
158
158
|
}
|
|
159
|
-
declare function useJWSSession<T extends JWTClaims, MaxAge extends
|
|
160
|
-
declare function getJWSSession<T extends JWTClaims, MaxAge extends
|
|
161
|
-
declare function
|
|
162
|
-
declare function
|
|
163
|
-
declare function
|
|
164
|
-
declare function
|
|
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>;
|
|
165
166
|
|
|
166
|
-
export { JWEEncryptOptions, JWKSet, JWK_Private, JWK_Public, JWK_Symmetric, JWTClaimValidationOptions, JWTClaims, clearJWESession, clearJWSSession, getJWESession, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
|
|
167
|
+
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 };
|
|
167
168
|
export type { SessionConfigJWE, SessionConfigJWS, SessionData, SessionHooksJWE, SessionHooksJWS, SessionJWE, SessionJWS, SessionManager, SessionUpdate };
|
package/dist/adapters/h3v2.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { k as deriveJWKFromPassword, h as exportJWKToPEM, c as generateJWK, f as importJWKFromPEM } from '../shared/unjwt.
|
|
1
|
+
export { k as deriveJWKFromPassword, h as exportJWKToPEM, c as generateJWK, f as importJWKFromPEM } from '../shared/unjwt.DyouTtLD.mjs';
|
|
2
2
|
import { getEventContext, getChunkedCookie, setChunkedCookie } from 'h3';
|
|
3
3
|
import { NullProtoObj } from 'rou3';
|
|
4
|
-
import { e as encrypt, d as decrypt } from '../shared/unjwt.
|
|
5
|
-
import { p as
|
|
6
|
-
import { s as sign, v as verify } from '../shared/unjwt.
|
|
4
|
+
import { e as encrypt, d as decrypt } from '../shared/unjwt.KqQq9jpF.mjs';
|
|
5
|
+
import { p as computeExpiresInSeconds, q as isSymmetricJWK, u as isPrivateJWK, w as isPublicJWK } from '../shared/unjwt.Be8NxwFK.mjs';
|
|
6
|
+
import { s as sign, v as verify } from '../shared/unjwt.DQVUT7FU.mjs';
|
|
7
7
|
|
|
8
8
|
const kGetSessionPromise$1 = Symbol("h3_jwe_getSession");
|
|
9
9
|
const DEFAULT_NAME$1 = "h3-jwe";
|
|
@@ -28,6 +28,9 @@ async function useJWESession(event, config) {
|
|
|
28
28
|
get data() {
|
|
29
29
|
return getSessionFromContext$1(event, sessionName)?.data || {};
|
|
30
30
|
},
|
|
31
|
+
get token() {
|
|
32
|
+
return getJWESessionToken(event, config);
|
|
33
|
+
},
|
|
31
34
|
update: async (update) => {
|
|
32
35
|
await updateJWESession(event, config, update);
|
|
33
36
|
return sessionManager;
|
|
@@ -74,17 +77,7 @@ async function getJWESession(event, config) {
|
|
|
74
77
|
data: new NullProtoObj()
|
|
75
78
|
};
|
|
76
79
|
context.sessions[sessionName] = session;
|
|
77
|
-
|
|
78
|
-
if (config.sessionHeader !== false) {
|
|
79
|
-
const headerName = typeof config.sessionHeader === "string" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;
|
|
80
|
-
const headerValue = event.req.headers.get(headerName);
|
|
81
|
-
if (typeof headerValue === "string") {
|
|
82
|
-
token = headerValue.startsWith("Bearer ") ? headerValue.slice(7).trim() : headerValue;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (!token) {
|
|
86
|
-
token = getChunkedCookie(event, sessionName);
|
|
87
|
-
}
|
|
80
|
+
const token = getJWESessionToken(event, config);
|
|
88
81
|
if (token) {
|
|
89
82
|
const promise = unsealJWESession(event, config, token).catch(async (error_) => {
|
|
90
83
|
if (error_ instanceof Error) {
|
|
@@ -117,7 +110,7 @@ async function getJWESession(event, config) {
|
|
|
117
110
|
if (!session.id) {
|
|
118
111
|
session.id = config.generateId?.() ?? crypto.randomUUID();
|
|
119
112
|
session.createdAt = config.jwe?.encryptOptions?.currentDate?.getTime() ?? Date.now();
|
|
120
|
-
session.expiresAt = config.maxAge ? session.createdAt + config.maxAge * 1e3
|
|
113
|
+
session.expiresAt = config.maxAge === void 0 ? void 0 : session.createdAt + computeExpiresInSeconds(config.maxAge) * 1e3;
|
|
121
114
|
await updateJWESession(event, config);
|
|
122
115
|
}
|
|
123
116
|
await config.hooks?.onRead?.({
|
|
@@ -127,6 +120,21 @@ async function getJWESession(event, config) {
|
|
|
127
120
|
});
|
|
128
121
|
return session;
|
|
129
122
|
}
|
|
123
|
+
function getJWESessionToken(event, config) {
|
|
124
|
+
const sessionName = config.name || DEFAULT_NAME$1;
|
|
125
|
+
let token;
|
|
126
|
+
if (config.sessionHeader !== false) {
|
|
127
|
+
const headerName = typeof config.sessionHeader === "string" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;
|
|
128
|
+
const headerValue = event.req.headers.get(headerName);
|
|
129
|
+
if (typeof headerValue === "string") {
|
|
130
|
+
token = headerValue.startsWith("Bearer ") ? headerValue.slice(7).trim() : headerValue;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (!token) {
|
|
134
|
+
token = getChunkedCookie(event, sessionName);
|
|
135
|
+
}
|
|
136
|
+
return token;
|
|
137
|
+
}
|
|
130
138
|
async function updateJWESession(event, config, update) {
|
|
131
139
|
const sessionName = config.name || DEFAULT_NAME$1;
|
|
132
140
|
const context = getEventContext(event);
|
|
@@ -146,7 +154,9 @@ async function updateJWESession(event, config, update) {
|
|
|
146
154
|
const sealed = await sealJWESession(event, config);
|
|
147
155
|
setChunkedCookie(event, sessionName, sealed, {
|
|
148
156
|
...DEFAULT_COOKIE$1,
|
|
149
|
-
expires: config.maxAge
|
|
157
|
+
expires: config.maxAge === void 0 ? void 0 : new Date(
|
|
158
|
+
session.createdAt + computeExpiresInSeconds(config.maxAge) * 1e3
|
|
159
|
+
),
|
|
150
160
|
...config.cookie
|
|
151
161
|
});
|
|
152
162
|
}
|
|
@@ -158,7 +168,7 @@ async function sealJWESession(event, config) {
|
|
|
158
168
|
const context = getEventContext(event);
|
|
159
169
|
const session = context.sessions?.[sessionName] || await getJWESession(event, config);
|
|
160
170
|
const iatSeconds = Math.floor(session.createdAt / 1e3);
|
|
161
|
-
const expSeconds = config.maxAge
|
|
171
|
+
const expSeconds = config.maxAge === void 0 ? void 0 : iatSeconds + computeExpiresInSeconds(config.maxAge);
|
|
162
172
|
const payload = {
|
|
163
173
|
...session.data,
|
|
164
174
|
jti: session.id,
|
|
@@ -312,6 +322,9 @@ async function useJWSSession(event, config) {
|
|
|
312
322
|
get data() {
|
|
313
323
|
return getSessionFromContext(event, sessionName)?.data || {};
|
|
314
324
|
},
|
|
325
|
+
get token() {
|
|
326
|
+
return getJWSSessionToken(event, config);
|
|
327
|
+
},
|
|
315
328
|
update: async (update) => {
|
|
316
329
|
await updateJWSSession(event, config, update);
|
|
317
330
|
return sessionManager;
|
|
@@ -358,17 +371,7 @@ async function getJWSSession(event, config) {
|
|
|
358
371
|
data: new NullProtoObj()
|
|
359
372
|
};
|
|
360
373
|
context.sessions[sessionName] = session;
|
|
361
|
-
|
|
362
|
-
if (config.sessionHeader !== false) {
|
|
363
|
-
const headerName = typeof config.sessionHeader === "string" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;
|
|
364
|
-
const headerValue = event.req.headers.get(headerName);
|
|
365
|
-
if (typeof headerValue === "string") {
|
|
366
|
-
token = headerValue.startsWith("Bearer ") ? headerValue.slice(7).trim() : headerValue;
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
if (!token) {
|
|
370
|
-
token = getChunkedCookie(event, sessionName);
|
|
371
|
-
}
|
|
374
|
+
const token = getJWSSessionToken(event, config);
|
|
372
375
|
if (token) {
|
|
373
376
|
const promise = verifyJWSSession(event, config, token).catch(async (error_) => {
|
|
374
377
|
if (error_ instanceof Error && (error_.message.includes("Token has expired") || error_.message.includes("Token is too old"))) {
|
|
@@ -398,7 +401,7 @@ async function getJWSSession(event, config) {
|
|
|
398
401
|
if (!session.id) {
|
|
399
402
|
session.id = config.generateId?.() ?? crypto.randomUUID();
|
|
400
403
|
session.createdAt = config.jws?.signOptions?.currentDate?.getTime() ?? Date.now();
|
|
401
|
-
session.expiresAt = config.maxAge ? session.createdAt + config.maxAge * 1e3
|
|
404
|
+
session.expiresAt = config.maxAge === void 0 ? void 0 : session.createdAt + computeExpiresInSeconds(config.maxAge) * 1e3;
|
|
402
405
|
await updateJWSSession(event, config);
|
|
403
406
|
}
|
|
404
407
|
await config.hooks?.onRead?.({
|
|
@@ -408,6 +411,21 @@ async function getJWSSession(event, config) {
|
|
|
408
411
|
});
|
|
409
412
|
return session;
|
|
410
413
|
}
|
|
414
|
+
function getJWSSessionToken(event, config) {
|
|
415
|
+
const sessionName = config.name || DEFAULT_NAME;
|
|
416
|
+
let token;
|
|
417
|
+
if (config.sessionHeader !== false) {
|
|
418
|
+
const headerName = typeof config.sessionHeader === "string" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;
|
|
419
|
+
const headerValue = event.req.headers.get(headerName);
|
|
420
|
+
if (typeof headerValue === "string") {
|
|
421
|
+
token = headerValue.startsWith("Bearer ") ? headerValue.slice(7).trim() : headerValue;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
if (!token) {
|
|
425
|
+
token = getChunkedCookie(event, sessionName);
|
|
426
|
+
}
|
|
427
|
+
return token;
|
|
428
|
+
}
|
|
411
429
|
async function updateJWSSession(event, config, update) {
|
|
412
430
|
const sessionName = config.name || DEFAULT_NAME;
|
|
413
431
|
const context = getEventContext(event);
|
|
@@ -427,7 +445,9 @@ async function updateJWSSession(event, config, update) {
|
|
|
427
445
|
const token = await signJWSSession(event, config);
|
|
428
446
|
setChunkedCookie(event, sessionName, token, {
|
|
429
447
|
...DEFAULT_COOKIE,
|
|
430
|
-
expires: config.maxAge
|
|
448
|
+
expires: config.maxAge === void 0 ? void 0 : new Date(
|
|
449
|
+
session.createdAt + computeExpiresInSeconds(config.maxAge) * 1e3
|
|
450
|
+
),
|
|
431
451
|
...config.cookie
|
|
432
452
|
});
|
|
433
453
|
}
|
|
@@ -439,7 +459,7 @@ async function signJWSSession(event, config) {
|
|
|
439
459
|
const context = getEventContext(event);
|
|
440
460
|
const session = context.sessions?.[sessionName] || await getJWSSession(event, config);
|
|
441
461
|
const iatSeconds = Math.floor(session.createdAt / 1e3);
|
|
442
|
-
const expSeconds = config.maxAge
|
|
462
|
+
const expSeconds = config.maxAge === void 0 ? void 0 : iatSeconds + computeExpiresInSeconds(config.maxAge);
|
|
443
463
|
const payload = {
|
|
444
464
|
...session.data,
|
|
445
465
|
jti: session.id,
|
|
@@ -577,4 +597,4 @@ function getVerifyKey(key) {
|
|
|
577
597
|
return _key;
|
|
578
598
|
}
|
|
579
599
|
|
|
580
|
-
export { clearJWESession, clearJWSSession, getJWESession, getJWSSession, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
|
|
600
|
+
export { clearJWESession, clearJWSSession, getJWESession, getJWESessionToken, getJWSSession, getJWSSessionToken, sealJWESession, signJWSSession, unsealJWESession, updateJWESession, updateJWSSession, useJWESession, useJWSSession, verifyJWSSession };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { i as utils } from './shared/unjwt.
|
|
2
|
-
export { j as jwe } from './shared/unjwt.
|
|
3
|
-
export { j as jwk } from './shared/unjwt.
|
|
4
|
-
export { j as jws } from './shared/unjwt.
|
|
1
|
+
export { i as utils } from './shared/unjwt.Be8NxwFK.mjs';
|
|
2
|
+
export { j as jwe } from './shared/unjwt.KqQq9jpF.mjs';
|
|
3
|
+
export { j as jwk } from './shared/unjwt.DyouTtLD.mjs';
|
|
4
|
+
export { j as jws } from './shared/unjwt.DQVUT7FU.mjs';
|
package/dist/jwe.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import './shared/unjwt.
|
|
2
|
-
import './shared/unjwt.
|
|
3
|
-
export { d as decrypt, e as encrypt } from './shared/unjwt.
|
|
1
|
+
import './shared/unjwt.DyouTtLD.mjs';
|
|
2
|
+
import './shared/unjwt.Be8NxwFK.mjs';
|
|
3
|
+
export { d as decrypt, e as encrypt } from './shared/unjwt.KqQq9jpF.mjs';
|
package/dist/jwk.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import './shared/unjwt.
|
|
2
|
-
export { k as deriveJWKFromPassword, m as deriveKeyFromPassword, h as exportJWKToPEM, n as exportKey, c as generateJWK, l as generateKey, b as getJWKFromSet, f as importJWKFromPEM, i as importKey, u as unwrapKey, w as wrapKey } from './shared/unjwt.
|
|
1
|
+
import './shared/unjwt.Be8NxwFK.mjs';
|
|
2
|
+
export { k as deriveJWKFromPassword, m as deriveKeyFromPassword, h as exportJWKToPEM, n as exportKey, c as generateJWK, l as generateKey, b as getJWKFromSet, f as importJWKFromPEM, i as importKey, u as unwrapKey, w as wrapKey } from './shared/unjwt.DyouTtLD.mjs';
|
package/dist/jws.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import './shared/unjwt.
|
|
2
|
-
import './shared/unjwt.
|
|
3
|
-
export { s as sign, v as verify } from './shared/unjwt.
|
|
1
|
+
import './shared/unjwt.DyouTtLD.mjs';
|
|
2
|
+
import './shared/unjwt.Be8NxwFK.mjs';
|
|
3
|
+
export { s as sign, v as verify } from './shared/unjwt.DQVUT7FU.mjs';
|
|
@@ -435,4 +435,4 @@ const index = {
|
|
|
435
435
|
validateJwtClaims: validateJwtClaims
|
|
436
436
|
};
|
|
437
437
|
|
|
438
|
-
export {
|
|
438
|
+
export { assertCryptoKey as A, isAsymmetricJWK as B, maybeArray as C, isJWTContent as D, decodeMaybeJWTString as E, computeMaxTokenAgeSeconds as F, isJWK as a, applyTypCtyDefaults as b, computeJwtTimeClaims as c, base64UrlEncode as d, base64UrlDecode as e, decodePayloadFromBytes as f, getPlaintextBytes as g, validateJwtClaims as h, index as i, isCryptoKeyPair as j, isCryptoKey as k, textDecoder as l, isJWKSet as m, decodePayloadFromB64UrlSegment as n, validateCriticalHeadersJWS as o, computeExpiresInSeconds as p, isSymmetricJWK as q, randomBytes as r, sanitizeObject as s, textEncoder as t, isPrivateJWK as u, validateCriticalHeadersJWE as v, isPublicJWK as w, concatUint8Arrays as x, base64Decode as y, base64Encode as z };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as importKey, s as sign$1, b as getJWKFromSet, v as verify$1 } from './unjwt.
|
|
2
|
-
import { s as sanitizeObject, a as isJWK, b as applyTypCtyDefaults, c as computeJwtTimeClaims, d as base64UrlEncode, t as textEncoder, l as textDecoder, e as base64UrlDecode, m as isJWKSet, n as decodePayloadFromB64UrlSegment, o as validateCriticalHeadersJWS, h as validateJwtClaims } from './unjwt.
|
|
1
|
+
import { i as importKey, s as sign$1, b as getJWKFromSet, v as verify$1 } from './unjwt.DyouTtLD.mjs';
|
|
2
|
+
import { s as sanitizeObject, a as isJWK, b as applyTypCtyDefaults, c as computeJwtTimeClaims, d as base64UrlEncode, t as textEncoder, l as textDecoder, e as base64UrlDecode, m as isJWKSet, n as decodePayloadFromB64UrlSegment, o as validateCriticalHeadersJWS, h as validateJwtClaims } from './unjwt.Be8NxwFK.mjs';
|
|
3
3
|
|
|
4
4
|
async function sign(payload, key, options = {}) {
|
|
5
5
|
const { protectedHeader: additionalProtectedHeader } = options;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { k as isCryptoKey,
|
|
1
|
+
import { k as isCryptoKey, x as concatUint8Arrays, d as base64UrlEncode, y as base64Decode, z as base64Encode, t as textEncoder, s as sanitizeObject, A as assertCryptoKey, a as isJWK, e as base64UrlDecode, B as isAsymmetricJWK, r as randomBytes, m as isJWKSet } from './unjwt.Be8NxwFK.mjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This is a fork of Jose library's utility functions.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as importKey, e as encryptKey, g as generateIV, a as encrypt$1, u as unwrapKey, d as decrypt$1 } from './unjwt.
|
|
2
|
-
import { r as randomBytes, a as isJWK, s as sanitizeObject, b as applyTypCtyDefaults, c as computeJwtTimeClaims, g as getPlaintextBytes, d as base64UrlEncode, t as textEncoder, e as base64UrlDecode, f as decodePayloadFromBytes, v as validateCriticalHeadersJWE, h as validateJwtClaims, j as isCryptoKeyPair, k as isCryptoKey } from './unjwt.
|
|
1
|
+
import { i as importKey, e as encryptKey, g as generateIV, a as encrypt$1, u as unwrapKey, d as decrypt$1 } from './unjwt.DyouTtLD.mjs';
|
|
2
|
+
import { r as randomBytes, a as isJWK, s as sanitizeObject, b as applyTypCtyDefaults, c as computeJwtTimeClaims, g as getPlaintextBytes, d as base64UrlEncode, t as textEncoder, e as base64UrlDecode, f as decodePayloadFromBytes, v as validateCriticalHeadersJWE, h as validateJwtClaims, j as isCryptoKeyPair, k as isCryptoKey } from './unjwt.Be8NxwFK.mjs';
|
|
3
3
|
|
|
4
4
|
async function encrypt(payload, key, options = {}) {
|
|
5
5
|
const {
|
package/dist/utils.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { b as applyTypCtyDefaults,
|
|
1
|
+
export { b as applyTypCtyDefaults, A as assertCryptoKey, y as base64Decode, z as base64Encode, e as base64UrlDecode, d as base64UrlEncode, p as computeExpiresInSeconds, c as computeJwtTimeClaims, F as computeMaxTokenAgeSeconds, x as concatUint8Arrays, E as decodeMaybeJWTString, n as decodePayloadFromB64UrlSegment, f as decodePayloadFromBytes, g as getPlaintextBytes, B as isAsymmetricJWK, k as isCryptoKey, j as isCryptoKeyPair, a as isJWK, m as isJWKSet, D as isJWTContent, u as isPrivateJWK, w as isPublicJWK, q as isSymmetricJWK, C as maybeArray, r as randomBytes, s as sanitizeObject, l as textDecoder, t as textEncoder, v as validateCriticalHeadersJWE, o as validateCriticalHeadersJWS, h as validateJwtClaims } from './shared/unjwt.Be8NxwFK.mjs';
|