Socket
Socket
Sign inDemoInstall

@azure/msal-common

Package Overview
Dependencies
Maintainers
3
Versions
121
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@azure/msal-common - npm Package Compare versions

Comparing version 14.1.0 to 14.2.0

36

dist/authority/Authority.d.ts

@@ -7,3 +7,3 @@ import { AuthorityType } from "./AuthorityType";

import { ICacheManager } from "../cache/interface/ICacheManager";
import { AuthorityOptions } from "./AuthorityOptions";
import { AuthorityOptions, StaticAuthorityOptions } from "./AuthorityOptions";
import { CloudDiscoveryMetadata } from "./CloudDiscoveryMetadata";

@@ -119,2 +119,16 @@ import { RegionDiscoveryMetadata } from "./RegionDiscoveryMetadata";

/**
* Returns metadata entity from cache if it exists, otherwiser returns a new metadata entity built
* from the configured canonical authority
* @returns
*/
private getCurrentMetadataEntity;
/**
* Updates cached metadata based on metadata source and sets the instance's metadata
* property to the same value
* @param metadataEntity
* @param cloudDiscoverySource
* @param endpointMetadataResult
*/
private updateCachedMetadata;
/**
* Update AuthorityMetadataEntity with new endpoints and return where the information came from

@@ -125,2 +139,9 @@ * @param metadataEntity

/**
* Updates endpoint metadata from local sources and returns where the information was retrieved from and the metadata config
* response if the source is hardcoded metadata
* @param metadataEntity
* @returns
*/
private updateEndpointMetadataFromLocalSources;
/**
* Compares the number of url components after the domain to determine if the cached

@@ -158,2 +179,3 @@ * authority metadata can be used for the requested authority. Protects against same domain different

private updateCloudDiscoveryMetadata;
private updateCloudDiscoveryMetadataFromLocalSources;
/**

@@ -170,6 +192,2 @@ * Parse cloudDiscoveryMetadata config or check knownAuthorities

/**
* Get cloud discovery metadata for common authorities
*/
private getCloudDiscoveryMetadataFromHardcodedValues;
/**
* Helper function to determine if this host is included in the knownAuthorities config option

@@ -190,8 +208,2 @@ */

/**
* Searches instance discovery network response for the entry that contains the host in the aliases list
* @param response
* @param authority
*/
static getCloudDiscoveryMetadataFromNetworkResponse(response: CloudDiscoveryMetadata[], authority: string): CloudDiscoveryMetadata | null;
/**
* helper function to generate environment from authority object

@@ -242,2 +254,4 @@ */

}
export declare function formatAuthorityUri(authorityUri: string): string;
export declare function buildStaticAuthorityOptions(authOptions: Partial<AuthorityOptions>): StaticAuthorityOptions;
//# sourceMappingURL=Authority.d.ts.map

@@ -0,1 +1,2 @@

