@better-auth/sso 1.7.6 → 1.7.8
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
package/dist/client.mjs
CHANGED
|
@@ -149,6 +149,9 @@ interface SAMLConfig {
|
|
|
149
149
|
/**
|
|
150
150
|
* Provider-level post-auth redirect URL for IdP-initiated or fallback SAML
|
|
151
151
|
* flows when no RelayState callback URL is available.
|
|
152
|
+
*
|
|
153
|
+
* Not the Assertion Consumer Service (ACS) URL. To accept responses
|
|
154
|
+
* addressed to another ACS URL, list it in `spMetadata.metadata`.
|
|
152
155
|
*/
|
|
153
156
|
callbackUrl?: string | undefined;
|
|
154
157
|
/**
|
|
@@ -988,9 +991,9 @@ declare const updateSSOProvider: (options: SSOOptions) => _$better_call0.StrictE
|
|
|
988
991
|
pkce: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
|
|
989
992
|
overrideUserInfo: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
|
|
990
993
|
mapping: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
991
|
-
email: z.ZodString
|
|
994
|
+
email: z.ZodOptional<z.ZodString>;
|
|
992
995
|
emailVerified: z.ZodOptional<z.ZodString>;
|
|
993
|
-
name: z.ZodString
|
|
996
|
+
name: z.ZodOptional<z.ZodString>;
|
|
994
997
|
image: z.ZodOptional<z.ZodString>;
|
|
995
998
|
extraFields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
996
999
|
}, z.core.$strict>>>;
|
|
@@ -998,9 +1001,9 @@ declare const updateSSOProvider: (options: SSOOptions) => _$better_call0.StrictE
|
|
|
998
1001
|
samlConfig: z.ZodOptional<z.ZodObject<{
|
|
999
1002
|
audience: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
1000
1003
|
mapping: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
1001
|
-
email: z.ZodString
|
|
1004
|
+
email: z.ZodOptional<z.ZodString>;
|
|
1002
1005
|
emailVerified: z.ZodOptional<z.ZodString>;
|
|
1003
|
-
name: z.ZodString
|
|
1006
|
+
name: z.ZodOptional<z.ZodString>;
|
|
1004
1007
|
firstName: z.ZodOptional<z.ZodString>;
|
|
1005
1008
|
lastName: z.ZodOptional<z.ZodString>;
|
|
1006
1009
|
extraFields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
@@ -1320,7 +1323,6 @@ declare const registerSSOProvider: <O extends SSOOptions>(options: O) => _$bette
|
|
|
1320
1323
|
description: string;
|
|
1321
1324
|
};
|
|
1322
1325
|
};
|
|
1323
|
-
required: string[];
|
|
1324
1326
|
};
|
|
1325
1327
|
};
|
|
1326
1328
|
required: string[];
|
package/dist/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as SAMLIdentityProviderMetadata, B as SSOUserResolutionContext, C as deriveSAMLIdentityProviderEntityID, D as DEFAULT_MAX_SAML_RESPONSE_SIZE, E as DEFAULT_MAX_SAML_METADATA_SIZE, F as SSOProviderMutationGuardInput, G as DigestAlgorithm, H as AlgorithmValidationOptions, I as SSOProviderReference, K as KeyEncryptionAlgorithm, L as SSOProviderUserProfile, M as SSOOptions, N as SSOProvider, O as OIDCConfig, P as SSOProviderMutationGuardContext, R as SSOSAMLUserResolutionInput, S as SAMLServiceProviderPolicy, T as DEFAULT_CLOCK_SKEW_MS, U as DataEncryptionAlgorithm, V as SSOUserResolutionInput, W as DeprecatedAlgorithmBehavior, _ as REQUIRED_DISCOVERY_FIELDS, a as fetchDiscoveryDocument, b as TimestampValidationOptions, c as normalizeUrl, d as validateDiscoveryUrl, f as DiscoverOIDCConfigParams, g as OIDCDiscoveryDocument, h as HydratedOIDCConfig, i as discoverOIDCConfig, j as SSOOIDCUserResolutionInput, k as SAMLConfig, l as selectTokenEndpointAuthMethod, m as DiscoveryErrorCode, n as sso, o as needsRuntimeDiscovery, p as DiscoveryError, q as SignatureAlgorithm, r as computeDiscoveryUrl, s as normalizeDiscoveryUrls, t as SSOPlugin, u as validateDiscoveryDocument, v as RequiredDiscoveryField, w as deriveSAMLServiceProviderPolicy, x as validateSAMLTimestamp, y as SAMLConditions, z as SSOUserResolution } from "./index-
|
|
1
|
+
import { A as SAMLIdentityProviderMetadata, B as SSOUserResolutionContext, C as deriveSAMLIdentityProviderEntityID, D as DEFAULT_MAX_SAML_RESPONSE_SIZE, E as DEFAULT_MAX_SAML_METADATA_SIZE, F as SSOProviderMutationGuardInput, G as DigestAlgorithm, H as AlgorithmValidationOptions, I as SSOProviderReference, K as KeyEncryptionAlgorithm, L as SSOProviderUserProfile, M as SSOOptions, N as SSOProvider, O as OIDCConfig, P as SSOProviderMutationGuardContext, R as SSOSAMLUserResolutionInput, S as SAMLServiceProviderPolicy, T as DEFAULT_CLOCK_SKEW_MS, U as DataEncryptionAlgorithm, V as SSOUserResolutionInput, W as DeprecatedAlgorithmBehavior, _ as REQUIRED_DISCOVERY_FIELDS, a as fetchDiscoveryDocument, b as TimestampValidationOptions, c as normalizeUrl, d as validateDiscoveryUrl, f as DiscoverOIDCConfigParams, g as OIDCDiscoveryDocument, h as HydratedOIDCConfig, i as discoverOIDCConfig, j as SSOOIDCUserResolutionInput, k as SAMLConfig, l as selectTokenEndpointAuthMethod, m as DiscoveryErrorCode, n as sso, o as needsRuntimeDiscovery, p as DiscoveryError, q as SignatureAlgorithm, r as computeDiscoveryUrl, s as normalizeDiscoveryUrls, t as SSOPlugin, u as validateDiscoveryDocument, v as RequiredDiscoveryField, w as deriveSAMLServiceProviderPolicy, x as validateSAMLTimestamp, y as SAMLConditions, z as SSOUserResolution } from "./index-CuvoOoW_.mjs";
|
|
2
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, SAMLIdentityProviderMetadata, SAMLServiceProviderPolicy, SSOOIDCUserResolutionInput, SSOOptions, SSOPlugin, SSOProvider, SSOProviderMutationGuardContext, SSOProviderMutationGuardInput, SSOProviderReference, SSOProviderUserProfile, SSOSAMLUserResolutionInput, SSOUserResolution, SSOUserResolutionContext, SSOUserResolutionInput, SignatureAlgorithm, TimestampValidationOptions, computeDiscoveryUrl, deriveSAMLIdentityProviderEntityID, deriveSAMLServiceProviderPolicy, discoverOIDCConfig, fetchDiscoveryDocument, needsRuntimeDiscovery, normalizeDiscoveryUrls, normalizeUrl, selectTokenEndpointAuthMethod, sso, validateDiscoveryDocument, validateDiscoveryUrl, validateSAMLTimestamp };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as PACKAGE_VERSION } from "./version-
|
|
1
|
+
import { t as PACKAGE_VERSION } from "./version-C76AN0VD.mjs";
|
|
2
2
|
import { APIError, addOAuthServerContext, createAuthEndpoint, createAuthMiddleware, getSessionFromCtx, sessionMiddleware } from "better-auth/api";
|
|
3
3
|
import { XMLParser, XMLValidator } from "fast-xml-parser";
|
|
4
4
|
import { X509Certificate } from "node:crypto";
|
|
@@ -648,7 +648,7 @@ function validateDiscoveryDocument(doc, configuredIssuer) {
|
|
|
648
648
|
const missingFields = [];
|
|
649
649
|
for (const field of REQUIRED_DISCOVERY_FIELDS) if (!doc[field]) missingFields.push(field);
|
|
650
650
|
if (missingFields.length > 0) throw new DiscoveryError("discovery_incomplete", `Discovery document is missing required fields: ${missingFields.join(", ")}`, { missingFields });
|
|
651
|
-
if (
|
|
651
|
+
if (doc.issuer !== configuredIssuer) throw new DiscoveryError("issuer_mismatch", `Discovered issuer "${doc.issuer}" does not match configured issuer "${configuredIssuer}"`, {
|
|
652
652
|
discovered: doc.issuer,
|
|
653
653
|
configured: configuredIssuer
|
|
654
654
|
});
|
|
@@ -1851,16 +1851,16 @@ function parseSSOProviderAdditionalFields(options, data, action) {
|
|
|
1851
1851
|
});
|
|
1852
1852
|
}
|
|
1853
1853
|
const oidcMappingSchema = z.strictObject({
|
|
1854
|
-
email: z.string().meta({ description: "Field mapping for email (defaults to 'email')" }),
|
|
1854
|
+
email: z.string().meta({ description: "Field mapping for email (defaults to 'email')" }).optional(),
|
|
1855
1855
|
emailVerified: z.string().meta({ description: "Field mapping for email verification (defaults to 'email_verified')" }).optional(),
|
|
1856
|
-
name: z.string().meta({ description: "Field mapping for name (defaults to 'name')" }),
|
|
1856
|
+
name: z.string().meta({ description: "Field mapping for name (defaults to 'name')" }).optional(),
|
|
1857
1857
|
image: z.string().meta({ description: "Field mapping for image (defaults to 'picture')" }).optional(),
|
|
1858
1858
|
extraFields: z.record(z.string(), z.any()).optional()
|
|
1859
1859
|
}).optional();
|
|
1860
1860
|
const samlMappingSchema = z.strictObject({
|
|
1861
|
-
email: z.string().meta({ description: "Field mapping for email (defaults to 'email')" }),
|
|
1861
|
+
email: z.string().meta({ description: "Field mapping for email (defaults to 'email')" }).optional(),
|
|
1862
1862
|
emailVerified: z.string().meta({ description: "Field mapping for email verification" }).optional(),
|
|
1863
|
-
name: z.string().meta({ description: "Field mapping for name (defaults to 'displayName')" }),
|
|
1863
|
+
name: z.string().meta({ description: "Field mapping for name (defaults to 'displayName')" }).optional(),
|
|
1864
1864
|
firstName: z.string().meta({ description: "Field mapping for first name (defaults to 'givenName')" }).optional(),
|
|
1865
1865
|
lastName: z.string().meta({ description: "Field mapping for last name (defaults to 'surname')" }).optional(),
|
|
1866
1866
|
extraFields: z.record(z.string(), z.any()).optional()
|
|
@@ -1977,7 +1977,7 @@ const OIDC_IDENTITY_BOUNDARY_FIELDS = [
|
|
|
1977
1977
|
"tokenEndpoint",
|
|
1978
1978
|
"userInfoEndpoint"
|
|
1979
1979
|
];
|
|
1980
|
-
const SAML_IDENTITY_BOUNDARY_FIELDS = ["audience"
|
|
1980
|
+
const SAML_IDENTITY_BOUNDARY_FIELDS = ["audience"];
|
|
1981
1981
|
function isRecord(value) {
|
|
1982
1982
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1983
1983
|
}
|
|
@@ -1995,7 +1995,13 @@ function hasChangedField(current, updated, fields) {
|
|
|
1995
1995
|
function oidcIdentityBoundaryChanged(current, updated) {
|
|
1996
1996
|
return hasChangedField(current, updated, OIDC_IDENTITY_BOUNDARY_FIELDS);
|
|
1997
1997
|
}
|
|
1998
|
-
|
|
1998
|
+
/**
|
|
1999
|
+
* Signing certificates are reported apart from the identity boundary: they
|
|
2000
|
+
* change who can sign assertions, so the mutation guard treats them as an
|
|
2001
|
+
* authentication-boundary change, but they do not change which IdP identities
|
|
2002
|
+
* linked accounts belong to.
|
|
2003
|
+
*/
|
|
2004
|
+
function samlBoundaryChanges(current, updated) {
|
|
1999
2005
|
const currentIdentityProvider = createIdP(current).entityMeta;
|
|
2000
2006
|
const updatedIdentityProvider = createIdP(updated).entityMeta;
|
|
2001
2007
|
let currentServiceProvider;
|
|
@@ -2004,7 +2010,10 @@ function samlIdentityBoundaryChanged(current, updated) {
|
|
|
2004
2010
|
currentServiceProvider = current.spMetadata?.metadata ? parseSAMLServiceProviderMetadata(current.spMetadata.metadata) : null;
|
|
2005
2011
|
updatedServiceProvider = updated.spMetadata?.metadata ? parseSAMLServiceProviderMetadata(updated.spMetadata.metadata) : null;
|
|
2006
2012
|
} catch {
|
|
2007
|
-
return
|
|
2013
|
+
return {
|
|
2014
|
+
identity: true,
|
|
2015
|
+
trustAnchors: true
|
|
2016
|
+
};
|
|
2008
2017
|
}
|
|
2009
2018
|
const effectiveIdentityBoundary = (config) => {
|
|
2010
2019
|
const identityProvider = config === current ? currentIdentityProvider : updatedIdentityProvider;
|
|
@@ -2015,7 +2024,7 @@ function samlIdentityBoundaryChanged(current, updated) {
|
|
|
2015
2024
|
idpPostService: identityProvider.getSingleSignOnService("post"),
|
|
2016
2025
|
spEntityId: serviceProvider?.entityID ?? config.spMetadata?.entityID ?? config.issuer,
|
|
2017
2026
|
spNameIDFormat: serviceProvider?.nameIDFormats.at(0) ?? config.identifierFormat,
|
|
2018
|
-
spPostServices: serviceProvider ? getSAMLPostAssertionConsumerServiceUrls(config.spMetadata?.metadata) :
|
|
2027
|
+
spPostServices: serviceProvider ? getSAMLPostAssertionConsumerServiceUrls(config.spMetadata?.metadata) : [],
|
|
2019
2028
|
wantAssertionsSigned: serviceProvider?.wantAssertionsSigned ?? config.wantAssertionsSigned === true
|
|
2020
2029
|
};
|
|
2021
2030
|
};
|
|
@@ -2023,18 +2032,27 @@ function samlIdentityBoundaryChanged(current, updated) {
|
|
|
2023
2032
|
const certificates = identityProvider.getX509Certificate("signing");
|
|
2024
2033
|
return (Array.isArray(certificates) ? certificates : certificates ? [certificates] : []).map((certificate) => normalizePem(certificate) ?? certificate).sort();
|
|
2025
2034
|
};
|
|
2026
|
-
return
|
|
2035
|
+
return {
|
|
2036
|
+
identity: hasChangedField(current, updated, SAML_IDENTITY_BOUNDARY_FIELDS) || identityValueChanged(effectiveIdentityBoundary(current), effectiveIdentityBoundary(updated)),
|
|
2037
|
+
trustAnchors: identityValueChanged(trustAnchors(currentIdentityProvider), trustAnchors(updatedIdentityProvider))
|
|
2038
|
+
};
|
|
2027
2039
|
}
|
|
2028
2040
|
function parseConfigSnapshot(config, configType) {
|
|
2029
2041
|
if (!config) return;
|
|
2030
2042
|
if (typeof config === "string") return parseAndValidateConfig(config, configType);
|
|
2031
2043
|
return config;
|
|
2032
2044
|
}
|
|
2033
|
-
function
|
|
2045
|
+
function ssoProviderAuthBoundaryChanged(current, updated) {
|
|
2034
2046
|
if (identityValueChanged(current.issuer, updated.issuer)) return true;
|
|
2035
2047
|
const currentSamlConfig = parseConfigSnapshot(current.samlConfig, "SAML");
|
|
2036
2048
|
const updatedSamlConfig = parseConfigSnapshot(updated.samlConfig, "SAML");
|
|
2037
|
-
if (currentSamlConfig
|
|
2049
|
+
if (currentSamlConfig) {
|
|
2050
|
+
if (!updatedSamlConfig) return true;
|
|
2051
|
+
if (identityValueChanged(currentSamlConfig, updatedSamlConfig)) {
|
|
2052
|
+
const changes = samlBoundaryChanges(currentSamlConfig, updatedSamlConfig);
|
|
2053
|
+
if (changes.identity || changes.trustAnchors) return true;
|
|
2054
|
+
}
|
|
2055
|
+
}
|
|
2038
2056
|
const currentOidcConfig = parseConfigSnapshot(current.oidcConfig, "OIDC");
|
|
2039
2057
|
const updatedOidcConfig = parseConfigSnapshot(updated.oidcConfig, "OIDC");
|
|
2040
2058
|
return Boolean(currentOidcConfig && (!updatedOidcConfig || oidcIdentityBoundaryChanged(currentOidcConfig, updatedOidcConfig)));
|
|
@@ -2104,7 +2122,7 @@ async function lockSSOProviderForAccountLink(ctx, provider) {
|
|
|
2104
2122
|
code: "SSO_PROVIDER_CHANGED",
|
|
2105
2123
|
message: "SSO provider changed while account linking was in progress"
|
|
2106
2124
|
});
|
|
2107
|
-
if (
|
|
2125
|
+
if (ssoProviderAuthBoundaryChanged(provider, lockedProvider)) throw new APIError("CONFLICT", {
|
|
2108
2126
|
code: "SSO_PROVIDER_CHANGED",
|
|
2109
2127
|
message: "SSO provider changed while account linking was in progress"
|
|
2110
2128
|
});
|
|
@@ -2356,7 +2374,7 @@ const updateSSOProvider = (options) => {
|
|
|
2356
2374
|
metadata: { openapi: {
|
|
2357
2375
|
operationId: "updateSSOProvider",
|
|
2358
2376
|
summary: "Update SSO provider",
|
|
2359
|
-
description: "Partially update an SSO provider.
|
|
2377
|
+
description: "Partially update an SSO provider. A supplied OIDC or SAML mapping replaces the entire previous mapping. If the domain changes, domainVerified is reset to false.",
|
|
2360
2378
|
responses: {
|
|
2361
2379
|
"200": { description: "SSO provider updated successfully. The `certificate` field is an array of parsed certificates for SAML providers, or absent when certs live inside `idpMetadata.metadata`." },
|
|
2362
2380
|
"404": { description: "Provider not found" },
|
|
@@ -2379,6 +2397,7 @@ const updateSSOProvider = (options) => {
|
|
|
2379
2397
|
if (!existingProvider) throw new APIError("NOT_FOUND", { message: "Provider not found" });
|
|
2380
2398
|
const updateData = { ...additionalFields };
|
|
2381
2399
|
let providerIdentityBoundaryChanged = body.issuer !== void 0 && body.issuer !== existingProvider.issuer;
|
|
2400
|
+
let trustAnchorsChanged = false;
|
|
2382
2401
|
if (body.issuer !== void 0) updateData.issuer = body.issuer;
|
|
2383
2402
|
if (body.domain !== void 0) {
|
|
2384
2403
|
updateData.domain = body.domain;
|
|
@@ -2397,7 +2416,9 @@ const updateSSOProvider = (options) => {
|
|
|
2397
2416
|
validateCertSources(updatedSamlConfig);
|
|
2398
2417
|
assertSAMLIdentityProviderAuthority(updatedSamlConfig);
|
|
2399
2418
|
assertSAMLServiceProviderMetadataPolicy(updatedSamlConfig);
|
|
2400
|
-
|
|
2419
|
+
const changes = samlBoundaryChanges(currentSamlConfig, updatedSamlConfig);
|
|
2420
|
+
if (changes.identity) providerIdentityBoundaryChanged = true;
|
|
2421
|
+
trustAnchorsChanged = changes.trustAnchors;
|
|
2401
2422
|
updateData.samlConfig = JSON.stringify(updatedSamlConfig);
|
|
2402
2423
|
}
|
|
2403
2424
|
if (body.oidcConfig) {
|
|
@@ -2416,7 +2437,7 @@ const updateSSOProvider = (options) => {
|
|
|
2416
2437
|
}
|
|
2417
2438
|
await guardSSOProviderMutation(options, {
|
|
2418
2439
|
action: "update",
|
|
2419
|
-
isAuthenticationBoundaryChange: providerIdentityBoundaryChanged
|
|
2440
|
+
isAuthenticationBoundaryChange: providerIdentityBoundaryChanged || trustAnchorsChanged
|
|
2420
2441
|
}, existingProvider, trx, ctx.context.logger);
|
|
2421
2442
|
if (providerIdentityBoundaryChanged) {
|
|
2422
2443
|
if (await trx.findOne({
|
|
@@ -3291,8 +3312,7 @@ const registerSSOProvider = (options) => {
|
|
|
3291
3312
|
nullable: true,
|
|
3292
3313
|
description: "Additional field mappings"
|
|
3293
3314
|
}
|
|
3294
|
-
}
|
|
3295
|
-
required: ["email", "name"]
|
|
3315
|
+
}
|
|
3296
3316
|
}
|
|
3297
3317
|
},
|
|
3298
3318
|
required: [
|
|
@@ -3888,6 +3908,7 @@ async function handleOIDCCallback(ctx, options, providerId, stateData, parsedPro
|
|
|
3888
3908
|
const value = claims[claim];
|
|
3889
3909
|
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
3890
3910
|
};
|
|
3911
|
+
const readEmailClaim = (claims) => [claims[mapping.email || "email"]].flat().find((value) => typeof value === "string" && value.length > 0);
|
|
3891
3912
|
let rawProfile;
|
|
3892
3913
|
let verifiedIdToken = null;
|
|
3893
3914
|
if (tokenResponse.idToken) {
|
|
@@ -3918,7 +3939,7 @@ async function handleOIDCCallback(ctx, options, providerId, stateData, parsedPro
|
|
|
3918
3939
|
userInfo = {
|
|
3919
3940
|
...Object.fromEntries(Object.entries(mapping.extraFields || {}).map(([key, value]) => [key, rawUserInfo[value]])),
|
|
3920
3941
|
id: readStringClaim(rawUserInfo, "sub"),
|
|
3921
|
-
email:
|
|
3942
|
+
email: readEmailClaim(rawUserInfo),
|
|
3922
3943
|
emailVerified: options?.trustEmailVerified ? parseProviderEmailVerified(rawUserInfo[mapping.emailVerified || "email_verified"]) : false,
|
|
3923
3944
|
name: readStringClaim(rawUserInfo, mapping.name || "name"),
|
|
3924
3945
|
image: readStringClaim(rawUserInfo, mapping.image || "picture")
|
|
@@ -3929,7 +3950,7 @@ async function handleOIDCCallback(ctx, options, providerId, stateData, parsedPro
|
|
|
3929
3950
|
userInfo = {
|
|
3930
3951
|
...Object.fromEntries(Object.entries(mapping.extraFields || {}).map(([key, value]) => [key, idToken[value]])),
|
|
3931
3952
|
id: idToken.sub,
|
|
3932
|
-
email:
|
|
3953
|
+
email: readEmailClaim(idToken),
|
|
3933
3954
|
emailVerified: options?.trustEmailVerified ? parseProviderEmailVerified(idToken[mapping.emailVerified || "email_verified"]) : false,
|
|
3934
3955
|
name: readStringClaim(idToken, mapping.name || "name"),
|
|
3935
3956
|
image: readStringClaim(idToken, mapping.image || "picture")
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@better-auth/sso",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.8",
|
|
4
4
|
"description": "SSO plugin for Better Auth",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -66,22 +66,22 @@
|
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@types/body-parser": "^1.19.6",
|
|
68
68
|
"@types/express": "^5.0.6",
|
|
69
|
-
"better-call": "1.4.
|
|
69
|
+
"better-call": "1.4.2",
|
|
70
70
|
"body-parser": "^2.3.0",
|
|
71
71
|
"express": "^5.2.1",
|
|
72
72
|
"kysely": "^0.28.17 || ^0.29.0",
|
|
73
73
|
"oauth2-mock-server": "^9.0.0",
|
|
74
74
|
"tsdown": "0.21.10",
|
|
75
|
-
"@better-auth/core": "1.7.
|
|
76
|
-
"@better-auth/kysely-adapter": "1.7.
|
|
77
|
-
"better-auth": "1.7.
|
|
75
|
+
"@better-auth/core": "1.7.8",
|
|
76
|
+
"@better-auth/kysely-adapter": "1.7.8",
|
|
77
|
+
"better-auth": "1.7.8"
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
|
-
"@better-auth/utils": "0.4.2",
|
|
80
|
+
"@better-auth/utils": "^0.4.2 || ^0.5.0",
|
|
81
81
|
"@better-fetch/fetch": "1.3.2",
|
|
82
|
-
"better-call": "1.4.
|
|
83
|
-
"better-auth": "^1.7.
|
|
84
|
-
"
|
|
82
|
+
"better-call": "1.4.2",
|
|
83
|
+
"@better-auth/core": "^1.7.8",
|
|
84
|
+
"better-auth": "^1.7.8"
|
|
85
85
|
},
|
|
86
86
|
"scripts": {
|
|
87
87
|
"build": "tsdown",
|