There are some serious flaws in the provably fair system:
1. The client doesn't automatically change its seed after each game, and this completely nullifies the security. If the server knows what the playerSeed will be before it generates the initial shuffle, then it can keep re-shuffling until it finds an initial shuffle that prevents the player from winning with a given playerSeed.
2. You need at least 226 bits of entropy to reach all 52! permutations in a fischer-yates shuffle, but the seeds are much smaller than that.
3. The code that generates the playerseed is hidden away in JS includes along with thousands of lines of other javascript.
I suggest inlining some code to re-generate the playerseed every time, with at least 226 bits of entropy, e.g. [1,2,3,4,5].map(x => Math.random().toString(36).slice(2)).join('')