Skip to content

Commit 869ea9a

Browse files
authored
Revert the MqttJs upgrade from 4.x to 5.x (#588)
1 parent a4c6563 commit 869ea9a

8 files changed

+166
-304
lines changed

lib/browser/mqtt.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
*/
1414

1515
import * as mqtt from "mqtt";
16-
import * as mqtt_packet from "mqtt-packet";
1716
import * as WebsocketUtils from "./ws";
1817
import * as auth from "./auth";
1918
import { Trie, TrieOp, Node as TrieNode } from "./trie";
@@ -615,7 +614,7 @@ export class MqttClientConnection extends BufferedEventEmitter {
615614
}
616615
resolve({
617616
packet_id: packet
618-
? (packet as mqtt_packet.IUnsubackPacket).messageId
617+
? (packet as mqtt.IUnsubackPacket).messageId
619618
: undefined,
620619
});
621620
});

lib/browser/mqtt5.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import url from "url";
1010
import {HttpsProxyAgent} from "https-proxy-agent";
1111
import * as auth from "./auth";
1212

13-
jest.setTimeout(1000000);
13+
jest.setTimeout(10000);
1414

1515
function createBrowserSpecificTestConfig (testType: test_utils.SuccessfulConnectionTestType) : mqtt5.Mqtt5ClientConfig {
1616

@@ -405,7 +405,7 @@ test_utils.conditional_test(test_utils.ClientEnvironmentalConfig.hasIotCoreEnvir
405405
await test_utils.testNegotiatedSettings(forcedRejoinClient, true);
406406
});
407407

408-
test('Sub - Pub QoS 0 - Unsub', async () => {
408+
test_utils.conditional_test(test_utils.ClientEnvironmentalConfig.hasIotCoreEnvironment())('Sub - Pub QoS 0 - Unsub', async () => {
409409
let topic : string = `test/${uuid()}`;
410410
let testPayload : Buffer = Buffer.from("Derp", "utf-8");
411411

lib/browser/mqtt5.ts

+6-11
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import {BufferedEventEmitter} from "../common/event";
1818
import * as mqtt from "mqtt"; /* The mqtt-js external dependency */
19-
import * as mqtt_packet from "mqtt-packet";
2019
import * as mqtt5 from "../common/mqtt5";
2120
import {OutboundTopicAliasBehaviorType} from "../common/mqtt5";
2221
import * as mqtt5_packet from "../common/mqtt5_packet"
@@ -446,19 +445,15 @@ export class Mqtt5Client extends BufferedEventEmitter implements mqtt5.IMqtt5Cli
446445
let subMap: mqtt.ISubscriptionMap = mqtt_utils.transform_crt_subscribe_to_mqtt_js_subscription_map(packet);
447446
let subOptions: mqtt.IClientSubscribeOptions = mqtt_utils.transform_crt_subscribe_to_mqtt_js_subscribe_options(packet);
448447

449-
this.browserClient.subscribe(subMap, subOptions, (error, grants, suback) => {
448+
// @ts-ignore
449+
this.browserClient.subscribe(subMap, subOptions, (error, grants) => {
450450
if (error) {
451451
reject(error);
452452
return;
453453
}
454454

455-
if (suback) {
456-
const crtSubackFromMqttjsSuback = mqtt_utils.transform_mqtt_js_suback_to_crt_suback(suback);
457-
resolve(crtSubackFromMqttjsSuback);
458-
} else {
459-
const crtSubackFromGrants: mqtt5_packet.SubackPacket = mqtt_utils.transform_mqtt_js_subscription_grants_to_crt_suback(grants ?? []);
460-
resolve(crtSubackFromGrants);
461-
}
455+
const suback: mqtt5_packet.SubackPacket = mqtt_utils.transform_mqtt_js_subscription_grants_to_crt_suback(grants);
456+
resolve(suback);
462457
});
463458
} catch (err) {
464459
reject(err);
@@ -510,7 +505,7 @@ export class Mqtt5Client extends BufferedEventEmitter implements mqtt5.IMqtt5Cli
510505
};
511506
resolve(unsuback);
512507
} else {
513-
const unsuback: mqtt5_packet.UnsubackPacket = mqtt_utils.transform_mqtt_js_unsuback_to_crt_unsuback(packet as mqtt_packet.IUnsubackPacket);
508+
const unsuback: mqtt5_packet.UnsubackPacket = mqtt_utils.transform_mqtt_js_unsuback_to_crt_unsuback(packet as mqtt.IUnsubackPacket);
514509
resolve(unsuback);
515510
}
516511
});
@@ -612,7 +607,7 @@ export class Mqtt5Client extends BufferedEventEmitter implements mqtt5.IMqtt5Cli
612607
})
613608
}
614609

