Index: frontend/node_modules/bonjour-service/dist/index.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+import Browser, { BrowserConfig } from './lib/browser';
+import Service, { ServiceConfig, ServiceReferer } from './lib/service';
+export declare class Bonjour {
+    private server;
+    private registry;
+    constructor(opts?: Partial<ServiceConfig>, errorCallback?: Function | undefined);
+    publish(opts: ServiceConfig): Service;
+    unpublishAll(callback?: CallableFunction | undefined): void;
+    find(opts?: BrowserConfig | null, onup?: (service: Service) => void): Browser;
+    findOne(opts?: BrowserConfig | null, timeout?: number, callback?: CallableFunction): Browser;
+    destroy(callback?: CallableFunction): void;
+}
+export { Service, ServiceReferer, ServiceConfig, Browser, BrowserConfig };
+export default Bonjour;
Index: frontend/node_modules/bonjour-service/dist/index.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,51 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Browser = exports.Service = exports.Bonjour = void 0;
+const registry_1 = __importDefault(require("./lib/registry"));
+const mdns_server_1 = __importDefault(require("./lib/mdns-server"));
+const browser_1 = __importDefault(require("./lib/browser"));
+exports.Browser = browser_1.default;
+const service_1 = __importDefault(require("./lib/service"));
+exports.Service = service_1.default;
+class Bonjour {
+    constructor(opts = {}, errorCallback) {
+        this.server = new mdns_server_1.default(opts, errorCallback);
+        this.registry = new registry_1.default(this.server);
+    }
+    publish(opts) {
+        return this.registry.publish(opts);
+    }
+    unpublishAll(callback) {
+        return this.registry.unpublishAll(callback);
+    }
+    find(opts = null, onup) {
+        return new browser_1.default(this.server.mdns, opts, onup);
+    }
+    findOne(opts = null, timeout = 10000, callback) {
+        const browser = new browser_1.default(this.server.mdns, opts);
+        var timer;
+        browser.once('up', (service) => {
+            if (timer !== undefined)
+                clearTimeout(timer);
+            browser.stop();
+            if (callback)
+                callback(service);
+        });
+        timer = setTimeout(() => {
+            browser.stop();
+            if (callback)
+                callback(null);
+        }, timeout);
+        return browser;
+    }
+    destroy(callback) {
+        this.registry.destroy();
+        this.server.mdns.destroy(callback);
+    }
+}
+exports.Bonjour = Bonjour;
+exports.default = Bonjour;
+//# sourceMappingURL=index.js.map
Index: frontend/node_modules/bonjour-service/dist/index.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,8DAAyE;AACzE,oEAA4E;AAC5E,4DAAwE;AA+EvB,kBA/E1C,iBAAO,CA+E0C;AA9ExD,4DAAwE;AA8E/D,kBA9EF,iBAAO,CA8EE;AA5EhB,MAAa,OAAO;IAUhB,YAAY,OAA+B,EAAE,EAAE,aAAoC;QAC/E,IAAI,CAAC,MAAM,GAAO,IAAI,qBAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;QACjD,IAAI,CAAC,QAAQ,GAAK,IAAI,kBAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC/C,CAAC;IAOM,OAAO,CAAC,IAAmB;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAOM,YAAY,CAAC,QAAuC;QACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC/C,CAAC;IAQM,IAAI,CAAC,OAA6B,IAAI,EAAE,IAAiC;QAC5E,OAAO,IAAI,iBAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACpD,CAAC;IASM,OAAO,CAAC,OAA6B,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,QAA2B;QAC1F,MAAM,OAAO,GAAY,IAAI,iBAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC5D,IAAI,KAAqB,CAAA;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE;YACpC,IAAG,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAA;YAC3C,OAAO,CAAC,IAAI,EAAE,CAAA;YACd,IAAG,QAAQ;gBAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QACF,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACpB,OAAO,CAAC,IAAI,EAAE,CAAA;YACd,IAAG,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC/B,CAAC,EAAE,OAAO,CAAC,CAAA;QACX,OAAO,OAAO,CAAA;IAClB,CAAC;IAMM,OAAO,CAAC,QAA2B;QACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC;CAEJ;AA1ED,0BA0EC;AAID,kBAAe,OAAO,CAAA"}
Index: frontend/node_modules/bonjour-service/dist/lib/KeyValue.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/KeyValue.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/KeyValue.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+type KeyValue = {
+    [key: string]: any;
+};
+export default KeyValue;
Index: frontend/node_modules/bonjour-service/dist/lib/KeyValue.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/KeyValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/KeyValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=KeyValue.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/KeyValue.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/KeyValue.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/KeyValue.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"KeyValue.js","sourceRoot":"","sources":["../../src/lib/KeyValue.ts"],"names":[],"mappings":""}
Index: frontend/node_modules/bonjour-service/dist/lib/browser.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/browser.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/browser.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,32 @@
+import KeyValue from './KeyValue';
+import { EventEmitter } from 'events';
+import Service from './service';
+export interface BrowserConfig {
+    type: string;
+    name?: string;
+    protocol?: 'tcp' | 'udp';
+    subtypes?: string[];
+    txt?: KeyValue;
+}
+export type BrowserOnUp = (service: Service) => void;
+export declare class Browser extends EventEmitter {
+    private mdns;
+    private onresponse;
+    private serviceMap;
+    private txt;
+    private name?;
+    private txtQuery;
+    private wildcard;
+    private _services;
+    constructor(mdns: any, opts: BrowserConfig | BrowserOnUp | null, onup?: BrowserOnUp);
+    start(): void;
+    stop(): void;
+    update(): void;
+    get services(): Service[];
+    private addService;
+    private updateService;
+    private removeService;
+    private goodbyes;
+    private buildServicesFor;
+}
+export default Browser;
Index: frontend/node_modules/bonjour-service/dist/lib/browser.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/browser.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/browser.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,179 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Browser = void 0;
+const dns_txt_1 = __importDefault(require("./dns-txt"));
+const dns_equal_1 = __importDefault(require("./utils/dns-equal"));
+const events_1 = require("events");
+const service_types_1 = require("./service-types");
+const filter_service_1 = __importDefault(require("./utils/filter-service"));
+const filter_txt_1 = __importDefault(require("./utils/filter-txt"));
+const equal_txt_1 = __importDefault(require("./utils/equal-txt"));
+const TLD = '.local';
+const WILDCARD = '_services._dns-sd._udp' + TLD;
+class Browser extends events_1.EventEmitter {
+    constructor(mdns, opts, onup) {
+        super();
+        this.onresponse = undefined;
+        this.serviceMap = {};
+        this.wildcard = false;
+        this._services = [];
+        if (typeof opts === 'function')
+            return new Browser(mdns, null, opts);
+        this.mdns = mdns;
+        this.txt = new dns_txt_1.default(opts !== null && opts.txt != null ? opts.txt : undefined);
+        if (opts === null || opts.type === undefined) {
+            this.name = WILDCARD;
+            this.wildcard = true;
+        }
+        else {
+            this.name = (0, service_types_1.toString)({ name: opts.type, protocol: opts.protocol || 'tcp' }) + TLD;
+            if (opts.name)
+                this.name = opts.name + '.' + this.name;
+            this.wildcard = false;
+        }
+        if (opts != null && opts.txt !== undefined)
+            this.txtQuery = (0, filter_txt_1.default)(opts.txt);
+        if (onup)
+            this.on('up', onup);
+        this.start();
+    }
+    start() {
+        if (this.onresponse || this.name === undefined)
+            return;
+        var self = this;
+        var nameMap = {};
+        if (!this.wildcard)
+            nameMap[this.name] = true;
+        this.onresponse = (packet, rinfo) => {
+            if (self.wildcard) {
+                packet.answers.forEach((answer) => {
+                    if (answer.type !== 'PTR' || answer.name !== self.name || answer.name in nameMap)
+                        return;
+                    nameMap[answer.data] = true;
+                    self.mdns.query(answer.data, 'PTR');
+                });
+            }
+            Object.keys(nameMap).forEach(function (name) {
+                self.goodbyes(name, packet).forEach(self.removeService.bind(self));
+                var matches = self.buildServicesFor(name, packet, self.txt, rinfo);
+                if (matches.length === 0)
+                    return;
+                matches.forEach((service) => {
+                    if (self.serviceMap[service.fqdn]) {
+                        self.updateService(service);
+                        return;
+                    }
+                    self.addService(service);
+                });
+            });
+        };
+        this.mdns.on('response', this.onresponse);
+        this.update();
+    }
+    stop() {
+        if (!this.onresponse)
+            return;
+        this.mdns.removeListener('response', this.onresponse);
+        this.onresponse = undefined;
+    }
+    update() {
+        this.mdns.query(this.name, 'PTR');
+    }
+    get services() {
+        return this._services;
+    }
+    addService(service) {
+        if ((0, filter_service_1.default)(service, this.txtQuery) === false)
+            return;
+        this._services.push(service);
+        this.serviceMap[service.fqdn] = true;
+        this.emit('up', service);
+    }
+    updateService(service) {
+        var _a;
+        if ((0, equal_txt_1.default)(service.txt, ((_a = this._services.find((s) => (0, dns_equal_1.default)(s.fqdn, service.fqdn))) === null || _a === void 0 ? void 0 : _a.txt) || {}))
+            return;
+        if (!(0, filter_service_1.default)(service, this.txtQuery)) {
+            this.removeService(service.fqdn);
+            return;
+        }
+        this._services = this._services.map(function (s) {
+            if (!(0, dns_equal_1.default)(s.fqdn, service.fqdn))
+                return s;
+            return service;
+        });
+        this.emit('txt-update', service);
+    }
+    removeService(fqdn) {
+        var service, index;
+        this._services.some(function (s, i) {
+            if ((0, dns_equal_1.default)(s.fqdn, fqdn)) {
+                service = s;
+                index = i;
+                return true;
+            }
+        });
+        if (!service || index === undefined)
+            return;
+        this._services.splice(index, 1);
+        delete this.serviceMap[fqdn];
+        this.emit('down', service);
+    }
+    goodbyes(name, packet) {
+        return packet.answers.concat(packet.additionals)
+            .filter((rr) => rr.type === 'PTR' && rr.ttl === 0 && (0, dns_equal_1.default)(rr.name, name))
+            .map((rr) => rr.data);
+    }
+    buildServicesFor(name, packet, txt, referer) {
+        var records = packet.answers.concat(packet.additionals).filter((rr) => rr.ttl > 0);
+        return records
+            .filter((rr) => rr.type === 'PTR' && (0, dns_equal_1.default)(rr.name, name))
+            .map((ptr) => {
+            const service = {
+                addresses: [],
+                subtypes: []
+            };
+            records.filter((rr) => {
+                return (rr.type === 'PTR' && (0, dns_equal_1.default)(rr.data, ptr.data) && rr.name.includes('._sub'));
+            }).forEach((rr) => {
+                const types = (0, service_types_1.toType)(rr.name);
+                service.subtypes.push(types.subtype);
+            });
+            records
+                .filter((rr) => {
+                return (rr.type === 'SRV' || rr.type === 'TXT') && (0, dns_equal_1.default)(rr.name, ptr.data);
+            })
+                .forEach((rr) => {
+                if (rr.type === 'SRV') {
+                    var parts = rr.name.split('.');
+                    var name = parts[0];
+                    var types = (0, service_types_1.toType)(parts.slice(1, -1).join('.'));
+                    service.name = name;
+                    service.fqdn = rr.name;
+                    service.host = rr.data.target;
+                    service.referer = referer;
+                    service.port = rr.data.port;
+                    service.type = types.name;
+                    service.protocol = types.protocol;
+                }
+                else if (rr.type === 'TXT') {
+                    service.rawTxt = rr.data;
+                    service.txt = this.txt.decodeAll(rr.data);
+                }
+            });
+            if (!service.name)
+                return;
+            records
+                .filter((rr) => (rr.type === 'A' || rr.type === 'AAAA') && (0, dns_equal_1.default)(rr.name, service.host))
+                .forEach((rr) => service.addresses.push(rr.data));
+            return service;
+        })
+            .filter((rr) => !!rr);
+    }
+}
+exports.Browser = Browser;
+exports.default = Browser;
+//# sourceMappingURL=browser.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/browser.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/browser.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/browser.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/lib/browser.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/bonjour-service/dist/lib/dns-txt.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/dns-txt.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/dns-txt.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+import KeyValue from './KeyValue';
+export declare class DnsTxt {
+    private binary;
+    constructor(opts?: KeyValue);
+    encode(data?: KeyValue): Buffer[];
+    decode(buffer: Buffer): KeyValue;
+    decodeAll(buffer: Array<Buffer>): KeyValue;
+}
+export default DnsTxt;
Index: frontend/node_modules/bonjour-service/dist/lib/dns-txt.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/dns-txt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/dns-txt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,42 @@
+'use strict';
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DnsTxt = void 0;
+class DnsTxt {
+    constructor(opts = {}) {
+        this.binary = opts ? opts.binary : false;
+    }
+    encode(data = {}) {
+        return Object.entries(data)
+            .map(([key, value]) => {
+            let item = `${key}=${value}`;
+            return Buffer.from(item);
+        });
+    }
+    decode(buffer) {
+        var data = {};
+        try {
+            let format = buffer.toString();
+            let parts = format.split(/=(.+)/);
+            let key = parts[0];
+            let value = parts[1];
+            data[key] = value;
+        }
+        catch (_) { }
+        return data;
+    }
+    decodeAll(buffer) {
+        return buffer
+            .filter(i => i.length > 1)
+            .map(i => this.decode(i))
+            .reduce((prev, curr) => {
+            var obj = prev;
+            let [key] = Object.keys(curr);
+            let [value] = Object.values(curr);
+            obj[key] = value;
+            return obj;
+        }, {});
+    }
+}
+exports.DnsTxt = DnsTxt;
+exports.default = DnsTxt;
+//# sourceMappingURL=dns-txt.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/dns-txt.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/dns-txt.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/dns-txt.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"dns-txt.js","sourceRoot":"","sources":["../../src/lib/dns-txt.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;AAIZ,MAAa,MAAM;IAIf,YAAY,OAAiB,EAAE;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;IAC5C,CAAC;IAOM,MAAM,CAAC,OAAiB,EAAE;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAClB,IAAI,IAAI,GAAW,GAAG,GAAG,IAAI,KAAK,EAAE,CAAA;YACpC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;IACN,CAAC;IAOM,MAAM,CAAC,MAAc;QACxB,IAAI,IAAI,GAAa,EAAE,CAAA;QAEvB,IAAI,CAAC;YACD,IAAI,MAAM,GAAoB,MAAM,CAAC,QAAQ,EAAE,CAAA;YAC/C,IAAI,KAAK,GAAqB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACnD,IAAI,GAAG,GAAuB,KAAK,CAAC,CAAC,CAAC,CAAA;YACtC,IAAI,KAAK,GAAqB,KAAK,CAAC,CAAC,CAAC,CAAA;YACtC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACrB,CAAC;QAAC,OAAM,CAAC,EAAE,CAAC,CAAA,CAAC;QAEb,OAAO,IAAI,CAAA;IACf,CAAC;IAOM,SAAS,CAAC,MAAqB;QAClC,OAAO,MAAM;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACxB,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YACnB,IAAI,GAAG,GAAW,IAAI,CAAA;YACtB,IAAI,CAAC,GAAG,CAAC,GAAS,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,KAAK,CAAC,GAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACrC,GAAG,CAAC,GAAG,CAAC,GAAU,KAAK,CAAA;YACvB,OAAO,GAAG,CAAA;QACd,CAAC,EAAE,EAAE,CAAC,CAAA;IACV,CAAC;CAEJ;AA1DD,wBA0DC;AAED,kBAAe,MAAM,CAAA"}
Index: frontend/node_modules/bonjour-service/dist/lib/mdns-server.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/mdns-server.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/mdns-server.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+import { ServiceConfig, ServiceRecord } from './service';
+export declare class Server {
+    mdns: any;
+    private registry;
+    private errorCallback;
+    constructor(opts: Partial<ServiceConfig>, errorCallback?: Function | undefined);
+    register(records: Array<ServiceRecord> | ServiceRecord): void;
+    unregister(records: Array<ServiceRecord> | ServiceRecord): void;
+    private respondToQuery;
+    private recordsFor;
+    private isDuplicateRecord;
+    private unique;
+}
+export default Server;
Index: frontend/node_modules/bonjour-service/dist/lib/mdns-server.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/mdns-server.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/mdns-server.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,119 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Server = void 0;
+const multicast_dns_1 = __importDefault(require("multicast-dns"));
+const es6_1 = __importDefault(require("fast-deep-equal/es6"));
+const dns_equal_1 = __importDefault(require("./utils/dns-equal"));
+class Server {
+    constructor(opts, errorCallback) {
+        this.registry = {};
+        this.mdns = (0, multicast_dns_1.default)(opts);
+        this.mdns.setMaxListeners(0);
+        this.mdns.on('query', this.respondToQuery.bind(this));
+        this.errorCallback = errorCallback !== null && errorCallback !== void 0 ? errorCallback : function (err) { throw err; };
+    }
+    register(records) {
+        const shouldRegister = (record) => {
+            var subRegistry = this.registry[record.type];
+            if (!subRegistry) {
+                subRegistry = this.registry[record.type] = [];
+            }
+            else if (subRegistry.some(this.isDuplicateRecord(record))) {
+                return;
+            }
+            subRegistry.push(record);
+        };
+        if (Array.isArray(records)) {
+            records.forEach(shouldRegister);
+        }
+        else {
+            shouldRegister(records);
+        }
+    }
+    unregister(records) {
+        const shouldUnregister = (record) => {
+            let type = record.type;
+            if (!(type in this.registry)) {
+                return;
+            }
+            this.registry[type] = this.registry[type].filter((i) => i.name !== record.name);
+        };
+        if (Array.isArray(records)) {
+            records.forEach(shouldUnregister);
+        }
+        else {
+            shouldUnregister(records);
+        }
+    }
+    respondToQuery(query) {
+        let self = this;
+        query.questions.forEach((question) => {
+            var type = question.type;
+            var name = question.name;
+            var answers = type === 'ANY'
+                ? Object.keys(self.registry).map(self.recordsFor.bind(self, name)).flat(1)
+                : self.recordsFor(name, type);
+            if (answers.length === 0)
+                return;
+            var additionals = [];
+            if (type !== 'ANY') {
+                answers.forEach((answer) => {
+                    if (answer.type !== 'PTR')
+                        return;
+                    additionals = additionals
+                        .concat(self.recordsFor(answer.data, 'SRV'))
+                        .concat(self.recordsFor(answer.data, 'TXT'));
+                });
+                additionals
+                    .filter(function (record) {
+                    return record.type === 'SRV';
+                })
+                    .map(function (record) {
+                    return record.data.target;
+                })
+                    .filter(this.unique())
+                    .forEach(function (target) {
+                    additionals = additionals
+                        .concat(self.recordsFor(target, 'A'))
+                        .concat(self.recordsFor(target, 'AAAA'));
+                });
+            }
+            self.mdns.respond({ answers: answers, additionals: additionals }, (err) => {
+                if (err) {
+                    this.errorCallback(err);
+                }
+            });
+        });
+    }
+    recordsFor(name, type) {
+        if (!(type in this.registry)) {
+            return [];
+        }
+        return this.registry[type].filter((record) => {
+            var _name = ~name.indexOf('.') ? record.name : record.name.split('.')[0];
+            return (0, dns_equal_1.default)(_name, name);
+        });
+    }
+    isDuplicateRecord(a) {
+        return (b) => {
+            return a.type === b.type &&
+                a.name === b.name &&
+                (0, es6_1.default)(a.data, b.data);
+        };
+    }
+    unique() {
+        var set = [];
+        return (obj) => {
+            if (~set.indexOf(obj))
+                return false;
+            set.push(obj);
+            return true;
+        };
+    }
+}
+exports.Server = Server;
+exports.default = Server;
+//# sourceMappingURL=mdns-server.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/mdns-server.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/mdns-server.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/mdns-server.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"mdns-server.js","sourceRoot":"","sources":["../../src/lib/mdns-server.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/bonjour-service/dist/lib/registry.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/registry.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/registry.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+import Server from './mdns-server';
+import Service, { ServiceConfig } from './service';
+export declare class Registry {
+    private server;
+    private services;
+    constructor(server: Server);
+    publish(config: ServiceConfig): Service;
+    unpublishAll(callback: CallableFunction | undefined): void;
+    destroy(): void;
+    private probe;
+    private announce;
+    private teardown;
+}
+export default Registry;
Index: frontend/node_modules/bonjour-service/dist/lib/registry.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/registry.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/registry.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,143 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Registry = void 0;
+const dns_equal_1 = __importDefault(require("./utils/dns-equal"));
+const service_1 = __importDefault(require("./service"));
+const REANNOUNCE_MAX_MS = 60 * 60 * 1000;
+const REANNOUNCE_FACTOR = 3;
+const noop = function () { };
+class Registry {
+    constructor(server) {
+        this.services = [];
+        this.server = server;
+    }
+    publish(config) {
+        function start(service, registry, opts) {
+            if (service.activated)
+                return;
+            service.activated = true;
+            registry.services.push(service);
+            if (!(service instanceof service_1.default))
+                return;
+            if (opts === null || opts === void 0 ? void 0 : opts.probe) {
+                registry.probe(registry.server.mdns, service, (exists) => {
+                    if (exists) {
+                        if (service.stop !== undefined)
+                            service.stop();
+                        console.log(new Error('Service name is already in use on the network'));
+                        return;
+                    }
+                    registry.announce(registry.server, service);
+                });
+            }
+            else {
+                registry.announce(registry.server, service);
+            }
+        }
+        function stop(service, registry, callback) {
+            if (!callback)
+                callback = noop;
+            if (!service.activated)
+                return process.nextTick(callback);
+            if (!(service instanceof service_1.default))
+                return process.nextTick(callback);
+            registry.teardown(registry.server, service, callback);
+            const index = registry.services.indexOf(service);
+            if (index !== -1)
+                registry.services.splice(index, 1);
+        }
+        const service = new service_1.default(config);
+        service.start = start.bind(null, service, this);
+        service.stop = stop.bind(null, service, this);
+        service.start({ probe: config.probe !== false });
+        return service;
+    }
+    unpublishAll(callback) {
+        this.teardown(this.server, this.services, callback);
+        this.services = [];
+    }
+    destroy() {
+        this.services.map(service => service.destroyed = true);
+    }
+    probe(mdns, service, callback) {
+        var sent = false;
+        var retries = 0;
+        var timer;
+        const send = () => {
+            if (!service.activated || service.destroyed)
+                return;
+            mdns.query(service.fqdn, 'ANY', function () {
+                sent = true;
+                timer = setTimeout(++retries < 3 ? send : done, 250);
+                timer.unref();
+            });
+        };
+        const onresponse = (packet) => {
+            if (!sent)
+                return;
+            if (packet.answers.some(matchRR) || packet.additionals.some(matchRR))
+                done(true);
+        };
+        const matchRR = (rr) => {
+            return (0, dns_equal_1.default)(rr.name, service.fqdn);
+        };
+        const done = (exists) => {
+            mdns.removeListener('response', onresponse);
+            clearTimeout(timer);
+            callback(!!exists);
+        };
+        mdns.on('response', onresponse);
+        setTimeout(send, Math.random() * 250);
+    }
+    announce(server, service) {
+        var delay = 1000;
+        var packet = service.records();
+        server.register(packet);
+        const broadcast = () => {
+            if (!service.activated || service.destroyed)
+                return;
+            server.mdns.respond(packet, function () {
+                if (!service.published) {
+                    service.activated = true;
+                    service.published = true;
+                    service.emit('up');
+                }
+                delay = delay * REANNOUNCE_FACTOR;
+                if (delay < REANNOUNCE_MAX_MS && !service.destroyed) {
+                    setTimeout(broadcast, delay).unref();
+                }
+            });
+        };
+        broadcast();
+    }
+    teardown(server, services, callback) {
+        if (!Array.isArray(services))
+            services = [services];
+        services = services.filter((service) => service.activated);
+        var records = services.flatMap(function (service) {
+            service.activated = false;
+            var records = service.records();
+            records.forEach((record) => {
+                record.ttl = 0;
+            });
+            return records;
+        });
+        if (records.length === 0)
+            return callback && process.nextTick(callback);
+        server.unregister(records);
+        server.mdns.respond(records, function () {
+            services.forEach(function (service) {
+                service.published = false;
+            });
+            if (typeof callback === "function") {
+                callback.apply(null, arguments);
+            }
+        });
+    }
+}
+exports.Registry = Registry;
+exports.default = Registry;
+//# sourceMappingURL=registry.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/registry.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/registry.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/registry.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/bonjour-service/dist/lib/service-types.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/service-types.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/service-types.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+export interface ServiceType {
+    name?: string;
+    protocol?: 'tcp' | 'udp' | string | null | undefined;
+    subtype?: string | undefined;
+}
+export declare const toString: (data: ServiceType) => any;
+export declare const toType: (string: string) => ServiceType;
Index: frontend/node_modules/bonjour-service/dist/lib/service-types.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/service-types.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/service-types.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,53 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.toType = exports.toString = void 0;
+const Prefix = (name) => {
+    return '_' + name;
+};
+const AllowedProp = (key) => {
+    let keys = ['name', 'protocol', 'subtype'];
+    return keys.includes(key);
+};
+const toString = (data) => {
+    let formatted = {
+        name: data.name,
+        protocol: data.protocol,
+        subtype: data.subtype
+    };
+    let entries = Object.entries(formatted);
+    return entries
+        .filter(([key, val]) => AllowedProp(key) && val !== undefined)
+        .reduce((prev, [key, val]) => {
+        switch (typeof val) {
+            case 'object':
+                val.map((i) => prev.push(Prefix(i)));
+                break;
+            default:
+                prev.push(Prefix(val));
+                break;
+        }
+        return prev;
+    }, [])
+        .join('.');
+};
+exports.toString = toString;
+const toType = (string) => {
+    let parts = string.split('.');
+    let subtype;
+    for (let i in parts) {
+        if (parts[i][0] !== '_')
+            continue;
+        parts[i] = parts[i].slice(1);
+    }
+    if (parts.includes('sub')) {
+        subtype = parts.shift();
+        parts.shift();
+    }
+    return {
+        name: parts.shift(),
+        protocol: parts.shift() || null,
+        subtype: subtype
+    };
+};
+exports.toType = toType;
+//# sourceMappingURL=service-types.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/service-types.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/service-types.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/service-types.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"service-types.js","sourceRoot":"","sources":["../../src/lib/service-types.ts"],"names":[],"mappings":";;;AAcA,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE;IACpC,OAAO,GAAG,GAAG,IAAI,CAAA;AACrB,CAAC,CAAA;AAOD,MAAM,WAAW,GAAG,CAAC,GAAW,EAAW,EAAE;IACzC,IAAI,IAAI,GAAkB,CAAC,MAAM,EAAC,UAAU,EAAC,SAAS,CAAC,CAAA;IACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC,CAAA;AAOM,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAO,EAAE;IAE/C,IAAI,SAAS,GAAgB;QACzB,IAAI,EAAU,IAAI,CAAC,IAAI;QACvB,QAAQ,EAAM,IAAI,CAAC,QAAQ;QAC3B,OAAO,EAAM,IAAI,CAAC,OAAO;KAC5B,CAAA;IAED,IAAI,OAAO,GAAe,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACnD,OAAO,OAAO;SACT,MAAM,CAAC,CAAC,CAAC,GAAG,EAAC,GAAG,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,SAAS,CAAC;SAC5D,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAC,GAAG,CAAC,EAAE,EAAE;QACxB,QAAO,OAAO,GAAG,EAAE,CAAC;YAChB,KAAK,QAAQ;gBACT,GAAG,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC5C,MAAK;YACT;gBACI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;gBACtB,MAAK;QACb,CAAC;QACD,OAAO,IAAI,CAAA;IACf,CAAC,EAAC,EAAE,CAAC;SACJ,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC,CAAA;AAvBY,QAAA,QAAQ,YAuBpB;AAOM,MAAM,MAAM,GAAG,CAAC,MAAc,EAAe,EAAE;IAElD,IAAI,KAAK,GAAkB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,OAA2B,CAAC;IAGhC,KAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QACjB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,SAAQ;QACjC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAGD,OAAO;QACH,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE;QACnB,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI;QAC/B,OAAO,EAAE,OAAO;KACnB,CAAA;AACL,CAAC,CAAA;AAtBY,QAAA,MAAM,UAsBlB"}
Index: frontend/node_modules/bonjour-service/dist/lib/service.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/service.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/service.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,55 @@
+import KeyValue from './KeyValue';
+import { EventEmitter } from 'events';
+export interface ServiceConfig {
+    name: string;
+    type: string;
+    port: number;
+    protocol?: 'tcp' | 'udp';
+    host?: string;
+    fqdn?: string;
+    subtypes?: Array<string>;
+    txt?: KeyValue;
+    probe?: boolean;
+    disableIPv6?: boolean;
+}
+export interface ServiceRecord {
+    name: string;
+    type: 'PTR' | 'SRV' | 'TXT' | 'A' | 'AAAA';
+    ttl: number;
+    data: KeyValue | string | any;
+}
+export interface ServiceReferer {
+    address: string;
+    family: 'IPv4' | 'IPv6';
+    port: number;
+    size: number;
+}
+export declare class Service extends EventEmitter {
+    name: string;
+    type: string;
+    protocol: 'tcp' | 'udp';
+    port: number;
+    host: string;
+    fqdn: string;
+    txt?: any;
+    subtypes?: Array<string>;
+    addresses?: Array<string>;
+    referer?: ServiceReferer;
+    disableIPv6: boolean;
+    probe: boolean;
+    published: boolean;
+    activated: boolean;
+    destroyed: boolean;
+    start?: CallableFunction;
+    stop?: CallableFunction;
+    private txtService;
+    constructor(config: ServiceConfig);
+    records(): Array<ServiceRecord>;
+    private RecordPTR;
+    private RecordSubtypePTR;
+    private RecordSRV;
+    private RecordTXT;
+    private RecordA;
+    private RecordAAAA;
+}
+export default Service;
Index: frontend/node_modules/bonjour-service/dist/lib/service.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/service.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/service.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,115 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Service = void 0;
+const os_1 = __importDefault(require("os"));
+const dns_txt_1 = __importDefault(require("./dns-txt"));
+const events_1 = require("events");
+const service_types_1 = require("./service-types");
+const TLD = '.local';
+class Service extends events_1.EventEmitter {
+    constructor(config) {
+        super();
+        this.probe = true;
+        this.published = false;
+        this.activated = false;
+        this.destroyed = false;
+        this.txtService = new dns_txt_1.default();
+        if (!config.name)
+            throw new Error('ServiceConfig requires `name` property to be set');
+        if (!config.type)
+            throw new Error('ServiceConfig requires `type` property to be set');
+        if (!config.port)
+            throw new Error('ServiceConfig requires `port` property to be set');
+        this.name = config.name.split('.').join('-');
+        this.protocol = config.protocol || 'tcp';
+        this.type = (0, service_types_1.toString)({ name: config.type, protocol: this.protocol });
+        this.port = config.port;
+        this.host = config.host || os_1.default.hostname();
+        this.fqdn = `${this.name}.${this.type}${TLD}`;
+        this.txt = config.txt;
+        this.subtypes = config.subtypes;
+        this.disableIPv6 = !!config.disableIPv6;
+    }
+    records() {
+        var records = [this.RecordPTR(this), this.RecordSRV(this), this.RecordTXT(this)];
+        for (let subtype of this.subtypes || []) {
+            records.push(this.RecordSubtypePTR(this, subtype));
+        }
+        let ifaces = Object.values(os_1.default.networkInterfaces());
+        for (let iface of ifaces) {
+            let addrs = iface;
+            for (let addr of addrs) {
+                if (addr.internal || addr.mac === '00:00:00:00:00:00')
+                    continue;
+                switch (addr.family) {
+                    case 'IPv4':
+                        records.push(this.RecordA(this, addr.address));
+                        break;
+                    case 'IPv6':
+                        if (this.disableIPv6)
+                            break;
+                        records.push(this.RecordAAAA(this, addr.address));
+                        break;
+                }
+            }
+        }
+        return records;
+    }
+    RecordPTR(service) {
+        return {
+            name: `${service.type}${TLD}`,
+            type: 'PTR',
+            ttl: 28800,
+            data: service.fqdn
+        };
+    }
+    RecordSubtypePTR(service, subtype) {
+        return {
+            name: `_${subtype}._sub.${service.type}${TLD}`,
+            type: 'PTR',
+            ttl: 28800,
+            data: `${service.name}.${service.type}${TLD}`
+        };
+    }
+    RecordSRV(service) {
+        return {
+            name: service.fqdn,
+            type: 'SRV',
+            ttl: 120,
+            data: {
+                port: service.port,
+                target: service.host
+            }
+        };
+    }
+    RecordTXT(service) {
+        return {
+            name: service.fqdn,
+            type: 'TXT',
+            ttl: 4500,
+            data: this.txtService.encode(service.txt)
+        };
+    }
+    RecordA(service, ip) {
+        return {
+            name: service.host,
+            type: 'A',
+            ttl: 120,
+            data: ip
+        };
+    }
+    RecordAAAA(service, ip) {
+        return {
+            name: service.host,
+            type: 'AAAA',
+            ttl: 120,
+            data: ip
+        };
+    }
+}
+exports.Service = Service;
+exports.default = Service;
+//# sourceMappingURL=service.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/service.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/service.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/service.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/lib/service.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/bonjour-service/dist/lib/utils/dns-equal.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/dns-equal.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/dns-equal.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export default function dnsEqual(a: string, b: string): boolean;
Index: frontend/node_modules/bonjour-service/dist/lib/utils/dns-equal.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/dns-equal.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/dns-equal.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = dnsEqual;
+const capitalLetterRegex = /[A-Z]/g;
+function toLowerCase(input) {
+    return input.toLowerCase();
+}
+function dnsEqual(a, b) {
+    const aFormatted = a.replace(capitalLetterRegex, toLowerCase);
+    const bFormatted = b.replace(capitalLetterRegex, toLowerCase);
+    return aFormatted === bFormatted;
+}
+//# sourceMappingURL=dns-equal.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/utils/dns-equal.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/dns-equal.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/dns-equal.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"dns-equal.js","sourceRoot":"","sources":["../../../src/lib/utils/dns-equal.ts"],"names":[],"mappings":";;AAOA,2BAKC;AAXD,MAAM,kBAAkB,GAAY,QAAQ,CAAA;AAE5C,SAAS,WAAW,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;AAC9B,CAAC;AAED,SAAwB,QAAQ,CAAC,CAAS,EAAE,CAAS;IACjD,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAA;IAC7D,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAA;IAE7D,OAAO,UAAU,KAAK,UAAU,CAAA;AACpC,CAAC"}
Index: frontend/node_modules/bonjour-service/dist/lib/utils/equal-txt.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/equal-txt.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/equal-txt.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export default function equalTxt(a: Record<string, string>, b: Record<string, string>): boolean;
Index: frontend/node_modules/bonjour-service/dist/lib/utils/equal-txt.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/equal-txt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/equal-txt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,17 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = equalTxt;
+function equalTxt(a, b) {
+    if (a === undefined || b === undefined)
+        return false;
+    let aKeys = Object.keys(a);
+    let bKeys = Object.keys(b);
+    if (aKeys.length != bKeys.length)
+        return false;
+    for (let key of aKeys) {
+        if (a[key] != b[key])
+            return false;
+    }
+    return true;
+}
+//# sourceMappingURL=equal-txt.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/utils/equal-txt.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/equal-txt.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/equal-txt.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"equal-txt.js","sourceRoot":"","sources":["../../../src/lib/utils/equal-txt.ts"],"names":[],"mappings":";;AAAA,2BASC;AATD,SAAwB,QAAQ,CAAC,CAAyB,EAAE,CAAyB;IACjF,IAAG,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACnD,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAC7C,KAAI,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACnB,IAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;IACrC,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC"}
Index: frontend/node_modules/bonjour-service/dist/lib/utils/filter-service.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/filter-service.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/filter-service.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+import KeyValue from '../KeyValue';
+import Service from '../service';
+declare const _default: (service: Service, txtQuery: KeyValue | undefined) => boolean;
+export default _default;
Index: frontend/node_modules/bonjour-service/dist/lib/utils/filter-service.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/filter-service.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/filter-service.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = (service, txtQuery) => {
+    if (txtQuery === undefined)
+        return true;
+    let serviceTxt = service.txt;
+    let query = Object.entries(txtQuery)
+        .map(([key, value]) => {
+        let queryValue = serviceTxt[key];
+        if (queryValue === undefined)
+            return false;
+        if (value != queryValue)
+            return false;
+        return true;
+    });
+    if (query.length == 0)
+        return true;
+    if (query.includes(false))
+        return false;
+    return true;
+};
+//# sourceMappingURL=filter-service.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/utils/filter-service.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/filter-service.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/filter-service.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"filter-service.js","sourceRoot":"","sources":["../../../src/lib/utils/filter-service.ts"],"names":[],"mappings":";;AAOA,kBAAe,CAAC,OAAgB,EAAE,QAA8B,EAAW,EAAE;IACzE,IAAG,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACtC,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAA;IAC5B,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAClB,IAAI,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;QAChC,IAAG,UAAU,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;QACzC,IAAG,KAAK,IAAI,UAAU;YAAE,OAAO,KAAK,CAAA;QACpC,OAAO,IAAI,CAAA;IACf,CAAC,CAAC,CAAA;IACN,IAAG,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,IAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACtC,OAAO,IAAI,CAAA;AACf,CAAC,CAAA"}
Index: frontend/node_modules/bonjour-service/dist/lib/utils/filter-txt.d.ts
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/filter-txt.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/filter-txt.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,3 @@
+import KeyValue from '../KeyValue';
+declare const _default: (data: KeyValue) => {};
+export default _default;
Index: frontend/node_modules/bonjour-service/dist/lib/utils/filter-txt.js
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/filter-txt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/filter-txt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,6 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = (data) => Object.keys(data)
+    .filter((key) => !key.includes('binary'))
+    .reduce((cur, key) => { return Object.assign(cur, { [key]: data[key] }); }, {});
+//# sourceMappingURL=filter-txt.js.map
Index: frontend/node_modules/bonjour-service/dist/lib/utils/filter-txt.js.map
===================================================================
--- frontend/node_modules/bonjour-service/dist/lib/utils/filter-txt.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/bonjour-service/dist/lib/utils/filter-txt.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"filter-txt.js","sourceRoot":"","sources":["../../../src/lib/utils/filter-txt.ts"],"names":[],"mappings":";;AAMA,kBAAe,CAAC,IAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;KACnD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACxC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA,CAAA,CAAC,EAAE,EAAE,CAAC,CAAA"}
