@versini/auth-common 2.9.0 → 2.10.0
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/index.d.ts +2 -1
- package/dist/index.js +443 -307
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ declare const API_TYPE: {
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
declare const verifyAndExtractToken: (token: string) => Promise<jose.JWTVerifyResult<jose.JWTPayload> | undefined>;
|
|
33
|
+
declare const decodeToken: (token: string) => jose.JWTPayload | undefined;
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
36
|
* Generate a PKCE code challenge from a code verifier.
|
|
@@ -57,4 +58,4 @@ declare function pkceChallengePair(length?: number): Promise<{
|
|
|
57
58
|
*/
|
|
58
59
|
declare function verifyChallenge(code_verifier: string, expectedChallenge: string): Promise<boolean>;
|
|
59
60
|
|
|
60
|
-
export { API_TYPE, AUTH_TYPES, HEADERS, JWT, JWT_PUBLIC_KEY, TOKEN_EXPIRATION, generateCodeChallenge, pkceChallengePair, verifyAndExtractToken, verifyChallenge };
|
|
61
|
+
export { API_TYPE, AUTH_TYPES, HEADERS, JWT, JWT_PUBLIC_KEY, TOKEN_EXPIRATION, decodeToken, generateCodeChallenge, pkceChallengePair, verifyAndExtractToken, verifyChallenge };
|
package/dist/index.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
@versini/auth-common v2.
|
|
2
|
+
@versini/auth-common v2.10.0
|
|
3
3
|
© 2024 gizmette.com
|
|
4
4
|
*/
|
|
5
5
|
try {
|
|
6
6
|
window.__VERSINI_AUTH_COMMON__ || (window.__VERSINI_AUTH_COMMON__ = {
|
|
7
|
-
version: "2.
|
|
8
|
-
buildTime: "06/
|
|
7
|
+
version: "2.10.0",
|
|
8
|
+
buildTime: "06/29/2024 12:23 PM EDT",
|
|
9
9
|
homepage: "https://github.com/aversini/auth-client",
|
|
10
10
|
license: "MIT"
|
|
11
11
|
});
|
|
12
12
|
} catch {
|
|
13
13
|
}
|
|
14
|
-
const
|
|
14
|
+
const Ge = {
|
|
15
15
|
ID_TOKEN: "id_token",
|
|
16
16
|
ACCESS_TOKEN: "token",
|
|
17
17
|
ID_AND_ACCESS_TOKEN: "id_token token",
|
|
18
18
|
CODE: "code",
|
|
19
19
|
REFRESH_TOKEN: "refresh_token"
|
|
20
|
-
},
|
|
20
|
+
}, ze = {
|
|
21
21
|
CLIENT_ID: "X-Auth-ClientId"
|
|
22
|
-
},
|
|
22
|
+
}, N = {
|
|
23
23
|
ALG: "RS256",
|
|
24
24
|
USER_ID_KEY: "sub",
|
|
25
25
|
TOKEN_ID_KEY: "__raw",
|
|
26
26
|
NONCE_KEY: "_nonce",
|
|
27
27
|
ISSUER: "gizmette.com"
|
|
28
|
-
},
|
|
28
|
+
}, ne = `-----BEGIN PUBLIC KEY-----
|
|
29
29
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsF6i3Jd9fY/3COqCw/m7
|
|
30
30
|
w5PKyTYLGAI2I6SIIdpe6i6DOCbEkmDz7LdVsBqwNtVi8gvWYIj+8ol6rU3qu1v5
|
|
31
31
|
i1Jd45GSK4kzkVdgCmQZbM5ak0KI99q5wsrAIzUd+LRJ2HRvWtr5IYdsIiXaQjle
|
|
@@ -33,32 +33,32 @@ aMwPFOIcJH+rKfFgNcHLcaS5syp7zU1ANwZ+trgR+DifBr8TLVkBynmNeTyhDm2+
|
|
|
33
33
|
l0haqjMk0UoNPPE8iYBWUHQJJE1Dqstj65d6Eh5g64Pao25y4cmYJbKjiblIGEkE
|
|
34
34
|
sjqybA9mARAqh9k/eiIopecWSiffNQTwVQVd2I9ZH3BalhEXHlqFgrjz51kFqg81
|
|
35
35
|
awIDAQAB
|
|
36
|
-
-----END PUBLIC KEY-----`,
|
|
36
|
+
-----END PUBLIC KEY-----`, Ye = {
|
|
37
37
|
ACCESS: "5m",
|
|
38
38
|
ID: "90d",
|
|
39
39
|
REFRESH: "90d"
|
|
40
|
-
},
|
|
40
|
+
}, Qe = {
|
|
41
41
|
AUTHENTICATE: "authenticate",
|
|
42
42
|
CODE: "code",
|
|
43
43
|
LOGOUT: "logout"
|
|
44
|
-
},
|
|
45
|
-
function
|
|
46
|
-
const t = e.reduce((
|
|
47
|
-
let
|
|
48
|
-
for (const
|
|
49
|
-
|
|
50
|
-
return
|
|
44
|
+
}, x = crypto, G = (e) => e instanceof CryptoKey, v = new TextEncoder(), C = new TextDecoder();
|
|
45
|
+
function ae(...e) {
|
|
46
|
+
const t = e.reduce((a, { length: i }) => a + i, 0), r = new Uint8Array(t);
|
|
47
|
+
let n = 0;
|
|
48
|
+
for (const a of e)
|
|
49
|
+
r.set(a, n), n += a.length;
|
|
50
|
+
return r;
|
|
51
51
|
}
|
|
52
|
-
const
|
|
53
|
-
const t = atob(e),
|
|
54
|
-
for (let
|
|
55
|
-
n
|
|
56
|
-
return
|
|
57
|
-
},
|
|
52
|
+
const oe = (e) => {
|
|
53
|
+
const t = atob(e), r = new Uint8Array(t.length);
|
|
54
|
+
for (let n = 0; n < t.length; n++)
|
|
55
|
+
r[n] = t.charCodeAt(n);
|
|
56
|
+
return r;
|
|
57
|
+
}, A = (e) => {
|
|
58
58
|
let t = e;
|
|
59
|
-
t instanceof Uint8Array && (t =
|
|
59
|
+
t instanceof Uint8Array && (t = C.decode(t)), t = t.replace(/-/g, "+").replace(/_/g, "/").replace(/\s/g, "");
|
|
60
60
|
try {
|
|
61
|
-
return
|
|
61
|
+
return oe(t);
|
|
62
62
|
} catch {
|
|
63
63
|
throw new TypeError("The input to be decoded is not correctly encoded.");
|
|
64
64
|
}
|
|
@@ -68,27 +68,27 @@ class b extends Error {
|
|
|
68
68
|
return "ERR_JOSE_GENERIC";
|
|
69
69
|
}
|
|
70
70
|
constructor(t) {
|
|
71
|
-
var
|
|
72
|
-
super(t), this.code = "ERR_JOSE_GENERIC", this.name = this.constructor.name, (
|
|
71
|
+
var r;
|
|
72
|
+
super(t), this.code = "ERR_JOSE_GENERIC", this.name = this.constructor.name, (r = Error.captureStackTrace) == null || r.call(Error, this, this.constructor);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
-
class
|
|
75
|
+
class f extends b {
|
|
76
76
|
static get code() {
|
|
77
77
|
return "ERR_JWT_CLAIM_VALIDATION_FAILED";
|
|
78
78
|
}
|
|
79
|
-
constructor(t,
|
|
80
|
-
super(t), this.code = "ERR_JWT_CLAIM_VALIDATION_FAILED", this.claim =
|
|
79
|
+
constructor(t, r, n = "unspecified", a = "unspecified") {
|
|
80
|
+
super(t), this.code = "ERR_JWT_CLAIM_VALIDATION_FAILED", this.claim = n, this.reason = a, this.payload = r;
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
-
class
|
|
83
|
+
class $ extends b {
|
|
84
84
|
static get code() {
|
|
85
85
|
return "ERR_JWT_EXPIRED";
|
|
86
86
|
}
|
|
87
|
-
constructor(t,
|
|
88
|
-
super(t), this.code = "ERR_JWT_EXPIRED", this.claim =
|
|
87
|
+
constructor(t, r, n = "unspecified", a = "unspecified") {
|
|
88
|
+
super(t), this.code = "ERR_JWT_EXPIRED", this.claim = n, this.reason = a, this.payload = r;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
class
|
|
91
|
+
class ie extends b {
|
|
92
92
|
constructor() {
|
|
93
93
|
super(...arguments), this.code = "ERR_JOSE_ALG_NOT_ALLOWED";
|
|
94
94
|
}
|
|
@@ -96,7 +96,7 @@ class ee extends b {
|
|
|
96
96
|
return "ERR_JOSE_ALG_NOT_ALLOWED";
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
|
-
class
|
|
99
|
+
class w extends b {
|
|
100
100
|
constructor() {
|
|
101
101
|
super(...arguments), this.code = "ERR_JOSE_NOT_SUPPORTED";
|
|
102
102
|
}
|
|
@@ -112,7 +112,7 @@ class u extends b {
|
|
|
112
112
|
return "ERR_JWS_INVALID";
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
|
-
class
|
|
115
|
+
class S extends b {
|
|
116
116
|
constructor() {
|
|
117
117
|
super(...arguments), this.code = "ERR_JWT_INVALID";
|
|
118
118
|
}
|
|
@@ -120,7 +120,7 @@ class B extends b {
|
|
|
120
120
|
return "ERR_JWT_INVALID";
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
|
-
class
|
|
123
|
+
class ce extends b {
|
|
124
124
|
constructor() {
|
|
125
125
|
super(...arguments), this.code = "ERR_JWS_SIGNATURE_VERIFICATION_FAILED", this.message = "signature verification failed";
|
|
126
126
|
}
|
|
@@ -131,13 +131,13 @@ class te extends b {
|
|
|
131
131
|
function m(e, t = "algorithm.name") {
|
|
132
132
|
return new TypeError(`CryptoKey does not support this operation, its ${t} must be ${e}`);
|
|
133
133
|
}
|
|
134
|
-
function
|
|
134
|
+
function T(e, t) {
|
|
135
135
|
return e.name === t;
|
|
136
136
|
}
|
|
137
|
-
function
|
|
137
|
+
function K(e) {
|
|
138
138
|
return parseInt(e.name.slice(4), 10);
|
|
139
139
|
}
|
|
140
|
-
function
|
|
140
|
+
function se(e) {
|
|
141
141
|
switch (e) {
|
|
142
142
|
case "ES256":
|
|
143
143
|
return "P-256";
|
|
@@ -149,47 +149,47 @@ function re(e) {
|
|
|
149
149
|
throw new Error("unreachable");
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
|
-
function
|
|
153
|
-
if (t.length && !t.some((
|
|
154
|
-
let
|
|
152
|
+
function de(e, t) {
|
|
153
|
+
if (t.length && !t.some((r) => e.usages.includes(r))) {
|
|
154
|
+
let r = "CryptoKey does not support this operation, its usages must include ";
|
|
155
155
|
if (t.length > 2) {
|
|
156
|
-
const
|
|
157
|
-
|
|
156
|
+
const n = t.pop();
|
|
157
|
+
r += `one of ${t.join(", ")}, or ${n}.`;
|
|
158
158
|
} else
|
|
159
|
-
t.length === 2 ?
|
|
160
|
-
throw new TypeError(
|
|
159
|
+
t.length === 2 ? r += `one of ${t[0]} or ${t[1]}.` : r += `${t[0]}.`;
|
|
160
|
+
throw new TypeError(r);
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
|
-
function
|
|
163
|
+
function ue(e, t, ...r) {
|
|
164
164
|
switch (t) {
|
|
165
165
|
case "HS256":
|
|
166
166
|
case "HS384":
|
|
167
167
|
case "HS512": {
|
|
168
|
-
if (!
|
|
168
|
+
if (!T(e.algorithm, "HMAC"))
|
|
169
169
|
throw m("HMAC");
|
|
170
|
-
const
|
|
171
|
-
if (
|
|
172
|
-
throw m(`SHA-${
|
|
170
|
+
const n = parseInt(t.slice(2), 10);
|
|
171
|
+
if (K(e.algorithm.hash) !== n)
|
|
172
|
+
throw m(`SHA-${n}`, "algorithm.hash");
|
|
173
173
|
break;
|
|
174
174
|
}
|
|
175
175
|
case "RS256":
|
|
176
176
|
case "RS384":
|
|
177
177
|
case "RS512": {
|
|
178
|
-
if (!
|
|
178
|
+
if (!T(e.algorithm, "RSASSA-PKCS1-v1_5"))
|
|
179
179
|
throw m("RSASSA-PKCS1-v1_5");
|
|
180
|
-
const
|
|
181
|
-
if (
|
|
182
|
-
throw m(`SHA-${
|
|
180
|
+
const n = parseInt(t.slice(2), 10);
|
|
181
|
+
if (K(e.algorithm.hash) !== n)
|
|
182
|
+
throw m(`SHA-${n}`, "algorithm.hash");
|
|
183
183
|
break;
|
|
184
184
|
}
|
|
185
185
|
case "PS256":
|
|
186
186
|
case "PS384":
|
|
187
187
|
case "PS512": {
|
|
188
|
-
if (!
|
|
188
|
+
if (!T(e.algorithm, "RSA-PSS"))
|
|
189
189
|
throw m("RSA-PSS");
|
|
190
|
-
const
|
|
191
|
-
if (
|
|
192
|
-
throw m(`SHA-${
|
|
190
|
+
const n = parseInt(t.slice(2), 10);
|
|
191
|
+
if (K(e.algorithm.hash) !== n)
|
|
192
|
+
throw m(`SHA-${n}`, "algorithm.hash");
|
|
193
193
|
break;
|
|
194
194
|
}
|
|
195
195
|
case "EdDSA": {
|
|
@@ -200,55 +200,55 @@ function oe(e, t, ...n) {
|
|
|
200
200
|
case "ES256":
|
|
201
201
|
case "ES384":
|
|
202
202
|
case "ES512": {
|
|
203
|
-
if (!
|
|
203
|
+
if (!T(e.algorithm, "ECDSA"))
|
|
204
204
|
throw m("ECDSA");
|
|
205
|
-
const
|
|
206
|
-
if (e.algorithm.namedCurve !==
|
|
207
|
-
throw m(
|
|
205
|
+
const n = se(t);
|
|
206
|
+
if (e.algorithm.namedCurve !== n)
|
|
207
|
+
throw m(n, "algorithm.namedCurve");
|
|
208
208
|
break;
|
|
209
209
|
}
|
|
210
210
|
default:
|
|
211
211
|
throw new TypeError("CryptoKey does not support this operation");
|
|
212
212
|
}
|
|
213
|
-
|
|
213
|
+
de(e, r);
|
|
214
214
|
}
|
|
215
|
-
function
|
|
216
|
-
var
|
|
217
|
-
if (
|
|
218
|
-
const
|
|
219
|
-
e += `one of type ${
|
|
215
|
+
function z(e, t, ...r) {
|
|
216
|
+
var n;
|
|
217
|
+
if (r.length > 2) {
|
|
218
|
+
const a = r.pop();
|
|
219
|
+
e += `one of type ${r.join(", ")}, or ${a}.`;
|
|
220
220
|
} else
|
|
221
|
-
|
|
222
|
-
return t == null ? e += ` Received ${t}` : typeof t == "function" && t.name ? e += ` Received function ${t.name}` : typeof t == "object" && t != null && (
|
|
221
|
+
r.length === 2 ? e += `one of type ${r[0]} or ${r[1]}.` : e += `of type ${r[0]}.`;
|
|
222
|
+
return t == null ? e += ` Received ${t}` : typeof t == "function" && t.name ? e += ` Received function ${t.name}` : typeof t == "object" && t != null && (n = t.constructor) != null && n.name && (e += ` Received an instance of ${t.constructor.name}`), e;
|
|
223
223
|
}
|
|
224
|
-
const
|
|
225
|
-
function
|
|
226
|
-
return
|
|
224
|
+
const L = (e, ...t) => z("Key must be ", e, ...t);
|
|
225
|
+
function Y(e, t, ...r) {
|
|
226
|
+
return z(`Key for the ${e} algorithm must be `, t, ...r);
|
|
227
227
|
}
|
|
228
|
-
const
|
|
228
|
+
const Q = (e) => G(e) ? !0 : (e == null ? void 0 : e[Symbol.toStringTag]) === "KeyObject", R = ["CryptoKey"], le = (...e) => {
|
|
229
229
|
const t = e.filter(Boolean);
|
|
230
230
|
if (t.length === 0 || t.length === 1)
|
|
231
231
|
return !0;
|
|
232
|
-
let
|
|
233
|
-
for (const
|
|
234
|
-
const
|
|
235
|
-
if (!
|
|
236
|
-
|
|
232
|
+
let r;
|
|
233
|
+
for (const n of t) {
|
|
234
|
+
const a = Object.keys(n);
|
|
235
|
+
if (!r || r.size === 0) {
|
|
236
|
+
r = new Set(a);
|
|
237
237
|
continue;
|
|
238
238
|
}
|
|
239
|
-
for (const i of
|
|
240
|
-
if (
|
|
239
|
+
for (const i of a) {
|
|
240
|
+
if (r.has(i))
|
|
241
241
|
return !1;
|
|
242
|
-
|
|
242
|
+
r.add(i);
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
245
|
return !0;
|
|
246
246
|
};
|
|
247
|
-
function
|
|
247
|
+
function he(e) {
|
|
248
248
|
return typeof e == "object" && e !== null;
|
|
249
249
|
}
|
|
250
|
-
function
|
|
251
|
-
if (!
|
|
250
|
+
function _(e) {
|
|
251
|
+
if (!he(e) || Object.prototype.toString.call(e) !== "[object Object]")
|
|
252
252
|
return !1;
|
|
253
253
|
if (Object.getPrototypeOf(e) === null)
|
|
254
254
|
return !0;
|
|
@@ -257,51 +257,153 @@ function x(e) {
|
|
|
257
257
|
t = Object.getPrototypeOf(t);
|
|
258
258
|
return Object.getPrototypeOf(e) === t;
|
|
259
259
|
}
|
|
260
|
-
const
|
|
260
|
+
const fe = (e, t) => {
|
|
261
261
|
if (e.startsWith("RS") || e.startsWith("PS")) {
|
|
262
|
-
const { modulusLength:
|
|
263
|
-
if (typeof
|
|
262
|
+
const { modulusLength: r } = t.algorithm;
|
|
263
|
+
if (typeof r != "number" || r < 2048)
|
|
264
264
|
throw new TypeError(`${e} requires key modulusLength to be 2048 bits or larger`);
|
|
265
265
|
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
266
|
+
};
|
|
267
|
+
function pe(e) {
|
|
268
|
+
let t, r;
|
|
269
|
+
switch (e.kty) {
|
|
270
|
+
case "RSA": {
|
|
271
|
+
switch (e.alg) {
|
|
272
|
+
case "PS256":
|
|
273
|
+
case "PS384":
|
|
274
|
+
case "PS512":
|
|
275
|
+
t = { name: "RSA-PSS", hash: `SHA-${e.alg.slice(-3)}` }, r = e.d ? ["sign"] : ["verify"];
|
|
276
|
+
break;
|
|
277
|
+
case "RS256":
|
|
278
|
+
case "RS384":
|
|
279
|
+
case "RS512":
|
|
280
|
+
t = { name: "RSASSA-PKCS1-v1_5", hash: `SHA-${e.alg.slice(-3)}` }, r = e.d ? ["sign"] : ["verify"];
|
|
281
|
+
break;
|
|
282
|
+
case "RSA-OAEP":
|
|
283
|
+
case "RSA-OAEP-256":
|
|
284
|
+
case "RSA-OAEP-384":
|
|
285
|
+
case "RSA-OAEP-512":
|
|
286
|
+
t = {
|
|
287
|
+
name: "RSA-OAEP",
|
|
288
|
+
hash: `SHA-${parseInt(e.alg.slice(-3), 10) || 1}`
|
|
289
|
+
}, r = e.d ? ["decrypt", "unwrapKey"] : ["encrypt", "wrapKey"];
|
|
290
|
+
break;
|
|
291
|
+
default:
|
|
292
|
+
throw new w('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
293
|
+
}
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
case "EC": {
|
|
297
|
+
switch (e.alg) {
|
|
298
|
+
case "ES256":
|
|
299
|
+
t = { name: "ECDSA", namedCurve: "P-256" }, r = e.d ? ["sign"] : ["verify"];
|
|
300
|
+
break;
|
|
301
|
+
case "ES384":
|
|
302
|
+
t = { name: "ECDSA", namedCurve: "P-384" }, r = e.d ? ["sign"] : ["verify"];
|
|
303
|
+
break;
|
|
304
|
+
case "ES512":
|
|
305
|
+
t = { name: "ECDSA", namedCurve: "P-521" }, r = e.d ? ["sign"] : ["verify"];
|
|
306
|
+
break;
|
|
307
|
+
case "ECDH-ES":
|
|
308
|
+
case "ECDH-ES+A128KW":
|
|
309
|
+
case "ECDH-ES+A192KW":
|
|
310
|
+
case "ECDH-ES+A256KW":
|
|
311
|
+
t = { name: "ECDH", namedCurve: e.crv }, r = e.d ? ["deriveBits"] : [];
|
|
312
|
+
break;
|
|
313
|
+
default:
|
|
314
|
+
throw new w('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
315
|
+
}
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
case "OKP": {
|
|
319
|
+
switch (e.alg) {
|
|
320
|
+
case "EdDSA":
|
|
321
|
+
t = { name: e.crv }, r = e.d ? ["sign"] : ["verify"];
|
|
322
|
+
break;
|
|
323
|
+
case "ECDH-ES":
|
|
324
|
+
case "ECDH-ES+A128KW":
|
|
325
|
+
case "ECDH-ES+A192KW":
|
|
326
|
+
case "ECDH-ES+A256KW":
|
|
327
|
+
t = { name: e.crv }, r = e.d ? ["deriveBits"] : [];
|
|
328
|
+
break;
|
|
329
|
+
default:
|
|
330
|
+
throw new w('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
331
|
+
}
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
default:
|
|
335
|
+
throw new w('Invalid or unsupported JWK "kty" (Key Type) Parameter value');
|
|
336
|
+
}
|
|
337
|
+
return { algorithm: t, keyUsages: r };
|
|
338
|
+
}
|
|
339
|
+
const me = async (e) => {
|
|
340
|
+
if (!e.alg)
|
|
341
|
+
throw new TypeError('"alg" argument is required when "jwk.alg" is not present');
|
|
342
|
+
const { algorithm: t, keyUsages: r } = pe(e), n = [
|
|
343
|
+
t,
|
|
344
|
+
e.ext ?? !1,
|
|
345
|
+
e.key_ops ?? r
|
|
346
|
+
], a = { ...e };
|
|
347
|
+
return delete a.alg, delete a.use, x.subtle.importKey("jwk", a, ...n);
|
|
348
|
+
}, X = (e) => A(e);
|
|
349
|
+
let W, J;
|
|
350
|
+
const Z = (e) => (e == null ? void 0 : e[Symbol.toStringTag]) === "KeyObject", j = async (e, t, r, n) => {
|
|
351
|
+
let a = e.get(t);
|
|
352
|
+
if (a != null && a[n])
|
|
353
|
+
return a[n];
|
|
354
|
+
const i = await me({ ...r, alg: n });
|
|
355
|
+
return a ? a[n] = i : e.set(t, { [n]: i }), i;
|
|
356
|
+
}, Se = (e, t) => {
|
|
357
|
+
if (Z(e)) {
|
|
358
|
+
let r = e.export({ format: "jwk" });
|
|
359
|
+
return delete r.d, delete r.dp, delete r.dq, delete r.p, delete r.q, delete r.qi, r.k ? X(r.k) : (J || (J = /* @__PURE__ */ new WeakMap()), j(J, e, r, t));
|
|
360
|
+
}
|
|
361
|
+
return e;
|
|
362
|
+
}, ye = (e, t) => {
|
|
363
|
+
if (Z(e)) {
|
|
364
|
+
let r = e.export({ format: "jwk" });
|
|
365
|
+
return r.k ? X(r.k) : (W || (W = /* @__PURE__ */ new WeakMap()), j(W, e, r, t));
|
|
366
|
+
}
|
|
367
|
+
return e;
|
|
368
|
+
}, Ee = { normalizePublicKey: Se, normalizePrivateKey: ye }, E = (e, t, r = 0) => {
|
|
369
|
+
r === 0 && (t.unshift(t.length), t.unshift(6));
|
|
370
|
+
const n = e.indexOf(t[0], r);
|
|
371
|
+
if (n === -1)
|
|
270
372
|
return !1;
|
|
271
|
-
const
|
|
272
|
-
return
|
|
273
|
-
},
|
|
373
|
+
const a = e.subarray(n, n + t.length);
|
|
374
|
+
return a.length !== t.length ? !1 : a.every((i, o) => i === t[o]) || E(e, t, n + 1);
|
|
375
|
+
}, M = (e) => {
|
|
274
376
|
switch (!0) {
|
|
275
|
-
case
|
|
377
|
+
case E(e, [42, 134, 72, 206, 61, 3, 1, 7]):
|
|
276
378
|
return "P-256";
|
|
277
|
-
case
|
|
379
|
+
case E(e, [43, 129, 4, 0, 34]):
|
|
278
380
|
return "P-384";
|
|
279
|
-
case
|
|
381
|
+
case E(e, [43, 129, 4, 0, 35]):
|
|
280
382
|
return "P-521";
|
|
281
|
-
case
|
|
383
|
+
case E(e, [43, 101, 110]):
|
|
282
384
|
return "X25519";
|
|
283
|
-
case
|
|
385
|
+
case E(e, [43, 101, 111]):
|
|
284
386
|
return "X448";
|
|
285
|
-
case
|
|
387
|
+
case E(e, [43, 101, 112]):
|
|
286
388
|
return "Ed25519";
|
|
287
|
-
case
|
|
389
|
+
case E(e, [43, 101, 113]):
|
|
288
390
|
return "Ed448";
|
|
289
391
|
default:
|
|
290
|
-
throw new
|
|
392
|
+
throw new w("Invalid or unsupported EC Key Curve or OKP Key Sub Type");
|
|
291
393
|
}
|
|
292
|
-
},
|
|
293
|
-
let i,
|
|
294
|
-
const c = new Uint8Array(atob(
|
|
295
|
-
switch (
|
|
394
|
+
}, we = async (e, t, r, n, a) => {
|
|
395
|
+
let i, o;
|
|
396
|
+
const c = new Uint8Array(atob(r.replace(e, "")).split("").map((s) => s.charCodeAt(0)));
|
|
397
|
+
switch (n) {
|
|
296
398
|
case "PS256":
|
|
297
399
|
case "PS384":
|
|
298
400
|
case "PS512":
|
|
299
|
-
i = { name: "RSA-PSS", hash: `SHA-${
|
|
401
|
+
i = { name: "RSA-PSS", hash: `SHA-${n.slice(-3)}` }, o = ["verify"];
|
|
300
402
|
break;
|
|
301
403
|
case "RS256":
|
|
302
404
|
case "RS384":
|
|
303
405
|
case "RS512":
|
|
304
|
-
i = { name: "RSASSA-PKCS1-v1_5", hash: `SHA-${
|
|
406
|
+
i = { name: "RSASSA-PKCS1-v1_5", hash: `SHA-${n.slice(-3)}` }, o = ["verify"];
|
|
305
407
|
break;
|
|
306
408
|
case "RSA-OAEP":
|
|
307
409
|
case "RSA-OAEP-256":
|
|
@@ -309,130 +411,130 @@ const ce = (e, t) => {
|
|
|
309
411
|
case "RSA-OAEP-512":
|
|
310
412
|
i = {
|
|
311
413
|
name: "RSA-OAEP",
|
|
312
|
-
hash: `SHA-${parseInt(
|
|
313
|
-
},
|
|
414
|
+
hash: `SHA-${parseInt(n.slice(-3), 10) || 1}`
|
|
415
|
+
}, o = ["encrypt", "wrapKey"];
|
|
314
416
|
break;
|
|
315
417
|
case "ES256":
|
|
316
|
-
i = { name: "ECDSA", namedCurve: "P-256" },
|
|
418
|
+
i = { name: "ECDSA", namedCurve: "P-256" }, o = ["verify"];
|
|
317
419
|
break;
|
|
318
420
|
case "ES384":
|
|
319
|
-
i = { name: "ECDSA", namedCurve: "P-384" },
|
|
421
|
+
i = { name: "ECDSA", namedCurve: "P-384" }, o = ["verify"];
|
|
320
422
|
break;
|
|
321
423
|
case "ES512":
|
|
322
|
-
i = { name: "ECDSA", namedCurve: "P-521" },
|
|
424
|
+
i = { name: "ECDSA", namedCurve: "P-521" }, o = ["verify"];
|
|
323
425
|
break;
|
|
324
426
|
case "ECDH-ES":
|
|
325
427
|
case "ECDH-ES+A128KW":
|
|
326
428
|
case "ECDH-ES+A192KW":
|
|
327
429
|
case "ECDH-ES+A256KW": {
|
|
328
|
-
const s =
|
|
329
|
-
i = s.startsWith("P-") ? { name: "ECDH", namedCurve: s } : { name: s },
|
|
430
|
+
const s = M(c);
|
|
431
|
+
i = s.startsWith("P-") ? { name: "ECDH", namedCurve: s } : { name: s }, o = [];
|
|
330
432
|
break;
|
|
331
433
|
}
|
|
332
434
|
case "EdDSA":
|
|
333
|
-
i = { name:
|
|
435
|
+
i = { name: M(c) }, o = ["verify"];
|
|
334
436
|
break;
|
|
335
437
|
default:
|
|
336
|
-
throw new
|
|
438
|
+
throw new w('Invalid or unsupported "alg" (Algorithm) value');
|
|
337
439
|
}
|
|
338
|
-
return
|
|
339
|
-
},
|
|
340
|
-
async function
|
|
440
|
+
return x.subtle.importKey(t, c, i, !1, o);
|
|
441
|
+
}, ge = (e, t, r) => we(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g, "spki", e, t);
|
|
442
|
+
async function be(e, t, r) {
|
|
341
443
|
if (e.indexOf("-----BEGIN PUBLIC KEY-----") !== 0)
|
|
342
444
|
throw new TypeError('"spki" must be SPKI formatted string');
|
|
343
|
-
return
|
|
445
|
+
return ge(e, t);
|
|
344
446
|
}
|
|
345
|
-
const
|
|
447
|
+
const P = (e) => e == null ? void 0 : e[Symbol.toStringTag], Ae = (e, t) => {
|
|
346
448
|
if (!(t instanceof Uint8Array)) {
|
|
347
|
-
if (!
|
|
348
|
-
throw new TypeError(
|
|
449
|
+
if (!Q(t))
|
|
450
|
+
throw new TypeError(Y(e, t, ...R, "Uint8Array"));
|
|
349
451
|
if (t.type !== "secret")
|
|
350
|
-
throw new TypeError(`${
|
|
452
|
+
throw new TypeError(`${P(t)} instances for symmetric algorithms must be of type "secret"`);
|
|
351
453
|
}
|
|
352
|
-
},
|
|
353
|
-
if (!
|
|
354
|
-
throw new TypeError(
|
|
454
|
+
}, Ce = (e, t, r) => {
|
|
455
|
+
if (!Q(t))
|
|
456
|
+
throw new TypeError(Y(e, t, ...R));
|
|
355
457
|
if (t.type === "secret")
|
|
356
|
-
throw new TypeError(`${
|
|
357
|
-
if (t.algorithm &&
|
|
358
|
-
throw new TypeError(`${
|
|
359
|
-
if (t.algorithm &&
|
|
360
|
-
throw new TypeError(`${
|
|
361
|
-
},
|
|
362
|
-
e.startsWith("HS") || e === "dir" || e.startsWith("PBES2") || /^A\d{3}(?:GCM)?KW$/.test(e) ?
|
|
458
|
+
throw new TypeError(`${P(t)} instances for asymmetric algorithms must not be of type "secret"`);
|
|
459
|
+
if (t.algorithm && r === "verify" && t.type === "private")
|
|
460
|
+
throw new TypeError(`${P(t)} instances for asymmetric algorithm verifying must be of type "public"`);
|
|
461
|
+
if (t.algorithm && r === "encrypt" && t.type === "private")
|
|
462
|
+
throw new TypeError(`${P(t)} instances for asymmetric algorithm encryption must be of type "public"`);
|
|
463
|
+
}, ve = (e, t, r) => {
|
|
464
|
+
e.startsWith("HS") || e === "dir" || e.startsWith("PBES2") || /^A\d{3}(?:GCM)?KW$/.test(e) ? Ae(e, t) : Ce(e, t, r);
|
|
363
465
|
};
|
|
364
|
-
function
|
|
365
|
-
if (
|
|
466
|
+
function Te(e, t, r, n, a) {
|
|
467
|
+
if (a.crit !== void 0 && (n == null ? void 0 : n.crit) === void 0)
|
|
366
468
|
throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');
|
|
367
|
-
if (!
|
|
469
|
+
if (!n || n.crit === void 0)
|
|
368
470
|
return /* @__PURE__ */ new Set();
|
|
369
|
-
if (!Array.isArray(
|
|
471
|
+
if (!Array.isArray(n.crit) || n.crit.length === 0 || n.crit.some((o) => typeof o != "string" || o.length === 0))
|
|
370
472
|
throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');
|
|
371
473
|
let i;
|
|
372
|
-
|
|
373
|
-
for (const
|
|
374
|
-
if (!i.has(
|
|
375
|
-
throw new
|
|
376
|
-
if (o
|
|
377
|
-
throw new e(`Extension Header Parameter "${
|
|
378
|
-
if (i.get(
|
|
379
|
-
throw new e(`Extension Header Parameter "${
|
|
380
|
-
}
|
|
381
|
-
return new Set(
|
|
382
|
-
}
|
|
383
|
-
const
|
|
384
|
-
if (t !== void 0 && (!Array.isArray(t) || t.some((
|
|
474
|
+
r !== void 0 ? i = new Map([...Object.entries(r), ...t.entries()]) : i = t;
|
|
475
|
+
for (const o of n.crit) {
|
|
476
|
+
if (!i.has(o))
|
|
477
|
+
throw new w(`Extension Header Parameter "${o}" is not recognized`);
|
|
478
|
+
if (a[o] === void 0)
|
|
479
|
+
throw new e(`Extension Header Parameter "${o}" is missing`);
|
|
480
|
+
if (i.get(o) && n[o] === void 0)
|
|
481
|
+
throw new e(`Extension Header Parameter "${o}" MUST be integrity protected`);
|
|
482
|
+
}
|
|
483
|
+
return new Set(n.crit);
|
|
484
|
+
}
|
|
485
|
+
const Ie = (e, t) => {
|
|
486
|
+
if (t !== void 0 && (!Array.isArray(t) || t.some((r) => typeof r != "string")))
|
|
385
487
|
throw new TypeError(`"${e}" option must be an array of strings`);
|
|
386
488
|
if (t)
|
|
387
489
|
return new Set(t);
|
|
388
490
|
};
|
|
389
|
-
function
|
|
390
|
-
const
|
|
491
|
+
function Pe(e, t) {
|
|
492
|
+
const r = `SHA-${e.slice(-3)}`;
|
|
391
493
|
switch (e) {
|
|
392
494
|
case "HS256":
|
|
393
495
|
case "HS384":
|
|
394
496
|
case "HS512":
|
|
395
|
-
return { hash:
|
|
497
|
+
return { hash: r, name: "HMAC" };
|
|
396
498
|
case "PS256":
|
|
397
499
|
case "PS384":
|
|
398
500
|
case "PS512":
|
|
399
|
-
return { hash:
|
|
501
|
+
return { hash: r, name: "RSA-PSS", saltLength: e.slice(-3) >> 3 };
|
|
400
502
|
case "RS256":
|
|
401
503
|
case "RS384":
|
|
402
504
|
case "RS512":
|
|
403
|
-
return { hash:
|
|
505
|
+
return { hash: r, name: "RSASSA-PKCS1-v1_5" };
|
|
404
506
|
case "ES256":
|
|
405
507
|
case "ES384":
|
|
406
508
|
case "ES512":
|
|
407
|
-
return { hash:
|
|
509
|
+
return { hash: r, name: "ECDSA", namedCurve: t.namedCurve };
|
|
408
510
|
case "EdDSA":
|
|
409
511
|
return { name: t.name };
|
|
410
512
|
default:
|
|
411
|
-
throw new
|
|
513
|
+
throw new w(`alg ${e} is not supported either by JOSE or your javascript runtime`);
|
|
412
514
|
}
|
|
413
515
|
}
|
|
414
|
-
function
|
|
415
|
-
if (
|
|
416
|
-
return
|
|
516
|
+
async function Re(e, t, r) {
|
|
517
|
+
if (t = await Ee.normalizePublicKey(t, e), G(t))
|
|
518
|
+
return ue(t, e, r), t;
|
|
417
519
|
if (t instanceof Uint8Array) {
|
|
418
520
|
if (!e.startsWith("HS"))
|
|
419
|
-
throw new TypeError(
|
|
420
|
-
return
|
|
521
|
+
throw new TypeError(L(t, ...R));
|
|
522
|
+
return x.subtle.importKey("raw", t, { hash: `SHA-${e.slice(-3)}`, name: "HMAC" }, !1, [r]);
|
|
421
523
|
}
|
|
422
|
-
throw new TypeError(
|
|
524
|
+
throw new TypeError(L(t, ...R, "Uint8Array"));
|
|
423
525
|
}
|
|
424
|
-
const
|
|
425
|
-
const
|
|
426
|
-
|
|
427
|
-
const i =
|
|
526
|
+
const _e = async (e, t, r, n) => {
|
|
527
|
+
const a = await Re(e, t, "verify");
|
|
528
|
+
fe(e, a);
|
|
529
|
+
const i = Pe(e, a.algorithm);
|
|
428
530
|
try {
|
|
429
|
-
return await
|
|
531
|
+
return await x.subtle.verify(i, a, r, n);
|
|
430
532
|
} catch {
|
|
431
533
|
return !1;
|
|
432
534
|
}
|
|
433
535
|
};
|
|
434
|
-
async function
|
|
435
|
-
if (!
|
|
536
|
+
async function xe(e, t, r) {
|
|
537
|
+
if (!_(e))
|
|
436
538
|
throw new u("Flattened JWS must be an object");
|
|
437
539
|
if (e.protected === void 0 && e.header === void 0)
|
|
438
540
|
throw new u('Flattened JWS must have either of the "protected" or "header" members');
|
|
@@ -442,245 +544,279 @@ async function we(e, t, n) {
|
|
|
442
544
|
throw new u("JWS Payload missing");
|
|
443
545
|
if (typeof e.signature != "string")
|
|
444
546
|
throw new u("JWS Signature missing or incorrect type");
|
|
445
|
-
if (e.header !== void 0 && !
|
|
547
|
+
if (e.header !== void 0 && !_(e.header))
|
|
446
548
|
throw new u("JWS Unprotected Header incorrect type");
|
|
447
|
-
let
|
|
549
|
+
let n = {};
|
|
448
550
|
if (e.protected)
|
|
449
551
|
try {
|
|
450
|
-
const
|
|
451
|
-
|
|
552
|
+
const O = A(e.protected);
|
|
553
|
+
n = JSON.parse(C.decode(O));
|
|
452
554
|
} catch {
|
|
453
555
|
throw new u("JWS Protected Header is invalid");
|
|
454
556
|
}
|
|
455
|
-
if (!
|
|
557
|
+
if (!le(n, e.header))
|
|
456
558
|
throw new u("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");
|
|
457
|
-
const
|
|
458
|
-
...
|
|
559
|
+
const a = {
|
|
560
|
+
...n,
|
|
459
561
|
...e.header
|
|
460
|
-
}, i =
|
|
461
|
-
let
|
|
462
|
-
if (i.has("b64") && (
|
|
562
|
+
}, i = Te(u, /* @__PURE__ */ new Map([["b64", !0]]), r == null ? void 0 : r.crit, n, a);
|
|
563
|
+
let o = !0;
|
|
564
|
+
if (i.has("b64") && (o = n.b64, typeof o != "boolean"))
|
|
463
565
|
throw new u('The "b64" (base64url-encode payload) Header Parameter must be a boolean');
|
|
464
|
-
const { alg: c } =
|
|
566
|
+
const { alg: c } = a;
|
|
465
567
|
if (typeof c != "string" || !c)
|
|
466
568
|
throw new u('JWS "alg" (Algorithm) Header Parameter missing or invalid');
|
|
467
|
-
const s =
|
|
569
|
+
const s = r && Ie("algorithms", r.algorithms);
|
|
468
570
|
if (s && !s.has(c))
|
|
469
|
-
throw new
|
|
470
|
-
if (
|
|
571
|
+
throw new ie('"alg" (Algorithm) Header Parameter value not allowed');
|
|
572
|
+
if (o) {
|
|
471
573
|
if (typeof e.payload != "string")
|
|
472
574
|
throw new u("JWS Payload must be a string");
|
|
473
575
|
} else if (typeof e.payload != "string" && !(e.payload instanceof Uint8Array))
|
|
474
576
|
throw new u("JWS Payload must be a string or an Uint8Array instance");
|
|
475
577
|
let p = !1;
|
|
476
|
-
typeof t == "function" && (t = await t(
|
|
477
|
-
const
|
|
478
|
-
let
|
|
578
|
+
typeof t == "function" && (t = await t(n, e), p = !0), ve(c, t, "verify");
|
|
579
|
+
const g = ae(v.encode(e.protected ?? ""), v.encode("."), typeof e.payload == "string" ? v.encode(e.payload) : e.payload);
|
|
580
|
+
let h;
|
|
479
581
|
try {
|
|
480
|
-
|
|
582
|
+
h = A(e.signature);
|
|
481
583
|
} catch {
|
|
482
584
|
throw new u("Failed to base64url decode the signature");
|
|
483
585
|
}
|
|
484
|
-
if (!await
|
|
485
|
-
throw new
|
|
586
|
+
if (!await _e(c, t, h, g))
|
|
587
|
+
throw new ce();
|
|
486
588
|
let y;
|
|
487
|
-
if (
|
|
589
|
+
if (o)
|
|
488
590
|
try {
|
|
489
|
-
y =
|
|
591
|
+
y = A(e.payload);
|
|
490
592
|
} catch {
|
|
491
593
|
throw new u("Failed to base64url decode the payload");
|
|
492
594
|
}
|
|
493
595
|
else
|
|
494
|
-
typeof e.payload == "string" ? y =
|
|
495
|
-
const
|
|
496
|
-
return e.protected !== void 0 && (
|
|
596
|
+
typeof e.payload == "string" ? y = v.encode(e.payload) : y = e.payload;
|
|
597
|
+
const l = { payload: y };
|
|
598
|
+
return e.protected !== void 0 && (l.protectedHeader = n), e.header !== void 0 && (l.unprotectedHeader = e.header), p ? { ...l, key: t } : l;
|
|
497
599
|
}
|
|
498
|
-
async function
|
|
499
|
-
if (e instanceof Uint8Array && (e =
|
|
600
|
+
async function Oe(e, t, r) {
|
|
601
|
+
if (e instanceof Uint8Array && (e = C.decode(e)), typeof e != "string")
|
|
500
602
|
throw new u("Compact JWS must be a string or Uint8Array");
|
|
501
|
-
const { 0:
|
|
502
|
-
if (
|
|
603
|
+
const { 0: n, 1: a, 2: i, length: o } = e.split(".");
|
|
604
|
+
if (o !== 3)
|
|
503
605
|
throw new u("Invalid Compact JWS");
|
|
504
|
-
const c = await
|
|
606
|
+
const c = await xe({ payload: a, protected: n, signature: i }, t, r), s = { payload: c.payload, protectedHeader: c.protectedHeader };
|
|
505
607
|
return typeof t == "function" ? { ...s, key: c.key } : s;
|
|
506
608
|
}
|
|
507
|
-
const
|
|
508
|
-
const t =
|
|
609
|
+
const Ke = (e) => Math.floor(e.getTime() / 1e3), ee = 60, te = ee * 60, H = te * 24, We = H * 7, Je = H * 365.25, De = /^(\+|\-)? ?(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i, V = (e) => {
|
|
610
|
+
const t = De.exec(e);
|
|
509
611
|
if (!t || t[4] && t[1])
|
|
510
612
|
throw new TypeError("Invalid time period format");
|
|
511
|
-
const
|
|
512
|
-
let
|
|
513
|
-
switch (
|
|
613
|
+
const r = parseFloat(t[2]), n = t[3].toLowerCase();
|
|
614
|
+
let a;
|
|
615
|
+
switch (n) {
|
|
514
616
|
case "sec":
|
|
515
617
|
case "secs":
|
|
516
618
|
case "second":
|
|
517
619
|
case "seconds":
|
|
518
620
|
case "s":
|
|
519
|
-
|
|
621
|
+
a = Math.round(r);
|
|
520
622
|
break;
|
|
521
623
|
case "minute":
|
|
522
624
|
case "minutes":
|
|
523
625
|
case "min":
|
|
524
626
|
case "mins":
|
|
525
627
|
case "m":
|
|
526
|
-
|
|
628
|
+
a = Math.round(r * ee);
|
|
527
629
|
break;
|
|
528
630
|
case "hour":
|
|
529
631
|
case "hours":
|
|
530
632
|
case "hr":
|
|
531
633
|
case "hrs":
|
|
532
634
|
case "h":
|
|
533
|
-
|
|
635
|
+
a = Math.round(r * te);
|
|
534
636
|
break;
|
|
535
637
|
case "day":
|
|
536
638
|
case "days":
|
|
537
639
|
case "d":
|
|
538
|
-
|
|
640
|
+
a = Math.round(r * H);
|
|
539
641
|
break;
|
|
540
642
|
case "week":
|
|
541
643
|
case "weeks":
|
|
542
644
|
case "w":
|
|
543
|
-
|
|
645
|
+
a = Math.round(r * We);
|
|
544
646
|
break;
|
|
545
647
|
default:
|
|
546
|
-
|
|
648
|
+
a = Math.round(r * Je);
|
|
547
649
|
break;
|
|
548
650
|
}
|
|
549
|
-
return t[1] === "-" || t[4] === "ago" ? -
|
|
550
|
-
},
|
|
551
|
-
let
|
|
651
|
+
return t[1] === "-" || t[4] === "ago" ? -a : a;
|
|
652
|
+
}, k = (e) => e.toLowerCase().replace(/^application\//, ""), He = (e, t) => typeof e == "string" ? t.includes(e) : Array.isArray(e) ? t.some(Set.prototype.has.bind(new Set(e))) : !1, Ue = (e, t, r = {}) => {
|
|
653
|
+
let n;
|
|
552
654
|
try {
|
|
553
|
-
|
|
655
|
+
n = JSON.parse(C.decode(t));
|
|
554
656
|
} catch {
|
|
555
657
|
}
|
|
556
|
-
if (!
|
|
557
|
-
throw new
|
|
558
|
-
const { typ:
|
|
559
|
-
if (
|
|
560
|
-
throw new
|
|
561
|
-
const { requiredClaims: i = [], issuer:
|
|
562
|
-
p !== void 0 &&
|
|
563
|
-
for (const
|
|
564
|
-
if (!(
|
|
565
|
-
throw new
|
|
566
|
-
if (
|
|
567
|
-
throw new
|
|
568
|
-
if (c &&
|
|
569
|
-
throw new
|
|
570
|
-
if (s && !
|
|
571
|
-
throw new
|
|
572
|
-
let
|
|
573
|
-
switch (typeof
|
|
658
|
+
if (!_(n))
|
|
659
|
+
throw new S("JWT Claims Set must be a top-level JSON object");
|
|
660
|
+
const { typ: a } = r;
|
|
661
|
+
if (a && (typeof e.typ != "string" || k(e.typ) !== k(a)))
|
|
662
|
+
throw new f('unexpected "typ" JWT header value', n, "typ", "check_failed");
|
|
663
|
+
const { requiredClaims: i = [], issuer: o, subject: c, audience: s, maxTokenAge: p } = r, g = [...i];
|
|
664
|
+
p !== void 0 && g.push("iat"), s !== void 0 && g.push("aud"), c !== void 0 && g.push("sub"), o !== void 0 && g.push("iss");
|
|
665
|
+
for (const l of new Set(g.reverse()))
|
|
666
|
+
if (!(l in n))
|
|
667
|
+
throw new f(`missing required "${l}" claim`, n, l, "missing");
|
|
668
|
+
if (o && !(Array.isArray(o) ? o : [o]).includes(n.iss))
|
|
669
|
+
throw new f('unexpected "iss" claim value', n, "iss", "check_failed");
|
|
670
|
+
if (c && n.sub !== c)
|
|
671
|
+
throw new f('unexpected "sub" claim value', n, "sub", "check_failed");
|
|
672
|
+
if (s && !He(n.aud, typeof s == "string" ? [s] : s))
|
|
673
|
+
throw new f('unexpected "aud" claim value', n, "aud", "check_failed");
|
|
674
|
+
let h;
|
|
675
|
+
switch (typeof r.clockTolerance) {
|
|
574
676
|
case "string":
|
|
575
|
-
|
|
677
|
+
h = V(r.clockTolerance);
|
|
576
678
|
break;
|
|
577
679
|
case "number":
|
|
578
|
-
|
|
680
|
+
h = r.clockTolerance;
|
|
579
681
|
break;
|
|
580
682
|
case "undefined":
|
|
581
|
-
|
|
683
|
+
h = 0;
|
|
582
684
|
break;
|
|
583
685
|
default:
|
|
584
686
|
throw new TypeError("Invalid clockTolerance option type");
|
|
585
687
|
}
|
|
586
|
-
const { currentDate:
|
|
587
|
-
if ((
|
|
588
|
-
throw new
|
|
589
|
-
if (
|
|
590
|
-
if (typeof
|
|
591
|
-
throw new
|
|
592
|
-
if (
|
|
593
|
-
throw new
|
|
594
|
-
}
|
|
595
|
-
if (
|
|
596
|
-
if (typeof
|
|
597
|
-
throw new
|
|
598
|
-
if (
|
|
599
|
-
throw new
|
|
688
|
+
const { currentDate: U } = r, y = Ke(U || /* @__PURE__ */ new Date());
|
|
689
|
+
if ((n.iat !== void 0 || p) && typeof n.iat != "number")
|
|
690
|
+
throw new f('"iat" claim must be a number', n, "iat", "invalid");
|
|
691
|
+
if (n.nbf !== void 0) {
|
|
692
|
+
if (typeof n.nbf != "number")
|
|
693
|
+
throw new f('"nbf" claim must be a number', n, "nbf", "invalid");
|
|
694
|
+
if (n.nbf > y + h)
|
|
695
|
+
throw new f('"nbf" claim timestamp check failed', n, "nbf", "check_failed");
|
|
696
|
+
}
|
|
697
|
+
if (n.exp !== void 0) {
|
|
698
|
+
if (typeof n.exp != "number")
|
|
699
|
+
throw new f('"exp" claim must be a number', n, "exp", "invalid");
|
|
700
|
+
if (n.exp <= y - h)
|
|
701
|
+
throw new $('"exp" claim timestamp check failed', n, "exp", "check_failed");
|
|
600
702
|
}
|
|
601
703
|
if (p) {
|
|
602
|
-
const
|
|
603
|
-
if (
|
|
604
|
-
throw new
|
|
605
|
-
if (
|
|
606
|
-
throw new
|
|
704
|
+
const l = y - n.iat, O = typeof p == "number" ? p : V(p);
|
|
705
|
+
if (l - h > O)
|
|
706
|
+
throw new $('"iat" claim timestamp check failed (too far in the past)', n, "iat", "check_failed");
|
|
707
|
+
if (l < 0 - h)
|
|
708
|
+
throw new f('"iat" claim timestamp check failed (it should be in the past)', n, "iat", "check_failed");
|
|
607
709
|
}
|
|
608
|
-
return
|
|
710
|
+
return n;
|
|
609
711
|
};
|
|
610
|
-
async function
|
|
611
|
-
var
|
|
612
|
-
const
|
|
613
|
-
if ((
|
|
614
|
-
throw new
|
|
615
|
-
const i = { payload:
|
|
616
|
-
return typeof t == "function" ? { ...i, key:
|
|
617
|
-
}
|
|
618
|
-
const
|
|
712
|
+
async function Ne(e, t, r) {
|
|
713
|
+
var o;
|
|
714
|
+
const n = await Oe(e, t, r);
|
|
715
|
+
if ((o = n.protectedHeader.crit) != null && o.includes("b64") && n.protectedHeader.b64 === !1)
|
|
716
|
+
throw new S("JWTs MUST NOT use unencoded payload");
|
|
717
|
+
const i = { payload: Ue(n.protectedHeader, n.payload, r), protectedHeader: n.protectedHeader };
|
|
718
|
+
return typeof t == "function" ? { ...i, key: n.key } : i;
|
|
719
|
+
}
|
|
720
|
+
const $e = A;
|
|
721
|
+
function Le(e) {
|
|
722
|
+
if (typeof e != "string")
|
|
723
|
+
throw new S("JWTs must use Compact JWS serialization, JWT must be a string");
|
|
724
|
+
const { 1: t, length: r } = e.split(".");
|
|
725
|
+
if (r === 5)
|
|
726
|
+
throw new S("Only JWTs using Compact JWS serialization can be decoded");
|
|
727
|
+
if (r !== 3)
|
|
728
|
+
throw new S("Invalid JWT");
|
|
729
|
+
if (!t)
|
|
730
|
+
throw new S("JWTs must contain a payload");
|
|
731
|
+
let n;
|
|
732
|
+
try {
|
|
733
|
+
n = $e(t);
|
|
734
|
+
} catch {
|
|
735
|
+
throw new S("Failed to base64url decode the payload");
|
|
736
|
+
}
|
|
737
|
+
let a;
|
|
619
738
|
try {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
739
|
+
a = JSON.parse(C.decode(n));
|
|
740
|
+
} catch {
|
|
741
|
+
throw new S("Failed to parse the decoded payload as JSON");
|
|
742
|
+
}
|
|
743
|
+
if (!_(a))
|
|
744
|
+
throw new S("Invalid JWT Claims Set");
|
|
745
|
+
return a;
|
|
746
|
+
}
|
|
747
|
+
const Xe = async (e) => {
|
|
748
|
+
try {
|
|
749
|
+
const t = N.ALG, n = await be(ne, t);
|
|
750
|
+
return await Ne(e, n, {
|
|
751
|
+
issuer: N.ISSUER
|
|
623
752
|
});
|
|
624
753
|
} catch {
|
|
625
754
|
return;
|
|
626
755
|
}
|
|
756
|
+
}, Ze = (e) => {
|
|
757
|
+
try {
|
|
758
|
+
return Le(e);
|
|
759
|
+
} catch {
|
|
760
|
+
return;
|
|
761
|
+
}
|
|
627
762
|
};
|
|
628
763
|
var d = [];
|
|
629
|
-
for (var
|
|
630
|
-
d.push((
|
|
631
|
-
function
|
|
764
|
+
for (var D = 0; D < 256; ++D)
|
|
765
|
+
d.push((D + 256).toString(16).slice(1));
|
|
766
|
+
function Me(e, t = 0) {
|
|
632
767
|
return (d[e[t + 0]] + d[e[t + 1]] + d[e[t + 2]] + d[e[t + 3]] + "-" + d[e[t + 4]] + d[e[t + 5]] + "-" + d[e[t + 6]] + d[e[t + 7]] + "-" + d[e[t + 8]] + d[e[t + 9]] + "-" + d[e[t + 10]] + d[e[t + 11]] + d[e[t + 12]] + d[e[t + 13]] + d[e[t + 14]] + d[e[t + 15]]).toLowerCase();
|
|
633
768
|
}
|
|
634
|
-
var I,
|
|
635
|
-
function
|
|
769
|
+
var I, Ve = new Uint8Array(16);
|
|
770
|
+
function ke() {
|
|
636
771
|
if (!I && (I = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !I))
|
|
637
772
|
throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
|
|
638
|
-
return I(
|
|
773
|
+
return I(Ve);
|
|
639
774
|
}
|
|
640
|
-
var
|
|
641
|
-
const
|
|
642
|
-
randomUUID:
|
|
775
|
+
var Be = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
776
|
+
const B = {
|
|
777
|
+
randomUUID: Be
|
|
643
778
|
};
|
|
644
|
-
function
|
|
645
|
-
if (
|
|
646
|
-
return
|
|
779
|
+
function F(e, t, r) {
|
|
780
|
+
if (B.randomUUID && !t && !e)
|
|
781
|
+
return B.randomUUID();
|
|
647
782
|
e = e || {};
|
|
648
|
-
var
|
|
649
|
-
return
|
|
783
|
+
var n = e.random || (e.rng || ke)();
|
|
784
|
+
return n[6] = n[6] & 15 | 64, n[8] = n[8] & 63 | 128, Me(n);
|
|
650
785
|
}
|
|
651
|
-
const
|
|
786
|
+
const q = globalThis.crypto, Fe = (e) => `${F()}${F()}`.slice(0, e), qe = (e) => btoa(
|
|
652
787
|
[...new Uint8Array(e)].map((t) => String.fromCharCode(t)).join("")
|
|
653
788
|
);
|
|
654
|
-
async function
|
|
655
|
-
if (!
|
|
789
|
+
async function re(e) {
|
|
790
|
+
if (!q.subtle)
|
|
656
791
|
throw new Error(
|
|
657
792
|
"crypto.subtle is available only in secure contexts (HTTPS)."
|
|
658
793
|
);
|
|
659
|
-
const t = new TextEncoder().encode(e),
|
|
660
|
-
return
|
|
794
|
+
const t = new TextEncoder().encode(e), r = await q.subtle.digest("SHA-256", t);
|
|
795
|
+
return qe(r).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
661
796
|
}
|
|
662
|
-
async function
|
|
797
|
+
async function je(e) {
|
|
663
798
|
const t = e || 43;
|
|
664
799
|
if (t < 43 || t > 128)
|
|
665
800
|
throw `Expected a length between 43 and 128. Received ${e}.`;
|
|
666
|
-
const
|
|
801
|
+
const r = Fe(t), n = await re(r);
|
|
667
802
|
return {
|
|
668
|
-
code_verifier:
|
|
669
|
-
code_challenge:
|
|
803
|
+
code_verifier: r,
|
|
804
|
+
code_challenge: n
|
|
670
805
|
};
|
|
671
806
|
}
|
|
672
|
-
async function
|
|
673
|
-
return t === await
|
|
807
|
+
async function et(e, t) {
|
|
808
|
+
return t === await re(e);
|
|
674
809
|
}
|
|
675
810
|
export {
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
811
|
+
Qe as API_TYPE,
|
|
812
|
+
Ge as AUTH_TYPES,
|
|
813
|
+
ze as HEADERS,
|
|
814
|
+
N as JWT,
|
|
815
|
+
ne as JWT_PUBLIC_KEY,
|
|
816
|
+
Ye as TOKEN_EXPIRATION,
|
|
817
|
+
Ze as decodeToken,
|
|
818
|
+
re as generateCodeChallenge,
|
|
819
|
+
je as pkceChallengePair,
|
|
820
|
+
Xe as verifyAndExtractToken,
|
|
821
|
+
et as verifyChallenge
|
|
686
822
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@versini/auth-common",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Arno Versini",
|
|
6
6
|
"publishConfig": {
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"test": "vitest run"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"jose": "5.
|
|
35
|
+
"jose": "5.6.2",
|
|
36
36
|
"uuid": "10.0.0"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "5abd68fc5595a95360b4e80088cc39c067722085"
|
|
39
39
|
}
|