From 33dd3717d224f5845e297edcda9af75e00cbb6fa Mon Sep 17 00:00:00 2001 From: Robbie Ginsburg Date: Fri, 28 Feb 2025 20:19:27 -0500 Subject: [PATCH 1/3] Reworked Managed Identity Retry Policy to be per-request, which is based on the Managed Identity source. --- .../src/client/ManagedIdentityApplication.ts | 3 ++- .../src/client/ManagedIdentityClient.ts | 24 +++++++++++++++--- .../ManagedIdentitySources/AppService.ts | 25 +++++++++++++++++-- .../client/ManagedIdentitySources/AzureArc.ts | 23 ++++++++++++++++- .../ManagedIdentitySources/CloudShell.ts | 23 ++++++++++++++++- .../src/client/ManagedIdentitySources/Imds.ts | 25 +++++++++++++++++-- .../ManagedIdentitySources/MachineLearning.ts | 25 +++++++++++++++++-- .../ManagedIdentitySources/ServiceFabric.ts | 23 ++++++++++++++++- lib/msal-node/src/config/Configuration.ts | 22 ++-------------- 9 files changed, 159 insertions(+), 34 deletions(-) diff --git a/lib/msal-node/src/client/ManagedIdentityApplication.ts b/lib/msal-node/src/client/ManagedIdentityApplication.ts index 9b2353a427..6f2388335a 100644 --- a/lib/msal-node/src/client/ManagedIdentityApplication.ts +++ b/lib/msal-node/src/client/ManagedIdentityApplication.ts @@ -111,7 +111,8 @@ export class ManagedIdentityApplication { this.logger, ManagedIdentityApplication.nodeStorage as NodeStorage, this.networkClient, - this.cryptoProvider + this.cryptoProvider, + this.config.disableInternalRetries ); } diff --git a/lib/msal-node/src/client/ManagedIdentityClient.ts b/lib/msal-node/src/client/ManagedIdentityClient.ts index d926ab9bc3..798606736a 100644 --- a/lib/msal-node/src/client/ManagedIdentityClient.ts +++ b/lib/msal-node/src/client/ManagedIdentityClient.ts @@ -35,6 +35,7 @@ export class ManagedIdentityClient { private nodeStorage: NodeStorage; private networkClient: INetworkModule; private cryptoProvider: CryptoProvider; + private disableInternalRetries: boolean; private static identitySource?: BaseManagedIdentitySource; public static sourceName?: ManagedIdentitySourceNames; @@ -43,12 +44,14 @@ export class ManagedIdentityClient { logger: Logger, nodeStorage: NodeStorage, networkClient: INetworkModule, - cryptoProvider: CryptoProvider + cryptoProvider: CryptoProvider, + disableInternalRetries: boolean ) { this.logger = logger; this.nodeStorage = nodeStorage; this.networkClient = networkClient; this.cryptoProvider = cryptoProvider; + this.disableInternalRetries = disableInternalRetries; } public async sendManagedIdentityTokenRequest( @@ -64,6 +67,7 @@ export class ManagedIdentityClient { this.nodeStorage, this.networkClient, this.cryptoProvider, + this.disableInternalRetries, managedIdentityId ); } @@ -126,6 +130,7 @@ export class ManagedIdentityClient { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, managedIdentityId: ManagedIdentityId ): BaseManagedIdentitySource { const source = @@ -134,25 +139,29 @@ export class ManagedIdentityClient { nodeStorage, networkClient, cryptoProvider, + disableInternalRetries, managedIdentityId ) || AppService.tryCreate( logger, nodeStorage, networkClient, - cryptoProvider + cryptoProvider, + disableInternalRetries ) || MachineLearning.tryCreate( logger, nodeStorage, networkClient, - cryptoProvider + cryptoProvider, + disableInternalRetries ) || CloudShell.tryCreate( logger, nodeStorage, networkClient, cryptoProvider, + disableInternalRetries, managedIdentityId ) || AzureArc.tryCreate( @@ -160,9 +169,16 @@ export class ManagedIdentityClient { nodeStorage, networkClient, cryptoProvider, + disableInternalRetries, managedIdentityId ) || - Imds.tryCreate(logger, nodeStorage, networkClient, cryptoProvider); + Imds.tryCreate( + logger, + nodeStorage, + networkClient, + cryptoProvider, + disableInternalRetries + ); if (!source) { throw createManagedIdentityError( ManagedIdentityErrorCodes.unableToCreateSource diff --git a/lib/msal-node/src/client/ManagedIdentitySources/AppService.ts b/lib/msal-node/src/client/ManagedIdentitySources/AppService.ts index a42df5d94c..5ce9b902d3 100644 --- a/lib/msal-node/src/client/ManagedIdentitySources/AppService.ts +++ b/lib/msal-node/src/client/ManagedIdentitySources/AppService.ts @@ -13,11 +13,16 @@ import { ManagedIdentityEnvironmentVariableNames, ManagedIdentitySourceNames, ManagedIdentityIdType, + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON, } from "../../utils/Constants.js"; import { CryptoProvider } from "../../crypto/CryptoProvider.js"; import { ManagedIdentityRequestParameters } from "../../config/ManagedIdentityRequestParameters.js"; import { ManagedIdentityId } from "../../config/ManagedIdentityId.js"; import { NodeStorage } from "../../cache/NodeStorage.js"; +import { LinearRetryPolicy } from "../../retry/LinearRetryPolicy.js"; +import { HttpClientWithRetries } from "../../network/HttpClientWithRetries.js"; // MSI Constants. Docs for MSI are available here https://docs.microsoft.com/azure/app-service/overview-managed-identity const APP_SERVICE_MSI_API_VERSION: string = "2019-08-01"; @@ -34,10 +39,24 @@ export class AppService extends BaseManagedIdentitySource { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, identityEndpoint: string, identityHeader: string ) { - super(logger, nodeStorage, networkClient, cryptoProvider); + let networkClientHelper: INetworkModule = networkClient; + if (!disableInternalRetries) { + const linearRetryPolicy: LinearRetryPolicy = new LinearRetryPolicy( + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON + ); + networkClientHelper = new HttpClientWithRetries( + networkClient, + linearRetryPolicy + ); + } + + super(logger, nodeStorage, networkClientHelper, cryptoProvider); this.identityEndpoint = identityEndpoint; this.identityHeader = identityHeader; @@ -60,7 +79,8 @@ export class AppService extends BaseManagedIdentitySource { logger: Logger, nodeStorage: NodeStorage, networkClient: INetworkModule, - cryptoProvider: CryptoProvider + cryptoProvider: CryptoProvider, + disableInternalRetries: boolean ): AppService | null { const [identityEndpoint, identityHeader] = AppService.getEnvironmentVariables(); @@ -90,6 +110,7 @@ export class AppService extends BaseManagedIdentitySource { nodeStorage, networkClient, cryptoProvider, + disableInternalRetries, identityEndpoint, identityHeader ); diff --git a/lib/msal-node/src/client/ManagedIdentitySources/AzureArc.ts b/lib/msal-node/src/client/ManagedIdentitySources/AzureArc.ts index 96de28458c..70bc98bb33 100644 --- a/lib/msal-node/src/client/ManagedIdentitySources/AzureArc.ts +++ b/lib/msal-node/src/client/ManagedIdentitySources/AzureArc.ts @@ -26,6 +26,9 @@ import { AUTHORIZATION_HEADER_NAME, AZURE_ARC_SECRET_FILE_MAX_SIZE_BYTES, HttpMethod, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON, + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, METADATA_HEADER_NAME, ManagedIdentityEnvironmentVariableNames, ManagedIdentityIdType, @@ -42,6 +45,8 @@ import { import { ManagedIdentityTokenResponse } from "../../response/ManagedIdentityTokenResponse.js"; import { ManagedIdentityId } from "../../config/ManagedIdentityId.js"; import path from "path"; +import { LinearRetryPolicy } from "../../retry/LinearRetryPolicy.js"; +import { HttpClientWithRetries } from "../../network/HttpClientWithRetries.js"; export const ARC_API_VERSION: string = "2019-11-01"; export const DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT: string = @@ -74,9 +79,23 @@ export class AzureArc extends BaseManagedIdentitySource { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, identityEndpoint: string ) { - super(logger, nodeStorage, networkClient, cryptoProvider); + let networkClientHelper: INetworkModule = networkClient; + if (!disableInternalRetries) { + const linearRetryPolicy: LinearRetryPolicy = new LinearRetryPolicy( + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON + ); + networkClientHelper = new HttpClientWithRetries( + networkClient, + linearRetryPolicy + ); + } + + super(logger, nodeStorage, networkClientHelper, cryptoProvider); this.identityEndpoint = identityEndpoint; } @@ -122,6 +141,7 @@ export class AzureArc extends BaseManagedIdentitySource { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, managedIdentityId: ManagedIdentityId ): AzureArc | null { const [identityEndpoint, imdsEndpoint] = @@ -181,6 +201,7 @@ export class AzureArc extends BaseManagedIdentitySource { nodeStorage, networkClient, cryptoProvider, + disableInternalRetries, identityEndpoint ); } diff --git a/lib/msal-node/src/client/ManagedIdentitySources/CloudShell.ts b/lib/msal-node/src/client/ManagedIdentitySources/CloudShell.ts index 065d85ea51..ed4f34c5e5 100644 --- a/lib/msal-node/src/client/ManagedIdentitySources/CloudShell.ts +++ b/lib/msal-node/src/client/ManagedIdentitySources/CloudShell.ts @@ -10,6 +10,9 @@ import { NodeStorage } from "../../cache/NodeStorage.js"; import { CryptoProvider } from "../../crypto/CryptoProvider.js"; import { HttpMethod, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON, + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, METADATA_HEADER_NAME, ManagedIdentityEnvironmentVariableNames, ManagedIdentityIdType, @@ -21,6 +24,8 @@ import { createManagedIdentityError, } from "../../error/ManagedIdentityError.js"; import { ManagedIdentityId } from "../../config/ManagedIdentityId.js"; +import { LinearRetryPolicy } from "../../retry/LinearRetryPolicy.js"; +import { HttpClientWithRetries } from "../../network/HttpClientWithRetries.js"; /** * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/CloudShellManagedIdentitySource.cs @@ -33,9 +38,23 @@ export class CloudShell extends BaseManagedIdentitySource { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, msiEndpoint: string ) { - super(logger, nodeStorage, networkClient, cryptoProvider); + let networkClientHelper: INetworkModule = networkClient; + if (!disableInternalRetries) { + const linearRetryPolicy: LinearRetryPolicy = new LinearRetryPolicy( + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON + ); + networkClientHelper = new HttpClientWithRetries( + networkClient, + linearRetryPolicy + ); + } + + super(logger, nodeStorage, networkClientHelper, cryptoProvider); this.msiEndpoint = msiEndpoint; } @@ -52,6 +71,7 @@ export class CloudShell extends BaseManagedIdentitySource { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, managedIdentityId: ManagedIdentityId ): CloudShell | null { const [msiEndpoint] = CloudShell.getEnvironmentVariables(); @@ -89,6 +109,7 @@ export class CloudShell extends BaseManagedIdentitySource { nodeStorage, networkClient, cryptoProvider, + disableInternalRetries, msiEndpoint ); } diff --git a/lib/msal-node/src/client/ManagedIdentitySources/Imds.ts b/lib/msal-node/src/client/ManagedIdentitySources/Imds.ts index aaaf0b7c58..4bf6e60c07 100644 --- a/lib/msal-node/src/client/ManagedIdentitySources/Imds.ts +++ b/lib/msal-node/src/client/ManagedIdentitySources/Imds.ts @@ -11,6 +11,9 @@ import { CryptoProvider } from "../../crypto/CryptoProvider.js"; import { API_VERSION_QUERY_PARAMETER_NAME, HttpMethod, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON, + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, METADATA_HEADER_NAME, ManagedIdentityEnvironmentVariableNames, ManagedIdentityIdType, @@ -18,6 +21,8 @@ import { RESOURCE_BODY_OR_QUERY_PARAMETER_NAME, } from "../../utils/Constants.js"; import { NodeStorage } from "../../cache/NodeStorage.js"; +import { HttpClientWithRetries } from "../../network/HttpClientWithRetries.js"; +import { LinearRetryPolicy } from "../../retry/LinearRetryPolicy.js"; // IMDS constants. Docs for IMDS are available here https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http const IMDS_TOKEN_PATH: string = "/metadata/identity/oauth2/token"; @@ -34,9 +39,23 @@ export class Imds extends BaseManagedIdentitySource { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, identityEndpoint: string ) { - super(logger, nodeStorage, networkClient, cryptoProvider); + let networkClientHelper: INetworkModule = networkClient; + if (!disableInternalRetries) { + const linearRetryPolicy: LinearRetryPolicy = new LinearRetryPolicy( + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON + ); + networkClientHelper = new HttpClientWithRetries( + networkClient, + linearRetryPolicy + ); + } + + super(logger, nodeStorage, networkClientHelper, cryptoProvider); this.identityEndpoint = identityEndpoint; } @@ -45,7 +64,8 @@ export class Imds extends BaseManagedIdentitySource { logger: Logger, nodeStorage: NodeStorage, networkClient: INetworkModule, - cryptoProvider: CryptoProvider + cryptoProvider: CryptoProvider, + disableInternalRetries: boolean ): Imds { let validatedIdentityEndpoint: string; @@ -88,6 +108,7 @@ export class Imds extends BaseManagedIdentitySource { nodeStorage, networkClient, cryptoProvider, + disableInternalRetries, validatedIdentityEndpoint ); } diff --git a/lib/msal-node/src/client/ManagedIdentitySources/MachineLearning.ts b/lib/msal-node/src/client/ManagedIdentitySources/MachineLearning.ts index dddbe6b460..1ec5ca3f61 100644 --- a/lib/msal-node/src/client/ManagedIdentitySources/MachineLearning.ts +++ b/lib/msal-node/src/client/ManagedIdentitySources/MachineLearning.ts @@ -14,11 +14,16 @@ import { ManagedIdentityIdType, METADATA_HEADER_NAME, ML_AND_SF_SECRET_HEADER_NAME, + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON, } from "../../utils/Constants.js"; import { CryptoProvider } from "../../crypto/CryptoProvider.js"; import { ManagedIdentityRequestParameters } from "../../config/ManagedIdentityRequestParameters.js"; import { ManagedIdentityId } from "../../config/ManagedIdentityId.js"; import { NodeStorage } from "../../cache/NodeStorage.js"; +import { LinearRetryPolicy } from "../../retry/LinearRetryPolicy.js"; +import { HttpClientWithRetries } from "../../network/HttpClientWithRetries.js"; const MACHINE_LEARNING_MSI_API_VERSION: string = "2017-09-01"; @@ -31,10 +36,24 @@ export class MachineLearning extends BaseManagedIdentitySource { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, msiEndpoint: string, secret: string ) { - super(logger, nodeStorage, networkClient, cryptoProvider); + let networkClientHelper: INetworkModule = networkClient; + if (!disableInternalRetries) { + const linearRetryPolicy: LinearRetryPolicy = new LinearRetryPolicy( + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON + ); + networkClientHelper = new HttpClientWithRetries( + networkClient, + linearRetryPolicy + ); + } + + super(logger, nodeStorage, networkClientHelper, cryptoProvider); this.msiEndpoint = msiEndpoint; this.secret = secret; @@ -54,7 +73,8 @@ export class MachineLearning extends BaseManagedIdentitySource { logger: Logger, nodeStorage: NodeStorage, networkClient: INetworkModule, - cryptoProvider: CryptoProvider + cryptoProvider: CryptoProvider, + disableInternalRetries: boolean ): MachineLearning | null { const [msiEndpoint, secret] = MachineLearning.getEnvironmentVariables(); @@ -83,6 +103,7 @@ export class MachineLearning extends BaseManagedIdentitySource { nodeStorage, networkClient, cryptoProvider, + disableInternalRetries, msiEndpoint, secret ); diff --git a/lib/msal-node/src/client/ManagedIdentitySources/ServiceFabric.ts b/lib/msal-node/src/client/ManagedIdentitySources/ServiceFabric.ts index 8d93bacf26..ee6ea19b6f 100644 --- a/lib/msal-node/src/client/ManagedIdentitySources/ServiceFabric.ts +++ b/lib/msal-node/src/client/ManagedIdentitySources/ServiceFabric.ts @@ -17,7 +17,12 @@ import { ManagedIdentitySourceNames, RESOURCE_BODY_OR_QUERY_PARAMETER_NAME, ML_AND_SF_SECRET_HEADER_NAME, + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON, } from "../../utils/Constants.js"; +import { LinearRetryPolicy } from "../../retry/LinearRetryPolicy.js"; +import { HttpClientWithRetries } from "../../network/HttpClientWithRetries.js"; // MSI Constants. Docs for MSI are available here https://docs.microsoft.com/azure/app-service/overview-managed-identity const SERVICE_FABRIC_MSI_API_VERSION: string = "2019-07-01-preview"; @@ -34,10 +39,24 @@ export class ServiceFabric extends BaseManagedIdentitySource { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, identityEndpoint: string, identityHeader: string ) { - super(logger, nodeStorage, networkClient, cryptoProvider); + let networkClientHelper: INetworkModule = networkClient; + if (!disableInternalRetries) { + const linearRetryPolicy: LinearRetryPolicy = new LinearRetryPolicy( + MANAGED_IDENTITY_MAX_RETRIES, + MANAGED_IDENTITY_RETRY_DELAY, + MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON + ); + networkClientHelper = new HttpClientWithRetries( + networkClient, + linearRetryPolicy + ); + } + + super(logger, nodeStorage, networkClientHelper, cryptoProvider); this.identityEndpoint = identityEndpoint; this.identityHeader = identityHeader; @@ -66,6 +85,7 @@ export class ServiceFabric extends BaseManagedIdentitySource { nodeStorage: NodeStorage, networkClient: INetworkModule, cryptoProvider: CryptoProvider, + disableInternalRetries: boolean, managedIdentityId: ManagedIdentityId ): ServiceFabric | null { const [identityEndpoint, identityHeader, identityServerThumbprint] = @@ -107,6 +127,7 @@ export class ServiceFabric extends BaseManagedIdentitySource { nodeStorage, networkClient, cryptoProvider, + disableInternalRetries, identityEndpoint, identityHeader ); diff --git a/lib/msal-node/src/config/Configuration.ts b/lib/msal-node/src/config/Configuration.ts index fbde1def2b..b7b7fa12ce 100644 --- a/lib/msal-node/src/config/Configuration.ts +++ b/lib/msal-node/src/config/Configuration.ts @@ -20,13 +20,6 @@ import { HttpClient } from "../network/HttpClient.js"; import http from "http"; import https from "https"; import { ManagedIdentityId } from "./ManagedIdentityId.js"; -import { - MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON, - MANAGED_IDENTITY_MAX_RETRIES, - MANAGED_IDENTITY_RETRY_DELAY, -} from "../utils/Constants.js"; -import { LinearRetryPolicy } from "../retry/LinearRetryPolicy.js"; -import { HttpClientWithRetries } from "../network/HttpClientWithRetries.js"; import { NodeAuthError } from "../error/NodeAuthError.js"; /** @@ -251,6 +244,7 @@ export type ManagedIdentityNodeConfiguration = { system: Required< Pick >; + disableInternalRetries: boolean; }; export function buildManagedIdentityConfiguration({ @@ -276,24 +270,12 @@ export function buildManagedIdentityConfiguration({ ); } - // wrap the network client with a retry policy if the developer has not disabled the option to do so - if (!system?.disableInternalRetries) { - const linearRetryPolicy: LinearRetryPolicy = new LinearRetryPolicy( - MANAGED_IDENTITY_MAX_RETRIES, - MANAGED_IDENTITY_RETRY_DELAY, - MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON - ); - networkClient = new HttpClientWithRetries( - networkClient, - linearRetryPolicy - ); - } - return { managedIdentityId: managedIdentityId, system: { loggerOptions, networkClient, }, + disableInternalRetries: system?.disableInternalRetries || false, }; } From 428e2ae2fca85ab238d3db44cd8732cf1b78f7ec Mon Sep 17 00:00:00 2001 From: Robbie Ginsburg Date: Fri, 28 Feb 2025 20:20:02 -0500 Subject: [PATCH 2/3] Change files --- ...ure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/@azure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json diff --git a/change/@azure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json b/change/@azure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json new file mode 100644 index 0000000000..b35fd2b1da --- /dev/null +++ b/change/@azure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Reworked Managed Identity Retry Policy to be per-request, which is based on the Managed Identity source.", + "packageName": "@azure/msal-node", + "email": "rginsburg@microsoft.com", + "dependentChangeType": "patch" +} From 02fa01c84fec66b24348ad2835681a90f31d9bd1 Mon Sep 17 00:00:00 2001 From: Robbie Ginsburg Date: Fri, 28 Feb 2025 20:25:08 -0500 Subject: [PATCH 3/3] beachball --- .../@azure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/change/@azure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json b/change/@azure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json index b35fd2b1da..b75c2cb451 100644 --- a/change/@azure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json +++ b/change/@azure-msal-node-4a430a9c-a11a-4acd-bb18-f8eaa2dcdba6.json @@ -1,6 +1,6 @@ { "type": "minor", - "comment": "Reworked Managed Identity Retry Policy to be per-request, which is based on the Managed Identity source.", + "comment": "Reworked Managed Identity Retry Policy to be per-request, which is based on the Managed Identity source. #7603", "packageName": "@azure/msal-node", "email": "rginsburg@microsoft.com", "dependentChangeType": "patch"