mqtt5-wasm 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,6 +17,7 @@ MQTT v5.0 and v3.1.1 WebAssembly client and broker for browser environments.
17
17
  - **Broker lifecycle events** - Monitor client connections, publishes, and subscriptions
18
18
  - **Automatic keepalive** - Connection health monitoring with timeout detection
19
19
  - **Will messages** - Last Will and Testament (LWT) support
20
+ - **Load balancer redirect** - Server redirect via CONNACK UseAnotherServer for horizontal scaling
20
21
 
21
22
  ## Installation
22
23
 
@@ -30,7 +31,7 @@ npm install mqtt5-wasm
30
31
 
31
32
  ```toml
32
33
  [dependencies]
33
- mqtt5-wasm = "1.1"
34
+ mqtt5-wasm = "1.2"
34
35
  ```
35
36
 
36
37
  Build with wasm-bindgen:
@@ -141,6 +142,31 @@ broker.onMessageDelivered((event) => {
141
142
  });
142
143
  ```
143
144
 
145
+ ### Load Balancer Redirect
146
+
147
+ ```javascript
148
+ import init, { Broker, BrokerConfig, MqttClient } from "mqtt5-wasm";
149
+
150
+ await init();
151
+
152
+ const lbConfig = new BrokerConfig();
153
+ lbConfig.allowAnonymous = true;
154
+ lbConfig.addLoadBalancerBackend("broker-a");
155
+ lbConfig.addLoadBalancerBackend("broker-b");
156
+ const lb = Broker.withConfig(lbConfig);
157
+
158
+ const client = new MqttClient("my-client");
159
+ const port = lb.createClientPort();
160
+
161
+ try {
162
+ await client.connectMessagePort(port);
163
+ } catch (err) {
164
+ if (err.type === "redirect") {
165
+ console.log(`Redirected to ${err.url}`);
166
+ }
167
+ }
168
+ ```
169
+
144
170
  ## Documentation
145
171
 
146
172
  See the [main repository](https://github.com/LabOverWire/mqtt-lib) for complete documentation and examples.
package/mqtt5_wasm.d.ts CHANGED
@@ -137,7 +137,9 @@ export class BrokerConfig {
137
137
  free(): void;
138
138
  [Symbol.dispose](): void;
139
139
  addChangeOnlyDeliveryPattern(pattern: string): void;
140
+ addLoadBalancerBackend(backend: string): void;
140
141
  clearChangeOnlyDeliveryPatterns(): void;
142
+ clearLoadBalancerBackends(): void;
141
143
  constructor();
142
144
  set allowAnonymous(value: boolean);
143
145
  set changeOnlyDeliveryEnabled(value: boolean);
@@ -481,7 +483,9 @@ export interface InitOutput {
481
483
  readonly broker_userCount: (a: number) => number;
482
484
  readonly broker_withConfig: (a: number, b: number) => void;
483
485
  readonly brokerconfig_addChangeOnlyDeliveryPattern: (a: number, b: number, c: number) => void;
486
+ readonly brokerconfig_addLoadBalancerBackend: (a: number, b: number, c: number) => void;
484
487
  readonly brokerconfig_clearChangeOnlyDeliveryPatterns: (a: number) => void;
488
+ readonly brokerconfig_clearLoadBalancerBackends: (a: number) => void;
485
489
  readonly brokerconfig_new: () => number;
486
490
  readonly brokerconfig_set_allowAnonymous: (a: number, b: number) => void;
487
491
  readonly brokerconfig_set_changeOnlyDeliveryEnabled: (a: number, b: number) => void;
@@ -640,22 +644,22 @@ export interface InitOutput {
640
644
  readonly willmessage_topic: (a: number, b: number) => void;
641
645
  readonly willmessage_willDelayInterval: (a: number) => number;
642
646
  readonly createCodecRegistry: () => number;
647
+ readonly gzipcodec_withLevel: (a: number, b: number) => number;
643
648
  readonly gzipcodec_new: () => number;
644
649
  readonly createGzipCodec: (a: number, b: number) => number;
650
+ readonly __wbg_gzipcodec_free: (a: number, b: number) => void;
645
651
  readonly gzipcodec_withMinSize: (a: number, b: number) => number;
646
652
  readonly gzipcodec_withMaxDecompressedSize: (a: number, b: number) => number;
647
- readonly __wbg_gzipcodec_free: (a: number, b: number) => void;
648
- readonly gzipcodec_withLevel: (a: number, b: number) => number;
649
- readonly __wasm_bindgen_func_elem_2606: (a: number, b: number) => void;
650
- readonly __wasm_bindgen_func_elem_2766: (a: number, b: number) => void;
651
- readonly __wasm_bindgen_func_elem_184: (a: number, b: number) => void;
652
- readonly __wasm_bindgen_func_elem_4228: (a: number, b: number, c: number, d: number) => void;
653
+ readonly __wasm_bindgen_func_elem_2610: (a: number, b: number) => void;
654
+ readonly __wasm_bindgen_func_elem_2770: (a: number, b: number) => void;
655
+ readonly __wasm_bindgen_func_elem_183: (a: number, b: number) => void;
653
656
  readonly __wasm_bindgen_func_elem_4240: (a: number, b: number, c: number, d: number) => void;
654
- readonly __wasm_bindgen_func_elem_1043: (a: number, b: number, c: number) => void;
655
- readonly __wasm_bindgen_func_elem_1043_3: (a: number, b: number, c: number) => void;
656
- readonly __wasm_bindgen_func_elem_1043_4: (a: number, b: number, c: number) => void;
657
- readonly __wasm_bindgen_func_elem_1043_5: (a: number, b: number, c: number) => void;
658
- readonly __wasm_bindgen_func_elem_2626: (a: number, b: number) => void;
657
+ readonly __wasm_bindgen_func_elem_4252: (a: number, b: number, c: number, d: number) => void;
658
+ readonly __wasm_bindgen_func_elem_1047: (a: number, b: number, c: number) => void;
659
+ readonly __wasm_bindgen_func_elem_1047_3: (a: number, b: number, c: number) => void;
660
+ readonly __wasm_bindgen_func_elem_1047_4: (a: number, b: number, c: number) => void;
661
+ readonly __wasm_bindgen_func_elem_1047_5: (a: number, b: number, c: number) => void;
662
+ readonly __wasm_bindgen_func_elem_2630: (a: number, b: number) => void;
659
663
  readonly __wbindgen_export: (a: number, b: number) => number;
660
664
  readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
661
665
  readonly __wbindgen_export3: (a: number) => void;
package/mqtt5_wasm.js CHANGED
@@ -621,9 +621,20 @@ export class BrokerConfig {
621
621
  const len0 = WASM_VECTOR_LEN;
622
622
  wasm.brokerconfig_addChangeOnlyDeliveryPattern(this.__wbg_ptr, ptr0, len0);
623
623
  }
624
+ /**
625
+ * @param {string} backend
626
+ */
627
+ addLoadBalancerBackend(backend) {
628
+ const ptr0 = passStringToWasm0(backend, wasm.__wbindgen_export, wasm.__wbindgen_export2);
629
+ const len0 = WASM_VECTOR_LEN;
630
+ wasm.brokerconfig_addLoadBalancerBackend(this.__wbg_ptr, ptr0, len0);
631
+ }
624
632
  clearChangeOnlyDeliveryPatterns() {
625
633
  wasm.brokerconfig_clearChangeOnlyDeliveryPatterns(this.__wbg_ptr);
626
634
  }
635
+ clearLoadBalancerBackends() {
636
+ wasm.brokerconfig_clearLoadBalancerBackends(this.__wbg_ptr);
637
+ }
627
638
  constructor() {
628
639
  const ret = wasm.brokerconfig_new();
629
640
  this.__wbg_ptr = ret >>> 0;
@@ -2365,7 +2376,7 @@ function __wbg_get_imports() {
2365
2376
  const a = state0.a;
2366
2377
  state0.a = 0;
2367
2378
  try {
2368
- return __wasm_bindgen_func_elem_4240(a, state0.b, arg0, arg1);
2379
+ return __wasm_bindgen_func_elem_4252(a, state0.b, arg0, arg1);
2369
2380
  } finally {
2370
2381
  state0.a = a;
2371
2382
  }
@@ -2395,7 +2406,7 @@ function __wbg_get_imports() {
2395
2406
  const a = state0.a;
2396
2407
  state0.a = 0;
2397
2408
  try {
2398
- return __wasm_bindgen_func_elem_4240(a, state0.b, arg0, arg1);
2409
+ return __wasm_bindgen_func_elem_4252(a, state0.b, arg0, arg1);
2399
2410
  } finally {
2400
2411
  state0.a = a;
2401
2412
  }
@@ -2472,7 +2483,7 @@ function __wbg_get_imports() {
2472
2483
  __wbg_send_d31a693c975dea74: function() { return handleError(function (arg0, arg1, arg2) {
2473
2484
  getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2));
2474
2485
  }, arguments); },
2475
- __wbg_setTimeout_86c59f3a544c7e51: function(arg0, arg1) {
2486
+ __wbg_setTimeout_28af72ed644fd498: function(arg0, arg1) {
2476
2487
  const ret = setTimeout(getObject(arg0), arg1);
2477
2488
  return ret;
2478
2489
  },
@@ -2547,32 +2558,32 @@ function __wbg_get_imports() {
2547
2558
  },
2548
2559
  __wbindgen_cast_0000000000000001: function(arg0, arg1) {
2549
2560
  // Cast intrinsic for `Closure(Closure { dtor_idx: 425, function: Function { arguments: [], shim_idx: 426, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
2550
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_2606, __wasm_bindgen_func_elem_2626);
2561
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_2610, __wasm_bindgen_func_elem_2630);
2551
2562
  return addHeapObject(ret);
2552
2563
  },
