@azure/msal-node-extensions 5.2.1 → 5.2.3

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.
Files changed (53) hide show
  1. package/bin/arm64/dpapi.node +0 -0
  2. package/bin/ia32/dpapi.node +0 -0
  3. package/bin/x64/dpapi.node +0 -0
  4. package/dist/Dpapi.mjs +1 -1
  5. package/dist/broker/NativeBrokerPlugin.mjs +1 -1
  6. package/dist/error/PersistenceError.mjs +1 -1
  7. package/dist/index.mjs +1 -1
  8. package/dist/lib/msal-common/dist/constants/AADServerParamKeys.mjs +2 -2
  9. package/dist/lib/msal-common/dist/constants/AADServerParamKeys.mjs.map +1 -1
  10. package/dist/lib/msal-common/dist/error/AuthError.mjs +2 -2
  11. package/dist/lib/msal-common/dist/error/AuthError.mjs.map +1 -1
  12. package/dist/lib/msal-common/dist/error/ClientAuthError.mjs +2 -2
  13. package/dist/lib/msal-common/dist/error/ClientAuthError.mjs.map +1 -1
  14. package/dist/lib/msal-common/dist/error/ClientAuthErrorCodes.mjs +2 -2
  15. package/dist/lib/msal-common/dist/error/ClientAuthErrorCodes.mjs.map +1 -1
  16. package/dist/lib/msal-common/dist/error/ClientConfigurationError.mjs +2 -2
  17. package/dist/lib/msal-common/dist/error/ClientConfigurationError.mjs.map +1 -1
  18. package/dist/lib/msal-common/dist/error/ClientConfigurationErrorCodes.mjs +2 -2
  19. package/dist/lib/msal-common/dist/error/ClientConfigurationErrorCodes.mjs.map +1 -1
  20. package/dist/lib/msal-common/dist/error/InteractionRequiredAuthError.mjs +2 -2
  21. package/dist/lib/msal-common/dist/error/InteractionRequiredAuthError.mjs.map +1 -1
  22. package/dist/lib/msal-common/dist/error/PlatformBrokerError.mjs +2 -2
  23. package/dist/lib/msal-common/dist/error/PlatformBrokerError.mjs.map +1 -1
  24. package/dist/lib/msal-common/dist/error/ServerError.mjs +2 -2
  25. package/dist/lib/msal-common/dist/error/ServerError.mjs.map +1 -1
  26. package/dist/lib/msal-common/dist/logger/Logger.mjs +2 -2
  27. package/dist/lib/msal-common/dist/logger/Logger.mjs.map +1 -1
  28. package/dist/lib/msal-common/dist/telemetry/server/ServerTelemetryManager.mjs +2 -2
  29. package/dist/lib/msal-common/dist/telemetry/server/ServerTelemetryManager.mjs.map +1 -1
  30. package/dist/lib/msal-common/dist/utils/Constants.mjs +2 -2
  31. package/dist/lib/msal-common/dist/utils/Constants.mjs.map +1 -1
  32. package/dist/lib/msal-common/dist/utils/TimeUtils.mjs +2 -2
  33. package/dist/lib/msal-common/dist/utils/TimeUtils.mjs.map +1 -1
  34. package/dist/lock/CrossPlatformLock.mjs +1 -1
  35. package/dist/packageMetadata.mjs +2 -2
  36. package/dist/persistence/BasePersistence.mjs +1 -1
  37. package/dist/persistence/DataProtectionScope.mjs +1 -1
  38. package/dist/persistence/FilePersistence.mjs +33 -6
  39. package/dist/persistence/FilePersistence.mjs.map +1 -1
  40. package/dist/persistence/FilePersistenceWithDataProtection.mjs +1 -1
  41. package/dist/persistence/KeychainPersistence.mjs +1 -1
  42. package/dist/persistence/LibSecretPersistence.mjs +1 -1
  43. package/dist/persistence/PersistenceCachePlugin.mjs +1 -1
  44. package/dist/persistence/PersistenceCreator.mjs +1 -1
  45. package/dist/utils/Constants.mjs +1 -1
  46. package/dist/utils/Environment.mjs +1 -1
  47. package/dist/utils/TypeGuards.mjs +1 -1
  48. package/lib/msal-node-extensions.cjs +46 -19
  49. package/lib/msal-node-extensions.cjs.map +1 -1
  50. package/package.json +2 -2
  51. package/types/packageMetadata.d.ts +1 -1
  52. package/types/persistence/FilePersistence.d.ts +0 -7
  53. package/types/persistence/FilePersistence.d.ts.map +1 -1
