All files / src/auth sessionStore.ts

32.35% Statements 11/34
0% Branches 0/4
33.33% Functions 4/12
32.35% Lines 11/34

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129  1x   1x     1x             1x                                                     1x       34x   34x                 115x       44x 44x                         1x                                                                                                              
 
import { SessionData, SessionOptions } from './sessionData'
// import { BLOCKSTACK_GAIA_HUB_LABEL } from '../storage/hub'
import {
  LOCALSTORAGE_SESSION_KEY
} from './authConstants'
import { NoSessionDataError } from '../errors'
// import { Logger } from '../logger'
 
/**
 * An abstract class representing the SessionDataStore interface.
 
 */
export class SessionDataStore {
  constructor(sessionOptions?: SessionOptions) {
    if (sessionOptions) {
      const newSessionData = new SessionData(sessionOptions)
      this.setSessionData(newSessionData)
    }
  }
 
  getSessionData(): SessionData {
    throw new Error('Abstract class')
  }
 
  /* eslint-disable */
  setSessionData(session: SessionData): boolean {
    throw new Error('Abstract class')
  }
 
  deleteSessionData(): boolean {
    throw new Error('Abstract class')
  }
  /* eslint-enable */
}
 
/**
 * Stores session data in the instance of this class.
 * @ignore
 */
export class InstanceDataStore extends SessionDataStore {
  sessionData?: SessionData
 
  constructor(sessionOptions?: SessionOptions) {
    super(sessionOptions)
    if (!this.sessionData) {
      this.setSessionData(new SessionData({}))
    }
  }
 
 
  getSessionData(): SessionData {
    if (!this.sessionData) {
      throw new NoSessionDataError('No session data was found.')
    }
    return this.sessionData
  }
 
  setSessionData(session: SessionData): boolean {
    this.sessionData = session
    return true
  }
 
  deleteSessionData(): boolean {
    this.setSessionData(new SessionData({}))
    return true
  }
}
 
/**
 * Stores session data in browser a localStorage entry.
 * @ignore
 */
export class LocalStorageStore extends SessionDataStore {
  key: string
 
  constructor(sessionOptions?: SessionOptions) {
    super(sessionOptions)
    if (sessionOptions
      && sessionOptions.storeOptions
      && sessionOptions.storeOptions.localStorageKey
      && (typeof sessionOptions.storeOptions.localStorageKey === 'string')) {
      this.key = sessionOptions.storeOptions.localStorageKey
    } else {
      this.key = LOCALSTORAGE_SESSION_KEY
    }
 
    const data = localStorage.getItem(this.key)
    if (!data) {
      const sessionData = new SessionData({})
      this.setSessionData(sessionData)
    }
  }
 
  getSessionData(): SessionData {
    const data = localStorage.getItem(this.key)
    if (!data) {
      throw new NoSessionDataError('No session data was found in localStorage')
    }
    const dataJSON = JSON.parse(data)
    return SessionData.fromJSON(dataJSON)
  }
 
  setSessionData(session: SessionData): boolean {
    localStorage.setItem(this.key, session.toString())
    return true
  }
 
  deleteSessionData(): boolean {
    localStorage.removeItem(this.key)
    this.setSessionData(new SessionData({}))
    return true
  }
 
  // checkForLegacyDataAndMigrate(): Promise<SessionData> {
  //   const legacyTransitKey = localStorage.getItem(BLOCKSTACK_APP_PRIVATE_KEY_LABEL)
  //   const legacyGaiaConfig = localStorage.getItem(BLOCKSTACK_GAIA_HUB_LABEL)
  //   const legacyUserData = localStorage.getItem(BLOCKSTACK_STORAGE_LABEL)
  //
  //
  //   if (legacyTransitKey) {
  //     localStorage.removeItem(BLOCKSTACK_APP_PRIVATE_KEY_LABEL)
  //   }
  //
  //
  //
  // }
}