MSAL Browser Log Decoder
June 12, 2026 · View on GitHub
This script decodes hashed logging strings from browser console logs back to their original messages.
Overview
The MSAL Browser library hashes logging strings to reduce bundle size. When running in a browser, console logs display these hashes instead of full messages. This decoder script transforms those hashed logs back into readable messages and saves them to a new file.
Log Format
The script expects log files where each MSAL log entry follows this format:
[timestamp] : [correlation-id] : @azure/[module]@[version] : [LogLevel] - [hash][ values...]
The [hash] is a 6-character code. It may be followed by one or more
space-separated runtime values when the log message originally contained
interpolated variables (the library appends these after the hash so they stay
visible in console logs while keeping the bundle small). The decoder injects
those values back into the message's placeholders, so do not strip the
trailing tokens — removing them prevents variable injection during decode.
Example:
[Tue, 07 Oct 2025 16:50:29 GMT] : [] : @azure/msal-browser@4.13.1 : Verbose - 0hoqeo
[Tue, 07 Oct 2025 16:50:30 GMT] : [abc-123] : @azure/msal-common@15.7.0 : Info - 1atvtd
[Thu, 11 Jun 2026 21:02:51 GMT] : [019eb87e] : @azure/msal-common@16.6.1 : Verbose - 1q3g2x 69f988bf-86f1-41af-91ab-2d7cd746hg47 {tenantid}
In the third line, 1q3g2x is the hash and the two trailing tokens are runtime
values injected into the decoded message's ${...} placeholders.
The package/SKU token before @[version] may also be a SKU name such as
msal.js.browser (and msal-common messages can appear under that browser SKU
header); the decoder normalizes these automatically.
Non-MSAL log lines are preserved unchanged in the output.
Usage
Basic Usage
node scripts/decode-logs.cjs <path-to-log-file>
With NPM Script
npm run decode-logs -- <path-to-log-file>
Verbose Mode
Add --verbose or -V flag for detailed debugging information:
node scripts/decode-logs.cjs --verbose <path-to-log-file>
npm run decode-logs -- --verbose /path/to/console.log
Examples
# Decode logs from a file
node scripts/decode-logs.cjs ./console-logs.txt
# Output: ./console-logs-decoded.txt
# Decode with verbose output
node scripts/decode-logs.cjs --verbose /Users/user/Downloads/browser-console.log
# Output: /Users/user/Downloads/browser-console-decoded.log
# Using npm script
npm run decode-logs -- ./logs/debug.log
# Output: ./logs/debug-decoded.log
Output
The script creates a new file with the decoded logs in the same directory as the input file, adding a -decoded suffix before the file extension:
- Input:
/path/to/debug.log→ Output:/path/to/debug-decoded.log
Features
- Automatic Version Detection: Extracts module@version from each log entry and fetches appropriate mappings
- Multi-Module Support: Handles logs from multiple MSAL packages (msal-browser, msal-common, etc.)
- Multiple Versions Support: Can handle multiple versions of the same module in a single file
- Efficient Mapping Download: Downloads each unique module@version combination only once
- Local Fallback: Automatically falls back to local mapping files when remote fetching fails
- Non-MSAL Log Preservation: Leaves non-MSAL log lines unchanged
- File Output: Saves decoded logs to a new file with
-decodedsuffix - Remote Mapping Fetching: Automatically downloads mappings from npm registry
- Caching: Caches downloaded mappings for 24 hours to improve performance
- Verbose Mode: Detailed debugging information with
--verboseflag
How It Works
- Scans the entire log file to identify all unique module@version combinations
- Downloads mappings once for each unique module@version combination
- Falls back to local mappings if remote download fails (for local development)
- Identifies MSAL log entries by pattern matching for
@azure/[module]@[version] - Decodes hashes back to original messages using the appropriate mappings
- Preserves non-MSAL lines unchanged
- Saves decoded output to a new file with
-decodedsuffix
Mapping File Locations
The script looks for mapping files in the following locations within each package:
- @azure/msal-browser:
dist/log-strings-mapping.json,dist/custom-auth-path/log-strings-mapping.json - @azure/msal-common:
dist-browser/log-strings-mapping.json
Cache Location
Downloaded mappings are cached in: temp/log-mappings/
Cache files are valid for 24 hours.