2553
2564
  __wbindgen_cast_0000000000000002: function(arg0, arg1) {
2554
- // Cast intrinsic for `Closure(Closure { dtor_idx: 444, function: Function { arguments: [Externref], shim_idx: 606, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.
2555
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_2766, __wasm_bindgen_func_elem_4228);
2565
+ // Cast intrinsic for `Closure(Closure { dtor_idx: 443, function: Function { arguments: [Externref], shim_idx: 607, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.
2566
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_2770, __wasm_bindgen_func_elem_4240);
2556
2567
  return addHeapObject(ret);
2557
2568
  },
2558
2569
  __wbindgen_cast_0000000000000003: function(arg0, arg1) {
2559
2570
  // Cast intrinsic for `Closure(Closure { dtor_idx: 9, function: Function { arguments: [Externref], shim_idx: 10, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
2560
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_184, __wasm_bindgen_func_elem_1043);
2571
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_183, __wasm_bindgen_func_elem_1047);
2561
2572
  return addHeapObject(ret);
2562
2573
  },
2563
2574
  __wbindgen_cast_0000000000000004: function(arg0, arg1) {
2564
2575
  // Cast intrinsic for `Closure(Closure { dtor_idx: 9, function: Function { arguments: [NamedExternref("CloseEvent")], shim_idx: 10, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
2565
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_184, __wasm_bindgen_func_elem_1043_3);
2576
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_183, __wasm_bindgen_func_elem_1047_3);
2566
2577
  return addHeapObject(ret);
