@degreesign/storage 1.0.6 → 1.0.8

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/README.md CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  Use in browsers through CDN
20
20
  ```html
21
21
  <script
22
- src="https://cdn.jsdelivr.net/npm/@degreesign/storage@1.0.6/dist/browser/degreesign.min.js"
22
+ src="https://cdn.jsdelivr.net/npm/@degreesign/storage@1.0.8/dist/browser/degreesign.min.js"
23
23
  ></script>
24
24
  ```
25
25
 
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see degreesign.min.js.LICENSE.txt */
2
- !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.stored=r():e.stored=r()}(this,()=>(()=>{"use strict";var e={28:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.migrateSecure=r.showError=r.getConfig=r.configureStorage=void 0;const a=t(896),o=t(205);let n,c="appData",s="appDB",i="appStorage",d=!1;const y=()=>!d;r.configureStorage=async({storageKey:e,dbName:r,storeName:t,encryptionKey:a,hideErrors:g})=>{try{const y={storageKey:e,dbName:r||s,storeName:t||i,encryptionKey:a};c=e,y.dbName&&(s=y.dbName),y.storeName&&(i=y.storeName),n=a?await(0,o.cryptoKey)(a):void 0,d=g??d}catch(e){y()&&console.log("configureStorage failed",e)}},r.getConfig=()=>({storageKey:c,dbName:s,storeName:i,ENCRYPTION_KEY:n,hideErrors:d}),r.showError=y,r.migrateSecure=async({storedKeys:e,newEncryptionKey:r,newDbName:t,newStoreName:c})=>{y()&&console.log("Data migration started...");const d=n,g=s,l=i;n=await(0,o.cryptoKey)(r)??n,s=t??s,i=c??i;for(let r=0;r<e.length;r++){const t=e[r];try{const e=await(0,a.readDB)({key:t,dbName:g,storeName:l}),r=e?d?await(0,o.decryptData)(e,d):JSON.parse(e):void 0,c=r?n?await(0,o.encryptData)(r,n):JSON.stringify(r):void 0;c&&await(0,a.saveDB)({key:t,data:c,dbName:s,storeName:i})}catch(e){y()&&console.log("migrateSecure failed",t,e)}}y()&&console.log("Data migration finished!")}},205:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.decrypt=r.encrypt=r.decryptData=r.encryptData=r.cryptoKey=void 0;const a=t(28),o=async(e,r)=>{try{const t=crypto.getRandomValues(new Uint8Array(12)),a=(new TextEncoder).encode(JSON.stringify(e)),o=await crypto.subtle.encrypt({name:"AES-GCM",iv:t},r,a),n=new Uint8Array(o),c=new Uint8Array(t.length+n.length);return c.set(t),c.set(n,t.length),btoa(String.fromCharCode(...c))}catch(r){(0,a.showError)()&&console.log("encryptData failed",r);try{return JSON.stringify(e)}catch(e){}}},n=async(e,r)=>{try{const t=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),a=t.slice(0,12),o=t.slice(12),n=await crypto.subtle.decrypt({name:"AES-GCM",iv:a},r,o);return JSON.parse((new TextDecoder).decode(n))}catch(e){(0,a.showError)()&&console.log("decryptData failed",e)}};r.cryptoKey=async e=>{try{if(!e)return;const r=await crypto.subtle.importKey("raw",(new TextEncoder).encode(e),"PBKDF2",!1,["deriveKey"]);return await crypto.subtle.deriveKey({name:"PBKDF2",salt:(new TextEncoder).encode("salt"),iterations:1e5,hash:"SHA-256"},r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}catch(e){(0,a.showError)()&&console.log("processKey failed",e)}},r.encryptData=o,r.decryptData=n,r.encrypt=async e=>{try{const{ENCRYPTION_KEY:r}=(0,a.getConfig)();return r?await o(e,r):JSON.stringify(e)}catch(r){(0,a.showError)()&&console.log("encrypt failed",r);try{return JSON.stringify(e)}catch(e){}}},r.decrypt=async e=>{try{const{ENCRYPTION_KEY:r}=(0,a.getConfig)();return r?await n(e,r):JSON.parse(e)}catch(e){(0,a.showError)()&&console.log("decrypt failed",e)}}},247:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readSecure=r.saveSecure=void 0;const a=t(28),o=t(896),n=t(205);r.saveSecure=async({key:e,data:r})=>{try{const{dbName:t,storeName:c}=(0,a.getConfig)();return await(0,o.saveDB)({key:e,data:r?await(0,n.encrypt)(r):void 0,dbName:t,storeName:c})}catch(e){(0,a.showError)()&&console.log("saveSecure failed",e)}return!1},r.readSecure=async e=>{try{const{dbName:r,storeName:t}=(0,a.getConfig)(),c=await(0,o.readDB)({key:e,dbName:r,storeName:t});return c?await(0,n.decrypt)(c):void 0}catch(e){(0,a.showError)()&&console.log("readSecure failed",e)}}},421:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readData=r.saveData=void 0;const a=t(28);r.saveData=({key:e,data:r})=>{try{void 0===r?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(r))}catch(e){(0,a.showError)()&&console.log("saveData failed",e)}},r.readData=e=>{try{const r=localStorage.getItem(e);return r?JSON.parse(r):void 0}catch(e){(0,a.showError)()&&console.log("readData failed",e)}}},896:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readDB=r.saveDB=r.openDB=void 0;const a=t(28),o=({dbName:e,storeName:r,version:t=1}={})=>new Promise((o,n)=>{e=e||(0,a.getConfig)().dbName;const c=indexedDB.open(e,t);c.onupgradeneeded=()=>{r=r||(0,a.getConfig)().storeName;const e=c.result;e.objectStoreNames.contains(r)||e.createObjectStore(r,{keyPath:"id"})},c.onsuccess=()=>o(c.result),c.onerror=()=>{(0,a.showError)()&&console.log("openDB failed",c.error),n(c.error)}});r.openDB=o,r.saveDB=async({key:e,data:r,dbName:t,storeName:n})=>{try{const c=await o({dbName:t,storeName:n});return new Promise(t=>{const o=c.transaction([n],"readwrite").objectStore(n),s=r?o.put({id:e,data:r}):o.delete(e);s.onsuccess=()=>t(!0),s.onerror=()=>{(0,a.showError)()&&console.log("saveDB error",s.error),t(!1)},c.close()})}catch(e){(0,a.showError)()&&console.log("saveSecure failed",e)}return!1},r.readDB=async({key:e,dbName:r,storeName:t})=>{try{const n=await o({dbName:r,storeName:t});return new Promise(r=>{const o=n.transaction([t],"readonly").objectStore(t).get(e);o.onsuccess=()=>r(o?.result?.data),o.onerror=()=>{(0,a.showError)()&&console.log("readDB error",o.error),r(void 0)},n.close()})}catch(e){(0,a.showError)()&&console.log("readDB failed",e)}}},915:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readLarge=r.saveLarge=void 0;const a=t(28),o=t(896);r.saveLarge=async({key:e,data:r})=>{try{const{dbName:t,storeName:n}=(0,a.getConfig)();return await(0,o.saveDB)({key:e,data:r?JSON.stringify(r):void 0,dbName:t,storeName:n})}catch(e){(0,a.showError)()&&console.log("saveLarge failed",e)}return!1},r.readLarge=async e=>{try{const{dbName:r,storeName:t}=(0,a.getConfig)(),n=await(0,o.readDB)({key:e,dbName:r,storeName:t});return n?JSON.parse(n):void 0}catch(e){(0,a.showError)()&&console.log("readLarge failed",e)}}}},r={};function t(a){var o=r[a];if(void 0!==o)return o.exports;var n=r[a]={exports:{}};return e[a](n,n.exports,t),n.exports}var a={};return(()=>{var e=a;Object.defineProperty(e,"__esModule",{value:!0}),e.decryptData=e.encryptData=e.saveSecure=e.readSecure=e.saveLarge=e.readLarge=e.saveData=e.readData=e.migrateSecure=e.getConfig=e.configureStorage=void 0;const r=t(28);Object.defineProperty(e,"configureStorage",{enumerable:!0,get:function(){return r.configureStorage}}),Object.defineProperty(e,"getConfig",{enumerable:!0,get:function(){return r.getConfig}}),Object.defineProperty(e,"migrateSecure",{enumerable:!0,get:function(){return r.migrateSecure}});const o=t(421);Object.defineProperty(e,"readData",{enumerable:!0,get:function(){return o.readData}}),Object.defineProperty(e,"saveData",{enumerable:!0,get:function(){return o.saveData}});const n=t(915);Object.defineProperty(e,"readLarge",{enumerable:!0,get:function(){return n.readLarge}}),Object.defineProperty(e,"saveLarge",{enumerable:!0,get:function(){return n.saveLarge}});const c=t(247);Object.defineProperty(e,"readSecure",{enumerable:!0,get:function(){return c.readSecure}}),Object.defineProperty(e,"saveSecure",{enumerable:!0,get:function(){return c.saveSecure}});const s=t(205);Object.defineProperty(e,"decryptData",{enumerable:!0,get:function(){return s.decryptData}}),Object.defineProperty(e,"encryptData",{enumerable:!0,get:function(){return s.encryptData}})})(),a})());
2
+ !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.stored=r():e.stored=r()}(this,()=>(()=>{"use strict";var e={28:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.migrateSecure=r.showError=r.config=r.configureStorage=void 0;const a=t(896),o=t(205),n={storageKey:"appData",dbName:"appDB",storeName:"appStorage",encryptionKey:void 0,hideErrors:!1,cacheStorage:!0},c=()=>!n.hideErrors;r.config=n,r.configureStorage=async({storageKey:e,dbName:r,storeName:t,encryptionKey:a,hideErrors:s,cacheStorage:i})=>{try{e&&(n.storageKey=e),r&&(n.dbName=r),t&&(n.storeName=t),a&&(n.encryptionKey=await(0,o.cryptoKey)(a)),null!=s&&(n.hideErrors=s),null!=i&&(n.cacheStorage=i)}catch(e){c()&&console.log("configureStorage failed",e)}},r.showError=c,r.migrateSecure=async({storedKeys:e,newEncryptionKey:r,newDbName:t,newStoreName:s})=>{c()&&console.log("Data migration started...");const i=n.encryptionKey,d=n.dbName,y=n.storeName;n.encryptionKey=await(0,o.cryptoKey)(r)??n.encryptionKey,n.dbName=t??n.dbName,n.storeName=s??n.storeName;for(let r=0;r<e.length;r++){const t=e[r];try{const e=await(0,a.readDB)({key:t,dbName:d,storeName:y}),r=e?i?await(0,o.decryptData)(e,i):JSON.parse(e):void 0,c=r?n.encryptionKey?await(0,o.encryptData)(r,n.encryptionKey):JSON.stringify(r):void 0;c&&await(0,a.saveDB)({key:t,data:c,dbName:n.dbName,storeName:n.storeName})}catch(e){c()&&console.log("migrateSecure failed",t,e)}}c()&&console.log("Data migration finished!")}},205:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.decrypt=r.encrypt=r.decryptData=r.encryptData=r.cryptoKey=void 0;const a=t(28),o=async(e,r)=>{try{const t=crypto.getRandomValues(new Uint8Array(12)),a=(new TextEncoder).encode(JSON.stringify(e)),o=await crypto.subtle.encrypt({name:"AES-GCM",iv:t},r,a),n=new Uint8Array(o),c=new Uint8Array(t.length+n.length);return c.set(t),c.set(n,t.length),btoa(String.fromCharCode(...c))}catch(r){(0,a.showError)()&&console.log("encryptData failed",r);try{return JSON.stringify(e)}catch(e){}}},n=async(e,r)=>{try{const t=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),a=t.slice(0,12),o=t.slice(12),n=await crypto.subtle.decrypt({name:"AES-GCM",iv:a},r,o);return JSON.parse((new TextDecoder).decode(n))}catch(e){(0,a.showError)()&&console.log("decryptData failed",e)}};r.cryptoKey=async e=>{try{if(!e)return;const r=await crypto.subtle.importKey("raw",(new TextEncoder).encode(e),"PBKDF2",!1,["deriveKey"]);return await crypto.subtle.deriveKey({name:"PBKDF2",salt:(new TextEncoder).encode("salt"),iterations:1e5,hash:"SHA-256"},r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}catch(e){(0,a.showError)()&&console.log("processKey failed",e)}},r.encryptData=o,r.decryptData=n,r.encrypt=async e=>{try{return a.config?.encryptionKey?await o(e,a.config.encryptionKey):JSON.stringify(e)}catch(r){(0,a.showError)()&&console.log("encrypt failed",r);try{return JSON.stringify(e)}catch(e){}}},r.decrypt=async e=>{try{return a.config?.encryptionKey?await n(e,a.config.encryptionKey):JSON.parse(e)}catch(e){(0,a.showError)()&&console.log("decrypt failed",e)}}},247:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readSecure=r.saveSecure=void 0;const a=t(28),o=t(896),n=t(205);r.saveSecure=async({key:e,data:r})=>{try{return await(0,o.saveDB)({key:e,data:r?await(0,n.encrypt)(r):void 0,dbName:a.config.dbName,storeName:a.config.storeName})}catch(e){(0,a.showError)()&&console.log("saveSecure failed",e)}return!1},r.readSecure=async e=>{try{const r=await(0,o.readDB)({key:e,dbName:a.config.dbName,storeName:a.config.storeName});return r?await(0,n.decrypt)(r):void 0}catch(e){(0,a.showError)()&&console.log("readSecure failed",e)}}},421:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readData=r.saveData=void 0;const a=t(28);r.saveData=({key:e,data:r})=>{try{void 0===r?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(r))}catch(e){(0,a.showError)()&&console.log("saveData failed",e)}},r.readData=e=>{try{const r=localStorage.getItem(e);return r?JSON.parse(r):void 0}catch(e){(0,a.showError)()&&console.log("readData failed",e)}}},896:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readDB=r.saveDB=r.openDB=void 0;const a=t(28),o=({dbName:e,storeName:r,version:t=1}={})=>new Promise((o,n)=>{e=e||a.config.dbName;const c=indexedDB.open(e,t);c.onupgradeneeded=()=>{r=r||a.config.storeName;const e=c.result;e.objectStoreNames.contains(r)||e.createObjectStore(r,{keyPath:"id"})},c.onsuccess=()=>o(c.result),c.onerror=()=>{(0,a.showError)()&&console.log("openDB failed",c.error),n(c.error)}});r.openDB=o,r.saveDB=async({key:e,data:r,dbName:t,storeName:n})=>{try{const c=await o({dbName:t,storeName:n});return new Promise(t=>{const o=c.transaction([n],"readwrite").objectStore(n),s=r?o.put({id:e,data:r}):o.delete(e);s.onsuccess=()=>t(!0),s.onerror=()=>{(0,a.showError)()&&console.log("saveDB error",s.error),t(!1)},c.close()})}catch(e){(0,a.showError)()&&console.log("saveSecure failed",e)}return!1},r.readDB=async({key:e,dbName:r,storeName:t})=>{try{const n=await o({dbName:r,storeName:t});return new Promise(r=>{const o=n.transaction([t],"readonly").objectStore(t).get(e);o.onsuccess=()=>r(o?.result?.data),o.onerror=()=>{(0,a.showError)()&&console.log("readDB error",o.error),r(void 0)},n.close()})}catch(e){(0,a.showError)()&&console.log("readDB failed",e)}}},915:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readLarge=r.saveLarge=void 0;const a=t(28),o=t(896),n={};r.saveLarge=async({key:e,data:r})=>{try{return a.config.cacheStorage&&r&&(n[e]=r),await(0,o.saveDB)({key:e,data:r?JSON.stringify(r):void 0,dbName:a.config.dbName,storeName:a.config.storeName})}catch(e){(0,a.showError)()&&console.log("saveLarge failed",e)}return!1},r.readLarge=async e=>{try{if(a.config.cacheStorage&&n[e])return n[e];const r=await(0,o.readDB)({key:e,dbName:a.config.dbName,storeName:a.config.storeName}),t=r?JSON.parse(r):void 0;return a.config.cacheStorage&&t&&(n[e]=t),t}catch(e){(0,a.showError)()&&console.log("readLarge failed",e)}}}},r={};function t(a){var o=r[a];if(void 0!==o)return o.exports;var n=r[a]={exports:{}};return e[a](n,n.exports,t),n.exports}var a={};return(()=>{var e=a;Object.defineProperty(e,"__esModule",{value:!0}),e.decryptData=e.encryptData=e.saveSecure=e.readSecure=e.saveLarge=e.readLarge=e.saveData=e.readData=e.migrateSecure=e.config=e.configureStorage=void 0;const r=t(28);Object.defineProperty(e,"configureStorage",{enumerable:!0,get:function(){return r.configureStorage}}),Object.defineProperty(e,"config",{enumerable:!0,get:function(){return r.config}}),Object.defineProperty(e,"migrateSecure",{enumerable:!0,get:function(){return r.migrateSecure}});const o=t(421);Object.defineProperty(e,"readData",{enumerable:!0,get:function(){return o.readData}}),Object.defineProperty(e,"saveData",{enumerable:!0,get:function(){return o.saveData}});const n=t(915);Object.defineProperty(e,"readLarge",{enumerable:!0,get:function(){return n.readLarge}}),Object.defineProperty(e,"saveLarge",{enumerable:!0,get:function(){return n.saveLarge}});const c=t(247);Object.defineProperty(e,"readSecure",{enumerable:!0,get:function(){return c.readSecure}}),Object.defineProperty(e,"saveSecure",{enumerable:!0,get:function(){return c.saveSecure}});const s=t(205);Object.defineProperty(e,"decryptData",{enumerable:!0,get:function(){return s.decryptData}}),Object.defineProperty(e,"encryptData",{enumerable:!0,get:function(){return s.encryptData}})})(),a})());
package/dist/config.d.ts CHANGED
@@ -1,15 +1,11 @@
1
- import { ConfigParams, MigrationParams } from "./types";
1
+ import { ConfigInternal, ConfigParams, MigrationParams } from "./types";
2
2
  declare const
