@sidhujag/sysweb3-keyring 1.0.502 → 1.0.503

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/storage.js CHANGED
@@ -7,24 +7,49 @@ exports.getDecryptedVault = exports.setEncryptedVault = void 0;
7
7
  const sysweb3_core_1 = require("@sidhujag/sysweb3-core");
8
8
  const crypto_js_1 = __importDefault(require("crypto-js"));
9
9
  const storage = sysweb3_core_1.sysweb3Di.getStateStorageDb();
10
+ // Simple async mutex implementation to prevent concurrent vault operations
11
+ class AsyncMutex {
12
+ constructor() {
13
+ this.mutex = Promise.resolve();
14
+ }
15
+ async runExclusive(callback) {
16
+ const oldMutex = this.mutex;
17
+ let release;
18
+ this.mutex = new Promise((resolve) => {
19
+ release = resolve;
20
+ });
21
+ await oldMutex;
22
+ try {
23
+ return await callback();
24
+ }
25
+ finally {
26
+ release();
27
+ }
28
+ }
29
+ }
30
+ const vaultMutex = new AsyncMutex();
10
31
  // Single vault for all networks - stores the mnemonic and can derive accounts for any slip44
11
32
  const setEncryptedVault = async (decryptedVault, pwd) => {
12
- const encryptedVault = crypto_js_1.default.AES.encrypt(JSON.stringify(decryptedVault), pwd);
13
- // Always use single 'vault' key for all networks
14
- await storage.set('vault', encryptedVault.toString());
33
+ return vaultMutex.runExclusive(async () => {
34
+ const encryptedVault = crypto_js_1.default.AES.encrypt(JSON.stringify(decryptedVault), pwd);
35
+ // Always use single 'vault' key for all networks
36
+ await storage.set('vault', encryptedVault.toString());
37
+ });
15
38
  };
16
39
  exports.setEncryptedVault = setEncryptedVault;
17
40
  const getDecryptedVault = async (pwd) => {
18
- // Always use single 'vault' key
19
- const vault = await storage.get('vault');
20
- if (!vault) {
21
- throw new Error('Vault not found');
22
- }
23
- const decryptedVault = crypto_js_1.default.AES.decrypt(vault, pwd).toString(crypto_js_1.default.enc.Utf8);
24
- if (!decryptedVault) {
25
- throw new Error('Failed to decrypt vault - invalid password or corrupted data');
26
- }
27
- return JSON.parse(decryptedVault);
41
+ return vaultMutex.runExclusive(async () => {
42
+ // Always use single 'vault' key
43
+ const vault = await storage.get('vault');
44
+ if (!vault) {
45
+ throw new Error('Vault not found');
46
+ }
47
+ const decryptedVault = crypto_js_1.default.AES.decrypt(vault, pwd).toString(crypto_js_1.default.enc.Utf8);
48
+ if (!decryptedVault) {
49
+ throw new Error('Failed to decrypt vault - invalid password or corrupted data');
50
+ }
51
+ return JSON.parse(decryptedVault);
52
+ });
28
53
  };
29
54
  exports.getDecryptedVault = getDecryptedVault;
30
55
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAmD;AACnD,0DAAiC;AAEjC,MAAM,OAAO,GAAG,wBAAS,CAAC,iBAAiB,EAAE,CAAC;AAE9C,6FAA6F;AACtF,MAAM,iBAAiB,GAAG,KAAK,EAAE,cAAmB,EAAE,GAAW,EAAE,EAAE;IAC1E,MAAM,cAAc,GAAG,mBAAQ,CAAC,GAAG,CAAC,OAAO,CACzC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAC9B,GAAG,CACJ,CAAC;IAEF,iDAAiD;IACjD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B;AAEK,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;IACrD,gCAAgC;IAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,cAAc,GAAG,mBAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAC9D,mBAAQ,CAAC,GAAG,CAAC,IAAI,CAClB,CAAC;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC,CAAC;AAnBW,QAAA,iBAAiB,qBAmB5B"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAmD;AACnD,0DAAiC;AAEjC,MAAM,OAAO,GAAG,wBAAS,CAAC,iBAAiB,EAAE,CAAC;AAE9C,2EAA2E;AAC3E,MAAM,UAAU;IAAhB;QACU,UAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiBpC,CAAC;IAfC,KAAK,CAAC,YAAY,CAAI,QAA0B;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAE5B,IAAI,OAAmB,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,OAAO,GAAG,OAAO,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,CAAC;QACf,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,OAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAEpC,6FAA6F;AACtF,MAAM,iBAAiB,GAAG,KAAK,EAAE,cAAmB,EAAE,GAAW,EAAE,EAAE;IAC1E,OAAO,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;QACxC,MAAM,cAAc,GAAG,mBAAQ,CAAC,GAAG,CAAC,OAAO,CACzC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAC9B,GAAG,CACJ,CAAC;QAEF,iDAAiD;QACjD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAVW,QAAA,iBAAiB,qBAU5B;AAEK,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;IACrD,OAAO,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;QACxC,gCAAgC;QAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,cAAc,GAAG,mBAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAC9D,mBAAQ,CAAC,GAAG,CAAC,IAAI,CAClB,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AArBW,QAAA,iBAAiB,qBAqB5B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sidhujag/sysweb3-keyring",
3
- "version": "1.0.502",
3
+ "version": "1.0.503",
4
4
  "description": "Keyring Manager for UTXO and Web3 Wallets",
5
5
  "main": "cjs/index.js",
6
6
  "types": "types/index.d.ts",