{"version":3,"file":"ng-cryptostore.mjs","sources":["../../../projects/ng-cryptostore/src/lib/CookieService.service.ts","../../../projects/ng-cryptostore/src/lib/StorageConfig.ts","../../../projects/ng-cryptostore/src/lib/StorageServiceConfig.service.ts","../../../projects/ng-cryptostore/src/lib/IndexedDBService.service.ts","../../../projects/ng-cryptostore/src/lib/storage.service.ts","../../../projects/ng-cryptostore/src/lib/Storage.module.ts","../../../projects/ng-cryptostore/src/public-api.ts","../../../projects/ng-cryptostore/src/ng-cryptostore.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CookieService {\r\n\r\n  public create(key: string, value: string, expires?: number | Date) {\r\n    let cookieValue = `${key}=${value}`;\r\n    if (expires) {\r\n      if (typeof expires === 'number') {\r\n        const date = new Date();\r\n        date.setTime(date.getTime() + (expires * 24 * 60 * 60 * 1000));\r\n        expires = date;\r\n      }\r\n      cookieValue = `${cookieValue}; expires=${expires.toUTCString()}`;\r\n    }\r\n    document.cookie = cookieValue;\r\n  }\r\n\r\n  public read(key: string) {\r\n    const keyValue = document.cookie.match(`(^|;) ?${key}=([^;]*)(;|$)`);\r\n    return keyValue ? keyValue[2] : \"\";\r\n  }\r\n\r\n  public update(key: string, value: string, expires?: number | Date) {\r\n    this.create(key, value, expires);\r\n  }\r\n\r\n  public delete(key: string) {\r\n    this.create(key, \"\", -1);\r\n  }\r\n\r\n  public deleteAll() {\r\n    const cookies = document.cookie.split(';');\r\n    for (const cookie of cookies) {\r\n      const eqPos = cookie.indexOf('=');\r\n      const name = eqPos > -1 ? cookie.substring(0, eqPos) : cookie;\r\n      document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT`;\r\n    }\r\n  }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport interface StorageConfig {\r\n  storageType: 'localStorage' | 'sessionStorage' | 'IndexedDB' | 'cookies';\r\n}\r\n\r\nexport const STORAGE_CONFIG = new InjectionToken<StorageConfig>('StorageConfig', {\r\n  providedIn: 'root',\r\n  factory: () => ({ storageType: 'localStorage' })\r\n});\r\n","import { STORAGE_CONFIG, StorageConfig } from './StorageConfig';\r\nimport { Injectable, inject } from '@angular/core';\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class StorageServiceConfigs {\r\n  private config = inject(STORAGE_CONFIG);\r\n  _storageType: StorageConfig['storageType'] = this.config.storageType;\r\n\r\n  get storage() {\r\n    return (this._storageType === 'localStorage') ? localStorage : sessionStorage;\r\n  }\r\n\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { StorageServiceConfigs } from './StorageServiceConfig.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class IndexedDBService {\r\n\r\n  private db!: IDBDatabase;\r\n  private objectStore!: IDBObjectStore;\r\n  private config = inject(StorageServiceConfigs);\r\n\r\n  constructor() {\r\n    this.checkCompatibility();\r\n  }\r\n\r\n  private checkCompatibility() {\r\n    if (!('indexedDB' in window)) {\r\n      console.error(\"Your browser doesn't support a stable version of IndexedDB.\");\r\n      return;\r\n    }\r\n    this.openDatabase();\r\n  }\r\n\r\n  private openDatabase() {\r\n    const request = window.indexedDB.open(\"myDatabase\", 1);\r\n\r\n    request.onupgradeneeded = (event: any) => {\r\n      this.db = event.target?.result;\r\n      const objectStore = this.db.createObjectStore(\"myObjectStore\", { keyPath: \"id\", autoIncrement: true });\r\n    };\r\n\r\n    request.onsuccess = (event: any) => {\r\n      this.db = event.target?.result;\r\n    };\r\n\r\n    request.onerror = (event: any) => {\r\n      console.error(\"Failed to open database\", event.target?.error);\r\n    };\r\n  }\r\n\r\n  public create(key: string | number, object: any) {\r\n    this.checkCompatibility();\r\n    if (!this.db) {\r\n      throw new Error('IndexedDB database not opened');\r\n    }\r\n    return new Promise((resolve, reject) => {\r\n      const transaction = this.db.transaction(\"myObjectStore\", \"readwrite\");\r\n      const objectStore = transaction.objectStore(\"myObjectStore\");\r\n      const request = key ? objectStore.add(object, key) : objectStore.add(object);\r\n      request.onsuccess = (event: any) => {\r\n        resolve(event.target?.result);\r\n      };\r\n      request.onerror = (event: any) => {\r\n        reject(event.target?.error);\r\n      };\r\n    });\r\n  }\r\n\r\n\r\n  public read(key: string | number) {\r\n    this.checkCompatibility();\r\n    if (!this.db) {\r\n      throw new Error('IndexedDB database not opened');\r\n    }\r\n    return new Promise((resolve, reject) => {\r\n      const transaction = this.db.transaction(\"myObjectStore\");\r\n      const objectStore = transaction.objectStore(\"myObjectStore\");\r\n      const request = objectStore.get(key);\r\n      request.onsuccess = (event: any) => {\r\n        resolve(event.target?.result);\r\n      };\r\n      request.onerror = (event: any) => {\r\n        reject(event.target?.error);\r\n      };\r\n    });\r\n  }\r\n\r\n  public update(key: string | number, object: any) {\r\n    this.checkCompatibility();\r\n    if (!this.db) {\r\n      throw new Error('IndexedDB database not opened');\r\n    }\r\n    return new Promise((resolve, reject) => {\r\n      const transaction = this.db.transaction(\"myObjectStore\", \"readwrite\");\r\n      const objectStore = transaction.objectStore(\"myObjectStore\");\r\n      const request = objectStore.put(object, key);\r\n      request.onsuccess = (event: any) => {\r\n        resolve(event.target?.result);\r\n      };\r\n      request.onerror = (event: any) => {\r\n        reject(event.target?.error);\r\n      };\r\n    });\r\n  }\r\n\r\n  public delete(key: string | number) {\r\n    this.checkCompatibility();\r\n    if (!this.db) {\r\n      throw new Error('IndexedDB database not opened');\r\n    }\r\n    return new Promise((resolve, reject) => {\r\n      const transaction = this.db.transaction(\"myObjectStore\", \"readwrite\");\r\n      const objectStore = transaction.objectStore(\"myObjectStore\");\r\n      const request = objectStore.delete(key);\r\n      request.onsuccess = (event: any) => {\r\n        resolve(event.target?.result);\r\n      };\r\n      request.onerror = (event: any) => {\r\n        reject(event.target?.error);\r\n      };\r\n    });\r\n  }\r\n\r\n  public deleteAll() {\r\n    this.checkCompatibility();\r\n    if (!this.db) {\r\n      throw new Error('IndexedDB database not opened');\r\n    }\r\n    return new Promise((resolve, reject) => {\r\n      const transaction = this.db.transaction(\"myObjectStore\", \"readwrite\");\r\n      const objectStore = transaction.objectStore(\"myObjectStore\");\r\n      const request = objectStore.clear();\r\n      request.onsuccess = (event: any) => {\r\n        resolve(event.target?.result);\r\n      };\r\n      request.onerror = (event: any) => {\r\n        reject(event.target?.error);\r\n      };\r\n    });\r\n  }\r\n\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport * as CryptoJS from 'crypto-js';\r\nimport { CookieService } from './CookieService.service';\r\nimport { IndexedDBService } from './IndexedDBService.service';\r\nimport { StorageServiceConfigs } from './StorageServiceConfig.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class StorageService {\r\n  private config = inject(StorageServiceConfigs);\r\n  private indexDB = inject(IndexedDBService);\r\n  private cookies = inject(CookieService);\r\n  storage = this.config.storage;\r\n\r\n  async set(name: string, data: any, secret?: string) {\r\n    if (!secret) {\r\n      secret = \"kQ-ND4EZF421S@DF84FQZ634§/4FSQ1C6§!Q5Q4F@E1SDQ!F84G68TH451BBF3SFD64R9!EG6DG\"\r\n    }\r\n    const dataEncrypted = CryptoJS.AES.encrypt(JSON.stringify(data), secret,\r\n      {\r\n        keySize: 128 / 8,\r\n        iv: CryptoJS.enc.Utf8.parse(secret),\r\n        mode: CryptoJS.mode.CBC,\r\n        padding: CryptoJS.pad.Pkcs7\r\n      }).toString();\r\n    if (this.config._storageType === 'IndexedDB') {\r\n      return this.indexDB.create(name, dataEncrypted)\r\n    } else if (this.config._storageType === 'cookies') {\r\n      return this.cookies.create(name, dataEncrypted, 1)\r\n    } else {\r\n      return this.storage.setItem(name, dataEncrypted)\r\n    }\r\n  }\r\n\r\n  get(name: string, secret?: string) {\r\n    if (!secret) {\r\n      secret = \"kQ-ND4EZF421S@DF84FQZ634§/4FSQ1C6§!Q5Q4F@E1SDQ!F84G68TH451BBF3SFD64R9!EG6DG\"\r\n    }\r\n    if (!this.check(name)) return \"\";\r\n    let scripts: any;\r\n    if (this.config._storageType === 'IndexedDB') {\r\n      scripts = this.indexDB.read(name)\r\n    } else if (this.config._storageType === 'cookies') {\r\n      scripts = this.cookies.read(name);\r\n    } else {\r\n      scripts = this.storage.getItem(name)\r\n    }\r\n    if (!scripts) return null;\r\n    return JSON.parse(CryptoJS.enc.Utf8.stringify(CryptoJS.AES.decrypt(scripts, secret,\r\n      {\r\n        keySize: 128 / 8,\r\n        iv: CryptoJS.enc.Utf8.parse(secret),\r\n        mode: CryptoJS.mode.CBC,\r\n        padding: CryptoJS.pad.Pkcs7\r\n      })));\r\n  }\r\n\r\n  getEncrypted(name: string) {\r\n    if (!this.check(name)) return \"\";\r\n    let scripts: any;\r\n    if (this.config._storageType === 'IndexedDB') {\r\n      scripts = this.indexDB.read(name)\r\n    } else if (this.config._storageType === 'cookies') {\r\n      scripts = this.cookies.read(name);\r\n    } else {\r\n      scripts = this.storage.getItem(name)\r\n    }\r\n    if (!scripts) return null;\r\n    return scripts\r\n  }\r\n\r\n  async asyncGet(name: string, secret?: string) {\r\n    if (!secret) {\r\n      secret = \"kQ-ND4EZF421S@DF84FQZ634§/4FSQ1C6§!Q5Q4F@E1SDQ!F84G68TH451BBF3SFD64R9!EG6DG\"\r\n    }\r\n    if (!this.check(name)) return \"\";\r\n    let scripts: any;\r\n    if (this.config._storageType === 'IndexedDB') {\r\n      scripts = this.indexDB.read(name)\r\n    } else if (this.config._storageType === 'cookies') {\r\n      scripts = this.cookies.read(name);\r\n    } else {\r\n      scripts = this.storage.getItem(name)\r\n    }\r\n    return JSON.parse(CryptoJS.enc.Utf8.stringify(CryptoJS.AES.decrypt(scripts, secret,\r\n      {\r\n        keySize: 128 / 8,\r\n        iv: CryptoJS.enc.Utf8.parse(secret),\r\n        mode: CryptoJS.mode.CBC,\r\n        padding: CryptoJS.pad.Pkcs7\r\n      })));\r\n  }\r\n\r\n  remove(name: string) {\r\n    if (this.check(name)) {\r\n      if (this.config._storageType === 'IndexedDB') {\r\n        this.indexDB.delete(name)\r\n      } else if (this.config._storageType === 'cookies') {\r\n        this.cookies.delete(name);\r\n      } else {\r\n        this.storage.removeItem(name)\r\n      }\r\n    }\r\n  }\r\n\r\n  check(name: string) {\r\n    if (this.config._storageType === 'IndexedDB') {\r\n      return true\r\n    } else if (this.config._storageType === 'cookies') {\r\n      return !!this.cookies.read(name)\r\n    } else {\r\n      return (!!this.storage.getItem(name) && !!this.storage.getItem(name)?.length);\r\n    }\r\n  }\r\n\r\n  async getItemLength(name: string, secret?: string): Promise<number> {\r\n    let data: any\r\n    if (this.config._storageType === 'IndexedDB') {\r\n      data = this.decrypt(await this.indexDB.read(name) as string, secret)\r\n    } else if (this.config._storageType === 'cookies') {\r\n      let cookie = await this.cookies.read(name);\r\n      data = await this.decrypt(cookie, secret);\r\n    } else {\r\n      data = this.get(name, secret)\r\n    }\r\n    return data.length\r\n  }\r\n\r\n  clearAll() {\r\n    if (this.config._storageType === 'IndexedDB') {\r\n      this.indexDB.deleteAll()\r\n    } else if (this.config._storageType === 'cookies') {\r\n      return this.cookies.deleteAll();\r\n    } else {\r\n      this.storage.clear();\r\n    }\r\n  }\r\n\r\n  async crypt(data: any, secret?: string) {\r\n    if (!secret) {\r\n      secret = \"kQ-ND4EZF421S@DF84FQZ634§/4FSQ1C6§!Q5Q4F@E1SDQ!F84G68TH451BBF3SFD64R9!EG6DG\"\r\n    }\r\n    return CryptoJS.AES.encrypt(JSON.stringify(data), secret,\r\n      {\r\n        keySize: 128 / 8,\r\n        iv: CryptoJS.enc.Utf8.parse(secret),\r\n        mode: CryptoJS.mode.CBC,\r\n        padding: CryptoJS.pad.Pkcs7\r\n      }).toString();\r\n  }\r\n\r\n  async decrypt(scripts: string, secret?: string) {\r\n    if (!scripts) return \"\"\r\n    if (!secret) {\r\n      secret = \"kQ-ND4EZF421S@DF84FQZ634§/4FSQ1C6§!Q5Q4F@E1SDQ!F84G68TH451BBF3SFD64R9!EG6DG\"\r\n    }\r\n    return JSON.parse(CryptoJS.enc.Utf8.stringify(CryptoJS.AES.decrypt(scripts, secret,\r\n      {\r\n        keySize: 128 / 8,\r\n        iv: CryptoJS.enc.Utf8.parse(secret),\r\n        mode: CryptoJS.mode.CBC,\r\n        padding: CryptoJS.pad.Pkcs7\r\n      })));\r\n  }\r\n\r\n}\r\n","import { NgModule, ModuleWithProviders, Optional, SkipSelf, makeEnvironmentProviders, EnvironmentProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { StorageConfig, STORAGE_CONFIG } from './StorageConfig';\r\n\r\n/**\r\n * Provides the ng-cryptostore services with the given configuration.\r\n * This is the recommended way to configure the library in standalone applications.\r\n *\r\n * @example\r\n * ```ts\r\n * bootstrapApplication(AppComponent, {\r\n *   providers: [\r\n *     provideNgCryptoStore({ storageType: 'localStorage' })\r\n *   ]\r\n * });\r\n * ```\r\n */\r\nexport function provideNgCryptoStore(config: StorageConfig): EnvironmentProviders {\r\n  return makeEnvironmentProviders([\r\n    { provide: STORAGE_CONFIG, useValue: config }\r\n  ]);\r\n}\r\n\r\n/**\r\n * @deprecated Use `provideNgCryptoStore()` instead. This module is kept for backward compatibility.\r\n */\r\n@NgModule({\r\n  imports: [\r\n    CommonModule\r\n  ]\r\n})\r\nexport class StorageModule {\r\n  constructor(@Optional() @SkipSelf() parentModule?: StorageModule) {\r\n    if (parentModule) {\r\n      throw new Error(\r\n        'StorageModule is already loaded. Import it in the AppModule only');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @deprecated Use `provideNgCryptoStore()` instead.\r\n   */\r\n  static withConfig(config: StorageConfig): ModuleWithProviders<StorageModule> {\r\n    return {\r\n      ngModule: StorageModule,\r\n      providers: [\r\n        { provide: STORAGE_CONFIG, useValue: config }\r\n      ]\r\n    };\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of ng-cryptostore\r\n */\r\n\r\nexport { StorageService } from './lib/storage.service';\r\nexport { StorageModule, provideNgCryptoStore } from './lib/Storage.module';\r\nexport { StorageConfig, STORAGE_CONFIG } from './lib/StorageConfig';\r\nexport { CookieService } from './lib/CookieService.service';\r\nexport { IndexedDBService } from './lib/IndexedDBService.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}