3
+ /** Storage System Configuration */
4
+ config: ConfigInternal,
3
5
  /** Configure Storage System */
4
- configureStorage: ({ storageKey, dbName, storeName, encryptionKey, hideErrors }: ConfigParams) => Promise<void>,
5
- /** Get Configuration */
6
- getConfig: () => {
7
- storageKey: string;
8
- dbName: string;
9
- storeName: string;
10
- ENCRYPTION_KEY: CryptoKey | undefined;
11
- hideErrors: boolean;
12
- }, showError: () => boolean,
6
+ configureStorage: ({ storageKey, dbName, storeName, encryptionKey, hideErrors, cacheStorage, }: ConfigParams) => Promise<void>,
7
+ /** Log errors */
8
+ showError: () => boolean,
13
9
  /** Migrate Data */
14
10
  migrateSecure: ({ storedKeys, newEncryptionKey, newDbName, newStoreName, }: MigrationParams) => Promise<void>;
15
- export { configureStorage, getConfig, showError, migrateSecure, };
11
+ export { configureStorage, config, showError, migrateSecure, };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { configureStorage, getConfig, migrateSecure } from "./config";
1
+ import { configureStorage, config, migrateSecure } from "./config";
2
2
  import { readData, saveData } from "./storage";
3
3
  import { readLarge, saveLarge } from "./large";
