I went with a super slim version of your solution just to demonstrate the problem. You can copy paste it into any background SW console and then call
chrome.storage.local.get([]) :
```javascript
const chromeHandler = {
get: (target, property) => {
if (typeof target[property] === 'function') {
return target[property];
}
return new Proxy(target[property], chromeHandler);
},
};
chrome = new Proxy(chrome, chromeHandler);
```
I've also checked the extension you mentioned. They did some not trivial stuff to make it work.
Anyway, I went with the wrapper solution, it looks like it works well. I had also to maintain a book keeping between the original callbacks and the actual wrappers so removeListener will work.