mirror of
https://github.com/tvytlx/ai-agent-deep-dive.git
synced 2026-04-05 08:34:47 +08:00
Add extracted source directory and README navigation
This commit is contained in:
85
extracted-source/node_modules/@azure/msal-common/dist/account/AccountInfo.mjs
generated
vendored
Normal file
85
extracted-source/node_modules/@azure/msal-common/dist/account/AccountInfo.mjs
generated
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
/*! @azure/msal-common v15.13.1 2025-10-29 */
|
||||
'use strict';
|
||||
/*
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
/**
|
||||
* Returns true if tenantId matches the utid portion of homeAccountId
|
||||
* @param tenantId
|
||||
* @param homeAccountId
|
||||
* @returns
|
||||
*/
|
||||
function tenantIdMatchesHomeTenant(tenantId, homeAccountId) {
|
||||
return (!!tenantId &&
|
||||
!!homeAccountId &&
|
||||
tenantId === homeAccountId.split(".")[1]);
|
||||
}
|
||||
/**
|
||||
* Build tenant profile
|
||||
* @param homeAccountId - Home account identifier for this account object
|
||||
* @param localAccountId - Local account identifer for this account object
|
||||
* @param tenantId - Full tenant or organizational id that this account belongs to
|
||||
* @param idTokenClaims - Claims from the ID token
|
||||
* @returns
|
||||
*/
|
||||
function buildTenantProfile(homeAccountId, localAccountId, tenantId, idTokenClaims) {
|
||||
if (idTokenClaims) {
|
||||
const { oid, sub, tid, name, tfp, acr, preferred_username, upn, login_hint, } = idTokenClaims;
|
||||
/**
|
||||
* Since there is no way to determine if the authority is AAD or B2C, we exhaust all the possible claims that can serve as tenant ID with the following precedence:
|
||||
* tid - TenantID claim that identifies the tenant that issued the token in AAD. Expected in all AAD ID tokens, not present in B2C ID Tokens.
|
||||
* tfp - Trust Framework Policy claim that identifies the policy that was used to authenticate the user. Functions as tenant for B2C scenarios.
|
||||
* acr - Authentication Context Class Reference claim used only with older B2C policies. Fallback in case tfp is not present, but likely won't be present anyway.
|
||||
*/
|
||||
const tenantId = tid || tfp || acr || "";
|
||||
return {
|
||||
tenantId: tenantId,
|
||||
localAccountId: oid || sub || "",
|
||||
name: name,
|
||||
username: preferred_username || upn || "",
|
||||
loginHint: login_hint,
|
||||
isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId),
|
||||
};
|
||||
}
|
||||
else {
|
||||
return {
|
||||
tenantId,
|
||||
localAccountId,
|
||||
username: "",
|
||||
isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId),
|
||||
};
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Replaces account info that varies by tenant profile sourced from the ID token claims passed in with the tenant-specific account info
|
||||
* @param baseAccountInfo
|
||||
* @param idTokenClaims
|
||||
* @returns
|
||||
*/
|
||||
function updateAccountTenantProfileData(baseAccountInfo, tenantProfile, idTokenClaims, idTokenSecret) {
|
||||
let updatedAccountInfo = baseAccountInfo;
|
||||
// Tenant Profile overrides passed in account info
|
||||
if (tenantProfile) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const { isHomeTenant, ...tenantProfileOverride } = tenantProfile;
|
||||
updatedAccountInfo = { ...baseAccountInfo, ...tenantProfileOverride };
|
||||
}
|
||||
// ID token claims override passed in account info and tenant profile
|
||||
if (idTokenClaims) {
|
||||
// Ignore isHomeTenant, loginHint, and sid which are part of tenant profile but not base account info
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const { isHomeTenant, ...claimsSourcedTenantProfile } = buildTenantProfile(baseAccountInfo.homeAccountId, baseAccountInfo.localAccountId, baseAccountInfo.tenantId, idTokenClaims);
|
||||
updatedAccountInfo = {
|
||||
...updatedAccountInfo,
|
||||
...claimsSourcedTenantProfile,
|
||||
idTokenClaims: idTokenClaims,
|
||||
idToken: idTokenSecret,
|
||||
};
|
||||
return updatedAccountInfo;
|
||||
}
|
||||
return updatedAccountInfo;
|
||||
}
|
||||
|
||||
export { buildTenantProfile, tenantIdMatchesHomeTenant, updateAccountTenantProfileData };
|
||||
//# sourceMappingURL=AccountInfo.mjs.map
|
||||
86
extracted-source/node_modules/@azure/msal-common/dist/account/AuthToken.mjs
generated
vendored
Normal file
86
extracted-source/node_modules/@azure/msal-common/dist/account/AuthToken.mjs
generated
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
/*! @azure/msal-common v15.13.1 2025-10-29 */
|
||||
'use strict';
|
||||
import { createClientAuthError } from '../error/ClientAuthError.mjs';
|
||||
import { tokenParsingError, nullOrEmptyToken, maxAgeTranspired } from '../error/ClientAuthErrorCodes.mjs';
|
||||
|
||||
/*
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
/**
|
||||
* Extract token by decoding the rawToken
|
||||
*
|
||||
* @param encodedToken
|
||||
*/
|
||||
function extractTokenClaims(encodedToken, base64Decode) {
|
||||
const jswPayload = getJWSPayload(encodedToken);
|
||||
// token will be decoded to get the username
|
||||
try {
|
||||
// base64Decode() should throw an error if there is an issue
|
||||
const base64Decoded = base64Decode(jswPayload);
|
||||
return JSON.parse(base64Decoded);
|
||||
}
|
||||
catch (err) {
|
||||
throw createClientAuthError(tokenParsingError);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Check if the signin_state claim contains "kmsi"
|
||||
* @param idTokenClaims
|
||||
* @returns
|
||||
*/
|
||||
function isKmsi(idTokenClaims) {
|
||||
if (!idTokenClaims.signin_state) {
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Signin_state claim known values:
|
||||
* dvc_mngd - device is managed
|
||||
* dvc_dmjd - device is domain joined
|
||||
* kmsi - user opted to "keep me signed in"
|
||||
* inknownntwk - Request made inside a known network. Don't use this, use CAE instead.
|
||||
*/
|
||||
const kmsiClaims = ["kmsi", "dvc_dmjd"]; // There are some cases where kmsi may not be returned but persistent storage is still OK - allow dvc_dmjd as well
|
||||
const kmsi = idTokenClaims.signin_state.some((value) => kmsiClaims.includes(value.trim().toLowerCase()));
|
||||
return kmsi;
|
||||
}
|
||||
/**
|
||||
* decode a JWT
|
||||
*
|
||||
* @param authToken
|
||||
*/
|
||||
function getJWSPayload(authToken) {
|
||||
if (!authToken) {
|
||||
throw createClientAuthError(nullOrEmptyToken);
|
||||
}
|
||||
const tokenPartsRegex = /^([^\.\s]*)\.([^\.\s]+)\.([^\.\s]*)$/;
|
||||
const matches = tokenPartsRegex.exec(authToken);
|
||||
if (!matches || matches.length < 4) {
|
||||
throw createClientAuthError(tokenParsingError);
|
||||
}
|
||||
/**
|
||||
* const crackedToken = {
|
||||
* header: matches[1],
|
||||
* JWSPayload: matches[2],
|
||||
* JWSSig: matches[3],
|
||||
* };
|
||||
*/
|
||||
return matches[2];
|
||||
}
|
||||
/**
|
||||
* Determine if the token's max_age has transpired
|
||||
*/
|
||||
function checkMaxAge(authTime, maxAge) {
|
||||
/*
|
||||
* per https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
|
||||
* To force an immediate re-authentication: If an app requires that a user re-authenticate prior to access,
|
||||
* provide a value of 0 for the max_age parameter and the AS will force a fresh login.
|
||||
*/
|
||||
const fiveMinuteSkew = 300000; // five minutes in milliseconds
|
||||
if (maxAge === 0 || Date.now() - fiveMinuteSkew > authTime + maxAge) {
|
||||
throw createClientAuthError(maxAgeTranspired);
|
||||
}
|
||||
}
|
||||
|
||||
export { checkMaxAge, extractTokenClaims, getJWSPayload, isKmsi };
|
||||
//# sourceMappingURL=AuthToken.mjs.map
|
||||
13
extracted-source/node_modules/@azure/msal-common/dist/account/CcsCredential.mjs
generated
vendored
Normal file
13
extracted-source/node_modules/@azure/msal-common/dist/account/CcsCredential.mjs
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
/*! @azure/msal-common v15.13.1 2025-10-29 */
|
||||
'use strict';
|
||||
/*
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
const CcsCredentialType = {
|
||||
HOME_ACCOUNT_ID: "home_account_id",
|
||||
UPN: "UPN",
|
||||
};
|
||||
|
||||
export { CcsCredentialType };
|
||||
//# sourceMappingURL=CcsCredential.mjs.map
|
||||
46
extracted-source/node_modules/@azure/msal-common/dist/account/ClientInfo.mjs
generated
vendored
Normal file
46
extracted-source/node_modules/@azure/msal-common/dist/account/ClientInfo.mjs
generated
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
/*! @azure/msal-common v15.13.1 2025-10-29 */
|
||||
'use strict';
|
||||
import { createClientAuthError } from '../error/ClientAuthError.mjs';
|
||||
import { Separators, Constants } from '../utils/Constants.mjs';
|
||||
import { clientInfoEmptyError, clientInfoDecodingError } from '../error/ClientAuthErrorCodes.mjs';
|
||||
|
||||
/*
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
/**
|
||||
* Function to build a client info object from server clientInfo string
|
||||
* @param rawClientInfo
|
||||
* @param crypto
|
||||
*/
|
||||
function buildClientInfo(rawClientInfo, base64Decode) {
|
||||
if (!rawClientInfo) {
|
||||
throw createClientAuthError(clientInfoEmptyError);
|
||||
}
|
||||
try {
|
||||
const decodedClientInfo = base64Decode(rawClientInfo);
|
||||
return JSON.parse(decodedClientInfo);
|
||||
}
|
||||
catch (e) {
|
||||
throw createClientAuthError(clientInfoDecodingError);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Function to build a client info object from cached homeAccountId string
|
||||
* @param homeAccountId
|
||||
*/
|
||||
function buildClientInfoFromHomeAccountId(homeAccountId) {
|
||||
if (!homeAccountId) {
|
||||
throw createClientAuthError(clientInfoDecodingError);
|
||||
}
|
||||
const clientInfoParts = homeAccountId.split(Separators.CLIENT_INFO_SEPARATOR, 2);
|
||||
return {
|
||||
uid: clientInfoParts[0],
|
||||
utid: clientInfoParts.length < 2
|
||||
? Constants.EMPTY_STRING
|
||||
: clientInfoParts[1],
|
||||
};
|
||||
}
|
||||
|
||||
export { buildClientInfo, buildClientInfoFromHomeAccountId };
|
||||
//# sourceMappingURL=ClientInfo.mjs.map
|
||||
25
extracted-source/node_modules/@azure/msal-common/dist/account/TokenClaims.mjs
generated
vendored
Normal file
25
extracted-source/node_modules/@azure/msal-common/dist/account/TokenClaims.mjs
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
/*! @azure/msal-common v15.13.1 2025-10-29 */
|
||||
'use strict';
|
||||
/*
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
/**
|
||||
* Gets tenantId from available ID token claims to set as credential realm with the following precedence:
|
||||
* 1. tid - if the token is acquired from an Azure AD tenant tid will be present
|
||||
* 2. tfp - if the token is acquired from a modern B2C tenant tfp should be present
|
||||
* 3. acr - if the token is acquired from a legacy B2C tenant acr should be present
|
||||
* Downcased to match the realm case-insensitive comparison requirements
|
||||
* @param idTokenClaims
|
||||
* @returns
|
||||
*/
|
||||
function getTenantIdFromIdTokenClaims(idTokenClaims) {
|
||||
if (idTokenClaims) {
|
||||
const tenantId = idTokenClaims.tid || idTokenClaims.tfp || idTokenClaims.acr;
|
||||
return tenantId || null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export { getTenantIdFromIdTokenClaims };
|
||||
//# sourceMappingURL=TokenClaims.mjs.map
|
||||
Reference in New Issue
Block a user