should i try to implement this myself using native apis from scratch or is there a good npm package i can use?