@danidoble/webserial
Version:
WebSerial API wrapper
732 lines (731 loc) • 35.6 kB
JavaScript
var ce = Object.defineProperty;
var D = (c) => {
throw TypeError(c);
};
var pe = (c, p, n) => p in c ? ce(c, p, { enumerable: !0, configurable: !0, writable: !0, value: n }) : c[p] = n;
var h = (c, p, n) => pe(c, typeof p != "symbol" ? p + "" : p, n), I = (c, p, n) => p.has(c) || D("Cannot " + n);
var w = (c, p, n) => (I(c, p, "read from private field"), n ? n.call(c) : p.get(c)), y = (c, p, n) => p.has(c) ? D("Cannot add the same private member more than once") : p instanceof WeakSet ? p.add(c) : p.set(c, n), b = (c, p, n, e) => (I(c, p, "write to private field"), e ? e.call(c, n) : p.set(c, n), n), a = (c, p, n) => (I(c, p, "access private method"), n);
import { K as ue, h as x } from "./kernel-BLbpgXHp.js";
import { l as d } from "./relay-Dop4mFk-.js";
var f, _, k, s, E, M, v, S, m, Q, N, F, j, O, U, A, L, T, V, z, W, K, Y, G, H, J, X, Z, g, ee, ne, te, se, ie, re, ae, R, C, oe, le, P, $, B;
class _e extends ue {
constructor({ filters: n = null, config_port: e = null, no_device: t = 1 } = {}) {
super({ filters: n, config_port: e, no_device: t });
y(this, s);
h(this, "__coin_purse", {
available: !0
});
h(this, "__banknote_purse", {
available: !0,
isRecycler: !0,
recycler: {
ict: !0,
banknote: 1
// 0: $20, 1: $50, 2: $100, 3: $200, 4: $500
}
});
h(this, "__sale", {
price: 0,
change: 0,
change_verified: 0,
dispense_all: !0,
last_change: 0,
clear() {
this.price = 0, this.change = 0, this.change_verified = 0, this.dispense_all = !0, this.last_change = 0;
}
});
h(this, "__money_session", {
inserted: 0,
retired: 0,
clear() {
this.inserted = 0, this.retired = 0;
}
});
h(this, "coins", {
tubes: { g50: 0, c50: 0, p1: 0, p2: 0, p5: 0, p10: 0 },
box: { g50: 0, c50: 0, p1: 0, p2: 0, p5: 0, p10: 0 },
totals: { g50: 0, c50: 0, p1: 0, p2: 0, p5: 0, p10: 0 },
total: 0
});
h(this, "banknotes", {
stacker: { p20: 0, p50: 0, p100: 0, p200: 0, p500: 0, p1000: 0 },
recycler: { p20: 0, p50: 0, p100: 0, p200: 0, p500: 0, p1000: 0 },
out: { p20: 0, p50: 0, p100: 0, p200: 0, p500: 0, p1000: 0 },
totals: { p20: 0, p50: 0, p100: 0, p200: 0, p500: 0, p1000: 0 },
total: 0
});
h(this, "card_reader", {
available: !1,
max_pre_credit: 0
});
y(this, f, !1);
y(this, _, 0);
y(this, k, 0);
if (this.__internal__.device.type = "boardroid", x.getCustom(this.typeDevice, t))
throw new Error(`Device ${this.typeDevice} ${t} already exists`);
this.__internal__.serial.config_port.baudRate = 115200, this.__internal__.serial.response.length = 14, this.__internal__.time.response_connection = 600, this.__internal__.time.response_general = 4e3, this.__internal__.time.response_engines = 15e3, this.__internal__.dispense.limit_counter = 15, this.__internal__.dispense.custom_limit_counter = null, this.__internal__.dispense.backup_dispense = {
channel: 1,
second_channel: null,
sensor: !0,
seconds: null
}, a(this, s, E).call(this), a(this, s, M).call(this);
}
get totalInTubes() {
return this.coins.tubes.g50 * 0.5 + this.coins.tubes.c50 * 0.5 + this.coins.tubes.p1 + this.coins.tubes.p2 * 2 + this.coins.tubes.p5 * 5 + this.coins.tubes.p10 * 10;
}
get totalInRecycler() {
return this.banknotes.recycler.p20 * 20 + this.banknotes.recycler.p50 * 50 + this.banknotes.recycler.p100 * 100 + this.banknotes.recycler.p200 * 200 + this.banknotes.recycler.p500 * 500 + this.banknotes.recycler.p1000 * 1e3;
}
get hasRecycler() {
return this.__banknote_purse.available && this.__banknote_purse.isRecycler;
}
set hasRecycler(n) {
this.__banknote_purse.isRecycler = n;
}
get hasICT() {
return this.hasRecycler && this.__banknote_purse.recycler.ict;
}
set hasICT(n) {
this.__banknote_purse.recycler.ict = n;
}
set banknoteICT(n) {
if (![20, 50, 100, 200, 500].includes(n)) throw new Error(`Invalid banknote value: ${n}`);
n = [20, 50, 100, 200, 500].indexOf(n), this.__banknote_purse.recycler.banknote = n;
}
get banknoteICT() {
return [20, 50, 100, 200, 500][this.__banknote_purse.recycler.banknote];
}
get hasCoinPurse() {
return this.__coin_purse.available;
}
set hasCoinPurse(n) {
if (typeof n != "boolean")
throw new Error(`Invalid value: ${n}`);
this.__coin_purse.available = n;
}
set price(n) {
let e = parseFloat(n);
(isNaN(e) || e < 0) && (e = 0), this.__sale.price = e;
}
get price() {
return this.__sale.price;
}
get change() {
return this.__sale.price <= 0 || this.__money_session.inserted <= this.__sale.price ? 0 : this.__money_session.inserted - this.__sale.price;
}
softReload() {
super.softReload(), this.__sale.clear(), this.__money_session.clear();
}
serialMessage(n) {
let e = {
code: n,
name: null,
description: null,
request: null,
no_code: 0
};
const t = (5 + this.deviceNumber).toString(16).padStart(2, "0").toLowerCase();
switch (n[1]) {
case t:
e.request = "connect", e = a(this, s, m).call(this, e);
break;
case "a0":
e.request = "--automatic", e = a(this, s, V).call(this, n, e);
break;
case "b0":
e.request = "--automatic", e = a(this, s, z).call(this, n, e);
break;
case "d0":
e.request = "coin-purse:config", e = a(this, s, W).call(this, n[2], e);
break;
case "d1":
e.request = "banknote-purse:config", e.additional = { scrow: null }, e = a(this, s, K).call(this, n, e);
break;
case "d2":
e.request = "coin-purse:read-tubes", e = a(this, s, Y).call(this, n, e);
break;
case "d3":
e.request = "banknote-purse:read-recycler", e = a(this, s, G).call(this, n, e);
break;
case "d4":
e.request = "banknote-purse:banknote-scrow-status", e = a(this, s, H).call(this, n[2], e);
break;
case "d5":
e.request = "banknote-purse:dispense", e = a(this, s, J).call(this, n, e);
break;
case "d6":
e.request = "coin-purse:dispense", e = a(this, s, X).call(this, n, e);
break;
case "d7":
e.request = "dispense", e = a(this, s, Z).call(this, n[5], e);
break;
case "d8":
e.request = "--automatic", e = a(this, s, g).call(this, n[13], e);
break;
case "d9":
e.request = "status:temperature", e = a(this, s, ee).call(this, n, e);
break;
case "da":
e.request = "status:relay", e = a(this, s, ne).call(this, n[2], e);
break;
case "db":
e.request = "banknote-purse:save-memory", e.no_code = 18, e.name = "Bill purse memory saved?", e.description = "The memory of bill purse was saved successfully?", this.dispatch("banknote-purse:save-memory", { message: e });
break;
case "dc":
e.request = "coin-purse:read-memory", e.no_code = 19, e.name = "Coin purse memory read?", e.description = "The memory of coin purse was read successfully?", this.dispatch("banknote-purse:read-memory", { message: e });
break;
case "dd":
e.request = "card-reader", a(this, s, te).call(this, n, e);
break;
default:
e.request = "--unknown", e.name = "Response unrecognized", e.description = "The response of application was received, but dont identify with any of current parameters", e.no_code = 400, this.dispatch("unknown", e);
break;
}
this.dispatch("serial:message", e);
}
serialSetConnectionConstant(n = 1) {
return d.connection({ channel: n });
}
async coinPurseConfigure({ enable: n = !1, high: e = "FF", low: t = "FF" } = {}) {
if (!this.__coin_purse.available) throw new Error("Coin purse not available");
return e = this.hexToDec(e), t = this.hexToDec(t), await this.appendToQueue(
d.coinPurseConfiguration({ enable: n, high: e, low: t }),
"coin-purse:config"
);
}
async coinPurseEnable() {
await this.coinPurseConfigure({ enable: !0 });
}
async coinPurseDisable() {
await this.coinPurseConfigure({ enable: !1 });
}
async coinPurseDispense({ $_50c: n = 0, $_1: e = 0, $_2: t = 0, $_5: i = 0, $_10: r = 0 } = {}) {
if (!this.__coin_purse.available) throw new Error("Coin purse not available");
return await this.appendToQueue(
d.coinPurseDispense({
$50c: n,
$1: e,
$2: t,
$5: i,
$10: r
}),
"coin-purse:dispense"
);
}
async coinPurseReadTubes() {
return await this.appendToQueue(d.coinPurseReadTubes(), "coin-purse:read-tubes");
}
async banknotePurseConfigure({ enable: n = !1, scrow: e = !1 } = {}) {
if (!this.__banknote_purse.available) throw new Error("Banknote purse not available");
let t;
return a(this, s, v).call(this) ? t = a(this, s, se).call(this, { enable: n, scrow: e }) : t = a(this, s, ie).call(this, { enable: n, scrow: e }), await this.appendToQueue(t, "banknote-purse:config");
}
async banknotePurseDispense({ $_20: n = 0, $_50: e = 0, $_100: t = 0, $_200: i = 0, $_500: r = 0, $_1000: o = 0 } = {}) {
if (!this.__banknote_purse.available) throw new Error("Banknote purse not available");
if (!this.__banknote_purse.isRecycler) throw new Error("Banknote purse is not recycler");
let l;
if (a(this, s, v).call(this)) {
const u = [n, e, t, i, r];
l = a(this, s, re).call(this, u[this.__banknote_purse.recycler.banknote]);
} else
l = a(this, s, ae).call(this, { $_20: n, $_50: e, $_100: t, $_200: i, $_500: r, $_1000: o });
await this.appendToQueue(l, "banknote-purse:dispense");
}
async banknotePurseEnable({ scrow: n = !1 }) {
return await this.banknotePurseConfigure({ enable: !0, scrow: n });
}
async banknotePurseDisable() {
return await this.banknotePurseConfigure({ enable: !1 });
}
async banknotePurseAcceptInScrow() {
if (!this.__banknote_purse.available) throw new Error("Banknote purse not available");
return await this.appendToQueue(
d.banknotePurseAcceptInScrow(),
"banknote-purse:banknote-scrow-status"
);
}
async banknotePurseRejectInScrow() {
if (!this.__banknote_purse.available) throw new Error("Banknote purse not available");
return await this.appendToQueue(
d.banknotePurseRejectInScrow(),
"banknote-purse:banknote-scrow-status"
);
}
async banknotePurseSaveMemory({
channel: n = null,
$_20: e = null,
$_50: t = null,
$_100: i = null,
$_200: r = null,
$_500: o = null,
$_1000: l = null
} = {}) {
if (!this.__banknote_purse.available) throw new Error("Banknote purse not available");
return await this.appendToQueue(
d.banknotePurseSaveMemory({
channel: n,
$20: e,
$50: t,
$100: i,
$200: r,
$500: o,
$1000: l
}),
"banknote-purse:save-memory"
);
}
async banknotePurseReadRecycler() {
if (!this.__banknote_purse.available) throw new Error("Banknote purse not available");
if (!this.__banknote_purse.isRecycler) throw new Error("Banknote purse is not recycler");
return await this.appendToQueue(d.banknotePurseReadRecycler(), "banknote-purse:read-recycler");
}
async cardReaderDisable() {
if (!this.card_reader.available) throw new Error("Card reader not available");
return await this.appendToQueue(d.cardReaderDisable(), "card-reader:disable");
}
async cardReaderDispense({ channel: n = 1, second_channel: e = null, sensor: t = !0, seconds: i = null, price: r = 0 } = {}) {
if (!this.card_reader.available) throw new Error("Card reader not available");
if ((isNaN(this.card_reader.max_pre_credit) || this.card_reader.max_pre_credit === 0) && (this.card_reader.max_pre_credit = r), isNaN(r) || r <= 0) throw new Error("Price must be greater than 0");
if (r > this.card_reader.max_pre_credit) throw new Error("Price is greater than pre-credit configured");
if (!t && (i === null || i <= 0 || i > 40))
throw new Error("Invalid time to dispense without sensor, must be between 0.1 and 40.0 seconds");
return this.appendToQueue(
d.cardReaderDispense({
selection: n,
second_selection: e,
sensor: t,
seconds: i,
price: r
}),
"card-reader:dispense"
);
}
async paymentPursesDisable({ coin: n = !0, banknote: e = !0, cardReader: t = !1 } = {}) {
n && this.__coin_purse.available && await this.coinPurseDisable(), e && this.__banknote_purse.available && await this.banknotePurseDisable(), t && this.card_reader.available && await this.cardReaderDisable();
}
async paymentPursesEnable({ coin: n = !0, banknote: e = !0, scrowBanknote: t = !1 } = {}) {
n && this.__coin_purse.available && await this.coinPurseEnable(), e && this.__banknote_purse.available && await this.banknotePurseEnable({ scrow: t });
}
async coolingRelayConfigure({ enable: n = !1 } = {}) {
return await this.appendToQueue(d.coolingRelayConfigure({ enable: n }), "status:relay");
}
async coolingRelayEnable() {
return await this.coolingRelayConfigure({ enable: !0 });
}
async coolingRelayDisable() {
return await this.coolingRelayConfigure({ enable: !1 });
}
async readTemperature() {
return await this.appendToQueue(d.readTemperature(), "status:temperature");
}
/**
* Dispense a product from the machine
* @param {number|string} selection
* @param {null|number|string} second_selection
* @param {boolean} sensor
* @param {null|number} seconds
* @param {boolean} retry
* @return {Promise<unknown>}
*/
async dispense({ selection: n = 1, second_selection: e = null, sensor: t = !0, seconds: i = null, retry: r = !0 } = {}) {
if (n = parseInt(n), isNaN(n) || n < 1 || n > 80) throw new Error("Invalid channel number");
if (e !== null && (e < 1 || e > 80 || e === n))
throw new Error("Invalid second channel number");
if (!t && (i === null || i <= 0 || i > 40))
throw new Error("Invalid time to dispense without sensor, must be between 0.1 and 40.0 seconds");
r && (this.__internal__.dispense.backup_dispense = {
selection: n,
second_selection: e,
sensor: t,
seconds: i
});
const o = d.dispense({
selection: n,
second_selection: e,
sensor: t,
seconds: i
});
t || (i || (i = 1.5), this.__internal__.dispense.custom_limit_counter = i + 0.2);
let l = await this.internalDispense(o);
return !l.dispensed && r && (l = await this.internalDispense(o)), this.__internal__.dispense.custom_limit_counter = null, l;
}
async testEngines({ singleEngine: n = !1 } = {}) {
if (this.isDispensing) throw new Error("Another dispensing process is running");
if (w(this, f)) throw new Error("Another test is running");
a(this, s, R).call(this), b(this, f, !0);
const e = [];
a(this, s, C).call(this);
for (let t = 1; t <= 80; t++) {
const i = await this.dispense({
selection: t,
second_selection: n ? null : t + 1,
sensor: !1,
seconds: 0.4,
retry: !1
});
e.push(i), b(this, _, t), a(this, s, C).call(this), n || t++;
}
b(this, _, 80), a(this, s, C).call(this, { dispensed: e }), a(this, s, R).call(this);
}
async sendCustomCode({ code: n = [] } = {}) {
if (n.length === 0) throw new Error("Invalid code");
return await this.appendToQueue(d.customCode(n), "custom");
}
hasToReturnChange(n = 0) {
let e = n;
return e <= 0 ? !0 : (e = a(this, s, P).call(this, e).pending, e = a(this, s, $).call(this, e).pending, !(e > 0));
}
async returnChange() {
return await a(this, s, B).call(this);
}
async returnInsertedMoney() {
return this.__money_session.inserted <= 0 ? !1 : await a(this, s, B).call(this, this.__money_session.inserted);
}
async serialCorruptMessage(n, e) {
this.dispatch("corrupt:message", { data: n, message: e });
}
}
f = new WeakMap(), _ = new WeakMap(), k = new WeakMap(), s = new WeakSet(), E = function() {
const n = [
"banknote-purse:banknote-scrow-status",
"banknote-purse:config",
"banknote-purse:event-banknote",
"banknote-purse:read-memory",
"banknote-purse:recycler",
"banknote-purse:save-memory",
"card-reader:event",
"change:pending",
"change:dispense",
"coin-purse:coin-event",
"coin-purse:config",
"coin-purse:reject-lever",
"coin-purse:reset",
"coin-purse:tubes",
"percentage:test",
"run:default-load",
"session:money-dispensed",
"session:money-request",
"event:door",
"door:event",
"status:relay",
"status:temperature",
"money:inserted"
];
for (const e of n)
this.serialRegisterAvailableListener(e);
}, M = function() {
x.add(this);
}, v = function() {
return this.__banknote_purse.isRecycler && this.__banknote_purse.recycler.ict;
}, S = function() {
return this.hasCoinPurse || this.hasRecycler;
}, m = function(n) {
return n.name = "Connection with the serial device completed.", n.description = "Your connection with the serial device was successfully completed.", n.no_code = 1, this.dispatch("run:default-load", {}), n;
}, Q = function(n) {
const e = {
g50: { value: 0.5, name: "50 pennies (the big one)" },
c0: { value: 0.5, name: "50 pennies (the little one)" },
p1: { value: 1, name: "1 peso" },
p2: { value: 2, name: "2 pesos" },
p5: { value: 5, name: "5 pesos" },
p10: { value: 10, name: "10 pesos" },
p20: { value: 20, name: "20 pesos" }
};
return e[n] ? e[n] : !1;
}, N = function(n) {
const e = {
g50: ["40", "50", "60", "70", "90"],
c50: ["41", "51", "61", "71", "91"],
p1: ["42", "52", "62", "72", "92"],
p2: ["43", "53", "63", "73", "93"],
p5: ["44", "54", "64", "74", "94"],
p10: ["45", "55", "65", "75", "95"],
p20: ["47", "57", "67", "77", "97"]
};
let t = null;
for (let r in e)
if (e[r].includes(n)) {
t = r;
break;
}
return t ? [{
g50: "50 pennies (the big one)",
c0: "50 pennies (the little one)",
p1: "1 peso",
p2: "2 pesos",
p5: "5 pesos",
p10: "10 pesos",
p20: "20 pesos"
}[t], t] : [`Undefined value: ¿${n}?`, null];
}, F = function(n) {
return ["g50", "c50", "p1", "p2", "p5", "p10", "p20"].includes(n);
}, j = function(n) {
const e = {
p20: ["80", "90", "a0", "b0"],
p50: ["81", "91", "a1", "b1"],
p100: ["82", "92", "a2", "b2"],
p200: ["83", "93", "a3", "b3"],
p500: ["84", "94", "a4", "b4"],
p1000: ["85", "95", "a5", "b5"]
};
let t = null;
for (let r in e)
if (e[r].includes(n)) {
t = r;
break;
}
return t ? [{
p20: "20 pesos",
p50: "50 pesos",
p100: "100 pesos",
p200: "200 pesos",
p500: "500 pesos",
p1000: "1000 pesos"
}[t], t] : [`Undefined value: ¿${n}?`, null];
}, O = function(n) {
const e = {
p20: { value: 20, name: "20 pesos" },
p50: { value: 50, name: "50 pesos" },
p100: { value: 100, name: "100 pesos" },
p200: { value: 200, name: "200 pesos" },
p500: { value: 500, name: "500 pesos" },
p1000: { value: 1e3, name: "1000 pesos" }
};
return e[n] ? e[n] : !1;
}, U = function(n) {
return ["p20", "p50", "p100", "p200", "p500", "p1000"].includes(n);
}, A = function(n) {
return ["r20", "r50", "r100"].includes(n);
}, L = function() {
return ["r20", "r50", "r100", "r200", "r500"][this.__banknote_purse.recycler.banknote];
}, T = function(n, e, t) {
if (!n) return;
let i = !0;
if (a(this, s, F).call(this, n) && t === "coin") {
if (typeof this.coins.tubes[n] > "u") return;
e === "tube" ? this.coins.tubes[n] += 1 : e === "box" && (this.coins.box[n] += 1);
let r = 0;
["g50", "c50"].includes(n) ? r = 0.5 : r += parseInt(n.slice(1)), this.coins.totals[n] += r, this.__money_session.inserted += r, this.coins.total += r;
const o = a(this, s, Q).call(this, n);
o && this.dispatch("money:inserted", {
type: "coin",
money: o,
// {value:number,name:string}
where: e
});
} else if (a(this, s, U).call(this, n) && t === "banknote") {
if (typeof this.banknotes.recycler[n] > "u") return;
e === "recycler" ? this.banknotes.recycler[n] += 1 : e === "stacker" && (this.banknotes.stacker[n] += 1);
let r = parseInt(n.slice(1));
this.banknotes.totals[n] += r, this.__money_session.inserted += r, this.banknotes.total += r;
const o = a(this, s, O).call(this, n);
o && this.dispatch("money:inserted", {
type: "banknote",
money: o,
// {value:number,name:string}
where: e
});
} else if (a(this, s, A).call(this, n) && e === "out" && t === "banknote") {
if (typeof this.banknotes.out[n.replace("r", "p")] > "u") return;
this.banknotes.out[n.replace("r", "p")] += 1;
let r = parseInt(n.slice(1));
this.__money_session.retired += r, this.banknotes.recycler[n.replace("r", "p")] -= 1, this.banknotes.total -= r, i = !1, this.dispatch("session:money-dispensed", { type_money: n, retired: r, finish: !1, type: "banknotes" });
}
i && this.dispatch("session:money-request", {});
}, V = function(n, e) {
const t = parseInt(n[2], 16);
return e.name = "Coin Inserted", e.no_code = 2, e.additional = { where: null, coin: null }, t === 1 ? (e.name = "Lever pressed", e.description = "Reject lever", e.no_code = 100, this.dispatch("coin-purse:reject-lever", {})) : t === 2 ? (e.name = "Reset coin purse", e.description = "The configuration of coin purse was reset", e.no_code = 101, this.dispatch("coin-purse:reset", {})) : t >= 64 && t <= 79 ? (e.name = "Coin inserted in profit box", e.additional.where = "box") : t >= 80 && t <= 95 ? (e.name = "Coin inserted in tube", e.additional.where = "tube") : t >= 96 && t <= 111 ? (e.name = "Unused coin", e.description = "Something come from coin changer but in MDB Docs is unused", e.additional.where = "unused") : t >= 112 && t <= 127 ? (e.name = "Coin rejected", e.additional.where = "rejected") : t >= 144 && t <= 159 ? (e.name = "Coin dispensed", e.additional.where = "out", e.description = `Undefined value: ¿${n[2]}?`) : (e.name = "Coin inserted", e.description = "Undefined status. Without information of this", e.no_code = 400), t === 1 || t === 2 || t >= 160 || t >= 128 && t <= 143 || ([e.description, e.additional.coin] = a(this, s, N).call(this, n[2]), e.no_code = 38 + t, a(this, s, T).call(this, e.additional.coin, e.additional.where, "coin"), ["tube", "out"].includes(e.additional.where) && this.dispatch("coin-purse:tubes", this.coins.tubes), this.dispatch("coin-purse:coin-event", this.coins)), e;
}, z = function(n, e) {
const t = parseInt(n[2], 16);
return e.name = "Banknote Inserted", e.no_code = 2, e.additional = { where: null, banknote: null }, t === 42 ? (e.name = "Banknote dispensed", e.description = "Banknote dispensed by request.", e.additional.banknote = a(this, s, L).call(this), e.additional.where = "out", e.no_code = 200) : t >= 128 && t <= 143 ? (e.name = "Banknote inserted", e.additional.where = "stacker") : t >= 144 && t <= 159 ? (e.name = "Banknote inserted in pre stacker", e.additional.where = "tmp") : t >= 160 && t <= 175 ? (e.name = "Banknote rejected", e.additional.where = "nothing") : t >= 176 && t <= 191 && (e.name = "Banknote inserted", e.additional.where = "recycler"), t >= 128 && t <= 191 && ([e.description, e.additional.banknote] = a(this, s, j).call(this, n[2]), e.no_code = 74 + t), a(this, s, T).call(this, e.additional.banknote, e.additional.where, "banknote"), this.dispatch("banknote-purse:event-banknote", this.banknotes), e;
}, W = function(n, e) {
const t = parseInt(n, 16);
return t === 1 ? (e.name = "Coin purse enabled", e.description = "Configuration complete, enabled", e.no_code = 3) : t === 0 ? (e.name = "Coin purse disabled", e.description = "Disabled by system request", e.no_code = 4) : (e.name = "Status unknown", e.description = "The response of coin purse doesn't identify successfully", e.no_code = 400), this.dispatch("coin-purse:config", { enabled: t === 1 }), e;
}, K = function(n, e) {
const t = parseInt(n[2], 16), i = parseInt(n[3], 16);
return t === 0 ? (e.name = "Bill purse disabled", e.description = "Configuration complete, disabled") : t === 1 && (e.name = "Bill purse enabled", e.description = "Configuration complete, enabled"), i === 0 ? e.additional.scrow = "Scrow disabled, banknote received automatic" : i === 1 && (e.additional.scrow = "Scrow enabled, require manual action"), e.no_code = 5, this.dispatch("banknote-purse:config", { enabled: t === 1, scrow: i === 1 }), e;
}, Y = function(n, e) {
e.no_code = 6;
const [t, i, r, o, l, u] = [
parseInt(n[2], 16),
parseInt(n[3], 16),
parseInt(n[4], 16),
parseInt(n[5], 16),
parseInt(n[6], 16),
parseInt(n[7], 16)
];
return e.additional = {
coins: { g50: t, c50: i, p1: r, p2: o, p5: l, p10: u }
}, this.coins.tubes.g50 = t, this.coins.tubes.c50 = i, this.coins.tubes.p1 = r, this.coins.tubes.p2 = o, this.coins.tubes.p5 = l, this.coins.tubes.p10 = u, this.coins.totals.g50 = (this.coins.box.g50 + t) * 0.5, this.coins.totals.c50 = (this.coins.box.c50 + i) * 0.5, this.coins.totals.p1 = this.coins.box.p1 + r, this.coins.totals.p2 = (this.coins.box.p2 + o) * 2, this.coins.totals.p5 = (this.coins.box.p5 + l) * 5, this.coins.totals.p10 = (this.coins.box.p10 + u) * 10, this.coins.total = this.coins.totals.g50 + this.coins.totals.c50 + this.coins.totals.p1 + this.coins.totals.p2 + this.coins.totals.p5 + this.coins.totals.p10, e.name = "Read tubes", e.description = "Quantity of coins approximated", this.dispatch("coin-purse:tubes", this.coins.tubes), e;
}, G = function(n, e) {
e.no_code = 7;
const [t, i, r, o, l, u] = [
parseInt(n[2], 16),
parseInt(n[3], 16),
parseInt(n[4], 16),
parseInt(n[5], 16),
parseInt(n[6], 16),
parseInt(n[7], 16)
];
return e.additional = {
banknotes: { b20: t, b50: i, b100: r, b200: o, b500: l, b1000: u }
}, this.banknotes.recycler.p20 = t, this.banknotes.recycler.p50 = i, this.banknotes.recycler.p100 = r, this.banknotes.recycler.p200 = o, this.banknotes.recycler.p500 = l, this.banknotes.recycler.p1000 = u, this.banknotes.totals.p20 = (this.banknotes.stacker.p20 + t) * 20, this.banknotes.totals.p50 = (this.banknotes.stacker.p50 + i) * 50, this.banknotes.totals.p100 = (this.banknotes.stacker.p100 + r) * 100, this.banknotes.totals.p200 = (this.banknotes.stacker.p200 + o) * 200, this.banknotes.totals.p500 = (this.banknotes.stacker.p500 + l) * 500, this.banknotes.totals.p1000 = (this.banknotes.stacker.p1000 + u) * 1e3, this.banknotes.total = this.banknotes.totals.p20 + this.banknotes.totals.p50 + this.banknotes.totals.p100 + this.banknotes.totals.p200 + this.banknotes.totals.p500 + this.banknotes.totals.p1000, e.name = "Read recycler", e.description = "Quantity of banknotes approximated", this.dispatch("banknote-purse:recycler", this.banknotes.recycler), e;
}, H = function(n, e) {
const t = parseInt(n, 16);
return t === 1 ? e.name = "Banknote accepted" : t === 0 ? e.name = "Banknote rejected" : e.name = "Unknown status banknote", e.no_code = 8, this.dispatch("banknote-purse:banknote-scrow-status", { status: t === 1 }), e;
}, J = function(n, e) {
const [t, i, r, o, l, u] = [
parseInt(n[2], 16),
parseInt(n[3], 16),
parseInt(n[4], 16),
parseInt(n[5], 16),
parseInt(n[6], 16),
parseInt(n[7], 16)
], q = t * 20 + i * 50 + r * 100 + o * 200 + l * 500 + u * 1e3;
return e.name = "Banknotes dispensed", e.description = q > 0 ? "Banknotes dispensed by request" : "No banknotes dispensed, recycler empty", e.no_code = 9, e.additional = {
banknotes: { b20: t, b50: i, b100: r, b200: o, b500: l, b1000: u },
total_dispensed: q
}, this.dispatch("session:money-dispensed", {
type_money: null,
retired: null,
finish: !1,
type: "banknotes",
data: e
}), e;
}, X = function(n, e) {
return e.name = "Coins dispensed", e.no_code = 10, e.description = "Coins dispensed by request", isNaN(this.__sale.last_change) && (this.__sale.last_change = 0), this.__money_session.retired += this.__sale.last_change, this.dispatchAsync(
"session:money-dispensed",
{
type_money: null,
retired: null,
finish: !1,
type: "coins"
},
500
), e;
}, Z = function(n, e) {
const t = parseInt(n, 16);
return t === 1 ? (e.name = "Product not delivered", e.description = "The product requested wasn't delivered", e.no_code = 11, this.__internal__.dispense.status = !1) : t === 0 ? (e.name = "Product delivered", e.description = "The product requested was delivered", e.no_code = 12, this.__internal__.dispense.status = !0) : (e.name = "Unknown status product", e.description = "The response of product doesn't identify successfully", e.no_code = 400, this.__internal__.dispense.status = !1), this.dispatch("dispensed", {}), e;
}, g = function(n, e) {
let t = "closed";
return n === "db" ? (e.name = "Door closed", e.no_code = 13) : n === "dc" ? (e.name = "Door open", e.no_code = 14, t = "open") : (e.name = "Unknown status door", e.description = "The response of door doesn't identify successfully", e.no_code = 400, t = "unknown"), this.__internal__.device.door_open = t === "open", this.dispatch("event:door", { open: t === "open" }), this.dispatch("door:event", { open: t === "open" }), e;
}, ee = function(n, e) {
const t = parseInt(n[2], 16) * 255, i = parseInt(n[3], 16), r = (t + i) * 0.1;
return e.no_code = 15, e.name = "Temperature status", e.description = `Temperature: ${r}`, e.additional = {
high: t,
low: i,
temperature: parseFloat(r.toString())
}, this.dispatch("status:temperature", e.additional), e;
}, ne = function(n, e) {
const t = parseInt(n, 16);
let i = "unknown";
return t === 1 ? (e.name = "Relay on", e.description = "Relay on", e.no_code = 16, i = "on") : t === 0 ? (e.name = "Relay off", e.description = "Relay off", e.no_code = 17, i = "off") : (e.name = "Status unknown", e.description = "Status unknown", e.no_code = 400), this.dispatch("status:relay", { enabled: i === "on" }), e;
}, te = function(n, e) {
const t = parseInt(n[2], 16);
if (e.no_code = 20 + t, e.name = "Status unknown", e.description = "The status of card reader does not identified correctly", t === 0)
e.request += ":disable", e.name = "Card reader disabled", e.description = "Card reader device was disabled successfully";
else if (t === 1 || t === 2)
e.request += ":dispense", e.name = "Card reader enabled", e.description = "Card reader device is now enabled";
else if (t === 3)
e.request += ":pre-authorize", e.name = "Pre-authorized credit", e.description = "The pre credit was authorized successfully";
else if (t === 4)
e.request += ":cancel", e.name = "Cancellation in progress", e.description = "Cancellation request done successfully";
else if (t === 5)
e.request += ":sell", e.name = "Sell approved", e.description = "Sell approved, starting dispense product";
else if (t === 6)
e.request += ":sell", e.name = "Sell denied", e.description = "This sell was denied, try again";
else if (t === 7)
e.request += ":end", e.name = "Session ended", e.description = "The session ended";
else if (t === 8)
e.request += ":cancel", e.name = "Cancelled", e.description = "Cancellation complete";
else if (t === 10) {
const i = parseInt(n[8], 16);
i === 1 ? (e.no_code = 30, e.name = "product not dispensed", e.description = "The product requested wasn't delivered") : i === 0 ? (e.no_code = 31, e.name = "product dispensed", e.description = "The product requested was delivered") : (e.name = "finished-unknown", e.no_code = 400);
} else
e.no_code = 400;
return this.dispatch("card-reader:event", e), e;
}, se = function({ enable: n = !1, scrow: e = !1 } = {}) {
return d.banknotePurseICTConfigure({ enable: n, scrow: e });
}, ie = function({ enable: n = !1, scrow: e = !1 } = {}) {
return d.banknotePurseOtherConfigure({ enable: n, scrow: e });
}, re = function(n = 1) {
if (n < 1) throw new Error("No banknotes to dispense");
const e = [20, 50, 100, 200, 500][this.__banknote_purse.recycler.banknote];
return d.banknotePurseICTDispense({ quantity: n, denomination: e });
}, ae = function({ $_20: n = 0, $_50: e = 0, $_100: t = 0, $_200: i = 0, $_500: r = 0, $_1000: o = 0 } = {}) {
return d.banknotePurseOtherDispense({
$20: n,
$50: e,
$100: t,
$200: i,
$500: r,
$1000: o
});
}, R = function() {
b(this, f, !1), b(this, _, 0), b(this, k, 0);
}, /**
*
* @param {null|object} dispensed
* @param {number} limit
*/
C = function({ dispensed: n = null, limit: e = 80 } = {}) {
b(this, k, Math.round(w(this, _) * 100 / e)), this.dispatch("percentage:test", { percentage: w(this, k), dispensed: n });
}, oe = function(n) {
const e = ["20", "50", "100", "200", "500"], t = this.__banknote_purse.recycler.banknote, i = "$_" + e[t], r = parseInt(e[t]), o = this.banknotes.recycler[`p${e[t]}`], l = Math.min(Math.floor(n / r), o), u = {
banknotes: { $_20: 0, $_50: 0, $_100: 0, $_200: 0, $_500: 0, $_1000: 0 },
pending: n,
will_dispense: l > 0
};
return this.totalInRecycler === 0 || l < 1 || n === 0 || (u.banknotes[i] = l, u.pending = parseFloat((n - l * r).toFixed(2))), u;
}, le = function(n) {
const e = {
banknotes: { $_20: 0, $_50: 0, $_100: 0, $_200: 0, $_500: 0, $_1000: 0 },
pending: n,
will_dispense: !1
};
if (this.totalInRecycler === 0 || n === 0) return e;
const t = (i, r) => {
if (this.banknotes.recycler[r] > 0) {
const o = Math.floor(e.pending / i), l = Math.min(o, this.banknotes.recycler[r]);
e.banknotes[`$_${i}`] = l, e.pending = parseFloat((e.pending - l * i).toFixed(2));
}
};
return t(1e3, "p1000"), t(500, "p500"), t(200, "p200"), t(100, "p100"), t(50, "p50"), t(20, "p20"), e.will_dispense = Object.values(e.banknotes).some((i) => i > 0), e;
}, P = function(n) {
return this.hasRecycler ? a(this, s, v).call(this) ? a(this, s, oe).call(this, n) : a(this, s, le).call(this, n) : {
banknotes: { $_20: 0, $_50: 0, $_100: 0, $_200: 0, $_500: 0, $_1000: 0 },
pending: n,
will_dispense: !1
};
}, $ = function(n) {
const e = {
coins: { $_50c: 0, $_1: 0, $_2: 0, $_5: 0, $_10: 0 },
pending: n,
will_dispense: !1
};
if (!this.hasCoinPurse || n <= 0 || this.totalInTubes === 0) return e;
const t = (i, r, o = null) => {
if (this.coins.tubes[r] > 0) {
o === null && (o = "$_" + i);
const l = Math.floor(e.pending / i), u = Math.min(l, this.coins.tubes[r]);
e.coins[o] = u, e.pending = parseFloat((e.pending - u * i).toFixed(2));
}
};
return t(10, "p10"), t(5, "p5"), t(2, "p2"), t(1, "p1"), t(0.5, "g50", "$_50c"), e.will_dispense = Object.values(e.coins).some((i) => i > 0), e;
}, B = async function(n = null) {
if (!a(this, s, S).call(this)) throw new Error("Change not available");
let e = this.change, t = this.change;
if (n !== null && (e = n, t = n), t <= 0) return !1;
const i = a(this, s, P).call(this, t);
t = i.pending;
const r = a(this, s, $).call(this, t);
return t = r.pending, t > 0 && this.dispatch("change:pending", { pending: t }), this.dispatch("change:dispense", {
recycler: i.banknotes,
coins: r.coins,
pending: t,
delivery: e - t
}), t === e ? !1 : (i.will_dispense && await this.banknotePurseDispense(i.banknotes), r.will_dispense && await this.coinPurseDispense(r.coins), !0);
};
export {
_e as Boardroid
};