@equinor/fusion-framework-vite-plugin-spa 5.2.3 → 5.2.4-next.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.
@@ -1,3 +1,5 @@
1
+ import { t as trace, c as context } from './trace-api-DzxUyN-s.js';
2
+
1
3
  function getDefaultExportFromCjs (x) {
2
4
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
3
5
  }
@@ -2848,6 +2850,12 @@ class SemanticVersion extends semverExports.SemVer {
2848
2850
  }
2849
2851
  }
2850
2852
 
2853
+ /**
2854
+ * Identifies an exporter-owned request so operational instrumentation does not instrument its own exports.
2855
+ * Symbol properties survive object spreads without becoming HTTP headers or serialized payload fields.
2856
+ */
2857
+ const telemetryExportRequest = Symbol('fusion.telemetry-export-request');
2858
+
2851
2859
  /******************************************************************************
2852
2860
  Copyright (c) Microsoft Corporation.
2853
2861
 
@@ -3205,7 +3213,7 @@ function reportUnhandledError(err) {
3205
3213
  });
3206
3214
  }
3207
3215
 
3208
- function noop() { }
3216
+ function noop$1() { }
3209
3217
 
3210
3218
  function errorContext(cb) {
3211
3219
  {
@@ -3354,9 +3362,9 @@ function defaultErrorHandler(err) {
3354
3362
  }
3355
3363
  var EMPTY_OBSERVER = {
3356
3364
  closed: true,
3357
- next: noop,
3365
+ next: noop$1,
3358
3366
  error: defaultErrorHandler,
3359
- complete: noop,
3367
+ complete: noop$1,
3360
3368
  };
3361
3369
 
3362
3370
  var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();
@@ -4021,6 +4029,12 @@ function mergeMap(project, resultSelector, concurrent) {
4021
4029
  return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });
4022
4030
  }
4023
4031
 
4032
+ function defer(observableFactory) {
4033
+ return new Observable(function (subscriber) {
4034
+ innerFrom(observableFactory()).subscribe(subscriber);
4035
+ });
4036
+ }
4037
+
4024
4038
  function filter(predicate, thisArg) {
4025
4039
  return operate(function (source, subscriber) {
4026
4040
  var index = 0;
@@ -4077,6 +4091,17 @@ function reduce(accumulator, seed) {
4077
4091
  return operate(scanInternals(accumulator, seed, arguments.length >= 2, false, true));
4078
4092
  }
4079
4093
 
4094
+ function finalize$1(callback) {
4095
+ return operate(function (source, subscriber) {
4096
+ try {
4097
+ source.subscribe(subscriber);
4098
+ }
4099
+ finally {
4100
+ subscriber.add(callback);
4101
+ }
4102
+ });
4103
+ }
4104
+
4080
4105
  function switchMap(project, resultSelector) {
4081
4106
  return operate(function (source, subscriber) {
4082
4107
  var innerSubscriber = null;
@@ -4098,6 +4123,42 @@ function switchMap(project, resultSelector) {
4098
4123
  });
4099
4124
  }
4100
4125
 
4126
+ function tap(observerOrNext, error, complete) {
4127
+ var tapObserver = isFunction(observerOrNext) || error || complete
4128
+ ?
4129
+ { next: observerOrNext, error: error, complete: complete }
4130
+ : observerOrNext;
4131
+ return tapObserver
4132
+ ? operate(function (source, subscriber) {
4133
+ var _a;
4134
+ (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
4135
+ var isUnsub = true;
4136
+ source.subscribe(createOperatorSubscriber(subscriber, function (value) {
4137
+ var _a;
4138
+ (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);
4139
+ subscriber.next(value);
4140
+ }, function () {
4141
+ var _a;
4142
+ isUnsub = false;
4143
+ (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
4144
+ subscriber.complete();
4145
+ }, function (err) {
4146
+ var _a;
4147
+ isUnsub = false;
4148
+ (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);
4149
+ subscriber.error(err);
4150
+ }, function () {
4151
+ var _a, _b;
4152
+ if (isUnsub) {
4153
+ (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
4154
+ }
4155
+ (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);
4156
+ }));
4157
+ })
4158
+ :
4159
+ identity;
4160
+ }
4161
+
4101
4162
  /**
4102
4163
  * Recursively assigns a configuration value to a nested object property.
4103
4164
  *
@@ -4870,6 +4931,20 @@ function unwrapMessage(message) {
4870
4931
  return typeof message === "string" ? message : message?.message;
4871
4932
  }
4872
4933
  /* A check holds no link back to the schema it is attached to — the same check instance is shared by every clone of that schema — so the owner is stamped onto the issues a check just raised, at the only point where both are in scope. Runs on the failure path only; `start` is the issue count from before the check ran. */