@@ -1,6 +1,6 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
- /*! @azure/msal-common v16.6.1 2026-05-11 */
3
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
4
4
  /**
5
5
  * Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date).
6
6
  * @param seconds
@@ -1 +1 @@
1
- {"version":3,"file":"TimeUtils.mjs","sources":["../../../../../../../lib/msal-common/dist/utils/TimeUtils.mjs"],"sourcesContent":["/*! @azure/msal-common v16.6.1 2026-05-11 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Utility functions for managing date and time operations.\r\n */\r\n/**\r\n * return the current time in Unix time (seconds).\r\n */\r\nfunction nowSeconds() {\r\n // Date.getTime() returns in milliseconds.\r\n return Math.round(new Date().getTime() / 1000.0);\r\n}\r\n/**\r\n * Converts JS Date object to seconds\r\n * @param date Date\r\n */\r\nfunction toSecondsFromDate(date) {\r\n // Convert date to seconds\r\n return date.getTime() / 1000;\r\n}\r\n/**\r\n * Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date).\r\n * @param seconds\r\n */\r\nfunction toDateFromSeconds(seconds) {\r\n if (seconds) {\r\n return new Date(Number(seconds) * 1000);\r\n }\r\n return new Date();\r\n}\r\n/**\r\n * check if a token is expired based on given UTC time in seconds.\r\n * @param expiresOn\r\n */\r\nfunction isTokenExpired(expiresOn, offset) {\r\n // check for access token expiry\r\n const expirationSec = Number(expiresOn) || 0;\r\n const offsetCurrentTimeSec = nowSeconds() + offset;\r\n // If current time + offset is greater than token expiration time, then token is expired.\r\n return offsetCurrentTimeSec > expirationSec;\r\n}\r\n/**\r\n * Checks if a cache entry is expired based on the last updated time and cache retention days.\r\n * @param lastUpdatedAt\r\n * @param cacheRetentionDays\r\n * @returns\r\n */\r\nfunction isCacheExpired(lastUpdatedAt, cacheRetentionDays) {\r\n const cacheExpirationTimestamp = Number(lastUpdatedAt) + cacheRetentionDays * 24 * 60 * 60 * 1000;\r\n return Date.now() > cacheExpirationTimestamp;\r\n}\r\n/**\r\n * If the current time is earlier than the time that a token was cached at, we must discard the token\r\n * i.e. The system clock was turned back after acquiring the cached token\r\n * @param cachedAt\r\n * @param offset\r\n */\r\nfunction wasClockTurnedBack(cachedAt) {\r\n const cachedAtSec = Number(cachedAt);\r\n return cachedAtSec > nowSeconds();\r\n}\r\n/**\r\n * Waits for t number of milliseconds\r\n * @param t number\r\n * @param value T\r\n */\r\nfunction delay(t, value) {\r\n return new Promise((resolve) => setTimeout(() => resolve(value), t));\r\n}\n\nexport { delay, isCacheExpired, isTokenExpired, nowSeconds, toDateFromSeconds, toSecondsFromDate, wasClockTurnedBack };\n//# sourceMappingURL=TimeUtils.mjs.map\n"],"names":[],"mappings":";;AAAA;AAwBA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,OAAO,EAAE;AACpC,IAAI,IAAI,OAAO,EAAE;AACjB,QAAQ,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;AACtB;;;;"}
1
+ {"version":3,"file":"TimeUtils.mjs","sources":["../../../../../../../lib/msal-common/dist/utils/TimeUtils.mjs"],"sourcesContent":["/*! @azure/msal-common v16.7.0 2026-06-05 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Utility functions for managing date and time operations.\r\n */\r\n/**\r\n * return the current time in Unix time (seconds).\r\n */\r\nfunction nowSeconds() {\r\n // Date.getTime() returns in milliseconds.\r\n return Math.round(new Date().getTime() / 1000.0);\r\n}\r\n/**\r\n * Converts JS Date object to seconds\r\n * @param date Date\r\n */\r\nfunction toSecondsFromDate(date) {\r\n // Convert date to seconds\r\n return date.getTime() / 1000;\r\n}\r\n/**\r\n * Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date).\r\n * @param seconds\r\n */\r\nfunction toDateFromSeconds(seconds) {\r\n if (seconds) {\r\n return new Date(Number(seconds) * 1000);\r\n }\r\n return new Date();\r\n}\r\n/**\r\n * check if a token is expired based on given UTC time in seconds.\r\n * @param expiresOn\r\n */\r\nfunction isTokenExpired(expiresOn, offset) {\r\n // check for access token expiry\r\n const expirationSec = Number(expiresOn) || 0;\r\n const offsetCurrentTimeSec = nowSeconds() + offset;\r\n // If current time + offset is greater than token expiration time, then token is expired.\r\n return offsetCurrentTimeSec > expirationSec;\r\n}\r\n/**\r\n * Checks if a cache entry is expired based on the last updated time and cache retention days.\r\n * @param lastUpdatedAt\r\n * @param cacheRetentionDays\r\n * @returns\r\n */\r\nfunction isCacheExpired(lastUpdatedAt, cacheRetentionDays) {\r\n const cacheExpirationTimestamp = Number(lastUpdatedAt) + cacheRetentionDays * 24 * 60 * 60 * 1000;\r\n return Date.now() > cacheExpirationTimestamp;\r\n}\r\n/**\r\n * If the current time is earlier than the time that a token was cached at, we must discard the token\r\n * i.e. The system clock was turned back after acquiring the cached token\r\n * @param cachedAt\r\n * @param offset\r\n */\r\nfunction wasClockTurnedBack(cachedAt) {\r\n const cachedAtSec = Number(cachedAt);\r\n return cachedAtSec > nowSeconds();\r\n}\r\n/**\r\n * Waits for t number of milliseconds\r\n * @param t number\r\n * @param value T\r\n */\r\nfunction delay(t, value) {\r\n return new Promise((resolve) => setTimeout(() => resolve(value), t));\r\n}\n\nexport { delay, isCacheExpired, isTokenExpired, nowSeconds, toDateFromSeconds, toSecondsFromDate, wasClockTurnedBack };\n//# sourceMappingURL=TimeUtils.mjs.map\n"],"names":[],"mappings":";;AAAA;AAwBA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,OAAO,EAAE;AACpC,IAAI,IAAI,OAAO,EAAE;AACjB,QAAQ,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;AACtB;;;;"}
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  import { promises } from 'fs';
4
4
  import { pid } from 'process';
@@ -1,8 +1,8 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  /* eslint-disable header/header */
4
4
  const name = "@azure/msal-node-extensions";
5
- const version = "5.2.1";
5
+ const version = "5.2.3";
6
6
 
7
7
  export { name, version };
8
8
  //# sourceMappingURL=packageMetadata.mjs.map
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  import { PersistenceError } from '../error/PersistenceError.mjs';
4
4
  import { Constants } from '../utils/Constants.mjs';
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  /*
4
4
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -1,8 +1,8 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  import { promises } from 'fs';
4
4
  import { dirname } from 'path';
5
- import { ErrorCodes, Constants } from '../utils/Constants.mjs';
5
+ import { Constants, ErrorCodes } from '../utils/Constants.mjs';
6
6
  import { PersistenceError } from '../error/PersistenceError.mjs';
7
7
  import { BasePersistence } from './BasePersistence.mjs';
8
8
  import { isNodeError } from '../utils/TypeGuards.mjs';
@@ -19,6 +19,10 @@ import { Logger, LogLevel } from '../lib/msal-common/dist/logger/Logger.mjs';
19
19
  * If file or directory has not been created, it FilePersistence.create() will create
20
20
  * file and any directories in the path recursively.
21
21
  */
22
+ /** Owner read/write only (0o600) */
23
+ const FILE_MODE = 0o600;
24
+ /** Owner read/write/execute only (0o700) */
25
+ const DIR_MODE = 0o700;
22
26
  class FilePersistence extends BasePersistence {
23
27
  constructor(fileLocation, loggerOptions) {
24
28
  super();
@@ -32,7 +36,17 @@ class FilePersistence extends BasePersistence {
32
36
  }
33
37
  async save(contents) {
34
38
  try {
35
- await promises.writeFile(this.getFilePath(), contents, "utf-8");
39
+ // Tighten permissions before writing to close TOCTOU window on existing files
40
+ await promises.chmod(this.getFilePath(), FILE_MODE).catch((err) => {
41
+ if (!isNodeError(err) || err.code !== Constants.ENOENT_ERROR) {
42
+ throw err;
43
+ }
44
+ });
45
+ await promises.writeFile(this.getFilePath(), contents, {
46
+ encoding: "utf-8",
47
+ mode: FILE_MODE,
48
+ });
49
+ await promises.chmod(this.getFilePath(), FILE_MODE);
36
50
  }
37
51
  catch (err) {
38
52
  if (isNodeError(err)) {
@@ -45,7 +59,16 @@ class FilePersistence extends BasePersistence {
45
59
  }
46
60
  async saveBuffer(contents) {
47
61
  try {
48
- await promises.writeFile(this.getFilePath(), contents);
62
+ // Tighten permissions before writing to close TOCTOU window on existing files
63
+ await promises.chmod(this.getFilePath(), FILE_MODE).catch((err) => {
64
+ if (!isNodeError(err) || err.code !== Constants.ENOENT_ERROR) {
65
+ throw err;
66
+ }
67
+ });
68
+ await promises.writeFile(this.getFilePath(), contents, {
69
+ mode: FILE_MODE,
70
+ });
71
+ await promises.chmod(this.getFilePath(), FILE_MODE);
49
72
  }
50
73
  catch (err) {
51
74
  if (isNodeError(err)) {
@@ -145,13 +168,17 @@ class FilePersistence extends BasePersistence {
145
168
  async createCacheFile() {
146
169
  await this.createFileDirectory();
147
170
  // File is created only if it does not exist
148
- const fileHandle = await promises.open(this.filePath, "a");
171
+ const fileHandle = await promises.open(this.filePath, "a", FILE_MODE);
149
172
  await fileHandle.close();
173
+ await promises.chmod(this.filePath, FILE_MODE);
150
174
  this.logger.info(`File created at ${this.filePath}`, "");
151
175
  }
152
176
  async createFileDirectory() {
153
177
  try {
154
- await promises.mkdir(dirname(this.filePath), { recursive: true });
178
+ await promises.mkdir(dirname(this.filePath), {
179
+ recursive: true,
180
+ mode: DIR_MODE,
181
+ });
155
182
  }
156
183
  catch (err) {
157
184
  if (isNodeError(err)) {
@@ -1 +1 @@
1
- {"version":3,"file":"FilePersistence.mjs","sources":["../../src/persistence/FilePersistence.ts"],"sourcesContent":[null],"names":["fs"],"mappings":"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"}
1
+ {"version":3,"file":"FilePersistence.mjs","sources":["../../src/persistence/FilePersistence.ts"],"sourcesContent":[null],"names":["fs"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  import { FilePersistence } from './FilePersistence.mjs';
4
4
  import { PersistenceError } from '../error/PersistenceError.mjs';
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  import keytar from 'keytar';
4
4
  import { FilePersistence } from './FilePersistence.mjs';
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  import keytar from 'keytar';
4
4
  import { FilePersistence } from './FilePersistence.mjs';
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  import { CrossPlatformLock } from '../lock/CrossPlatformLock.mjs';
4
4
  import { pid } from 'process';
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  import { FilePersistenceWithDataProtection } from './FilePersistenceWithDataProtection.mjs';
4
4
  import { LibSecretPersistence } from './LibSecretPersistence.mjs';
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  /*
4
4
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  import path from 'path';
4
4
  import { Constants, Platform } from './Constants.mjs';
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  /*
4
4
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-node-extensions v5.2.1 2026-05-11 */
1
+ /*! @azure/msal-node-extensions v5.2.3 2026-06-05 */
2
2
  'use strict';
3
3
  'use strict';
4
4
 
@@ -343,7 +343,7 @@ class PersistenceCachePlugin {
343
343
  }
344
344
  }
345
345
 
346
- /*! @azure/msal-common v16.6.1 2026-05-11 */
346
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
347
347
  /**
348
348
  * we considered making this "enum" in the request instead of string, however it looks like the allowed list of
349
349
  * prompt values kept changing over past couple of years. There are some undocumented prompt values for some
@@ -380,11 +380,11 @@ const CacheOutcome = {
380
380
  // When a token is found in the cache or the cache is not supposed to be hit when making the request
381
381
  NOT_APPLICABLE: "0"};
382
382
 
383
- /*! @azure/msal-common v16.6.1 2026-05-11 */
383
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
384
384
  const X_CLIENT_EXTRA_SKU = "x-client-xtra-sku";
385
385
  const RESOURCE = "resource";
386
386
 
387
- /*! @azure/msal-common v16.6.1 2026-05-11 */
387
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
388
388
  /*
389
389
  * Copyright (c) Microsoft Corporation. All rights reserved.
390
390
  * Licensed under the MIT License.
@@ -412,7 +412,7 @@ class AuthError extends Error {
412
412
  }
413
413
  }
414
414
 
415
- /*! @azure/msal-common v16.6.1 2026-05-11 */
415
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
416
416
 
417
417
  /*
418
418
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -432,7 +432,7 @@ function createClientConfigurationError(errorCode) {
432
432
  return new ClientConfigurationError(errorCode);
433
433
  }
434
434
 
435
- /*! @azure/msal-common v16.6.1 2026-05-11 */
435
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
436
436
 
437
437
  /*
438
438
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -455,16 +455,16 @@ function createClientAuthError(errorCode, additionalMessage) {
455
455
  return new ClientAuthError(errorCode, additionalMessage);
456
456
  }
457
457
 
458
- /*! @azure/msal-common v16.6.1 2026-05-11 */
458
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
459
459
  const untrustedAuthority = "untrusted_authority";
460
460
 
461
- /*! @azure/msal-common v16.6.1 2026-05-11 */
461
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
462
462
  const noAccountFound = "no_account_found";
463
463
  const noNetworkConnectivity = "no_network_connectivity";
464
464
  const userCanceled = "user_canceled";
465
465
  const platformBrokerError = "platform_broker_error";
466
466
 
467
- /*! @azure/msal-common v16.6.1 2026-05-11 */
467
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
468
468
  /*
469
469
  * Copyright (c) Microsoft Corporation. All rights reserved.
470
470
  * Licensed under the MIT License.
@@ -725,7 +725,7 @@ class Logger {
725
725
  }
726
726
  }
727
727
 
728
- /*! @azure/msal-common v16.6.1 2026-05-11 */
728
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
729
729
  /**
730
730
  * Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date).
731
731
  * @param seconds
@@ -737,7 +737,7 @@ function toDateFromSeconds(seconds) {
737
737
  return new Date();
738
738
  }
739
739
 
740
- /*! @azure/msal-common v16.6.1 2026-05-11 */
740
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
741
741
  /**
742
742
  * Error thrown when user interaction is required.
743
743
  */
@@ -754,7 +754,7 @@ class InteractionRequiredAuthError extends AuthError {
754
754
  }
755
755
  }
756
756
 
757
- /*! @azure/msal-common v16.6.1 2026-05-11 */
757
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
758
758
 
759
759
  /*
760
760
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -773,7 +773,7 @@ class ServerError extends AuthError {
773
773
  }
774
774
  }
775
775
 
776
- /*! @azure/msal-common v16.6.1 2026-05-11 */
776
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
777
777
 
778
778
  /*
779
779
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -818,7 +818,7 @@ class PlatformBrokerError extends AuthError {
818
818
  }
819
819
  }
820
820
 
821
- /*! @azure/msal-common v16.6.1 2026-05-11 */
821
+ /*! @azure/msal-common v16.7.0 2026-06-05 */
822
822
 
823
823
  /*
824
824
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -1119,6 +1119,10 @@ class BasePersistence {
1119
1119
  * If file or directory has not been created, it FilePersistence.create() will create
1120
1120
  * file and any directories in the path recursively.
1121
1121
  */
1122
+ /** Owner read/write only (0o600) */
1123
+ const FILE_MODE = 0o600;
1124
+ /** Owner read/write/execute only (0o700) */
1125
+ const DIR_MODE = 0o700;
1122
1126
  class FilePersistence extends BasePersistence {
1123
1127
  constructor(fileLocation, loggerOptions) {
1124
1128
  super();
@@ -1132,7 +1136,17 @@ class FilePersistence extends BasePersistence {
1132
1136
  }
1133
1137
  async save(contents) {
1134
1138
  try {
1135
- await fs.promises.writeFile(this.getFilePath(), contents, "utf-8");
1139
+ // Tighten permissions before writing to close TOCTOU window on existing files
1140
+ await fs.promises.chmod(this.getFilePath(), FILE_MODE).catch((err) => {
1141
+ if (!isNodeError(err) || err.code !== Constants.ENOENT_ERROR) {
1142
+ throw err;
1143
+ }
1144
+ });
1145
+ await fs.promises.writeFile(this.getFilePath(), contents, {
1146
+ encoding: "utf-8",
1147
+ mode: FILE_MODE,
1148
+ });
1149
+ await fs.promises.chmod(this.getFilePath(), FILE_MODE);
1136
1150
  }
1137
1151
  catch (err) {
1138
1152
  if (isNodeError(err)) {
@@ -1145,7 +1159,16 @@ class FilePersistence extends BasePersistence {
1145
1159
  }
1146
1160
  async saveBuffer(contents) {
1147
1161
  try {
1148
- await fs.promises.writeFile(this.getFilePath(), contents);
1162
+ // Tighten permissions before writing to close TOCTOU window on existing files
1163
+ await fs.promises.chmod(this.getFilePath(), FILE_MODE).catch((err) => {
1164
+ if (!isNodeError(err) || err.code !== Constants.ENOENT_ERROR) {
1165
+ throw err;
1166
+ }
1167
+ });
1168
+ await fs.promises.writeFile(this.getFilePath(), contents, {
1169
+ mode: FILE_MODE,
1170
+ });
1171
+ await fs.promises.chmod(this.getFilePath(), FILE_MODE);
1149
1172
  }
1150
1173
  catch (err) {
1151
1174
  if (isNodeError(err)) {
@@ -1245,13 +1268,17 @@ class FilePersistence extends BasePersistence {
1245
1268
  async createCacheFile() {
1246
1269
  await this.createFileDirectory();
1247
1270
  // File is created only if it does not exist
1248
- const fileHandle = await fs.promises.open(this.filePath, "a");
1271
+ const fileHandle = await fs.promises.open(this.filePath, "a", FILE_MODE);
1249
1272
  await fileHandle.close();
1273
+ await fs.promises.chmod(this.filePath, FILE_MODE);
1250
1274
  this.logger.info(`File created at ${this.filePath}`, "");
1251
1275
  }
1252
1276
  async createFileDirectory() {
1253
1277
  try {
1254
- await fs.promises.mkdir(path.dirname(this.filePath), { recursive: true });
1278
+ await fs.promises.mkdir(path.dirname(this.filePath), {
1279
+ recursive: true,
1280
+ mode: DIR_MODE,
1281
+ });
1255
1282
  }
1256
1283
  catch (err) {
1257
1284
  if (isNodeError(err)) {
@@ -1702,7 +1729,7 @@ class PersistenceCreator {
1702
1729
 
1703
1730
  /* eslint-disable header/header */
1704
1731
  const name = "@azure/msal-node-extensions";
1705
- const version = "5.2.1";
1732
+ const version = "5.2.3";
1706
1733
 
1707
1734
  /*
1708
1735
  * Copyright (c) Microsoft Corporation. All rights reserved.