@thunderid/javascript 0.11.1 → 0.11.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/ThunderIDJavaScriptClient.d.ts +7 -0
- package/dist/ThunderIDJavaScriptClient.d.ts.map +1 -1
- package/dist/cjs/index.cjs +121 -18
- package/dist/constants/TokenConstants.d.ts +3 -0
- package/dist/constants/TokenConstants.d.ts.map +1 -1
- package/dist/edge/index.js +121 -19
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +121 -19
- package/dist/models/config.d.ts +53 -6
- package/dist/models/config.d.ts.map +1 -1
- package/dist/utils/AuthenticationHelper.d.ts +11 -0
- package/dist/utils/AuthenticationHelper.d.ts.map +1 -1
- package/dist/utils/resolveResourceEndpoint.d.ts +65 -0
- package/dist/utils/resolveResourceEndpoint.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -46,6 +46,7 @@ declare class ThunderIDJavaScriptClient<T = Config> implements ThunderIDClient<T
|
|
|
46
46
|
getUser(userId?: string): Promise<User>;
|
|
47
47
|
isSignedIn(userId?: string): Promise<boolean>;
|
|
48
48
|
getAccessToken(sessionId?: string): Promise<string>;
|
|
49
|
+
private isCachedTokenStillValid;
|
|
49
50
|
clearSession(sessionId?: string): void;
|
|
50
51
|
/**
|
|
51
52
|
* Async variant of {@link clearSession} that resolves once the session data has been removed from
|
|
@@ -76,6 +77,12 @@ declare class ThunderIDJavaScriptClient<T = Config> implements ThunderIDClient<T
|
|
|
76
77
|
protected getIdToken(userId?: string): Promise<string>;
|
|
77
78
|
protected getUserSession(userId?: string): Promise<UserSession>;
|
|
78
79
|
protected refreshAccessToken(userId?: string): Promise<TokenResponse | User>;
|
|
80
|
+
/**
|
|
81
|
+
* Requests a machine-to-machine access token via the `client_credentials` grant
|
|
82
|
+
* (RFC 6749 §4.4) and caches it under the given session key. Unlike the user-facing
|
|
83
|
+
* flows, there's no id_token or refresh_token: the service authenticates as itself.
|
|
84
|
+
*/
|
|
85
|
+
protected requestClientCredentialsToken(sessionId?: string): Promise<TokenResponse>;
|
|
79
86
|
protected revokeAccessToken(userId?: string): Promise<Response | boolean>;
|
|
80
87
|
initiateCIBA(options: CIBAInitiateOptions): Promise<CIBAInitiateResponse>;
|
|
81
88
|
pollCIBA(authReqId: string, interval: number, options?: CIBAPollOptions): Promise<TokenResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThunderIDJavaScriptClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDJavaScriptClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"ThunderIDJavaScriptClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDJavaScriptClient.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -79,7 +79,8 @@ const TokenConstants = {
|
|
|
79
79
|
"ML-DSA-65",
|
|
80
80
|
"ML-DSA-87"
|
|
81
81
|
] },
|
|
82
|
-
Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } }
|
|
82
|
+
Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } },
|
|
83
|
+
Lifecycle: { CLIENT_CREDENTIALS_REFRESH_MARGIN_MS: 3e4 }
|
|
83
84
|
};
|
|
84
85
|
var TokenConstants_default = TokenConstants;
|
|
85
86
|
|
|
@@ -2545,6 +2546,42 @@ const processOpenIDScopes = (scopes) => {
|
|
|
2545
2546
|
};
|
|
2546
2547
|
var processOpenIDScopes_default = processOpenIDScopes;
|
|
2547
2548
|
|
|
2549
|
+
//#endregion
|
|
2550
|
+
//#region src/utils/resolveResourceEndpoint.ts
|
|
2551
|
+
/**
|
|
2552
|
+
* The `config.endpoints` keys that address resource-server endpoints rather than OIDC/OAuth
|
|
2553
|
+
* endpoints. Used to keep these overrides out of the resolved OIDC provider metadata.
|
|
2554
|
+
*/
|
|
2555
|
+
const RESOURCE_ENDPOINT_KEYS = [
|
|
2556
|
+
"flowExecute",
|
|
2557
|
+
"flowMeta",
|
|
2558
|
+
"usersMe"
|
|
2559
|
+
];
|
|
2560
|
+
/**
|
|
2561
|
+
* Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
|
|
2562
|
+
* precedence) an explicit per-call URL, then a `config.endpoints` override.
|
|
2563
|
+
*
|
|
2564
|
+
* Returns `undefined` when neither is set, so the calling API function falls back to deriving the
|
|
2565
|
+
* endpoint from `baseUrl` (i.e. `${baseUrl}/flow/execute`) exactly as before. Callers should keep
|
|
2566
|
+
* passing `baseUrl` alongside the resolved `url` to preserve that fallback.
|
|
2567
|
+
*
|
|
2568
|
+
* @param key - The resource endpoint to resolve.
|
|
2569
|
+
* @param config - The client config carrying optional `endpoints` overrides.
|
|
2570
|
+
* @param explicitUrl - An explicit URL provided by the immediate caller; takes highest precedence.
|
|
2571
|
+
* @returns The resolved override URL, or `undefined` to defer to `baseUrl`-based resolution.
|
|
2572
|
+
*
|
|
2573
|
+
* @example
|
|
2574
|
+
* ```typescript
|
|
2575
|
+
* const response = await executeEmbeddedUserOnboardingFlow({
|
|
2576
|
+
* baseUrl: config.baseUrl,
|
|
2577
|
+
* url: resolveResourceEndpoint('flowExecute', config),
|
|
2578
|
+
* payload,
|
|
2579
|
+
* });
|
|
2580
|
+
* ```
|
|
2581
|
+
*/
|
|
2582
|
+
const resolveResourceEndpoint = (key, config, explicitUrl) => explicitUrl ?? config?.endpoints?.[key] ?? void 0;
|
|
2583
|
+
var resolveResourceEndpoint_default = resolveResourceEndpoint;
|
|
2584
|
+
|
|
2548
2585
|
//#endregion
|
|
2549
2586
|
//#region src/constants/TokenExchangeConstants.ts
|
|
2550
2587
|
/**
|
|
@@ -2615,6 +2652,25 @@ var AuthenticationHelper = class {
|
|
|
2615
2652
|
this.cryptoHelper = cryptoHelperInstance;
|
|
2616
2653
|
}
|
|
2617
2654
|
/**
|
|
2655
|
+
* Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
|
|
2656
|
+
*
|
|
2657
|
+
* Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
|
|
2658
|
+
* (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
|
|
2659
|
+
* `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
|
|
2660
|
+
*
|
|
2661
|
+
* @param configData - The resolved auth client config.
|
|
2662
|
+
* @returns A snake_cased map of the OIDC endpoint overrides (empty when none are configured).
|
|
2663
|
+
*/
|
|
2664
|
+
mapConfiguredOidcEndpoints(configData) {
|
|
2665
|
+
const endpoints = {};
|
|
2666
|
+
if (!configData.endpoints) return endpoints;
|
|
2667
|
+
Object.keys(configData.endpoints).filter((endpointName) => !RESOURCE_ENDPOINT_KEYS.includes(endpointName)).forEach((endpointName) => {
|
|
2668
|
+
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2669
|
+
endpoints[snakeCasedName] = configData.endpoints ? configData.endpoints[endpointName] : "";
|
|
2670
|
+
});
|
|
2671
|
+
return endpoints;
|
|
2672
|
+
}
|
|
2673
|
+
/**
|
|
2618
2674
|
* Merges explicit endpoint overrides from config into the discovery response.
|
|
2619
2675
|
* Config-defined endpoint names (camelCase) are converted to snake_case before merging.
|
|
2620
2676
|
*
|
|
@@ -2622,15 +2678,10 @@ var AuthenticationHelper = class {
|
|
|
2622
2678
|
* @returns The discovery response with any config-specified endpoint overrides applied.
|
|
2623
2679
|
*/
|
|
2624
2680
|
async resolveEndpoints(response) {
|
|
2625
|
-
const oidcProviderMetaData = {};
|
|
2626
2681
|
const configData = await this.config();
|
|
2627
|
-
if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
|
|
2628
|
-
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2629
|
-
oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
|
|
2630
|
-
});
|
|
2631
2682
|
return {
|
|
2632
2683
|
...response,
|
|
2633
|
-
...
|
|
2684
|
+
...this.mapConfiguredOidcEndpoints(configData)
|
|
2634
2685
|
};
|
|
2635
2686
|
}
|
|
2636
2687
|
/**
|
|
@@ -2641,7 +2692,6 @@ var AuthenticationHelper = class {
|
|
|
2641
2692
|
* @throws {ThunderIDAuthException} When required endpoints are absent from the config.
|
|
2642
2693
|
*/
|
|
2643
2694
|
async resolveEndpointsExplicitly() {
|
|
2644
|
-
const oidcProviderMetaData = {};
|
|
2645
2695
|
const configData = await this.config();
|
|
2646
2696
|
const requiredEndpoints = [
|
|
2647
2697
|
OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.AUTHORIZATION,
|
|
@@ -2656,11 +2706,7 @@ var AuthenticationHelper = class {
|
|
|
2656
2706
|
if (!(configData.endpoints ? requiredEndpoints.every((reqEndpointName) => configData.endpoints ? Object.keys(configData.endpoints).some((endpointName) => {
|
|
2657
2707
|
return endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`) === reqEndpointName;
|
|
2658
2708
|
}) : false) : false)) throw new ThunderIDAuthException("JS-AUTH_HELPER-REE-NF01", "Required endpoints missing", "Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");
|
|
2659
|
-
|
|
2660
|
-
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2661
|
-
oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
|
|
2662
|
-
});
|
|
2663
|
-
return { ...oidcProviderMetaData };
|
|
2709
|
+
return { ...this.mapConfiguredOidcEndpoints(configData) };
|
|
2664
2710
|
}
|
|
2665
2711
|
/**
|
|
2666
2712
|
* Derives OIDC endpoint URLs from the configured `baseUrl`.
|
|
@@ -2671,14 +2717,10 @@ var AuthenticationHelper = class {
|
|
|
2671
2717
|
* @throws {ThunderIDAuthException} When `baseUrl` is not defined in the config.
|
|
2672
2718
|
*/
|
|
2673
2719
|
async resolveEndpointsByBaseURL() {
|
|
2674
|
-
const oidcProviderMetaData = {};
|
|
2675
2720
|
const configData = await this.config();
|
|
2676
2721
|
const { baseUrl } = configData;
|
|
2677
2722
|
if (!baseUrl) throw new ThunderIDAuthException("JS-AUTH_HELPER_REBO-NF01", "Base URL not defined.", "Base URL is not defined in AuthClient config.");
|
|
2678
|
-
|
|
2679
|
-
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2680
|
-
oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
|
|
2681
|
-
});
|
|
2723
|
+
const oidcProviderMetaData = this.mapConfiguredOidcEndpoints(configData);
|
|
2682
2724
|
const endpointKeys = OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints;
|
|
2683
2725
|
const endpointPaths = OIDCDiscoveryConstants_default.Endpoints;
|
|
2684
2726
|
return {
|
|
@@ -3106,8 +3148,18 @@ var ThunderIDJavaScriptClient = class {
|
|
|
3106
3148
|
return createdAt + parseInt(expiresInString, 10) * 1e3 > (/* @__PURE__ */ new Date()).getTime();
|
|
3107
3149
|
}
|
|
3108
3150
|
async getAccessToken(sessionId) {
|
|
3151
|
+
if ((await this.configProvider()).grantType === "client_credentials") {
|
|
3152
|
+
const sessionData = await this.storageManager.getSessionData(sessionId);
|
|
3153
|
+
if (sessionData?.access_token && this.isCachedTokenStillValid(sessionData)) return sessionData.access_token;
|
|
3154
|
+
return (await this.requestClientCredentialsToken(sessionId)).accessToken;
|
|
3155
|
+
}
|
|
3109
3156
|
return (await this.storageManager.getSessionData(sessionId))?.access_token;
|
|
3110
3157
|
}
|
|
3158
|
+
isCachedTokenStillValid(sessionData) {
|
|
3159
|
+
if (!sessionData.created_at || !sessionData.expires_in) return false;
|
|
3160
|
+
const expiresInMs = parseInt(sessionData.expires_in, 10) * 1e3;
|
|
3161
|
+
return sessionData.created_at + expiresInMs - TokenConstants_default.Lifecycle.CLIENT_CREDENTIALS_REFRESH_MARGIN_MS > Date.now();
|
|
3162
|
+
}
|
|
3111
3163
|
clearSession(sessionId) {
|
|
3112
3164
|
this.authHelper.clearSession(sessionId);
|
|
3113
3165
|
}
|
|
@@ -3380,6 +3432,56 @@ var ThunderIDJavaScriptClient = class {
|
|
|
3380
3432
|
if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT2-HE04", `Refreshing access token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
|
|
3381
3433
|
return this.authHelper.handleTokenResponse(tokenResponse, userId);
|
|
3382
3434
|
}
|
|
3435
|
+
/**
|
|
3436
|
+
* Requests a machine-to-machine access token via the `client_credentials` grant
|
|
3437
|
+
* (RFC 6749 §4.4) and caches it under the given session key. Unlike the user-facing
|
|
3438
|
+
* flows, there's no id_token or refresh_token: the service authenticates as itself.
|
|
3439
|
+
*/
|
|
3440
|
+
async requestClientCredentialsToken(sessionId) {
|
|
3441
|
+
if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
|
|
3442
|
+
const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
|
|
3443
|
+
const configData = await this.configProvider();
|
|
3444
|
+
if (!tokenEndpoint || tokenEndpoint.trim().length === 0) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NF01", "Token endpoint not found.", "No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");
|
|
3445
|
+
const body = new URLSearchParams();
|
|
3446
|
+
body.set("grant_type", "client_credentials");
|
|
3447
|
+
body.set("client_id", configData.clientId ?? "");
|
|
3448
|
+
const hasSecret = Boolean(configData.clientSecret && configData.clientSecret.trim().length > 0);
|
|
3449
|
+
const tokenEndpointAuthMethod = configData.tokenRequest?.authMethod ?? "client_secret_basic";
|
|
3450
|
+
if (hasSecret && tokenEndpointAuthMethod === "client_secret_post") body.set("client_secret", configData.clientSecret);
|
|
3451
|
+
const scope = Array.isArray(configData.scopes) ? configData.scopes.join(" ") : configData.scopes;
|
|
3452
|
+
if (scope) body.set("scope", scope);
|
|
3453
|
+
if (configData.tokenRequest?.params) Object.entries(configData.tokenRequest.params).forEach(([key, value]) => {
|
|
3454
|
+
body.set(key, value);
|
|
3455
|
+
});
|
|
3456
|
+
const tokenRequestHeaders = {
|
|
3457
|
+
Accept: "application/json",
|
|
3458
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
3459
|
+
};
|
|
3460
|
+
if (hasSecret && tokenEndpointAuthMethod === "client_secret_basic") tokenRequestHeaders["Authorization"] = `Basic ${base64Encode_default(`${encodeURIComponent(configData.clientId)}:${encodeURIComponent(configData.clientSecret)}`)}`;
|
|
3461
|
+
let tokenResponse;
|
|
3462
|
+
try {
|
|
3463
|
+
tokenResponse = await fetch(tokenEndpoint, {
|
|
3464
|
+
body,
|
|
3465
|
+
headers: tokenRequestHeaders,
|
|
3466
|
+
method: "POST"
|
|
3467
|
+
});
|
|
3468
|
+
} catch (error$1) {
|
|
3469
|
+
throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NE02", "Requesting client credentials token failed.", error$1 ?? "The request to get the client credentials access token failed.");
|
|
3470
|
+
}
|
|
3471
|
+
if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-HE03", `Requesting client credentials token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
|
|
3472
|
+
const parsedResponse = await tokenResponse.json();
|
|
3473
|
+
parsedResponse.created_at = (/* @__PURE__ */ new Date()).getTime();
|
|
3474
|
+
await this.storageManager.setSessionData(parsedResponse, sessionId);
|
|
3475
|
+
return {
|
|
3476
|
+
accessToken: parsedResponse.access_token,
|
|
3477
|
+
createdAt: parsedResponse.created_at,
|
|
3478
|
+
expiresIn: parsedResponse.expires_in,
|
|
3479
|
+
idToken: parsedResponse.id_token ?? "",
|
|
3480
|
+
refreshToken: parsedResponse.refresh_token ?? "",
|
|
3481
|
+
scope: parsedResponse.scope,
|
|
3482
|
+
tokenType: parsedResponse.token_type
|
|
3483
|
+
};
|
|
3484
|
+
}
|
|
3383
3485
|
async revokeAccessToken(userId) {
|
|
3384
3486
|
const revokeTokenEndpoint = (await this.oidcProviderMetaDataProvider()).revocation_endpoint;
|
|
3385
3487
|
const configData = await this.configProvider();
|
|
@@ -6199,6 +6301,7 @@ exports.resolveFlowTemplateLiterals = resolveFlowTemplateLiterals;
|
|
|
6199
6301
|
exports.resolveLocaleDisplayName = resolveLocaleDisplayName;
|
|
6200
6302
|
exports.resolveLocaleEmoji = resolveLocaleEmoji_default;
|
|
6201
6303
|
exports.resolveMeta = resolveMeta;
|
|
6304
|
+
exports.resolveResourceEndpoint = resolveResourceEndpoint_default;
|
|
6202
6305
|
exports.set = set_default;
|
|
6203
6306
|
exports.startCase = startCase_default;
|
|
6204
6307
|
exports.updateMeProfile = updateMeProfile_default;
|
|
@@ -43,6 +43,9 @@ declare const TokenConstants: {
|
|
|
43
43
|
readonly REFRESH_TOKEN_TIMER: string;
|
|
44
44
|
};
|
|
45
45
|
};
|
|
46
|
+
readonly Lifecycle: {
|
|
47
|
+
readonly CLIENT_CREDENTIALS_REFRESH_MARGIN_MS: number;
|
|
48
|
+
};
|
|
46
49
|
};
|
|
47
50
|
export default TokenConstants;
|
|
48
51
|
//# sourceMappingURL=TokenConstants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/TokenConstants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,cAAc,EAAE;IACpB,QAAQ,CAAC,mBAAmB,EAAE;QAC5B,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;KAClD,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE;YACpB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACtC,CAAC;KACH,CAAC;
|
|
1
|
+
{"version":3,"file":"TokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/TokenConstants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,cAAc,EAAE;IACpB,QAAQ,CAAC,mBAAmB,EAAE;QAC5B,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;KAClD,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE;YACpB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACtC,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,oCAAoC,EAAE,MAAM,CAAC;KACvD,CAAC;CAqDM,CAAC;AAEX,eAAe,cAAc,CAAC"}
|
package/dist/edge/index.js
CHANGED
|
@@ -59,7 +59,8 @@ const TokenConstants = {
|
|
|
59
59
|
"ML-DSA-65",
|
|
60
60
|
"ML-DSA-87"
|
|
61
61
|
] },
|
|
62
|
-
Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } }
|
|
62
|
+
Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } },
|
|
63
|
+
Lifecycle: { CLIENT_CREDENTIALS_REFRESH_MARGIN_MS: 3e4 }
|
|
63
64
|
};
|
|
64
65
|
var TokenConstants_default = TokenConstants;
|
|
65
66
|
|
|
@@ -2525,6 +2526,42 @@ const processOpenIDScopes = (scopes) => {
|
|
|
2525
2526
|
};
|
|
2526
2527
|
var processOpenIDScopes_default = processOpenIDScopes;
|
|
2527
2528
|
|
|
2529
|
+
//#endregion
|
|
2530
|
+
//#region src/utils/resolveResourceEndpoint.ts
|
|
2531
|
+
/**
|
|
2532
|
+
* The `config.endpoints` keys that address resource-server endpoints rather than OIDC/OAuth
|
|
2533
|
+
* endpoints. Used to keep these overrides out of the resolved OIDC provider metadata.
|
|
2534
|
+
*/
|
|
2535
|
+
const RESOURCE_ENDPOINT_KEYS = [
|
|
2536
|
+
"flowExecute",
|
|
2537
|
+
"flowMeta",
|
|
2538
|
+
"usersMe"
|
|
2539
|
+
];
|
|
2540
|
+
/**
|
|
2541
|
+
* Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
|
|
2542
|
+
* precedence) an explicit per-call URL, then a `config.endpoints` override.
|
|
2543
|
+
*
|
|
2544
|
+
* Returns `undefined` when neither is set, so the calling API function falls back to deriving the
|
|
2545
|
+
* endpoint from `baseUrl` (i.e. `${baseUrl}/flow/execute`) exactly as before. Callers should keep
|
|
2546
|
+
* passing `baseUrl` alongside the resolved `url` to preserve that fallback.
|
|
2547
|
+
*
|
|
2548
|
+
* @param key - The resource endpoint to resolve.
|
|
2549
|
+
* @param config - The client config carrying optional `endpoints` overrides.
|
|
2550
|
+
* @param explicitUrl - An explicit URL provided by the immediate caller; takes highest precedence.
|
|
2551
|
+
* @returns The resolved override URL, or `undefined` to defer to `baseUrl`-based resolution.
|
|
2552
|
+
*
|
|
2553
|
+
* @example
|
|
2554
|
+
* ```typescript
|
|
2555
|
+
* const response = await executeEmbeddedUserOnboardingFlow({
|
|
2556
|
+
* baseUrl: config.baseUrl,
|
|
2557
|
+
* url: resolveResourceEndpoint('flowExecute', config),
|
|
2558
|
+
* payload,
|
|
2559
|
+
* });
|
|
2560
|
+
* ```
|
|
2561
|
+
*/
|
|
2562
|
+
const resolveResourceEndpoint = (key, config, explicitUrl) => explicitUrl ?? config?.endpoints?.[key] ?? void 0;
|
|
2563
|
+
var resolveResourceEndpoint_default = resolveResourceEndpoint;
|
|
2564
|
+
|
|
2528
2565
|
//#endregion
|
|
2529
2566
|
//#region src/constants/TokenExchangeConstants.ts
|
|
2530
2567
|
/**
|
|
@@ -2595,6 +2632,25 @@ var AuthenticationHelper = class {
|
|
|
2595
2632
|
this.cryptoHelper = cryptoHelperInstance;
|
|
2596
2633
|
}
|
|
2597
2634
|
/**
|
|
2635
|
+
* Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
|
|
2636
|
+
*
|
|
2637
|
+
* Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
|
|
2638
|
+
* (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
|
|
2639
|
+
* `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
|
|
2640
|
+
*
|
|
2641
|
+
* @param configData - The resolved auth client config.
|
|
2642
|
+
* @returns A snake_cased map of the OIDC endpoint overrides (empty when none are configured).
|
|
2643
|
+
*/
|
|
2644
|
+
mapConfiguredOidcEndpoints(configData) {
|
|
2645
|
+
const endpoints = {};
|
|
2646
|
+
if (!configData.endpoints) return endpoints;
|
|
2647
|
+
Object.keys(configData.endpoints).filter((endpointName) => !RESOURCE_ENDPOINT_KEYS.includes(endpointName)).forEach((endpointName) => {
|
|
2648
|
+
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2649
|
+
endpoints[snakeCasedName] = configData.endpoints ? configData.endpoints[endpointName] : "";
|
|
2650
|
+
});
|
|
2651
|
+
return endpoints;
|
|
2652
|
+
}
|
|
2653
|
+
/**
|
|
2598
2654
|
* Merges explicit endpoint overrides from config into the discovery response.
|
|
2599
2655
|
* Config-defined endpoint names (camelCase) are converted to snake_case before merging.
|
|
2600
2656
|
*
|
|
@@ -2602,15 +2658,10 @@ var AuthenticationHelper = class {
|
|
|
2602
2658
|
* @returns The discovery response with any config-specified endpoint overrides applied.
|
|
2603
2659
|
*/
|
|
2604
2660
|
async resolveEndpoints(response) {
|
|
2605
|
-
const oidcProviderMetaData = {};
|
|
2606
2661
|
const configData = await this.config();
|
|
2607
|
-
if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
|
|
2608
|
-
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2609
|
-
oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
|
|
2610
|
-
});
|
|
2611
2662
|
return {
|
|
2612
2663
|
...response,
|
|
2613
|
-
...
|
|
2664
|
+
...this.mapConfiguredOidcEndpoints(configData)
|
|
2614
2665
|
};
|
|
2615
2666
|
}
|
|
2616
2667
|
/**
|
|
@@ -2621,7 +2672,6 @@ var AuthenticationHelper = class {
|
|
|
2621
2672
|
* @throws {ThunderIDAuthException} When required endpoints are absent from the config.
|
|
2622
2673
|
*/
|
|
2623
2674
|
async resolveEndpointsExplicitly() {
|
|
2624
|
-
const oidcProviderMetaData = {};
|
|
2625
2675
|
const configData = await this.config();
|
|
2626
2676
|
const requiredEndpoints = [
|
|
2627
2677
|
OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.AUTHORIZATION,
|
|
@@ -2636,11 +2686,7 @@ var AuthenticationHelper = class {
|
|
|
2636
2686
|
if (!(configData.endpoints ? requiredEndpoints.every((reqEndpointName) => configData.endpoints ? Object.keys(configData.endpoints).some((endpointName) => {
|
|
2637
2687
|
return endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`) === reqEndpointName;
|
|
2638
2688
|
}) : false) : false)) throw new ThunderIDAuthException("JS-AUTH_HELPER-REE-NF01", "Required endpoints missing", "Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");
|
|
2639
|
-
|
|
2640
|
-
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2641
|
-
oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
|
|
2642
|
-
});
|
|
2643
|
-
return { ...oidcProviderMetaData };
|
|
2689
|
+
return { ...this.mapConfiguredOidcEndpoints(configData) };
|
|
2644
2690
|
}
|
|
2645
2691
|
/**
|
|
2646
2692
|
* Derives OIDC endpoint URLs from the configured `baseUrl`.
|
|
@@ -2651,14 +2697,10 @@ var AuthenticationHelper = class {
|
|
|
2651
2697
|
* @throws {ThunderIDAuthException} When `baseUrl` is not defined in the config.
|
|
2652
2698
|
*/
|
|
2653
2699
|
async resolveEndpointsByBaseURL() {
|
|
2654
|
-
const oidcProviderMetaData = {};
|
|
2655
2700
|
const configData = await this.config();
|
|
2656
2701
|
const { baseUrl } = configData;
|
|
2657
2702
|
if (!baseUrl) throw new ThunderIDAuthException("JS-AUTH_HELPER_REBO-NF01", "Base URL not defined.", "Base URL is not defined in AuthClient config.");
|
|
2658
|
-
|
|
2659
|
-
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2660
|
-
oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
|
|
2661
|
-
});
|
|
2703
|
+
const oidcProviderMetaData = this.mapConfiguredOidcEndpoints(configData);
|
|
2662
2704
|
const endpointKeys = OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints;
|
|
2663
2705
|
const endpointPaths = OIDCDiscoveryConstants_default.Endpoints;
|
|
2664
2706
|
return {
|
|
@@ -3086,8 +3128,18 @@ var ThunderIDJavaScriptClient = class {
|
|
|
3086
3128
|
return createdAt + parseInt(expiresInString, 10) * 1e3 > (/* @__PURE__ */ new Date()).getTime();
|
|
3087
3129
|
}
|
|
3088
3130
|
async getAccessToken(sessionId) {
|
|
3131
|
+
if ((await this.configProvider()).grantType === "client_credentials") {
|
|
3132
|
+
const sessionData = await this.storageManager.getSessionData(sessionId);
|
|
3133
|
+
if (sessionData?.access_token && this.isCachedTokenStillValid(sessionData)) return sessionData.access_token;
|
|
3134
|
+
return (await this.requestClientCredentialsToken(sessionId)).accessToken;
|
|
3135
|
+
}
|
|
3089
3136
|
return (await this.storageManager.getSessionData(sessionId))?.access_token;
|
|
3090
3137
|
}
|
|
3138
|
+
isCachedTokenStillValid(sessionData) {
|
|
3139
|
+
if (!sessionData.created_at || !sessionData.expires_in) return false;
|
|
3140
|
+
const expiresInMs = parseInt(sessionData.expires_in, 10) * 1e3;
|
|
3141
|
+
return sessionData.created_at + expiresInMs - TokenConstants_default.Lifecycle.CLIENT_CREDENTIALS_REFRESH_MARGIN_MS > Date.now();
|
|
3142
|
+
}
|
|
3091
3143
|
clearSession(sessionId) {
|
|
3092
3144
|
this.authHelper.clearSession(sessionId);
|
|
3093
3145
|
}
|
|
@@ -3360,6 +3412,56 @@ var ThunderIDJavaScriptClient = class {
|
|
|
3360
3412
|
if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT2-HE04", `Refreshing access token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
|
|
3361
3413
|
return this.authHelper.handleTokenResponse(tokenResponse, userId);
|
|
3362
3414
|
}
|
|
3415
|
+
/**
|
|
3416
|
+
* Requests a machine-to-machine access token via the `client_credentials` grant
|
|
3417
|
+
* (RFC 6749 §4.4) and caches it under the given session key. Unlike the user-facing
|
|
3418
|
+
* flows, there's no id_token or refresh_token: the service authenticates as itself.
|
|
3419
|
+
*/
|
|
3420
|
+
async requestClientCredentialsToken(sessionId) {
|
|
3421
|
+
if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
|
|
3422
|
+
const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
|
|
3423
|
+
const configData = await this.configProvider();
|
|
3424
|
+
if (!tokenEndpoint || tokenEndpoint.trim().length === 0) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NF01", "Token endpoint not found.", "No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");
|
|
3425
|
+
const body = new URLSearchParams();
|
|
3426
|
+
body.set("grant_type", "client_credentials");
|
|
3427
|
+
body.set("client_id", configData.clientId ?? "");
|
|
3428
|
+
const hasSecret = Boolean(configData.clientSecret && configData.clientSecret.trim().length > 0);
|
|
3429
|
+
const tokenEndpointAuthMethod = configData.tokenRequest?.authMethod ?? "client_secret_basic";
|
|
3430
|
+
if (hasSecret && tokenEndpointAuthMethod === "client_secret_post") body.set("client_secret", configData.clientSecret);
|
|
3431
|
+
const scope = Array.isArray(configData.scopes) ? configData.scopes.join(" ") : configData.scopes;
|
|
3432
|
+
if (scope) body.set("scope", scope);
|
|
3433
|
+
if (configData.tokenRequest?.params) Object.entries(configData.tokenRequest.params).forEach(([key, value]) => {
|
|
3434
|
+
body.set(key, value);
|
|
3435
|
+
});
|
|
3436
|
+
const tokenRequestHeaders = {
|
|
3437
|
+
Accept: "application/json",
|
|
3438
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
3439
|
+
};
|
|
3440
|
+
if (hasSecret && tokenEndpointAuthMethod === "client_secret_basic") tokenRequestHeaders["Authorization"] = `Basic ${base64Encode_default(`${encodeURIComponent(configData.clientId)}:${encodeURIComponent(configData.clientSecret)}`)}`;
|
|
3441
|
+
let tokenResponse;
|
|
3442
|
+
try {
|
|
3443
|
+
tokenResponse = await fetch(tokenEndpoint, {
|
|
3444
|
+
body,
|
|
3445
|
+
headers: tokenRequestHeaders,
|
|
3446
|
+
method: "POST"
|
|
3447
|
+
});
|
|
3448
|
+
} catch (error$1) {
|
|
3449
|
+
throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NE02", "Requesting client credentials token failed.", error$1 ?? "The request to get the client credentials access token failed.");
|
|
3450
|
+
}
|
|
3451
|
+
if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-HE03", `Requesting client credentials token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
|
|
3452
|
+
const parsedResponse = await tokenResponse.json();
|
|
3453
|
+
parsedResponse.created_at = (/* @__PURE__ */ new Date()).getTime();
|
|
3454
|
+
await this.storageManager.setSessionData(parsedResponse, sessionId);
|
|
3455
|
+
return {
|
|
3456
|
+
accessToken: parsedResponse.access_token,
|
|
3457
|
+
createdAt: parsedResponse.created_at,
|
|
3458
|
+
expiresIn: parsedResponse.expires_in,
|
|
3459
|
+
idToken: parsedResponse.id_token ?? "",
|
|
3460
|
+
refreshToken: parsedResponse.refresh_token ?? "",
|
|
3461
|
+
scope: parsedResponse.scope,
|
|
3462
|
+
tokenType: parsedResponse.token_type
|
|
3463
|
+
};
|
|
3464
|
+
}
|
|
3363
3465
|
async revokeAccessToken(userId) {
|
|
3364
3466
|
const revokeTokenEndpoint = (await this.oidcProviderMetaDataProvider()).revocation_endpoint;
|
|
3365
3467
|
const configData = await this.configProvider();
|
|
@@ -6100,4 +6202,4 @@ const normalizeTranslations = (translations) => {
|
|
|
6100
6202
|
var normalizeTranslations_default = normalizeTranslations;
|
|
6101
6203
|
|
|
6102
6204
|
//#endregion
|
|
6103
|
-
export { ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, AuthenticationHelper_default as AuthenticationHelper, DEFAULT_THEME, DEFAULT_VALIDATION_MESSAGE_KEYS, EMOJI_URI_SCHEME, EmbeddedFlowActionVariant, EmbeddedFlowComponentType, EmbeddedFlowEventType, EmbeddedFlowResponseType, EmbeddedFlowTextVariant, EmbeddedFlowType, EmbeddedRecoveryFlowStatus, EmbeddedRecoveryFlowType, EmbeddedSignInFlowStatus, EmbeddedSignInFlowType, EmbeddedSignUpFlowStatus, EmbeddedSignUpFlowType, FieldType, FlowMetaType, FlowMode, HttpClient, IsomorphicCrypto, OIDCRequestConstants_default as OIDCRequestConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TranslationBundleConstants_default as TranslationBundleConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, debug, deepMerge_default as deepMerge, error, evaluateValidationRule_default as evaluateValidationRule, executeEmbeddedRecoveryFlow_default as executeEmbeddedRecoveryFlow, executeEmbeddedSignInFlow_default as executeEmbeddedSignInFlow, executeEmbeddedSignUpFlow_default as executeEmbeddedSignUpFlow, executeEmbeddedUserOnboardingFlow_default as executeEmbeddedUserOnboardingFlow, extractEmojiFromUri_default as extractEmojiFromUri, extractPkceStorageKeyFromState_default as extractPkceStorageKeyFromState, extractUserClaimsFromIdToken_default as extractUserClaimsFromIdToken, formatDate_default as formatDate, generateFlattenedUserProfile_default as generateFlattenedUserProfile, get_default as get, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUserInfo_default as getUserInfo, getUsersMe_default as getUsersMe, getVendorPrefix_default as getVendorPrefix, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, normalizeTranslations_default as normalizeTranslations, processOpenIDScopes_default as processOpenIDScopes, processUsername_default as processUsername, removeTrailingSlash_default as removeTrailingSlash, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, set_default as set, startCase_default as startCase, updateMeProfile_default as updateMeProfile, warn, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
|
|
6205
|
+
export { ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, AuthenticationHelper_default as AuthenticationHelper, DEFAULT_THEME, DEFAULT_VALIDATION_MESSAGE_KEYS, EMOJI_URI_SCHEME, EmbeddedFlowActionVariant, EmbeddedFlowComponentType, EmbeddedFlowEventType, EmbeddedFlowResponseType, EmbeddedFlowTextVariant, EmbeddedFlowType, EmbeddedRecoveryFlowStatus, EmbeddedRecoveryFlowType, EmbeddedSignInFlowStatus, EmbeddedSignInFlowType, EmbeddedSignUpFlowStatus, EmbeddedSignUpFlowType, FieldType, FlowMetaType, FlowMode, HttpClient, IsomorphicCrypto, OIDCRequestConstants_default as OIDCRequestConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TranslationBundleConstants_default as TranslationBundleConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, debug, deepMerge_default as deepMerge, error, evaluateValidationRule_default as evaluateValidationRule, executeEmbeddedRecoveryFlow_default as executeEmbeddedRecoveryFlow, executeEmbeddedSignInFlow_default as executeEmbeddedSignInFlow, executeEmbeddedSignUpFlow_default as executeEmbeddedSignUpFlow, executeEmbeddedUserOnboardingFlow_default as executeEmbeddedUserOnboardingFlow, extractEmojiFromUri_default as extractEmojiFromUri, extractPkceStorageKeyFromState_default as extractPkceStorageKeyFromState, extractUserClaimsFromIdToken_default as extractUserClaimsFromIdToken, formatDate_default as formatDate, generateFlattenedUserProfile_default as generateFlattenedUserProfile, get_default as get, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUserInfo_default as getUserInfo, getUsersMe_default as getUsersMe, getVendorPrefix_default as getVendorPrefix, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, normalizeTranslations_default as normalizeTranslations, processOpenIDScopes_default as processOpenIDScopes, processUsername_default as processUsername, removeTrailingSlash_default as removeTrailingSlash, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, resolveResourceEndpoint_default as resolveResourceEndpoint, set_default as set, startCase_default as startCase, updateMeProfile_default as updateMeProfile, warn, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
|
package/dist/index.d.ts
CHANGED
|
@@ -93,6 +93,8 @@ export { default as get } from './utils/get';
|
|
|
93
93
|
export { default as startCase } from './utils/startCase';
|
|
94
94
|
export { default as removeTrailingSlash } from './utils/removeTrailingSlash';
|
|
95
95
|
export { default as resolveFieldName } from './utils/resolveFieldName';
|
|
96
|
+
export { default as resolveResourceEndpoint } from './utils/resolveResourceEndpoint';
|
|
97
|
+
export type { ResourceEndpointKey, ResourceEndpointConfig } from './utils/resolveResourceEndpoint';
|
|
96
98
|
export { default as resolveMeta } from './utils/resolveMeta';
|
|
97
99
|
export { default as resolveFlowTemplateLiterals } from './utils/resolveFlowTemplateLiterals';
|
|
98
100
|
export { default as countryCodeToFlagEmoji } from './utils/countryCodeToFlagEmoji';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -59,7 +59,8 @@ const TokenConstants = {
|
|
|
59
59
|
"ML-DSA-65",
|
|
60
60
|
"ML-DSA-87"
|
|
61
61
|
] },
|
|
62
|
-
Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } }
|
|
62
|
+
Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } },
|
|
63
|
+
Lifecycle: { CLIENT_CREDENTIALS_REFRESH_MARGIN_MS: 3e4 }
|
|
63
64
|
};
|
|
64
65
|
var TokenConstants_default = TokenConstants;
|
|
65
66
|
|
|
@@ -2525,6 +2526,42 @@ const processOpenIDScopes = (scopes) => {
|
|
|
2525
2526
|
};
|
|
2526
2527
|
var processOpenIDScopes_default = processOpenIDScopes;
|
|
2527
2528
|
|
|
2529
|
+
//#endregion
|
|
2530
|
+
//#region src/utils/resolveResourceEndpoint.ts
|
|
2531
|
+
/**
|
|
2532
|
+
* The `config.endpoints` keys that address resource-server endpoints rather than OIDC/OAuth
|
|
2533
|
+
* endpoints. Used to keep these overrides out of the resolved OIDC provider metadata.
|
|
2534
|
+
*/
|
|
2535
|
+
const RESOURCE_ENDPOINT_KEYS = [
|
|
2536
|
+
"flowExecute",
|
|
2537
|
+
"flowMeta",
|
|
2538
|
+
"usersMe"
|
|
2539
|
+
];
|
|
2540
|
+
/**
|
|
2541
|
+
* Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
|
|
2542
|
+
* precedence) an explicit per-call URL, then a `config.endpoints` override.
|
|
2543
|
+
*
|
|
2544
|
+
* Returns `undefined` when neither is set, so the calling API function falls back to deriving the
|
|
2545
|
+
* endpoint from `baseUrl` (i.e. `${baseUrl}/flow/execute`) exactly as before. Callers should keep
|
|
2546
|
+
* passing `baseUrl` alongside the resolved `url` to preserve that fallback.
|
|
2547
|
+
*
|
|
2548
|
+
* @param key - The resource endpoint to resolve.
|
|
2549
|
+
* @param config - The client config carrying optional `endpoints` overrides.
|
|
2550
|
+
* @param explicitUrl - An explicit URL provided by the immediate caller; takes highest precedence.
|
|
2551
|
+
* @returns The resolved override URL, or `undefined` to defer to `baseUrl`-based resolution.
|
|
2552
|
+
*
|
|
2553
|
+
* @example
|
|
2554
|
+
* ```typescript
|
|
2555
|
+
* const response = await executeEmbeddedUserOnboardingFlow({
|
|
2556
|
+
* baseUrl: config.baseUrl,
|
|
2557
|
+
* url: resolveResourceEndpoint('flowExecute', config),
|
|
2558
|
+
* payload,
|
|
2559
|
+
* });
|
|
2560
|
+
* ```
|
|
2561
|
+
*/
|
|
2562
|
+
const resolveResourceEndpoint = (key, config, explicitUrl) => explicitUrl ?? config?.endpoints?.[key] ?? void 0;
|
|
2563
|
+
var resolveResourceEndpoint_default = resolveResourceEndpoint;
|
|
2564
|
+
|
|
2528
2565
|
//#endregion
|
|
2529
2566
|
//#region src/constants/TokenExchangeConstants.ts
|
|
2530
2567
|
/**
|
|
@@ -2595,6 +2632,25 @@ var AuthenticationHelper = class {
|
|
|
2595
2632
|
this.cryptoHelper = cryptoHelperInstance;
|
|
2596
2633
|
}
|
|
2597
2634
|
/**
|
|
2635
|
+
* Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
|
|
2636
|
+
*
|
|
2637
|
+
* Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
|
|
2638
|
+
* (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
|
|
2639
|
+
* `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
|
|
2640
|
+
*
|
|
2641
|
+
* @param configData - The resolved auth client config.
|
|
2642
|
+
* @returns A snake_cased map of the OIDC endpoint overrides (empty when none are configured).
|
|
2643
|
+
*/
|
|
2644
|
+
mapConfiguredOidcEndpoints(configData) {
|
|
2645
|
+
const endpoints = {};
|
|
2646
|
+
if (!configData.endpoints) return endpoints;
|
|
2647
|
+
Object.keys(configData.endpoints).filter((endpointName) => !RESOURCE_ENDPOINT_KEYS.includes(endpointName)).forEach((endpointName) => {
|
|
2648
|
+
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2649
|
+
endpoints[snakeCasedName] = configData.endpoints ? configData.endpoints[endpointName] : "";
|
|
2650
|
+
});
|
|
2651
|
+
return endpoints;
|
|
2652
|
+
}
|
|
2653
|
+
/**
|
|
2598
2654
|
* Merges explicit endpoint overrides from config into the discovery response.
|
|
2599
2655
|
* Config-defined endpoint names (camelCase) are converted to snake_case before merging.
|
|
2600
2656
|
*
|
|
@@ -2602,15 +2658,10 @@ var AuthenticationHelper = class {
|
|
|
2602
2658
|
* @returns The discovery response with any config-specified endpoint overrides applied.
|
|
2603
2659
|
*/
|
|
2604
2660
|
async resolveEndpoints(response) {
|
|
2605
|
-
const oidcProviderMetaData = {};
|
|
2606
2661
|
const configData = await this.config();
|
|
2607
|
-
if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
|
|
2608
|
-
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2609
|
-
oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
|
|
2610
|
-
});
|
|
2611
2662
|
return {
|
|
2612
2663
|
...response,
|
|
2613
|
-
...
|
|
2664
|
+
...this.mapConfiguredOidcEndpoints(configData)
|
|
2614
2665
|
};
|
|
2615
2666
|
}
|
|
2616
2667
|
/**
|
|
@@ -2621,7 +2672,6 @@ var AuthenticationHelper = class {
|
|
|
2621
2672
|
* @throws {ThunderIDAuthException} When required endpoints are absent from the config.
|
|
2622
2673
|
*/
|
|
2623
2674
|
async resolveEndpointsExplicitly() {
|
|
2624
|
-
const oidcProviderMetaData = {};
|
|
2625
2675
|
const configData = await this.config();
|
|
2626
2676
|
const requiredEndpoints = [
|
|
2627
2677
|
OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.AUTHORIZATION,
|
|
@@ -2636,11 +2686,7 @@ var AuthenticationHelper = class {
|
|
|
2636
2686
|
if (!(configData.endpoints ? requiredEndpoints.every((reqEndpointName) => configData.endpoints ? Object.keys(configData.endpoints).some((endpointName) => {
|
|
2637
2687
|
return endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`) === reqEndpointName;
|
|
2638
2688
|
}) : false) : false)) throw new ThunderIDAuthException("JS-AUTH_HELPER-REE-NF01", "Required endpoints missing", "Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");
|
|
2639
|
-
|
|
2640
|
-
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2641
|
-
oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
|
|
2642
|
-
});
|
|
2643
|
-
return { ...oidcProviderMetaData };
|
|
2689
|
+
return { ...this.mapConfiguredOidcEndpoints(configData) };
|
|
2644
2690
|
}
|
|
2645
2691
|
/**
|
|
2646
2692
|
* Derives OIDC endpoint URLs from the configured `baseUrl`.
|
|
@@ -2651,14 +2697,10 @@ var AuthenticationHelper = class {
|
|
|
2651
2697
|
* @throws {ThunderIDAuthException} When `baseUrl` is not defined in the config.
|
|
2652
2698
|
*/
|
|
2653
2699
|
async resolveEndpointsByBaseURL() {
|
|
2654
|
-
const oidcProviderMetaData = {};
|
|
2655
2700
|
const configData = await this.config();
|
|
2656
2701
|
const { baseUrl } = configData;
|
|
2657
2702
|
if (!baseUrl) throw new ThunderIDAuthException("JS-AUTH_HELPER_REBO-NF01", "Base URL not defined.", "Base URL is not defined in AuthClient config.");
|
|
2658
|
-
|
|
2659
|
-
const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
2660
|
-
oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
|
|
2661
|
-
});
|
|
2703
|
+
const oidcProviderMetaData = this.mapConfiguredOidcEndpoints(configData);
|
|
2662
2704
|
const endpointKeys = OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints;
|
|
2663
2705
|
const endpointPaths = OIDCDiscoveryConstants_default.Endpoints;
|
|
2664
2706
|
return {
|
|
@@ -3086,8 +3128,18 @@ var ThunderIDJavaScriptClient = class {
|
|
|
3086
3128
|
return createdAt + parseInt(expiresInString, 10) * 1e3 > (/* @__PURE__ */ new Date()).getTime();
|
|
3087
3129
|
}
|
|
3088
3130
|
async getAccessToken(sessionId) {
|
|
3131
|
+
if ((await this.configProvider()).grantType === "client_credentials") {
|
|
3132
|
+
const sessionData = await this.storageManager.getSessionData(sessionId);
|
|
3133
|
+
if (sessionData?.access_token && this.isCachedTokenStillValid(sessionData)) return sessionData.access_token;
|
|
3134
|
+
return (await this.requestClientCredentialsToken(sessionId)).accessToken;
|
|
3135
|
+
}
|
|
3089
3136
|
return (await this.storageManager.getSessionData(sessionId))?.access_token;
|
|
3090
3137
|
}
|
|
3138
|
+
isCachedTokenStillValid(sessionData) {
|
|
3139
|
+
if (!sessionData.created_at || !sessionData.expires_in) return false;
|
|
3140
|
+
const expiresInMs = parseInt(sessionData.expires_in, 10) * 1e3;
|
|
3141
|
+
return sessionData.created_at + expiresInMs - TokenConstants_default.Lifecycle.CLIENT_CREDENTIALS_REFRESH_MARGIN_MS > Date.now();
|
|
3142
|
+
}
|
|
3091
3143
|
clearSession(sessionId) {
|
|
3092
3144
|
this.authHelper.clearSession(sessionId);
|
|
3093
3145
|
}
|
|
@@ -3360,6 +3412,56 @@ var ThunderIDJavaScriptClient = class {
|
|
|
3360
3412
|
if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT2-HE04", `Refreshing access token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
|
|
3361
3413
|
return this.authHelper.handleTokenResponse(tokenResponse, userId);
|
|
3362
3414
|
}
|
|
3415
|
+
/**
|
|
3416
|
+
* Requests a machine-to-machine access token via the `client_credentials` grant
|
|
3417
|
+
* (RFC 6749 §4.4) and caches it under the given session key. Unlike the user-facing
|
|
3418
|
+
* flows, there's no id_token or refresh_token: the service authenticates as itself.
|
|
3419
|
+
*/
|
|
3420
|
+
async requestClientCredentialsToken(sessionId) {
|
|
3421
|
+
if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
|
|
3422
|
+
const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
|
|
3423
|
+
const configData = await this.configProvider();
|
|
3424
|
+
if (!tokenEndpoint || tokenEndpoint.trim().length === 0) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NF01", "Token endpoint not found.", "No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");
|
|
3425
|
+
const body = new URLSearchParams();
|
|
3426
|
+
body.set("grant_type", "client_credentials");
|
|
3427
|
+
body.set("client_id", configData.clientId ?? "");
|
|
3428
|
+
const hasSecret = Boolean(configData.clientSecret && configData.clientSecret.trim().length > 0);
|
|
3429
|
+
const tokenEndpointAuthMethod = configData.tokenRequest?.authMethod ?? "client_secret_basic";
|
|
3430
|
+
if (hasSecret && tokenEndpointAuthMethod === "client_secret_post") body.set("client_secret", configData.clientSecret);
|
|
3431
|
+
const scope = Array.isArray(configData.scopes) ? configData.scopes.join(" ") : configData.scopes;
|
|
3432
|
+
if (scope) body.set("scope", scope);
|
|
3433
|
+
if (configData.tokenRequest?.params) Object.entries(configData.tokenRequest.params).forEach(([key, value]) => {
|
|
3434
|
+
body.set(key, value);
|
|
3435
|
+
});
|
|
3436
|
+
const tokenRequestHeaders = {
|
|
3437
|
+
Accept: "application/json",
|
|
3438
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
3439
|
+
};
|
|
3440
|
+
if (hasSecret && tokenEndpointAuthMethod === "client_secret_basic") tokenRequestHeaders["Authorization"] = `Basic ${base64Encode_default(`${encodeURIComponent(configData.clientId)}:${encodeURIComponent(configData.clientSecret)}`)}`;
|
|
3441
|
+
let tokenResponse;
|
|
3442
|
+
try {
|
|
3443
|
+
tokenResponse = await fetch(tokenEndpoint, {
|
|
3444
|
+
body,
|
|
3445
|
+
headers: tokenRequestHeaders,
|
|
3446
|
+
method: "POST"
|
|
3447
|
+
});
|
|
3448
|
+
} catch (error$1) {
|
|
3449
|
+
throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NE02", "Requesting client credentials token failed.", error$1 ?? "The request to get the client credentials access token failed.");
|
|
3450
|
+
}
|
|
3451
|
+
if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-HE03", `Requesting client credentials token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
|
|
3452
|
+
const parsedResponse = await tokenResponse.json();
|
|
3453
|
+
parsedResponse.created_at = (/* @__PURE__ */ new Date()).getTime();
|
|
3454
|
+
await this.storageManager.setSessionData(parsedResponse, sessionId);
|
|
3455
|
+
return {
|
|
3456
|
+
accessToken: parsedResponse.access_token,
|
|
3457
|
+
createdAt: parsedResponse.created_at,
|
|
3458
|
+
expiresIn: parsedResponse.expires_in,
|
|
3459
|
+
idToken: parsedResponse.id_token ?? "",
|
|
3460
|
+
refreshToken: parsedResponse.refresh_token ?? "",
|
|
3461
|
+
scope: parsedResponse.scope,
|
|
3462
|
+
tokenType: parsedResponse.token_type
|
|
3463
|
+
};
|
|
3464
|
+
}
|
|
3363
3465
|
async revokeAccessToken(userId) {
|
|
3364
3466
|
const revokeTokenEndpoint = (await this.oidcProviderMetaDataProvider()).revocation_endpoint;
|
|
3365
3467
|
const configData = await this.configProvider();
|
|
@@ -6100,4 +6202,4 @@ const normalizeTranslations = (translations) => {
|
|
|
6100
6202
|
var normalizeTranslations_default = normalizeTranslations;
|
|
6101
6203
|
|
|
6102
6204
|
//#endregion
|
|
6103
|
-
export { ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, AuthenticationHelper_default as AuthenticationHelper, DEFAULT_THEME, DEFAULT_VALIDATION_MESSAGE_KEYS, EMOJI_URI_SCHEME, EmbeddedFlowActionVariant, EmbeddedFlowComponentType, EmbeddedFlowEventType, EmbeddedFlowResponseType, EmbeddedFlowTextVariant, EmbeddedFlowType, EmbeddedRecoveryFlowStatus, EmbeddedRecoveryFlowType, EmbeddedSignInFlowStatus, EmbeddedSignInFlowType, EmbeddedSignUpFlowStatus, EmbeddedSignUpFlowType, FieldType, FlowMetaType, FlowMode, HttpClient, IsomorphicCrypto, OIDCRequestConstants_default as OIDCRequestConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TranslationBundleConstants_default as TranslationBundleConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, debug, deepMerge_default as deepMerge, error, evaluateValidationRule_default as evaluateValidationRule, executeEmbeddedRecoveryFlow_default as executeEmbeddedRecoveryFlow, executeEmbeddedSignInFlow_default as executeEmbeddedSignInFlow, executeEmbeddedSignUpFlow_default as executeEmbeddedSignUpFlow, executeEmbeddedUserOnboardingFlow_default as executeEmbeddedUserOnboardingFlow, extractEmojiFromUri_default as extractEmojiFromUri, extractPkceStorageKeyFromState_default as extractPkceStorageKeyFromState, extractUserClaimsFromIdToken_default as extractUserClaimsFromIdToken, formatDate_default as formatDate, generateFlattenedUserProfile_default as generateFlattenedUserProfile, get_default as get, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUserInfo_default as getUserInfo, getUsersMe_default as getUsersMe, getVendorPrefix_default as getVendorPrefix, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, normalizeTranslations_default as normalizeTranslations, processOpenIDScopes_default as processOpenIDScopes, processUsername_default as processUsername, removeTrailingSlash_default as removeTrailingSlash, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, set_default as set, startCase_default as startCase, updateMeProfile_default as updateMeProfile, warn, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
|
|
6205
|
+
export { ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, AuthenticationHelper_default as AuthenticationHelper, DEFAULT_THEME, DEFAULT_VALIDATION_MESSAGE_KEYS, EMOJI_URI_SCHEME, EmbeddedFlowActionVariant, EmbeddedFlowComponentType, EmbeddedFlowEventType, EmbeddedFlowResponseType, EmbeddedFlowTextVariant, EmbeddedFlowType, EmbeddedRecoveryFlowStatus, EmbeddedRecoveryFlowType, EmbeddedSignInFlowStatus, EmbeddedSignInFlowType, EmbeddedSignUpFlowStatus, EmbeddedSignUpFlowType, FieldType, FlowMetaType, FlowMode, HttpClient, IsomorphicCrypto, OIDCRequestConstants_default as OIDCRequestConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TranslationBundleConstants_default as TranslationBundleConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, debug, deepMerge_default as deepMerge, error, evaluateValidationRule_default as evaluateValidationRule, executeEmbeddedRecoveryFlow_default as executeEmbeddedRecoveryFlow, executeEmbeddedSignInFlow_default as executeEmbeddedSignInFlow, executeEmbeddedSignUpFlow_default as executeEmbeddedSignUpFlow, executeEmbeddedUserOnboardingFlow_default as executeEmbeddedUserOnboardingFlow, extractEmojiFromUri_default as extractEmojiFromUri, extractPkceStorageKeyFromState_default as extractPkceStorageKeyFromState, extractUserClaimsFromIdToken_default as extractUserClaimsFromIdToken, formatDate_default as formatDate, generateFlattenedUserProfile_default as generateFlattenedUserProfile, get_default as get, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUserInfo_default as getUserInfo, getUsersMe_default as getUsersMe, getVendorPrefix_default as getVendorPrefix, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, normalizeTranslations_default as normalizeTranslations, processOpenIDScopes_default as processOpenIDScopes, processUsername_default as processUsername, removeTrailingSlash_default as removeTrailingSlash, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, resolveResourceEndpoint_default as resolveResourceEndpoint, set_default as set, startCase_default as startCase, updateMeProfile_default as updateMeProfile, warn, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
|
package/dist/models/config.d.ts
CHANGED
|
@@ -197,19 +197,38 @@ export interface BaseConfig<T = unknown> extends WithPreferences, WithExtensions
|
|
|
197
197
|
};
|
|
198
198
|
};
|
|
199
199
|
/**
|
|
200
|
-
* Optional overrides for the
|
|
201
|
-
* By default, the SDK derives all endpoint URLs from the well-known discovery document
|
|
202
|
-
* located at `{baseUrl}/oauth2/token/.well-known/openid-configuration`.
|
|
203
|
-
* Use this when your authorization server exposes endpoints at non-standard paths,
|
|
204
|
-
* or when a custom domain differs from `baseUrl`.
|
|
200
|
+
* Optional overrides for the endpoint URLs the SDK talks to.
|
|
205
201
|
*
|
|
206
|
-
*
|
|
202
|
+
* Two independent groups live here:
|
|
203
|
+
*
|
|
204
|
+
* - **OIDC/OAuth endpoints** (`authorization`, `token`, `userInfo`, `jwks`, `introspection`,
|
|
205
|
+
* `endSession`, `wellKnown`) — by default derived from the well-known discovery document at
|
|
206
|
+
* `{baseUrl}/oauth2/token/.well-known/openid-configuration`. Individual overrides take
|
|
207
|
+
* precedence over values resolved from the discovery document.
|
|
208
|
+
* - **Resource-server endpoints** (`flowExecute`, `flowMeta`, `usersMe`) —
|
|
209
|
+
* by default derived by concatenating `baseUrl` with a fixed path (e.g. `{baseUrl}/flow/execute`).
|
|
210
|
+
* These do not participate in OIDC discovery.
|
|
211
|
+
*
|
|
212
|
+
* Split these two groups when the OAuth authorization server (IdP) and the Thunder resource
|
|
213
|
+
* server are different hosts — for example, when two Thunder instances are connected as trusted
|
|
214
|
+
* issuers. Point `baseUrl` (and hence the OAuth/discovery endpoints) at the authorization server,
|
|
215
|
+
* and override the resource-server endpoints to target the resource server that actually owns the
|
|
216
|
+
* users and flows.
|
|
207
217
|
*
|
|
208
218
|
* @example
|
|
209
219
|
* endpoints: {
|
|
210
220
|
* wellKnown: "https://custom-domain.example.com/.well-known/openid-configuration",
|
|
211
221
|
* authorization: "https://custom-domain.example.com/oauth2/authorize",
|
|
212
222
|
* }
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* // Trusted-issuer setup: OAuth on the authorization server, resource APIs on the resource server.
|
|
226
|
+
* baseUrl: "https://idp.example.com",
|
|
227
|
+
* endpoints: {
|
|
228
|
+
* flowExecute: "https://rs.example.com/flow/execute",
|
|
229
|
+
* flowMeta: "https://rs.example.com/flow/meta",
|
|
230
|
+
* usersMe: "https://rs.example.com/users/me",
|
|
231
|
+
* }
|
|
213
232
|
*/
|
|
214
233
|
endpoints?: {
|
|
215
234
|
/**
|
|
@@ -222,6 +241,17 @@ export interface BaseConfig<T = unknown> extends WithPreferences, WithExtensions
|
|
|
222
241
|
* If not provided, resolved from the well-known discovery document.
|
|
223
242
|
*/
|
|
224
243
|
endSession?: string;
|
|
244
|
+
/**
|
|
245
|
+
* The flow execution endpoint URL used by the embedded sign-in, sign-up, recovery, and user
|
|
246
|
+
* onboarding flows.
|
|
247
|
+
* If not provided, defaults to `{baseUrl}/flow/execute`.
|
|
248
|
+
*/
|
|
249
|
+
flowExecute?: string;
|
|
250
|
+
/**
|
|
251
|
+
* The flow metadata endpoint URL used to resolve flow/branding metadata.
|
|
252
|
+
* If not provided, defaults to `{baseUrl}/flow/meta`.
|
|
253
|
+
*/
|
|
254
|
+
flowMeta?: string;
|
|
225
255
|
/**
|
|
226
256
|
* The introspection endpoint URL.
|
|
227
257
|
* If not provided, resolved from the well-known discovery document.
|
|
@@ -242,6 +272,11 @@ export interface BaseConfig<T = unknown> extends WithPreferences, WithExtensions
|
|
|
242
272
|
* If not provided, resolved from the well-known discovery document.
|
|
243
273
|
*/
|
|
244
274
|
userInfo?: string;
|
|
275
|
+
/**
|
|
276
|
+
* The current-user profile endpoint URL used to fetch and update the signed-in user's profile.
|
|
277
|
+
* If not provided, defaults to `{baseUrl}/users/me`.
|
|
278
|
+
*/
|
|
279
|
+
usersMe?: string;
|
|
245
280
|
/**
|
|
246
281
|
* The OpenID Connect discovery document URL.
|
|
247
282
|
* Defaults to `{baseUrl}/oauth2/token/.well-known/openid-configuration`.
|
|
@@ -263,6 +298,18 @@ export interface BaseConfig<T = unknown> extends WithPreferences, WithExtensions
|
|
|
263
298
|
* @default 'redirect'
|
|
264
299
|
*/
|
|
265
300
|
mode?: 'redirect' | 'embedded';
|
|
301
|
+
/**
|
|
302
|
+
* The OAuth 2.0 grant type this client uses to obtain access tokens.
|
|
303
|
+
*
|
|
304
|
+
* - `'authorization_code'` (default) — standard user sign-in flow. `getAccessToken()`
|
|
305
|
+
* only ever reads from the stored session; it never fetches a token on its own.
|
|
306
|
+
* - `'client_credentials'` — machine-to-machine flow (RFC 6749 §4.4). There's no user
|
|
307
|
+
* and no sign-in step: `getAccessToken()` fetches (and transparently caches/refreshes)
|
|
308
|
+
* a token for the service itself, using `clientId`/`clientSecret`.
|
|
309
|
+
*
|
|
310
|
+
* @default 'authorization_code'
|
|
311
|
+
*/
|
|
312
|
+
grantType?: 'authorization_code' | 'client_credentials';
|
|
266
313
|
/**
|
|
267
314
|
* Configuration for chaining authentication across multiple organization contexts.
|
|
268
315
|
* Used when you need to authenticate a user in one organization using credentials
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEtD;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,eAAe,EAAE,cAAc;IAC9E;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAEjC;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;;;;;;OASG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAErC;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC;;;;;;;;;;;;;;;OAeG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE;QACV;;;WAGG;QACH,SAAS,CAAC,EAAE;YACV;;;eAGG;YACH,OAAO,CAAC,EAAE,OAAO,CAAC;SACnB,CAAC;KACH,CAAC;IAEF
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,17 @@ declare class AuthenticationHelper<T> {
|
|
|
38
38
|
* @param cryptoHelperInstance - The isomorphic crypto helper for JWT operations.
|
|
39
39
|
*/
|
|
40
40
|
constructor(storageManagerInstance: StorageManager<T>, cryptoHelperInstance: IsomorphicCrypto);
|
|
41
|
+
/**
|
|
42
|
+
* Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
|
|
43
|
+
*
|
|
44
|
+
* Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
|
|
45
|
+
* (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
|
|
46
|
+
* `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
|
|
47
|
+
*
|
|
48
|
+
* @param configData - The resolved auth client config.
|
|
49
|
+
* @returns A snake_cased map of the OIDC endpoint overrides (empty when none are configured).
|
|
50
|
+
*/
|
|
51
|
+
private mapConfiguredOidcEndpoints;
|
|
41
52
|
/**
|
|
42
53
|
* Merges explicit endpoint overrides from config into the discovery response.
|
|
43
54
|
* Config-defined endpoint names (camelCase) are converted to snake_case before merging.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthenticationHelper.d.ts","sourceRoot":"","sources":["../../src/utils/AuthenticationHelper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"AuthenticationHelper.d.ts","sourceRoot":"","sources":["../../src/utils/AuthenticationHelper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAC,iCAAiC,EAAE,wBAAwB,EAAC,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAU,aAAa,EAAyB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAC,IAAI,EAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAE/C;;;;;GAKG;AACH,cAAM,oBAAoB,CAAC,CAAC;IAC1B,OAAO,CAAC,cAAc,CAAoB;IAE1C,OAAO,CAAC,MAAM,CAAqC;IAEnD,OAAO,CAAC,oBAAoB,CAA0C;IAEtE,OAAO,CAAC,YAAY,CAAmB;IAEvC;;;;;OAKG;gBACgB,sBAAsB,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,gBAAgB;IAQpG;;;;;;;;;OASG;IACH,OAAO,CAAC,0BAA0B;IAkBlC;;;;;;OAMG;IACU,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAMpG;;;;;;OAMG;IACU,0BAA0B,IAAI,OAAO,CAAC,iCAAiC,CAAC;IAyCrF;;;;;;;OAOG;IACU,yBAAyB,IAAI,OAAO,CAAC,iCAAiC,CAAC;IAmCpF;;;;;;OAMG;IACU,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsD/D;;;;;OAKG;IACI,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAetD;;;;;;;OAOG;IACU,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6C3F;;;;OAIG;IACU,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD;;;;;;;;OAQG;IACU,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CA2C9F;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025-2026, WSO2 LLC. (https://www.wso2.com).
|
|
3
|
+
*
|
|
4
|
+
* WSO2 LLC. licenses this file to you under the Apache License,
|
|
5
|
+
* Version 2.0 (the "License"); you may not use this file except
|
|
6
|
+
* in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing,
|
|
12
|
+
* software distributed under the License is distributed on an
|
|
13
|
+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
* KIND, either express or implied. See the License for the
|
|
15
|
+
* specific language governing permissions and limitations
|
|
16
|
+
* under the License.
|
|
17
|
+
*/
|
|
18
|
+
import { BaseConfig } from '../models/config';
|
|
19
|
+
/**
|
|
20
|
+
* Resource-server endpoints whose URLs can be overridden via `config.endpoints`.
|
|
21
|
+
*
|
|
22
|
+
* Unlike the OIDC/OAuth endpoints, these are not resolved from the well-known discovery document;
|
|
23
|
+
* they are derived by concatenating `baseUrl` with a fixed path. When the authorization server and
|
|
24
|
+
* the Thunder resource server are different hosts (e.g. two Thunder instances connected as trusted
|
|
25
|
+
* issuers), these overrides let the SDK send flow and user-management requests to the resource
|
|
26
|
+
* server while OAuth requests continue to target the authorization server.
|
|
27
|
+
*/
|
|
28
|
+
export type ResourceEndpointKey = 'flowExecute' | 'flowMeta' | 'usersMe';
|
|
29
|
+
/**
|
|
30
|
+
* The `config.endpoints` keys that address resource-server endpoints rather than OIDC/OAuth
|
|
31
|
+
* endpoints. Used to keep these overrides out of the resolved OIDC provider metadata.
|
|
32
|
+
*/
|
|
33
|
+
export declare const RESOURCE_ENDPOINT_KEYS: readonly ResourceEndpointKey[];
|
|
34
|
+
/**
|
|
35
|
+
* Minimal shape of the config needed to resolve a resource-server endpoint override.
|
|
36
|
+
* Reuses the `endpoints` type from {@link BaseConfig} so the override shape stays in sync.
|
|
37
|
+
*/
|
|
38
|
+
export interface ResourceEndpointConfig {
|
|
39
|
+
endpoints?: BaseConfig['endpoints'];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
|
|
43
|
+
* precedence) an explicit per-call URL, then a `config.endpoints` override.
|
|
44
|
+
*
|
|
45
|
+
* Returns `undefined` when neither is set, so the calling API function falls back to deriving the
|
|
46
|
+
* endpoint from `baseUrl` (i.e. `${baseUrl}/flow/execute`) exactly as before. Callers should keep
|
|
47
|
+
* passing `baseUrl` alongside the resolved `url` to preserve that fallback.
|
|
48
|
+
*
|
|
49
|
+
* @param key - The resource endpoint to resolve.
|
|
50
|
+
* @param config - The client config carrying optional `endpoints` overrides.
|
|
51
|
+
* @param explicitUrl - An explicit URL provided by the immediate caller; takes highest precedence.
|
|
52
|
+
* @returns The resolved override URL, or `undefined` to defer to `baseUrl`-based resolution.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const response = await executeEmbeddedUserOnboardingFlow({
|
|
57
|
+
* baseUrl: config.baseUrl,
|
|
58
|
+
* url: resolveResourceEndpoint('flowExecute', config),
|
|
59
|
+
* payload,
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
declare const resolveResourceEndpoint: (key: ResourceEndpointKey, config: ResourceEndpointConfig | undefined, explicitUrl?: string) => string | undefined;
|
|
64
|
+
export default resolveResourceEndpoint;
|
|
65
|
+
//# sourceMappingURL=resolveResourceEndpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveResourceEndpoint.d.ts","sourceRoot":"","sources":["../../src/utils/resolveResourceEndpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,mBAAmB,EAA2C,CAAC;AAE7G;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,QAAA,MAAM,uBAAuB,GAC3B,KAAK,mBAAmB,EACxB,QAAQ,sBAAsB,GAAG,SAAS,EAC1C,cAAc,MAAM,KACnB,MAAM,GAAG,SAAiE,CAAC;AAE9E,eAAe,uBAAuB,CAAC"}
|