gun
gun copied to clipboard
Silent Failure on Incorrect Certificate and Delayed put
Description
I've encountered an issue where subsequent calls to put break if a wrong certificate is passed in. The issue is observed when there's a delay between calls, causing both node.put and user.put to silently fail.
Steps to Reproduce
- Setup an authenticated user with
gun.user(). - Generate a new key pair with
SEA.pair(). - Get a node from the pub-key of the pair.
- Pass in a wrong certificate to
node.put. - Wait for one second.
- Call
user.put.
Expected result
- Passing in a wrong certificate should yield an error in the ack for
node.put. - Calling
user.putshould put data on the graph.
Actual result
- Passing in a wrong certificate silently fails for
node.put. - Calling
user.putsilently fails.
Noteworthy
- Removing the delay makes the call to
user.putwork. - The
optionsobject is mutated. This has been discussed before in: #1048 #1093
Example code:
(async () => {
// ... user is an authenticated gun.user().
const pair1 = await SEA.pair();
const node = gun.get(`~${pair1.pub}`);
node.get("public").map().once(res => console.log(res));
user.get("public").map().once(res => console.log(res));
const options = { opt: { cert: "this-is-not-a-valid-certificate" }};
node.get("public").get("item").put("node says hello", (ack) => {
console.log(ack);
}, options);
console.log(options); // this is mutated btw.
await delay(); // wait for one second.
user.get("public").get("item").put("user says hello", (ack) => {
console.log(ack)
});
})();
Thanks for finding this and making an excellent issue + code to add to tests. IDK my timing to get to it, but if you want to help I can do a video call to get you started on debugging (DM me).