diff --git a/packages/events/lib/procedure.js b/packages/events/lib/procedure.js index 4f2b52f5..47614d3d 100644 --- a/packages/events/lib/procedure.js +++ b/packages/events/lib/procedure.js @@ -1,24 +1,24 @@ export default function procedure(entity, stanza = null, handler) { return new Promise((resolve, reject) => { - function stop(...args) { + function onError(err) { + entity.removeListener("nonza", listener); + reject(err); + } + + function done(...args) { entity.removeListener("nonza", listener); resolve(...args); } async function listener(element) { try { - await handler(element, stop); + await handler(element, done); } catch (err) { - reject(err); - entity.removeListener("nonza", listener); + onError(err); } } - stanza && - entity.send(stanza).catch((err) => { - entity.removeListener("nonza", listener); - reject(err); - }); + stanza && entity.send(stanza).catch(onError); entity.on("nonza", listener); }); } diff --git a/packages/sasl/index.js b/packages/sasl/index.js index ec0bb93c..162bbe81 100644 --- a/packages/sasl/index.js +++ b/packages/sasl/index.js @@ -37,7 +37,7 @@ async function authenticate({ saslFactory, entity, mechanism, credentials }) { { xmlns: NS, mechanism: mech.name }, encode(mech.response(creds)), ), - async (element, stop) => { + async (element, done) => { if (element.getNS() !== NS) return; if (element.name === "challenge") { @@ -58,7 +58,7 @@ async function authenticate({ saslFactory, entity, mechanism, credentials }) { } if (element.name === "success") { - return stop(); + return done(); } }, ); diff --git a/packages/sasl2/index.js b/packages/sasl2/index.js index 185b71b9..83641d29 100644 --- a/packages/sasl2/index.js +++ b/packages/sasl2/index.js @@ -45,13 +45,13 @@ async function authenticate({ userAgent, ...streamFeatures, ]), - async (element, stop) => { + async (element, done) => { if (element.getNS() !== NS) return; if (element.name === "challenge") { mech.challenge(decode(element.text())); const resp = mech.response(creds); - entity.send( + await entity.send( xml( "response", { xmlns: NS, mechanism: mech.name }, @@ -87,7 +87,7 @@ async function authenticate({ feature?.[1]?.(child); } - return stop(); + return done(); } }, ); diff --git a/packages/stream-management/index.js b/packages/stream-management/index.js index ea8749d0..9f162ce3 100644 --- a/packages/stream-management/index.js +++ b/packages/stream-management/index.js @@ -19,9 +19,9 @@ function makeResumeElement({ sm }) { } function enable(entity, sm) { - return procedure(entity, makeEnableElement({ sm }), (element, stop) => { + return procedure(entity, makeEnableElement({ sm }), (element, done) => { if (element.is("enabled", NS)) { - return stop(element); + return done(element); } else if (element.is("failed", NS)) { throw XMPPError.fromElement(element); } @@ -29,9 +29,9 @@ function enable(entity, sm) { } async function resume(entity, sm) { - return procedure(entity, makeResumeElement({ sm }), (element, stop) => { + return procedure(entity, makeResumeElement({ sm }), (element, done) => { if (element.is("resumed", NS)) { - return stop(element); + return done(element); } else if (element.is("failed", NS)) { throw XMPPError.fromElement(element); } diff --git a/packages/stream-management/stream-features.test.js b/packages/stream-management/stream-features.test.js index 8616f2ce..a8edc437 100644 --- a/packages/stream-management/stream-features.test.js +++ b/packages/stream-management/stream-features.test.js @@ -114,7 +114,11 @@ test("enable - failed", async () => { expect(entity.streamManagement.outbound).toBe(0); entity.streamManagement.enabled = true; - entity.mockInput(); + entity.mockInput( + + + , + ); await tick(); @@ -169,7 +173,11 @@ test("resume - failed", async () => { , ); - entity.mockInput(); + entity.mockInput( + + + , + ); await tick();