2567
2578
  },
2568
2579
  __wbindgen_cast_0000000000000005: function(arg0, arg1) {
2569
2580
  // Cast intrinsic for `Closure(Closure { dtor_idx: 9, function: Function { arguments: [NamedExternref("ErrorEvent")], shim_idx: 10, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
2570
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_184, __wasm_bindgen_func_elem_1043_4);
2581
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_183, __wasm_bindgen_func_elem_1047_4);
2571
2582
  return addHeapObject(ret);
2572
2583
  },
2573
2584
  __wbindgen_cast_0000000000000006: function(arg0, arg1) {
2574
2585
  // Cast intrinsic for `Closure(Closure { dtor_idx: 9, function: Function { arguments: [NamedExternref("MessageEvent")], shim_idx: 10, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
2575
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_184, __wasm_bindgen_func_elem_1043_5);
2586
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_183, __wasm_bindgen_func_elem_1047_5);
2576
2587
  return addHeapObject(ret);
2577
2588
  },
2578
2589
  __wbindgen_cast_0000000000000007: function(arg0) {
@@ -2606,30 +2617,30 @@ function __wbg_get_imports() {
2606
2617
  };
2607
2618
  }
2608
2619
 
2609
- function __wasm_bindgen_func_elem_2626(arg0, arg1) {
2610
- wasm.__wasm_bindgen_func_elem_2626(arg0, arg1);
2620
+ function __wasm_bindgen_func_elem_2630(arg0, arg1) {
2621
+ wasm.__wasm_bindgen_func_elem_2630(arg0, arg1);
2611
2622
  }
2612
2623
 
2613
- function __wasm_bindgen_func_elem_1043(arg0, arg1, arg2) {
2614
- wasm.__wasm_bindgen_func_elem_1043(arg0, arg1, addHeapObject(arg2));
2624
+ function __wasm_bindgen_func_elem_1047(arg0, arg1, arg2) {
2625
+ wasm.__wasm_bindgen_func_elem_1047(arg0, arg1, addHeapObject(arg2));
2615
2626
  }
2616
2627
 
2617
- function __wasm_bindgen_func_elem_1043_3(arg0, arg1, arg2) {
2618
- wasm.__wasm_bindgen_func_elem_1043_3(arg0, arg1, addHeapObject(arg2));
2628
+ function __wasm_bindgen_func_elem_1047_3(arg0, arg1, arg2) {
2629
+ wasm.__wasm_bindgen_func_elem_1047_3(arg0, arg1, addHeapObject(arg2));
2619
2630
  }
2620
2631
 
2621
- function __wasm_bindgen_func_elem_1043_4(arg0, arg1, arg2) {
2622
- wasm.__wasm_bindgen_func_elem_1043_4(arg0, arg1, addHeapObject(arg2));
2632
+ function __wasm_bindgen_func_elem_1047_4(arg0, arg1, arg2) {
2633
+ wasm.__wasm_bindgen_func_elem_1047_4(arg0, arg1, addHeapObject(arg2));
2623
2634
  }
2624
2635
 
2625
- function __wasm_bindgen_func_elem_1043_5(arg0, arg1, arg2) {
2626
- wasm.__wasm_bindgen_func_elem_1043_5(arg0, arg1, addHeapObject(arg2));
2636
+ function __wasm_bindgen_func_elem_1047_5(arg0, arg1, arg2) {
2637
+ wasm.__wasm_bindgen_func_elem_1047_5(arg0, arg1, addHeapObject(arg2));
2627
2638
  }
2628
2639
 
2629
- function __wasm_bindgen_func_elem_4228(arg0, arg1, arg2) {
2640
+ function __wasm_bindgen_func_elem_4240(arg0, arg1, arg2) {
2630
2641
  try {
2631
2642
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2632
- wasm.__wasm_bindgen_func_elem_4228(retptr, arg0, arg1, addHeapObject(arg2));
2643
+ wasm.__wasm_bindgen_func_elem_4240(retptr, arg0, arg1, addHeapObject(arg2));
2633
2644
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2634
2645
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2635
2646
  if (r1) {
@@ -2640,8 +2651,8 @@ function __wasm_bindgen_func_elem_4228(arg0, arg1, arg2) {
2640
2651
  }
2641
2652
  }
2642
2653
 
2643
- function __wasm_bindgen_func_elem_4240(arg0, arg1, arg2, arg3) {
2644
- wasm.__wasm_bindgen_func_elem_4240(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
2654
+ function __wasm_bindgen_func_elem_4252(arg0, arg1, arg2, arg3) {
2655
+ wasm.__wasm_bindgen_func_elem_4252(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
2645
2656
  }
2646
2657
 
2647
2658
 
Binary file
@@ -68,7 +68,9 @@ export const broker_updateConfig: (a: number, b: number, c: number) => void;
68
68
  export const broker_userCount: (a: number) => number;
69
69
  export const broker_withConfig: (a: number, b: number) => void;
70
70
  export const brokerconfig_addChangeOnlyDeliveryPattern: (a: number, b: number, c: number) => void;
71
+ export const brokerconfig_addLoadBalancerBackend: (a: number, b: number, c: number) => void;
71
72
  export const brokerconfig_clearChangeOnlyDeliveryPatterns: (a: number) => void;
73
+ export const brokerconfig_clearLoadBalancerBackends: (a: number) => void;
72
74
  export const brokerconfig_new: () => number;
73
75
  export const brokerconfig_set_allowAnonymous: (a: number, b: number) => void;
74
76
  export const brokerconfig_set_changeOnlyDeliveryEnabled: (a: number, b: number) => void;
@@ -227,22 +229,22 @@ export const willmessage_set_willDelayInterval: (a: number, b: number) => void;
227
229
  export const willmessage_topic: (a: number, b: number) => void;
228
230
  export const willmessage_willDelayInterval: (a: number) => number;
229
231
  export const createCodecRegistry: () => number;
232
+ export const gzipcodec_withLevel: (a: number, b: number) => number;
230
233
  export const gzipcodec_new: () => number;
231
234
  export const createGzipCodec: (a: number, b: number) => number;
235
+ export const __wbg_gzipcodec_free: (a: number, b: number) => void;
232
236
  export const gzipcodec_withMinSize: (a: number, b: number) => number;
233
237
  export const gzipcodec_withMaxDecompressedSize: (a: number, b: number) => number;
234
- export const __wbg_gzipcodec_free: (a: number, b: number) => void;
235
- export const gzipcodec_withLevel: (a: number, b: number) => number;
236
- export const __wasm_bindgen_func_elem_2606: (a: number, b: number) => void;
237
- export const __wasm_bindgen_func_elem_2766: (a: number, b: number) => void;
238
- export const __wasm_bindgen_func_elem_184: (a: number, b: number) => void;
239
- export const __wasm_bindgen_func_elem_4228: (a: number, b: number, c: number, d: number) => void;
238
+ export const __wasm_bindgen_func_elem_2610: (a: number, b: number) => void;
239
+ export const __wasm_bindgen_func_elem_2770: (a: number, b: number) => void;
240
+ export const __wasm_bindgen_func_elem_183: (a: number, b: number) => void;
240
241
  export const __wasm_bindgen_func_elem_4240: (a: number, b: number, c: number, d: number) => void;
241
- export const __wasm_bindgen_func_elem_1043: (a: number, b: number, c: number) => void;
242
- export const __wasm_bindgen_func_elem_1043_3: (a: number, b: number, c: number) => void;
243
- export const __wasm_bindgen_func_elem_1043_4: (a: number, b: number, c: number) => void;
244
- export const __wasm_bindgen_func_elem_1043_5: (a: number, b: number, c: number) => void;
245
- export const __wasm_bindgen_func_elem_2626: (a: number, b: number) => void;
242
+ export const __wasm_bindgen_func_elem_4252: (a: number, b: number, c: number, d: number) => void;
243
+ export const __wasm_bindgen_func_elem_1047: (a: number, b: number, c: number) => void;
244
+ export const __wasm_bindgen_func_elem_1047_3: (a: number, b: number, c: number) => void;
245
+ export const __wasm_bindgen_func_elem_1047_4: (a: number, b: number, c: number) => void;
246
+ export const __wasm_bindgen_func_elem_1047_5: (a: number, b: number, c: number) => void;
247
+ export const __wasm_bindgen_func_elem_2630: (a: number, b: number) => void;
246
248
  export const __wbindgen_export: (a: number, b: number) => number;
247
249
  export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
248
250
  export const __wbindgen_export3: (a: number) => void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mqtt5-wasm",
3
3
  "type": "module",
4
- "version": "1.1.0",
4
+ "version": "1.2.0",
5
5
  "description": "MQTT v5.0 WebAssembly client and broker for browser environments",
6
6
  "license": "MIT OR Apache-2.0",
7
7
  "repository": {