4
4
  import { readSecure, saveSecure } from "./secure";
5
5
  import { StorageParams, ConfigParams } from "./types";
6
6
  import { decryptData, encryptData } from "./encrypt";
7
- export { StorageParams, ConfigParams, configureStorage, getConfig, migrateSecure, readData, saveData, readLarge, saveLarge, readSecure, saveSecure, encryptData, decryptData, };
7
+ export { StorageParams, ConfigParams, configureStorage, config, migrateSecure, readData, saveData, readLarge, saveLarge, readSecure, saveSecure, encryptData, decryptData, };
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see degreesign.node.min.js.LICENSE.txt */
2
- (()=>{"use strict";var e={28:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.migrateSecure=r.showError=r.getConfig=r.configureStorage=void 0;const a=t(896),o=t(205);let n,c="appData",s="appDB",i="appStorage",d=!1;const y=()=>!d;r.configureStorage=async({storageKey:e,dbName:r,storeName:t,encryptionKey:a,hideErrors:g})=>{try{const y={storageKey:e,dbName:r||s,storeName:t||i,encryptionKey:a};c=e,y.dbName&&(s=y.dbName),y.storeName&&(i=y.storeName),n=a?await(0,o.cryptoKey)(a):void 0,d=g??d}catch(e){y()&&console.log("configureStorage failed",e)}},r.getConfig=()=>({storageKey:c,dbName:s,storeName:i,ENCRYPTION_KEY:n,hideErrors:d}),r.showError=y,r.migrateSecure=async({storedKeys:e,newEncryptionKey:r,newDbName:t,newStoreName:c})=>{y()&&console.log("Data migration started...");const d=n,g=s,l=i;n=await(0,o.cryptoKey)(r)??n,s=t??s,i=c??i;for(let r=0;r<e.length;r++){const t=e[r];try{const e=await(0,a.readDB)({key:t,dbName:g,storeName:l}),r=e?d?await(0,o.decryptData)(e,d):JSON.parse(e):void 0,c=r?n?await(0,o.encryptData)(r,n):JSON.stringify(r):void 0;c&&await(0,a.saveDB)({key:t,data:c,dbName:s,storeName:i})}catch(e){y()&&console.log("migrateSecure failed",t,e)}}y()&&console.log("Data migration finished!")}},205:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.decrypt=r.encrypt=r.decryptData=r.encryptData=r.cryptoKey=void 0;const a=t(28),o=async(e,r)=>{try{const t=crypto.getRandomValues(new Uint8Array(12)),a=(new TextEncoder).encode(JSON.stringify(e)),o=await crypto.subtle.encrypt({name:"AES-GCM",iv:t},r,a),n=new Uint8Array(o),c=new Uint8Array(t.length+n.length);return c.set(t),c.set(n,t.length),btoa(String.fromCharCode(...c))}catch(r){(0,a.showError)()&&console.log("encryptData failed",r);try{return JSON.stringify(e)}catch(e){}}},n=async(e,r)=>{try{const t=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),a=t.slice(0,12),o=t.slice(12),n=await crypto.subtle.decrypt({name:"AES-GCM",iv:a},r,o);return JSON.parse((new TextDecoder).decode(n))}catch(e){(0,a.showError)()&&console.log("decryptData failed",e)}};r.cryptoKey=async e=>{try{if(!e)return;const r=await crypto.subtle.importKey("raw",(new TextEncoder).encode(e),"PBKDF2",!1,["deriveKey"]);return await crypto.subtle.deriveKey({name:"PBKDF2",salt:(new TextEncoder).encode("salt"),iterations:1e5,hash:"SHA-256"},r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}catch(e){(0,a.showError)()&&console.log("processKey failed",e)}},r.encryptData=o,r.decryptData=n,r.encrypt=async e=>{try{const{ENCRYPTION_KEY:r}=(0,a.getConfig)();return r?await o(e,r):JSON.stringify(e)}catch(r){(0,a.showError)()&&console.log("encrypt failed",r);try{return JSON.stringify(e)}catch(e){}}},r.decrypt=async e=>{try{const{ENCRYPTION_KEY:r}=(0,a.getConfig)();return r?await n(e,r):JSON.parse(e)}catch(e){(0,a.showError)()&&console.log("decrypt failed",e)}}},247:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readSecure=r.saveSecure=void 0;const a=t(28),o=t(896),n=t(205);r.saveSecure=async({key:e,data:r})=>{try{const{dbName:t,storeName:c}=(0,a.getConfig)();return await(0,o.saveDB)({key:e,data:r?await(0,n.encrypt)(r):void 0,dbName:t,storeName:c})}catch(e){(0,a.showError)()&&console.log("saveSecure failed",e)}return!1},r.readSecure=async e=>{try{const{dbName:r,storeName:t}=(0,a.getConfig)(),c=await(0,o.readDB)({key:e,dbName:r,storeName:t});return c?await(0,n.decrypt)(c):void 0}catch(e){(0,a.showError)()&&console.log("readSecure failed",e)}}},421:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readData=r.saveData=void 0;const a=t(28);r.saveData=({key:e,data:r})=>{try{void 0===r?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(r))}catch(e){(0,a.showError)()&&console.log("saveData failed",e)}},r.readData=e=>{try{const r=localStorage.getItem(e);return r?JSON.parse(r):void 0}catch(e){(0,a.showError)()&&console.log("readData failed",e)}}},896:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readDB=r.saveDB=r.openDB=void 0;const a=t(28),o=({dbName:e,storeName:r,version:t=1}={})=>new Promise((o,n)=>{e=e||(0,a.getConfig)().dbName;const c=indexedDB.open(e,t);c.onupgradeneeded=()=>{r=r||(0,a.getConfig)().storeName;const e=c.result;e.objectStoreNames.contains(r)||e.createObjectStore(r,{keyPath:"id"})},c.onsuccess=()=>o(c.result),c.onerror=()=>{(0,a.showError)()&&console.log("openDB failed",c.error),n(c.error)}});r.openDB=o,r.saveDB=async({key:e,data:r,dbName:t,storeName:n})=>{try{const c=await o({dbName:t,storeName:n});return new Promise(t=>{const o=c.transaction([n],"readwrite").objectStore(n),s=r?o.put({id:e,data:r}):o.delete(e);s.onsuccess=()=>t(!0),s.onerror=()=>{(0,a.showError)()&&console.log("saveDB error",s.error),t(!1)},c.close()})}catch(e){(0,a.showError)()&&console.log("saveSecure failed",e)}return!1},r.readDB=async({key:e,dbName:r,storeName:t})=>{try{const n=await o({dbName:r,storeName:t});return new Promise(r=>{const o=n.transaction([t],"readonly").objectStore(t).get(e);o.onsuccess=()=>r(o?.result?.data),o.onerror=()=>{(0,a.showError)()&&console.log("readDB error",o.error),r(void 0)},n.close()})}catch(e){(0,a.showError)()&&console.log("readDB failed",e)}}},915:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readLarge=r.saveLarge=void 0;const a=t(28),o=t(896);r.saveLarge=async({key:e,data:r})=>{try{const{dbName:t,storeName:n}=(0,a.getConfig)();return await(0,o.saveDB)({key:e,data:r?JSON.stringify(r):void 0,dbName:t,storeName:n})}catch(e){(0,a.showError)()&&console.log("saveLarge failed",e)}return!1},r.readLarge=async e=>{try{const{dbName:r,storeName:t}=(0,a.getConfig)(),n=await(0,o.readDB)({key:e,dbName:r,storeName:t});return n?JSON.parse(n):void 0}catch(e){(0,a.showError)()&&console.log("readLarge failed",e)}}}},r={};function t(a){var o=r[a];if(void 0!==o)return o.exports;var n=r[a]={exports:{}};return e[a](n,n.exports,t),n.exports}var a={};(()=>{var e=a;Object.defineProperty(e,"__esModule",{value:!0}),e.decryptData=e.encryptData=e.saveSecure=e.readSecure=e.saveLarge=e.readLarge=e.saveData=e.readData=e.migrateSecure=e.getConfig=e.configureStorage=void 0;const r=t(28);Object.defineProperty(e,"configureStorage",{enumerable:!0,get:function(){return r.configureStorage}}),Object.defineProperty(e,"getConfig",{enumerable:!0,get:function(){return r.getConfig}}),Object.defineProperty(e,"migrateSecure",{enumerable:!0,get:function(){return r.migrateSecure}});const o=t(421);Object.defineProperty(e,"readData",{enumerable:!0,get:function(){return o.readData}}),Object.defineProperty(e,"saveData",{enumerable:!0,get:function(){return o.saveData}});const n=t(915);Object.defineProperty(e,"readLarge",{enumerable:!0,get:function(){return n.readLarge}}),Object.defineProperty(e,"saveLarge",{enumerable:!0,get:function(){return n.saveLarge}});const c=t(247);Object.defineProperty(e,"readSecure",{enumerable:!0,get:function(){return c.readSecure}}),Object.defineProperty(e,"saveSecure",{enumerable:!0,get:function(){return c.saveSecure}});const s=t(205);Object.defineProperty(e,"decryptData",{enumerable:!0,get:function(){return s.decryptData}}),Object.defineProperty(e,"encryptData",{enumerable:!0,get:function(){return s.encryptData}})})();var o=exports;for(var n in a)o[n]=a[n];a.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
2
+ (()=>{"use strict";var e={28:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.migrateSecure=r.showError=r.config=r.configureStorage=void 0;const a=t(896),o=t(205),n={storageKey:"appData",dbName:"appDB",storeName:"appStorage",encryptionKey:void 0,hideErrors:!1,cacheStorage:!0},c=()=>!n.hideErrors;r.config=n,r.configureStorage=async({storageKey:e,dbName:r,storeName:t,encryptionKey:a,hideErrors:s,cacheStorage:i})=>{try{e&&(n.storageKey=e),r&&(n.dbName=r),t&&(n.storeName=t),a&&(n.encryptionKey=await(0,o.cryptoKey)(a)),null!=s&&(n.hideErrors=s),null!=i&&(n.cacheStorage=i)}catch(e){c()&&console.log("configureStorage failed",e)}},r.showError=c,r.migrateSecure=async({storedKeys:e,newEncryptionKey:r,newDbName:t,newStoreName:s})=>{c()&&console.log("Data migration started...");const i=n.encryptionKey,d=n.dbName,y=n.storeName;n.encryptionKey=await(0,o.cryptoKey)(r)??n.encryptionKey,n.dbName=t??n.dbName,n.storeName=s??n.storeName;for(let r=0;r<e.length;r++){const t=e[r];try{const e=await(0,a.readDB)({key:t,dbName:d,storeName:y}),r=e?i?await(0,o.decryptData)(e,i):JSON.parse(e):void 0,c=r?n.encryptionKey?await(0,o.encryptData)(r,n.encryptionKey):JSON.stringify(r):void 0;c&&await(0,a.saveDB)({key:t,data:c,dbName:n.dbName,storeName:n.storeName})}catch(e){c()&&console.log("migrateSecure failed",t,e)}}c()&&console.log("Data migration finished!")}},205:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.decrypt=r.encrypt=r.decryptData=r.encryptData=r.cryptoKey=void 0;const a=t(28),o=async(e,r)=>{try{const t=crypto.getRandomValues(new Uint8Array(12)),a=(new TextEncoder).encode(JSON.stringify(e)),o=await crypto.subtle.encrypt({name:"AES-GCM",iv:t},r,a),n=new Uint8Array(o),c=new Uint8Array(t.length+n.length);return c.set(t),c.set(n,t.length),btoa(String.fromCharCode(...c))}catch(r){(0,a.showError)()&&console.log("encryptData failed",r);try{return JSON.stringify(e)}catch(e){}}},n=async(e,r)=>{try{const t=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),a=t.slice(0,12),o=t.slice(12),n=await crypto.subtle.decrypt({name:"AES-GCM",iv:a},r,o);return JSON.parse((new TextDecoder).decode(n))}catch(e){(0,a.showError)()&&console.log("decryptData failed",e)}};r.cryptoKey=async e=>{try{if(!e)return;const r=await crypto.subtle.importKey("raw",(new TextEncoder).encode(e),"PBKDF2",!1,["deriveKey"]);return await crypto.subtle.deriveKey({name:"PBKDF2",salt:(new TextEncoder).encode("salt"),iterations:1e5,hash:"SHA-256"},r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}catch(e){(0,a.showError)()&&console.log("processKey failed",e)}},r.encryptData=o,r.decryptData=n,r.encrypt=async e=>{try{return a.config?.encryptionKey?await o(e,a.config.encryptionKey):JSON.stringify(e)}catch(r){(0,a.showError)()&&console.log("encrypt failed",r);try{return JSON.stringify(e)}catch(e){}}},r.decrypt=async e=>{try{return a.config?.encryptionKey?await n(e,a.config.encryptionKey):JSON.parse(e)}catch(e){(0,a.showError)()&&console.log("decrypt failed",e)}}},247:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readSecure=r.saveSecure=void 0;const a=t(28),o=t(896),n=t(205);r.saveSecure=async({key:e,data:r})=>{try{return await(0,o.saveDB)({key:e,data:r?await(0,n.encrypt)(r):void 0,dbName:a.config.dbName,storeName:a.config.storeName})}catch(e){(0,a.showError)()&&console.log("saveSecure failed",e)}return!1},r.readSecure=async e=>{try{const r=await(0,o.readDB)({key:e,dbName:a.config.dbName,storeName:a.config.storeName});return r?await(0,n.decrypt)(r):void 0}catch(e){(0,a.showError)()&&console.log("readSecure failed",e)}}},421:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readData=r.saveData=void 0;const a=t(28);r.saveData=({key:e,data:r})=>{try{void 0===r?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(r))}catch(e){(0,a.showError)()&&console.log("saveData failed",e)}},r.readData=e=>{try{const r=localStorage.getItem(e);return r?JSON.parse(r):void 0}catch(e){(0,a.showError)()&&console.log("readData failed",e)}}},896:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readDB=r.saveDB=r.openDB=void 0;const a=t(28),o=({dbName:e,storeName:r,version:t=1}={})=>new Promise((o,n)=>{e=e||a.config.dbName;const c=indexedDB.open(e,t);c.onupgradeneeded=()=>{r=r||a.config.storeName;const e=c.result;e.objectStoreNames.contains(r)||e.createObjectStore(r,{keyPath:"id"})},c.onsuccess=()=>o(c.result),c.onerror=()=>{(0,a.showError)()&&console.log("openDB failed",c.error),n(c.error)}});r.openDB=o,r.saveDB=async({key:e,data:r,dbName:t,storeName:n})=>{try{const c=await o({dbName:t,storeName:n});return new Promise(t=>{const o=c.transaction([n],"readwrite").objectStore(n),s=r?o.put({id:e,data:r}):o.delete(e);s.onsuccess=()=>t(!0),s.onerror=()=>{(0,a.showError)()&&console.log("saveDB error",s.error),t(!1)},c.close()})}catch(e){(0,a.showError)()&&console.log("saveSecure failed",e)}return!1},r.readDB=async({key:e,dbName:r,storeName:t})=>{try{const n=await o({dbName:r,storeName:t});return new Promise(r=>{const o=n.transaction([t],"readonly").objectStore(t).get(e);o.onsuccess=()=>r(o?.result?.data),o.onerror=()=>{(0,a.showError)()&&console.log("readDB error",o.error),r(void 0)},n.close()})}catch(e){(0,a.showError)()&&console.log("readDB failed",e)}}},915:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.readLarge=r.saveLarge=void 0;const a=t(28),o=t(896),n={};r.saveLarge=async({key:e,data:r})=>{try{return a.config.cacheStorage&&r&&(n[e]=r),await(0,o.saveDB)({key:e,data:r?JSON.stringify(r):void 0,dbName:a.config.dbName,storeName:a.config.storeName})}catch(e){(0,a.showError)()&&console.log("saveLarge failed",e)}return!1},r.readLarge=async e=>{try{if(a.config.cacheStorage&&n[e])return n[e];const r=await(0,o.readDB)({key:e,dbName:a.config.dbName,storeName:a.config.storeName}),t=r?JSON.parse(r):void 0;return a.config.cacheStorage&&t&&(n[e]=t),t}catch(e){(0,a.showError)()&&console.log("readLarge failed",e)}}}},r={};function t(a){var o=r[a];if(void 0!==o)return o.exports;var n=r[a]={exports:{}};return e[a](n,n.exports,t),n.exports}var a={};(()=>{var e=a;Object.defineProperty(e,"__esModule",{value:!0}),e.decryptData=e.encryptData=e.saveSecure=e.readSecure=e.saveLarge=e.readLarge=e.saveData=e.readData=e.migrateSecure=e.config=e.configureStorage=void 0;const r=t(28);Object.defineProperty(e,"configureStorage",{enumerable:!0,get:function(){return r.configureStorage}}),Object.defineProperty(e,"config",{enumerable:!0,get:function(){return r.config}}),Object.defineProperty(e,"migrateSecure",{enumerable:!0,get:function(){return r.migrateSecure}});const o=t(421);Object.defineProperty(e,"readData",{enumerable:!0,get:function(){return o.readData}}),Object.defineProperty(e,"saveData",{enumerable:!0,get:function(){return o.saveData}});const n=t(915);Object.defineProperty(e,"readLarge",{enumerable:!0,get:function(){return n.readLarge}}),Object.defineProperty(e,"saveLarge",{enumerable:!0,get:function(){return n.saveLarge}});const c=t(247);Object.defineProperty(e,"readSecure",{enumerable:!0,get:function(){return c.readSecure}}),Object.defineProperty(e,"saveSecure",{enumerable:!0,get:function(){return c.saveSecure}});const s=t(205);Object.defineProperty(e,"decryptData",{enumerable:!0,get:function(){return s.decryptData}}),Object.defineProperty(e,"encryptData",{enumerable:!0,get:function(){return s.encryptData}})})();var o=exports;for(var n in a)o[n]=a[n];a.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
package/dist/types.d.ts CHANGED
@@ -25,7 +25,16 @@ interface ConfigParams {
25
25
  storageKey: string;
26
26
  dbName?: string;
27
27
  storeName?: string;
28
- encryptionKey?: string;
29
28
  hideErrors?: boolean;
29
+ cacheStorage?: boolean;
30
+ encryptionKey?: string;
31
+ }
32
+ interface ConfigInternal {
33
+ storageKey: string;
34
+ dbName: string;
35
+ storeName: string;
36
+ hideErrors: boolean;
37
+ cacheStorage: boolean;
38
+ encryptionKey?: CryptoKey;
30
39
  }
31
- export { DBConfig, DBRead, DBSave, MigrationParams, StorageParams, ConfigParams, };
40
+ export { DBConfig, DBRead, DBSave, MigrationParams, StorageParams, ConfigParams, ConfigInternal, };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@degreesign/storage",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "DegreeSign Storage System",
5
5
  "main": "dist/node/degreesign.node.min.js",
6
6
  "module": "dist/node/degreesign.node.min.js",