@azure/msal-node-extensions 5.0.0-alpha.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/arm64/dpapi.node +0 -0
- package/bin/ia32/dpapi.node +0 -0
- package/bin/x64/dpapi.node +0 -0
- package/dist/Dpapi.mjs +1 -1
- package/dist/Dpapi.mjs.map +1 -1
- package/dist/broker/NativeBrokerPlugin.mjs +31 -15
- package/dist/broker/NativeBrokerPlugin.mjs.map +1 -1
- package/dist/error/PersistenceError.mjs +1 -1
- package/dist/error/PersistenceError.mjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/lib/msal-common/dist/constants/AADServerParamKeys.mjs +2 -2
- package/dist/lib/msal-common/dist/constants/AADServerParamKeys.mjs.map +1 -1
- package/dist/lib/msal-common/dist/error/AuthError.mjs +2 -2
- package/dist/lib/msal-common/dist/error/AuthError.mjs.map +1 -1
- package/dist/lib/msal-common/dist/error/ClientAuthError.mjs +2 -2
- package/dist/lib/msal-common/dist/error/ClientAuthError.mjs.map +1 -1
- package/dist/lib/msal-common/dist/error/ClientAuthErrorCodes.mjs +5 -4
- package/dist/lib/msal-common/dist/error/ClientAuthErrorCodes.mjs.map +1 -1
- package/dist/lib/msal-common/dist/error/ClientConfigurationError.mjs +2 -2
- package/dist/lib/msal-common/dist/error/ClientConfigurationError.mjs.map +1 -1
- package/dist/lib/msal-common/dist/error/ClientConfigurationErrorCodes.mjs +2 -2
- package/dist/lib/msal-common/dist/error/ClientConfigurationErrorCodes.mjs.map +1 -1
- package/dist/lib/msal-common/dist/error/InteractionRequiredAuthError.mjs +2 -2
- package/dist/lib/msal-common/dist/error/InteractionRequiredAuthError.mjs.map +1 -1
- package/dist/lib/msal-common/dist/error/PlatformBrokerError.mjs +51 -0
- package/dist/lib/msal-common/dist/error/PlatformBrokerError.mjs.map +1 -0
- package/dist/lib/msal-common/dist/error/ServerError.mjs +2 -2
- package/dist/lib/msal-common/dist/error/ServerError.mjs.map +1 -1
- package/dist/lib/msal-common/dist/logger/Logger.mjs +78 -4
- package/dist/lib/msal-common/dist/logger/Logger.mjs.map +1 -1
- package/dist/lib/msal-common/dist/telemetry/server/ServerTelemetryManager.mjs +2 -2
- package/dist/lib/msal-common/dist/telemetry/server/ServerTelemetryManager.mjs.map +1 -1
- package/dist/lib/msal-common/dist/utils/Constants.mjs +2 -2
- package/dist/lib/msal-common/dist/utils/Constants.mjs.map +1 -1
- package/dist/lib/msal-common/dist/utils/TimeUtils.mjs +2 -2
- package/dist/lib/msal-common/dist/utils/TimeUtils.mjs.map +1 -1
- package/dist/lock/CrossPlatformLock.mjs +1 -1
- package/dist/lock/CrossPlatformLock.mjs.map +1 -1
- package/dist/packageMetadata.d.ts +1 -1
- package/dist/packageMetadata.mjs +2 -2
- package/dist/persistence/BasePersistence.mjs +1 -1
- package/dist/persistence/BasePersistence.mjs.map +1 -1
- package/dist/persistence/DataProtectionScope.mjs +1 -1
- package/dist/persistence/DataProtectionScope.mjs.map +1 -1
- package/dist/persistence/FilePersistence.mjs +1 -1
- package/dist/persistence/FilePersistence.mjs.map +1 -1
- package/dist/persistence/FilePersistenceWithDataProtection.mjs +1 -1
- package/dist/persistence/FilePersistenceWithDataProtection.mjs.map +1 -1
- package/dist/persistence/KeychainPersistence.mjs +1 -1
- package/dist/persistence/KeychainPersistence.mjs.map +1 -1
- package/dist/persistence/LibSecretPersistence.mjs +1 -1
- package/dist/persistence/LibSecretPersistence.mjs.map +1 -1
- package/dist/persistence/PersistenceCachePlugin.mjs +1 -1
- package/dist/persistence/PersistenceCachePlugin.mjs.map +1 -1
- package/dist/persistence/PersistenceCreator.mjs +1 -1
- package/dist/persistence/PersistenceCreator.mjs.map +1 -1
- package/dist/utils/Constants.mjs +1 -1
- package/dist/utils/Constants.mjs.map +1 -1
- package/dist/utils/Environment.mjs +1 -1
- package/dist/utils/Environment.mjs.map +1 -1
- package/dist/utils/TypeGuards.mjs +1 -1
- package/dist/utils/TypeGuards.mjs.map +1 -1
- package/lib/msal-node-extensions.cjs +235 -113
- package/lib/msal-node-extensions.cjs.map +1 -1
- package/lib/types/packageMetadata.d.ts +1 -1
- package/package.json +86 -86
- package/dist/error/NativeAuthError.d.ts +0 -6
- package/dist/error/NativeAuthError.mjs +0 -20
- package/dist/error/NativeAuthError.mjs.map +0 -1
- package/lib/types/error/NativeAuthError.d.ts +0 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @azure/msal-node-extensions v5.0.
|
|
1
|
+
/*! @azure/msal-node-extensions v5.0.1 2026-01-16 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { FilePersistenceWithDataProtection } from './FilePersistenceWithDataProtection.mjs';
|
|
4
4
|
import { LibSecretPersistence } from './LibSecretPersistence.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistenceCreator.mjs","sources":["../../src/persistence/PersistenceCreator.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAAA;;;AAGG;MAYU,kBAAkB,CAAA;AAC3B,IAAA,aAAa,iBAAiB,CAC1B,MAAiC,EAAA;AAEjC,QAAA,IAAI,UAAwB,CAAC;;AAG7B,QAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;AAClD,gBAAA,MAAM,gBAAgB,CAAC,kCAAkC,CACrD,6GAA6G,CAChH,CAAC;AACL,
|
|
1
|
+
{"version":3,"file":"PersistenceCreator.mjs","sources":["../../src/persistence/PersistenceCreator.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAAA;;;AAGG;MAYU,kBAAkB,CAAA;AAC3B,IAAA,aAAa,iBAAiB,CAC1B,MAAiC,EAAA;AAEjC,QAAA,IAAI,UAAwB,CAAC;;AAG7B,QAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;AAClD,gBAAA,MAAM,gBAAgB,CAAC,kCAAkC,CACrD,6GAA6G,CAChH,CAAC;AACL,aAAA;YAED,UAAU,GAAG,MAAM,iCAAiC,CAAC,MAAM,CACvD,MAAM,CAAC,SAAS,EAChB,mBAAmB,CAAC,WAAW,EAC/B,SAAS,EACT,MAAM,CAAC,aAAa,CACvB,CAAC;AACL,SAAA;;AAGI,aAAA,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE;YAClC,IACI,CAAC,MAAM,CAAC,SAAS;gBACjB,CAAC,MAAM,CAAC,WAAW;gBACnB,CAAC,MAAM,CAAC,WAAW,EACrB;AACE,gBAAA,MAAM,gBAAgB,CAAC,kCAAkC,CACrD,oGAAoG,CACvG,CAAC;AACL,aAAA;YAED,UAAU,GAAG,MAAM,mBAAmB,CAAC,MAAM,CACzC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,aAAa,CACvB,CAAC;AACL,SAAA;;AAGI,aAAA,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE;YACpC,IACI,CAAC,MAAM,CAAC,SAAS;gBACjB,CAAC,MAAM,CAAC,WAAW;gBACnB,CAAC,MAAM,CAAC,WAAW,EACrB;AACE,gBAAA,MAAM,gBAAgB,CAAC,kCAAkC,CACrD,qGAAqG,CACxG,CAAC;AACL,aAAA;YAED,UAAU,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAC1C,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,aAAa,CACvB,CAAC;AACL,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,gBAAgB,CAAC,uBAAuB,CAC1C,uEAAuE,CAC1E,CAAC;AACL,SAAA;QAED,MAAM,UAAU,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAI;YACnD,IACI,WAAW,CAAC,eAAe,EAAE;gBAC7B,MAAM,CAAC,uBAAuB,EAChC;AACE,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACnB,oBAAA,MAAM,gBAAgB,CAAC,kCAAkC,CACrD,8DAA8D,CACjE,CAAC;AACL,iBAAA;AAED,gBAAA,UAAU,GAAG,MAAM,eAAe,CAAC,MAAM,CACrC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,aAAa,CACvB,CAAC;AAEF,gBAAA,MAAM,yBAAyB,GAC3B,MAAM,UAAU,CAAC,iBAAiB,EAAE,CAAC;AACzC,gBAAA,IAAI,yBAAyB,EAAE;AAC3B,oBAAA,OAAO,UAAU,CAAC;AACrB,iBAAA;AAED,gBAAA,MAAM,gBAAgB,CAAC,iCAAiC,CACpD,mCAAmC,CACtC,CAAC;AACL,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,CAAC,CAAC;AACX,aAAA;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,UAAU,CAAC;KACrB;AACJ;;;;"}
|
package/dist/utils/Constants.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constants.mjs","sources":["../../src/utils/Constants.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;AAGG;
|
|
1
|
+
{"version":3,"file":"Constants.mjs","sources":["../../src/utils/Constants.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;AAGG;AAEU,MAAA,SAAS,GAAG;AACrB;;AAEG;AACH,IAAA,YAAY,EAAE,QAAQ;AAEtB;;;;AAIG;AACH,IAAA,YAAY,EAAE,QAAQ;AAEtB;;;AAGG;AACH,IAAA,WAAW,EAAE,OAAO;AAEpB;;AAEG;AACH,IAAA,oBAAoB,EAAE,sBAAsB;AAE5C;;AAEG;AACH,IAAA,qBAAqB,EACjB,uDAAuD;AAE3D;;AAEG;AACH,IAAA,oBAAoB,EAAE,CAAC;AAEvB;;AAEG;AACH,IAAA,WAAW,EAAE;AACT,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,sBAAsB,EAAE,cAAc;AACzC,KAAA;;AAGD,IAAA,uBAAuB,EAAE,YAAY;EACvC;AAEW,MAAA,QAAQ,GAAG;AACpB,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,KAAK,EAAE,QAAQ;EACR;AAGE,MAAA,UAAU,GAAG;AACtB,IAAA,8BAA8B,EAAE,sBAAsB;AACtD,IAAA,kBAAkB,EAAE,oBAAoB;AACxC,IAAA,OAAO,EAAE,eAAe;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Environment.mjs","sources":["../../src/utils/Environment.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;AAGG;MAMU,WAAW,CAAA;AACpB,IAAA,WAAW,UAAU,GAAA;QACjB,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Environment.mjs","sources":["../../src/utils/Environment.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeGuards.mjs","sources":["../../src/utils/TypeGuards.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;AAGG;AAEH;;AAEG;
|
|
1
|
+
{"version":3,"file":"TypeGuards.mjs","sources":["../../src/utils/TypeGuards.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;AAGG;AAEH;;AAEG;AACU,MAAA,WAAW,GAAG,CAAC,KAAc,KAAoC;AAC1E,IAAA,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAChF;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @azure/msal-node-extensions v5.0.
|
|
1
|
+
/*! @azure/msal-node-extensions v5.0.1 2026-01-16 */
|
|
2
2
|
'use strict';
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
@@ -343,7 +343,47 @@ class PersistenceCachePlugin {
|
|
|
343
343
|
}
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
-
/*! @azure/msal-common v16.0.
|
|
346
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
347
|
+
/**
|
|
348
|
+
* we considered making this "enum" in the request instead of string, however it looks like the allowed list of
|
|
349
|
+
* prompt values kept changing over past couple of years. There are some undocumented prompt values for some
|
|
350
|
+
* internal partners too, hence the choice of generic "string" type instead of the "enum"
|
|
351
|
+
*/
|
|
352
|
+
const PromptValue = {
|
|
353
|
+
LOGIN: "login",
|
|
354
|
+
SELECT_ACCOUNT: "select_account",
|
|
355
|
+
NONE: "none",
|
|
356
|
+
CREATE: "create"};
|
|
357
|
+
/**
|
|
358
|
+
* Separators used in cache
|
|
359
|
+
*/
|
|
360
|
+
const CACHE_KEY_SEPARATOR = "-";
|
|
361
|
+
const SERVER_TELEM_SCHEMA_VERSION = 5;
|
|
362
|
+
const SERVER_TELEM_MAX_LAST_HEADER_BYTES = 330; // ESTS limit is 350B, set to 330 to provide a 20B buffer,
|
|
363
|
+
const SERVER_TELEM_MAX_CACHED_ERRORS = 50; // Limit the number of errors that can be stored to prevent uncontrolled size gains
|
|
364
|
+
const SERVER_TELEM_CACHE_KEY = "server-telemetry";
|
|
365
|
+
const SERVER_TELEM_CATEGORY_SEPARATOR = "|";
|
|
366
|
+
const SERVER_TELEM_VALUE_SEPARATOR = ",";
|
|
367
|
+
const SERVER_TELEM_OVERFLOW_TRUE = "1";
|
|
368
|
+
const SERVER_TELEM_OVERFLOW_FALSE = "0";
|
|
369
|
+
const SERVER_TELEM_UNKNOWN_ERROR = "unknown_error";
|
|
370
|
+
/**
|
|
371
|
+
* Type of the authentication request
|
|
372
|
+
*/
|
|
373
|
+
const AuthenticationScheme = {
|
|
374
|
+
BEARER: "Bearer",
|
|
375
|
+
POP: "pop"};
|
|
376
|
+
/**
|
|
377
|
+
* Specifies the reason for fetching the access token from the identity provider
|
|
378
|
+
*/
|
|
379
|
+
const CacheOutcome = {
|
|
380
|
+
// When a token is found in the cache or the cache is not supposed to be hit when making the request
|
|
381
|
+
NOT_APPLICABLE: "0"};
|
|
382
|
+
|
|
383
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
384
|
+
const X_CLIENT_EXTRA_SKU = "x-client-xtra-sku";
|
|
385
|
+
|
|
386
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
347
387
|
/*
|
|
348
388
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
349
389
|
* Licensed under the MIT License.
|
|
@@ -371,7 +411,27 @@ class AuthError extends Error {
|
|
|
371
411
|
}
|
|
372
412
|
}
|
|
373
413
|
|
|
374
|
-
/*! @azure/msal-common v16.0.
|
|
414
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
415
|
+
|
|
416
|
+
/*
|
|
417
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
418
|
+
* Licensed under the MIT License.
|
|
419
|
+
*/
|
|
420
|
+
/**
|
|
421
|
+
* Error thrown when there is an error in configuration of the MSAL.js library.
|
|
422
|
+
*/
|
|
423
|
+
class ClientConfigurationError extends AuthError {
|
|
424
|
+
constructor(errorCode) {
|
|
425
|
+
super(errorCode);
|
|
426
|
+
this.name = "ClientConfigurationError";
|
|
427
|
+
Object.setPrototypeOf(this, ClientConfigurationError.prototype);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
function createClientConfigurationError(errorCode) {
|
|
431
|
+
return new ClientConfigurationError(errorCode);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
375
435
|
|
|
376
436
|
/*
|
|
377
437
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
@@ -394,12 +454,16 @@ function createClientAuthError(errorCode, additionalMessage) {
|
|
|
394
454
|
return new ClientAuthError(errorCode, additionalMessage);
|
|
395
455
|
}
|
|
396
456
|
|
|
397
|
-
/*! @azure/msal-common v16.0.
|
|
457
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
458
|
+
const untrustedAuthority = "untrusted_authority";
|
|
459
|
+
|
|
460
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
398
461
|
const noAccountFound = "no_account_found";
|
|
399
462
|
const noNetworkConnectivity = "no_network_connectivity";
|
|
400
|
-
const userCanceled = "user_canceled";
|
|
463
|
+
const userCanceled = "user_canceled";
|
|
464
|
+
const platformBrokerError = "platform_broker_error";
|
|
401
465
|
|
|
402
|
-
/*! @azure/msal-common v16.0.
|
|
466
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
403
467
|
/*
|
|
404
468
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
405
469
|
* Licensed under the MIT License.
|
|
@@ -415,6 +479,70 @@ var LogLevel;
|
|
|
415
479
|
LogLevel[LogLevel["Verbose"] = 3] = "Verbose";
|
|
416
480
|
LogLevel[LogLevel["Trace"] = 4] = "Trace";
|
|
417
481
|
})(LogLevel || (LogLevel = {}));
|
|
482
|
+
// Shared cache state for better minification - using Map's insertion order for LRU
|
|
483
|
+
const CACHE_CAPACITY = 50;
|
|
484
|
+
const MAX_LOGS_PER_CORRELATION = 500;
|
|
485
|
+
const correlationCache = new Map();
|
|
486
|
+
/**
|
|
487
|
+
* Mark correlation ID as recently used by moving it to end of Map
|
|
488
|
+
* @param correlationId
|
|
489
|
+
* @param {CorrelationLogData} data
|
|
490
|
+
*/
|
|
491
|
+
function markAsRecentlyUsed(correlationId, data) {
|
|
492
|
+
correlationCache.delete(correlationId);
|
|
493
|
+
correlationCache.set(correlationId, data);
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Add log message to cache for specific correlation ID
|
|
497
|
+
* @param correlationId
|
|
498
|
+
* @param {LoggedMessage} loggedMessage
|
|
499
|
+
*/
|
|
500
|
+
function addLogToCache(correlationId, loggedMessage) {
|
|
501
|
+
const currentTime = Date.now();
|
|
502
|
+
let data = correlationCache.get(correlationId);
|
|
503
|
+
if (data) {
|
|
504
|
+
// Mark as recently used
|
|
505
|
+
markAsRecentlyUsed(correlationId, data);
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
// Create new entry
|
|
509
|
+
data = { logs: [], firstEventTime: currentTime };
|
|
510
|
+
correlationCache.set(correlationId, data);
|
|
511
|
+
// Remove LRU (first entry) if capacity exceeded
|
|
512
|
+
if (correlationCache.size > CACHE_CAPACITY) {
|
|
513
|
+
const firstKey = correlationCache.keys().next().value;
|
|
514
|
+
if (firstKey) {
|
|
515
|
+
correlationCache.delete(firstKey);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
// Add log to the data, maintaining max logs per correlation
|
|
520
|
+
data.logs.push({
|
|
521
|
+
...loggedMessage,
|
|
522
|
+
milliseconds: currentTime - data.firstEventTime,
|
|
523
|
+
});
|
|
524
|
+
if (data.logs.length > MAX_LOGS_PER_CORRELATION) {
|
|
525
|
+
data.logs.shift(); // Remove oldest log
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Checks if a string is already a hashed logging string (6 alphanumeric characters)
|
|
530
|
+
*/
|
|
531
|
+
function isHashedString(str) {
|
|
532
|
+
if (str.length !== 6) {
|
|
533
|
+
return false;
|
|
534
|
+
}
|
|
535
|
+
for (let i = 0; i < str.length; i++) {
|
|
536
|
+
const char = str[i];
|
|
537
|
+
const isAlphaNumeric = (char >= "a" && char <= "z") ||
|
|
538
|
+
(char >= "A" && char <= "Z") ||
|
|
539
|
+
(char >= "0" && char <= "9");
|
|
540
|
+
if (!isAlphaNumeric) {
|
|
541
|
+
return false;
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
return true;
|
|
545
|
+
}
|
|
418
546
|
/**
|
|
419
547
|
* Class which facilitates logging of messages to a specific place.
|
|
420
548
|
*/
|
|
@@ -459,15 +587,25 @@ class Logger {
|
|
|
459
587
|
* Log message with required options.
|
|
460
588
|
*/
|
|
461
589
|
logMessage(logMessage, options) {
|
|
590
|
+
const correlationId = options.correlationId;
|
|
591
|
+
const isHashedInput = isHashedString(logMessage);
|
|
592
|
+
if (isHashedInput) {
|
|
593
|
+
const loggedMessage = {
|
|
594
|
+
hash: logMessage,
|
|
595
|
+
level: options.logLevel,
|
|
596
|
+
containsPii: options.containsPii || false,
|
|
597
|
+
milliseconds: 0, // Will be calculated in addLogToCache
|
|
598
|
+
};
|
|
599
|
+
addLogToCache(correlationId, loggedMessage);
|
|
600
|
+
}
|
|
462
601
|
if (options.logLevel > this.level ||
|
|
463
602
|
(!this.piiLoggingEnabled && options.containsPii)) {
|
|
464
603
|
return;
|
|
465
604
|
}
|
|
466
605
|
const timestamp = new Date().toUTCString();
|
|
467
606
|
// Add correlationId to logs if set, correlationId provided on log messages take precedence
|
|
468
|
-
const logHeader = `[${timestamp}] : [${
|
|
607
|
+
const logHeader = `[${timestamp}] : [${correlationId}]`;
|
|
469
608
|
const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${LogLevel[options.logLevel]} - ${logMessage}`;
|
|
470
|
-
// debug(`msal:${LogLevel[options.logLevel]}${options.containsPii ? "-Pii": Constants.""}${options.context ? `:${options.context}` : Constants.""}`)(logMessage);
|
|
471
609
|
this.executeCallback(options.logLevel, log, options.containsPii || false);
|
|
472
610
|
}
|
|
473
611
|
/**
|
|
@@ -586,82 +724,7 @@ class Logger {
|
|
|
586
724
|
}
|
|
587
725
|
}
|
|
588
726
|
|
|
589
|
-
/*! @azure/msal-common v16.0.
|
|
590
|
-
/**
|
|
591
|
-
* we considered making this "enum" in the request instead of string, however it looks like the allowed list of
|
|
592
|
-
* prompt values kept changing over past couple of years. There are some undocumented prompt values for some
|
|
593
|
-
* internal partners too, hence the choice of generic "string" type instead of the "enum"
|
|
594
|
-
*/
|
|
595
|
-
const PromptValue = {
|
|
596
|
-
LOGIN: "login",
|
|
597
|
-
SELECT_ACCOUNT: "select_account",
|
|
598
|
-
NONE: "none",
|
|
599
|
-
CREATE: "create"};
|
|
600
|
-
/**
|
|
601
|
-
* Separators used in cache
|
|
602
|
-
*/
|
|
603
|
-
const CACHE_KEY_SEPARATOR = "-";
|
|
604
|
-
const SERVER_TELEM_SCHEMA_VERSION = 5;
|
|
605
|
-
const SERVER_TELEM_MAX_LAST_HEADER_BYTES = 330; // ESTS limit is 350B, set to 330 to provide a 20B buffer,
|
|
606
|
-
const SERVER_TELEM_MAX_CACHED_ERRORS = 50; // Limit the number of errors that can be stored to prevent uncontrolled size gains
|
|
607
|
-
const SERVER_TELEM_CACHE_KEY = "server-telemetry";
|
|
608
|
-
const SERVER_TELEM_CATEGORY_SEPARATOR = "|";
|
|
609
|
-
const SERVER_TELEM_VALUE_SEPARATOR = ",";
|
|
610
|
-
const SERVER_TELEM_OVERFLOW_TRUE = "1";
|
|
611
|
-
const SERVER_TELEM_OVERFLOW_FALSE = "0";
|
|
612
|
-
const SERVER_TELEM_UNKNOWN_ERROR = "unknown_error";
|
|
613
|
-
/**
|
|
614
|
-
* Type of the authentication request
|
|
615
|
-
*/
|
|
616
|
-
const AuthenticationScheme = {
|
|
617
|
-
BEARER: "Bearer",
|
|
618
|
-
POP: "pop"};
|
|
619
|
-
/**
|
|
620
|
-
* Specifies the reason for fetching the access token from the identity provider
|
|
621
|
-
*/
|
|
622
|
-
const CacheOutcome = {
|
|
623
|
-
// When a token is found in the cache or the cache is not supposed to be hit when making the request
|
|
624
|
-
NOT_APPLICABLE: "0"};
|
|
625
|
-
|
|
626
|
-
/*! @azure/msal-common v16.0.0-alpha.0 2025-10-07 */
|
|
627
|
-
|
|
628
|
-
/*
|
|
629
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
630
|
-
* Licensed under the MIT License.
|
|
631
|
-
*/
|
|
632
|
-
/**
|
|
633
|
-
* Error thrown when there is an error in configuration of the MSAL.js library.
|
|
634
|
-
*/
|
|
635
|
-
class ClientConfigurationError extends AuthError {
|
|
636
|
-
constructor(errorCode) {
|
|
637
|
-
super(errorCode);
|
|
638
|
-
this.name = "ClientConfigurationError";
|
|
639
|
-
Object.setPrototypeOf(this, ClientConfigurationError.prototype);
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
function createClientConfigurationError(errorCode) {
|
|
643
|
-
return new ClientConfigurationError(errorCode);
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
/*! @azure/msal-common v16.0.0-alpha.0 2025-10-07 */
|
|
647
|
-
const untrustedAuthority = "untrusted_authority";
|
|
648
|
-
|
|
649
|
-
/*! @azure/msal-common v16.0.0-alpha.0 2025-10-07 */
|
|
650
|
-
const X_CLIENT_EXTRA_SKU = "x-client-xtra-sku";
|
|
651
|
-
|
|
652
|
-
/*! @azure/msal-common v16.0.0-alpha.0 2025-10-07 */
|
|
653
|
-
/**
|
|
654
|
-
* Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date).
|
|
655
|
-
* @param seconds
|
|
656
|
-
*/
|
|
657
|
-
function toDateFromSeconds(seconds) {
|
|
658
|
-
if (seconds) {
|
|
659
|
-
return new Date(Number(seconds) * 1000);
|
|
660
|
-
}
|
|
661
|
-
return new Date();
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
/*! @azure/msal-common v16.0.0-alpha.0 2025-10-07 */
|
|
727
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
665
728
|
|
|
666
729
|
/*
|
|
667
730
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
@@ -680,7 +743,7 @@ class ServerError extends AuthError {
|
|
|
680
743
|
}
|
|
681
744
|
}
|
|
682
745
|
|
|
683
|
-
/*! @azure/msal-common v16.0.
|
|
746
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
684
747
|
/**
|
|
685
748
|
* Error thrown when user interaction is required.
|
|
686
749
|
*/
|
|
@@ -697,7 +760,64 @@ class InteractionRequiredAuthError extends AuthError {
|
|
|
697
760
|
}
|
|
698
761
|
}
|
|
699
762
|
|
|
700
|
-
/*! @azure/msal-common v16.0.
|
|
763
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
764
|
+
/**
|
|
765
|
+
* Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date).
|
|
766
|
+
* @param seconds
|
|
767
|
+
*/
|
|
768
|
+
function toDateFromSeconds(seconds) {
|
|
769
|
+
if (seconds) {
|
|
770
|
+
return new Date(Number(seconds) * 1000);
|
|
771
|
+
}
|
|
772
|
+
return new Date();
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
776
|
+
|
|
777
|
+
/*
|
|
778
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
779
|
+
* Licensed under the MIT License.
|
|
780
|
+
*/
|
|
781
|
+
/**
|
|
782
|
+
* Converts a numeric tag from MSAL Runtime to a 5-character string representation.
|
|
783
|
+
* Tags are encoded as 30-bit values (6 bits per character) using a custom symbol space.
|
|
784
|
+
* @param tag - The numeric tag to convert
|
|
785
|
+
* @returns The string representation of the tag
|
|
786
|
+
*/
|
|
787
|
+
function tagToString(tag) {
|
|
788
|
+
if (tag === 0) {
|
|
789
|
+
return "UNTAG";
|
|
790
|
+
}
|
|
791
|
+
const tagSymbolSpace = "abcdefghijklmnopqrstuvwxyz0123456789****************************";
|
|
792
|
+
let tagBuffer = "*****";
|
|
793
|
+
const chars = [
|
|
794
|
+
tagSymbolSpace[(tag >> 24) & 0x3f],
|
|
795
|
+
tagSymbolSpace[(tag >> 18) & 0x3f],
|
|
796
|
+
tagSymbolSpace[(tag >> 12) & 0x3f],
|
|
797
|
+
tagSymbolSpace[(tag >> 6) & 0x3f],
|
|
798
|
+
tagSymbolSpace[(tag >> 0) & 0x3f],
|
|
799
|
+
];
|
|
800
|
+
tagBuffer = chars.join("");
|
|
801
|
+
return tagBuffer;
|
|
802
|
+
}
|
|
803
|
+
/**
|
|
804
|
+
* Error class for MSAL Runtime errors that preserves detailed broker information
|
|
805
|
+
*/
|
|
806
|
+
class PlatformBrokerError extends AuthError {
|
|
807
|
+
constructor(errorStatus, errorContext, errorCode, errorTag) {
|
|
808
|
+
const tagString = tagToString(errorTag);
|
|
809
|
+
const enhancedErrorContext = errorContext
|
|
810
|
+
? `${errorContext} (Error Code: ${errorCode}, Tag: ${tagString})`
|
|
811
|
+
: `(Error Code: ${errorCode}, Tag: ${tagString})`;
|
|
812
|
+
super(errorStatus, enhancedErrorContext);
|
|
813
|
+
this.name = "PlatformBrokerError";
|
|
814
|
+
this.statusCode = errorCode;
|
|
815
|
+
this.tag = tagString;
|
|
816
|
+
Object.setPrototypeOf(this, PlatformBrokerError.prototype);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
/*! @azure/msal-common v16.0.1 2026-01-16 */
|
|
701
821
|
|
|
702
822
|
/*
|
|
703
823
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
@@ -1579,23 +1699,9 @@ class PersistenceCreator {
|
|
|
1579
1699
|
}
|
|
1580
1700
|
}
|
|
1581
1701
|
|
|
1582
|
-
/*
|
|
1583
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
1584
|
-
* Licensed under the MIT License.
|
|
1585
|
-
*/
|
|
1586
|
-
class NativeAuthError extends AuthError {
|
|
1587
|
-
constructor(errorStatus, errorContext, errorCode, errorTag) {
|
|
1588
|
-
super(errorStatus, errorContext);
|
|
1589
|
-
this.name = "NativeAuthError";
|
|
1590
|
-
this.statusCode = errorCode;
|
|
1591
|
-
this.tag = errorTag;
|
|
1592
|
-
Object.setPrototypeOf(this, NativeAuthError.prototype);
|
|
1593
|
-
}
|
|
1594
|
-
}
|
|
1595
|
-
|
|
1596
1702
|
/* eslint-disable header/header */
|
|
1597
1703
|
const name = "@azure/msal-node-extensions";
|
|
1598
|
-
const version = "5.0.
|
|
1704
|
+
const version = "5.0.1";
|
|
1599
1705
|
|
|
1600
1706
|
/*
|
|
1601
1707
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
@@ -1723,10 +1829,13 @@ class NativeBrokerPlugin {
|
|
|
1723
1829
|
async acquireTokenSilent(request) {
|
|
1724
1830
|
this.logger.trace("NativeBrokerPlugin - acquireTokenSilent called", request.correlationId);
|
|
1725
1831
|
const platformRequest = request;
|
|
1832
|
+
if (!platformRequest.redirectUri) {
|
|
1833
|
+
platformRequest.redirectUri =
|
|
1834
|
+
this.chooseRedirectUriByPlatform(platformRequest);
|
|
1835
|
+
this.logger.info("NativeBrokerPlugin - No Redirect URI provided, using default", platformRequest.correlationId);
|
|
1836
|
+
}
|
|
1726
1837
|
const authParams = this.generateRequestParameters(platformRequest);
|
|
1727
1838
|
const account = await this.getAccount(platformRequest);
|
|
1728
|
-
platformRequest.redirectUri =
|
|
1729
|
-
this.chooseRedirectUriByPlatform(platformRequest);
|
|
1730
1839
|
return new Promise((resolve, reject) => {
|
|
1731
1840
|
const resultCallback = (result) => {
|
|
1732
1841
|
try {
|
|
@@ -1761,9 +1870,12 @@ class NativeBrokerPlugin {
|
|
|
1761
1870
|
async acquireTokenInteractive(request, providedWindowHandle) {
|
|
1762
1871
|
this.logger.trace("NativeBrokerPlugin - acquireTokenInteractive called", request.correlationId);
|
|
1763
1872
|
const platformRequest = request;
|
|
1873
|
+
if (!platformRequest.redirectUri) {
|
|
1874
|
+
platformRequest.redirectUri =
|
|
1875
|
+
this.chooseRedirectUriByPlatform(platformRequest);
|
|
1876
|
+
this.logger.info("NativeBrokerPlugin - No Redirect URI provided, using default", platformRequest.correlationId);
|
|
1877
|
+
}
|
|
1764
1878
|
const authParams = this.generateRequestParameters(platformRequest);
|
|
1765
|
-
platformRequest.redirectUri =
|
|
1766
|
-
this.chooseRedirectUriByPlatform(platformRequest);
|
|
1767
1879
|
const account = await this.getAccount(platformRequest);
|
|
1768
1880
|
const windowHandle = providedWindowHandle || Buffer.from([0]);
|
|
1769
1881
|
return new Promise((resolve, reject) => {
|
|
@@ -1891,7 +2003,7 @@ class NativeBrokerPlugin {
|
|
|
1891
2003
|
const authParams = new msalNodeRuntime.msalNodeRuntime.AuthParameters();
|
|
1892
2004
|
try {
|
|
1893
2005
|
authParams.CreateAuthParameters(request.clientId, request.authority);
|
|
1894
|
-
authParams.SetRedirectUri(
|
|
2006
|
+
authParams.SetRedirectUri(request.redirectUri);
|
|
1895
2007
|
authParams.SetRequestedScopes(request.scopes.join(" "));
|
|
1896
2008
|
if (request.claims) {
|
|
1897
2009
|
authParams.SetDecodedClaims(request.claims);
|
|
@@ -2017,27 +2129,37 @@ class NativeBrokerPlugin {
|
|
|
2017
2129
|
typeof error === "object" &&
|
|
2018
2130
|
this.isMsalRuntimeError(error)) {
|
|
2019
2131
|
const { errorCode, errorStatus, errorContext, errorTag } = error;
|
|
2132
|
+
const msalNodeRuntimeError = new PlatformBrokerError(msalNodeRuntime.ErrorStatus[errorStatus], errorContext, errorCode, errorTag);
|
|
2133
|
+
let wrappedError;
|
|
2020
2134
|
switch (errorStatus) {
|
|
2021
2135
|
case msalNodeRuntime.ErrorStatus.InteractionRequired:
|
|
2022
2136
|
case msalNodeRuntime.ErrorStatus.AccountUnusable:
|
|
2023
|
-
|
|
2137
|
+
wrappedError = new InteractionRequiredAuthError(ErrorCodes.INTERATION_REQUIRED_ERROR_CODE, msalNodeRuntimeError.message);
|
|
2138
|
+
break;
|
|
2024
2139
|
case msalNodeRuntime.ErrorStatus.NoNetwork:
|
|
2025
2140
|
case msalNodeRuntime.ErrorStatus.NetworkTemporarilyUnavailable:
|
|
2026
|
-
|
|
2141
|
+
wrappedError = createClientAuthError(noNetworkConnectivity);
|
|
2142
|
+
break;
|
|
2027
2143
|
case msalNodeRuntime.ErrorStatus.ServerTemporarilyUnavailable:
|
|
2028
|
-
|
|
2144
|
+
wrappedError = new ServerError(ErrorCodes.SERVER_UNAVAILABLE, msalNodeRuntimeError.message);
|
|
2145
|
+
break;
|
|
2029
2146
|
case msalNodeRuntime.ErrorStatus.UserCanceled:
|
|
2030
|
-
|
|
2147
|
+
wrappedError = createClientAuthError(userCanceled);
|
|
2148
|
+
break;
|
|
2031
2149
|
case msalNodeRuntime.ErrorStatus.AuthorityUntrusted:
|
|
2032
|
-
|
|
2150
|
+
wrappedError = createClientConfigurationError(untrustedAuthority);
|
|
2151
|
+
break;
|
|
2033
2152
|
case msalNodeRuntime.ErrorStatus.UserSwitched:
|
|
2034
2153
|
// Not an error case, if there's customer demand we can surface this as a response property
|
|
2035
2154
|
return null;
|
|
2036
2155
|
case msalNodeRuntime.ErrorStatus.AccountNotFound:
|
|
2037
|
-
|
|
2156
|
+
wrappedError = createClientAuthError(noAccountFound);
|
|
2157
|
+
break;
|
|
2038
2158
|
default:
|
|
2039
|
-
|
|
2159
|
+
wrappedError = createClientAuthError(platformBrokerError);
|
|
2040
2160
|
}
|
|
2161
|
+
wrappedError.platformBrokerError = msalNodeRuntimeError;
|
|
2162
|
+
return wrappedError;
|
|
2041
2163
|
}
|
|
2042
2164
|
throw error;
|
|
2043
2165
|
}
|