Here’s how I did it, and got it to match Mycelium. Did not try it on testnet yet, but it matches for the livenet. It uses BIP32+BIP39+BIP44.
// Get a new Mnemonic seed:
var mnemonicSeed = new Mnemonic(Mnemonic.Words.ENGLISH);
// Calculate HD Master Extended Private Key:
var hdMastExtPrivKey = mnemonicSeed.toHDPrivateKey();
// Derived External HD Private Key:
var hdExternalPrivKey = hdMastExtPrivKey.derive("m/44'/0'/0'/0/0");
// Derived External Private Key:
var myExternalPrivKey = hdExternalPrivKey.privateKey;
// Derived External Public Key:
var myExternalPublKey = myExternalPrivKey.publicKey;
// Derived External Public Address:
var myExternalAddress = myExternalPublKey.toAddress();
So in shorthand form like what you have, I think that would be:
var myExternalAddress = new Mnemonic(Mnemonic.Words.ENGLISH).toHDPrivateKey().derive("m/44'/0'/0'/0/0").privateKey.publicKey.toAddress();
Don’t quote me on that second part… I may have made a typo, as I haven’t tested that shortened form out.
Comparing our methods, we do the “Address” call a little differently, but also I have “.privateKey” after the “derive” part. One of those two things might be the difference?
Let me know if any of this helps. BTW - I like your tool that you made. I’ll be sharing a project myself in the next week or two hopefully!