At first glance the code seems correct, you should retrieve the name, nonce, version etc from the contract just to make sure your getting the correct values and not hard code them.
Your using version 1.0.0 as version, is that the same from the contract, by default it’s normally 1 not a string like you have it.
What is your permit implementation as you code isn’t there