4934
+ /** The leading size checks of `defChecks` that set an upper bound, each paired with it. */
4935
+ function sizeCaps(defChecks) {
4936
+ const caps = [];
4937
+ for (const ch of defChecks ?? []) {
4938
+ const d = ch._zod.def;
4939
+ // a later check may rewrite the value
4940
+ if (!/_(length|size)$|_equals$/.test(d.check))
4941
+ break;
4942
+ const max = d.maximum ?? d.length ?? d.size;
4943
+ if (max >= 0)
4944
+ caps.push([max, ch]);
4945
+ }
4946
+ return caps;
4947
+ }
4873
4948
  function attachSchema(issues, start, inst) {
4874
4949
  var _a;
4875
4950
  for (let i = start; i < issues.length; i++) {
@@ -6076,7 +6151,7 @@ class Doc {
6076
6151
  const version$3 = {
6077
6152
  major: 4,
6078
6153
  minor: 6,
6079
- patch: 5,
6154
+ patch: 7,
6080
6155
  };
6081
6156
 
6082
6157
  const $ZodType = /*@__PURE__*/ $constructor("$ZodType", (inst, def) => {
@@ -6684,6 +6759,31 @@ const $ZodNever = /*@__PURE__*/ $constructor("$ZodNever", (inst, def) => {
6684
6759
  return payload;
6685
6760
  };
6686
6761
  });
6762
+ // an oversized container fails its leading size checks before any element is parsed
6763
+ function capSize(inst, size) {
6764
+ const caps = sizeCaps(inst._zod.def.checks);
6765
+ if (!caps.length)
6766
+ return;
6767
+ const cap = Math.min(...caps.map((c) => c[0]));
6768
+ const parse = inst._zod.parse;
6769
+ inst._zod.parse = (payload, ctx) => {
6770
+ const n = size(payload.value);
6771
+ if (n > cap && !ctx?.skipChecks && ctx?.direction !== "backward") {
6772
+ for (const [max, ch] of sizeCaps(inst._zod.def.checks)) {
6773
+ if (n > max && ch._zod.def.when(payload)) {
6774
+ const start = payload.issues.length;
6775
+ ch._zod.check(payload);
6776
+ // the value is still the raw input, so no later check may read it
6777
+ payload.issues[start].continue = false;
6778
+ attachSchema(payload.issues, start, inst);
6779
+ return payload;
6780
+ }
6781
+ }
6782
+ }
6783
+ return parse(payload, ctx);
6784
+ };
6785
+ }
6786
+ const arraySize = (input) => (Array.isArray(input) ? input.length : -1);
6687
6787
  function handleArrayResult(result, final, index) {
6688
6788
  if (result.issues.length) {
6689
6789
  final.issues.push(...prefixIssues(index, result.issues));
@@ -6729,6 +6829,7 @@ const $ZodArray = /*@__PURE__*/ $constructor("$ZodArray", (inst, def) => {
6729
6829
  }
6730
6830
  return payload; //handleArrayResultsAsync(parseResults, final);
6731
6831
  };
6832
+ capSize(inst, arraySize);
6732
6833
  });
6733
6834
  function handlePropertyResult(result, final, key, input, optin, optout) {
6734
6835
  const isPresent = key in input;
@@ -11058,6 +11159,84 @@ const ZodIssueCode = {
11058
11159
  custom: "custom",
11059
11160
  };
11060
11161
 
11162
+ /**
11163
+ * Internal helper utilities for constructing and inspecting Redux-style
11164
+ * lifecycle action types (`::request`, `::success`, `::failure`).
11165
+ */
11166
+ /**
11167
+ * Separates an action's base type from its lifecycle suffix.
11168
+ */
11169
+ const actionSuffixDivider = '::';
11170
+
11171
+ // biome-ignore-all lint/suspicious/noExplicitAny: ported redux-toolkit conditional-type dispatch logic (e.g. IsAny<T, ...>) requires real `any`, not `unknown`, to distinguish the two at the type level
11172
+ // biome-ignore-all lint/suspicious/noConfusingVoidType: `void` here is the ported redux-toolkit sentinel meaning "no payload type provided", distinct from `undefined` (see IfVoid in ts-helpers.ts) — replacing with `undefined` would change dispatch semantics
11173
+ /**
11174
+ * taken from https://github.com/reduxjs/redux-toolkit/tree/master/packages/toolkit/src
11175
+ */
11176
+ /**
11177
+ * Creates the runtime action creator implementation shared by the overloads above.
11178
+ *
11179
+ * @param type - The action type to assign to created actions.
11180
+ * @param prepareAction - An optional function that prepares payload, metadata, and errors.
11181
+ * @returns A callable action creator with type and matching metadata.
11182
+ * @throws {Error} When the prepare callback does not return an action object.
11183
+ */
11184
+ function createAction(type, prepareAction) {
11185
+ function actionCreator(...args) {
11186
+ // Use the prepare callback when the caller needs custom payload construction.
11187
+ if (prepareAction) {
11188
+ const prepared = prepareAction(...args);
11189
+ // Reject invalid prepare callbacks before reading their action fields.
11190
+ if (!prepared) {
11191
+ throw new Error('prepareAction did not return an object');
11192
+ }
11193
+ // Merge optional metadata and error fields into the prepared action.
11194
+ return {
11195
+ type,
11196
+ payload: prepared.payload,
11197
+ ...('meta' in prepared && { meta: prepared.meta }),
11198
+ ...('error' in prepared && { error: prepared.error }),
11199
+ };
11200
+ }
11201
+ return { type, payload: args[0] };
11202
+ }
11203
+ actionCreator.toString = () => `${type}`;
11204
+ actionCreator.type = type;
11205
+ actionCreator.match = (action) => action.type === type;
11206
+ return actionCreator;
11207
+ }
11208
+
11209
+ // biome-ignore-all lint/suspicious/noExplicitAny: generic constraints mirror create-action.ts's ported redux-toolkit PrepareAction<any> dispatch pattern
11210
+ /**
11211
+ * Creates the runtime async action implementation shared by the overloads above.
11212
+ *
11213
+ * @param type - The base action type string.
11214
+ * @param request - A prepare function for the request action payload.
11215
+ * @param success - A prepare function for the success action payload.
11216
+ * @param failure - An optional prepare function for the failure action payload.
11217
+ * @returns An action creator with request, success, and optional failure actions.
11218
+ */
11219
+ function createAsyncAction(type, request, success, failure) {
11220
+ const action = createAction([type, 'request'].join(actionSuffixDivider), request);
11221
+ // Attach the success action only when the caller supplied its prepare function.
11222
+ if (success) {
11223
+ // Add the success action while preserving the request creator's identity.
11224
+ Object.assign(action, {
11225
+ success: createAction([type, 'success'].join(actionSuffixDivider), success),
11226
+ });
11227
+ }
11228
+ // Attach the failure action only for async workflows that support failure results.
11229
+ if (failure) {
11230
+ // Add the failure action alongside the existing request and success actions.
11231
+ Object.assign(action, {
11232
+ failure: createAction([type, 'failure'].join(actionSuffixDivider), failure),
11233
+ });
11234
+ }
11235
+ // `action` is progressively mutated with `success`/`failure` properties above, so its static
11236
+ // type can't reflect the final shape declared by this function's overload signatures.
11237
+ return action;
11238
+ }
11239
+
11061
11240
  var cjs;
11062
11241
  var hasRequiredCjs;
11063
11242
 
@@ -11202,6 +11381,13 @@ function requireCjs () {
11202
11381
  var cjsExports = requireCjs();
11203
11382
  var deepmerge = /*@__PURE__*/getDefaultExportFromCjs(cjsExports);
11204
11383
 
11384
+ /**
11385
+ * Static, lowercase kebab-case label used for operational source kinds, modules and operations.
11386
+ * Open-ended so any host or module can define its own labels, while the character set
11387
+ * prevents URLs, user names, paths or payload fragments from becoming exported labels.
11388
+ */
11389
+ const operationalIdentifier = string().regex(/^[a-z][a-z0-9-]*$/);
11390
+
11205
11391
  /**
11206
11392
  * Enum representing the severity levels of telemetry items.
11207
11393
  *
@@ -11262,6 +11448,24 @@ const TelemetryItemNames = {
11262
11448
  MetadataError: 'TelemetryMetadataError',
11263
11449
  };
11264
11450
 
11451
+ /** Allowlisted operational context, captured before enrichment and preserved across relay. */
11452
+ const diagnosticContext = object({
11453
+ schemaVersion: literal(1),
11454
+ source: operationalIdentifier.optional(),
11455
+ hostId: string(),
11456
+ hostName: string().optional(),
11457
+ hostVersion: string().optional(),
11458
+ module: operationalIdentifier,
11459
+ operation: operationalIdentifier,
11460
+ outcome: _enum(['success', 'failure', 'cancelled']),
11461
+ occurredAt: number().finite().nonnegative(),
11462
+ unit: literal('ms'),
11463
+ traceId: string().optional(),
11464
+ spanId: string().optional(),
11465
+ traceFlags: number().int().min(0).max(255).optional(),
11466
+ })
11467
+ .strict();
11468
+
11265
11469
  /**
11266
11470
  * Schema for a telemetry item, defining the structure and validation rules for telemetry data.
11267
11471
  *
@@ -11273,6 +11477,7 @@ const TelemetryItemNames = {
11273
11477
  */
11274
11478
  const TelemetryItemSchema = object({
11275
11479
  name: string().describe('The name of the telemetry item.'),
11480
+ diagnostic: diagnosticContext.optional(),
11276
11481
  type: nativeEnum(TelemetryType).describe('The type of telemetry. Defaults to Custom.'),
11277
11482
  level: nativeEnum(TelemetryLevel)
11278
11483
  .optional()
@@ -11334,7 +11539,588 @@ const TelemetryCustomEventSchema = TelemetryEventSchema.extend({
11334
11539
  type: literal(TelemetryType.Custom),
11335
11540
  }).passthrough();
11336
11541
 
11337
- /*! @azure/msal-common v16.14.2 2026-10-02 */
11542
+ /**
11543
+ * Scope for built-in operational records: the host's own kind, when it classified itself,
11544
+ * followed by `operational`. Built-in records never inherit a provider's custom default scope.
11545
+ * @param source - Host identity captured by the composition root.
11546
+ * @returns The record scope.
11547
+ */
11548
+ function operationalScope(source) {
11549
+ return source.source ? [source.source, 'operational'] : ['operational'];
11550
+ }
11551
+
11552
+ /**
11553
+ * Actions describing a telemetry provider's lifecycle, in-flight work and health.
11554
+ *
11555
+ * `initialize` and `dispose` are async actions: the request carries the shared operation
11556
+ * promise, flows perform the work, and the success or failure action settles that promise.
11557
+ */
11558
+ const telemetryProviderActions = {
11559
+ /** Connects exporters, the parent relay and startup streams once. */
11560
+ initialize: createAsyncAction('telemetry/initialize', (args, operation) => ({
11561
+ payload: args,
11562
+ meta: { operation },
11563
+ }), () => ({ payload: undefined }), (error) => ({ payload: error })),
11564
+ /** Drains owned work, closes delivery and shuts down exporters once. */
11565
+ dispose: createAsyncAction('telemetry/dispose', (operation) => ({ payload: undefined, meta: { operation } }), () => ({ payload: undefined }), (error) => ({ payload: error })),
11566
+ /** Delivery closed after bounded built-in enrichment drained; custom enrichment is canceled. */
11567
+ close: createAction('telemetry/close'),
11568
+ /** One metadata enrichment entered flight; built-in enrichment is awaited at shutdown. */
11569
+ enrichmentStarted: createAction('telemetry/enrichment/started', (builtIn) => ({
11570
+ payload: { builtIn },
11571
+ })),
11572
+ /** One metadata enrichment left flight. */
11573
+ enrichmentSettled: createAction('telemetry/enrichment/settled', (builtIn) => ({
11574
+ payload: { builtIn },
11575
+ })),
11576
+ /** Asynchronous processing entered flight for one adapter. */
11577
+ processingStarted: createAction('telemetry/processing/started', (adapter) => ({
11578
+ payload: adapter,
11579
+ })),
11580
+ /** Asynchronous processing left flight for one adapter. */
11581
+ processingSettled: createAction('telemetry/processing/settled', (adapter) => ({
11582
+ payload: adapter,
11583
+ })),
11584
+ /** A pipeline health failure occurred; occurrences are counted by message. */
11585
+ failed: createAction('telemetry/failed', (error) => ({ payload: error })),
11586
+ };
11587
+
11588
+ /**
11589
+ * Creates the safe, versioned `diagnostic` envelope for a built-in record.
11590
+ *
11591
+ * Use it for operational notifications that have no measured duration, such as navigation
11592
+ * or cache events; use `createOperationalRecords` for measured terminal outcomes. The envelope
11593
+ * captures occurrence time and the active OpenTelemetry span now, so later enrichment or
11594
+ * relaying cannot change where or when the outcome happened.
11595
+ *
11596
+ * @param args - Host identity and static operation identity.
11597
+ * @returns A diagnostic envelope that passes the strict diagnostic schema.
11598
+ * @throws {RangeError} When the source kind, module or operation is not a static identifier.
11599
+ * @example
11600
+ * ```ts
11601
+ * telemetry.trackEvent({
11602
+ * name: 'Navigation::navigated',
11603
+ * level: TelemetryLevel.Information,
11604
+ * diagnostic: createDiagnosticContext({
11605
+ * source: telemetry.source,
11606
+ * module: 'navigation',
11607
+ * operation: 'notification',
11608
+ * outcome: 'success',
11609
+ * }),
11610
+ * });
11611
+ * ```
11612
+ */
11613
+ function createDiagnosticContext(args) {
11614
+ const { source, module, operation, outcome } = args;
11615
+ // Host-defined labels are open-ended but must stay static identifiers; the kind is optional.
11616
+ const invalid = [source.source, module, operation].some((label) => label !== undefined && !operationalIdentifier.safeParse(label).success);
11617
+ // Reject before capture, so a dynamic label can never reach an exported record.
11618
+ if (invalid) {
11619
+ throw new RangeError('Invalid operational telemetry identifier');
11620
+ }
11621
+ const span = trace.getSpanContext(context.active());
11622
+ // Host identity first; the fixed envelope fields cannot be overridden by it.
11623
+ return {
11624
+ ...source,
11625
+ schemaVersion: 1,
11626
+ module,
11627
+ operation,
11628
+ outcome,
11629
+ occurredAt: Date.now(),
11630
+ unit: 'ms',
11631
+ // Correlate with the caller's active span only when one exists; never create spans.
11632
+ ...(span ? { traceId: span.traceId, spanId: span.spanId, traceFlags: span.traceFlags } : {}),
11633
+ };
11634
+ }
11635
+
11636
+ /**
11637
+ * Creates a terminal duration and, on failure, a controlled exception without copying payloads.
11638
+ * @param args - Static operation identity, host identity, outcome, and elapsed milliseconds.
11639
+ * @returns One duration metric and at most one sanitized exception.
11640
+ * @throws {RangeError} When duration or static operation identifiers are invalid.
11641
+ * @example
11642
+ * ```ts
11643
+ * const records = createOperationalRecords({
11644
+ * source: { source: 'app', hostId: crypto.randomUUID() },
11645
+ * module: 'host', operation: 'initialize', outcome: 'success', duration: 0,
11646
+ * });
11647
+ * ```
11648
+ */
11649
+ function createOperationalRecords(args) {
11650
+ // A finite, non-negative measurement keeps duration metrics meaningful; zero is valid.
11651
+ if (!Number.isFinite(args.duration) || args.duration < 0) {
11652
+ throw new RangeError('Invalid operational telemetry duration');
11653
+ }
11654
+ // Capture origin and existing correlation before asynchronous enrichment or relaying.
11655
+ const diagnostic = createDiagnosticContext(args);
11656
+ const name = `fusion.${args.module}.${args.operation}`;
11657
+ // The measurement is not itself the error: its outcome marks a failure, and the exception
11658
+ // alone carries Error severity, so each failure counts once in error views.
11659
+ const metric = {
11660
+ name: `${name}.duration`,
11661
+ type: TelemetryType.Metric,
11662
+ level: TelemetryLevel.Information,
11663
+ value: args.duration,
11664
+ scope: operationalScope(args.source),
11665
+ diagnostic,
11666
+ ...(args.properties ? { properties: { ...args.properties } } : {}),
11667
+ };
11668
+ // Success and cancellation do not fabricate exception records.
11669
+ if (args.outcome !== 'failure') {
11670
+ return [metric];
11671
+ }
11672
+ // The record name is built from validated static identifiers, so it is safe to name the
11673
+ // failed operation; the original error, message and stack are never copied.
11674
+ const exception = new Error(`${name} failed`);
11675
+ exception.name = 'OperationalError';
11676
+ exception.stack = undefined;
11677
+ const failure = {
11678
+ name: `${name}.failure`,
11679
+ type: TelemetryType.Exception,
11680
+ level: TelemetryLevel.Error,
11681
+ exception: Object.freeze(exception),
11682
+ scope: metric.scope,
11683
+ diagnostic,
11684
+ ...(args.properties ? { properties: { ...args.properties } } : {}),
11685
+ };
11686
+ return [metric, failure];
11687
+ }
11688
+
11689
+ /** Named levels keep optional integrations independent of runtime enum imports. */
11690
+ const notificationLevels = {
11691
+ debug: TelemetryLevel.Debug,
11692
+ information: TelemetryLevel.Information,
11693
+ warning: TelemetryLevel.Warning,
11694
+ error: TelemetryLevel.Error,
11695
+ critical: TelemetryLevel.Critical,
11696
+ };
11697
+ /**
11698
+ * Creates a reporter for a module's built-in operational outcomes. Internal building block of
11699
+ * `createOperationalTelemetry` and the shared HTTP and query integrations.
11700
+ *
11701
+ * Each measured report becomes one `fusion.<module>.<operation>.duration` metric, plus one
11702
+ * sanitized `.failure` exception on failure; each notification becomes one
11703
+ * `fusion.<module>.<operation>` event. Records carry only the safe `diagnostic` envelope and
11704
+ * the provider's host identity, never arguments, payloads or original errors.
11705
+ *
11706
+ * The provider is resolved on every report, so a module can connect telemetry after
11707
+ * initialization and disconnect it on teardown by returning `undefined`. Telemetry is
11708
+ * optional: without a provider nothing is recorded. Delivery failures, including a custom
11709
+ * provider without host `source` identity, never reach the business operation and produce
11710
+ * one sanitized console warning per reporter.
11711
+ *
11712
+ * @param provider - Lazy provider resolution avoids startup dependency cycles.
11713
+ * @returns A reporter accepting only allowlisted outcome inputs.
11714
+ * @throws No errors escape; invalid providers are reported once outside the export pipeline.
11715
+ */
11716
+ function createOperationalReporter(provider) {
11717
+ let reported = false;
11718
+ return (report) => {
11719
+ try {
11720
+ const target = provider();
11721
+ // Optional telemetry must not impose a dependency on business operations.
11722
+ if (!target) {
11723
+ return;
11724
+ }
11725
+ // Refuse ambiguous ownership rather than inventing a source for a custom provider.
11726
+ if (!target.source) {
11727
+ throw new Error('Operational telemetry requires host source identity');
11728
+ }
11729
+ const source = target.source;
11730
+ // Notifications have no measured duration, so they are events with the same envelope.
11731
+ if ('notification' in report) {
11732
+ target.trackEvent({
11733
+ name: `fusion.${report.module}.${report.operation}`,
11734
+ level: (typeof report.level === 'string' ? notificationLevels[report.level] : report.level) ??
11735
+ (report.outcome === 'failure' ? TelemetryLevel.Error : TelemetryLevel.Information),
11736
+ scope: operationalScope(source),
11737
+ diagnostic: createDiagnosticContext({ ...report, source }),
11738
+ ...(report.properties ? { properties: { ...report.properties } } : {}),
11739
+ });
11740
+ return;
11741
+ }
11742
+ // Failure records pair the terminal measurement with one controlled exception.
11743
+ for (const record of createOperationalRecords({ ...report, source })) {
11744
+ target.track(record);
11745
+ }
11746
+ }
11747
+ catch {
11748
+ // Delivery failures are diagnostic health, never recursive exported exceptions.
11749
+ if (!reported) {
11750
+ reported = true;
11751
+ console.warn('Operational telemetry delivery failed');
11752
+ }
11753
+ }
11754
+ };
11755
+ }
11756
+
11757
+ /** Weak classifications shared across scopes without retaining or mutating business errors. */
11758
+ const operationalErrorState = {
11759
+ cancellations: new WeakSet(),
11760
+ reasons: new WeakMap(),
11761
+ };
11762
+
11763
+ /**
11764
+ * Classifies failure or cancellation through at most five wrapped causes.
11765
+ * @param error - Original operation error.
11766
+ * @returns Terminal outcome and an optional controlled reason.
11767
+ */
11768
+ function classifyOperationalError(error) {
11769
+ let current = error;
11770
+ let reason;
11771
+ // Bound traversal even for cyclic causes.
11772
+ for (let depth = 0; depth < 5 && current && typeof current === 'object'; depth++) {
11773
+ reason ??= operationalErrorState.reasons.get(current);
11774
+ // A marked nested cancellation wins over a wrapping failure.
11775
+ if (operationalErrorState.cancellations.has(current)) {
11776
+ return { outcome: 'cancelled', reason };
11777
+ }
11778
+ current = 'cause' in current ? current.cause : undefined;
11779
+ }
11780
+ return { outcome: 'failure', reason };
11781
+ }
11782
+
11783
+ /**
11784
+ * Marks a deliberate cancellation without mutating the caller's error.
11785
+ * @template T - Error object type.
11786
+ * @param error - Original error.
11787
+ * @param reason - Optional controlled reason code.
11788
+ * @returns The original error.
11789
+ */
11790
+ function markOperationalCancellation(error, reason) {
11791
+ operationalErrorState.cancellations.add(error);
11792
+ // Reason codes are optional; an existing classification must survive an unqualified mark.
11793
+ if (reason) {
11794
+ operationalErrorState.reasons.set(error, reason);
11795
+ }
11796
+ return error;
11797
+ }
11798
+
11799
+ /**
11800
+ * Associates a controlled reason code with an error without changing it.
11801
+ * @template T - Error object type.
11802
+ * @param error - Original error.
11803
+ * @param reason - Static reason code, never error text.
11804
+ * @returns The original error.
11805
+ */
11806
+ function markOperationalReason(error, reason) {
11807
+ operationalErrorState.reasons.set(error, reason);
11808
+ return error;
11809
+ }
11810
+
11811
+ const safeKey = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
11812
+ const safeVersion = /^[0-9A-Za-z][0-9A-Za-z.+-]{0,63}$/;
11813
+ /**
11814
+ * Omits identity containing paths, URLs, whitespace or unbounded dynamic fragments.
11815
+ * @param value - Candidate static identity.
11816
+ * @param kind - Identifier or semantic-version-like identity.
11817
+ * @returns Validated identity, or undefined when unsafe.
11818
+ */
11819
+ function safeOperationalIdentity(value, kind = 'key') {
11820
+ return typeof value === 'string' && (kind === 'key' ? safeKey : safeVersion).test(value)
11821
+ ? value
11822
+ : undefined;
11823
+ }
11824
+
11825
+ const noop = () => undefined;
11826
+ /** Shared bounded operation lifecycle behind the public telemetry factory. */
11827
+ class OperationalTelemetryHandle {
11828
+ module;
11829
+ options;
11830
+ parent;
11831
+ /** {@inheritDoc OperationalTelemetry.classifyError} */
11832
+ classifyError = classifyOperationalError;
11833
+ /** {@inheritDoc OperationalTelemetry.markCancellation} */
11834
+ markCancellation = markOperationalCancellation;
11835
+ /** {@inheritDoc OperationalTelemetry.markReason} */
11836
+ markReason = markOperationalReason;
11837
+ /** {@inheritDoc OperationalTelemetry.safeIdentity} */
11838
+ safeIdentity = safeOperationalIdentity;
11839
+ #pending = new Set();
11840
+ #busyChildren = new Set();
11841
+ #teardowns = [];
11842
+ #target;
11843
+ #closed = false;
11844
+ #warned = false;
11845
+ #reporter;
11846
+ /**
11847
+ * Creates one scope; children resolve their target through the parent.
11848
+ * @param module - Validated static module label.
11849
+ * @param options - End-time identity.
11850
+ * @param parent - Owning scope, when this is a child.
11851
+ */
11852
+ constructor(module, options, parent) {
11853
+ this.module = module;
11854
+ this.options = options;
11855
+ this.parent = parent;
11856
+ this.#reporter = createOperationalReporter(() => this.#resolve());
11857
+ }
11858
+ /** {@inheritDoc OperationalTelemetry.connected} */
11859
+ get connected() {
11860
+ return this.active;
11861
+ }
11862
+ /** {@inheritDoc OperationalTelemetry.active} */
11863
+ get active() {
11864
+ return this.#resolve() !== undefined;
11865
+ }
11866
+ /** {@inheritDoc OperationalTelemetry.pending} */
11867
+ get pending() {
11868
+ return this.#pending.size;
11869
+ }
11870
+ /** {@inheritDoc OperationalTelemetry.connect} */
11871
+ connect = (target) => {
11872
+ // Scope disposal is final, even if a host tries to reconnect it.
11873
+ if (!this.#closed) {
11874
+ this.#target = target;
11875
+ }
11876
+ };
11877
+ /** {@inheritDoc OperationalTelemetry.disconnect} */
11878
+ disconnect = () => {
11879
+ this.close();
11880
+ };
11881
+ /** {@inheritDoc OperationalTelemetry.report} */
11882
+ report = (report) => {
11883
+ this.#reporter({ ...report, module: this.module });
11884
+ };
11885
+ /** {@inheritDoc OperationalTelemetry.createScope} */
11886
+ createScope(options) {
11887
+ const child = new OperationalTelemetryHandle(this.module, options, this);
11888
+ // Children cannot revive closed ownership.
11889
+ if (this.#closed) {
11890
+ child.close();
11891
+ }
11892
+ return child;
11893
+ }
11894
+ /** {@inheritDoc OperationalTelemetry.start} */
11895
+ start(operation, properties) {
11896
+ return this.reserve(operation, properties) ?? noop;
11897
+ }
11898
+ /** {@inheritDoc OperationalTelemetry.reserve} */
11899
+ reserve(operation, properties) {
11900
+ // Absent or disposed telemetry retains no timers or observation work.
11901
+ if (!this.active) {
11902
+ return undefined;
11903
+ }
11904
+ // Hung operations must not grow an unbounded set of retained callbacks.
11905
+ if (this.#pending.size >= 256) {
11906
+ this.#warn('pending-operation capacity exceeded');
11907
+ return undefined;
11908
+ }
11909
+ const started = performance.now();
11910
+ const end = (outcome, extra) => {
11911
+ // Only the first terminal path records, even when teardown races with completion.
11912
+ if (!this.#pending.delete(end)) {
11913
+ return;
11914
+ }
11915
+ this.#releaseParentIfIdle();
11916
+ try {
11917
+ // Terminal fields override late-resolved identity, which extends the initial summaries.
11918
+ const fields = { ...properties, ...this.options?.identity?.(), ...extra };
11919
+ this.report({
11920
+ operation,
11921
+ outcome,
11922
+ duration: Math.max(0, performance.now() - started),
11923
+ ...(Object.keys(fields).length ? { properties: fields } : {}),
11924
+ });
11925
+ }
11926
+ catch {
11927
+ this.#warn('identity resolution failed');
11928
+ }
11929
+ };
11930
+ this.#pending.add(end);
11931
+ this.#retainParent();
11932
+ return end;
11933
+ }
11934
+ /** {@inheritDoc OperationalTelemetry.measure} */
11935
+ measure(operation, properties) {
11936
+ return (source) => defer(() => {
11937
+ const end = this.reserve(operation, properties);
11938
+ // With no retained timer, do not add observers to the business stream.
11939
+ if (!end) {
11940
+ return source;
11941
+ }
11942
+ let emitted = false;
11943
+ // Linked operators preserve synchronous downstream unsubscription and original errors.
11944
+ return source.pipe(tap({
11945
+ next: () => {
11946
+ emitted = true;
11947
+ },
11948
+ error: (error) => {
11949
+ const { outcome, reason } = classifyOperationalError(error);
11950
+ end(outcome, reason ? { reason } : undefined);
11951
+ },
11952
+ complete: () => end('success'),
11953
+ }), finalize$1(() => end(emitted ? 'success' : 'cancelled')));
11954
+ });
11955
+ }
11956
+ /** {@inheritDoc OperationalTelemetry.notify} */
11957
+ notify(operation, outcome, properties) {
11958
+ this.report({
11959
+ operation,
11960
+ outcome,
11961
+ properties,
11962
+ notification: true,
11963
+ level: outcome === 'failure' ? TelemetryLevel.Warning : TelemetryLevel.Information,
11964
+ });
11965
+ }
11966
+ /** {@inheritDoc OperationalTelemetry.own} */
11967
+ own(teardown) {
11968
+ // Idle children can outlive an ancestor without being retained by it.
11969
+ if (this.#isClosed()) {
11970
+ this.#release(teardown);
11971
+ return;
11972
+ }
11973
+ this.#teardowns.push(teardown);
11974
+ this.#retainParent();
11975
+ }
11976
+ /** {@inheritDoc OperationalTelemetry.cancelPending} */
11977
+ cancelPending(properties) {
11978
+ // Each end removes itself, so iterate a stable snapshot.
11979
+ for (const end of [...this.#pending]) {
11980
+ end('cancelled', properties);
11981
+ }
11982
+ }
11983
+ /** {@inheritDoc OperationalTelemetry.close} */
11984
+ close(properties) {
11985
+ // Repeated disposal must neither emit nor release resources twice.
11986
+ if (this.#closed) {
11987
+ return;
11988
+ }
11989
+ // Children need the live parent target to record their cancellations.
11990
+ for (const child of [...this.#busyChildren]) {
11991
+ child.close(properties);
11992
+ }
11993
+ this.cancelPending(properties);
11994
+ this.#closed = true;
11995
+ this.#target = undefined;
11996
+ // Idle descendants resolve closure through their ancestor rather than being retained.
11997
+ if (this.parent) {
11998
+ this.parent.#busyChildren.delete(this);
11999
+ this.parent.#releaseParentIfIdle();
12000
+ }
12001
+ const teardowns = this.#teardowns;
12002
+ this.#teardowns = [];
12003
+ // One failing observer must not prevent other observers from being released.
12004
+ for (const teardown of teardowns) {
12005
+ this.#release(teardown);
12006
+ }
12007
+ }
12008
+ /**
12009
+ * Resolves live ownership without retaining idle children.
12010
+ * @returns The live ancestor's telemetry target, or undefined after closure.
12011
+ */
12012
+ #resolve() {
12013
+ // Cleared targets alone cannot prevent a child from reconnecting after final disposal.
12014
+ if (this.#closed) {
12015
+ return undefined;
12016
+ }
12017
+ return this.parent ? this.parent.#resolve() : this.#target;
12018
+ }
12019
+ /**
12020
+ * Includes closed idle ancestors, which are deliberately not retained in child sets.
12021
+ * @returns Whether this scope or any ancestor has closed.
12022
+ */
12023
+ #isClosed() {
12024
+ return this.#closed || (this.parent ? this.parent.#isClosed() : false);
12025
+ }
12026
+ /** Keeps every ancestor aware of owned work, including nested scopes. */
12027
+ #retainParent() {
12028
+ // Propagate busy ownership through all ancestors, not only the immediate parent.
12029
+ if (this.parent) {
12030
+ this.parent.#busyChildren.add(this);
12031
+ this.parent.#retainParent();
12032
+ }
12033
+ }
12034
+ /** Drops settled children so abandoned idle owners are not retained. */
12035
+ #releaseParentIfIdle() {
12036
+ // Retain only work or resources, never abandoned idle child handles.
12037
+ if (!this.#pending.size && !this.#busyChildren.size && !this.#teardowns.length) {
12038
+ // Settling the last descendant can also make its ancestors idle.
12039
+ if (this.parent) {
12040
+ this.parent.#busyChildren.delete(this);
12041
+ this.parent.#releaseParentIfIdle();
12042
+ }
12043
+ }
12044
+ }
12045
+ /**
12046
+ * Isolates resource failures so all owned observers are released.
12047
+ * @param teardown - Owned diagnostic resource.
12048
+ */
12049
+ #release(teardown) {
12050
+ try {
12051
+ // Accept RxJS subscriptions without making plain teardowns allocate subscriptions.
12052
+ if (typeof teardown === 'function') {
12053
+ teardown();
12054
+ }
12055
+ else {
12056
+ teardown.unsubscribe();
12057
+ }
12058
+ }
12059
+ catch {
12060
+ this.#warn('diagnostic teardown failed');
12061
+ }
12062
+ }
12063
+ /**
12064
+ * Bounds sanitized local diagnostics independently of exported operational records.
12065
+ * @param reason - Static local diagnostic.
12066
+ */
12067
+ #warn(reason) {
12068
+ // Local diagnostic failures cannot amplify into repeated warnings or exported records.
12069
+ if (!this.#warned) {
12070
+ this.#warned = true;
12071
+ console.warn(`Operational telemetry for ${this.module}: ${reason}`);
12072
+ }
12073
+ }
12074
+ }
12075
+
12076
+ /**
12077
+ * Creates the operational telemetry handle a module uses to report safe outcomes.
12078
+ *
12079
+ * This is the common wiring pattern for framework modules: the provider owns the handle,
12080
+ * the module connects it after initialization, and teardown disconnects it. A measured report
12081
+ * becomes one `fusion.<module>.<operation>.duration` metric, plus one sanitized `.failure`
12082
+ * exception on failure; a notification becomes one `fusion.<module>.<operation>` event.
12083
+ * Telemetry stays optional: until connected, nothing is recorded. Delivery failures never
12084
+ * reach the business operation and produce one sanitized console warning per handle.
12085
+ *
12086
+ * @param module - Static kebab-case module label, such as `signalr`.
12087
+ * @param options - Optional static identity resolved when measured operations end.
12088
+ * @returns A disconnected handle.
12089
+ * @throws {RangeError} When `module` is not a static kebab-case identifier.
12090
+ * @example
12091
+ * ```ts
12092
+ * class SignalRProvider extends BaseModuleProvider<Config> implements TelemetryConnectable {
12093
+ * #telemetry = createOperationalTelemetry('signalr');
12094
+ *
12095
+ * constructor(config: Config) {
12096
+ * super({ version, config });
12097
+ * this._addTeardown(() => this.#telemetry.disconnect());
12098
+ * }
12099
+ *
12100
+ * connectTelemetry(telemetry: ITelemetryProvider | undefined): void {
12101
+ * this.#telemetry.connect(telemetry);
12102
+ * }
12103
+ *
12104
+ * async connect(): Promise<void> {
12105
+ * const started = performance.now();
12106
+ * await this.#start();
12107
+ * this.#telemetry.report({ operation: 'connect', outcome: 'success', duration: performance.now() - started });
12108
+ * }
12109
+ * }
12110
+ *
12111
+ * // Module descriptor: connect after initialization, so startup never waits for telemetry.
12112
+ * postInitialize: async ({ instance, modules }) => instance.connectTelemetry?.(modules.telemetry),
12113
+ * ```
12114
+ */
12115
+ function createOperationalTelemetry(module, options) {
12116
+ // A dynamic label would leak into every record name, so reject it when the handle is created.
12117
+ if (!operationalIdentifier.safeParse(module).success) {
12118
+ throw new RangeError('Invalid operational telemetry module');
12119
+ }
12120
+ return new OperationalTelemetryHandle(module, options);
12121
+ }
12122
+
12123
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11338
12124
  /*
11339
12125
  * Copyright (c) Microsoft Corporation. All rights reserved.
11340
12126
  * Licensed under the MIT License.
@@ -11388,7 +12174,7 @@ const RESOURCE = "resource";
11388
12174
  const CLI_DATA = "clidata";
11389
12175
  const ATTRIBUTE_TOKENS = "attribute_tokens";
11390
12176
 
11391
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12177
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11392
12178
  /*
11393
12179
  * Copyright (c) Microsoft Corporation. All rights reserved.
11394
12180
  * Licensed under the MIT License.
@@ -11622,7 +12408,7 @@ const JsonWebTokenTypes = {
11622
12408
  // Token renewal offset default in seconds
11623
12409
  const DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300;
11624
12410
 
11625
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12411
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11626
12412
  /*
11627
12413
  * Copyright (c) Microsoft Corporation. All rights reserved.
11628
12414
  * Licensed under the MIT License.
@@ -11651,7 +12437,7 @@ function createAuthError(code, correlationId, additionalMessage) {
11651
12437
  return new AuthError(code, correlationId, additionalMessage || getDefaultErrorMessage$1(code));
11652
12438
  }
11653
12439
 
11654
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12440
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11655
12441
 
11656
12442
  /*
11657
12443
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -11674,7 +12460,7 @@ function createClientAuthError(errorCode, correlationId, additionalMessage) {
11674
12460
  return new ClientAuthError(errorCode, correlationId, additionalMessage);
11675
12461
  }
11676
12462
 
11677
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12463
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11678
12464
  /*
11679
12465
  * Copyright (c) Microsoft Corporation. All rights reserved.
11680
12466
  * Licensed under the MIT License.
@@ -11712,7 +12498,7 @@ const methodNotImplemented = "method_not_implemented";
11712
12498
  const resourceParameterRequired = "resource_parameter_required";
11713
12499
  const misplacedResourceParam = "misplaced_resource_parameter";
11714
12500
 
11715
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12501
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11716
12502
 
11717
12503
  /*
11718
12504
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -11750,7 +12536,7 @@ function buildClientInfoFromHomeAccountId(homeAccountId) {
11750
12536
  };
11751
12537
  }
11752
12538
 
11753
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12539
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11754
12540
 
11755
12541
  /*
11756
12542
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -11816,7 +12602,7 @@ function getJWSPayload(authToken, correlationId) {
11816
12602
  return matches[2];
11817
12603
  }
11818
12604
 
11819
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12605
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11820
12606
 
11821
12607
  /*
11822
12608
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -11904,7 +12690,7 @@ function updateAccountTenantProfileData(baseAccountInfo, tenantProfile, idTokenC
11904
12690
  return updatedAccountInfo;
11905
12691
  }
11906
12692
 
11907
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12693
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11908
12694
  /*
11909
12695
  * Copyright (c) Microsoft Corporation. All rights reserved.
11910
12696
  * Licensed under the MIT License.
@@ -11918,7 +12704,7 @@ const AuthorityType = {
11918
12704
  Ciam: 3,
11919
12705
  };
11920
12706
 
11921
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12707
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11922
12708
  /*
11923
12709
  * Copyright (c) Microsoft Corporation. All rights reserved.
11924
12710
  * Licensed under the MIT License.
@@ -11940,7 +12726,7 @@ function getTenantIdFromIdTokenClaims(idTokenClaims) {
11940
12726
  return null;
11941
12727
  }
11942
12728
 
11943
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12729
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11944
12730
  /*
11945
12731
  * Copyright (c) Microsoft Corporation. All rights reserved.
11946
12732
  * Licensed under the MIT License.
@@ -11964,7 +12750,7 @@ const ProtocolMode = {
11964
12750
  EAR: "EAR",
11965
12751
  };
11966
12752
 
11967
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12753
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
11968
12754
  /**
11969
12755
  * Returns the AccountInfo interface for this account.
11970
12756
  * @internal
@@ -12153,7 +12939,7 @@ function isAccountEntity(entity) {
12153
12939
  entity.hasOwnProperty("authorityType"));
12154
12940
  }
12155
12941
 
12156
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12942
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12157
12943
  /*
12158
12944
  * Copyright (c) Microsoft Corporation. All rights reserved.
12159
12945
  * Licensed under the MIT License.
@@ -12163,7 +12949,7 @@ function isAccountEntity(entity) {
12163
12949
  */
12164
12950
  const unexpectedError = "unexpected_error";
12165
12951
 
12166
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12952
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12167
12953
 
12168
12954
  /*
12169
12955
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -12183,7 +12969,7 @@ function createClientConfigurationError(errorCode, correlationId) {
12183
12969
  return new ClientConfigurationError(errorCode, correlationId);
12184
12970
  }
12185
12971
 
12186
- /*! @azure/msal-common v16.14.2 2026-10-02 */
12972
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12187
12973
  /*
12188
12974
  * Copyright (c) Microsoft Corporation. All rights reserved.
12189
12975
  * Licensed under the MIT License.
@@ -12214,7 +13000,7 @@ const invalidDpopHtu = "invalid_dpop_htu";
12214
13000
  const invalidDpopNonce = "invalid_dpop_nonce";
12215
13001
  const dpopMissingResourceContext = "dpop_missing_resource_context";
12216
13002
 
12217
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13003
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12218
13004
  /*
12219
13005
  * Copyright (c) Microsoft Corporation. All rights reserved.
12220
13006
  * Licensed under the MIT License.
@@ -12226,7 +13012,7 @@ function isOpenIdConfigResponse(response) {
12226
13012
  response.hasOwnProperty("jwks_uri"));
12227
13013
  }
12228
13014
 
12229
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13015
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12230
13016
  /*
12231
13017
  * Copyright (c) Microsoft Corporation. All rights reserved.
12232
13018
  * Licensed under the MIT License.
@@ -12306,7 +13092,7 @@ class StringUtils {
12306
13092
  }
12307
13093
  }
12308
13094
 
12309
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13095
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12310
13096
 
12311
13097
  /*
12312
13098
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -12464,7 +13250,7 @@ class UrlString {
12464
13250
  }
12465
13251
  }
12466
13252
 
12467
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13253
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12468
13254
 
12469
13255
  /*
12470
13256
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -12618,7 +13404,7 @@ function getCloudDiscoveryMetadataFromNetworkResponse(response, authorityHost) {
12618
13404
  return null;
12619
13405
  }
12620
13406
 
12621
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13407
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12622
13408
  /*
12623
13409
  * Copyright (c) Microsoft Corporation. All rights reserved.
12624
13410
  * Licensed under the MIT License.
@@ -12627,7 +13413,7 @@ const AzureCloudInstance = {
12627
13413
  // AzureCloudInstance is not specified.
12628
13414
  None: "none"};
12629
13415
 
12630
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13416
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12631
13417
  /*
12632
13418
  * Copyright (c) Microsoft Corporation. All rights reserved.
12633
13419
  * Licensed under the MIT License.
@@ -12637,7 +13423,7 @@ function isCloudInstanceDiscoveryResponse(response) {
12637
13423
  response.hasOwnProperty("metadata"));
12638
13424
  }
12639
13425
 
12640
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13426
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12641
13427
  /*
12642
13428
  * Copyright (c) Microsoft Corporation. All rights reserved.
12643
13429
  * Licensed under the MIT License.
@@ -12647,7 +13433,7 @@ function isCloudInstanceDiscoveryErrorResponse(response) {
12647
13433
  response.hasOwnProperty("error_description"));
12648
13434
  }
12649
13435
 
12650
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13436
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12651
13437
  /*
12652
13438
  * Copyright (c) Microsoft Corporation. All rights reserved.
12653
13439
  * Licensed under the MIT License.
@@ -12718,7 +13504,7 @@ const RegionDiscoveryGetCurrentVersion = "regionDiscoveryGetCurrentVersion";
12718
13504
  const CacheManagerGetRefreshToken = "cacheManagerGetRefreshToken";
12719
13505
  const SetUserData = "setUserData";
12720
13506
 
12721
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13507
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12722
13508
  /*
12723
13509
  * Copyright (c) Microsoft Corporation. All rights reserved.
12724
13510
  * Licensed under the MIT License.
@@ -12811,7 +13597,7 @@ const invokeAsync = (callback, eventName, logger, telemetryClient, correlationId
12811
13597
  };
12812
13598
  };
12813
13599
 
12814
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13600
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12815
13601
 
12816
13602
  /*
12817
13603
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -12922,7 +13708,7 @@ RegionDiscovery.IMDS_OPTIONS = {
12922
13708
  },
12923
13709
  };
12924
13710
 
12925
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13711
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12926
13712
  /*
12927
13713
  * Copyright (c) Microsoft Corporation. All rights reserved.
12928
13714
  * Licensed under the MIT License.
@@ -12987,7 +13773,7 @@ function wasClockTurnedBack(cachedAt) {
12987
13773
  return cachedAtSec > nowSeconds();
12988
13774
  }
12989
13775
 
12990
- /*! @azure/msal-common v16.14.2 2026-10-02 */
13776
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
12991
13777
 
12992
13778
  /*
12993
13779
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -13274,7 +14060,7 @@ function serializeAttributeTokens(attributeTokens) {
13274
14060
  return [...attributeTokens].sort().join(" ");
13275
14061
  }
13276
14062
 
13277
- /*! @azure/msal-common v16.14.2 2026-10-02 */
14063
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
13278
14064
 
13279
14065
  /*
13280
14066
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -14242,7 +15028,7 @@ function buildStaticAuthorityOptions(authOptions) {
14242
15028
  };
14243
15029
  }
14244
15030
 
14245
- /*! @azure/msal-common v16.14.2 2026-10-02 */
15031
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
14246
15032
 
14247
15033
  /*
14248
15034
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -14276,7 +15062,7 @@ async function createDiscoveredInstance(authorityUri, networkClient, cacheManage
14276
15062
  }
14277
15063
  }
14278
15064
 
14279
- /*! @azure/msal-common v16.14.2 2026-10-02 */
15065
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
14280
15066
 
14281
15067
  /*
14282
15068
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -14472,7 +15258,7 @@ class ScopeSet {
14472
15258
  }
14473
15259
  }
14474
15260
 
14475
- /*! @azure/msal-common v16.14.2 2026-10-02 */
15261
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
14476
15262
 
14477
15263
  /*
14478
15264
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -14958,7 +15744,7 @@ function addAttributeTokens(parameters, attributeTokens) {
14958
15744
  }
14959
15745
  }
14960
15746
 
14961
- /*! @azure/msal-common v16.14.2 2026-10-02 */
15747
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
14962
15748
 
14963
15749
  /*
14964
15750
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -15080,7 +15866,7 @@ function validateUrl(url, logger, correlationId) {
15080
15866
  }
15081
15867
  }
15082
15868
 
15083
- /*! @azure/msal-common v16.14.2 2026-10-02 */
15869
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
15084
15870
 
15085
15871
  /*
15086
15872
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -15128,7 +15914,7 @@ const DEFAULT_CRYPTO_IMPLEMENTATION = {
15128
15914
  },
15129
15915
  };
15130
15916
 
15131
- /*! @azure/msal-common v16.14.2 2026-10-02 */
15917
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
15132
15918
 
15133
15919
  /*
15134
15920
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -15151,7 +15937,7 @@ const DEFAULT_TOKEN_BINDING_KEY_MANAGER = {
15151
15937
  },
15152
15938
  };
15153
15939
 
15154
- /*! @azure/msal-common v16.14.2 2026-10-02 */
15940
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
15155
15941
  /*
15156
15942
  * Copyright (c) Microsoft Corporation. All rights reserved.
15157
15943
  * Licensed under the MIT License.
@@ -15426,12 +16212,12 @@ class Logger {
15426
16212
  }
15427
16213
  }
15428
16214
 
15429
- /*! @azure/msal-common v16.14.2 2026-10-02 */
16215
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
15430
16216
  /* eslint-disable header/header */
15431
16217
  const name$1 = "@azure/msal-common";
15432
- const version$2 = "16.14.2";
16218
+ const version$2 = "16.14.3";
15433
16219
 
15434
- /*! @azure/msal-common v16.14.2 2026-10-02 */
16220
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
15435
16221
  /*
15436
16222
  * Copyright (c) Microsoft Corporation. All rights reserved.
15437
16223
  * Licensed under the MIT License.
@@ -15439,7 +16225,7 @@ const version$2 = "16.14.2";
15439
16225
  const cacheQuotaExceeded = "cache_quota_exceeded";
15440
16226
  const cacheErrorUnknown = "cache_error_unknown";
15441
16227
 
15442
- /*! @azure/msal-common v16.14.2 2026-10-02 */
16228
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
15443
16229
 
15444
16230
  /*
15445
16231
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -15477,7 +16263,7 @@ function createCacheError(e) {
15477
16263
  }
15478
16264
  }
15479
16265
 
15480
- /*! @azure/msal-common v16.14.2 2026-10-02 */
16266
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
15481
16267
 
15482
16268
  /*
15483
16269
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -16664,7 +17450,7 @@ class DefaultStorageClass extends CacheManager {
16664
17450
  }
16665
17451
  }
16666
17452
 
16667
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17453
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
16668
17454
  /*
16669
17455
  * Copyright (c) Microsoft Corporation. All rights reserved.
16670
17456
  * Licensed under the MIT License.
@@ -16678,7 +17464,7 @@ class DefaultStorageClass extends CacheManager {
16678
17464
  const PerformanceEventStatus = {
16679
17465
  InProgress: 1};
16680
17466
 
16681
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17467
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
16682
17468
 
16683
17469
  /*
16684
17470
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -16736,7 +17522,7 @@ class StubPerformanceClient {
16736
17522
  }
16737
17523
  }
16738
17524
 
16739
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17525
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
16740
17526
 
16741
17527
  /*
16742
17528
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -16834,7 +17620,7 @@ function isOidcProtocolMode(config) {
16834
17620
  return (config.authOptions.authority.options.protocolMode === ProtocolMode.OIDC);
16835
17621
  }
16836
17622
 
16837
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17623
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
16838
17624
  /*
16839
17625
  * Copyright (c) Microsoft Corporation. All rights reserved.
16840
17626
  * Licensed under the MIT License.
@@ -16861,7 +17647,7 @@ function isOidcProtocolMode(config) {
16861
17647
  }
16862
17648
  }
16863
17649
 
16864
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17650
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
16865
17651
 
16866
17652
  /*
16867
17653
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -16882,7 +17668,7 @@ function createJoseHeaderError(code, correlationId) {
16882
17668
  return new JoseHeaderError(code, correlationId);
16883
17669
  }
16884
17670
 
16885
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17671
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
16886
17672
  /*
16887
17673
  * Copyright (c) Microsoft Corporation. All rights reserved.
16888
17674
  * Licensed under the MIT License.
@@ -16907,7 +17693,7 @@ function isPlainObject(value) {
16907
17693
  return Object.getPrototypeOf(value) === proto;
16908
17694
  }
16909
17695
 
16910
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17696
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
16911
17697
  /*
16912
17698
  * Copyright (c) Microsoft Corporation. All rights reserved.
16913
17699
  * Licensed under the MIT License.
@@ -16917,7 +17703,7 @@ const missingAlgError = "missing_alg_error";
16917
17703
  const missingJwkError = "missing_jwk_error";
16918
17704
  const invalidJwkError = "invalid_jwk_error";
16919
17705
 
16920
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17706
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
16921
17707
 
16922
17708
  /*
16923
17709
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -16983,7 +17769,7 @@ class JoseHeader {
16983
17769
  }
16984
17770
  }
16985
17771
 
16986
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17772
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
16987
17773
 
16988
17774
  /*
16989
17775
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -17084,7 +17870,7 @@ class PopTokenGenerator {
17084
17870
  }
17085
17871
  }
17086
17872
 
17087
- /*! @azure/msal-common v16.14.2 2026-10-02 */
17873
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17088
17874
 
17089
17875
  /*
17090
17876
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -17229,7 +18015,7 @@ class DpopProofGenerator {
17229
18015
  }
17230
18016
  }
17231
18017
 
17232
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18018
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17233
18019
  /*
17234
18020
  * Copyright (c) Microsoft Corporation. All rights reserved.
17235
18021
  * Licensed under the MIT License.
@@ -17280,7 +18066,7 @@ const badToken = "bad_token";
17280
18066
  */
17281
18067
  const interruptedUser = "interrupted_user";
17282
18068
 
17283
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18069
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17284
18070
 
17285
18071
  /*
17286
18072
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -17347,7 +18133,7 @@ function createInteractionRequiredAuthError(errorCode, correlationId, errorMessa
17347
18133
  return new InteractionRequiredAuthError(errorCode, correlationId, errorMessage);
17348
18134
  }
17349
18135
 
17350
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18136
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17351
18137
 
17352
18138
  /*
17353
18139
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -17366,7 +18152,7 @@ class ServerError extends AuthError {
17366
18152
  }
17367
18153
  }
17368
18154
 
17369
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18155
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17370
18156
 
17371
18157
  /*
17372
18158
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -17437,7 +18223,7 @@ function parseRequestState(base64Decode, state, correlationId) {
17437
18223
  }
17438
18224
  }
17439
18225
 
17440
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18226
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17441
18227
 
17442
18228
  /*
17443
18229
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -17865,7 +18651,7 @@ function buildAccountToCache(cacheStorage, authority, homeAccountId, base64Decod
17865
18651
  return baseAccount;
17866
18652
  }
17867
18653
 
17868
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18654
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17869
18655
  /*
17870
18656
  * Copyright (c) Microsoft Corporation. All rights reserved.
17871
18657
  * Licensed under the MIT License.
@@ -17875,7 +18661,7 @@ const CcsCredentialType = {
17875
18661
  UPN: "UPN",
17876
18662
  };
17877
18663
 
17878
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18664
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17879
18665
  /*
17880
18666
  * Copyright (c) Microsoft Corporation. All rights reserved.
17881
18667
  * Licensed under the MIT License.
@@ -17894,7 +18680,7 @@ async function getClientAssertion(clientAssertion, clientId, tokenEndpoint, fmiP
17894
18680
  }
17895
18681
  }
17896
18682
 
17897
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18683
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17898
18684
 
17899
18685
  /*
17900
18686
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -17918,7 +18704,7 @@ function getRequestThumbprint(clientId, request, homeAccountId) {
17918
18704
  };
17919
18705
  }
17920
18706
 
17921
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18707
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
17922
18708
 
17923
18709
  /*
17924
18710
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -18004,7 +18790,7 @@ class ThrottlingUtils {
18004
18790
  }
18005
18791
  }
18006
18792
 
18007
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18793
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
18008
18794
 
18009
18795
  /*
18010
18796
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -18035,7 +18821,7 @@ function createNetworkError(error, httpStatus, responseHeaders, additionalError)
18035
18821
  return new NetworkError(error, httpStatus, responseHeaders);
18036
18822
  }
18037
18823
 
18038
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18824
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
18039
18825
 
18040
18826
  /*
18041
18827
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -18168,7 +18954,7 @@ async function sendPostRequest(thumbprint, tokenEndpoint, options, correlationId
18168
18954
  return response;
18169
18955
  }
18170
18956
 
18171
- /*! @azure/msal-common v16.14.2 2026-10-02 */
18957
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
18172
18958
 
18173
18959
  /*
18174
18960
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -18432,7 +19218,7 @@ class AuthorizationCodeClient {
18432
19218
  }
18433
19219
  }
18434
19220
 
18435
- /*! @azure/msal-common v16.14.2 2026-10-02 */
19221
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
18436
19222
 
18437
19223
  /*
18438
19224
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -18659,7 +19445,7 @@ function extractLoginHint(account) {
18659
19445
  return account.loginHint || account.idTokenClaims?.login_hint || null;
18660
19446
  }
18661
19447
 
18662
- /*! @azure/msal-common v16.14.2 2026-10-02 */
19448
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
18663
19449
 
18664
19450
  /*
18665
19451
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -18894,7 +19680,7 @@ class RefreshTokenClient {
18894
19680
  }
18895
19681
  }
18896
19682
 
18897
- /*! @azure/msal-common v16.14.2 2026-10-02 */
19683
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
18898
19684
 
18899
19685
  /*
18900
19686
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -19187,7 +19973,7 @@ class StubServerTelemetryManager extends ServerTelemetryManager {
19187
19973
  clearNativeBrokerErrorCode() { }
19188
19974
  }
19189
19975
 
19190
- /*! @azure/msal-common v16.14.2 2026-10-02 */
19976
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
19191
19977
 
19192
19978
  /*
19193
19979
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -19314,7 +20100,7 @@ class SilentFlowClient {
19314
20100
  }
19315
20101
  }
19316
20102
 
19317
- /*! @azure/msal-common v16.14.2 2026-10-02 */
20103
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
19318
20104
 
19319
20105
  /*
19320
20106
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -19330,7 +20116,7 @@ const StubbedNetworkModule = {
19330
20116
  },
19331
20117
  };
19332
20118
 
19333
- /*! @azure/msal-common v16.14.2 2026-10-02 */
20119
+ /*! @azure/msal-common v16.14.3 2026-10-21 */
19334
20120
 
19335
20121
  /*
19336
20122
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -19363,7 +20149,7 @@ function containsResourceParam(params) {
19363
20149
  return Object.prototype.hasOwnProperty.call(params, "resource");
19364
20150
  }
19365
20151
 
19366
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
20152
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
19367
20153
  /*
19368
20154
  * Copyright (c) Microsoft Corporation. All rights reserved.
19369
20155
  * Licensed under the MIT License.
@@ -19504,7 +20290,7 @@ const DecryptEarResponse = "decryptEarResponse";
19504
20290
  */
19505
20291
  const WaitForBridgeLateResponse = "waitForBridgeLateResponse";
19506
20292
 
19507
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
20293
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
19508
20294
 
19509
20295
  /*
19510
20296
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -19527,7 +20313,7 @@ function createBrowserAuthError(errorCode, correlationId, subError) {
19527
20313
  return new BrowserAuthError(errorCode, correlationId, subError);
19528
20314
  }
19529
20315
 
19530
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
20316
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
19531
20317
  /*
19532
20318
  * Copyright (c) Microsoft Corporation. All rights reserved.
19533
20319
  * Licensed under the MIT License.
@@ -19585,7 +20371,7 @@ const failedToDecryptEarResponse = "failed_to_decrypt_ear_response";
19585
20371
  const timedOut = "timed_out";
19586
20372
  const emptyResponse = "empty_response";
19587
20373
 
19588
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
20374
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
19589
20375
 
19590
20376
  /*
19591
20377
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -19624,7 +20410,7 @@ function base64DecToArr(base64String) {
19624
20410
  return Uint8Array.from(binString, (m) => m.codePointAt(0) || 0);
19625
20411
  }
19626
20412
 
19627
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
20413
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
19628
20414
 
19629
20415
  /*
19630
20416
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -19810,7 +20596,7 @@ const iFrameRenewalPolicies = [
19810
20596
  CacheLookupPolicy.RefreshTokenAndNetwork,
19811
20597
  ];
19812
20598
 
19813
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
20599
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
19814
20600
  /*
19815
20601
  * Copyright (c) Microsoft Corporation. All rights reserved.
19816
20602
  * Licensed under the MIT License.
@@ -19855,7 +20641,7 @@ function base64EncArr(aBytes) {
19855
20641
  return btoa(binString);
19856
20642
  }
19857
20643
 
19858
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
20644
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
19859
20645
 
19860
20646
  /*
19861
20647
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -20202,7 +20988,7 @@ async function computeJwkThumbprint(publicJwk, correlationId) {
20202
20988
  return hashString(thumbprintJson);
20203
20989
  }
20204
20990
 
20205
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
20991
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
20206
20992
 
20207
20993
  /*
20208
20994
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -20222,7 +21008,7 @@ function createBrowserConfigurationAuthError(errorCode, correlationId) {
20222
21008
  return new BrowserConfigurationAuthError(errorCode, correlationId, getDefaultErrorMessage(errorCode));
20223
21009
  }
20224
21010
 
20225
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
21011
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
20226
21012
  /*
20227
21013
  * Copyright (c) Microsoft Corporation. All rights reserved.
20228
21014
  * Licensed under the MIT License.
@@ -20230,7 +21016,7 @@ function createBrowserConfigurationAuthError(errorCode, correlationId) {
20230
21016
  const storageNotSupported = "storage_not_supported";
20231
21017
  const inMemRedirectUnavailable = "in_mem_redirect_unavailable";
20232
21018
 
20233
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
21019
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
20234
21020
 
20235
21021
  /*
20236
21022
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -20571,7 +21357,7 @@ function createGuid() {
20571
21357
  return createNewGuid();
20572
21358
  }
20573
21359
 
20574
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
21360
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
20575
21361
 
20576
21362
  /*
20577
21363
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -20774,7 +21560,7 @@ class DatabaseStorage {
20774
21560
  }
20775
21561
  }
20776
21562
 
20777
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
21563
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
20778
21564
  /*
20779
21565
  * Copyright (c) Microsoft Corporation. All rights reserved.
20780
21566
  * Licensed under the MIT License.
@@ -20820,7 +21606,7 @@ class MemoryStorage {
20820
21606
  }
20821
21607
  }
20822
21608
 
20823
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
21609
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
20824
21610
 
20825
21611
  /*
20826
21612
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -20958,7 +21744,7 @@ class AsyncMemoryStorage {
20958
21744
  }
20959
21745
  }
20960
21746
 
20961
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
21747
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
20962
21748
 
20963
21749
  /*
20964
21750
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -21106,7 +21892,7 @@ TokenBindingKeyManager.TOKEN_BINDING_KEY_USAGES = [
21106
21892
  "verify",
21107
21893
  ];
21108
21894
 
21109
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
21895
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21110
21896
 
21111
21897
  /*
21112
21898
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -21242,7 +22028,7 @@ class CryptoOps {
21242
22028
  }
21243
22029
  }
21244
22030
 
21245
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22031
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21246
22032
  /*
21247
22033
  * Copyright (c) Microsoft Corporation. All rights reserved.
21248
22034
  * Licensed under the MIT License.
@@ -21289,7 +22075,7 @@ const LocalStorageUpdated = "localStorageUpdated";
21289
22075
  */
21290
22076
  const SsoCapable = "ssoCapable";
21291
22077
 
21292
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22078
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21293
22079
  /*
21294
22080
  * Copyright (c) Microsoft Corporation. All rights reserved.
21295
22081
  * Licensed under the MIT License.
@@ -21318,7 +22104,7 @@ function getTokenKeysCacheKey(clientId, schema = CREDENTIAL_SCHEMA_VERSION) {
21318
22104
  return `${PREFIX}.${schema}.${TOKEN_KEYS}.${clientId}`;
21319
22105
  }
21320
22106
 
21321
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22107
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21322
22108
 
21323
22109
  /*
21324
22110
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -21409,7 +22195,7 @@ function getCookieExpirationTime(cookieLifeDays) {
21409
22195
  return expr.toUTCString();
21410
22196
  }
21411
22197
 
21412
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22198
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21413
22199
 
21414
22200
  /*
21415
22201
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -21451,7 +22237,7 @@ function getTokenKeys(clientId, storage, schemaVersion) {
21451
22237
  };
21452
22238
  }
21453
22239
 
21454
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22240
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21455
22241
  /*
21456
22242
  * Copyright (c) Microsoft Corporation. All rights reserved.
21457
22243
  * Licensed under the MIT License.
@@ -21462,7 +22248,7 @@ function isEncrypted(data) {
21462
22248
  data.hasOwnProperty("data"));
21463
22249
  }
21464
22250
 
21465
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22251
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21466
22252
 
21467
22253
  /*
21468
22254
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -21832,7 +22618,7 @@ class LocalStorage {
21832
22618
  }
21833
22619
  }
21834
22620
 
21835
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22621
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21836
22622
 
21837
22623
  /*
21838
22624
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -21874,7 +22660,7 @@ class SessionStorage {
21874
22660
  }
21875
22661
  }
21876
22662
 
21877
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22663
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21878
22664
  /*
21879
22665
  * Copyright (c) Microsoft Corporation. All rights reserved.
21880
22666
  * Licensed under the MIT License.
@@ -21902,12 +22688,12 @@ const EventType = {
21902
22688
  BROKER_CONNECTION_ESTABLISHED: "msal:brokerConnectionEstablished",
21903
22689
  };
21904
22690
 
21905
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22691
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21906
22692
  /* eslint-disable header/header */
21907
22693
  const name = "@azure/msal-browser";
21908
- const version$1 = "5.25.0";
22694
+ const version$1 = "5.26.0";
21909
22695
 
21910
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22696
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21911
22697
  /*
21912
22698
  * Copyright (c) Microsoft Corporation. All rights reserved.
21913
22699
  * Licensed under the MIT License.
@@ -21924,7 +22710,7 @@ function removeElementFromArray(array, element) {
21924
22710
  }
21925
22711
  }
21926
22712
 
21927
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
22713
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
21928
22714
 
21929
22715
  /*
21930
22716
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -23370,7 +24156,7 @@ const DEFAULT_BROWSER_CACHE_MANAGER = (clientId, logger, performanceClient, even
23370
24156
  return new BrowserCacheManager(clientId, cacheOptions, DEFAULT_CRYPTO_IMPLEMENTATION, logger, performanceClient, eventHandler, staticAuthorityOptions, tokenBindingKeyManager);
23371
24157
  };
23372
24158
 
23373
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
24159
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
23374
24160
  /*
23375
24161
  * Copyright (c) Microsoft Corporation. All rights reserved.
23376
24162
  * Licensed under the MIT License.
@@ -23417,7 +24203,7 @@ function getActiveAccount(browserStorage, correlationId) {
23417
24203
  return browserStorage.getActiveAccount(correlationId);
23418
24204
  }
23419
24205
 
23420
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
24206
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
23421
24207
 
23422
24208
  /*
23423
24209
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -23521,7 +24307,7 @@ class EventHandler {
23521
24307
  }
23522
24308
  }
23523
24309
 
23524
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
24310
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
23525
24311
 
23526
24312
  /*
23527
24313
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -23664,7 +24450,7 @@ async function clearCacheOnLogout(browserStorage, browserCrypto, logger, correla
23664
24450
  }
23665
24451
  }
23666
24452
 
23667
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
24453
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
23668
24454
 
23669
24455
  /*
23670
24456
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -23802,7 +24588,7 @@ function validateRequestMethod(interactionRequest, protocolMode) {
23802
24588
  return httpMethod;
23803
24589
  }
23804
24590
 
23805
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
24591
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
23806
24592
 
23807
24593
  /*
23808
24594
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -24009,7 +24795,56 @@ async function initializeAuthorizationRequest(request, interactionType, config,
24009
24795
  return validatedRequest;
24010
24796
  }
24011
24797
 
24012
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
24798
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24799
+
24800
+ /*
24801
+ * Copyright (c) Microsoft Corporation. All rights reserved.
24802
+ * Licensed under the MIT License.
24803
+ */
24804
+ /**
24805
+ * Returns true when the supplied user agent is using Safari
24806
+ *
24807
+ * @internal
24808
+ */
24809
+ function isSafari(userAgent = typeof navigator !== "undefined"
24810
+ ? navigator.userAgent
24811
+ : "") {
24812
+ if (/OPR\/|OPiOS|PhantomJS|SamsungBrowser|Edge|EdgiOS|EdgA/.test(userAgent)) {
24813
+ return false;
24814
+ }
24815
+ const browserNavigator = typeof navigator !== "undefined"
24816
+ ? navigator
24817
+ : undefined;
24818
+ if (/Edg/.test(userAgent) ||
24819
+ browserNavigator?.userAgentData?.brands?.some((brand) => brand?.brand === "Microsoft Edge")) {
24820
+ return false;
24821
+ }
24822
+ if (/Electron|CriOS|Chrome|Trident|FxiOS|Firefox/.test(userAgent)) {
24823
+ return false;
24824
+ }
24825
+ return /Safari/.test(userAgent) || /AppleWebKit/.test(userAgent);
24826
+ }
24827
+ /**
24828
+ * Returns true when EAR should be used for the current request.
24829
+ *
24830
+ * Safari cannot complete EAR's cross-origin form POST, so requests configured
24831
+ * for EAR transparently use authorization code flow instead.
24832
+ *
24833
+ * @internal
24834
+ */
24835
+ function shouldUseEar(protocolMode, logger, performanceClient, correlationId, userAgent) {
24836
+ if (protocolMode !== ProtocolMode.EAR) {
24837
+ return false;
24838
+ }
24839
+ if (!isSafari(userAgent)) {
24840
+ return true;
24841
+ }
24842
+ logger.verbose("0wirye", correlationId);
24843
+ performanceClient.addFields({ "ext.earFallbackReason": "safari" }, correlationId);
24844
+ return false;
24845
+ }
24846
+
24847
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24013
24848
  /*
24014
24849
  * Copyright (c) Microsoft Corporation. All rights reserved.
24015
24850
  * Licensed under the MIT License.
@@ -24027,7 +24862,7 @@ async function initializeAuthorizationRequest(request, interactionType, config,
24027
24862
  */
24028
24863
  const POPUP_RELAY_RESPONSE_TYPE = "msal:popup-relay-response:v1";
24029
24864
 
24030
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
24865
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24031
24866
 
24032
24867
  /*
24033
24868
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -24133,7 +24968,7 @@ async function waitForPopupRelayResponse(timeoutMs, logger, request, popupWindow
24133
24968
  });
24134
24969
  }
24135
24970
 
24136
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
24971
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24137
24972
 
24138
24973
  /*
24139
24974
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -24157,7 +24992,7 @@ function extractBrowserRequestState(browserCrypto, state, correlationId) {
24157
24992
  }
24158
24993
  }
24159
24994
 
24160
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
24995
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24161
24996
 
24162
24997
  /*
24163
24998
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -24196,7 +25031,7 @@ function validateInteractionType(response, browserCrypto, interactionType, corre
24196
25031
  }
24197
25032
  }
24198
25033
 
24199
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
25034
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24200
25035
 
24201
25036
  /*
24202
25037
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -24285,7 +25120,7 @@ class InteractionHandler {
24285
25120
  }
24286
25121
  }
24287
25122
 
24288
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
25123
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24289
25124
 
24290
25125
  /*
24291
25126
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -24330,7 +25165,7 @@ function createPlatformAuthExtraParametersNoCache(extraParametersNoCache, isProo
24330
25165
  };
24331
25166
  }
24332
25167
 
24333
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
25168
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24334
25169
  /*
24335
25170
  * Copyright (c) Microsoft Corporation. All rights reserved.
24336
25171
  * Licensed under the MIT License.
@@ -24339,7 +25174,7 @@ const contentError = "ContentError";
24339
25174
  const pageException = "PageException";
24340
25175
  const userSwitch = "user_switch";
24341
25176
 
24342
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
25177
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24343
25178
  /*
24344
25179
  * Copyright (c) Microsoft Corporation. All rights reserved.
24345
25180
  * Licensed under the MIT License.
@@ -24352,7 +25187,7 @@ const DISABLED = "DISABLED";
24352
25187
  const ACCOUNT_UNAVAILABLE = "ACCOUNT_UNAVAILABLE";
24353
25188
  const UI_NOT_ALLOWED = "UI_NOT_ALLOWED";
24354
25189
 
24355
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
25190
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24356
25191
 
24357
25192
  /*
24358
25193
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -24424,7 +25259,7 @@ function createNativeAuthError(code, correlationId, description, ext) {
24424
25259
  return error;
24425
25260
  }
24426
25261
 
24427
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
25262
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24428
25263
 
24429
25264
  /*
24430
25265
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -24473,7 +25308,7 @@ class SilentCacheClient extends StandardInteractionClient {
24473
25308
  }
24474
25309
  }
24475
25310
 
24476
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
25311
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
24477
25312
 
24478
25313
  /*
24479
25314
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -25199,7 +26034,7 @@ class PlatformAuthInteractionClient extends BaseInteractionClient {
25199
26034
  }
25200
26035
  }
25201
26036
 
25202
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
26037
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
25203
26038
 
25204
26039
  /*
25205
26040
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -25512,7 +26347,7 @@ async function handleResponseEAR(request, response, apiId, config, authority, br
25512
26347
  return (await invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), HandleServerTokenResponse, logger, performanceClient, request.correlationId)(decryptedData, authority, nowSeconds(), request, apiId, additionalData, undefined, undefined, undefined, undefined));
25513
26348
  }
25514
26349
 
25515
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
26350
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
25516
26351
 
25517
26352
  /*
25518
26353
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -25567,7 +26402,7 @@ async function generateCodeChallengeFromVerifier(pkceCodeVerifier, performanceCl
25567
26402
  }
25568
26403
  }
25569
26404
 
25570
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
26405
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
25571
26406
 
25572
26407
  /*
25573
26408
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -25610,7 +26445,7 @@ class NavigationClient {
25610
26445
  }
25611
26446
  }
25612
26447
 
25613
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
26448
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
25614
26449
 
25615
26450
  /*
25616
26451
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -25757,7 +26592,7 @@ function getHeaderDict(headers) {
25757
26592
  }
25758
26593
  }
25759
26594
 
25760
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
26595
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
25761
26596
 
25762
26597
  /*
25763
26598
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -25888,7 +26723,7 @@ function buildConfiguration({ auth: userInputAuth, cache: userInputCache, system
25888
26723
  return overlayedConfig;
25889
26724
  }
25890
26725
 
25891
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
26726
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
25892
26727
 
25893
26728
  /*
25894
26729
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -26263,7 +27098,7 @@ class PlatformAuthExtensionHandler {
26263
27098
  }
26264
27099
  }
26265
27100
 
26266
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
27101
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
26267
27102
 
26268
27103
  /*
26269
27104
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -26514,7 +27349,7 @@ class PlatformAuthDOMHandler {
26514
27349
  }
26515
27350
  }
26516
27351
 
26517
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
27352
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
26518
27353
  async function getPlatformAuthProvider(logger, performanceClient, correlationId, nativeBrokerHandshakeTimeout, enablePlatformBrokerDOMSupport) {
26519
27354
  logger.trace("134j0v", correlationId);
26520
27355
  const discoveryMeasurement = performanceClient.startMeasurement(PlatformAuthProviderDiscovery, correlationId);
@@ -26616,7 +27451,7 @@ function isPlatformAuthAllowed(config, logger, correlationId, platformAuthProvid
26616
27451
  return true;
26617
27452
  }
26618
27453
 
26619
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
27454
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
26620
27455
 
26621
27456
  /*
26622
27457
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -26719,7 +27554,7 @@ class PopupClient extends StandardInteractionClient {
26719
27554
  }
26720
27555
  const isPlatformBroker = isPlatformAuthAllowed(this.config, this.logger, this.correlationId, this.platformAuthProvider, request.authenticationScheme);
26721
27556
  validRequest.platformBroker = isPlatformBroker;
26722
- if (this.config.system.protocolMode === ProtocolMode.EAR) {
27557
+ if (shouldUseEar(this.config.system.protocolMode, this.logger, this.performanceClient, this.correlationId)) {
26723
27558
  return this.executeEarFlow(validRequest, popupParams, pkceCodes);
26724
27559
  }
26725
27560
  else {
@@ -27125,7 +27960,7 @@ class PopupClient extends StandardInteractionClient {
27125
27960
  }
27126
27961
  }
27127
27962
 
27128
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
27963
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
27129
27964
 
27130
27965
  /*
27131
27966
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -27175,7 +28010,7 @@ class RedirectClient extends StandardInteractionClient {
27175
28010
  // Clear temporary cache if the back button is clicked during the redirect flow.
27176
28011
  window.addEventListener("pageshow", handleBackButton);
27177
28012
  try {
27178
- const redirectOperation = this.config.system.protocolMode === ProtocolMode.EAR
28013
+ const redirectOperation = shouldUseEar(this.config.system.protocolMode, this.logger, this.performanceClient, this.correlationId)
27179
28014
  ? this.executeEarFlow(validRequest)
27180
28015
  : this.executeCodeFlow(validRequest);
27181
28016
  await Promise.race([redirectOperation, backButtonCancellation]);
@@ -27575,7 +28410,7 @@ class RedirectClient extends StandardInteractionClient {
27575
28410
  }
27576
28411
  }
27577
28412
 
27578
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
28413
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
27579
28414
 
27580
28415
  /*
27581
28416
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -27641,7 +28476,7 @@ function removeHiddenIframe(iframe) {
27641
28476
  }
27642
28477
  }
27643
28478
 
27644
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
28479
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
27645
28480
 
27646
28481
  /*
27647
28482
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -27681,7 +28516,7 @@ class SilentIframeClient extends StandardInteractionClient {
27681
28516
  const silentRequest = await invokeAsync(initializeAuthorizationRequest, StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, this.correlationId)(inputRequest, InteractionType.Silent, this.config, this.browserCrypto, this.browserStorage, this.logger, this.performanceClient, this.correlationId);
27682
28517
  silentRequest.platformBroker = isPlatformAuthAllowed(this.config, this.logger, this.correlationId, this.platformAuthProvider, silentRequest.authenticationScheme);
27683
28518
  preconnect(silentRequest.authority);
27684
- if (this.config.system.protocolMode === ProtocolMode.EAR) {
28519
+ if (shouldUseEar(this.config.system.protocolMode, this.logger, this.performanceClient, this.correlationId)) {
27685
28520
  return this.executeEarFlow(silentRequest);
27686
28521
  }
27687
28522
  else {
@@ -27879,7 +28714,7 @@ class SilentIframeClient extends StandardInteractionClient {
27879
28714
  }
27880
28715
  }
27881
28716
 
27882
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
28717
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
27883
28718
 
27884
28719
  /*
27885
28720
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -27946,7 +28781,7 @@ class SilentRefreshClient extends StandardInteractionClient {
27946
28781
  }
27947
28782
  }
27948
28783
 
27949
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
28784
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
27950
28785
 
27951
28786
  /*
27952
28787
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -27959,7 +28794,7 @@ class HybridSpaAuthorizationCodeClient extends AuthorizationCodeClient {
27959
28794
  }
27960
28795
  }
27961
28796
 
27962
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
28797
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
27963
28798
 
27964
28799
  /*
27965
28800
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -28032,7 +28867,7 @@ class SilentAuthCodeClient extends StandardInteractionClient {
28032
28867
  }
28033
28868
  }
28034
28869
 
28035
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
28870
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
28036
28871
  function collectInstanceStats(currentClientId, performanceEvent, logger, correlationId) {
28037
28872
  const frameInstances =
28038
28873
  // @ts-ignore
@@ -28048,7 +28883,7 @@ function collectInstanceStats(currentClientId, performanceEvent, logger, correla
28048
28883
  });
28049
28884
  }
28050
28885
 
28051
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
28886
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
28052
28887
 
28053
28888
  /*
28054
28889
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -28066,14 +28901,20 @@ function resolveSilentRequestPreparation(input, platformAuthProvider, logger, pe
28066
28901
  return prepareRequest(input);
28067
28902
  }
28068
28903
  /**
28069
- * Preserves the standard web thumbprint and caller-owned request references.
28904
+ * Extends the web thumbprint with silent-flow options while preserving caller-owned references.
28070
28905
  */
28071
28906
  function prepareWebSilentRequest({ request, account, correlationId, config, }) {
28072
28907
  const thumbprint = getRequestThumbprint(config.auth.clientId, {
28073
28908
  ...request,
28074
28909
  authority: request.authority || config.auth.authority}, account.homeAccountId);
28075
28910
  return {
28076
- key: JSON.stringify(thumbprint),
28911
+ key: JSON.stringify({
28912
+ ...thumbprint,
28913
+ forceRefresh: !!request.forceRefresh,
28914
+ cacheLookupPolicy: request.cacheLookupPolicy ?? CacheLookupPolicy.Default,
28915
+ extraParameters: canonicalizeStringDict(request.extraParameters),
28916
+ extraQueryParameters: canonicalizeStringDict(request.extraQueryParameters),
28917
+ }),
28077
28918
  request,
28078
28919
  account,
28079
28920
  };
@@ -28167,7 +29008,7 @@ function canonicalizeStringDict(values = {}) {
28167
29008
  .map((key) => [key, values[key]]);
28168
29009
  }
28169
29010
 
28170
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
29011
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
28171
29012
 
28172
29013
  /*
28173
29014
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -29669,7 +30510,7 @@ function checkIfRefreshTokenErrorCanBeResolvedSilently(refreshTokenError, cacheL
29669
30510
  return isSilentlyResolvable && tryIframeRenewal;
29670
30511
  }
29671
30512
 
29672
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
30513
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
29673
30514
 
29674
30515
  /*
29675
30516
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -29774,7 +30615,7 @@ class BaseOperatingContext {
29774
30615
  }
29775
30616
  }
29776
30617
 
29777
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
30618
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
29778
30619
 
29779
30620
  /*
29780
30621
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -29821,7 +30662,7 @@ StandardOperatingContext.MODULE_NAME = "";
29821
30662
  */
29822
30663
  StandardOperatingContext.ID = "StandardOperatingContext";
29823
30664
 
29824
- /*! @azure/msal-browser v5.25.0 2026-10-06 */
30665
+ /*! @azure/msal-browser v5.26.0 2026-10-21 */
29825
30666
 
29826
30667
  /*
29827
30668
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -30453,7 +31294,7 @@ const createClientLogCallback = (provider, metadata, scope) => {
30453
31294
  };
30454
31295
 
30455
31296
  // Generated by genversion.
30456
- const version = '12.0.1';
31297
+ const version = '12.1.0-next.0';
30457
31298
 
30458
31299
  /**
30459
31300
  * Zod schema for telemetry configuration validation.
@@ -31696,6 +32537,8 @@ class MsalProvider extends BaseModuleProvider {
31696
32537
  #client;
31697
32538
  #telemetry;
31698
32539
  #requiresAuth;
32540
+ /** Safe operational outcomes; never carries accounts, scopes, codes, tokens or raw errors. */
32541
+ #operational = createOperationalTelemetry('msal');
31699
32542
  #authCode;
31700
32543
  #loginHint;
31701
32544
  /**
@@ -31770,6 +32613,9 @@ class MsalProvider extends BaseModuleProvider {
31770
32613
  });
31771
32614
  this.#requiresAuth = config.requiresAuth;
31772
32615
  this.#telemetry = config.telemetry;
32616
+ this.#operational.connect(config.telemetry?.provider);
32617
+ // In-flight flows must not report into a torn-down telemetry host.
32618
+ this._addTeardown(() => this.#operational.disconnect());
31773
32619
  this.#loginHint = config.loginHint;
31774
32620
  // Extract auth code from config if present
31775
32621
  // This will be used during initialize to exchange for tokens
@@ -31825,6 +32671,7 @@ class MsalProvider extends BaseModuleProvider {
31825
32671
  // Priority 0: Exchange auth code if provided by backend
31826
32672
  // This must happen before the requiresAuth check so tokens are cached
31827
32673
  if (this.#authCode) {
32674
+ const exchangeStarted = performance.now();
31828
32675
  try {
31829
32676
  this._trackEvent('initialize.exchanging-auth-code', TelemetryLevel.Information);
31830
32677
  // Use MSAL's acquireTokenByCode to exchange backend auth code for tokens
@@ -31846,21 +32693,22 @@ class MsalProvider extends BaseModuleProvider {
31846
32693
  // Successfully exchanged auth code - set active account
31847
32694
  if (result.account) {
31848
32695
  this.#client.setActiveAccount(result.account);
31849
- this._trackEvent('initialize.auth-code-exchanged-account', TelemetryLevel.Information, {
31850
- properties: {
31851
- username: result.account.username,
31852
- },
31853
- });
32696
+ // Account identifiers are never recorded; the event only marks the transition.
32697
+ this._trackEvent('initialize.auth-code-exchanged-account', TelemetryLevel.Information);
31854
32698
  }
32699
+ this.#operational.report({
32700
+ operation: 'exchange-auth-code',
32701
+ outcome: 'success',
32702
+ duration: performance.now() - exchangeStarted,
32703
+ });
31855
32704
  }
31856
- catch (error) {
31857
- // Auth code exchange failed - log and fall back to standard flows
31858
- this._trackException('initialize.auth-code-exchange-failed', TelemetryLevel.Warning, {
31859
- exception: error instanceof Error ? error : new Error(String(error)),
31860
- properties: {
31861
- message: error instanceof Error ? error.message : String(error),
31862
- reason: 'Auth code exchange failed, falling back to standard authentication flows',
31863
- },
32705
+ catch {
32706
+ // Auth code exchange failed - record a sanitized outcome and fall back to standard flows.
32707
+ // The original error may describe the code or account, so it is never recorded.
32708
+ this.#operational.report({
32709
+ operation: 'exchange-auth-code',
32710
+ outcome: 'failure',
32711
+ duration: performance.now() - exchangeStarted,
31864
32712
  });
31865
32713
  // Continue to requiresAuth check - will trigger standard login if needed
31866
32714
  }
@@ -31879,11 +32727,7 @@ class MsalProvider extends BaseModuleProvider {
31879
32727
  // Successfully authenticated via redirect - set as active account
31880
32728
  // This means the user was redirected to Microsoft and came back authenticated
31881
32729
  this.#client.setActiveAccount(handleRedirectResult.account);
31882
- this._trackEvent('initialize.active-account-set-by-callback', TelemetryLevel.Information, {
31883
- properties: {
31884
- username: handleRedirectResult.account.username,
31885
- },
31886
- });
32730
+ this._trackEvent('initialize.active-account-set-by-callback', TelemetryLevel.Information);
31887
32731
  }
31888
32732
  else if (!this.#client.hasValidClaims) {
31889
32733
  // Priority 2: No valid session found - attempt automatic login
@@ -31895,11 +32739,7 @@ class MsalProvider extends BaseModuleProvider {
31895
32739
  if (loginResult?.account) {
31896
32740
  // Automatic login successful - set as active account
31897
32741
  this.#client.setActiveAccount(loginResult.account);
31898
- this._trackEvent('initialize.active-account-set-by-login', TelemetryLevel.Information, {
31899
- properties: {
31900
- username: loginResult.account.username,
31901
- },
31902
- });
32742
+ this._trackEvent('initialize.active-account-set-by-login', TelemetryLevel.Information);
31903
32743
  }
31904
32744
  }
31905
32745
  // Priority 3: If hasValidClaims is true, user is already authenticated - no action needed
@@ -31974,8 +32814,8 @@ class MsalProvider extends BaseModuleProvider {
31974
32814
  // Extract caller-provided scopes from either new format (request.scopes) or legacy format (scopes)
31975
32815
  const candidateScopes = inputRequest?.scopes ?? options?.scopes ?? [];
31976
32816
  const scopes = candidateScopes.length > 0 ? candidateScopes : defaultScopes.length > 0 ? defaultScopes : [];
31977
- // Prepare telemetry properties for this token acquisition attempt
31978
- const telemetryProperties = { behavior, silent, scopes };
32817
+ // Flow flags only; scopes identify the requested resources and are never recorded.
32818
+ const telemetryProperties = { behavior, silent };
31979
32819
  // Track usage of deprecated legacy scopes format for migration monitoring
31980
32820
  if (options?.scopes) {
31981
32821
  this._trackEvent('acquireToken.legacy-scopes-provided', TelemetryLevel.Warning, {
@@ -31987,7 +32827,7 @@ class MsalProvider extends BaseModuleProvider {
31987
32827
  // Fall back to the client-id-derived default scope when one is available
31988
32828
  if (defaultScopes.length > 0) {
31989
32829
  this._trackEvent('acquireToken.missing-scope.defaulted', TelemetryLevel.Warning, {
31990
- properties: { ...telemetryProperties, defaultScopes },
32830
+ properties: telemetryProperties,
31991
32831
  });
31992
32832
  }
31993
32833
  else {
@@ -32000,10 +32840,11 @@ class MsalProvider extends BaseModuleProvider {
32000
32840
  // This allows us to monitor how often empty scopes are provided before enforcing validation
32001
32841
  }
32002
32842
  }
32843
+ // Token acquisition for telemetry delivery belongs to the export and is never recorded,
32844
+ // otherwise each export would produce a record to export in turn.
32845
+ const operational = options && telemetryExportRequest in options ? undefined : this.#operational;
32846
+ const started = performance.now();
32003
32847
  try {
32004
- const measurement = this._trackMeasurement('acquireToken', TelemetryLevel.Information, {
32005
- properties: telemetryProperties,
32006
- });
32007
32848
  // Merge account, original request options, and resolved scopes.
32008
32849
  // Account ensures context awareness, request preserves custom options, scopes uses resolved value.
32009
32850
  const result = await this.#client.acquireToken({
@@ -32011,23 +32852,29 @@ class MsalProvider extends BaseModuleProvider {
32011
32852
  silent,
32012
32853
  request: { ...inputRequest, account, scopes },
32013
32854
  });
32014
- measurement?.measure();
32855
+ operational?.report({
32856
+ operation: 'acquire-token',
32857
+ outcome: 'success',
32858
+ duration: performance.now() - started,
32859
+ });
32015
32860
  return result;
32016
32861
  }
32017
32862
  catch (error) {
32018
32863
  // Inside MSAL's hidden iframe, silent acquisition may fail and the client
32019
32864
  // would fall back to acquireTokenRedirect which throws "block_iframe_reload".
32020
- // Suppress this — the parent frame handles interactive auth.
32865
+ // Suppress this — the parent frame handles interactive auth, so it is not a failure.
32866
+ operational?.report({
32867
+ operation: 'acquire-token',
32868
+ outcome: inIframe || isUserCancellation(error) ? 'cancelled' : 'failure',
32869
+ duration: performance.now() - started,
32870
+ });
32871
+ // The hidden iframe defers to the parent frame instead of rethrowing.
32021
32872
  if (inIframe) {
32022
32873
  this._trackEvent('acquireToken.suppressed-in-iframe', TelemetryLevel.Debug, {
32023
32874
  properties: telemetryProperties,
32024
32875
  });
32025
32876
  return undefined;
32026
32877
  }
32027
- this._trackException('acquireToken-failed', TelemetryLevel.Error, {
32028
- exception: error,
32029
- properties: telemetryProperties,
32030
- });
32031
32878
  throw error;
32032
32879
  }
32033
32880
  }
@@ -32094,7 +32941,8 @@ class MsalProvider extends BaseModuleProvider {
32094
32941
  // Determine if silent login is possible based on available account/hint information
32095
32942
  // Silent login requires either an account object or a loginHint to work
32096
32943
  const canLoginSilently = silent && (request.account || request.loginHint);
32097
- const telemetryProperties = { behavior, silent, canLoginSilently, scopes: request.scopes };
32944
+ // Flow flags only; scopes identify the requested resources and are never recorded.
32945
+ const telemetryProperties = { behavior, silent, canLoginSilently: Boolean(canLoginSilently) };
32098
32946
  // Default to active account if no account/hint provided in request
32099
32947
  // This allows silent login to work automatically with existing authentication state
32100
32948
  request.account ??= this.account ?? undefined;
@@ -32108,19 +32956,49 @@ class MsalProvider extends BaseModuleProvider {
32108
32956
  this._trackEvent('login', TelemetryLevel.Information, {
32109
32957
  properties: telemetryProperties,
32110
32958
  });
32959
+ const started = performance.now();
32960
+ try {
32961
+ const result = await this.#login(request, behavior, Boolean(canLoginSilently));
32962
+ this.#operational.report({
32963
+ operation: 'login',
32964
+ outcome: 'success',
32965
+ duration: performance.now() - started,
32966
+ });
32967
+ return result;
32968
+ }
32969
+ catch (error) {
32970
+ this.#operational.report({
32971
+ operation: 'login',
32972
+ outcome: isUserCancellation(error) ? 'cancelled' : 'failure',
32973
+ duration: performance.now() - started,
32974
+ });
32975
+ throw error;
32976
+ }
32977
+ }
32978
+ /**
32979
+ * Runs the silent-then-interactive login flow measured by {@link login}.
32980
+ * @param request - Resolved login request.
32981
+ * @param behavior - Interactive fallback behavior.
32982
+ * @param canLoginSilently - Whether a silent attempt is possible.
32983
+ * @returns The login result, or `undefined` for a redirect that navigates away.
32984
+ * @throws The original MSAL error, or an error for an unsupported behavior.
32985
+ */
32986
+ async #login(request, behavior, canLoginSilently) {
32111
32987
  // Attempt silent authentication first if conditions are met
32112
32988
  // This provides better UX by avoiding unnecessary popups/redirects
32113
32989
  if (canLoginSilently) {
32114
32990
  try {
32115
32991
  return await this.#client.ssoSilent(request);
32116
32992
  }
32117
- catch (error) {
32118
- // Silent login failed - track for monitoring but continue to interactive flow
32119
- this._trackException('login.silent-failed', TelemetryLevel.Warning, {
32120
- exception: error,
32121
- properties: telemetryProperties,
32993
+ catch {
32994
+ // Silent login failed - a recoverable degradation, recorded without the original error,
32995
+ // which may contain account hints. Fall through to interactive authentication.
32996
+ this.#operational.report({
32997
+ notification: true,
32998
+ operation: 'silent-login-fallback',
32999
+ outcome: 'failure',
33000
+ level: TelemetryLevel.Warning,
32122
33001
  });
32123
- // Fall through to interactive authentication
32124
33002
  }
32125
33003
  }
32126
33004
  // Perform interactive authentication based on specified behavior
@@ -32161,20 +33039,25 @@ class MsalProvider extends BaseModuleProvider {
32161
33039
  * ```
32162
33040
  */
32163
33041
  async logout(options) {
32164
- this._trackEvent('logout', TelemetryLevel.Information, {
32165
- properties: {
32166
- redirectUri: options?.redirectUri,
32167
- },
32168
- });
33042
+ // Redirect URIs can carry paths and query data, so the event only marks the transition.
33043
+ this._trackEvent('logout', TelemetryLevel.Information);
33044
+ const started = performance.now();
32169
33045
  try {
32170
33046
  // Logout the specific account (or current account if none specified)
32171
33047
  await this.#client.logout({ account: this.account ?? undefined, ...options });
33048
+ this.#operational.report({
33049
+ operation: 'logout',
33050
+ outcome: 'success',
33051
+ duration: performance.now() - started,
33052
+ });
32172
33053
  return true; // Success
32173
33054
  }
32174
- catch (error) {
32175
- // Logout failed - track error but don't throw to avoid breaking app flow
32176
- this._trackException('logout.failed', TelemetryLevel.Error, {
32177
- exception: error,
33055
+ catch {
33056
+ // Logout failed - record a sanitized outcome but don't throw to avoid breaking app flow
33057
+ this.#operational.report({
33058
+ operation: 'logout',
33059
+ outcome: 'failure',
33060
+ duration: performance.now() - started,
32178
33061
  });
32179
33062
  }
32180
33063
  return false; // Failed
@@ -32203,27 +33086,29 @@ class MsalProvider extends BaseModuleProvider {
32203
33086
  * ```
32204
33087
  */
32205
33088
  async handleRedirect() {
33089
+ const started = performance.now();
32206
33090
  try {
32207
33091
  // Process any pending redirect from authentication flow
32208
33092
  const result = await this.client.handleRedirectPromise();
32209
- // Only track/log when a redirect result is actually returned
33093
+ // Processing ran even without a pending redirect, so success is measured either way;
33094
+ // otherwise failures would be over-represented in the outcome ratio.
33095
+ this.#operational.report({
33096
+ operation: 'handle-redirect',
33097
+ outcome: 'success',
33098
+ duration: performance.now() - started,
33099
+ });
33100
+ // The legacy event marks only a completed redirect flow, without account identifiers.
32210
33101
  if (result) {
32211
- // Track successful redirect completion for monitoring
32212
- this._trackEvent('handleRedirect.success', TelemetryLevel.Information, {
32213
- properties: {
32214
- username: result.account?.username,
32215
- },
32216
- });
33102
+ this._trackEvent('handleRedirect.success', TelemetryLevel.Information);
32217
33103
  }
32218
33104
  return result;
32219
33105
  }
32220
33106
  catch (error) {
32221
- this._trackException('handleRedirect.failed', TelemetryLevel.Warning, {
32222
- exception: error instanceof Error ? error : new Error(String(error)),
32223
- properties: {
32224
- message: error instanceof Error ? error.message : String(error),
32225
- reason: 'Redirect response could not be processed; continuing with standard authentication',
32226
- },
33107
+ // The response could not be processed; standard authentication continues.
33108
+ this.#operational.report({
33109
+ operation: 'handle-redirect',
33110
+ outcome: isUserCancellation(error) ? 'cancelled' : 'failure',
33111
+ duration: performance.now() - started,
32227
33112
  });
32228
33113
  return null;
32229
33114
  }
@@ -32349,7 +33234,20 @@ class MsalProvider extends BaseModuleProvider {
32349
33234
  });
32350
33235
  }
32351
33236
  }
33237
+ /**
33238
+ * Detects MSAL's user-cancellation error, an intended stop rather than a failure.
33239
+ * @param error - Error thrown by an MSAL flow.
33240
+ * @returns `true` when the user closed or cancelled the interaction.
33241
+ */
33242
+ function isUserCancellation(error) {
33243
+ return error?.errorCode === 'user_cancelled';
33244
+ }
32352
33245
 
33246
+ /**
33247
+ * Providers this module created, so host disposal tears down only its own instances and
33248
+ * their telemetry, never a provider supplied or shared by another host.
33249
+ */
33250
+ const ownedProviders = new WeakMap();
32353
33251
  /**
32354
33252
  * MSAL authentication module definition.
32355
33253
  *
@@ -32394,10 +33292,15 @@ const module$1 = {
32394
33292
  }
32395
33293
  // Create new MSAL provider instance
32396
33294
  const provider = new MsalProvider(config);
33295
+ ownedProviders.set(provider, provider);
32397
33296
  // Initialize the provider (handles redirect callbacks, SSO, etc.)
32398
33297
  await provider.initialize();
32399
33298
  return provider;
32400
33299
  },
33300
+ dispose: ({ instance }) => {
33301
+ ownedProviders.get(instance)?.dispose();
33302
+ ownedProviders.delete(instance);
33303
+ },
32401
33304
  };
32402
33305
  /**
32403
33306
  * Enables MSAL authentication module in the framework.
@@ -32443,5 +33346,5 @@ const configureMsal = (configure) => ({
32443
33346
  configure,
32444
33347
  });
32445
33348
 
32446
- export { TelemetryEventSchema as $, reduce as A, lastValueFrom as B, filter as C, BaseModuleProvider as D, EMPTY_SUBSCRIPTION as E, catchError as F, of as G, object as H, _instanceof as I, _enum as J, string as K, boolean as L, ModuleEventLevel as M, record as N, Observable as O, union as P, __rest as Q, __assign as R, Subscription as S, switchMap as T, observeOn as U, deepmerge as V, BaseConfigBuilder as W, TelemetryExceptionSchema as X, TelemetryItemNames as Y, TelemetryType as Z, __extends as _, __values as a, TelemetryMetricSchema as a0, TelemetryCustomEventSchema as a1, array as a2, TelemetryLevel as a3, enableMSAL as a4, MsalConfigurator as a5, module$1 as a6, arrRemove as b, createErrorClass as c, __spreadArray as d, errorContext as e, __read as f, SafeSubscriber as g, EmptyError as h, isFunction as i, executeSchedule as j, innerFrom as k, createOperatorSubscriber as l, map as m, mergeMap as n, operate as o, identity as p, isArrayLike as q, isScheduler as r, popScheduler as s, popNumber as t, EMPTY as u, from as v, mergeInternals as w, scanInternals as x, noop as y, popResultSelector as z };
32447
- //# sourceMappingURL=module-BR47HvRl.js.map
33349
+ export { operationalIdentifier as $, popResultSelector as A, reduce as B, lastValueFrom as C, filter as D, EMPTY_SUBSCRIPTION as E, tap as F, BaseModuleProvider as G, catchError as H, of as I, object as J, _instanceof as K, _enum as L, ModuleEventLevel as M, string as N, Observable as O, boolean as P, record as Q, union as R, Subscription as S, finalize$1 as T, __rest as U, __assign as V, switchMap as W, observeOn as X, deepmerge as Y, BaseConfigBuilder as Z, __extends as _, __values as a, defer as a0, TelemetryExceptionSchema as a1, TelemetryItemNames as a2, TelemetryType as a3, telemetryProviderActions as a4, operationalScope as a5, createOperationalTelemetry as a6, TelemetryEventSchema as a7, TelemetryMetricSchema as a8, TelemetryCustomEventSchema as a9, createOperationalRecords as aa, TelemetryLevel as ab, createDiagnosticContext as ac, createAction as ad, createAsyncAction as ae, array as af, enableMSAL as ag, MsalConfigurator as ah, module$1 as ai, arrRemove as b, createErrorClass as c, __spreadArray as d, errorContext as e, __read as f, SafeSubscriber as g, EmptyError as h, isFunction as i, executeSchedule as j, innerFrom as k, createOperatorSubscriber as l, map as m, mergeMap as n, operate as o, identity as p, from as q, popScheduler as r, isArrayLike as s, telemetryExportRequest as t, isScheduler as u, popNumber as v, EMPTY as w, noop$1 as x, mergeInternals as y, scanInternals as z };
33350
+ //# sourceMappingURL=module-BnhyaZvt.js.map