{"version":3,"file":"sessionStore.mjs","names":[],"sources":["../../../src/domain/session/sessionStore.ts"],"sourcesContent":["import type { Configuration } from '../configuration'\nimport { isWorkerEnvironment } from '../../tools/globalObject'\nimport { display } from '../../tools/display'\nimport { SessionPersistence } from './sessionConstants'\nimport type { SessionStoreStrategy, SessionStoreStrategyType } from './storeStrategies/sessionStoreStrategy'\nimport { selectCookieStrategy, initCookieStrategy } from './storeStrategies/sessionInCookie'\nimport { selectLocalStorageStrategy, initLocalStorageStrategy } from './storeStrategies/sessionInLocalStorage'\nimport { selectMemorySessionStoreStrategy, initMemorySessionStoreStrategy } from './storeStrategies/sessionInMemory'\n\n/**\n * Selects the correct session store strategy type based on the configuration and storage\n * availability. When an array is provided, tries each persistence type in order until one\n * successfully initializes.\n */\nexport async function selectSessionStoreStrategyType(\n  configuration: Configuration\n): Promise<SessionStoreStrategyType | undefined> {\n  const persistenceList = normalizePersistenceList(configuration.sessionPersistence)\n\n  for (const persistence of persistenceList) {\n    const strategyType = await selectStrategyForPersistence(persistence, configuration)\n    if (strategyType !== undefined) {\n      return strategyType\n    }\n  }\n\n  return undefined\n}\n\nfunction normalizePersistenceList(\n  sessionPersistence: SessionPersistence | SessionPersistence[] | undefined\n): SessionPersistence[] {\n  if (Array.isArray(sessionPersistence)) {\n    return sessionPersistence\n  }\n  if (sessionPersistence !== undefined) {\n    return [sessionPersistence]\n  }\n\n  // In worker environments, default to memory since cookie and localStorage are not available\n  // TODO: make it work when we start using Cookie Store API\n  // @see https://developer.mozilla.org/en-US/docs/Web/API/CookieStore\n  if (isWorkerEnvironment) {\n    return [SessionPersistence.MEMORY]\n  }\n\n  return [SessionPersistence.COOKIE]\n}\n\nfunction selectStrategyForPersistence(\n  persistence: SessionPersistence,\n  configuration: Configuration\n): Promise<SessionStoreStrategyType | undefined> | SessionStoreStrategyType | undefined {\n  switch (persistence) {\n    case SessionPersistence.COOKIE:\n      return selectCookieStrategy(configuration)\n\n    case SessionPersistence.LOCAL_STORAGE:\n      return selectLocalStorageStrategy()\n\n    case SessionPersistence.MEMORY:\n      return selectMemorySessionStoreStrategy()\n\n    default:\n      display.error(`Invalid session persistence '${String(persistence)}'`)\n      return undefined\n  }\n}\n\nexport function getSessionStoreStrategy(\n  sessionStoreStrategyType: SessionStoreStrategyType,\n  configuration: Configuration\n): SessionStoreStrategy {\n  switch (sessionStoreStrategyType.type) {\n    case SessionPersistence.COOKIE:\n      return initCookieStrategy(sessionStoreStrategyType, configuration)\n    case SessionPersistence.LOCAL_STORAGE:\n      return initLocalStorageStrategy()\n    case SessionPersistence.MEMORY:\n      return initMemorySessionStoreStrategy()\n  }\n}\n"],"mappings":";;;;;;;;;;;;AAcA,eAAsB,+BACpB,eAC+C;CAC/C,MAAM,kBAAkB,yBAAyB,cAAc,kBAAkB;CAEjF,KAAK,MAAM,eAAe,iBAAiB;EACzC,MAAM,eAAe,MAAM,6BAA6B,aAAa,aAAa;EAClF,IAAI,iBAAiB,KAAA,GACnB,OAAO;CAEX;AAGF;AAEA,SAAS,yBACP,oBACsB;CACtB,IAAI,MAAM,QAAQ,kBAAkB,GAClC,OAAO;CAET,IAAI,uBAAuB,KAAA,GACzB,OAAO,CAAC,kBAAkB;CAM5B,IAAI,qBACF,OAAO,CAAC,mBAAmB,MAAM;CAGnC,OAAO,CAAC,mBAAmB,MAAM;AACnC;AAEA,SAAS,6BACP,aACA,eACsF;CACtF,QAAQ,aAAR;EACE,KAAK,mBAAmB,QACtB,OAAO,qBAAqB,aAAa;EAE3C,KAAK,mBAAmB,eACtB,OAAO,2BAA2B;EAEpC,KAAK,mBAAmB,QACtB,OAAO,iCAAiC;EAE1C;GACE,QAAQ,MAAM,gCAAgC,OAAO,WAAW,EAAE,EAAE;GACpE;CACJ;AACF;AAEA,SAAgB,wBACd,0BACA,eACsB;CACtB,QAAQ,yBAAyB,MAAjC;EACE,KAAK,mBAAmB,QACtB,OAAO,mBAAmB,0BAA0B,aAAa;EACnE,KAAK,mBAAmB,eACtB,OAAO,yBAAyB;EAClC,KAAK,mBAAmB,QACtB,OAAO,+BAA+B;CAC1C;AACF"}