import { CloudDiscoveryMetadata } from "./CloudDiscoveryMetadata";
export declare const rawMetdataJSON: {

@@ -624,2 +625,24 @@ endpointMetadata: {

export declare const InstanceDiscoveryMetadataAliases: Set<String>;
/**
* Returns aliases for the given canonical authority if found in hardcoded Instance Discovery Metadata or null if not found
* @param canonicalAuthority
* @returns
*/
export declare function getHardcodedAliasesForCanonicalAuthority(canonicalAuthority?: string): string[] | null;
/**
* Returns aliases for from the raw cloud discovery metadata given in configuration or null if no configuration was provided
* @param rawCloudDiscoveryMetadata
* @returns
*/
export declare function getAliasesFromConfigMetadata(canonicalAuthority?: string, cloudDiscoveryMetadata?: CloudDiscoveryMetadata[]): string[] | null;
/**
* Searches instance discovery network response for the entry that contains the host in the aliases list
* @param response
* @param authority
*/
export declare function getCloudDiscoveryMetadataFromNetworkResponse(response: CloudDiscoveryMetadata[], authority: string): CloudDiscoveryMetadata | null;
/**
* Get cloud discovery metadata for common authorities
*/
export declare function getCloudDiscoveryMetadataFromHardcodedValues(canonicalAuthority: string): CloudDiscoveryMetadata | null;
//# sourceMappingURL=AuthorityMetadata.d.ts.map
import { ProtocolMode } from "./ProtocolMode";
import { OIDCOptions } from "./OIDCOptions";
import { AzureRegionConfiguration } from "./AzureRegionConfiguration";
import { CloudDiscoveryMetadata } from "./CloudDiscoveryMetadata";
export type AuthorityOptions = {

@@ -12,3 +13,8 @@ protocolMode: ProtocolMode;

azureRegionConfiguration?: AzureRegionConfiguration;
authority?: string;
};
export type StaticAuthorityOptions = Partial<Pick<AuthorityOptions, "knownAuthorities">> & {
canonicalAuthority?: string;
cloudDiscoveryMetadata?: CloudDiscoveryMetadata[];
};
export declare const AzureCloudInstance: {

@@ -15,0 +21,0 @@ readonly None: "none";

@@ -17,2 +17,3 @@ import { AccountFilter, CredentialFilter, ValidCredentialType, AppMetadataFilter, AppMetadataCache, TokenKeys } from "./utils/CacheTypes";

import { StoreInCache } from "../request/StoreInCache";
import { StaticAuthorityOptions } from "../authority/AuthorityOptions";
/**

@@ -26,3 +27,4 @@ * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens.

private commonLogger;
constructor(clientId: string, cryptoImpl: ICrypto, logger: Logger);
private staticAuthorityOptions?;
constructor(clientId: string, cryptoImpl: ICrypto, logger: Logger, staticAuthorityOptions?: StaticAuthorityOptions);
/**

@@ -155,3 +157,10 @@ * fetch the account entity from the platform cache

getAccountInfoFilteredBy(accountFilter: AccountFilter): AccountInfo | null;
/**
* Returns a single matching
* @param accountFilter
* @returns
*/
getBaseAccountInfo(accountFilter: AccountFilter): AccountInfo | null;
private getAccountInfoFromEntity;
private idTokenClaimsMatchAccountFilter;
/**

@@ -401,2 +410,9 @@ * saves a cache record

private matchLoginHint;
/**
* Helper to match sid
* @param idTokenClaims
* @param sid
* @returns true if the sid claim is present and matches the filter
*/
private matchSid;
private matchAuthorityType;

@@ -403,0 +419,0 @@ /**

@@ -38,2 +38,3 @@ import { AccountEntity } from "../entities/AccountEntity";

loginHint?: string;
sid?: string;
};

@@ -40,0 +41,0 @@ /**

@@ -40,3 +40,3 @@ import { ClientConfiguration, CommonClientConfiguration } from "../config/ClientConfiguration";

*/
protected executePostToTokenEndpoint(tokenEndpoint: string, queryString: string, headers: Record<string, string>, thumbprint: RequestThumbprint, correlationId: string): Promise<NetworkResponse<ServerAuthorizationTokenResponse>>;
protected executePostToTokenEndpoint(tokenEndpoint: string, queryString: string, headers: Record<string, string>, thumbprint: RequestThumbprint, correlationId: string, queuedEvent?: string): Promise<NetworkResponse<ServerAuthorizationTokenResponse>>;
/**

@@ -43,0 +43,0 @@ * Updates the authority object of the client. Endpoint discovery must be completed.

@@ -21,2 +21,3 @@ import { BaseClient } from "./BaseClient";

acquireCachedToken(request: CommonSilentFlowRequest): Promise<[AuthenticationResult, CacheOutcome]>;
private setCacheOutcome;
/**

@@ -23,0 +24,0 @@ * Helper function to build response object from the CacheRecord

@@ -51,2 +51,3 @@ import { AuthError } from "./AuthError";

method_not_implemented: string;
nested_app_auth_bridge_disabled: string;
};

@@ -226,2 +227,6 @@ /**

};
nestedAppAuthBridgeDisabled: {
code: string;
desc: string;
};
};

@@ -228,0 +233,0 @@ /**

@@ -44,2 +44,3 @@ export declare const clientInfoDecodingError = "client_info_decoding_error";

export declare const methodNotImplemented = "method_not_implemented";
export declare const nestedAppAuthBridgeDisabled = "nested_app_auth_bridge_disabled";
//# sourceMappingURL=ClientAuthErrorCodes.d.ts.map

@@ -18,4 +18,4 @@ /**

export { ClientInfo, buildClientInfo, buildClientInfoFromHomeAccountId, } from "./account/ClientInfo";
export { Authority } from "./authority/Authority";
export { AuthorityOptions, AzureCloudInstance, } from "./authority/AuthorityOptions";
export { Authority, formatAuthorityUri, buildStaticAuthorityOptions, } from "./authority/Authority";
export { AuthorityOptions, AzureCloudInstance, StaticAuthorityOptions, } from "./authority/AuthorityOptions";
export { AuthorityFactory } from "./authority/AuthorityFactory";

@@ -22,0 +22,0 @@ export { AuthorityType } from "./authority/AuthorityType";

export declare const name = "@azure/msal-common";
export declare const version = "14.1.0";
export declare const version = "14.2.0";
//# sourceMappingURL=packageMetadata.d.ts.map

@@ -85,3 +85,4 @@ /**

*/
readonly BaseClientExecutePostToTokenEndpoint: "baseClientExecutePostToTokenEndpoint";
readonly RefreshTokenClientExecutePostToTokenEndpoint: "refreshTokenClientExecutePostToTokenEndpoint";
readonly AuthorizationCodeClientExecutePostToTokenEndpoint: "authorizationCodeClientExecutePostToTokenEndpoint";
/**

@@ -124,2 +125,4 @@ * Used to measure the time taken for completing embedded-broker handshake (PW-Broker).

readonly AcquireTokenFromCache: "acquireTokenFromCache";
readonly SilentFlowClientAcquireCachedToken: "silentFlowClientAcquireCachedToken";
readonly SilentFlowClientGenerateResultFromCacheRecord: "silentFlowClientGenerateResultFromCacheRecord";
/**

@@ -149,2 +152,3 @@ * acquireTokenBySilentIframe (msal-browser).

readonly SilentHandlerLoadFrame: "silentHandlerLoadFrame";
readonly SilentHandlerLoadFrameSync: "silentHandlerLoadFrameSync";
/**

@@ -188,2 +192,3 @@ * Helper functions in StandardInteractionClient class (msal-browser)

readonly AuthorityResolveEndpointsAsync: "authorityResolveEndpointsAsync";
readonly AuthorityResolveEndpointsFromLocalSources: "authorityResolveEndpointsFromLocalSources";
readonly AuthorityGetCloudDiscoveryMetadataFromNetwork: "authorityGetCloudDiscoveryMetadataFromNetwork";

@@ -208,2 +213,3 @@ readonly AuthorityUpdateCloudDiscoveryMetadata: "authorityUpdateCloudDiscoveryMetadata";

readonly NativeGenerateAuthResult: "nativeGenerateAuthResult";
readonly RemoveHiddenIframe: "removeHiddenIframe";
/**

@@ -213,2 +219,3 @@ * Cache operations

readonly ClearTokensAndKeysWithClaims: "clearTokensAndKeysWithClaims";
readonly CacheManagerGetRefreshToken: "cacheManagerGetRefreshToken";
/**

@@ -365,2 +372,7 @@ * Crypto Operations

/**
* Cache Outcome
* @type {?number}
*/
cacheOutcome?: number;
/**
* Amount of time spent in the JS queue in milliseconds.

@@ -447,4 +459,8 @@ *

extensionHandshakeTimedOut?: boolean;
/**
* Nested App Auth Fields
*/
nestedAppAuthRequest?: boolean;
};
export declare const IntFields: ReadonlySet<string>;
//# sourceMappingURL=PerformanceEvent.d.ts.map

@@ -13,3 +13,3 @@ {

},
"version": "14.1.0",
"version": "14.2.0",
"description": "Microsoft Authentication Library for js",

@@ -16,0 +16,0 @@ "keywords": [

@@ -26,3 +26,4 @@ /*

EndpointMetadata,
InstanceDiscoveryMetadata,
getCloudDiscoveryMetadataFromHardcodedValues,
getCloudDiscoveryMetadataFromNetworkResponse,
InstanceDiscoveryMetadataAliases,

@@ -37,4 +38,8 @@ } from "./AuthorityMetadata";

import { AuthorityMetadataEntity } from "../cache/entities/AuthorityMetadataEntity";
import { AuthorityOptions, AzureCloudInstance } from "./AuthorityOptions";
import {
AuthorityOptions,
AzureCloudInstance,
StaticAuthorityOptions,
} from "./AuthorityOptions";
import {
CloudInstanceDiscoveryResponse,

@@ -398,11 +403,4 @@ isCloudInstanceDiscoveryResponse,

let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(
this.hostnameAndPort
);
const metadataEntity = this.getCurrentMetadataEntity();
if (!metadataEntity) {
metadataEntity = new AuthorityMetadataEntity();
metadataEntity.updateCanonicalAuthority(this.canonicalAuthority);
}
const cloudDiscoverySource = await invokeAsync(

@@ -426,6 +424,42 @@ this.updateCloudDiscoveryMetadata.bind(this),

)(metadataEntity);
this.updateCachedMetadata(metadataEntity, cloudDiscoverySource, {
source: endpointSource,
});
}
/**
* Returns metadata entity from cache if it exists, otherwiser returns a new metadata entity built
* from the configured canonical authority
* @returns
*/
private getCurrentMetadataEntity(): AuthorityMetadataEntity {
let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(
this.hostnameAndPort
);
if (!metadataEntity) {
metadataEntity = new AuthorityMetadataEntity();
metadataEntity.updateCanonicalAuthority(this.canonicalAuthority);
}
return metadataEntity;
}
/**
* Updates cached metadata based on metadata source and sets the instance's metadata
* property to the same value
* @param metadataEntity
* @param cloudDiscoverySource
* @param endpointMetadataResult
*/
private updateCachedMetadata(
metadataEntity: AuthorityMetadataEntity,
cloudDiscoverySource: AuthorityMetadataSource | null,
endpointMetadataResult: {
source: AuthorityMetadataSource;
metadata?: OpenIdConfigResponse;
} | null
): void {
if (
cloudDiscoverySource !== AuthorityMetadataSource.CACHE &&
endpointSource !== AuthorityMetadataSource.CACHE
endpointMetadataResult?.source !== AuthorityMetadataSource.CACHE
) {

@@ -455,12 +489,91 @@ // Reset the expiration time unless both values came from a successful cache lookup

);
const localMetadata =
this.updateEndpointMetadataFromLocalSources(metadataEntity);
// Further update may be required for hardcoded metadata if regional metadata is preferred
if (localMetadata) {
if (
localMetadata.source ===
AuthorityMetadataSource.HARDCODED_VALUES
) {
// If the user prefers to use an azure region replace the global endpoints with regional information.
if (
this.authorityOptions.azureRegionConfiguration?.azureRegion
) {
if (localMetadata.metadata) {
const hardcodedMetadata = await invokeAsync(
this.updateMetadataWithRegionalInformation.bind(
this
),
PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,
this.logger,
this.performanceClient,
this.correlationId
)(localMetadata.metadata);
metadataEntity.updateEndpointMetadata(
hardcodedMetadata,
false
);
}
}
}
return localMetadata.source;
}
// Get metadata from network if local sources aren't available
let metadata = await invokeAsync(
this.getEndpointMetadataFromNetwork.bind(this),
PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork,
this.logger,
this.performanceClient,
this.correlationId
)();
if (metadata) {
// If the user prefers to use an azure region replace the global endpoints with regional information.
if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {
metadata = await invokeAsync(
this.updateMetadataWithRegionalInformation.bind(this),
PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,
this.logger,
this.performanceClient,
this.correlationId
)(metadata);
}
metadataEntity.updateEndpointMetadata(metadata, true);
return AuthorityMetadataSource.NETWORK;
} else {
// Metadata could not be obtained from the config, cache, network or hardcoded values
throw createClientAuthError(
ClientAuthErrorCodes.openIdConfigError,
this.defaultOpenIdConfigurationEndpoint
);
}
}
/**
* Updates endpoint metadata from local sources and returns where the information was retrieved from and the metadata config
* response if the source is hardcoded metadata
* @param metadataEntity
* @returns
*/
private updateEndpointMetadataFromLocalSources(
metadataEntity: AuthorityMetadataEntity
): {
source: AuthorityMetadataSource;
metadata?: OpenIdConfigResponse;
} | null {
this.logger.verbose(
"Attempting to get endpoint metadata from authority configuration"
);
let metadata = this.getEndpointMetadataFromConfig();
if (metadata) {
const configMetadata = this.getEndpointMetadataFromConfig();
if (configMetadata) {
this.logger.verbose(
"Found endpoint metadata in authority configuration"
);
metadataEntity.updateEndpointMetadata(metadata, false);
return AuthorityMetadataSource.CONFIG;
metadataEntity.updateEndpointMetadata(configMetadata, false);
return {
source: AuthorityMetadataSource.CONFIG,
};
}

@@ -478,23 +591,10 @@

} else {
let hardcodedMetadata =
const hardcodedMetadata =
this.getEndpointMetadataFromHardcodedValues();
if (hardcodedMetadata) {
this.logger.verbose(
"Found endpoint metadata from hardcoded values."
);
// If the user prefers to use an azure region replace the global endpoints with regional information.
if (
this.authorityOptions.azureRegionConfiguration?.azureRegion
) {
hardcodedMetadata = await invokeAsync(
this.updateMetadataWithRegionalInformation.bind(this),
PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,
this.logger,
this.performanceClient,
this.correlationId
)(hardcodedMetadata);
}
metadataEntity.updateEndpointMetadata(hardcodedMetadata, false);
return AuthorityMetadataSource.HARDCODED_VALUES;
return {
source: AuthorityMetadataSource.HARDCODED_VALUES,
metadata: hardcodedMetadata,
};
} else {

@@ -516,3 +616,3 @@ this.logger.verbose(

this.logger.verbose("Found endpoint metadata in the cache.");
return AuthorityMetadataSource.CACHE;
return { source: AuthorityMetadataSource.CACHE };
} else if (metadataEntityExpired) {

@@ -522,30 +622,3 @@ this.logger.verbose("The metadata entity is expired.");

metadata = await invokeAsync(
this.getEndpointMetadataFromNetwork.bind(this),
PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork,
this.logger,
this.performanceClient,
this.correlationId
)();
if (metadata) {
// If the user prefers to use an azure region replace the global endpoints with regional information.
if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {
metadata = await invokeAsync(
this.updateMetadataWithRegionalInformation.bind(this),
PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,
this.logger,
this.performanceClient,
this.correlationId
)(metadata);
}
metadataEntity.updateEndpointMetadata(metadata, true);
return AuthorityMetadataSource.NETWORK;
} else {
// Metadata could not be obtained from the config, cache, network or hardcoded values
throw createClientAuthError(
ClientAuthErrorCodes.openIdConfigError,
this.defaultOpenIdConfigurationEndpoint
);
}
return null;
}

@@ -723,2 +796,31 @@

);
const localMetadataSource =
this.updateCloudDiscoveryMetadataFromLocalSources(metadataEntity);
if (localMetadataSource) {
return localMetadataSource;
}
// Fallback to network as metadata source
const metadata = await invokeAsync(
this.getCloudDiscoveryMetadataFromNetwork.bind(this),
PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork,
this.logger,
this.performanceClient,
this.correlationId
)();
if (metadata) {
metadataEntity.updateCloudDiscoveryMetadata(metadata, true);
return AuthorityMetadataSource.NETWORK;
}
// Metadata could not be obtained from the config, cache, network or hardcoded values
throw createClientConfigurationError(
ClientConfigurationErrorCodes.untrustedAuthority
);
}
private updateCloudDiscoveryMetadataFromLocalSources(
metadataEntity: AuthorityMetadataEntity
): AuthorityMetadataSource | null {
this.logger.verbose(

@@ -744,3 +846,3 @@ "Attempting to get cloud discovery metadata from authority configuration"

);
let metadata = this.getCloudDiscoveryMetadataFromConfig();
const metadata = this.getCloudDiscoveryMetadataFromConfig();
if (metadata) {

@@ -765,3 +867,5 @@ this.logger.verbose(

const hardcodedMetadata =
this.getCloudDiscoveryMetadataFromHardcodedValues();
getCloudDiscoveryMetadataFromHardcodedValues(
this.canonicalAuthority
);
if (hardcodedMetadata) {

@@ -796,19 +900,3 @@ this.logger.verbose(

metadata = await invokeAsync(
this.getCloudDiscoveryMetadataFromNetwork.bind(this),
PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork,
this.logger,
this.performanceClient,
this.correlationId
)();
if (metadata) {
metadataEntity.updateCloudDiscoveryMetadata(metadata, true);
return AuthorityMetadataSource.NETWORK;
}
// Metadata could not be obtained from the config, cache, network or hardcoded values
throw createClientConfigurationError(
ClientConfigurationErrorCodes.untrustedAuthority
);
return null;
}

@@ -842,7 +930,6 @@

) as CloudInstanceDiscoveryResponse;
const metadata =
Authority.getCloudDiscoveryMetadataFromNetworkResponse(
parsedResponse.metadata,
this.hostnameAndPort
);
const metadata = getCloudDiscoveryMetadataFromNetworkResponse(
parsedResponse.metadata,
this.hostnameAndPort
);
this.logger.verbose("Parsed the cloud discovery metadata.");

@@ -953,3 +1040,3 @@ if (metadata) {

);
match = Authority.getCloudDiscoveryMetadataFromNetworkResponse(
match = getCloudDiscoveryMetadataFromNetworkResponse(
metadata,

@@ -990,20 +1077,2 @@ this.hostnameAndPort

/**
* Get cloud discovery metadata for common authorities
*/
private getCloudDiscoveryMetadataFromHardcodedValues(): CloudDiscoveryMetadata | null {
if (this.canonicalAuthority in InstanceDiscoveryMetadata) {
const hardcodedMetadataResponse =
InstanceDiscoveryMetadata[this.canonicalAuthority];
const metadata =
Authority.getCloudDiscoveryMetadataFromNetworkResponse(
hardcodedMetadataResponse.metadata,
this.hostnameAndPort
);
return metadata;
}
return null;
}
/**
* Helper function to determine if this host is included in the knownAuthorities config option

@@ -1065,21 +1134,2 @@ */

/**
* Searches instance discovery network response for the entry that contains the host in the aliases list
* @param response
* @param authority
*/
static getCloudDiscoveryMetadataFromNetworkResponse(
response: CloudDiscoveryMetadata[],
authority: string
): CloudDiscoveryMetadata | null {
for (let i = 0; i < response.length; i++) {
const metadata = response[i];
if (metadata.aliases.indexOf(authority) > -1) {
return metadata;
}
}
return null;
}
/**
* helper function to generate environment from authority object

@@ -1203,5 +1253,3 @@ */

static transformCIAMAuthority(authority: string): string {
let ciamAuthority = authority.endsWith(Constants.FORWARD_SLASH)
? authority
: `${authority}${Constants.FORWARD_SLASH}`;
let ciamAuthority = authority;
const authorityUrl = new UrlString(authority);

@@ -1225,1 +1273,33 @@ const authorityUrlComponents = authorityUrl.getUrlComponents();

}
export function formatAuthorityUri(authorityUri: string): string {
return authorityUri.endsWith(Constants.FORWARD_SLASH)
? authorityUri
: `${authorityUri}${Constants.FORWARD_SLASH}`;
}
export function buildStaticAuthorityOptions(
authOptions: Partial<AuthorityOptions>
): StaticAuthorityOptions {
const rawCloudDiscoveryMetadata = authOptions.cloudDiscoveryMetadata;
let cloudDiscoveryMetadata: CloudDiscoveryMetadata[] | undefined =
undefined;
if (rawCloudDiscoveryMetadata) {
try {
cloudDiscoveryMetadata = JSON.parse(
rawCloudDiscoveryMetadata
).metadata;
} catch (e) {
throw createClientConfigurationError(
ClientConfigurationErrorCodes.invalidCloudDiscoveryMetadata
);
}
}
return {
canonicalAuthority: authOptions.authority
? formatAuthorityUri(authOptions.authority)
: undefined,
knownAuthorities: authOptions.knownAuthorities,
cloudDiscoveryMetadata: cloudDiscoveryMetadata,
};
}

@@ -6,3 +6,3 @@ /*

import { Authority } from "./Authority";
import { Authority, formatAuthorityUri } from "./Authority";
import {

@@ -49,6 +49,6 @@ createClientConfigurationError,

);
const authorityUriFinal = Authority.transformCIAMAuthority(
formatAuthorityUri(authorityUri)
);
const authorityUriFinal =
Authority.transformCIAMAuthority(authorityUri);
// Initialize authority and perform discovery endpoint check.

@@ -55,0 +55,0 @@ const acquireTokenAuthority: Authority =

@@ -6,2 +6,5 @@ /*

import { UrlString } from "../url/UrlString";
import { CloudDiscoveryMetadata } from "./CloudDiscoveryMetadata";
export const rawMetdataJSON = {

@@ -955,1 +958,85 @@ endpointMetadata: {

}
/**
* Returns aliases for the given canonical authority if found in hardcoded Instance Discovery Metadata or null if not found
* @param canonicalAuthority
* @returns
*/
export function getHardcodedAliasesForCanonicalAuthority(
canonicalAuthority?: string
): string[] | null {
if (canonicalAuthority) {
const instanceDiscoveryMetadata =
getCloudDiscoveryMetadataFromHardcodedValues(canonicalAuthority);
if (instanceDiscoveryMetadata) {
return instanceDiscoveryMetadata.aliases;
}
}
return null;
}
/**
* Returns aliases for from the raw cloud discovery metadata given in configuration or null if no configuration was provided
* @param rawCloudDiscoveryMetadata
* @returns
*/
export function getAliasesFromConfigMetadata(
canonicalAuthority?: string,
cloudDiscoveryMetadata?: CloudDiscoveryMetadata[]
): string[] | null {
if (canonicalAuthority && cloudDiscoveryMetadata) {
const canonicalAuthorityUrlComponents = new UrlString(
canonicalAuthority
).getUrlComponents();
const metadata = getCloudDiscoveryMetadataFromNetworkResponse(
cloudDiscoveryMetadata,
canonicalAuthorityUrlComponents.HostNameAndPort
);
if (metadata) {
return metadata.aliases;
}
}
return null;
}
/**
* Searches instance discovery network response for the entry that contains the host in the aliases list
* @param response
* @param authority
*/
export function getCloudDiscoveryMetadataFromNetworkResponse(
response: CloudDiscoveryMetadata[],
authority: string
): CloudDiscoveryMetadata | null {
for (let i = 0; i < response.length; i++) {
const metadata = response[i];
if (metadata.aliases.includes(authority)) {
return metadata;
}
}
return null;
}
/**
* Get cloud discovery metadata for common authorities
*/
export function getCloudDiscoveryMetadataFromHardcodedValues(
canonicalAuthority: string
): CloudDiscoveryMetadata | null {
const canonicalAuthorityUrlComponents = new UrlString(
canonicalAuthority
).getUrlComponents();
if (canonicalAuthority in InstanceDiscoveryMetadata) {
const metadata = getCloudDiscoveryMetadataFromNetworkResponse(
InstanceDiscoveryMetadata[canonicalAuthority].metadata,
canonicalAuthorityUrlComponents.HostNameAndPort
);
return metadata;
}
return null;
}

@@ -9,2 +9,3 @@ /*

import { AzureRegionConfiguration } from "./AzureRegionConfiguration";
import { CloudDiscoveryMetadata } from "./CloudDiscoveryMetadata";

@@ -19,4 +20,12 @@ export type AuthorityOptions = {

azureRegionConfiguration?: AzureRegionConfiguration;
authority?: string;
};
export type StaticAuthorityOptions = Partial<
Pick<AuthorityOptions, "knownAuthorities">
> & {
canonicalAuthority?: string;
cloudDiscoveryMetadata?: CloudDiscoveryMetadata[];
};
export const AzureCloudInstance = {

@@ -23,0 +32,0 @@ // AzureCloudInstance is not specified.

@@ -45,2 +45,8 @@ /*

import { StoreInCache } from "../request/StoreInCache";
import {
getAliasesFromConfigMetadata,
getHardcodedAliasesForCanonicalAuthority,
} from "../authority/AuthorityMetadata";
import { StaticAuthorityOptions } from "../authority/AuthorityOptions";
import { TokenClaims } from "../account/TokenClaims";

@@ -56,7 +62,14 @@ /**

private commonLogger: Logger;
private staticAuthorityOptions?: StaticAuthorityOptions;
constructor(clientId: string, cryptoImpl: ICrypto, logger: Logger) {
constructor(
clientId: string,
cryptoImpl: ICrypto,
logger: Logger,
staticAuthorityOptions?: StaticAuthorityOptions
) {
this.clientId = clientId;
this.cryptoImpl = cryptoImpl;
this.commonLogger = logger.clone(name, version);
this.staticAuthorityOptions = staticAuthorityOptions;
}

@@ -231,34 +244,15 @@

getAllAccounts(accountFilter?: AccountFilter): AccountInfo[] {
if (accountFilter) {
return this.getAccountsFilteredBy(accountFilter).map(
(accountEntity) => {
return accountEntity.getAccountInfo();
const validAccounts: AccountInfo[] = [];
this.getAccountsFilteredBy(accountFilter || {}).forEach(
(accountEntity: AccountEntity) => {
const accountInfo = this.getAccountInfoFromEntity(
accountEntity,
accountFilter
);
if (accountInfo) {
validAccounts.push(accountInfo);
}
);
}
const allAccountKeys = this.getAccountKeys();
if (allAccountKeys.length < 1) {
return [];
}
const accountEntities: AccountEntity[] = allAccountKeys.reduce(
(accounts: AccountEntity[], key: string) => {
const entity: AccountEntity | null = this.getAccount(key);
if (!entity) {
return accounts;
}
accounts.push(entity);
return accounts;
},
[]
);
const allAccounts = accountEntities.map<AccountInfo>(
(accountEntity) => {
return this.getAccountInfoFromEntity(accountEntity);
}
);
return allAccounts;
return validAccounts;
}

@@ -270,5 +264,5 @@

getAccountInfoFilteredBy(accountFilter: AccountFilter): AccountInfo | null {
const allAccounts = this.getAccountsFilteredBy(accountFilter);
const allAccounts = this.getAllAccounts(accountFilter);
if (allAccounts.length > 0) {
return this.getAccountInfoFromEntity(allAccounts[0]);
return allAccounts[0];
} else {

@@ -279,17 +273,62 @@ return null;

/**
* Returns a single matching
* @param accountFilter
* @returns
*/
getBaseAccountInfo(accountFilter: AccountFilter): AccountInfo | null {
const accountEntities = this.getAccountsFilteredBy(accountFilter);
if (accountEntities.length > 0) {
return accountEntities[0].getAccountInfo();
} else {
return null;
}
}
private getAccountInfoFromEntity(
accountEntity: AccountEntity
): AccountInfo {
accountEntity: AccountEntity,
accountFilter?: AccountFilter
): AccountInfo | null {
const accountInfo = accountEntity.getAccountInfo();
const idToken = this.getIdToken(accountInfo);
if (idToken) {
accountInfo.idToken = idToken.secret;
accountInfo.idTokenClaims = extractTokenClaims(
const idTokenClaims = extractTokenClaims(
idToken.secret,
this.cryptoImpl.base64Decode
);
if (
this.idTokenClaimsMatchAccountFilter(
idTokenClaims,
accountFilter
)
) {
accountInfo.idToken = idToken.secret;
accountInfo.idTokenClaims = idTokenClaims;
return accountInfo;
}
}
return accountInfo;
return null;
}
private idTokenClaimsMatchAccountFilter(
idTokenClaims: TokenClaims,
accountFilter?: AccountFilter
): boolean {
if (accountFilter) {
if (
!!accountFilter.loginHint &&
!this.matchLoginHint(idTokenClaims, accountFilter.loginHint)
) {
return false;
}
if (
!!accountFilter.sid &&
!this.matchSid(idTokenClaims, accountFilter.sid)
) {
return false;
}
}
return true;
}
/**

@@ -385,3 +424,2 @@ * saves a cache record

const matchingAccounts: AccountEntity[] = [];
allAccountKeys.forEach((cacheKey) => {

@@ -459,9 +497,2 @@ if (

if (
!!accountFilter.loginHint &&
!this.matchLoginHint(entity, accountFilter.loginHint)
) {
return;
}
if (
!!accountFilter.authorityType &&

@@ -967,3 +998,2 @@ !this.matchAuthorityType(entity, accountFilter.authorityType)

}
const idToken = this.getIdTokenCredential(key);

@@ -1402,2 +1432,23 @@ if (idToken && this.credentialMatchesFilter(idToken, filter)) {

): boolean {
// Check static authority options first for cases where authority metadata has not been resolved and cached yet
if (this.staticAuthorityOptions) {
const staticAliases =
getAliasesFromConfigMetadata(
this.staticAuthorityOptions.canonicalAuthority,
this.staticAuthorityOptions.cloudDiscoveryMetadata
) ||
getHardcodedAliasesForCanonicalAuthority(
this.staticAuthorityOptions.canonicalAuthority
) ||
this.staticAuthorityOptions.knownAuthorities;
if (
staticAliases &&
staticAliases.includes(environment) &&
staticAliases.includes(entity.environment)
) {
return true;
}
}
// Query metadata cache if no static authority configuration has aliases that match enviroment
const cloudMetadata = this.getAuthorityMetadataByAlias(environment);

@@ -1410,3 +1461,2 @@ if (

}
return false;

@@ -1490,12 +1540,15 @@ }

*/
private matchLoginHint(entity: AccountEntity, loginHint: string): boolean {
if (entity.idTokenClaims?.login_hint === loginHint) {
private matchLoginHint(
idTokenClaims: TokenClaims,
loginHint: string
): boolean {
if (idTokenClaims?.login_hint === loginHint) {
return true;
}
if (entity.username === loginHint) {
if (idTokenClaims.preferred_username === loginHint) {
return true;
}
if (entity.idTokenClaims?.upn === loginHint) {
if (idTokenClaims?.upn === loginHint) {
return true;

@@ -1507,2 +1560,12 @@ }

/**
* Helper to match sid
* @param idTokenClaims
* @param sid
* @returns true if the sid claim is present and matches the filter
*/
private matchSid(idTokenClaims: TokenClaims, sid: string): boolean {
return !!(idTokenClaims?.sid && idTokenClaims.sid === sid);
}
private matchAuthorityType(

@@ -1509,0 +1572,0 @@ entity: AccountEntity,

@@ -156,4 +156,2 @@ /*

account.idTokenClaims = accountDetails.idTokenClaims;
// How do you account for MSA CID here?

@@ -211,3 +209,2 @@ account.localAccountId =

account.name = accountInfo.name;
account.idTokenClaims = accountInfo.idTokenClaims;

@@ -214,0 +211,0 @@ account.cloudGraphHostName = cloudGraphHostName;

@@ -62,2 +62,3 @@ /*

loginHint?: string;
sid?: string;
};

@@ -64,0 +65,0 @@

@@ -300,7 +300,14 @@ /*

this.executePostToTokenEndpoint.bind(this),
PerformanceEvents.BaseClientExecutePostToTokenEndpoint,
PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint,
this.logger,
this.performanceClient,
request.correlationId
)(endpoint, requestBody, headers, thumbprint, request.correlationId);
)(
endpoint,
requestBody,
headers,
thumbprint,
request.correlationId,
PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint
);
}

@@ -307,0 +314,0 @@

@@ -31,3 +31,2 @@ /*

import { BaseAuthRequest } from "../request/BaseAuthRequest";
import { PerformanceEvents } from "../telemetry/performance/PerformanceEvent";

@@ -148,8 +147,12 @@ /**

thumbprint: RequestThumbprint,
correlationId: string
correlationId: string,
queuedEvent?: string
): Promise<NetworkResponse<ServerAuthorizationTokenResponse>> {
this.performanceClient?.addQueueMeasurement(
PerformanceEvents.BaseClientExecutePostToTokenEndpoint,
correlationId
);
if (queuedEvent) {
this.performanceClient?.addQueueMeasurement(
queuedEvent,
correlationId
);
}
const response =

@@ -156,0 +159,0 @@ await this.networkManager.sendPostRequest<ServerAuthorizationTokenResponse>(

@@ -49,3 +49,3 @@ /*

import { IPerformanceClient } from "../telemetry/performance/IPerformanceClient";
import { invokeAsync } from "../utils/FunctionWrappers";
import { invoke, invokeAsync } from "../utils/FunctionWrappers";
/**

@@ -200,6 +200,9 @@ * OAuth2.0 refresh token client

// fetches family RT or application RT based on FOCI value
const refreshToken = this.cacheManager.getRefreshToken(
request.account,
foci
);
const refreshToken = invoke(
this.cacheManager.getRefreshToken.bind(this.cacheManager),
PerformanceEvents.CacheManagerGetRefreshToken,
this.logger,
this.performanceClient,
request.correlationId
)(request.account, foci);

@@ -279,7 +282,14 @@ if (!refreshToken) {

this.executePostToTokenEndpoint.bind(this),
PerformanceEvents.BaseClientExecutePostToTokenEndpoint,
PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint,
this.logger,
this.performanceClient,
request.correlationId
)(endpoint, requestBody, headers, thumbprint, request.correlationId);
)(
endpoint,
requestBody,
headers,
thumbprint,
request.correlationId,
PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint
);
}

@@ -286,0 +296,0 @@

@@ -17,6 +17,2 @@ /*

} from "../error/ClientAuthError";
import {
createClientConfigurationError,
ClientConfigurationErrorCodes,
} from "../error/ClientConfigurationError";
import { ResponseHandler } from "../response/ResponseHandler";

@@ -29,2 +25,4 @@ import { CacheRecord } from "../cache/entities/CacheRecord";

import { TokenClaims } from "../account/TokenClaims";
import { PerformanceEvents } from "../telemetry/performance/PerformanceEvent";
import { invokeAsync } from "../utils/FunctionWrappers";

@@ -97,35 +95,21 @@ /** @internal */

): Promise<[AuthenticationResult, CacheOutcome]> {
this.performanceClient?.addQueueMeasurement(
PerformanceEvents.SilentFlowClientAcquireCachedToken,
request.correlationId
);
let lastCacheOutcome: CacheOutcome = CacheOutcome.NOT_APPLICABLE;
// Cannot renew token if no request object is given.
if (!request) {
throw createClientConfigurationError(
ClientConfigurationErrorCodes.tokenRequestEmpty
);
}
if (request.forceRefresh) {
if (
request.forceRefresh ||
(!this.config.cacheOptions.claimsBasedCachingEnabled &&
!StringUtils.isEmptyObj(request.claims))
) {
// Must refresh due to present force_refresh flag.
lastCacheOutcome = CacheOutcome.FORCE_REFRESH_OR_CLAIMS;
this.serverTelemetryManager?.setCacheOutcome(
CacheOutcome.FORCE_REFRESH_OR_CLAIMS
this.setCacheOutcome(
CacheOutcome.FORCE_REFRESH_OR_CLAIMS,
request.correlationId
);
this.logger.info(
"SilentFlowClient:acquireCachedToken - Skipping cache because forceRefresh is true."
);
throw createClientAuthError(
ClientAuthErrorCodes.tokenRefreshRequired
);
} else if (
!this.config.cacheOptions.claimsBasedCachingEnabled &&
!StringUtils.isEmptyObj(request.claims)
) {
lastCacheOutcome = CacheOutcome.FORCE_REFRESH_OR_CLAIMS;
// Must refresh due to request parameters.
this.logger.info(
"SilentFlowClient:acquireCachedToken - Skipping cache because claims-based caching is disabled and claims were requested."
);
throw createClientAuthError(
ClientAuthErrorCodes.tokenRefreshRequired
);
}

@@ -151,9 +135,6 @@

// must refresh due to non-existent access_token
lastCacheOutcome = CacheOutcome.NO_CACHED_ACCESS_TOKEN;
this.serverTelemetryManager?.setCacheOutcome(
CacheOutcome.NO_CACHED_ACCESS_TOKEN
this.setCacheOutcome(
CacheOutcome.NO_CACHED_ACCESS_TOKEN,
request.correlationId
);
this.logger.info(
"SilentFlowClient:acquireCachedToken - No access token found in cache for the given properties."
);
throw createClientAuthError(

@@ -170,9 +151,6 @@ ClientAuthErrorCodes.tokenRefreshRequired

// must refresh due to the expires_in value
lastCacheOutcome = CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED;
this.serverTelemetryManager?.setCacheOutcome(
CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED
this.setCacheOutcome(
CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED,
request.correlationId
);
this.logger.info(
`SilentFlowClient:acquireCachedToken - Cached access token is expired or will expire within ${this.config.systemOptions.tokenRenewalOffsetSeconds} seconds.`
);
throw createClientAuthError(

@@ -187,8 +165,2 @@ ClientAuthErrorCodes.tokenRefreshRequired

lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED;
this.serverTelemetryManager?.setCacheOutcome(
CacheOutcome.PROACTIVELY_REFRESHED
);
this.logger.info(
"SilentFlowClient:acquireCachedToken - Cached access token's refreshOn property has been exceeded'."
);

@@ -198,2 +170,4 @@ // don't throw ClientAuthError.createRefreshRequiredError(), return cached token instead

this.setCacheOutcome(lastCacheOutcome, request.correlationId);
if (this.config.serverTelemetryManager) {

@@ -204,3 +178,9 @@ this.config.serverTelemetryManager.incrementCacheHits();

return [
await this.generateResultFromCacheRecord(cacheRecord, request),
await invokeAsync(
this.generateResultFromCacheRecord.bind(this),
PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord,
this.logger,
this.performanceClient,
request.correlationId
)(cacheRecord, request),
lastCacheOutcome,

@@ -210,2 +190,18 @@ ];

private setCacheOutcome(
cacheOutcome: CacheOutcome,
correlationId: string
): void {
this.serverTelemetryManager?.setCacheOutcome(cacheOutcome);
this.performanceClient?.addFields(
{
cacheOutcome: cacheOutcome,
},
correlationId
);
this.logger.info(
`Token refresh is required due to cache outcome: ${cacheOutcome}`
);
}
/**

@@ -219,2 +215,6 @@ * Helper function to build response object from the CacheRecord

): Promise<AuthenticationResult> {
this.performanceClient?.addQueueMeasurement(
PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord,
request.correlationId
);
let idTokenClaims: TokenClaims | undefined;

@@ -221,0 +221,0 @@ if (cacheRecord.idToken) {

@@ -92,2 +92,4 @@ /*

"This method has not been implemented",
[ClientAuthErrorCodes.nestedAppAuthBridgeDisabled]:
"The nested app auth bridge is disabled",
};

@@ -310,2 +312,8 @@

},
nestedAppAuthBridgeDisabled: {
code: ClientAuthErrorCodes.nestedAppAuthBridgeDisabled,
desc: ClientAuthErrorMessages[
ClientAuthErrorCodes.nestedAppAuthBridgeDisabled
],
},
};

@@ -312,0 +320,0 @@

@@ -52,1 +52,2 @@ /*

export const methodNotImplemented = "method_not_implemented";
export const nestedAppAuthBridgeDisabled = "nested_app_auth_bridge_disabled";

@@ -42,6 +42,11 @@ /*

// Authority
export { Authority } from "./authority/Authority";
export {
Authority,
formatAuthorityUri,
buildStaticAuthorityOptions,
} from "./authority/Authority";
export {
AuthorityOptions,
AzureCloudInstance,
StaticAuthorityOptions,
} from "./authority/AuthorityOptions";

@@ -48,0 +53,0 @@ export { AuthorityFactory } from "./authority/AuthorityFactory";

/* eslint-disable header/header */
export const name = "@azure/msal-common";
export const version = "14.1.0";
export const version = "14.2.0";

@@ -47,2 +47,3 @@ /*

import { TokenClaims } from "../account/TokenClaims";
import { AccountInfo } from "../account/AccountInfo";

@@ -603,2 +604,9 @@ /**

const accountInfo: AccountInfo | null = cacheRecord.account
? {
...cacheRecord.account.getAccountInfo(),
idTokenClaims,
}
: null;
return {

@@ -609,5 +617,3 @@ authority: authority.canonicalAuthority,

scopes: responseScopes,
account: cacheRecord.account
? cacheRecord.account.getAccountInfo()
: null,
account: accountInfo,
idToken: cacheRecord?.idToken?.secret || "",

@@ -614,0 +620,0 @@ idTokenClaims: idTokenClaims || {},

@@ -104,4 +104,6 @@ /*

*/
BaseClientExecutePostToTokenEndpoint:
"baseClientExecutePostToTokenEndpoint",
RefreshTokenClientExecutePostToTokenEndpoint:
"refreshTokenClientExecutePostToTokenEndpoint",
AuthorizationCodeClientExecutePostToTokenEndpoint:
"authorizationCodeClientExecutePostToTokenEndpoint",
/**

@@ -154,2 +156,5 @@ * Used to measure the time taken for completing embedded-broker handshake (PW-Broker).

AcquireTokenFromCache: "acquireTokenFromCache",
SilentFlowClientAcquireCachedToken: "silentFlowClientAcquireCachedToken",
SilentFlowClientGenerateResultFromCacheRecord:
"silentFlowClientGenerateResultFromCacheRecord",

@@ -185,2 +190,3 @@ /**

SilentHandlerLoadFrame: "silentHandlerLoadFrame",
SilentHandlerLoadFrameSync: "silentHandlerLoadFrameSync",

@@ -236,2 +242,4 @@ /**

AuthorityResolveEndpointsAsync: "authorityResolveEndpointsAsync",
AuthorityResolveEndpointsFromLocalSources:
"authorityResolveEndpointsFromLocalSources",
AuthorityGetCloudDiscoveryMetadataFromNetwork:

@@ -271,2 +279,4 @@ "authorityGetCloudDiscoveryMetadataFromNetwork",

RemoveHiddenIframe: "removeHiddenIframe",
/**

@@ -276,2 +286,3 @@ * Cache operations

ClearTokensAndKeysWithClaims: "clearTokensAndKeysWithClaims",
CacheManagerGetRefreshToken: "cacheManagerGetRefreshToken",

@@ -453,2 +464,8 @@ /**

/**
* Cache Outcome
* @type {?number}
*/
cacheOutcome?: number;
/**
* Amount of time spent in the JS queue in milliseconds.

@@ -546,2 +563,7 @@ *

extensionHandshakeTimedOut?: boolean;
/**
* Nested App Auth Fields
*/
nestedAppAuthRequest?: boolean;
};

@@ -548,0 +570,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc