@better-auth/sso 1.5.0 → 1.5.1-beta.2

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/client.d.mts CHANGED
@@ -1,5 +1,4 @@
1
- import "./index-BQp9TZiG.mjs";
2
- import { SSOPlugin } from "./index.mjs";
1
+ import { t as SSOPlugin } from "./index-DoxMd-mL.mjs";
3
2
 
4
3
  //#region src/client.d.ts
5
4
  interface SSOClientOptions {
@@ -1,7 +1,6 @@
1
1
  import { APIError } from "better-auth/api";
2
- import * as z$1 from "zod/v4";
3
- import z from "zod/v4";
4
- import { Awaitable, OAuth2Tokens, User } from "better-auth";
2
+ import * as z from "zod";
3
+ import { Awaitable, BetterAuthPlugin, OAuth2Tokens, User } from "better-auth";
5
4
  import * as better_call0 from "better-call";
6
5
 
7
6
  //#region src/saml/algorithms.d.ts
@@ -418,9 +417,9 @@ interface SSOOptions {
418
417
  //#region src/routes/domain-verification.d.ts
419
418
  declare const requestDomainVerification: (options: SSOOptions) => better_call0.StrictEndpoint<"/sso/request-domain-verification", {
420
419
  method: "POST";
421
- body: z$1.ZodObject<{
422
- providerId: z$1.ZodString;
423
- }, z$1.core.$strip>;
420
+ body: z.ZodObject<{
421
+ providerId: z.ZodString;
422
+ }, z.core.$strip>;
424
423
  metadata: {
425
424
  openapi: {
426
425
  summary: string;
@@ -466,9 +465,9 @@ declare const requestDomainVerification: (options: SSOOptions) => better_call0.S
466
465
  }>;
467
466
  declare const verifyDomain: (options: SSOOptions) => better_call0.StrictEndpoint<"/sso/verify-domain", {
468
467
  method: "POST";
469
- body: z$1.ZodObject<{
470
- providerId: z$1.ZodString;
471
- }, z$1.core.$strip>;
468
+ body: z.ZodObject<{
469
+ providerId: z.ZodString;
470
+ }, z.core.$strip>;
472
471
  metadata: {
473
472
  openapi: {
474
473
  summary: string;
@@ -1721,5 +1720,56 @@ declare function selectTokenEndpointAuthMethod(doc: OIDCDiscoveryDocument, exist
1721
1720
  */
1722
1721
  declare function needsRuntimeDiscovery(config: Partial<HydratedOIDCConfig> | undefined): boolean;
1723
1722
  //#endregion
1724
- export { spMetadata as A, SSOOptions as B, callbackSSO as C, registerSSOProvider as D, initiateSLO as E, updateSSOProvider as F, DigestAlgorithm as G, AlgorithmValidationOptions as H, requestDomainVerification as I, KeyEncryptionAlgorithm as K, verifyDomain as L, deleteSSOProvider as M, getSSOProvider as N, signInSSO as O, listSSOProviders as P, OIDCConfig as R, acsEndpoint as S, callbackSSOShared as T, DataEncryptionAlgorithm as U, SSOProvider as V, DeprecatedAlgorithmBehavior as W, DEFAULT_CLOCK_SKEW_MS as _, normalizeDiscoveryUrls as a, SAMLConditions as b, validateDiscoveryDocument as c, DiscoveryError as d, DiscoveryErrorCode as f, RequiredDiscoveryField as g, REQUIRED_DISCOVERY_FIELDS as h, needsRuntimeDiscovery as i, validateSAMLTimestamp as j, sloEndpoint as k, validateDiscoveryUrl as l, OIDCDiscoveryDocument as m, discoverOIDCConfig as n, normalizeUrl as o, HydratedOIDCConfig as p, SignatureAlgorithm as q, fetchDiscoveryDocument as r, selectTokenEndpointAuthMethod as s, computeDiscoveryUrl as t, DiscoverOIDCConfigParams as u, DEFAULT_MAX_SAML_METADATA_SIZE as v, callbackSSOSAML as w, TimestampValidationOptions as x, DEFAULT_MAX_SAML_RESPONSE_SIZE as y, SAMLConfig as z };
1725
- //# sourceMappingURL=index-BQp9TZiG.d.mts.map
1723
+ //#region src/index.d.ts
1724
+ declare module "@better-auth/core" {
1725
+ interface BetterAuthPluginRegistry<AuthOptions, Options> {
1726
+ sso: {
1727
+ creator: typeof sso;
1728
+ };
1729
+ }
1730
+ }
1731
+ type DomainVerificationEndpoints = {
1732
+ requestDomainVerification: ReturnType<typeof requestDomainVerification>;
1733
+ verifyDomain: ReturnType<typeof verifyDomain>;
1734
+ };
1735
+ type SSOEndpoints<O extends SSOOptions> = {
1736
+ spMetadata: ReturnType<typeof spMetadata>;
1737
+ registerSSOProvider: ReturnType<typeof registerSSOProvider<O>>;
1738
+ signInSSO: ReturnType<typeof signInSSO>;
1739
+ callbackSSO: ReturnType<typeof callbackSSO>;
1740
+ callbackSSOShared: ReturnType<typeof callbackSSOShared>;
1741
+ callbackSSOSAML: ReturnType<typeof callbackSSOSAML>;
1742
+ acsEndpoint: ReturnType<typeof acsEndpoint>;
1743
+ sloEndpoint: ReturnType<typeof sloEndpoint>;
1744
+ initiateSLO: ReturnType<typeof initiateSLO>;
1745
+ listSSOProviders: ReturnType<typeof listSSOProviders>;
1746
+ getSSOProvider: ReturnType<typeof getSSOProvider>;
1747
+ updateSSOProvider: ReturnType<typeof updateSSOProvider>;
1748
+ deleteSSOProvider: ReturnType<typeof deleteSSOProvider>;
1749
+ };
1750
+ type SSOPlugin<O extends SSOOptions> = {
1751
+ id: "sso";
1752
+ endpoints: SSOEndpoints<O> & (O extends {
1753
+ domainVerification: {
1754
+ enabled: true;
1755
+ };
1756
+ } ? DomainVerificationEndpoints : {});
1757
+ };
1758
+ declare function sso<O extends SSOOptions & {
1759
+ domainVerification?: {
1760
+ enabled: true;
1761
+ };
1762
+ }>(options?: O | undefined): {
1763
+ id: "sso";
1764
+ endpoints: SSOEndpoints<O> & DomainVerificationEndpoints;
1765
+ schema: NonNullable<BetterAuthPlugin["schema"]>;
1766
+ options: O;
1767
+ };
1768
+ declare function sso<O extends SSOOptions>(options?: O | undefined): {
1769
+ id: "sso";
1770
+ endpoints: SSOEndpoints<O>;
1771
+ options: O;
1772
+ };
1773
+ //#endregion
1774
+ export { DataEncryptionAlgorithm as A, TimestampValidationOptions as C, SSOOptions as D, SAMLConfig as E, DigestAlgorithm as M, KeyEncryptionAlgorithm as N, SSOProvider as O, SignatureAlgorithm as P, SAMLConditions as S, OIDCConfig as T, REQUIRED_DISCOVERY_FIELDS as _, fetchDiscoveryDocument as a, DEFAULT_MAX_SAML_METADATA_SIZE as b, normalizeUrl as c, validateDiscoveryUrl as d, DiscoverOIDCConfigParams as f, OIDCDiscoveryDocument as g, HydratedOIDCConfig as h, discoverOIDCConfig as i, DeprecatedAlgorithmBehavior as j, AlgorithmValidationOptions as k, selectTokenEndpointAuthMethod as l, DiscoveryErrorCode as m, sso as n, needsRuntimeDiscovery as o, DiscoveryError as p, computeDiscoveryUrl as r, normalizeDiscoveryUrls as s, SSOPlugin as t, validateDiscoveryDocument as u, RequiredDiscoveryField as v, validateSAMLTimestamp as w, DEFAULT_MAX_SAML_RESPONSE_SIZE as x, DEFAULT_CLOCK_SKEW_MS as y };
1775
+ //# sourceMappingURL=index-DoxMd-mL.d.mts.map
package/dist/index.d.mts CHANGED
@@ -1,56 +1,2 @@
1
- import { A as spMetadata, B as SSOOptions, C as callbackSSO, D as registerSSOProvider, E as initiateSLO, F as updateSSOProvider, G as DigestAlgorithm, H as AlgorithmValidationOptions, I as requestDomainVerification, K as KeyEncryptionAlgorithm, L as verifyDomain, M as deleteSSOProvider, N as getSSOProvider, O as signInSSO, P as listSSOProviders, R as OIDCConfig, S as acsEndpoint, T as callbackSSOShared, U as DataEncryptionAlgorithm, V as SSOProvider, W as DeprecatedAlgorithmBehavior, _ as DEFAULT_CLOCK_SKEW_MS, a as normalizeDiscoveryUrls, b as SAMLConditions, c as validateDiscoveryDocument, d as DiscoveryError, f as DiscoveryErrorCode, g as RequiredDiscoveryField, h as REQUIRED_DISCOVERY_FIELDS, i as needsRuntimeDiscovery, j as validateSAMLTimestamp, k as sloEndpoint, l as validateDiscoveryUrl, m as OIDCDiscoveryDocument, n as discoverOIDCConfig, o as normalizeUrl, p as HydratedOIDCConfig, q as SignatureAlgorithm, r as fetchDiscoveryDocument, s as selectTokenEndpointAuthMethod, t as computeDiscoveryUrl, u as DiscoverOIDCConfigParams, v as DEFAULT_MAX_SAML_METADATA_SIZE, w as callbackSSOSAML, x as TimestampValidationOptions, y as DEFAULT_MAX_SAML_RESPONSE_SIZE, z as SAMLConfig } from "./index-BQp9TZiG.mjs";
2
- import { BetterAuthPlugin } from "better-auth";
3
-
4
- //#region src/index.d.ts
5
- declare module "@better-auth/core" {
6
- interface BetterAuthPluginRegistry<AuthOptions, Options> {
7
- sso: {
8
- creator: typeof sso;
9
- };
10
- }
11
- }
12
- type DomainVerificationEndpoints = {
13
- requestDomainVerification: ReturnType<typeof requestDomainVerification>;
14
- verifyDomain: ReturnType<typeof verifyDomain>;
15
- };
16
- type SSOEndpoints<O extends SSOOptions> = {
17
- spMetadata: ReturnType<typeof spMetadata>;
18
- registerSSOProvider: ReturnType<typeof registerSSOProvider<O>>;
19
- signInSSO: ReturnType<typeof signInSSO>;
20
- callbackSSO: ReturnType<typeof callbackSSO>;
21
- callbackSSOShared: ReturnType<typeof callbackSSOShared>;
22
- callbackSSOSAML: ReturnType<typeof callbackSSOSAML>;
23
- acsEndpoint: ReturnType<typeof acsEndpoint>;
24
- sloEndpoint: ReturnType<typeof sloEndpoint>;
25
- initiateSLO: ReturnType<typeof initiateSLO>;
26
- listSSOProviders: ReturnType<typeof listSSOProviders>;
27
- getSSOProvider: ReturnType<typeof getSSOProvider>;
28
- updateSSOProvider: ReturnType<typeof updateSSOProvider>;
29
- deleteSSOProvider: ReturnType<typeof deleteSSOProvider>;
30
- };
31
- type SSOPlugin<O extends SSOOptions> = {
32
- id: "sso";
33
- endpoints: SSOEndpoints<O> & (O extends {
34
- domainVerification: {
35
- enabled: true;
36
- };
37
- } ? DomainVerificationEndpoints : {});
38
- };
39
- declare function sso<O extends SSOOptions & {
40
- domainVerification?: {
41
- enabled: true;
42
- };
43
- }>(options?: O | undefined): {
44
- id: "sso";
45
- endpoints: SSOEndpoints<O> & DomainVerificationEndpoints;
46
- schema: NonNullable<BetterAuthPlugin["schema"]>;
47
- options: O;
48
- };
49
- declare function sso<O extends SSOOptions>(options?: O | undefined): {
50
- id: "sso";
51
- endpoints: SSOEndpoints<O>;
52
- options: O;
53
- };
54
- //#endregion
55
- export { type AlgorithmValidationOptions, DEFAULT_CLOCK_SKEW_MS, DEFAULT_MAX_SAML_METADATA_SIZE, DEFAULT_MAX_SAML_RESPONSE_SIZE, DataEncryptionAlgorithm, type DeprecatedAlgorithmBehavior, DigestAlgorithm, type DiscoverOIDCConfigParams, DiscoveryError, type DiscoveryErrorCode, type HydratedOIDCConfig, KeyEncryptionAlgorithm, type OIDCConfig, type OIDCDiscoveryDocument, REQUIRED_DISCOVERY_FIELDS, type RequiredDiscoveryField, type SAMLConditions, type SAMLConfig, type SSOOptions, SSOPlugin, type SSOProvider, SignatureAlgorithm, type TimestampValidationOptions, computeDiscoveryUrl, discoverOIDCConfig, fetchDiscoveryDocument, needsRuntimeDiscovery, normalizeDiscoveryUrls, normalizeUrl, selectTokenEndpointAuthMethod, sso, validateDiscoveryDocument, validateDiscoveryUrl, validateSAMLTimestamp };
56
- //# sourceMappingURL=index.d.mts.map
1
+ import { A as DataEncryptionAlgorithm, C as TimestampValidationOptions, D as SSOOptions, E as SAMLConfig, M as DigestAlgorithm, N as KeyEncryptionAlgorithm, O as SSOProvider, P as SignatureAlgorithm, S as SAMLConditions, T as OIDCConfig, _ as REQUIRED_DISCOVERY_FIELDS, a as fetchDiscoveryDocument, b as DEFAULT_MAX_SAML_METADATA_SIZE, c as normalizeUrl, d as validateDiscoveryUrl, f as DiscoverOIDCConfigParams, g as OIDCDiscoveryDocument, h as HydratedOIDCConfig, i as discoverOIDCConfig, j as DeprecatedAlgorithmBehavior, k as AlgorithmValidationOptions, l as selectTokenEndpointAuthMethod, m as DiscoveryErrorCode, n as sso, o as needsRuntimeDiscovery, p as DiscoveryError, r as computeDiscoveryUrl, s as normalizeDiscoveryUrls, t as SSOPlugin, u as validateDiscoveryDocument, v as RequiredDiscoveryField, w as validateSAMLTimestamp, x as DEFAULT_MAX_SAML_RESPONSE_SIZE, y as DEFAULT_CLOCK_SKEW_MS } from "./index-DoxMd-mL.mjs";
2
+ export { AlgorithmValidationOptions, DEFAULT_CLOCK_SKEW_MS, DEFAULT_MAX_SAML_METADATA_SIZE, DEFAULT_MAX_SAML_RESPONSE_SIZE, DataEncryptionAlgorithm, DeprecatedAlgorithmBehavior, DigestAlgorithm, DiscoverOIDCConfigParams, DiscoveryError, DiscoveryErrorCode, HydratedOIDCConfig, KeyEncryptionAlgorithm, OIDCConfig, OIDCDiscoveryDocument, REQUIRED_DISCOVERY_FIELDS, RequiredDiscoveryField, SAMLConditions, SAMLConfig, SSOOptions, SSOPlugin, SSOProvider, SignatureAlgorithm, TimestampValidationOptions, computeDiscoveryUrl, discoverOIDCConfig, fetchDiscoveryDocument, needsRuntimeDiscovery, normalizeDiscoveryUrls, normalizeUrl, selectTokenEndpointAuthMethod, sso, validateDiscoveryDocument, validateDiscoveryUrl, validateSAMLTimestamp };
package/dist/index.mjs CHANGED
@@ -3,8 +3,7 @@ import { XMLParser, XMLValidator } from "fast-xml-parser";
3
3
  import saml from "samlify";
4
4
  import { X509Certificate } from "node:crypto";
5
5
  import { generateRandomString } from "better-auth/crypto";
6
- import * as z$1 from "zod/v4";
7
- import z from "zod/v4";
6
+ import * as z from "zod";
8
7
  import { base64 } from "@better-auth/utils/base64";
9
8
  import { BetterFetchError, betterFetch } from "@better-fetch/fetch";
10
9
  import { HIDE_METADATA, createAuthorizationURL, generateGenericState, generateState, parseGenericState, parseState, validateAuthorizationCode, validateToken } from "better-auth";
@@ -218,7 +217,7 @@ async function assignOrganizationByDomain(ctx, options) {
218
217
  //#region src/routes/domain-verification.ts
219
218
  const DNS_LABEL_MAX_LENGTH = 63;
220
219
  const DEFAULT_TOKEN_PREFIX = "better-auth-token";
221
- const domainVerificationBodySchema = z$1.object({ providerId: z$1.string() });
220
+ const domainVerificationBodySchema = z.object({ providerId: z.string() });
222
221
  function getVerificationIdentifier(options, providerId) {
223
222
  return `_${options.domainVerification?.tokenPrefix || DEFAULT_TOKEN_PREFIX}-${providerId}`;
224
223
  }
@@ -2374,7 +2373,20 @@ async function handleOIDCCallback(ctx, options, providerId, stateData) {
2374
2373
  });
2375
2374
  if (!tokenResponse) throw ctx.redirect(`${errorURL || callbackURL}?error=invalid_provider&error_description=token_response_not_found`);
2376
2375
  let userInfo = null;
2377
- if (tokenResponse.idToken) {
2376
+ const mapping = config.mapping || {};
2377
+ if (config.userInfoEndpoint) {
2378
+ const userInfoResponse = await betterFetch(config.userInfoEndpoint, { headers: { Authorization: `Bearer ${tokenResponse.accessToken}` } });
2379
+ if (userInfoResponse.error) throw ctx.redirect(`${errorURL || callbackURL}?error=invalid_provider&error_description=${userInfoResponse.error.message}`);
2380
+ const rawUserInfo = userInfoResponse.data;
2381
+ userInfo = {
2382
+ ...Object.fromEntries(Object.entries(mapping.extraFields || {}).map(([key, value]) => [key, rawUserInfo[value]])),
2383
+ id: rawUserInfo[mapping.id || "sub"],
2384
+ email: rawUserInfo[mapping.email || "email"],
2385
+ emailVerified: options?.trustEmailVerified ? rawUserInfo[mapping.emailVerified || "email_verified"] : false,
2386
+ name: rawUserInfo[mapping.name || "name"],
2387
+ image: rawUserInfo[mapping.image || "picture"]
2388
+ };
2389
+ } else if (tokenResponse.idToken) {
2378
2390
  const idToken = decodeJwt(tokenResponse.idToken);
2379
2391
  if (!config.jwksEndpoint) throw ctx.redirect(`${errorURL || callbackURL}?error=invalid_provider&error_description=jwks_endpoint_not_found`);
2380
2392
  const verified = await validateToken(tokenResponse.idToken, config.jwksEndpoint, {
@@ -2385,7 +2397,6 @@ async function handleOIDCCallback(ctx, options, providerId, stateData) {
2385
2397
  return null;
2386
2398
  });
2387
2399
  if (!verified) throw ctx.redirect(`${errorURL || callbackURL}?error=invalid_provider&error_description=token_not_verified`);
2388
- const mapping = config.mapping || {};
2389
2400
  userInfo = {
2390
2401
  ...Object.fromEntries(Object.entries(mapping.extraFields || {}).map(([key, value]) => [key, verified.payload[value]])),
2391
2402
  id: idToken[mapping.id || "sub"],
@@ -2394,13 +2405,7 @@ async function handleOIDCCallback(ctx, options, providerId, stateData) {
2394
2405
  name: idToken[mapping.name || "name"],
2395
2406
  image: idToken[mapping.image || "picture"]
2396
2407
  };
2397
- }
2398
- if (!userInfo) {
2399
- if (!config.userInfoEndpoint) throw ctx.redirect(`${errorURL || callbackURL}?error=invalid_provider&error_description=user_info_endpoint_not_found`);
2400
- const userInfoResponse = await betterFetch(config.userInfoEndpoint, { headers: { Authorization: `Bearer ${tokenResponse.accessToken}` } });
2401
- if (userInfoResponse.error) throw ctx.redirect(`${errorURL || callbackURL}?error=invalid_provider&error_description=${userInfoResponse.error.message}`);
2402
- userInfo = userInfoResponse.data;
2403
- }
2408
+ } else throw ctx.redirect(`${errorURL || callbackURL}?error=invalid_provider&error_description=user_info_endpoint_not_found`);
2404
2409
  if (!userInfo.email || !userInfo.id) throw ctx.redirect(`${errorURL || callbackURL}?error=invalid_provider&error_description=missing_user_info`);
2405
2410
  const isTrustedProvider = "domainVerified" in provider && provider.domainVerified === true && validateEmailDomain(userInfo.email, provider.domain);
2406
2411
  const linked = await handleOAuthUserInfo(ctx, {
@@ -3161,7 +3166,7 @@ async function handleLogoutResponse(ctx, sp, idp, relayState, providerId) {
3161
3166
  if (inResponseTo) {
3162
3167
  const key = `${LOGOUT_REQUEST_KEY_PREFIX}${inResponseTo}`;
3163
3168
  if (!await ctx.context.internalAdapter.findVerificationValue(key)) ctx.context.logger.warn("LogoutResponse references unknown or expired request", { inResponseTo });
3164
- await ctx.context.internalAdapter.deleteVerificationValue(key).catch((e) => ctx.context.logger.warn("Failed to delete logout request verification value", e));
3169
+ await ctx.context.internalAdapter.deleteVerificationByIdentifier(key).catch((e) => ctx.context.logger.warn("Failed to delete logout request verification value", e));
3165
3170
  }
3166
3171
  deleteSessionCookie(ctx);
3167
3172
  const appOrigin = new URL(ctx.context.baseURL).origin;
@@ -3189,13 +3194,13 @@ async function handleLogoutRequest(ctx, sp, idp, relayState, providerId) {
3189
3194
  const data = safeJsonParse(stored.value);
3190
3195
  if (data) if (!sessionIndex || !data.sessionIndex || sessionIndex === data.sessionIndex) {
3191
3196
  await ctx.context.internalAdapter.deleteSession(data.sessionId).catch((e) => ctx.context.logger.warn("Failed to delete session during SLO", { error: e }));
3192
- await ctx.context.internalAdapter.deleteVerificationValue(`${SAML_SESSION_BY_ID_PREFIX}${data.sessionId}`).catch((e) => ctx.context.logger.warn("Failed to delete SAML session lookup during SLO", e));
3197
+ await ctx.context.internalAdapter.deleteVerificationByIdentifier(`${SAML_SESSION_BY_ID_PREFIX}${data.sessionId}`).catch((e) => ctx.context.logger.warn("Failed to delete SAML session lookup during SLO", e));
3193
3198
  } else ctx.context.logger.warn("SessionIndex mismatch in LogoutRequest - skipping session deletion", {
3194
3199
  providerId,
3195
3200
  requestedSessionIndex: sessionIndex,
3196
3201
  storedSessionIndex: data.sessionIndex
3197
3202
  });
3198
- await ctx.context.internalAdapter.deleteVerificationValue(key).catch((e) => ctx.context.logger.warn("Failed to delete SAML session key during SLO", e));
3203
+ await ctx.context.internalAdapter.deleteVerificationByIdentifier(key).catch((e) => ctx.context.logger.warn("Failed to delete SAML session key during SLO", e));
3199
3204
  }
3200
3205
  const currentSession = await getSessionFromCtx(ctx);
3201
3206
  if (currentSession?.session) await ctx.context.internalAdapter.deleteSession(currentSession.session.id);
@@ -3252,8 +3257,8 @@ const initiateSLO = (options) => {
3252
3257
  value: providerId,
3253
3258
  expiresAt: new Date(Date.now() + ttl)
3254
3259
  });
3255
- if (samlSessionKey) await ctx.context.internalAdapter.deleteVerificationValue(samlSessionKey).catch((e) => ctx.context.logger.warn("Failed to delete SAML session key during logout", e));
3256
- await ctx.context.internalAdapter.deleteVerificationValue(sessionLookupKey).catch((e) => ctx.context.logger.warn("Failed to delete session lookup key during logout", e));
3260
+ if (samlSessionKey) await ctx.context.internalAdapter.deleteVerificationByIdentifier(samlSessionKey).catch((e) => ctx.context.logger.warn("Failed to delete SAML session key during logout", e));
3261
+ await ctx.context.internalAdapter.deleteVerificationByIdentifier(sessionLookupKey).catch((e) => ctx.context.logger.warn("Failed to delete session lookup key during logout", e));
3257
3262
  await ctx.context.internalAdapter.deleteSession(session.session.id);
3258
3263
  deleteSessionCookie(ctx);
3259
3264
  throw ctx.redirect(logoutRequest.context);
@@ -3323,8 +3328,8 @@ function sso(options) {
3323
3328
  const sessionLookupKey = `${SAML_SESSION_BY_ID_PREFIX}${session.session.id}`;
3324
3329
  const sessionLookup = await ctx.context.internalAdapter.findVerificationValue(sessionLookupKey);
3325
3330
  if (sessionLookup?.value) {
3326
- await ctx.context.internalAdapter.deleteVerificationValue(sessionLookup.value).catch(() => {});
3327
- await ctx.context.internalAdapter.deleteVerificationValue(sessionLookupKey).catch(() => {});
3331
+ await ctx.context.internalAdapter.deleteVerificationByIdentifier(sessionLookup.value).catch(() => {});
3332
+ await ctx.context.internalAdapter.deleteVerificationByIdentifier(sessionLookupKey).catch(() => {});
3328
3333
  }
3329
3334
  })
3330
3335
  }],