import * as fs from "fs"; import { ipcMain } from "electron"; import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { NodeUtils } from "@bitwarden/common/misc/nodeUtils"; // eslint-disable-next-line const Store = require("electron-store"); export class ElectronStorageService implements AbstractStorageService { private store: any; constructor(dir: string, defaults = {}) { if (!fs.existsSync(dir)) { NodeUtils.mkdirpSync(dir, "700"); } const storeConfig: any = { defaults: defaults, name: "data", }; this.store = new Store(storeConfig); ipcMain.handle("storageService", (event, options) => { switch (options.action) { case "get": return this.get(options.key); case "has": return this.has(options.key); case "save": return this.save(options.key, options.obj); case "remove": return this.remove(options.key); } }); } get(key: string): Promise { const val = this.store.get(key) as T; return Promise.resolve(val != null ? val : null); } has(key: string): Promise { const val = this.store.get(key); return Promise.resolve(val != null); } save(key: string, obj: any): Promise { if (obj instanceof Set) { obj = Array.from(obj); } this.store.set(key, obj); return Promise.resolve(); } remove(key: string): Promise { this.store.delete(key); return Promise.resolve(); } }