{"version":3,"file":"LocalStorageAdapter.cjs","sources":["../../../src/storage/LocalStorageAdapter.ts"],"sourcesContent":["import { BaseStorageAdapter } from './StorageAdapter'\n\nexport class LocalStorageAdapter extends BaseStorageAdapter {\n  private prefix: string\n\n  constructor(prefix = `offline-tx:`) {\n    super()\n    this.prefix = prefix\n  }\n\n  /**\n   * Probe localStorage availability by attempting a test write.\n   * This catches private mode and other restrictions that block localStorage.\n   */\n  static probe(): { available: boolean; error?: Error } {\n    // Check if localStorage exists\n    if (typeof localStorage === `undefined`) {\n      return {\n        available: false,\n        error: new Error(`localStorage is not available in this environment`),\n      }\n    }\n\n    // Try to actually write/read/delete to verify it works\n    try {\n      const testKey = `__offline-tx-probe__`\n      const testValue = `test`\n\n      localStorage.setItem(testKey, testValue)\n      const retrieved = localStorage.getItem(testKey)\n      localStorage.removeItem(testKey)\n\n      if (retrieved !== testValue) {\n        return {\n          available: false,\n          error: new Error(`localStorage read/write verification failed`),\n        }\n      }\n\n      return { available: true }\n    } catch (error) {\n      return {\n        available: false,\n        error: error instanceof Error ? error : new Error(String(error)),\n      }\n    }\n  }\n\n  private getKey(key: string): string {\n    return `${this.prefix}${key}`\n  }\n\n  get(key: string): Promise<string | null> {\n    try {\n      return Promise.resolve(localStorage.getItem(this.getKey(key)))\n    } catch (error) {\n      console.warn(`localStorage get failed:`, error)\n      return Promise.resolve(null)\n    }\n  }\n\n  set(key: string, value: string): Promise<void> {\n    try {\n      localStorage.setItem(this.getKey(key), value)\n      return Promise.resolve()\n    } catch (error) {\n      if (\n        error instanceof DOMException &&\n        error.name === `QuotaExceededError`\n      ) {\n        return Promise.reject(\n          new Error(\n            `Storage quota exceeded. Consider clearing old transactions.`,\n          ),\n        )\n      }\n      return Promise.reject(error)\n    }\n  }\n\n  delete(key: string): Promise<void> {\n    try {\n      localStorage.removeItem(this.getKey(key))\n      return Promise.resolve()\n    } catch (error) {\n      console.warn(`localStorage delete failed:`, error)\n      return Promise.resolve()\n    }\n  }\n\n  keys(): Promise<Array<string>> {\n    try {\n      const keys: Array<string> = []\n      for (let i = 0; i < localStorage.length; i++) {\n        const key = localStorage.key(i)\n        if (key && key.startsWith(this.prefix)) {\n          keys.push(key.slice(this.prefix.length))\n        }\n      }\n      return Promise.resolve(keys)\n    } catch (error) {\n      console.warn(`localStorage keys failed:`, error)\n      return Promise.resolve([])\n    }\n  }\n\n  async clear(): Promise<void> {\n    try {\n      const keys = await this.keys()\n      for (const key of keys) {\n        localStorage.removeItem(this.getKey(key))\n      }\n    } catch (error) {\n      console.warn(`localStorage clear failed:`, error)\n    }\n  }\n}\n"],"names":["BaseStorageAdapter"],"mappings":";;;AAEO,MAAM,4BAA4BA,eAAAA,mBAAmB;AAAA,EAG1D,YAAY,SAAS,eAAe;AAClC,UAAA;AACA,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,QAA+C;AAEpD,QAAI,OAAO,iBAAiB,aAAa;AACvC,aAAO;AAAA,QACL,WAAW;AAAA,QACX,OAAO,IAAI,MAAM,mDAAmD;AAAA,MAAA;AAAA,IAExE;AAGA,QAAI;AACF,YAAM,UAAU;AAChB,YAAM,YAAY;AAElB,mBAAa,QAAQ,SAAS,SAAS;AACvC,YAAM,YAAY,aAAa,QAAQ,OAAO;AAC9C,mBAAa,WAAW,OAAO;AAE/B,UAAI,cAAc,WAAW;AAC3B,eAAO;AAAA,UACL,WAAW;AAAA,UACX,OAAO,IAAI,MAAM,6CAA6C;AAAA,QAAA;AAAA,MAElE;AAEA,aAAO,EAAE,WAAW,KAAA;AAAA,IACtB,SAAS,OAAO;AACd,aAAO;AAAA,QACL,WAAW;AAAA,QACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,MAAA;AAAA,IAEnE;AAAA,EACF;AAAA,EAEQ,OAAO,KAAqB;AAClC,WAAO,GAAG,KAAK,MAAM,GAAG,GAAG;AAAA,EAC7B;AAAA,EAEA,IAAI,KAAqC;AACvC,QAAI;AACF,aAAO,QAAQ,QAAQ,aAAa,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAC;AAAA,IAC/D,SAAS,OAAO;AACd,cAAQ,KAAK,4BAA4B,KAAK;AAC9C,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,IAAI,KAAa,OAA8B;AAC7C,QAAI;AACF,mBAAa,QAAQ,KAAK,OAAO,GAAG,GAAG,KAAK;AAC5C,aAAO,QAAQ,QAAA;AAAA,IACjB,SAAS,OAAO;AACd,UACE,iBAAiB,gBACjB,MAAM,SAAS,sBACf;AACA,eAAO,QAAQ;AAAA,UACb,IAAI;AAAA,YACF;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AACA,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,OAAO,KAA4B;AACjC,QAAI;AACF,mBAAa,WAAW,KAAK,OAAO,GAAG,CAAC;AACxC,aAAO,QAAQ,QAAA;AAAA,IACjB,SAAS,OAAO;AACd,cAAQ,KAAK,+BAA+B,KAAK;AACjD,aAAO,QAAQ,QAAA;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,OAA+B;AAC7B,QAAI;AACF,YAAM,OAAsB,CAAA;AAC5B,eAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,cAAM,MAAM,aAAa,IAAI,CAAC;AAC9B,YAAI,OAAO,IAAI,WAAW,KAAK,MAAM,GAAG;AACtC,eAAK,KAAK,IAAI,MAAM,KAAK,OAAO,MAAM,CAAC;AAAA,QACzC;AAAA,MACF;AACA,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC7B,SAAS,OAAO;AACd,cAAQ,KAAK,6BAA6B,KAAK;AAC/C,aAAO,QAAQ,QAAQ,EAAE;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI;AACF,YAAM,OAAO,MAAM,KAAK,KAAA;AACxB,iBAAW,OAAO,MAAM;AACtB,qBAAa,WAAW,KAAK,OAAO,GAAG,CAAC;AAAA,MAC1C;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,KAAK,8BAA8B,KAAK;AAAA,IAClD;AAAA,EACF;AACF;;"}