/**
* @module Config
*/
import { verifyLocalDataContext } from './dataContext.js'
import { updatePermissionsData } from './userPermissions.js'
export let globalConfig = {
sanityConfig: {},
railcontentConfig: {},
recommendationsConfig: {},
searchEngineConfig: {},
localStorage: null,
isMA: false,
localTimezoneString: null, // In format: America/Vancouver
}
/**
* Exported functions that are excluded from index generation.
*
* @type {string[]}
*/
const excludeFromGeneratedIndex = []
/**
* Initializes the service with the given configuration.
* This function must be called before using any other functions in this library.
*
* @param {Object} config - Configuration object containing API settings.
* @param {Object} config.sanityConfig - Configuration for Sanity API.
* @param {string} config.sanityConfig.token - The API token for authenticating with Sanity.
* @param {string} config.sanityConfig.projectId - The project ID in Sanity.
* @param {string} config.sanityConfig.dataset - The dataset name in Sanity.
* @param {string} config.sanityConfig.version - The API version to use.
* @param {boolean} [config.sanityConfig.debug=false] - Optional flag to enable debug mode.
* @param {boolean} [config.sanityConfig.useCachedAPI=true] - Optional flag to enable or disable the use of the cached API.
* @param {boolean} [config.sanityConfig.useDummyRailContentMethods=false] - Optional flag to use test harness for railcontent methods. Should only be used by jest tests.
* @param {Object} config.railcontentConfig - Configuration for user services.
* @param {string} config.railcontentConfig.token - The token for authenticating user-specific requests.
* @param {string} config.railcontentConfig.userId - The user ID for fetching user-specific data.
* @param {string} config.railcontentConfig.baseUrl - The url for the environment.
* @param {string} config.railcontentConfig.authToken - The bearer authorization token.
* @param {string} config.recommendationsConfig.token - The token for authenticating recommendation requests.
* @param {string} config.recommendationsConfig.baseUrl - The url for the recommendation server.
* @param {string} config.searchEngineConfig.applicationId - The application ID for the search engine (e.g., Algolia).
* @param {string} config.searchEngineConfig.apiKey - The API key for the search engine.
* @param {Object} config.localStorage - Cache to use for localStorage
* @param {boolean} config.isMA - Variable that tells if the library is used by MA or FEW
* @param {string} config.localTimezoneString - The local timezone string in format: America/Vancouver
*
* @example
* // Initialize the service in your app.js
* initializeService({
* sanityConfig: {
* token: 'your-sanity-api-token',
* projectId: 'your-sanity-project-id',
* dataset: 'your-dataset-name',
* version: '2021-06-07',
* debug: true,
* useCachedAPI: false,
* },
* railcontentConfig: {
* token: 'your-user-api-token',
* userId: 'current-user-id',
* baseUrl: 'https://web-staging-one.musora.com',
* authToken: 'your-auth-token',
* },
* recommendationsConfig: {
* token: 'your-user-api-token',
* baseUrl: 'https://MusoraProductDepartment-PWGenerator.hf.space',
* },
* localStorage: localStorage,
* isMA: false,
* });
*/
export function initializeService(config) {
globalConfig.sanityConfig = config.sanityConfig
globalConfig.railcontentConfig = config.railcontentConfig
globalConfig.localStorage = config.localStorage
globalConfig.isMA = config.isMA || false
globalConfig.localTimezoneString = config.localTimezoneString || null
globalConfig.recommendationsConfig = config.recommendationsConfig
globalConfig.searchEngineConfig = config.searchEngineConfig
}
export function setUserMetadata(userMetaData) {
updatePermissionsData(userMetaData.permissionsData)
const userDataVersions = userMetaData.userDataVersions
for (let i = 0; i < userDataVersions.length; i++) {
verifyLocalDataContext(userDataVersions[i].dataVersionKey, userDataVersions[i].currentVersion)
}
}