IIRC, I've used cheerio for this kind of work in the past... not sure about re-writing after updates tbh, been a while since I've dealt with XML in JS.
Cool... had setup something similar recently, only implemented sqlite currently. May switch to this if I'm able.
I did have two other pieces though... I had a lookup for startsWith and a deleteStartingWith, to remove/query anything that starts with the string, kind of a wildcard match.
Requires Trucaller app be installed on the device, beyond this, no information on what activity or information the app itself gathers, only mentions they don't track your app's activity, which is meaningless in context.
No clear information on the Trucaller revenue model at all, and unclear on any other potential gotchas.
You're probably better off using Twillio or another SMS backend with OTP verification methods in practice. Aside: I just don't trust outsourcing your authentication, I think it's a bad idea to literally outsource your user access and has so much potential for abuse. Similarly I wouldn't recommend using Firebase or Auth0 as primary authentication interfaces either.
In addition to #3
let { propToRemove, ...newObj } = oldObj;
then throw away the propToRemove.
Also, if you are serializing and set the value to `undefined`, then it won't be JSON stringified into the output.
Nice intro to hashing and bcrypt library. I've tended to favor pbkdf2 lately, mostly because it's "in the box" and has generally been a hard requirement (NIST recommended) for some of the work I do (government clients).
I would suggest considering going to 12 rounds over 10, if your deployment server can handle it. It does become a potential DDoS attack vector if you aren't tracking/limiting failed attempts by user and IP.
Clone without all the history... git clone --depth=1 --branch=master \ https://github.com/maitraysuthar/rest-api-nodejs-mongodb.git \ ./myproject rm -rf ./myproject/.gitIn addition to #3 let { propToRemove, ...newObj } = oldObj; then throw away the propToRemove. Also, if you are serializing and set the value to `undefined`, then it won't be JSON stringified into the output.