@azure/msal-common
Version:
Microsoft Authentication Library for js
68 lines (57 loc) • 1.88 kB
text/typescript
/*
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
*/
import { AuthError } from "./AuthError.js";
/**
* Converts a numeric tag from MSAL Runtime to a 5-character string representation.
* Tags are encoded as 30-bit values (6 bits per character) using a custom symbol space.
* @param tag - The numeric tag to convert
* @returns The string representation of the tag
*/
function tagToString(tag: number): string {
if (tag === 0) {
return "UNTAG";
}
const tagSymbolSpace =
"abcdefghijklmnopqrstuvwxyz0123456789****************************";
let tagBuffer = "*****";
const chars = [
tagSymbolSpace[(tag >> 24) & 0x3f],
tagSymbolSpace[(tag >> 18) & 0x3f],
tagSymbolSpace[(tag >> 12) & 0x3f],
tagSymbolSpace[(tag >> 6) & 0x3f],
tagSymbolSpace[(tag >> 0) & 0x3f],
];
tagBuffer = chars.join("");
return tagBuffer;
}
/**
* Error class for MSAL Runtime errors that preserves detailed broker information
*/
export class PlatformBrokerError extends AuthError {
/**
* Numeric error code from MSAL Runtime
*/
public statusCode: number;
/**
* Error tag from MSAL Runtime
*/
public tag: string;
constructor(
errorStatus: string,
errorContext: string,
errorCode: number,
errorTag: number
) {
const tagString = tagToString(errorTag);
const enhancedErrorContext = errorContext
? `${errorContext} (Error Code: ${errorCode}, Tag: ${tagString})`
: `(Error Code: ${errorCode}, Tag: ${tagString})`;
super(errorStatus, enhancedErrorContext);
this.name = "PlatformBrokerError";
this.statusCode = errorCode;
this.tag = tagString;
Object.setPrototypeOf(this, PlatformBrokerError.prototype);
}
}