diff --git a/package-lock.json b/package-lock.json index 3343f878..faee4fde 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48235,6 +48235,7 @@ "futoin-hkdf": "^1.5.3", "json-rpc-2.0": "^0.2.16", "jsonld": "^6.0.0", + "node-localstorage": "^2.2.1", "p-limit": "2.3.0", "uuid": "^8.3.2", "winston": "^3.3.3" diff --git a/packages/wasm/package.json b/packages/wasm/package.json index a4207316..d661bbf3 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -41,6 +41,7 @@ "futoin-hkdf": "^1.5.3", "json-rpc-2.0": "^0.2.16", "jsonld": "^6.0.0", + "node-localstorage": "^2.2.1", "p-limit": "2.3.0", "uuid": "^8.3.2", "winston": "^3.3.3" diff --git a/packages/wasm/rollup.config.mjs b/packages/wasm/rollup.config.mjs index 6913987a..940bb31b 100644 --- a/packages/wasm/rollup.config.mjs +++ b/packages/wasm/rollup.config.mjs @@ -20,7 +20,7 @@ export default async function () { typescript(), ], input: ['src/**/*.ts', 'src/**/*.js', '!src/**/*.test.ts', '!src/**/*.test.js', '!src/**/*.d.ts'], - external: ['assert'], + external: ['assert', 'node-localstorage'], output: [ { dir: 'lib', diff --git a/packages/wasm/src/services/storage/service.ts b/packages/wasm/src/services/storage/service.ts index fb19ce96..1610c51f 100644 --- a/packages/wasm/src/services/storage/service.ts +++ b/packages/wasm/src/services/storage/service.ts @@ -1,4 +1,20 @@ // @ts-nocheck +let _store; +function getStore() { + if (_store) { + return _store; + } + + if (typeof globalThis !== 'undefined' && globalThis.localStorage) { + _store = globalThis.localStorage; + return _store; + } + + const {LocalStorage} = require('node-localstorage'); + _store = new LocalStorage('./local-storage'); + return _store; +} + export class StorageService { rpcMethods = [ StorageService.prototype.setItem, @@ -12,19 +28,27 @@ export class StorageService { } setItem(...args): Promise { - return global.localStorage.setItem(...args); + return getStore().setItem(...args); } removeItem(...args): Promise { - return global.localStorage.removeItem(...args); + return getStore().removeItem(...args); } getItem(...args): Promise { - return global.localStorage.getItem(...args); + return getStore().getItem(...args); } getAllKeys(): Promise { - return Promise.resolve(Object.keys(global.localStorage)); + const store = getStore(); + const keys = []; + for (let i = 0; i < store.length; i++) { + const key = store.key(i); + if (typeof key === 'string') { + keys.push(key); + } + } + return Promise.resolve(keys); } }