615-
const puback: mqtt5_packet.PubackPacket = mqtt_utils.transform_mqtt_js_puback_to_crt_puback(completionPacket as mqtt_packet.IPubackPacket);
610+
const puback: mqtt5_packet.PubackPacket = mqtt_utils.transform_mqtt_js_puback_to_crt_puback(completionPacket as mqtt.IPubackPacket);
616611
resolve(puback);
617612
break;
618613

lib/browser/mqtt5_utils.spec.ts

+13-51
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*/
55

66
import * as mqtt from "mqtt";
7-
import * as mqtt_packet from "mqtt-packet";
87
import * as mqtt5 from "./mqtt5";
98
import {InboundTopicAliasBehaviorType, OutboundTopicAliasBehaviorType} from "./mqtt5";
109
import * as mqtt5_utils from "./mqtt5_utils";
@@ -19,7 +18,7 @@ test('MQTT.JS User Properties to CRT User Properties undefined', async () => {
1918
});
2019

2120
test('MQTT.JS User Properties to CRT User Properties single', async () => {
22-
let mqttJsUserProperties : mqtt_packet.UserProperties = {
21+
let mqttJsUserProperties : mqtt.UserProperties = {
2322
prop1 : "value1",
2423
prop2 : "value2"
2524
}
@@ -42,7 +41,7 @@ test('MQTT.JS User Properties to CRT User Properties single', async () => {
4241
});
4342

4443
test('MQTT.JS User Properties to CRT User Properties multi', async () => {
45-
let mqttJsUserProperties : mqtt_packet.UserProperties = {
44+
let mqttJsUserProperties : mqtt.UserProperties = {
4645
prop1 : "value1",
4746
prop2 : ["value2_1", "value2_2", "value2_3"]
4847
}
@@ -73,7 +72,7 @@ test('MQTT.JS User Properties to CRT User Properties multi', async () => {
7372
});
7473

7574
test('CRT User Properties to MQTT.js User Properties undefined', async () => {
76-
let mqttJsUserProperties : mqtt_packet.UserProperties | undefined = mqtt5_utils.transform_crt_user_properties_to_mqtt_js_user_properties(undefined);
75+
let mqttJsUserProperties : mqtt.UserProperties | undefined = mqtt5_utils.transform_crt_user_properties_to_mqtt_js_user_properties(undefined);
7776

7877
expect(mqttJsUserProperties).toBeUndefined();
7978
});
@@ -84,7 +83,7 @@ test('CRT User Properties to MQTT.js User Properties single', async () => {
8483
{ name : "prop2", value: "value2"}
8584
]
8685

87-
let mqttJsUserProperties : mqtt_packet.UserProperties | undefined = mqtt5_utils.transform_crt_user_properties_to_mqtt_js_user_properties(crtUserProperties);
86+
let mqttJsUserProperties : mqtt.UserProperties | undefined = mqtt5_utils.transform_crt_user_properties_to_mqtt_js_user_properties(crtUserProperties);
8887

8988
expect(mqttJsUserProperties).toEqual(
9089
{
@@ -101,9 +100,9 @@ test('CRT User Properties to MQTT.js User Properties single', async () => {
101100
{ name : "prop2", value: "value2_3"}
102101
]
103102

104-
let mqttJsUserProperties : mqtt_packet.UserProperties | undefined = mqtt5_utils.transform_crt_user_properties_to_mqtt_js_user_properties(crtUserProperties);
103+
let mqttJsUserProperties : mqtt.UserProperties | undefined = mqtt5_utils.transform_crt_user_properties_to_mqtt_js_user_properties(crtUserProperties);
105104
expect(mqttJsUserProperties).toBeDefined();
106-
let definedProperties : mqtt_packet.UserProperties = mqttJsUserProperties ?? {};
105+
let definedProperties : mqtt.UserProperties = mqttJsUserProperties ?? {};
107106

108107
const {prop1 : propOne, prop2: propTwo, ...rest} = definedProperties;
109108

@@ -707,44 +706,6 @@ test('transform_mqtt_js_subscription_grants_to_crt_suback', async() => {
707706
});
708707
});
709708

710-
test('transform_mqtt_js_suback_to_crt_suback - minimal', async() => {
711-
let mqttJsSuback : mqtt_packet.ISubackPacket = {
712-
cmd: "suback",
713-
granted: [1]
714-
};
715-
716-
let suback : mqtt5.SubackPacket = mqtt5_utils.transform_mqtt_js_suback_to_crt_suback(mqttJsSuback);
717-
718-
expect(suback).toEqual({
719-
type: mqtt5.PacketType.Suback,
720-
reasonCodes: [mqtt5.SubackReasonCode.GrantedQoS1]
721-
});
722-
});
723-
724-
test('transform_mqtt_js_suback_to_crt_suback - maximal', async() => {
725-
let mqttJsSuback : mqtt_packet.ISubackPacket = {
726-
cmd: "suback",
727-
granted: [2, 128],
728-
properties : {
729-
reasonString: "Misadventure",
730-
userProperties: {
731-
world: ["hello"]
732-
}
733-
}
734-
};
735-
736-
let suback : mqtt5.SubackPacket = mqtt5_utils.transform_mqtt_js_suback_to_crt_suback(mqttJsSuback);
737-
738-
expect(suback).toEqual({
739-
type: mqtt5.PacketType.Suback,
740-
reasonCodes: [mqtt5.SubackReasonCode.GrantedQoS2, mqtt5.SubackReasonCode.UnspecifiedError],
741-
reasonString: "Misadventure",
742-
userProperties: [
743-
{name: "world", value: "hello"}
744-
]
745-
});
746-
});
747-
748709
test('transform_crt_publish_to_mqtt_js_publish_options minimal', async() => {
749710
let publish : mqtt5.PublishPacket = {
750711
topicName: "hello/there",
@@ -865,7 +826,7 @@ test('transform_mqtt_js_publish_to_crt_publish maximal', async() => {
865826
});
866827

867828
test('transform_mqtt_js_puback_to_crt_puback minimal', async() => {
868-
let mqttJsPuback : mqtt_packet.IPubackPacket = {
829+
let mqttJsPuback : mqtt.IPubackPacket = {
869830
cmd: 'puback'
870831
};
871832

@@ -878,7 +839,7 @@ test('transform_mqtt_js_puback_to_crt_puback minimal', async() => {
878839
});
879840

880841
test('transform_mqtt_js_puback_to_crt_puback maximal', async() => {
881-
let mqttJsPuback : mqtt_packet.IPubackPacket = {
842+
let mqttJsPuback : mqtt.IPubackPacket = {
882843
cmd: 'puback',
883844
reasonCode: mqtt5.PubackReasonCode.NotAuthorized,
884845
properties: {
@@ -931,9 +892,9 @@ test('transform_crt_unsubscribe_to_mqtt_js_unsubscribe_options maximal', async()
931892
});
932893

933894
test('transform_mqtt_js_unsuback_to_crt_unsuback minimal', async() => {
934-
let mqttJsUnsuback : mqtt_packet.IUnsubackPacket = {
895+
let mqttJsUnsuback : mqtt.IUnsubackPacket = {
935896
cmd: 'unsuback',
936-
granted: [mqtt5.UnsubackReasonCode.NoSubscriptionExisted]
897+
reasonCode: mqtt5.UnsubackReasonCode.NoSubscriptionExisted
937898
};
938899

939900
let crtUnsuback : mqtt5.UnsubackPacket = mqtt5_utils.transform_mqtt_js_unsuback_to_crt_unsuback(mqttJsUnsuback);
@@ -945,9 +906,10 @@ test('transform_mqtt_js_unsuback_to_crt_unsuback minimal', async() => {
945906
});
946907

947908
test('transform_mqtt_js_unsuback_to_crt_unsuback maximal', async() => {
948-
let mqttJsUnsuback : mqtt_packet.IUnsubackPacket = {
909+
let mqttJsUnsuback : mqtt.IUnsubackPacket = {
949910
cmd: 'unsuback',
950-
granted: [mqtt5.UnsubackReasonCode.NoSubscriptionExisted, mqtt5.UnsubackReasonCode.ImplementationSpecificError],
911+
// @ts-ignore
912+
reasonCode: [mqtt5.UnsubackReasonCode.NoSubscriptionExisted, mqtt5.UnsubackReasonCode.ImplementationSpecificError],
951913
properties: {
952914
reasonString: "Dunno",
953915
userProperties: {

lib/browser/mqtt5_utils.ts

+16-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
import * as mqtt from "mqtt";
8-
import * as mqtt_packet from "mqtt-packet";
98
import * as mqtt_shared from "../common/mqtt_shared";
109
import * as mqtt5 from "./mqtt5";
1110
import * as utils from "../common/utils";
@@ -252,7 +251,7 @@ export function create_mqtt_js_client_config_from_crt_client_config(crtConfig :
252251
}
253252

254253
/** @internal */
255-
export function transform_crt_user_properties_to_mqtt_js_user_properties(userProperties?: mqtt5.UserProperty[]) : mqtt_packet.UserProperties | undefined {
254+
export function transform_crt_user_properties_to_mqtt_js_user_properties(userProperties?: mqtt5.UserProperty[]) : mqtt.UserProperties | undefined {
256255
if (!userProperties) {
257256
return undefined;
258257
}
@@ -275,7 +274,7 @@ export function transform_crt_user_properties_to_mqtt_js_user_properties(userPro
275274
}
276275

277276
/** @internal */
278-
export function transform_mqtt_js_user_properties_to_crt_user_properties(userProperties?: mqtt_packet.UserProperties) : mqtt5.UserProperty[] | undefined {
277+
export function transform_mqtt_js_user_properties_to_crt_user_properties(userProperties?: mqtt.UserProperties) : mqtt5.UserProperty[] | undefined {
279278
if (!userProperties) {
280279
return undefined;
281280
}
@@ -403,7 +402,7 @@ export function transform_crt_subscribe_to_mqtt_js_subscribe_options(subscribe:
403402
}
404403

405404
/** @internal **/
406-
export function transform_mqtt_js_suback_to_crt_suback(mqttJsSuback: mqtt_packet.ISubackPacket) : mqtt5.SubackPacket {
405+
export function transform_mqtt_js_suback_to_crt_suback(mqttJsSuback: mqtt.ISubackPacket) : mqtt5.SubackPacket {
407406
if (!mqttJsSuback) {
408407
throw new CrtError("transform_mqtt_js_suback_to_crt_suback: mqttJsSuback not defined");
409408
}
@@ -521,7 +520,7 @@ export function transform_mqtt_js_publish_to_crt_publish(publish: mqtt.IPublishP
521520
}
522521

523522
/** @internal **/
524-
export function transform_mqtt_js_puback_to_crt_puback(puback: mqtt_packet.IPubackPacket) : mqtt5.PubackPacket {
523+
export function transform_mqtt_js_puback_to_crt_puback(puback: mqtt.IPubackPacket) : mqtt5.PubackPacket {
525524

526525
if (puback == null || puback == undefined) {
527526
throw new CrtError("transform_mqtt_js_puback_to_crt_puback: puback not defined");
@@ -562,15 +561,25 @@ export function transform_crt_unsubscribe_to_mqtt_js_unsubscribe_options(unsubsc
562561
}
563562

564563
/** @internal **/
565-
export function transform_mqtt_js_unsuback_to_crt_unsuback(packet: mqtt_packet.IUnsubackPacket) : mqtt5.UnsubackPacket {
564+
export function transform_mqtt_js_unsuback_to_crt_unsuback(packet: mqtt.IUnsubackPacket) : mqtt5.UnsubackPacket {
566565

567566
if (packet == null || packet == undefined) {
568567
throw new CrtError("transform_mqtt_js_unsuback_to_crt_unsuback: packet not defined");
569568
}
570569

570+
let reasonCodes : number | number[] | undefined = packet.reasonCode;
571+
let codes : number[];
572+
if (Array.isArray(reasonCodes)) {
573+
codes = reasonCodes;
574+
} else if (typeof reasonCodes == 'number') {
575+
codes = [reasonCodes];
576+
} else {
577+
codes = [];
578+
}
579+
571580
let crtUnsuback : mqtt5.UnsubackPacket = {
572581
type: mqtt5.PacketType.Unsuback,
573-
reasonCodes : packet.granted
582+
reasonCodes : codes
574583
}
575584

576585
if (packet.properties) {

0 commit comments

Comments
 (0)