So unless there's a bug, jswrap_ble_filter_device should set matches to false if anything in a group doesn't match (so that's AND), and then if any group matches it returns true (so that should be OR).
// OR
filter = [{manufacturerData:{0x0590:{}}},{name:"Puck.js 4820"}];
// AND
filter = [{manufacturerData:{0x0590:{}}, name:"Puck.js 4820"}];
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
Hmm - there should be AND... https://github.com/espruino/Espruino/blob/master/libs/bluetooth/jswrap_bluetooth.c#L1462
So unless there's a bug, jswrap_ble_filter_device should set
matches
to false if anything in a group doesn't match (so that's AND), and then if any group matches it returns true (so that should be OR).