@broberg/sso 0.19.0 → 0.20.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/README.md +31 -0
- package/dist/{chunk-MZE4TPFU.cjs → chunk-KEBSZBHL.cjs} +22 -5
- package/dist/chunk-KEBSZBHL.cjs.map +1 -0
- package/dist/{chunk-PQTT74BA.js → chunk-ZDNBHM2G.js} +22 -5
- package/dist/chunk-ZDNBHM2G.js.map +1 -0
- package/dist/hono.cjs +37 -37
- package/dist/hono.d.cts +1 -1
- package/dist/hono.d.ts +1 -1
- package/dist/hono.js +1 -1
- package/dist/index.cjs +116 -82
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +95 -60
- package/dist/index.d.ts +95 -60
- package/dist/index.js +50 -17
- package/dist/index.js.map +1 -1
- package/dist/{session-qvhMg3ID.d.cts → session-AgUJ6U_7.d.cts} +10 -1
- package/dist/{session-qvhMg3ID.d.ts → session-AgUJ6U_7.d.ts} +10 -1
- package/package.json +1 -1
- package/dist/chunk-MZE4TPFU.cjs.map +0 -1
- package/dist/chunk-PQTT74BA.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkKEBSZBHL_cjs = require('./chunk-KEBSZBHL.cjs');
|
|
4
4
|
var fs = require('fs');
|
|
5
5
|
var http = require('http');
|
|
6
6
|
var jose = require('jose');
|
|
@@ -48,37 +48,37 @@ async function verifyDpopProof(proof, o) {
|
|
|
48
48
|
try {
|
|
49
49
|
header = jose.decodeProtectedHeader(proof);
|
|
50
50
|
} catch {
|
|
51
|
-
throw new
|
|
51
|
+
throw new chunkKEBSZBHL_cjs.SsoError("DPoP proof is not a JWS");
|
|
52
52
|
}
|
|
53
|
-
if (header.typ !== "dpop+jwt") throw new
|
|
54
|
-
if (!header.alg || !ASYMMETRIC.has(header.alg)) throw new
|
|
53
|
+
if (header.typ !== "dpop+jwt") throw new chunkKEBSZBHL_cjs.SsoError(`DPoP proof has typ ${JSON.stringify(header.typ)}, not "dpop+jwt"`);
|
|
54
|
+
if (!header.alg || !ASYMMETRIC.has(header.alg)) throw new chunkKEBSZBHL_cjs.SsoError(`DPoP proof alg ${JSON.stringify(header.alg)} is not an accepted asymmetric algorithm`);
|
|
55
55
|
const jwk = header.jwk;
|
|
56
|
-
if (!jwk || typeof jwk !== "object") throw new
|
|
57
|
-
if ("d" in jwk) throw new
|
|
56
|
+
if (!jwk || typeof jwk !== "object") throw new chunkKEBSZBHL_cjs.SsoError("DPoP proof carries no jwk");
|
|
57
|
+
if ("d" in jwk) throw new chunkKEBSZBHL_cjs.SsoError("DPoP proof jwk contains a private key");
|
|
58
58
|
let payload;
|
|
59
59
|
try {
|
|
60
60
|
const key = await jose.importJWK(jwk, header.alg);
|
|
61
61
|
({ payload } = await jose.jwtVerify(proof, key, { typ: "dpop+jwt", algorithms: [header.alg] }));
|
|
62
62
|
} catch (e) {
|
|
63
|
-
throw new
|
|
63
|
+
throw new chunkKEBSZBHL_cjs.SsoError(`DPoP proof signature rejected: ${e instanceof Error ? e.message : String(e)}`);
|
|
64
64
|
}
|
|
65
|
-
if (await jose.calculateJwkThumbprint(jwk) !== o.jkt) throw new
|
|
66
|
-
if (payload.htm !== o.method.toUpperCase()) throw new
|
|
65
|
+
if (await jose.calculateJwkThumbprint(jwk) !== o.jkt) throw new chunkKEBSZBHL_cjs.SsoError("DPoP proof key does not match the ticket's cnf.jkt");
|
|
66
|
+
if (payload.htm !== o.method.toUpperCase()) throw new chunkKEBSZBHL_cjs.SsoError(`DPoP proof is for ${JSON.stringify(payload.htm)}, the request is ${o.method.toUpperCase()}`);
|
|
67
67
|
let htu;
|
|
68
68
|
try {
|
|
69
69
|
htu = normalizeHtu(String(payload.htu));
|
|
70
70
|
} catch {
|
|
71
|
-
throw new
|
|
71
|
+
throw new chunkKEBSZBHL_cjs.SsoError("DPoP proof htu is not a URL");
|
|
72
72
|
}
|
|
73
|
-
if (htu !== normalizeHtu(o.url)) throw new
|
|
73
|
+
if (htu !== normalizeHtu(o.url)) throw new chunkKEBSZBHL_cjs.SsoError(`DPoP proof is for ${htu}, the request is ${normalizeHtu(o.url)}`);
|
|
74
74
|
const nowSec = Math.floor(o.now() / 1e3);
|
|
75
75
|
if (typeof payload.iat !== "number" || Math.abs(nowSec - payload.iat) > o.iatWindowSec) {
|
|
76
|
-
throw new
|
|
76
|
+
throw new chunkKEBSZBHL_cjs.SsoError(`DPoP proof iat is outside \xB1${o.iatWindowSec}s`);
|
|
77
77
|
}
|
|
78
|
-
if (payload.ath !== await accessTokenHash(o.ticket)) throw new
|
|
79
|
-
if (typeof payload.jti !== "string" || payload.jti === "") throw new
|
|
78
|
+
if (payload.ath !== await accessTokenHash(o.ticket)) throw new chunkKEBSZBHL_cjs.SsoError("DPoP proof ath does not match this ticket");
|
|
79
|
+
if (typeof payload.jti !== "string" || payload.jti === "") throw new chunkKEBSZBHL_cjs.SsoError("DPoP proof has no jti");
|
|
80
80
|
if (await o.replay.seen(`${o.jkt}:${payload.jti}`, o.iatWindowSec * 2 * 1e3)) {
|
|
81
|
-
throw new
|
|
81
|
+
throw new chunkKEBSZBHL_cjs.SsoError("DPoP proof was already used (jti replay)");
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -134,6 +134,22 @@ function jwtExp(token) {
|
|
|
134
134
|
return null;
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
|
+
async function readTicketResponse(res, issuer, target, now) {
|
|
138
|
+
let body = {};
|
|
139
|
+
try {
|
|
140
|
+
body = await res.json();
|
|
141
|
+
} catch {
|
|
142
|
+
}
|
|
143
|
+
if (res.status >= 500) throw new TicketUnavailableError(`${issuer} answered ${res.status}`);
|
|
144
|
+
if (!res.ok || !body.access_token) {
|
|
145
|
+
const desc = body.error_description ?? "";
|
|
146
|
+
const code = desc.includes(":") ? desc.slice(0, desc.indexOf(":")).trim() : body.error ?? "exchange_refused";
|
|
147
|
+
throw new TicketExchangeError(`BID refused the ticket for ${target}: ${desc || body.error || res.status}`, code, res.status);
|
|
148
|
+
}
|
|
149
|
+
const nowSec = Math.floor(now() / 1e3);
|
|
150
|
+
const exp = jwtExp(body.access_token) ?? nowSec + (body.expires_in ?? 300);
|
|
151
|
+
return { token: body.access_token, exp };
|
|
152
|
+
}
|
|
137
153
|
function createTicketClient(options = {}) {
|
|
138
154
|
const issuer = (options.issuer ?? DEFAULT_ISSUER).replace(/\/+$/, "");
|
|
139
155
|
const renewBeforeSec = options.renewBeforeSec ?? 30;
|
|
@@ -184,20 +200,7 @@ function createTicketClient(options = {}) {
|
|
|
184
200
|
} catch (e) {
|
|
185
201
|
throw new TicketUnavailableError(`${issuer} unreachable: ${e instanceof Error ? e.message : String(e)}`);
|
|
186
202
|
}
|
|
187
|
-
|
|
188
|
-
try {
|
|
189
|
-
body = await res.json();
|
|
190
|
-
} catch {
|
|
191
|
-
}
|
|
192
|
-
if (res.status >= 500) throw new TicketUnavailableError(`${issuer} answered ${res.status}`);
|
|
193
|
-
if (!res.ok || !body.access_token) {
|
|
194
|
-
const desc = body.error_description ?? "";
|
|
195
|
-
const code = desc.includes(":") ? desc.slice(0, desc.indexOf(":")).trim() : body.error ?? "exchange_refused";
|
|
196
|
-
throw new TicketExchangeError(`BID refused the ticket for ${audience}: ${desc || body.error || res.status}`, code, res.status);
|
|
197
|
-
}
|
|
198
|
-
const nowSec = Math.floor(now() / 1e3);
|
|
199
|
-
const exp = jwtExp(body.access_token) ?? nowSec + (body.expires_in ?? 300);
|
|
200
|
-
return { token: body.access_token, exp };
|
|
203
|
+
return readTicketResponse(res, issuer, audience, now);
|
|
201
204
|
}
|
|
202
205
|
const client = {
|
|
203
206
|
async authHeaders({ audience, scope, method, url }) {
|
|
@@ -226,6 +229,36 @@ function fetchTicket(opts) {
|
|
|
226
229
|
shared ??= createTicketClient();
|
|
227
230
|
return shared.get(opts);
|
|
228
231
|
}
|
|
232
|
+
async function exchangeUserToken(opts) {
|
|
233
|
+
const issuer = (opts.issuer ?? DEFAULT_ISSUER).replace(/\/+$/, "");
|
|
234
|
+
const target = opts.resource ?? opts.audience;
|
|
235
|
+
if (!target) throw new TicketExchangeError("exchangeUserToken needs a receiver: resource (its URL) or audience (BID's name for it)", "malformed_request", 0);
|
|
236
|
+
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
237
|
+
const now = opts.now ?? (() => Date.now());
|
|
238
|
+
const form = new URLSearchParams({
|
|
239
|
+
grant_type: "urn:ietf:params:oauth:grant-type:token-exchange",
|
|
240
|
+
subject_token: opts.subjectToken,
|
|
241
|
+
subject_token_type: "urn:ietf:params:oauth:token-type:access_token"
|
|
242
|
+
});
|
|
243
|
+
if (opts.resource) form.set("resource", opts.resource);
|
|
244
|
+
if (opts.audience) form.set("audience", opts.audience);
|
|
245
|
+
if (opts.scope) form.set("scope", opts.scope);
|
|
246
|
+
const tokenUrl = `${issuer}/oauth2/token`;
|
|
247
|
+
const headers = { "content-type": "application/x-www-form-urlencoded" };
|
|
248
|
+
if (opts.clientSecret) {
|
|
249
|
+
headers.authorization = `Basic ${btoa(`${encodeURIComponent(opts.clientId)}:${encodeURIComponent(opts.clientSecret)}`)}`;
|
|
250
|
+
} else {
|
|
251
|
+
form.set("client_id", opts.clientId);
|
|
252
|
+
}
|
|
253
|
+
if (opts.dpopKey) headers.dpop = await createDpopProof(opts.dpopKey, { method: "POST", url: tokenUrl, now });
|
|
254
|
+
let res;
|
|
255
|
+
try {
|
|
256
|
+
res = await fetchImpl(tokenUrl, { method: "POST", headers, body: form });
|
|
257
|
+
} catch (e) {
|
|
258
|
+
throw new TicketUnavailableError(`${issuer} unreachable: ${e instanceof Error ? e.message : String(e)}`);
|
|
259
|
+
}
|
|
260
|
+
return readTicketResponse(res, issuer, target, now);
|
|
261
|
+
}
|
|
229
262
|
var PRINCIPAL_TYPES = ["human", "service", "agent", "user"];
|
|
230
263
|
var TICKET_FORMAT_VERSION = 1;
|
|
231
264
|
var MAX_ACT_DEPTH = 5;
|
|
@@ -241,10 +274,10 @@ function createTicketVerifier(options) {
|
|
|
241
274
|
now = () => Date.now()
|
|
242
275
|
} = options;
|
|
243
276
|
const replayStore = options.replayStore ?? createMemoryReplayStore(now);
|
|
244
|
-
if (!issuer) throw new
|
|
245
|
-
if (!audience) throw new
|
|
277
|
+
if (!issuer) throw new chunkKEBSZBHL_cjs.SsoError("createTicketVerifier needs an issuer");
|
|
278
|
+
if (!audience) throw new chunkKEBSZBHL_cjs.SsoError("createTicketVerifier needs this receiver's audience");
|
|
246
279
|
let cachePromise = null;
|
|
247
|
-
const cacheFor = (jwksUri) =>
|
|
280
|
+
const cacheFor = (jwksUri) => chunkKEBSZBHL_cjs.createJwksCache({
|
|
248
281
|
jwksUri,
|
|
249
282
|
fetchImpl,
|
|
250
283
|
...options.warmUp ? { warmUp: true } : {},
|
|
@@ -260,12 +293,12 @@ function createTicketVerifier(options) {
|
|
|
260
293
|
if (!res.ok) throw new Error(`answered ${res.status}`);
|
|
261
294
|
doc = await res.json();
|
|
262
295
|
} catch (cause) {
|
|
263
|
-
throw new
|
|
296
|
+
throw new chunkKEBSZBHL_cjs.JwksUnavailableError(`${url}: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
264
297
|
}
|
|
265
298
|
if (doc.issuer !== issuer) {
|
|
266
|
-
throw new
|
|
299
|
+
throw new chunkKEBSZBHL_cjs.SsoError(`issuer is ${issuer} but ${url} says ${doc.issuer} \u2014 they must match exactly`);
|
|
267
300
|
}
|
|
268
|
-
if (!doc.jwks_uri) throw new
|
|
301
|
+
if (!doc.jwks_uri) throw new chunkKEBSZBHL_cjs.SsoError(`${url} names no jwks_uri`);
|
|
269
302
|
return cacheFor(doc.jwks_uri);
|
|
270
303
|
})().catch((err) => {
|
|
271
304
|
cachePromise = null;
|
|
@@ -281,51 +314,51 @@ function createTicketVerifier(options) {
|
|
|
281
314
|
try {
|
|
282
315
|
header = jose.decodeProtectedHeader(token);
|
|
283
316
|
} catch {
|
|
284
|
-
throw new
|
|
317
|
+
throw new chunkKEBSZBHL_cjs.SsoError("ticket is not a JWS");
|
|
285
318
|
}
|
|
286
|
-
if (!header.kid) throw new
|
|
287
|
-
if (header.typ === "logout+jwt") throw new
|
|
319
|
+
if (!header.kid) throw new chunkKEBSZBHL_cjs.SsoError("ticket has no kid \u2014 cannot pick a signing key");
|
|
320
|
+
if (header.typ === "logout+jwt") throw new chunkKEBSZBHL_cjs.SsoError("a logout token is not a ticket");
|
|
288
321
|
const cache = await keys();
|
|
289
322
|
let payload;
|
|
290
323
|
try {
|
|
291
324
|
({ payload } = await jose.jwtVerify(token, async () => cache.getKey(header.kid, header.alg ?? "EdDSA"), {
|
|
292
325
|
issuer,
|
|
293
326
|
audience,
|
|
294
|
-
algorithms:
|
|
327
|
+
algorithms: chunkKEBSZBHL_cjs.ALLOWED_ALGS,
|
|
295
328
|
clockTolerance: clockToleranceSec,
|
|
296
329
|
requiredClaims: ["exp", "iat", "jti", "sub"]
|
|
297
330
|
}));
|
|
298
331
|
} catch (e) {
|
|
299
|
-
if (e instanceof
|
|
300
|
-
throw new
|
|
332
|
+
if (e instanceof chunkKEBSZBHL_cjs.JwksUnavailableError) throw e;
|
|
333
|
+
throw new chunkKEBSZBHL_cjs.SsoError(`ticket rejected: ${e instanceof Error ? e.message : String(e)}`);
|
|
301
334
|
}
|
|
302
|
-
if ("events" in payload) throw new
|
|
303
|
-
if ("nonce" in payload) throw new
|
|
335
|
+
if ("events" in payload) throw new chunkKEBSZBHL_cjs.SsoError("a logout token is not a ticket");
|
|
336
|
+
if ("nonce" in payload) throw new chunkKEBSZBHL_cjs.SsoError("an ID token is not a ticket");
|
|
304
337
|
const type = payload.principal_type;
|
|
305
338
|
if (typeof type !== "string" || !PRINCIPAL_TYPES.includes(type)) {
|
|
306
|
-
throw new
|
|
339
|
+
throw new chunkKEBSZBHL_cjs.SsoError(`ticket has no valid principal_type (got ${JSON.stringify(type)})`);
|
|
307
340
|
}
|
|
308
341
|
const lifetime = payload.exp - payload.iat;
|
|
309
342
|
if (lifetime > maxLifetimeSec) {
|
|
310
|
-
throw new
|
|
343
|
+
throw new chunkKEBSZBHL_cjs.SsoError(`ticket claims a ${lifetime}s lifetime; at most ${maxLifetimeSec}s is accepted`);
|
|
311
344
|
}
|
|
312
|
-
if (typeof payload.sub !== "string" || payload.sub === "") throw new
|
|
345
|
+
if (typeof payload.sub !== "string" || payload.sub === "") throw new chunkKEBSZBHL_cjs.SsoError("ticket has no sub");
|
|
313
346
|
const scopes = typeof payload.scope === "string" ? payload.scope.split(" ").filter(Boolean) : [];
|
|
314
347
|
const required = opts.scope === void 0 ? [] : Array.isArray(opts.scope) ? opts.scope : [opts.scope];
|
|
315
348
|
const missing = required.filter((s) => !scopes.includes(s));
|
|
316
|
-
if (missing.length) throw new
|
|
349
|
+
if (missing.length) throw new chunkKEBSZBHL_cjs.SsoError(`ticket lacks scope ${missing.join(", ")}`);
|
|
317
350
|
const ver = payload.ver === void 0 ? 0 : payload.ver;
|
|
318
351
|
if (typeof ver !== "number" || !Number.isInteger(ver) || ver < 0) {
|
|
319
|
-
throw new
|
|
352
|
+
throw new chunkKEBSZBHL_cjs.SsoError(`ticket has an invalid ver (got ${JSON.stringify(payload.ver)})`);
|
|
320
353
|
}
|
|
321
354
|
if (ver > TICKET_FORMAT_VERSION) {
|
|
322
|
-
throw new
|
|
355
|
+
throw new chunkKEBSZBHL_cjs.SsoError(`ticket format version ${ver} is newer than this @broberg/sso understands (${TICKET_FORMAT_VERSION}) \u2014 upgrade @broberg/sso`);
|
|
323
356
|
}
|
|
324
357
|
const act = payload.act === void 0 ? null : readActor(payload.act, 1);
|
|
325
358
|
const cnfRaw = payload.cnf;
|
|
326
359
|
const cnf = cnfRaw && typeof cnfRaw.jkt === "string" && cnfRaw.jkt ? { jkt: cnfRaw.jkt } : null;
|
|
327
360
|
if (cnf) {
|
|
328
|
-
if (!opts.dpop?.proof) throw new
|
|
361
|
+
if (!opts.dpop?.proof) throw new chunkKEBSZBHL_cjs.SsoError("ticket is DPoP-bound (cnf.jkt) but no DPoP proof was presented");
|
|
329
362
|
await verifyDpopProof(opts.dpop.proof, {
|
|
330
363
|
method: opts.dpop.method,
|
|
331
364
|
url: opts.dpop.url,
|
|
@@ -336,11 +369,11 @@ function createTicketVerifier(options) {
|
|
|
336
369
|
now
|
|
337
370
|
});
|
|
338
371
|
} else if (requireDpop) {
|
|
339
|
-
throw new
|
|
372
|
+
throw new chunkKEBSZBHL_cjs.SsoError(cnfRaw !== void 0 ? "ticket has a cnf without a string jkt \u2014 DPoP is required here" : "this receiver requires DPoP; the ticket is not bound (no cnf.jkt)");
|
|
340
373
|
}
|
|
341
374
|
const named = (v) => typeof v === "string" && v ? v : null;
|
|
342
375
|
const clientId = type === "user" ? named(payload.client_id) ?? named(payload.azp) : named(payload.client_id) ?? payload.sub;
|
|
343
|
-
if (clientId === null) throw new
|
|
376
|
+
if (clientId === null) throw new chunkKEBSZBHL_cjs.SsoError("a user ticket names no app (no client_id or azp)");
|
|
344
377
|
return {
|
|
345
378
|
principal: payload.sub,
|
|
346
379
|
type,
|
|
@@ -357,125 +390,125 @@ function createTicketVerifier(options) {
|
|
|
357
390
|
};
|
|
358
391
|
}
|
|
359
392
|
function readActor(raw, depth) {
|
|
360
|
-
if (depth > MAX_ACT_DEPTH) throw new
|
|
393
|
+
if (depth > MAX_ACT_DEPTH) throw new chunkKEBSZBHL_cjs.SsoError(`ticket's delegation chain is deeper than ${MAX_ACT_DEPTH}`);
|
|
361
394
|
const link = raw;
|
|
362
395
|
if (!link || typeof link !== "object" || typeof link.sub !== "string" || link.sub === "") {
|
|
363
|
-
throw new
|
|
396
|
+
throw new chunkKEBSZBHL_cjs.SsoError(`ticket's act (link ${depth}) has no string sub`);
|
|
364
397
|
}
|
|
365
398
|
return link.act === void 0 ? { sub: link.sub } : { sub: link.sub, act: readActor(link.act, depth + 1) };
|
|
366
399
|
}
|
|
367
400
|
|
|
368
401
|
Object.defineProperty(exports, "AVATAR_TYPES", {
|
|
369
402
|
enumerable: true,
|
|
370
|
-
get: function () { return
|
|
403
|
+
get: function () { return chunkKEBSZBHL_cjs.AVATAR_TYPES; }
|
|
371
404
|
});
|
|
372
405
|
Object.defineProperty(exports, "DEFAULT_SESSION_MAX_AGE", {
|
|
373
406
|
enumerable: true,
|
|
374
|
-
get: function () { return
|
|
407
|
+
get: function () { return chunkKEBSZBHL_cjs.DEFAULT_SESSION_MAX_AGE; }
|
|
375
408
|
});
|
|
376
409
|
Object.defineProperty(exports, "EMBEDDED_FLOW_MAX_AGE", {
|
|
377
410
|
enumerable: true,
|
|
378
|
-
get: function () { return
|
|
411
|
+
get: function () { return chunkKEBSZBHL_cjs.EMBEDDED_FLOW_MAX_AGE; }
|
|
379
412
|
});
|
|
380
413
|
Object.defineProperty(exports, "JwksError", {
|
|
381
414
|
enumerable: true,
|
|
382
|
-
get: function () { return
|
|
415
|
+
get: function () { return chunkKEBSZBHL_cjs.JwksError; }
|
|
383
416
|
});
|
|
384
417
|
Object.defineProperty(exports, "JwksUnavailableError", {
|
|
385
418
|
enumerable: true,
|
|
386
|
-
get: function () { return
|
|
419
|
+
get: function () { return chunkKEBSZBHL_cjs.JwksUnavailableError; }
|
|
387
420
|
});
|
|
388
421
|
Object.defineProperty(exports, "JwksUnknownKeyError", {
|
|
389
422
|
enumerable: true,
|
|
390
|
-
get: function () { return
|
|
423
|
+
get: function () { return chunkKEBSZBHL_cjs.JwksUnknownKeyError; }
|
|
391
424
|
});
|
|
392
425
|
Object.defineProperty(exports, "MAX_AVATAR_BYTES", {
|
|
393
426
|
enumerable: true,
|
|
394
|
-
get: function () { return
|
|
427
|
+
get: function () { return chunkKEBSZBHL_cjs.MAX_AVATAR_BYTES; }
|
|
395
428
|
});
|
|
396
429
|
Object.defineProperty(exports, "MAX_INVITATIONS", {
|
|
397
430
|
enumerable: true,
|
|
398
|
-
get: function () { return
|
|
431
|
+
get: function () { return chunkKEBSZBHL_cjs.MAX_INVITATIONS; }
|
|
399
432
|
});
|
|
400
433
|
Object.defineProperty(exports, "SsoAppApiError", {
|
|
401
434
|
enumerable: true,
|
|
402
|
-
get: function () { return
|
|
435
|
+
get: function () { return chunkKEBSZBHL_cjs.SsoAppApiError; }
|
|
403
436
|
});
|
|
404
437
|
Object.defineProperty(exports, "SsoAvatarRejectedError", {
|
|
405
438
|
enumerable: true,
|
|
406
|
-
get: function () { return
|
|
439
|
+
get: function () { return chunkKEBSZBHL_cjs.SsoAvatarRejectedError; }
|
|
407
440
|
});
|
|
408
441
|
Object.defineProperty(exports, "SsoConfigError", {
|
|
409
442
|
enumerable: true,
|
|
410
|
-
get: function () { return
|
|
443
|
+
get: function () { return chunkKEBSZBHL_cjs.SsoConfigError; }
|
|
411
444
|
});
|
|
412
445
|
Object.defineProperty(exports, "SsoError", {
|
|
413
446
|
enumerable: true,
|
|
414
|
-
get: function () { return
|
|
447
|
+
get: function () { return chunkKEBSZBHL_cjs.SsoError; }
|
|
415
448
|
});
|
|
416
449
|
Object.defineProperty(exports, "SsoInsufficientScopeError", {
|
|
417
450
|
enumerable: true,
|
|
418
|
-
get: function () { return
|
|
451
|
+
get: function () { return chunkKEBSZBHL_cjs.SsoInsufficientScopeError; }
|
|
419
452
|
});
|
|
420
453
|
Object.defineProperty(exports, "SsoIntrospectionUnavailableError", {
|
|
421
454
|
enumerable: true,
|
|
422
|
-
get: function () { return
|
|
455
|
+
get: function () { return chunkKEBSZBHL_cjs.SsoIntrospectionUnavailableError; }
|
|
423
456
|
});
|
|
424
457
|
Object.defineProperty(exports, "SsoReauthError", {
|
|
425
458
|
enumerable: true,
|
|
426
|
-
get: function () { return
|
|
459
|
+
get: function () { return chunkKEBSZBHL_cjs.SsoReauthError; }
|
|
427
460
|
});
|
|
428
461
|
Object.defineProperty(exports, "SsoTokenInactiveError", {
|
|
429
462
|
enumerable: true,
|
|
430
|
-
get: function () { return
|
|
463
|
+
get: function () { return chunkKEBSZBHL_cjs.SsoTokenInactiveError; }
|
|
431
464
|
});
|
|
432
465
|
Object.defineProperty(exports, "cookieHeader", {
|
|
433
466
|
enumerable: true,
|
|
434
|
-
get: function () { return
|
|
467
|
+
get: function () { return chunkKEBSZBHL_cjs.cookieHeader; }
|
|
435
468
|
});
|
|
436
469
|
Object.defineProperty(exports, "createJwksCache", {
|
|
437
470
|
enumerable: true,
|
|
438
|
-
get: function () { return
|
|
471
|
+
get: function () { return chunkKEBSZBHL_cjs.createJwksCache; }
|
|
439
472
|
});
|
|
440
473
|
Object.defineProperty(exports, "createSsoClient", {
|
|
441
474
|
enumerable: true,
|
|
442
|
-
get: function () { return
|
|
475
|
+
get: function () { return chunkKEBSZBHL_cjs.createSsoClient; }
|
|
443
476
|
});
|
|
444
477
|
Object.defineProperty(exports, "loadSsoConfig", {
|
|
445
478
|
enumerable: true,
|
|
446
|
-
get: function () { return
|
|
479
|
+
get: function () { return chunkKEBSZBHL_cjs.loadSsoConfig; }
|
|
447
480
|
});
|
|
448
481
|
Object.defineProperty(exports, "memoryTokenStore", {
|
|
449
482
|
enumerable: true,
|
|
450
|
-
get: function () { return
|
|
483
|
+
get: function () { return chunkKEBSZBHL_cjs.memoryTokenStore; }
|
|
451
484
|
});
|
|
452
485
|
Object.defineProperty(exports, "openEmbeddedFlow", {
|
|
453
486
|
enumerable: true,
|
|
454
|
-
get: function () { return
|
|
487
|
+
get: function () { return chunkKEBSZBHL_cjs.openEmbeddedFlow; }
|
|
455
488
|
});
|
|
456
489
|
Object.defineProperty(exports, "readCookie", {
|
|
457
490
|
enumerable: true,
|
|
458
|
-
get: function () { return
|
|
491
|
+
get: function () { return chunkKEBSZBHL_cjs.readCookie; }
|
|
459
492
|
});
|
|
460
493
|
Object.defineProperty(exports, "sealEmbeddedFlow", {
|
|
461
494
|
enumerable: true,
|
|
462
|
-
get: function () { return
|
|
495
|
+
get: function () { return chunkKEBSZBHL_cjs.sealEmbeddedFlow; }
|
|
463
496
|
});
|
|
464
497
|
Object.defineProperty(exports, "signSession", {
|
|
465
498
|
enumerable: true,
|
|
466
|
-
get: function () { return
|
|
499
|
+
get: function () { return chunkKEBSZBHL_cjs.signSession; }
|
|
467
500
|
});
|
|
468
501
|
Object.defineProperty(exports, "signValue", {
|
|
469
502
|
enumerable: true,
|
|
470
|
-
get: function () { return
|
|
503
|
+
get: function () { return chunkKEBSZBHL_cjs.signValue; }
|
|
471
504
|
});
|
|
472
505
|
Object.defineProperty(exports, "verifySession", {
|
|
473
506
|
enumerable: true,
|
|
474
|
-
get: function () { return
|
|
507
|
+
get: function () { return chunkKEBSZBHL_cjs.verifySession; }
|
|
475
508
|
});
|
|
476
509
|
Object.defineProperty(exports, "verifyValue", {
|
|
477
510
|
enumerable: true,
|
|
478
|
-
get: function () { return
|
|
511
|
+
get: function () { return chunkKEBSZBHL_cjs.verifyValue; }
|
|
479
512
|
});
|
|
480
513
|
exports.DEFAULT_ISSUER = DEFAULT_ISSUER;
|
|
481
514
|
exports.MAX_ACT_DEPTH = MAX_ACT_DEPTH;
|
|
@@ -489,6 +522,7 @@ exports.createDpopProof = createDpopProof;
|
|
|
489
522
|
exports.createMemoryReplayStore = createMemoryReplayStore;
|
|
490
523
|
exports.createTicketClient = createTicketClient;
|
|
491
524
|
exports.createTicketVerifier = createTicketVerifier;
|
|
525
|
+
exports.exchangeUserToken = exchangeUserToken;
|
|
492
526
|
exports.fetchTicket = fetchTicket;
|
|
493
527
|
exports.normalizeHtu = normalizeHtu;
|
|
494
528
|
exports.verifyDpopProof = verifyDpopProof;
|