/*! @azure/msal-common v14.4.0 2023-11-07 */ 'use strict'; import { Constants } from './Constants.mjs'; import { createClientAuthError } from '../error/ClientAuthError.mjs'; import { noCryptoObject, invalidState } from '../error/ClientAuthErrorCodes.mjs'; /* * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ /** * Class which provides helpers for OAuth 2.0 protocol specific values */ class ProtocolUtils { /** * Appends user state with random guid, or returns random guid. * @param userState * @param randomGuid */ static setRequestState(cryptoObj, userState, meta) { const libraryState = ProtocolUtils.generateLibraryState(cryptoObj, meta); return userState ? `${libraryState}${Constants.RESOURCE_DELIM}${userState}` : libraryState; } /** * Generates the state value used by the common library. * @param randomGuid * @param cryptoObj */ static generateLibraryState(cryptoObj, meta) { if (!cryptoObj) { throw createClientAuthError(noCryptoObject); } // Create a state object containing a unique id and the timestamp of the request creation const stateObj = { id: cryptoObj.createNewGuid(), }; if (meta) { stateObj.meta = meta; } const stateString = JSON.stringify(stateObj); return cryptoObj.base64Encode(stateString); } /** * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user. * @param state * @param cryptoObj */ static parseRequestState(cryptoObj, state) { if (!cryptoObj) { throw createClientAuthError(noCryptoObject); } if (!state) { throw createClientAuthError(invalidState); } try { // Split the state between library state and user passed state and decode them separately const splitState = state.split(Constants.RESOURCE_DELIM); const libraryState = splitState[0]; const userState = splitState.length > 1 ? splitState.slice(1).join(Constants.RESOURCE_DELIM) : Constants.EMPTY_STRING; const libraryStateString = cryptoObj.base64Decode(libraryState); const libraryStateObj = JSON.parse(libraryStateString); return { userRequestState: userState || Constants.EMPTY_STRING, libraryState: libraryStateObj, }; } catch (e) { throw createClientAuthError(invalidState); } } } export { ProtocolUtils }; //# sourceMappingURL=ProtocolUtils.mjs.map