@danidoble/webserial 4.4.4 → 4.5.0-alpha.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/dist/boardroid.cjs +1 -1
- package/dist/boardroid.js +4 -3
- package/dist/devices-BndwHuvP.cjs +1 -0
- package/dist/devices-CHc7K4eY.js +67 -0
- package/dist/hopper.cjs +1 -1
- package/dist/hopper.js +1 -1
- package/dist/jofemar.cjs +1 -1
- package/dist/jofemar.js +30 -29
- package/dist/jsd.cjs +1 -0
- package/dist/jsd.js +2443 -0
- package/dist/kernel-As0xv_MS.cjs +1 -0
- package/dist/{kernel-BZzs36vi.js → kernel-CFxkp4Nz.js} +147 -204
- package/dist/kernel.cjs +1 -1
- package/dist/kernel.js +4 -3
- package/dist/locker.cjs +1 -1
- package/dist/locker.js +12 -11
- package/dist/pinpad.cjs +11 -11
- package/dist/pinpad.js +684 -639
- package/dist/pinpax.cjs +2 -2
- package/dist/pinpax.js +4 -3
- package/dist/relay.cjs +1 -1
- package/dist/relay.js +8 -7
- package/dist/types/lib/commands/jsd/applications/licensing.d.ts +51 -0
- package/dist/types/lib/commands/jsd/applications/licensing.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/applications/manifest.d.ts +73 -0
- package/dist/types/lib/commands/jsd/applications/manifest.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/applications/vision.d.ts +444 -0
- package/dist/types/lib/commands/jsd/applications/vision.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/frames/licensing/licensingClient.d.ts +34 -0
- package/dist/types/lib/commands/jsd/frames/licensing/licensingClient.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/frames/licensing/opCodes.d.ts +28 -0
- package/dist/types/lib/commands/jsd/frames/licensing/opCodes.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/frames/manifest/manifestClient.d.ts +40 -0
- package/dist/types/lib/commands/jsd/frames/manifest/manifestClient.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/frames/manifest/opCodes.d.ts +28 -0
- package/dist/types/lib/commands/jsd/frames/manifest/opCodes.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/frames/vision/opCodes.d.ts +72 -0
- package/dist/types/lib/commands/jsd/frames/vision/opCodes.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/frames/vision/visionClient.d.ts +336 -0
- package/dist/types/lib/commands/jsd/frames/vision/visionClient.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/protocol/crc16.d.ts +37 -0
- package/dist/types/lib/commands/jsd/protocol/crc16.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/protocol/responseHandler.d.ts +38 -0
- package/dist/types/lib/commands/jsd/protocol/responseHandler.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/protocol/rs232Strategy.d.ts +23 -0
- package/dist/types/lib/commands/jsd/protocol/rs232Strategy.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/protocol/tcpIpStrategy.d.ts +49 -0
- package/dist/types/lib/commands/jsd/protocol/tcpIpStrategy.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/types/LicensingClient.d.ts +32 -0
- package/dist/types/lib/commands/jsd/types/LicensingClient.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/types/jsd.types.d.ts +140 -0
- package/dist/types/lib/commands/jsd/types/jsd.types.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/types/manifestClient.d.ts +40 -0
- package/dist/types/lib/commands/jsd/types/manifestClient.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/types/transport.types.d.ts +29 -0
- package/dist/types/lib/commands/jsd/types/transport.types.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/types/visionClient.types.d.ts +356 -0
- package/dist/types/lib/commands/jsd/types/visionClient.types.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/utils/aplications.d.ts +48 -0
- package/dist/types/lib/commands/jsd/utils/aplications.d.ts.map +1 -0
- package/dist/types/lib/commands/jsd/utils/helpers.d.ts +15 -0
- package/dist/types/lib/commands/jsd/utils/helpers.d.ts.map +1 -0
- package/dist/types/lib/kernel.d.ts.map +1 -0
- package/dist/types/{main.d.ts → lib/main.d.ts} +6 -0
- package/dist/types/lib/main.d.ts.map +1 -0
- package/dist/types/lib/parsers/delimiterTransformer.d.ts +29 -0
- package/dist/types/lib/parsers/delimiterTransformer.d.ts.map +1 -0
- package/dist/types/lib/serial/boardroid.d.ts.map +1 -0
- package/dist/types/lib/serial/hopper.d.ts.map +1 -0
- package/dist/types/lib/serial/jofemar.d.ts.map +1 -0
- package/dist/types/lib/serial/jsd.d.ts +40 -0
- package/dist/types/lib/serial/jsd.d.ts.map +1 -0
- package/dist/types/{serial → lib/serial}/kernel.d.ts +1 -0
- package/dist/types/{serial → lib/serial}/kernel.d.ts.map +1 -1
- package/dist/types/lib/serial/locker.d.ts.map +1 -0
- package/dist/types/lib/serial/pinpad.d.ts.map +1 -0
- package/dist/types/lib/serial/pinpax.d.ts.map +1 -0
- package/dist/types/lib/serial/relay.d.ts.map +1 -0
- package/dist/types/{utils → lib/utils}/devices.d.ts +2 -0
- package/dist/types/lib/utils/devices.d.ts.map +1 -0
- package/dist/types/lib/utils/dispatcher.d.ts.map +1 -0
- package/dist/types/lib/utils/emulator.d.ts.map +1 -0
- package/dist/types/lib/utils/utils.d.ts.map +1 -0
- package/dist/types/test/t.d.ts +2 -0
- package/dist/types/test/t.d.ts.map +1 -0
- package/dist/webserial-core-3UL91lxi.cjs +4 -0
- package/dist/{webserial-core-Zwd9L-Y9.js → webserial-core-DSv1dX3s.js} +160 -148
- package/dist/webserial.cjs +1 -1
- package/dist/webserial.js +29 -23
- package/package.json +15 -10
- package/dist/kernel-7ObJp74F.cjs +0 -1
- package/dist/types/kernel.d.ts.map +0 -1
- package/dist/types/main.d.ts.map +0 -1
- package/dist/types/serial/boardroid.d.ts.map +0 -1
- package/dist/types/serial/hopper.d.ts.map +0 -1
- package/dist/types/serial/jofemar.d.ts.map +0 -1
- package/dist/types/serial/locker.d.ts.map +0 -1
- package/dist/types/serial/pinpad.d.ts.map +0 -1
- package/dist/types/serial/pinpax.d.ts.map +0 -1
- package/dist/types/serial/relay.d.ts.map +0 -1
- package/dist/types/utils/devices.d.ts.map +0 -1
- package/dist/types/utils/dispatcher.d.ts.map +0 -1
- package/dist/types/utils/emulator.d.ts.map +0 -1
- package/dist/types/utils/utils.d.ts.map +0 -1
- package/dist/webserial-core-Co8HLQvu.cjs +0 -4
- /package/dist/types/{kernel.d.ts → lib/kernel.d.ts} +0 -0
- /package/dist/types/{serial → lib/serial}/boardroid.d.ts +0 -0
- /package/dist/types/{serial → lib/serial}/hopper.d.ts +0 -0
- /package/dist/types/{serial → lib/serial}/jofemar.d.ts +0 -0
- /package/dist/types/{serial → lib/serial}/locker.d.ts +0 -0
- /package/dist/types/{serial → lib/serial}/pinpad.d.ts +0 -0
- /package/dist/types/{serial → lib/serial}/pinpax.d.ts +0 -0
- /package/dist/types/{serial → lib/serial}/relay.d.ts +0 -0
- /package/dist/types/{utils → lib/utils}/dispatcher.d.ts +0 -0
- /package/dist/types/{utils → lib/utils}/emulator.d.ts +0 -0
- /package/dist/types/{utils → lib/utils}/utils.d.ts +0 -0
package/dist/jofemar.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { K as C,
|
|
1
|
+
import { K as C, w as u, g as f } from "./kernel-CFxkp4Nz.js";
|
|
2
|
+
import { D as v } from "./devices-CHc7K4eY.js";
|
|
2
3
|
import { o as i } from "./relay-DP8PLsDP.js";
|
|
3
|
-
class
|
|
4
|
+
class b extends C {
|
|
4
5
|
__device = {
|
|
5
6
|
type: "esplus",
|
|
6
7
|
support_cart: !1,
|
|
@@ -35,13 +36,13 @@ class w extends C {
|
|
|
35
36
|
support_cart: o = !0,
|
|
36
37
|
socket: c = !1
|
|
37
38
|
} = {}) {
|
|
38
|
-
if (super({ filters: t, config_port: e, no_device: n, device_listen_on_channel: r, socket: c }), this.__internal__.device.type = "jofemar",
|
|
39
|
+
if (super({ filters: t, config_port: e, no_device: n, device_listen_on_channel: r, socket: c }), this.__internal__.device.type = "jofemar", v.getCustom(this.typeDevice, n))
|
|
39
40
|
throw new Error(`Device ${this.typeDevice} ${n} already exists`);
|
|
40
41
|
this.__internal__.dispense.must_response = !0, this.__internal__.time.response_general = 800, this.__internal__.time.response_engines = 800, this.__internal__.dispense.limit_counter = 40, this.__internal__.dispense.timeout = 0, this.__internal__.dispense.timeout_time = 4e3, this.__internal__.dispense.interval = 0, this.__internal__.dispense.interval_time = 1e3, this.__internal__.device.hex_number = (128 + this.listenOnChannel).toString(16), this.__internal__.device.door_open = !1, this.__internal__.dispense.elevator = {
|
|
41
42
|
locking_time: 60,
|
|
42
43
|
locking_interval: 0,
|
|
43
44
|
need_reset: !1
|
|
44
|
-
}, this.deviceType = a, this.supportCart = o, this.#
|
|
45
|
+
}, this.deviceType = a, this.supportCart = o, this.#l(), v.add(this), this.#s();
|
|
45
46
|
}
|
|
46
47
|
set startChannelVerification(t) {
|
|
47
48
|
const e = parseInt(t);
|
|
@@ -74,7 +75,7 @@ class w extends C {
|
|
|
74
75
|
if (typeof t != "boolean") throw new Error("Invalid support cart, must be a boolean");
|
|
75
76
|
this.__device.support_cart = t;
|
|
76
77
|
}
|
|
77
|
-
#
|
|
78
|
+
#l() {
|
|
78
79
|
const t = [
|
|
79
80
|
"dispensing:withdrawal",
|
|
80
81
|
"command-executed",
|
|
@@ -112,13 +113,13 @@ class w extends C {
|
|
|
112
113
|
for (const e of t)
|
|
113
114
|
this.serialRegisterAvailableListener(e);
|
|
114
115
|
}
|
|
115
|
-
#
|
|
116
|
+
#s() {
|
|
116
117
|
this.on("internal:dispense:running", this.#q.bind(this));
|
|
117
118
|
}
|
|
118
119
|
serialSetConnectionConstant(t = 1) {
|
|
119
120
|
return i.connection({ channel: t });
|
|
120
121
|
}
|
|
121
|
-
async #
|
|
122
|
+
async #d() {
|
|
122
123
|
if (!this.__internal__.dispense.elevator.locking_interval)
|
|
123
124
|
return this.__internal__.dispense.elevator.need_reset && (this.__internal__.dispense.elevator.need_reset = !1, await this.resetWaitingProductRemovedError(), await u(500)), this.__internal__.dispense.status = "elevator-locked", this.__internal__.dispense.elevator.locking_time = 60, new Promise((t) => {
|
|
124
125
|
this.__internal__.dispense.elevator.locking_interval = setInterval(() => {
|
|
@@ -130,10 +131,10 @@ class w extends C {
|
|
|
130
131
|
}, 1e3);
|
|
131
132
|
});
|
|
132
133
|
}
|
|
133
|
-
#
|
|
134
|
+
#p(t) {
|
|
134
135
|
return t.name = "ok", t.description = "The last command was executed successfully", t.no_code = 1, this.dispatch("command-executed", t), t;
|
|
135
136
|
}
|
|
136
|
-
#
|
|
137
|
+
#u(t, e) {
|
|
137
138
|
e.additional = {
|
|
138
139
|
hex: t,
|
|
139
140
|
dec: this.hexToDec(t),
|
|
@@ -159,7 +160,7 @@ class w extends C {
|
|
|
159
160
|
}, r = t.toString().toLowerCase();
|
|
160
161
|
return e.additional.ascii = n[r] ?? null, e.name = "Key pressed", e.description = `The key ${e.additional.ascii} was pressed`, e.no_code = 2, this.dispatch("keyboard:pressed", e.additional), e;
|
|
161
162
|
}
|
|
162
|
-
#
|
|
163
|
+
#o(t, e) {
|
|
163
164
|
return e.additional = { open: !1 }, e.no_code = 3, t === "4f" ? (e.name = "door open", e.description = "The door was opened", e.additional.open = !0, this.__internal__.device.door_open = !0, this.dispatch("door:event", e.additional)) : t === "43" ? (e.name = "door close", e.description = "The door was closed", e.additional.open = !1, this.__internal__.device.door_open = !1, this.dispatch("door:event", e.additional)) : (e.name = "door event", e.description = "The door event received is unknown", this.dispatch("door:event", { open: e.additional.open, message: e })), e;
|
|
164
165
|
}
|
|
165
166
|
#_(t, e) {
|
|
@@ -398,7 +399,7 @@ class w extends C {
|
|
|
398
399
|
temperature: n
|
|
399
400
|
}, this.dispatch("check:temperature-before-expiration", e.additional), e;
|
|
400
401
|
}
|
|
401
|
-
#
|
|
402
|
+
#S(t, e) {
|
|
402
403
|
e.no_code = 53, e.name = "Time before expiration", e.description = "Time before expiration";
|
|
403
404
|
const n = this.hexToDec(t) - 128;
|
|
404
405
|
return e.additional = {
|
|
@@ -406,7 +407,7 @@ class w extends C {
|
|
|
406
407
|
minutes: n
|
|
407
408
|
}, this.dispatch("check:expiration-after", e.additional), e;
|
|
408
409
|
}
|
|
409
|
-
#
|
|
410
|
+
#P(t, e) {
|
|
410
411
|
e.no_code = 54, e.name = "Temperature scale", e.description = "Temperature scale";
|
|
411
412
|
const n = t === "43" ? "Celsius" : "Fahrenheit";
|
|
412
413
|
return e.additional = {
|
|
@@ -414,7 +415,7 @@ class w extends C {
|
|
|
414
415
|
scale: n
|
|
415
416
|
}, this.dispatch("check:temperature-scale", e.additional), e;
|
|
416
417
|
}
|
|
417
|
-
#
|
|
418
|
+
#Q(t, e) {
|
|
418
419
|
return e.no_code = 54, e.name = "Machine ID", e.description = "Machine ID", e.additional = { hex: t[4], full_hex: t }, this.dispatch("check:machine-id", e.additional), e;
|
|
419
420
|
}
|
|
420
421
|
#g(t, e) {
|
|
@@ -441,14 +442,14 @@ class w extends C {
|
|
|
441
442
|
}
|
|
442
443
|
#B(t, e, n = 128) {
|
|
443
444
|
if (t[1] && (e.additional.machine || (e.additional.machine = { hex: null, dec: null }), e.additional.machine.hex = t[1], e.additional.machine.dec = this.hexToDec(t[1]) - n), !(t[1] && t[2]))
|
|
444
|
-
e = this.#
|
|
445
|
+
e = this.#p(e);
|
|
445
446
|
else
|
|
446
447
|
switch (t[2]) {
|
|
447
448
|
case "54":
|
|
448
|
-
e.request = "--automatic", e = this.#
|
|
449
|
+
e.request = "--automatic", e = this.#u(t[3], e);
|
|
449
450
|
break;
|
|
450
451
|
case "50":
|
|
451
|
-
e.request = "--automatic", e = this.#
|
|
452
|
+
e.request = "--automatic", e = this.#o(t[3], e);
|
|
452
453
|
break;
|
|
453
454
|
case "43":
|
|
454
455
|
switch (e.request = "check-data", t[3]) {
|
|
@@ -486,7 +487,7 @@ class w extends C {
|
|
|
486
487
|
e = this.#w(t[4], e);
|
|
487
488
|
break;
|
|
488
489
|
case "4e":
|
|
489
|
-
e = this.#
|
|
490
|
+
e = this.#Q(t, e);
|
|
490
491
|
break;
|
|
491
492
|
case "4f":
|
|
492
493
|
e = this.#b(t[4], e);
|
|
@@ -510,10 +511,10 @@ class w extends C {
|
|
|
510
511
|
e = this.#I(t[4], e);
|
|
511
512
|
break;
|
|
512
513
|
case "66":
|
|
513
|
-
e = this.#
|
|
514
|
+
e = this.#S(t[4], e);
|
|
514
515
|
break;
|
|
515
516
|
case "67":
|
|
516
|
-
e = this.#
|
|
517
|
+
e = this.#P(t[4], e);
|
|
517
518
|
break;
|
|
518
519
|
}
|
|
519
520
|
break;
|
|
@@ -682,7 +683,7 @@ class w extends C {
|
|
|
682
683
|
n.name = "Checksum error", n.description = "The calculated checksum does not match the received checksum", n.no_code = 38, this.#e();
|
|
683
684
|
break;
|
|
684
685
|
default:
|
|
685
|
-
n.name = "unknown", n.description = "The message received is unknown", n.no_code = 404;
|
|
686
|
+
t.toString().includes("01,20,1e,02,18,1e,03,36,04") ? (n.request = "--automatic", n = this.#o("4f", n)) : (n.name = "unknown", n.description = "The message received is unknown", n.no_code = 404);
|
|
686
687
|
break;
|
|
687
688
|
}
|
|
688
689
|
this.dispatch("serial:message", n);
|
|
@@ -700,7 +701,7 @@ class w extends C {
|
|
|
700
701
|
};
|
|
701
702
|
let o;
|
|
702
703
|
do
|
|
703
|
-
o = await this.internalDispense(n), this.#F(), o.error === "elevator-locked" ? await this.#
|
|
704
|
+
o = await this.internalDispense(n), this.#F(), o.error === "elevator-locked" ? await this.#d() : o.error === "no-response" && await u(1e3);
|
|
704
705
|
while (["elevator-locked", "no-response"].includes(o.error || ""));
|
|
705
706
|
return this.__internal__.dispense.backup_dispense = {}, o;
|
|
706
707
|
}
|
|
@@ -741,14 +742,14 @@ class w extends C {
|
|
|
741
742
|
return await this.#r("waiting");
|
|
742
743
|
}
|
|
743
744
|
async resetMachineErrors() {
|
|
744
|
-
return this.__internal__.serial.queue.length === 0 ? (this.#
|
|
745
|
+
return this.__internal__.serial.queue.length === 0 ? (this.#c(), await this.#r("machine")) : new Promise((t) => {
|
|
745
746
|
const e = setInterval(async () => {
|
|
746
|
-
this.__internal__.serial.queue.length > 0 || (clearInterval(e), await this.#r("machine"), this.#
|
|
747
|
+
this.__internal__.serial.queue.length > 0 || (clearInterval(e), await this.#r("machine"), this.#c(), t(!0));
|
|
747
748
|
}, 100);
|
|
748
749
|
});
|
|
749
750
|
}
|
|
750
|
-
#
|
|
751
|
-
const t = this.__device.type === "iceplus" ?
|
|
751
|
+
#c() {
|
|
752
|
+
const t = this.__device.type === "iceplus" ? f(40) : f(25), e = (/* @__PURE__ */ new Date()).getTime(), n = new Date(e), r = 1e3 * t + e, a = new Date(r);
|
|
752
753
|
this.dispatch("reset:errors", {
|
|
753
754
|
description: "Resetting machine errors",
|
|
754
755
|
duration: t,
|
|
@@ -762,7 +763,7 @@ class w extends C {
|
|
|
762
763
|
async status() {
|
|
763
764
|
return await this.appendToQueue(i.status({ machineChannel: this.listenOnChannel }), "status");
|
|
764
765
|
}
|
|
765
|
-
async #
|
|
766
|
+
async #h(t) {
|
|
766
767
|
return await this.appendToQueue(
|
|
767
768
|
i.lights({
|
|
768
769
|
machineChannel: this.listenOnChannel,
|
|
@@ -772,10 +773,10 @@ class w extends C {
|
|
|
772
773
|
);
|
|
773
774
|
}
|
|
774
775
|
async lightsOn() {
|
|
775
|
-
return await this.#
|
|
776
|
+
return await this.#h("on");
|
|
776
777
|
}
|
|
777
778
|
async lightsOff() {
|
|
778
|
-
return await this.#
|
|
779
|
+
return await this.#h("off");
|
|
779
780
|
}
|
|
780
781
|
async program(t, e) {
|
|
781
782
|
return await this.appendToQueue(
|
|
@@ -1194,5 +1195,5 @@ class w extends C {
|
|
|
1194
1195
|
}
|
|
1195
1196
|
}
|
|
1196
1197
|
export {
|
|
1197
|
-
|
|
1198
|
+
b as Jofemar
|
|
1198
1199
|
};
|
package/dist/jsd.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const O=require("./webserial-core-3UL91lxi.cjs"),k=require("./devices-BndwHuvP.cjs");class T{static USE_BIG_ENDIAN=!0;static USE_REFLECTED=!1;static calculate(e){let t;if(this.USE_REFLECTED){t=0;for(const s of e){t^=s&255;for(let n=0;n<8;n++)t&1?t=t>>1^40961:t>>=1}}else{t=0;for(const s of e){t^=s<<8;for(let n=0;n<8;n++)t&32768?t=(t<<1^32773)&65535:t=t<<1&65535}}return this.USE_BIG_ENDIAN?[t>>8&255,t&255]:[t&255,t>>8&255]}static getConfig(){return{bigEndian:this.USE_BIG_ENDIAN,reflected:this.USE_REFLECTED}}}class b{_name="tcpip";get name(){return this._name}get packetId(){return 0}_overridePacketId(e){console.warn(`TCP/IP transport does not use packet IDs. Ignoring override to ${e}.`)}toLittleEndian(e){return[e&255,e>>8&255]}buildPacket(e,t,s){const n=t?t.split("").map(h=>h.charCodeAt(0)):[],a=6+n.length,i=this.toLittleEndian(a),c=this.toLittleEndian(s),o=this.toLittleEndian(e);return{bytes:[...i,...c,...o,...n],packetId:0}}escapeBytes(e){const t=[];for(const s of e)s===192?t.push(219,220):s===219?t.push(219,221):t.push(s);return t}buildAckPacket(e){const n=[192,2,e],[a,i]=T.calculate(n),c=[2,e,a,i];return[192,...this.escapeBytes(c),192]}}class N extends b{packetIdCounter=1;_name="rs232";get packetId(){return this.packetIdCounter}_overridePacketId(e){this.packetIdCounter=e&255}getNextPacketId(){const e=this.packetIdCounter;return this.packetIdCounter=this.packetIdCounter+1&255,this.packetIdCounter===0&&(this.packetIdCounter=1),e}buildPacket(e,t,s){const i=this.getNextPacketId(),{bytes:c}=super.buildPacket(e,t,s),o=[192,1,i,...c],[h,p]=T.calculate(o),l=[1,i,...c,h,p];return{bytes:[192,...this.escapeBytes(l),192],packetId:i}}}const r={requestMachineStatus:100,requestStatusChannel:101,requestStatusSelection:102,configureSelectionDispense:103,addChannelToSelection:104,requestMachineIdentification:105,programWorkingTemperature:106,programWaitingTimings:107,resetSoldOutChannels:108,programTimeWaitingAfterPickup:109,requestJSDVersion:110,requestFaultMachine:111,manageJSDDispensingQueue:112,defineSpecialCharacteristicsSelection:113,configurePerishableProducts:114,requestActiveFaults:115,configureExtendedDispenseStatusData:116,requestStatusTrayPositioningPhototransistors:117,dispenseFromChannel:150,dispenseFromSelection:151,controlLights:152,resetFaultsAndSelfTest:153,performCollectCycle:154,dispenseFromChannelExtended:155,restartingTheJSDKnowingThatItIsDangerous:156,responseFormatCmdWrong:200,responseMachineStatus:201,responseStatusChannel:202,responseStatusSelection:203,responseDispenseStatus:204,responseConfigurationSelectionDispense:205,responseConfigurationChannelsLinkedToSelection:206,responseMachineIdentification:207,responseCurrentTemperature:208,responseReportEventsAlarmsAndFaults:209,responseNewTimingWaitingForProductCollection:210,responsePerformingProductCollectionCycle:211,responseResetMachineSoldOutChannels:212,responseNewTimingWaitingAfterProductCollection:213,responseJSDVersion:214,responseActiveFaults:215,responseJSDDispensingQueue:216,responseSpecialCharacteristicsSelection:217,responsePerishableProducts:218,responseActiveFaultsList:219,responseJSDResetStatus:220,responseExtendedDispenseStatusData:221,responseTraysPositioningPhototransistorsStatus:222,jsdErrorLicenseTemporarilyBlocked:300,jsdErrorLicenseNotActive:301,jsdErrorCommandNotExecutable:302},C=d=>Object.keys(r).find(t=>r[t]===d)||"Unknown",f={VISION:402,LICENSING:600,MANIFESTS_AND_LOGS:601,SIMULATOR_VISION:1e4},L=d=>[f.VISION,f.SIMULATOR_VISION].includes(d),F=d=>[f.LICENSING].includes(d),w=d=>[f.MANIFESTS_AND_LOGS].includes(d);class u{transport;static APP_ID=f.VISION;constructor(e){this.transport=e}static connection({transport:e,packetId:t}){return e._overridePacketId(t||255),new u(e).requestJSDVersion()}requestMachineStatus({machine:e}){const t=`${e}`;return this.transport.buildPacket(r.requestMachineStatus,t,u.APP_ID)}requestStatusChannel({machine:e,tray:t,channel:s}){const n=`${e},${t},${s}`;return this.transport.buildPacket(r.requestStatusChannel,n,u.APP_ID)}requestStatusSelection({selection:e}){const t=`${e}`;return this.transport.buildPacket(r.requestStatusSelection,t,u.APP_ID)}configureSelectionDispense({selection:e,speed:t,timePostRun:s}){const n=`${e},${t},${s}`;return this.transport.buildPacket(r.configureSelectionDispense,n,u.APP_ID)}getSelectionDispenseConfig({machine:e}){const t=`${e}`;return this.transport.buildPacket(r.configureSelectionDispense,t,u.APP_ID)}addChannelToSelection({selection:e,machine:t,tray:s,channel:n}){const a=`${e},${t},${s},${n}`;return this.transport.buildPacket(r.addChannelToSelection,a,u.APP_ID)}getChannelsLinkedToSelection({selection:e}){const t=`${e}`;return this.transport.buildPacket(r.addChannelToSelection,t,u.APP_ID)}requestMachineIdentification({machine:e}){const t=`${e}`;return this.transport.buildPacket(r.requestMachineIdentification,t,u.APP_ID)}formatTemperature(e){const t=e>=0?"+":"-",s=Math.abs(e).toFixed(1).padStart(4,"0");return`${t}${s}`}programWorkingTemperature({machine:e,temperature:t,enable:s}){const n=this.formatTemperature(t),i=`${e},${n},${s?1:0}`;return this.transport.buildPacket(r.programWorkingTemperature,i,u.APP_ID)}getWorkingTemperature({machine:e}){const t=`${e}`;return this.transport.buildPacket(r.programWorkingTemperature,t,u.APP_ID)}programWaitingTimings({collectPosition:e,dispenseManoeuvres:t,afterPickup:s}){const n=`${e},${t},${s}`;return this.transport.buildPacket(r.programWaitingTimings,n,u.APP_ID)}getWaitingTimings(){return this.transport.buildPacket(r.programWaitingTimings,"",u.APP_ID)}resetSoldOutChannels({machine:e}){const t=`${e}`;return this.transport.buildPacket(r.resetSoldOutChannels,t,u.APP_ID)}programTimeWaitingAfterPickup({time:e}){const t=`${e}`;return this.transport.buildPacket(r.programTimeWaitingAfterPickup,t,u.APP_ID)}getTimeWaitingAfterPickup(){return this.transport.buildPacket(r.programTimeWaitingAfterPickup,"",u.APP_ID)}requestJSDVersion(){return this.transport.buildPacket(r.requestJSDVersion,"",u.APP_ID)}requestFaultMachine({machine:e,type:t}){const n=`${e},${{"report-active":0,"report-inactive":1,"clear-inactive":2}[t]}`;return this.transport.buildPacket(r.requestFaultMachine,n,u.APP_ID)}requestReportActiveFaults(e){return this.requestFaultMachine({machine:e,type:"report-active"})}requestReportInactiveFaults(e){return this.requestFaultMachine({machine:e,type:"report-inactive"})}requestClearInactiveFaults(e){return this.requestFaultMachine({machine:e,type:"clear-inactive"})}manageJSDDispensingQueue({type:e}){const t=`${e}`;return this.transport.buildPacket(r.manageJSDDispensingQueue,t,u.APP_ID)}requestJSDDispensingQueueStatus(){return this.manageJSDDispensingQueue({type:0})}clearJSDDispensingQueue(){return this.manageJSDDispensingQueue({type:1})}defineSpecialCharacteristicsSelection({selection:e,perishable:t,fragileOrHeavy:s,typeAdjustElevator:n,timeAdjustElevator:a}){const p=`${e},${t?1:0},${s?1:0},${n==="lower"?0:1},${a}`;return this.transport.buildPacket(r.defineSpecialCharacteristicsSelection,p,u.APP_ID)}getSpecialCharacteristicsSelection({selection:e}){const t=`${e}`;return this.transport.buildPacket(r.defineSpecialCharacteristicsSelection,t,u.APP_ID)}configurePerishableProducts({machine:e,enable:t,temperatureLimit:s,minutesToExpiry:n}){const a=t?1:0,i=this.formatTemperature(s),c=`${e},${a},${i},${n}`;return this.transport.buildPacket(r.configurePerishableProducts,c,u.APP_ID)}requestActiveFaults({machine:e}){const t=`${e}`;return this.transport.buildPacket(r.requestActiveFaults,t,u.APP_ID)}configureExtendedDispenseStatusData({enable:e}){const s=`${e?1:0}`;return this.transport.buildPacket(r.configureExtendedDispenseStatusData,s,u.APP_ID)}getExtendedDispenseStatusDataConfig(){return this.transport.buildPacket(r.configureExtendedDispenseStatusData,"",u.APP_ID)}requestStatusTrayPositioningPhototransistors({machine:e}){const t=`${e}`;return this.transport.buildPacket(r.requestStatusTrayPositioningPhototransistors,t,u.APP_ID)}dispenseFromChannel({token:e,machine:t,tray:s,channel:n,speed:a,timePostRun:i}){const c=`${e},${t},${s},${n},${a},${i}`;return this.transport.buildPacket(r.dispenseFromChannel,c,u.APP_ID)}getDispenseStatusFromChannel({token:e}){const t=`${e}`;return this.transport.buildPacket(r.dispenseFromChannel,t,u.APP_ID)}dispenseFromSelection({token:e,selection:t}){const s=`${e},${t}`;return this.transport.buildPacket(r.dispenseFromSelection,s,u.APP_ID)}getDispenseStatusFromSelection({token:e}){const t=`${e}`;return this.transport.buildPacket(r.dispenseFromSelection,t,u.APP_ID)}controlLights({machine:e,turnOn:t}){const n=`${e},${t?1:0}`;return this.transport.buildPacket(r.controlLights,n,u.APP_ID)}resetFaultsAndSelfTest({machine:e}){const t=`${e}`;return this.transport.buildPacket(r.resetFaultsAndSelfTest,t,u.APP_ID)}performCollectCycle({machine:e}){const t=`${e}`;return this.transport.buildPacket(r.performCollectCycle,t,u.APP_ID)}dispenseFromChannelExtended({token:e,machine:t,tray:s,channel:n,speed:a,timePostRun:i,fragileOrHeavy:c,typeAdjustElevator:o,timeAdjustElevator:h}){const I=`${e},${t},${s},${n},${a},${i},${c?1:0},${o==="lower"?0:1},${h}`;return this.transport.buildPacket(r.dispenseFromChannelExtended,I,u.APP_ID)}getDispenseStatusFromChannelExtended({token:e}){const t=`${e}`;return this.transport.buildPacket(r.dispenseFromChannelExtended,t,u.APP_ID)}restartingTheJSDKnowingThatItIsDangerous(){return this.transport.buildPacket(r.restartingTheJSDKnowingThatItIsDangerous,"",u.APP_ID)}}function q(d){if(d.length>5)throw new Error(`Token must be max 5 characters, got ${d.length}`);return d}function _(){let d;do{const e=new Uint8Array(2);d=parseInt(crypto.getRandomValues(e).toString().replaceAll(",","")).toString(36)}while(d.length>5);return q(d)}const E={status:"NO-CONNECTED",machineInService:!1,doorOpen:!1,availabilityToDispense:"NOT-AVAILABLE-TO-DISPENSE",hasLightsOn:!1,temperature:""};class M{_commands;jsd;APP_ID=f.VISION;_machineStatus=[{...E},{...E},{...E},{...E}];constructor(e,t){this._commands=new u(t),this.jsd=e}_performingChannelAssignment={enabled:!1,selections:[],currentSelection:1};_dispensingTokens={};async send(e,t){return this.jsd._lastApplicationCode=this.APP_ID,this.jsd._toQueue(e,{alias:t.alias,waitResponse:t.waitResponse||!1,timeout:t.timeout||500})}get cmd(){return this._commands}_getMachineIndex(e){return e-1}isAvailableToDispense({machine:e=1}={}){const t=this._getMachineIndex(e);return["ELEVATOR-COLLECTION-POSITION","AVAILABLE-TO-DISPENSE"].includes(this._machineStatus[t]?.availabilityToDispense||"")&&this._machineStatus[t]?.machineInService===!0&&this._machineStatus[t]?.doorOpen===!1&&this._machineStatus[t]?.status==="CONNECTED"}async requestMachineStatus({machine:e=1}={}){const t=this._getMachineIndex(e),s=this.cmd.requestMachineStatus({machine:t});return await this.send(s,{alias:"requestMachineStatus"})}_getTrayChannelFromSelection(e){const t=Math.floor((e-1)/10)+11,s=(e-1)%10;return{tray:t,channel:s}}_getSelectionFromTrayChannel(e,t){return(e-11)*10+t+1}async requestStatusChannel({machine:e,selection:t}){const s=this._getMachineIndex(e),{tray:n,channel:a}=this._getTrayChannelFromSelection(t),i=this.cmd.requestStatusChannel({machine:s,tray:n,channel:a});return await this.send(i,{alias:"requestStatusChannel"})}async assignChannels({machine:e}){if(this._performingChannelAssignment.enabled)throw new Error("Channel assignment already in progress");this._performingChannelAssignment.enabled=!0;for(let t=1;t<=80;t++)await this.requestStatusChannel({machine:e,selection:t});return new Promise(t=>{const s=setInterval(()=>{if(this._performingChannelAssignment.enabled)return;clearInterval(s);const n=this._performingChannelAssignment.selections;this._performingChannelAssignment.selections=[],t(n)},200)})}async requestStatusSelection({selection:e}){const t=this.cmd.requestStatusSelection({selection:e});return await this.send(t,{alias:"requestStatusSelection"})}async configureSelectionDispense({selection:e,speed:t,timePostRun:s}){const n=this.cmd.configureSelectionDispense({selection:e,speed:t,timePostRun:s});return await this.send(n,{alias:"configureSelectionDispense"})}async requestSelectionDispenseConfig({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.getSelectionDispenseConfig({machine:t});return await this.send(s,{alias:"getSelectionDispenseConfig"})}async configureAddChannelToSelection({selection:e,machine:t,tray:s,channel:n}){const a=this._getMachineIndex(t),i=this.cmd.addChannelToSelection({selection:e,machine:a,tray:s,channel:n});return await this.send(i,{alias:"addChannelToSelection"})}async requestChannelsLinkedToSelection({selection:e}){const t=this.cmd.getChannelsLinkedToSelection({selection:e});return await this.send(t,{alias:"getChannelsLinkedToSelection"})}async requestMachineIdentification({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.requestMachineIdentification({machine:t});return await this.send(s,{alias:"requestMachineIdentification"})}async configureWorkingTemperature({machine:e,temperature:t,enable:s}){const n=this._getMachineIndex(e),a=this.cmd.programWorkingTemperature({machine:n,temperature:t,enable:s});return await this.send(a,{alias:"programWorkingTemperature"})}async requestWorkingTemperature({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.getWorkingTemperature({machine:t});return await this.send(s,{alias:"getWorkingTemperature"})}async configureWaitingTimings({collectPosition:e,dispenseManoeuvres:t,afterPickup:s}){const n=this.cmd.programWaitingTimings({collectPosition:e,dispenseManoeuvres:t,afterPickup:s});return await this.send(n,{alias:"programWaitingTimings"})}async requestWaitingTimings(){const e=this.cmd.getWaitingTimings();return await this.send(e,{alias:"getWaitingTimings"})}async resetSoldOutChannels({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.resetSoldOutChannels({machine:t});return await this.send(s,{alias:"resetSoldOutChannels"})}async resetAllErrors({machine:e}){return await Promise.all([this.clearInactiveFaults({machine:e}),this.resetSoldOutChannels({machine:e}),this.resetFaultsAndSelfTest({machine:e})])}async configureTimeWaitingAfterPickup({time:e}){const t=this.cmd.programTimeWaitingAfterPickup({time:e});return await this.send(t,{alias:"programTimeWaitingAfterPickup"})}async requestTimeWaitingAfterPickup(){const e=this.cmd.getTimeWaitingAfterPickup();return await this.send(e,{alias:"getTimeWaitingAfterPickup"})}async requestJSDVersion(){const e=this.cmd.requestJSDVersion();return await this.send(e,{alias:"requestJSDVersion"})}async requestReportActiveFaults({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.requestReportActiveFaults(t);return await this.send(s,{alias:"requestReportActiveFaults"})}async requestReportInactiveFaults({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.requestReportInactiveFaults(t);return await this.send(s,{alias:"requestReportInactiveFaults"})}async clearInactiveFaults({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.requestClearInactiveFaults(t);return await this.send(s,{alias:"requestClearInactiveFaults"})}async requestJSDDispensingQueueStatus(){const e=this.cmd.requestJSDDispensingQueueStatus();return await this.send(e,{alias:"requestJSDDispensingQueueStatus"})}async clearJSDDispensingQueue(){const e=this.cmd.clearJSDDispensingQueue();return await this.send(e,{alias:"clearJSDDispensingQueue"})}async configureSpecialCharacteristicsSelection({selection:e,perishable:t,fragileOrHeavy:s,typeAdjustElevator:n,timeAdjustElevator:a}){const i=this.cmd.defineSpecialCharacteristicsSelection({selection:e,perishable:t,fragileOrHeavy:s,typeAdjustElevator:n,timeAdjustElevator:a});return await this.send(i,{alias:"defineSpecialCharacteristicsSelection"})}requestSpecialCharacteristicsSelection({selection:e}){const t=this.cmd.getSpecialCharacteristicsSelection({selection:e});return this.send(t,{alias:"getSpecialCharacteristicsSelection"})}configurePerishableProducts({machine:e,enable:t,temperatureLimit:s,minutesToExpiry:n}){const a=this._getMachineIndex(e),i=this.cmd.configurePerishableProducts({machine:a,enable:t,temperatureLimit:s,minutesToExpiry:n});return this.send(i,{alias:"configurePerishableProducts"})}async requestActiveFaults({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.requestActiveFaults({machine:t});return await this.send(s,{alias:"requestActiveFaults"})}async configureExtendedDispenseStatusData({enable:e}){const t=this.cmd.configureExtendedDispenseStatusData({enable:e});return await this.send(t,{alias:"configureExtendedDispenseStatusData"})}async requestExtendedDispenseStatusDataConfig(){const e=this.cmd.getExtendedDispenseStatusDataConfig();return await this.send(e,{alias:"getExtendedDispenseStatusDataConfig"})}async requestStatusTrayPositioningPhototransistors({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.requestStatusTrayPositioningPhototransistors({machine:t});return await this.send(s,{alias:"requestStatusTrayPositioningPhototransistors"})}async dispenseFromChannel({machine:e,tray:t,channel:s,speed:n,timePostRun:a,cart:i=!1}){if(!this.isAvailableToDispense({machine:e}))throw new Error(`Machine ${e} is not available to dispense`);const c=this._getMachineIndex(e),o=_(),h=this.cmd.dispenseFromChannel({token:o,machine:c,tray:t,channel:s,speed:n,timePostRun:a});return await this.send(h,{alias:"dispenseFromChannel"}),this._dispensingTokens[o]={cart:!!i,resolve:()=>{delete this._dispensingTokens[o]},reject:()=>{}},new Promise((p,l)=>{this._dispensingTokens[o].resolve=p,this._dispensingTokens[o].reject=l})}async dispense({machine:e,selection:t,speed:s,timePostRun:n,cart:a=!1}){const{tray:i,channel:c}=this._getTrayChannelFromSelection(t);return this.dispenseFromChannel({machine:e,tray:i,channel:c,speed:s||5,timePostRun:n||0,cart:!!a})}async dispenseCart(e=[]){const t=[];for(let n=0;n<e.length;n+=10)t.push(e.slice(n,n+10));let s=[];for(const n of t)try{const a=await Promise.all(n.map(o=>this.dispense({machine:o.machine,selection:o.selection,cart:!0}))),i=[...new Set(n.map(o=>o.machine))];await new Promise(o=>{const h=setInterval(()=>{i.every(l=>this.getMachineStatus(l)?.availabilityToDispense==="AVAILABLE-TO-DISPENSE")&&(clearInterval(h),o(!0))},300)});for(const o of i)this._machineStatus[this._getMachineIndex(o)]?.availabilityToDispense==="WAITING-COLLECTION"&&this.emit("waiting-collection",{machine:o!==null?o+1:null});const c=n.map((o,h)=>({machine:o.machine,selection:o.selection,dispensed:a[h]}));s=s.concat(c)}catch(a){console.error("Error sending dispense command:",a)}return s}async requestDispenseStatusFromChannel({token:e}){const t=this.cmd.getDispenseStatusFromChannel({token:e});return await this.send(t,{alias:"getDispenseStatusFromChannel"})}async dispenseFromSelection({selection:e,cart:t=!1}){const s=_(),n=this.cmd.dispenseFromSelection({token:s,selection:e});return await this.send(n,{alias:"dispenseFromSelection"}),this._dispensingTokens[s]={cart:!!t,resolve:()=>{},reject:()=>{}},new Promise((a,i)=>{this._dispensingTokens[s].resolve=a,this._dispensingTokens[s].reject=i})}async requestDispenseStatusFromSelection({token:e}){const t=this.cmd.getDispenseStatusFromSelection({token:e});return await this.send(t,{alias:"getDispenseStatusFromSelection"})}async _configureLights({machine:e,turnOn:t,alias:s}){const n=this._getMachineIndex(e),a=this.cmd.controlLights({machine:n,turnOn:t});return await this.send(a,{alias:s})}async lightsOn({machine:e}){return this._configureLights({machine:e,turnOn:!0,alias:"lightsOn"})}async lightsOff({machine:e}){return this._configureLights({machine:e,turnOn:!1,alias:"lightsOff"})}async resetFaultsAndSelfTest({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.resetFaultsAndSelfTest({machine:t});return await this.send(s,{alias:"resetFaultsAndSelfTest"})}async collect({machine:e}){const t=this._getMachineIndex(e),s=this.cmd.performCollectCycle({machine:t});return await this.send(s,{alias:"performCollectCycle"})}async dispenseFromChannelExtended({machine:e,tray:t,channel:s,speed:n,timePostRun:a,fragileOrHeavy:i,typeAdjustElevator:c,timeAdjustElevator:o,cart:h=!1}){if(!this.isAvailableToDispense({machine:e}))throw new Error(`Machine ${e} is not available to dispense`);const p=this._getMachineIndex(e),l=_(),m=this.cmd.dispenseFromChannelExtended({token:l,machine:p,tray:t,channel:s,speed:n,timePostRun:a,fragileOrHeavy:i,typeAdjustElevator:c,timeAdjustElevator:o});return await this.send(m,{alias:"dispenseFromChannelExtended"}),this._dispensingTokens[l]={cart:!!h,resolve:()=>{},reject:()=>{}},new Promise((I,D)=>{this._dispensingTokens[l].resolve=I,this._dispensingTokens[l].reject=D})}async requestDispenseStatusFromChannelExtended({token:e}){const t=this.cmd.getDispenseStatusFromChannelExtended({token:e});return await this.send(t,{alias:"getDispenseStatusFromChannelExtended"})}async restartJSD(){const e=this.cmd.restartingTheJSDKnowingThatItIsDangerous();return await this.send(e,{alias:"restartingTheJSDKnowingThatItIsDangerous"})}serialMessage(e){switch(e.opcode){case r.responseFormatCmdWrong:this._responseFormatCmdWrong(e);break;case r.responseMachineStatus:this._responseMachineStatus(e);break;case r.responseStatusChannel:this._responseStatusChannel(e);break;case r.responseStatusSelection:this._responseStatusSelection(e);break;case r.responseDispenseStatus:this._responseDispenseStatus(e);break;case r.responseConfigurationSelectionDispense:this._responseConfigurationSelectionDispense(e);break;case r.responseConfigurationChannelsLinkedToSelection:this._responseConfigurationChannelsLinkedToSelection(e);break;case r.responseMachineIdentification:this._responseMachineIdentification(e);break;case r.responseCurrentTemperature:this._responseCurrentTemperature(e);break;case r.responseReportEventsAlarmsAndFaults:this._responseReportEventsAlarmsAndFaults(e);break;case r.responseNewTimingWaitingForProductCollection:this._responseNewTimingWaitingForProductCollection(e);break;case r.responsePerformingProductCollectionCycle:this._responsePerformingProductCollectionCycle(e);break;case r.responseResetMachineSoldOutChannels:this._responseResetMachineSoldOutChannels(e);break;case r.responseNewTimingWaitingAfterProductCollection:this._responseNewTimingWaitingAfterProductCollection(e);break;case r.responseJSDVersion:this._responseJSDVersion(e);break;case r.responseActiveFaults:this._responseActiveFaults(e);break;case r.responseJSDDispensingQueue:this._responseJSDDispensingQueue(e);break;case r.responseSpecialCharacteristicsSelection:this._responseSpecialCharacteristicsSelection(e);break;case r.responsePerishableProducts:this._responsePerishableProducts(e);break;case r.responseActiveFaultsList:this._responseActiveFaultsList(e);break;case r.responseJSDResetStatus:this._responseJSDResetStatus(e);break;case r.responseExtendedDispenseStatusData:this._responseExtendedDispenseStatusData(e);break;case r.responseTraysPositioningPhototransistorsStatus:this._responseTraysPositioningPhototransistorsStatus(e);break;case r.jsdErrorLicenseTemporarilyBlocked:this._responseJsdErrorLicenseTemporarilyBlocked(e);break;case r.jsdErrorLicenseNotActive:this._responseJsdErrorLicenseNotActive(e);break;case r.jsdErrorCommandNotExecutable:this._responseJsdErrorCommandNotExecutable(e);break}}emit(e,...t){this.jsd.dispatch(`vision:${e}`,...t)}_responseFormatCmdWrong(e){const t=parseInt(e.params[0],10),s=e.params.slice(1),n=C(t);this.emit("wrong-cmd",{opcodeName:n,opcode:t,params:s})}setMachineStatus(e,t){this._machineStatus[e]=t}getMachineStatus(e){const t=this._getMachineIndex(e);return this._machineStatus[t]||null}_getMachineStatusName(e){switch(e){case 0:return"NO-CONNECTED";case 1:return"CONNECTED";case 2:return"LOST"}}_responseMachineStatus(e){const[t,s,n,a,i,c,o]=e.params,h={0:"AVAILABLE-TO-DISPENSE",1:"NOT-AVAILABLE-TO-DISPENSE",2:"ALREADY-DISPENSING",3:"WAITING-COLLECTION",4:"ELEVATOR-COLLECTION-POSITION",5:"UNCOLLECTED"},p={status:this._getMachineStatusName(parseInt(s,10)),machineInService:parseInt(n,10)===1,doorOpen:parseInt(a,10)===0,availabilityToDispense:h[i]||"NOT-AVAILABLE-TO-DISPENSE",hasLightsOn:isNaN(parseInt(c,10))?!1:parseInt(c,10)===1,temperature:o||""};this.setMachineStatus(parseInt(t,10),p),this.emit("machine-status",{machine:parseInt(t,10)+1,...p})}_statusChannelName(e){switch(e){case 0:return"NO-CONNECTED";case 1:return"AVAILABLE";case 2:return"SOLD-OUT";case 3:return"FAULT";default:return"NO-CONNECTED"}}_responseStatusChannel(e){const[t,s,n,a]=e.params,i=this._statusChannelName(parseInt(a,10)),c=this._getSelectionFromTrayChannel(Number(s),Number(n)),o=["AVAILABLE","SOLD-OUT"].includes(i);if(this._performingChannelAssignment.enabled){this._performingChannelAssignment.selections.push({selection:c,active:o,machine:Number(t)+1}),this._performingChannelAssignment.currentSelection=this._performingChannelAssignment.selections.length;const h=this._performingChannelAssignment.currentSelection/80*100;this.emit("channels-progress",{progress:Math.min(100,Math.round(h*100)/100),current:this._performingChannelAssignment.currentSelection,verified:this._performingChannelAssignment.selections.length}),this._performingChannelAssignment.selections.length>=80&&(this.emit("channels",this._performingChannelAssignment.selections),this._performingChannelAssignment.enabled=!1)}else this.emit("channel-status",{machine:Number(t)+1,selection:c,active:o})}_statusSelectionName(e){switch(e){case 0:return"NO-CONFIGURED";case 1:return"ASSOCIATED";case 2:return"NO-ASSOCIATED";case 3:return"NO-VISION-OWNED";case 4:return"EXPIRED";default:return"NO-CONFIGURED"}}_responseStatusSelection(e){const[t,s]=e.params,n=this._statusSelectionName(parseInt(s,10));this.emit("status-selection",{selection:Number(t),status:n})}_responseDispenseStatus(e){const[t,s,n,a]=e.params,i={0:"RECEIVED",1:"IN-PROGRESS",2:"WAITING-COLLECTION",3:"COLLECTED",4:"NO-PERFORMED",5:"TOKEN-NOT-FOUND",6:"QUEUE-FULL",7:"CHANNEL-NO-CONNECTED",8:"SELECTION-UNAVAILABLE",9:"FAILED-DISPENSE",10:"UNCOLLECTED",11:"DISPENSED-CAN-MULTIPLE",12:"DISPENSE-CANCELLED",13:"PRODUCT-EXPIRED"},c=Object.values(i).filter(D=>["NO-PERFORMED","TOKEN-NOT-FOUND","QUEUE-FULL","CHANNEL-NO-CONNECTED","SELECTION-UNAVAILABLE","FAILED-DISPENSE","DISPENSE-CANCELLED","PRODUCT-EXPIRED","UNCOLLECTED"].includes(D)),o={0:"NONE",1:"DOOR-OPEN",2:"MACHINE-NOT-AVAILABLE",3:"ERROR-PHOTOSENSORS",4:"ERROR-MOTOR-POWER-CONSUMPSION-DETECTOR",5:"ALREADY-SOLD-OUT",6:"ERROR-TEST-PRODUCT-DETECTOR",7:"SOLD-OUT",8:"ELEVATOR-CANT-REACH-TRAY",9:"UNCOLLECTED",10:"MACHINE-RESET-DURING-DISPENSE",11:"MACHINE-COMMUNICATION-ERROR",12:"MACHINE-COMMUNICATION-LOST",13:"NO-VISION",14:"PRODUCT-PERISHABLE-EXPIRED",20:"DECIDE"},h=i[parseInt(s,10)]||"UNKNOWN",[p,l,m]=n&&n.trim()!==""?n.split(".").map(D=>parseInt(D,10)):[null,null,null],I=a?o[parseInt(a,10)]||"UNKNOWN":null;this._dispensingTokens[t]&&(this._dispensingTokens[t].cart===!1&&h==="WAITING-COLLECTION"?(this._dispensingTokens[t].resolve(!0),delete this._dispensingTokens[t],this.emit("waiting-collection",{machine:p!==null?p+1:null})):this._dispensingTokens[t].cart===!0&&h==="DISPENSED-CAN-MULTIPLE"?(this._dispensingTokens[t].resolve(!0),delete this._dispensingTokens[t]):c.includes(h)&&(this._dispensingTokens[t].resolve(!1),delete this._dispensingTokens[t])),h==="IN-PROGRESS"&&this.emit("dispensing",{token:t,machine:p!==null?p+1:null,tray:l!==null?l:null,channel:m!==null?m:null,selection:m!==null&&l!==null?this._getSelectionFromTrayChannel(l,m):null}),this.emit("dispense-status",{token:t,status:h,machine:p!==null?p+1:null,tray:l!==null?l:null,channel:m!==null?m:null,extendedStatus:I})}_responseConfigurationSelectionDispense(e){const[t,s,n]=e.params;this.emit("selection-dispense-config",{selection:Number(t),speed:Number(s),timePostRun:Number(n)})}_responseConfigurationChannelsLinkedToSelection(e){const[t,...s]=e.params,a=s[s.length-1].includes(":")?s.pop():null,i={0:"OK",1:"ALREADY-DEFINED",2:"OUT-OF-RANGE"},c=s.map(o=>{const[h,p,l]=o.split(":");return{machine:parseInt(h,10)+1,tray:parseInt(p,10),channel:parseInt(l,10)}});this.emit("channels-linked-to-selection",{selection:Number(t),linkedChannels:c,status:a?i[parseInt(a,10)]||"UNKNOWN":null})}_responseMachineIdentification(e){const[t,s,n,a]=e.params;this.emit("machine-id",{machine:parseInt(t,10)+1,model:s,serialNumber:n,firmwareVersion:a})}_responseCurrentTemperature(e){const[t,s,n,a,i]=e.params,c=parseInt(t,10)+1,o=parseInt(i,10)===1?"ON":"OFF";this.emit("current-temperature",{machine:c,workingTemperature:s,currentTemperatureInsideMachine:n,currentTemperatureAir:a,coolUnitStatus:o})}_responseReportEventsAlarmsAndFaults(e){const[t,s,n]=e.params,a=parseInt(t,10)+1,i={1:"Product detector",2:"None of the motors are connected. Possible control board faulty",3:"Channels jamp detector error",4:"Temperature control error",5:"Elevator faulty",6:"Photosensor, which determine the position of the elevator in relation with the cabinet, faulty",7:"Elevator tester (flap), ES-Plus, faulty",8:"Product expired (perishable)"};this.emit("alarm-faults-events",{machine:a,event:i[parseInt(s,10)]||"UNKNOWN",status:parseInt(n,10)===1?"ACTIVE":"CLEARED"})}_responseNewTimingWaitingForProductCollection(e){const[t,s,n]=e.params;this.emit("time-waiting-for-product-collection",{minutesProductCollection:Number(t),secondsTimeBetweenDispenseManoeuvres:Number(s),secondsBetweenCollectAndStartNextDispense:Number(n)})}_responsePerformingProductCollectionCycle(e){const[t,s]=e.params,n={0:"Manoeuvre has started",1:"Wron machine number",2:"Machine no connected",3:"Wron machine model",4:"Machine cannot perform collection now",5:"Communication error with machine"};this.emit("collect",{machine:parseInt(t,10)+1,status:n[parseInt(s,10)]||"UNKNOWN"})}_responseResetMachineSoldOutChannels(e){const[t,s]=e.params,n={0:"Reset performed",1:"Wrong machine number",2:"Machine not connected",3:"Communication error with machine"};this.emit("reset-sold-out-channels",{machine:parseInt(t,10)+1,status:n[parseInt(s,10)]||"UNKNOWN"})}_responseNewTimingWaitingAfterProductCollection(e){const[t]=e.params;this.emit("time-waiting-after-product-collection",{secondsBetweenCollectAndStartNextDispense:Number(t)})}_responseJSDVersion(e){const[t,s,n,a]=e.params;this.emit("jsd-version",{name:t,compileNumber:s,compileDate:n,description:a})}_responseActiveFaults(e){const[t,s,n,a,i,c,o]=e.params;this.emit("active-faults",{machine:parseInt(t,10)+1,status:parseInt(s,10)===1?"ACTIVE":"CLEARED",fault:parseInt(n,10),appearancesNumber:parseInt(a,10),partialNumberActivated:parseInt(i,10),minutesActive:parseInt(c,10),date:o})}_responseJSDDispensingQueue(e){const[t,s,n]=e.params;this.emit("jsd-dispensing-queue",{free:parseInt(t,10),processed:parseInt(s,10),notProcessed:parseInt(n,10)})}_responseSpecialCharacteristicsSelection(e){const[t,s,n,a,i]=e.params;this.emit("special-characteristics-selection",{selection:Number(t),perishable:parseInt(s,10)===1,fragileOrHeavy:parseInt(n,10)===1,typeAdjustElevator:a==="0"?"lower":"upper",timeAdjustElevator:Number(i)})}_responsePerishableProducts(e){const[t,s,n,a,i]=e.params;this.emit("perishable-products-config",{machine:parseInt(t,10)+1,perishableActive:parseInt(s,10)===1,alarmPerisableTriggered:parseInt(n,10)===1,maxTemperature:a,minutesBeforeExpire:Number(i)})}_responseActiveFaultsList(e){const[t,...s]=e.params,n={1:"Product detector",2:"None of the motors are connected. Possible control board faulty",3:"Channels jamp detector error",4:"Temperature control error",5:"Elevator faulty",6:"Photosensor, which determine the position of the elevator in relation with the cabinet, faulty",7:"Elevator tester (flap), ES-Plus, faulty",8:"Product expired (perishable)"},a=s.map(i=>({code:parseInt(i,10),description:n[parseInt(i,10)]||"UNKNOWN"}));this.emit("active-faults-list",{machine:parseInt(t,10)+1,faults:a,ok:s.length===0})}_responseJSDResetStatus(e){const[t]=e.params,s={0:"RESETED",1:"RECEIVED"};this.emit("jsd-status-reset",{type:s[parseInt(t,10)]||"UNKNOWN"})}_responseExtendedDispenseStatusData(e){const[t]=e.params;this.emit("extended-dispense-status-data",{enabled:parseInt(t,10)===1})}_responseTraysPositioningPhototransistorsStatus(e){const[t,s,n,a,i,c,o,h,p]=e.params,l={0:"OK",C:"SHORT-CIRCUIT",N:"TRAY-NOT-DETECTED"},m={machine:parseInt(t,10)+1,trays:{11:l[s]||null,12:l[n]||null,13:l[a]||null,14:l[i]||null,15:l[c]||null,16:l[o]||null,17:l[h]||null,18:l[p]||null}};this.emit("trays-positioning-phototransistors-status",m)}_responseJsdErrorLicenseTemporarilyBlocked(e){const[t,...s]=e.params;this.emit("jsd-license-error",{type:"exprired-license",opcode:parseInt(t,10),actionName:C(parseInt(t,10)),params:s})}_responseJsdErrorLicenseNotActive(e){const[t,...s]=e.params;this.emit("jsd-license-error",{type:"app-number-not-licensed",opcode:parseInt(t,10),actionName:C(parseInt(t,10)),params:s})}_responseJsdErrorCommandNotExecutable(e){const[t,...s]=e.params;this.emit("jsd-license-error",{type:"price-control-active-direct-dispense-not-allowed",opcode:parseInt(t),actionName:C(parseInt(t,10)),params:s})}}const g={requestLogsEvents:101,requestLogsByDate:102,requestForSendingManifest:110,sendManifestDataBlock:111,responseCmdWrong:200,responseLineLogEvent:201,responseManifestDataBlock:210,responseManifestCompleted:211},x=d=>Object.keys(g).find(t=>g[t]===d)||"Unknown";class P{transport;static APP_ID=f.MANIFESTS_AND_LOGS;constructor(e){this.transport=e}requestLogsEvents(e=!1){const s=`${e?"+":"0"}`;return this.transport.buildPacket(g.requestLogsEvents,s,P.APP_ID)}requestLogsByDate(e,t){const s=`${e},${t}`;return this.transport.buildPacket(g.requestLogsByDate,s,P.APP_ID)}requestForSendingManifest(e,t){const s=`${e},${t}`;return this.transport.buildPacket(g.requestForSendingManifest,s,P.APP_ID)}sendManifestDataBlock(e,t){const s=Array.from(t).map(a=>a.toString(2).padStart(8,"0")).join(" "),n=`${e},${s}`;return this.transport.buildPacket(g.sendManifestDataBlock,n,P.APP_ID)}}class R{_commands;jsd;APP_ID=f.MANIFESTS_AND_LOGS;_logs={status:"idle",data:[]};constructor(e,t){this._commands=new P(t),this.jsd=e}async send(e,t){return this.jsd._lastApplicationCode=this.APP_ID,this.jsd._toQueue(e,{alias:t.alias,waitResponse:t.waitResponse||!1,timeout:t.timeout||500})}get cmd(){return this._commands}async requestLogsEvent({previous:e}){const t=this.cmd.requestLogsEvents(e);return await this.send(t,{alias:"requestLogsEvents"})}async requestLogs(){if(["fetching","more"].includes(this._logs.status))throw new Error("Already fetching logs");return this._logs.status="fetching",this.requestLogsEvent({previous:!1}),new Promise(e=>{const t=setInterval(()=>{if(this._logs.status==="completed"){clearInterval(t);const s=this._logs.data;e(s)}else this._logs.status==="more"&&(this._logs.status="fetching",this.requestLogsEvent({previous:!0}))},100)})}async requestLogsByDate({since:e,until:t}){const s=c=>{const o=String(c.getMonth()+1).padStart(2,"0"),h=String(c.getDate()).padStart(2,"0"),p=String(c.getHours()).padStart(2,"0"),l=String(c.getMinutes()).padStart(2,"0"),m=String(c.getSeconds()).padStart(2,"0");return`${o}/${h}/${p}/${l}/${m}`},n=s(e),a=s(t),i=this.cmd.requestLogsByDate(n,a);return await this.send(i,{alias:"requestLogsByDate"})}async requestForSendingManifest({fileSizeBytes:e,crc:t}){const s=this.cmd.requestForSendingManifest(e,t);return await this.send(s,{alias:"requestForSendingManifest"})}async sendManifestDataBlock({prevBlockId:e,dataBlock:t}){const s=this.cmd.sendManifestDataBlock(e,t);return await this.send(s,{alias:"sendManifestDataBlock"})}serialMessage(e){switch(e.opcode){case g.responseCmdWrong:this._responseCmdWrong(e);break;case g.responseLineLogEvent:this._responseLineLogEvent(e);break;case g.responseManifestDataBlock:this._responseManifestDataBlock(e);break;case g.responseManifestCompleted:this._responseManifestCompleted(e);break}}emit(e,...t){this.jsd.dispatch(`manifest:${e}`,...t)}_responseCmdWrong(e){const t=parseInt(e.params[0],10),s=e.params.slice(1),n=x(t);this.emit("wrong-cmd",{opcodeName:n,opcode:t,params:s})}_responseLineLogEvent(e){const[...t]=e.params,s=t[0]==="END_LOG";if(s)this._logs.status="completed";else{const a=t.join(",");this._logs.data.push(a),this._logs.status==="fetching"&&(this._logs.status="more")}const n=s?"end":"log";this.emit("log",{type:n,log:t})}_responseManifestDataBlock(e){const[t,s,n]=e.params;this.emit("block",{blockId:parseInt(t,10),indexFile:parseInt(s,10),quantity:parseInt(n,10)})}_responseManifestCompleted(e){const[t]=e.params,s={0:"Success",1:"CRC Error",2:"Transference interrupted",3:"Reset JSD and try again"};this.emit("completed",{result:s[t]||"Unknown Result",resultKey:parseInt(t,10)})}}const S={requestFeatureStatus:100,requestTemporaryLicenseStatus:101,requestSeedData:102,requestLicenseActivation:110,responseCmdWrong:200,responseFeatureStatus:201,responseSeedData:202,responseTemporaryLicenseStatus:203},B=d=>Object.keys(S).find(t=>S[t]===d)||"Unknown";class y{transport;static APP_ID=f.LICENSING;constructor(e){this.transport=e}requestFeatureStatus(e){const t=`${e}`;return this.transport.buildPacket(S.requestFeatureStatus,t,y.APP_ID)}requestTemporaryLicenseStatus(){return this.transport.buildPacket(S.requestTemporaryLicenseStatus,"",y.APP_ID)}requestSeedData(){return this.transport.buildPacket(S.requestSeedData,"",y.APP_ID)}requestLicenseActivation(e){const t=`${e}`;return this.transport.buildPacket(S.requestLicenseActivation,t,y.APP_ID)}}class ${_commands;jsd;APP_ID=f.LICENSING;constructor(e,t){this._commands=new y(t),this.jsd=e}async send(e,t){return this.jsd._lastApplicationCode=this.APP_ID,this.jsd._toQueue(e,{alias:t.alias,waitResponse:t.waitResponse||!1,timeout:t.timeout||500})}get cmd(){return this._commands}async requestFeatureStatus({feature:e}){const t=this.cmd.requestFeatureStatus(e);return this.send(t,{alias:"requestFeatureStatus"})}async requestTemporaryLicenseStatus(){const e=this.cmd.requestTemporaryLicenseStatus();return this.send(e,{alias:"requestTemporaryLicenseStatus"})}async requestSeedData(){const e=this.cmd.requestSeedData();return this.send(e,{alias:"requestSeedData"})}async requestLicenseActivation({license:e}){const t=this.cmd.requestLicenseActivation(e);return this.send(t,{alias:"requestLicenseActivation"})}serialMessage(e){switch(e.opcode){case S.responseCmdWrong:this._responseCmdWrong(e);break;case S.responseFeatureStatus:this._responseFeatureStatus(e);break;case S.responseSeedData:this._responseSeedData(e);break;case S.responseTemporaryLicenseStatus:this._responseTemporaryLicenseStatus(e);break}}emit(e,...t){this.jsd.dispatch(`licensing:${e}`,...t)}_responseCmdWrong(e){const t=parseInt(e.params[0],10),s=e.params.slice(1),n=B(t);this.emit("wrong-cmd",{opcodeName:n,opcode:t,params:s})}_responseFeatureStatus(e){const[t,s]=e.params;this.emit("feature-status",{feature:t,active:s==="1"})}_responseSeedData(e){const[...t]=e.params,s=t.join(","),n=t.map(a=>parseInt(a,10).toString(16).padStart(2,"0")).join(" ");this.emit("seed",{seed:s,hex:n})}_responseTemporaryLicenseStatus(e){const[t,s,n]=e.params,a={0:"Inactive, permanent license",1:"Active",2:"Expired",3:"Blocked up"};this.emit("temporary-license-status",{status:a[t]||"Unknown",remainingDays:parseInt(s,10),daysSinceExpiration:parseInt(n,10)})}}class j{static unescapeBytes(e){const t=[];for(let s=0;s<e.length;s++){const n=e[s];if(n===219){const a=e[s+1];a===220?(t.push(192),s++):a===221?(t.push(219),s++):t.push(n)}else t.push(n)}return t}static parseFrame(e){let t=e;t.length>0&&t[0]===192&&(t=t.slice(1)),t.length>0&&t[t.length-1]===192&&(t=t.slice(0,-1));const s=this.unescapeBytes(t);if(s.length<1)return console.error("Frame too short"),"Frame too short";const n=s[0],a=s[1],i=s.slice(2,-2),c=s[s.length-2],o=s[s.length-1],h=[192,n,a,...i],[p,l]=T.calculate(h);if(p!==c||l!==o)return console.error("CRC mismatch"),"CRC mismatch";if(n===2)return{type:"ACK",id:a};if(n===3)return{type:"NACK",id:a};if(n!==1)return console.warn("Unknown code"),"Unknown code";if(i.length<6)return console.error("JConnect header too short"),"JConnect header too short";const m=i[0]|i[1]<<8,I=i[2]|i[3]<<8,D=i[4]|i[5]<<8,v=i.slice(6),A=String.fromCharCode(...v);return{type:"DATA",opcode:D,appId:I,noBytes:m,params:A?A.split(","):[],id:a,rawAscii:A}}}class W{delimiter;buffer;constructor(e){this.delimiter=e,this.buffer=new Uint8Array(0)}transform(e,t){const s=new Uint8Array(this.buffer.length+e.length);s.set(this.buffer),s.set(e,this.buffer.length),this.buffer=s;let n;for(;(n=this.findDelimiterIndex())!==-1;){const a=this.buffer.slice(0,n);this.buffer=this.buffer.slice(n+this.delimiter.length),t.enqueue(a)}}findDelimiterIndex(){for(let e=0;e<=this.buffer.length-this.delimiter.length;e++){let t=!0;for(let s=0;s<this.delimiter.length;s++)if(this.buffer[e+s]!==this.delimiter[s]){t=!1;break}if(t)return e}return-1}flush(e){this.buffer.length>0&&(e.enqueue(this.buffer),this.buffer=new Uint8Array(0))}}class U extends O.T{_transport;vision;manifest;licensing;_queue=[];_timeoutPacketId=0;_runningQueue=!1;_lastApplicationCode=0;constructor({filters:e=null,config_port:t,no_device:s=1,socket:n=!1,transport:a="rs232"}={}){const i=new Uint8Array([192]),c=new TransformStream(new W(i));if(super({filters:e,config_port:t,no_device:s,socket:n,transformStream:c}),this.__internal__.device.type="jsd",this.__internal__.time.response_general=500,this.__internal__.time.response_engines=500,k.Devices.getCustom(this.typeDevice,s))throw new Error(`Device ${this.typeDevice} ${s} already exists`);k.Devices.add(this),this.#e(),this.getResponseAsUint8Array(),this._transport=a==="rs232"?new N:new b,this.vision=new M(this,this._transport),this.manifest=new R(this,this._transport),this.licensing=new $(this,this._transport)}#e(){const e=["licensing:wrong-cmd","licensing:feature-status","licensing:seed","licensing:temporary-license-status","manifest:wrong-cmd","manifest:log","manifest:block","manifest:completed","vision:wrong-cmd","vision:machine-status","vision:channels-progress","vision:channels","vision:channel-status","vision:status-selection","vision:dispense-status","vision:selection-dispense-config","vision:channels-linked-to-selection","vision:machine-id","vision:current-temperature","vision:alarm-faults-events","vision:time-waiting-for-product-collection","vision:collect","vision:reset-sold-out-channels","vision:time-waiting-after-product-collection","vision:jsd-version","vision:active-faults","vision:jsd-dispensing-queue","vision:special-characteristics-selection","vision:perishable-products-config","vision:active-faults-list","vision:jsd-status-reset","vision:extended-dispense-status-data","vision:trays-positioning-phototransistors-status","vision:jsd-license-error","serial:jsd-error","serial:jsd-ack","serial:jsd-nack","serial:jsd-data"];for(const t of e)this.serialRegisterAvailableListener(t)}serialSetConnectionConstant(){const e=this._transport?this._transport:new N;let t=255;this._transport&&(t=e.packetId,this._transport._overridePacketId(t+1));const{bytes:s}=u.connection({transport:e,packetId:t});return s}send(e,t){return this.appendToQueue(e,t.alias||"unknown")}onEvent(e,t){super.on(e,t)}offEvent(e,t){super.off(e,t)}onceEvent(e,t){const s=((...n)=>{t(...n),this.offEvent(e,s)});this.onEvent(e,s)}get transport(){return this._transport.name}acknowledge(e){return this._transport.buildAckPacket(e)}ack(e){this.isConnected&&this.send(new Uint8Array(this.acknowledge(e)),{alias:"ACK Response"})}_toQueue(e,t){this._queue.push({packetId:e.packetId,data:e.bytes,alias:t?.alias||"unknown",timeout:t?.timeout||500,resendCount:0}),this._runQueue()}_runQueue(){if(this._queue.length===0||this._runningQueue)return;const e=this._queue[0];this.isConnected&&(this.appendToQueue(new Uint8Array(e.data),e.alias||"unknown"),this._runningQueue=!0,this._timeoutPacketId=setTimeout(()=>{const t=this._queue.findIndex(s=>s.packetId===e.packetId);t!==-1&&(e.resendCount<3?(this._queue[t].resendCount+=1,this._runningQueue=!1,this._runQueue()):(this.dispatch("serial:jsd-error",`No response for packet ID ${e.packetId} after 3 attempts.`),this._queue.splice(t,1),this._runningQueue=!1,this._queue.length>0&&this._runQueue()))},e.timeout))}_dequeue(e){const t=this._queue.findIndex(s=>s.packetId===e);t!==-1&&(this._queue.splice(t,1),this._timeoutPacketId&&(clearTimeout(this._timeoutPacketId),this._timeoutPacketId=0),this._runningQueue=!1,this._queue.length>0&&this._runQueue())}serialMessage(e){const t=Array.from(structuredClone(e));if(t.length===0)return;const s=j.parseFrame(t);if(typeof s=="string")this.dispatch("serial:jsd-error",s);else if(s.type==="ACK")this._queue.findIndex(a=>a.packetId===s.id)!==-1&&this._dequeue(s.id),this.dispatch("serial:jsd-ack",s);else if(s.type==="NACK")this.dispatch("serial:jsd-nack",s);else if(s.type==="DATA"){this.ack(s.id),typeof s.appId>"u"&&(s.appId=this._lastApplicationCode);const n=s.appId;L(n)&&this.vision.serialMessage(s),w(n)&&this.manifest.serialMessage(s),F(n)&&this.licensing.serialMessage(s),this.dispatch("serial:jsd-data",s)}this.dispatch("serial:message",{raw:e,parsed:s})}}exports.JSD=U;
|