From 0e2460d94028b35831b0c28c5bd166170ade5f9d Mon Sep 17 00:00:00 2001 From: Maycon Mello Date: Fri, 3 Jul 2026 14:32:01 -0300 Subject: [PATCH 1/2] fix: support node.js runtime in wasm storage service --- package-lock.json | 1 + packages/wasm/package.json | 1 + packages/wasm/rollup.config.mjs | 2 +- packages/wasm/src/services/storage/service.ts | 29 ++++++++++++++++--- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index fb2f864a..47aa4817 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48248,6 +48248,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 d3ebdd7f..e2742475 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..9c2925a9 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 global !== 'undefined' && global.localStorage) { + _store = global.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,24 @@ 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++) { + keys.push(store.key(i)); + } + return Promise.resolve(keys); } } From 23be5aea1062aed6b7c47d5eaccc24fbcd7031d1 Mon Sep 17 00:00:00 2001 From: Maycon Mello Date: Fri, 3 Jul 2026 14:51:01 -0300 Subject: [PATCH 2/2] harden storage getStore for browser runtimes and filter null keys --- packages/wasm/src/services/storage/service.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/wasm/src/services/storage/service.ts b/packages/wasm/src/services/storage/service.ts index 9c2925a9..1610c51f 100644 --- a/packages/wasm/src/services/storage/service.ts +++ b/packages/wasm/src/services/storage/service.ts @@ -5,8 +5,8 @@ function getStore() { return _store; } - if (typeof global !== 'undefined' && global.localStorage) { - _store = global.localStorage; + if (typeof globalThis !== 'undefined' && globalThis.localStorage) { + _store = globalThis.localStorage; return _store; } @@ -43,7 +43,10 @@ export class StorageService { const store = getStore(); const keys = []; for (let i = 0; i < store.length; i++) { - keys.push(store.key(i)); + const key = store.key(i); + if (typeof key === 'string') { + keys.push(key); + } } return Promise.resolve(keys); }