├── .gitignore ├── LICENSE ├── README.md ├── cli.js ├── index.js ├── jbd.js ├── logger.js ├── mqtt.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Mick Wheeler 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NodeJBD 2 | 3 | Utility to retrieve data from JBD/Overkill Solar BMS units and publish it to MQTT, written in NodeJS, Based on [NodeRenogy](https://github.com/sophienyaa/NodeRenogy). 4 | 5 | Data can then be surfaced in Home Assistant, or anything else that can read from a MQTT bus. 6 | 7 | **NOTE:** This software provides *read-only* access to your BMS, intended for publshing information to Home Assistant, Grafana, or similar. You can not change any BMS parameters with this software. 8 | 9 | This software is licensed under the [MIT License](https://opensource.org/licenses/MIT). 10 | 11 | ## Thanks 12 | 13 | Eric Poulsen for his [bms-tools](https://gitlab.com/bms-tools/bms-tools/-/tree/master) and [documation](https://gitlab.com/bms-tools/bms-tools/-/blob/master/JBD_REGISTER_MAP.md). 14 | 15 | Overkill Solar for their [extensive docuentation](https://overkillsolar.com/support-downloads/) and [Arduino library](https://github.com/FurTrader/Overkill-Solar-BMS-Arduino-Library) 16 | 17 | ## Compatibility 18 | 19 | See below table, in theory this should work with any size JBD/Overkill Solar BMS solar, but the below have been tested. 20 | If you have success with one not listed here, please let me know by raising an issue! 21 | 22 | |BMS Model|Interface|Notes|Status| 23 | |----------|---------|-----|------| 24 | |JBD SP04S28A4S|UART|100A 4s LiFePO4 BMS|✅| 25 | 26 | ## Supported Registers 27 | 28 | **TODO:** For now, check out Eric Poulsen's documenation [here](https://gitlab.com/bms-tools/bms-tools/-/blob/master/JBD_REGISTER_MAP.md) 29 | 30 | ## Connecting your BMS 31 | 32 | The BMS has a UART port, this is a 5v TTL serial connection and can easily be connected to most machines either via a USB > UART adapter 33 | 34 | If you are using a Raspberry Pi or similar, you may be able to connect to the UART pins on the board however you will likely need a logic level converter. 35 | 36 | I am using a CP2102 based USB > UART adapter for my application. 37 | 38 | You will need to connect TX, RX and GND to your device in order for it to work. 39 | 40 | **NOTE:** The UART port has 4 pins, GND, TX, RX and VCC. I have seen reports of VCC putting out ~10v so I would **NOT** connect anything to VCC (or at least test it first!) 41 | 42 | **TODO:** Add diagram/photos of UART connection. 43 | 44 | ## Using the utility 45 | 46 | Ideally you would install/run this on a device that is connected to your BMS all the time. I use a Raspberry Pi Zero W, which is more than powerful enough for this use case. 47 | 48 | This also assumes you have a MQTT broker setup and running already. If you don't want to use MQTT you can output the results to the console. Support for other output methods may come at a later date. 49 | 50 | You will first need to ensure you have NodeJS v16+ installed on your device. 51 | 52 | **NOTE**: If you installed a version of node with `apt-get` on your Pi Zero, please un-install it before installing Node v16. 53 | 54 | The Pi Zero/One doesn't have official support for newer version of NodeJS, so follow the instructions [here](https://hassancorrigan.com/blog/install-nodejs-on-a-raspberry-pi-zero/) to get it installed. 55 | 56 | If you are using a Pi 2 or later, follow the instructions [here](https://lindevs.com/install-node-js-and-npm-on-raspberry-pi/) to install the official NodeSource build. 57 | 58 | Once you've got NodeJS installed, then follow the below instructions. 59 | 60 | ### Installation 61 | 62 | 1. Clone this repository (or download it) by running; 63 | 64 | `git clone https://github.com/sophienyaa/NodeJBD.git` 65 | 66 | 2. Change to the `NodeJBD` directory and install the dependencies by running the below commands 67 | 68 | - Change to the directory you cloned the code into: `cd NodeJBD` 69 | - Run installer: `npm install` 70 | - Link command: `sudo npm link` 71 | 72 | ### Running the utility 73 | 74 | Basic Example: 75 | 76 | `node-jbd -s /dev/ttyUSB0 -m 192.168.0.10` 77 | 78 | This would use serial port `/dev/ttyUSB0` and connect to MQTT Broker at `192.168.0.10` with no user/password, publishing to the `NodeJBD/pack` and `NodeJBD/cells` topics every 10s. 79 | 80 | The utility supports using different polling intervals and topics, as well as MQTT brokers that need authentication, please see below for a full list of options. 81 | 82 | These options can also be passed as environment variables, by appending `NODEJBD_` to the argument (e.g. `NODEJBD_SERIALPORT=/dev/ttyUSB0`). This is useful when running as a service (see below section). 83 | 84 | |Argument |Alias |Env Var|Description | Example | 85 | |---------|------|----------|-----|----| 86 | |--serialport|-s|NODEJBD_SERIALPORT|REQUIRED: Serial port your BMS is connected to|-s /dev/ttyUSB0| 87 | |--baudrate|-b|NODEJBD_BAUDRATE|The baud rate to use for serial communications, defaults to 9600|-b 14400| 88 | |--mqttbroker|-m|NODEJBD_MQTTBROKER|The address of your MQTT Broker|-m 192.168.0.10| 89 | |--mqttuser|-u|NODEJBD_MQTTUSER|The username for your MQTT Broker|-u mqttUser| 90 | |--mqttpass|-p|NODEJBD_MQTTPASS|The password for your MQTT Broker|-p mqttPass| 91 | |--mqtttopic|-t|NODEJBD_MQTTTOPIC|MQTT topic to publish to defaults to 'NodeJBD'|-t MyTopic| 92 | |--pollinginterval|-i|NODEJBD_POLLINGINTERVAL|How frequently to poll the controller in seconds, defaults to 10|-i 60| 93 | |--loglevel|-l|NODEJBD_LOGLEVEL|Sets the logging level, useful for debugging|-l trace| 94 | |--help|-h||Show help || 95 | |--version|||Show version number| | 96 | 97 | ### Running as a service 98 | 99 | The utility can be configured to run as a service, including on startup. 100 | 101 | These instructions are for Rasbpbian, but should work on any Debian based distro (Ubuntu, etc) or any system that uses systemd. 102 | 103 | 1. Create a service definition file. This file should contain your required environment variables. 104 | 105 | Example: 106 | ``` 107 | [Unit] 108 | Description=NodeJBD Service 109 | 110 | [Service] 111 | ExecStart=node-jbd 112 | Restart=always 113 | User=pi 114 | Group=pi 115 | Environment=PATH=/usr/bin:/usr/local/bin 116 | Environment=NODE_ENV=production 117 | Environment=NODEJBD_SERIALPORT=/dev/ttyUSB0 118 | Environment=NODEJBD_MQTTBROKER=192.168.0.10 119 | WorkingDirectory=/home/pi/NodeJBD 120 | 121 | [Install] 122 | WantedBy=multi-user.target 123 | ``` 124 | Note the `Environment=...` lines, set any configuration options here such as serial port, MQTT broker, interval, etc. 125 | 126 | 2. Name this file `nodejbd.service` and save it in `/etc/systemd/system` 127 | 128 | 3. Run the following commands: 129 | 130 | - To start the service: `systemctl start nodejbd` 131 | 132 | - To check the logs/ensure its running: `journalctl -u nodejbd` 133 | 134 | - To enable the service to run at startup: `systemctl enable nodejbd` 135 | 136 | ## Publishing to MQTT 137 | 138 | The utility will publish one topic, with two subtopics on your MQTT Broker. You specify the topic name in the configuration with the default being `NodeJBD` 139 | 140 | The first subtopic is `/pack`. This is published at the set interval and contains all the information about your pack. This contains the data from Register 0x03 141 | 142 | Example: 143 | ```json 144 | { 145 | "packV": "13.30", 146 | "packA": "-0.43", 147 | "packBalCap": "96.04", 148 | "packRateCap": "100.00", 149 | "packCycles": 0, 150 | "packNumberOfCells": 4, 151 | "balanceStatus": [{ 152 | "cell0": false 153 | }, { 154 | "cell1": false 155 | }, { 156 | "cell2": false 157 | }, { 158 | "cell3": false 159 | }], 160 | "balanceStatusHigh": [{ 161 | "cell0": false 162 | }, { 163 | "cell1": false 164 | }, { 165 | "cell2": false 166 | }, { 167 | "cell3": false 168 | }], 169 | "protectionStatus": { 170 | "singleCellOvervolt": false, 171 | "singleCellUndervolt": false, 172 | "packOvervolt": false, 173 | "packUndervolt": false, 174 | "chargeOvertemp": false, 175 | "chargeUndertemp": false, 176 | "dischargeOvertemp": false, 177 | "dischargeUndertemp": false, 178 | "chargeOvercurrent": false, 179 | "dischargeOvercurrent": false, 180 | "shortCircut": false, 181 | "frontEndDetectionICError": false, 182 | "softwareLockMOS": false 183 | }, 184 | "bmsSWVersion": 32, 185 | "packSOC": 96, 186 | "FETStatus": { 187 | "charging": true, 188 | "discharging": true 189 | }, 190 | "tempSensorCount": 3, 191 | "tempSensorValues": { 192 | "NTC0": "12.85", 193 | "NTC1": "13.95", 194 | "NTC2": "13.55" 195 | } 196 | } 197 | ``` 198 | 199 | The second is `/cells` This is published at the set interval and contains the voltages of your individual cells. This contains the data from register 0x04 200 | 201 | Example: 202 | ```json 203 | { 204 | "cell0mV":3324, 205 | "cell0V":3.32, 206 | "cell1mV":3325, 207 | "cell1V":3.33, 208 | "cell2mV":3324, 209 | "cell2V":3.32, 210 | "cell3mV":3325, 211 | "cell3V":3.33 212 | } 213 | ``` 214 | You can then subscribe the topics with a MQTT client and data as you wish. An example of this would be surfacing it in Home Assistant. See below for more information on how to do that. 215 | 216 | ## Getting data into Home Assistant 217 | 218 | The values can be displayed in Home Assistant by adding them as [sensors](https://www.home-assistant.io/integrations/sensor.mqtt/) in the `configuration.yaml` files. 219 | 220 | Essentially you just need to extract the values from the JSON payload published to MQTT. For each value you want to use in Home Assistant, add a MQTT sensor entry in your config file. 221 | 222 | See below for some examples: 223 | 224 | ```yaml 225 | sensor: 226 | - platform: mqtt 227 | name: "Current Battery State of Charge" 228 | state_topic: "NodeJBD/pack" 229 | value_template: "{{ value_json['packSOC'] }}" 230 | unit_of_measurement: "%" 231 | device_class: battery 232 | 233 | - platform: mqtt 234 | name: "Cell0 Voltage" 235 | state_topic: "NodeJBD/cells" 236 | value_template: "{{ value_json['battV'] }}" 237 | unit_of_measurement: "V" 238 | device_class: battery 239 | ``` 240 | -------------------------------------------------------------------------------- /cli.js: -------------------------------------------------------------------------------- 1 | const yargs = require('yargs'); 2 | 3 | const argv = yargs 4 | .option('serialport', { 5 | alias: 's', 6 | description: 'Serial port your BMS is connected to (e.g -s /dev/ttyUSB0)', 7 | type: 'string', 8 | }) 9 | .option('baudrate', { 10 | alias: 'b', 11 | description: 'The baud rate to use for serial communications, defaults to 9600 (e.g -b 14400)', 12 | type: 'integer', 13 | default: 9600 14 | }) 15 | .option('mqttbroker', { 16 | alias: 'm', 17 | description: 'The address of your MQTT Broker (e.g -m 192.168.0.10)', 18 | type: 'string', 19 | }) 20 | .option('mqttuser', { 21 | alias: 'u', 22 | description: 'The username for your MQTT Broker (e.g -u mqttUser)', 23 | type: 'string', 24 | }) 25 | .option('mqttpass', { 26 | alias: 'p', 27 | description: 'The password for your MQTT Broker (e.g -p mqttPass)', 28 | type: 'string', 29 | }) 30 | .option('mqtttopic', { 31 | alias: 't', 32 | description: 'MQTT topic to publish to defaults to \'NodeJBD\' (e.g -t MyTopic)', 33 | type: 'string', 34 | default: 'NodeJBD' 35 | }) 36 | .option('pollinginterval', { 37 | alias: 'i', 38 | description: 'How frequently to poll the controller in seconds, defaults to 10 (e.g -i 60)', 39 | type: 'integer', 40 | default: 10 41 | }) 42 | .option('loglevel', { 43 | alias: 'l', 44 | description: 'Logging level to use, values are trace, debug, info, warn, error, fatal. Defaults to error', 45 | type: 'string', 46 | default: 'info' 47 | }) 48 | .choices('loglevel', ['trace', 'debug', 'info', 'warn', 'error', 'fatal']) 49 | .help() 50 | .alias('help', 'h') 51 | .epilogue('For more information, check out the project repository at https://github.com/mickwheelz/NodeJBD') 52 | .env('NODEJBD') 53 | .demandOption('serialport', 'You must specify a serial port') 54 | .wrap(yargs.terminalWidth()) 55 | .argv; 56 | 57 | module.exports = { 58 | args: argv 59 | }; 60 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | const cli = require('./cli'); 3 | const jbd = require('./jbd'); 4 | const logger = require('./logger'); 5 | 6 | async function main() { 7 | 8 | logger.info('Starting NodeJBD...'); 9 | try { 10 | 11 | const args = cli.args; 12 | logger.trace(args, 'With arguments...') 13 | 14 | setInterval( 15 | async function() { 16 | //send requests, response handled by eventlistener 17 | await jbd.getRegister(0x03); 18 | //wait 1s between requests 19 | await sleep(1000); 20 | 21 | await jbd.getRegister(0x04); 22 | }, 23 | args.pollinginterval * 1000 24 | ); 25 | } 26 | catch(e) { 27 | logger.error(e); 28 | process.exit(1); 29 | } 30 | 31 | } 32 | 33 | function sleep(ms) { 34 | return new Promise((resolve) => { 35 | setTimeout(resolve, ms); 36 | }); 37 | } 38 | 39 | main(); 40 | -------------------------------------------------------------------------------- /jbd.js: -------------------------------------------------------------------------------- 1 | const SerialPort = require('serialport'); 2 | const Delimiter = require('@serialport/parser-delimiter') 3 | const logger = require('./logger'); 4 | const cli = require('./cli'); 5 | const mqtt = require('./mqtt'); 6 | const args = cli.args; 7 | 8 | const START_BYTE = 0xDD; 9 | const STOP_BYTE = 0x77; 10 | const READ_BYTE = 0xA5; 11 | const READ_LENGTH = 0x00; 12 | 13 | const port = new SerialPort(args.serialport, { 14 | baudRate: args.baudrate 15 | }); 16 | 17 | const register0x03 = { 18 | setData: function(rawData) { 19 | //pos 4/5 Pack Voltage in 10mv, convert to V 20 | this.packV = bytesToFloat(rawData[4], rawData[5], 0.01); 21 | //pos 6/7 - Pack Current, positive for chg, neg for discharge, in 10ma, convert to A 22 | this.packA = bytesToFloat(rawData[6], rawData[7], 0.01, true); 23 | //pos 8/9 - Pack Balance Capacity, in 10mah convert to Ah 24 | this.packBalCap = bytesToFloat(rawData[8], rawData[9], 0.01); 25 | //pos 10/11 - Pack Rate Capacity, in 10mah, convert to Ah 26 | this.packRateCap = bytesToFloat(rawData[10], rawData[11], 0.01); 27 | //pos 12/13 - Pack number of cycles 28 | this.packCycles = toU16(rawData[12], rawData[13]); 29 | //pos 14/15 bms production date 30 | //TODO 31 | //pos 25 pack cell count - do this before balance status so we can use it to return the correct size array 32 | this.packNumberOfCells = toU8(rawData[25]); 33 | //pos 16/17 balance status 34 | this.balanceStatus = getBalanceStatus(rawData[16], rawData[17], this.packNumberOfCells); 35 | //pos 18/19 balance status high 36 | this.balanceStatusHigh = getBalanceStatus(rawData[18], rawData[19], this.packNumberOfCells); 37 | //pos 20/21 protection status 38 | this.protectionStatus = getProtectionStatus(rawData[20],rawData[21]); 39 | //pos 22 s/w version 40 | this.bmsSWVersion = rawData[22]; 41 | //pos 23 RSOC (remaining pack capacity, percent) 42 | this.packSOC = toU8(rawData[23]); 43 | //pos 24 FET status, bit0 chg, bit1, dischg (0 FET off, 1 FET on) 44 | this.FETStatus = getFETStatus(rawData[24]); 45 | //pos 26 number of temp sensors (NTCs) 46 | this.tempSensorCount = toU8(rawData[26]); 47 | //pos 27 / 28 / 29 Temp sensor (NTC) values 48 | this.tempSensorValues = getNTCValues(rawData, this.tempSensorCount); 49 | return this; 50 | } 51 | }; 52 | 53 | const register0x04 = { 54 | setData: function(rawData) { 55 | const cellData = rawData.slice(4,rawData.length-3); 56 | let count = 0; 57 | for(var i = 0; i < rawData[3]; i++) { 58 | if(i == 0 || i % 2 == 0) { 59 | const cellmV = `cell${count}mV`; 60 | const cellV = `cell${count}V`; 61 | this[cellmV] = toU16(cellData[i], cellData[i+1]); 62 | this[cellV] = bytesToFloat(cellData[i], cellData[i+1], 0.001); 63 | count++; 64 | } 65 | } 66 | return this; 67 | } 68 | }; 69 | 70 | function readRegisterPayload(register) { 71 | const result = Buffer.alloc(7); 72 | //Start Byte 73 | result[0] = START_BYTE; 74 | //Request type: 0xA5 read, 0x5A write 75 | result[1] = READ_BYTE; 76 | //Register to use 77 | result[2] = register; 78 | //Data length, 0 for reads 79 | result[3] = READ_LENGTH; 80 | //Checksum: 0x10000 subtract the sum of register and length, U16, 2bytes. 81 | const chk = calcChecksum(register, result[3]); 82 | result[4] =chk[0]; 83 | result[5] =chk[1]; 84 | //Stop Byte 85 | result[6] = STOP_BYTE; 86 | return result; 87 | } 88 | 89 | //calculates the checksum for a request/result 90 | function calcChecksum(sumOfData, length) { 91 | const checksum = Buffer.alloc(2) 92 | //Checksum is 0x10000 (65536 dec) minus the sum of the data plus its length, returned as a 2 byte array 93 | checksum.writeUInt16BE(0x10000-(sumOfData+length)); 94 | return checksum; 95 | } 96 | 97 | //validates the checksum of an incoming result 98 | function validateChecksum(result) { 99 | //Payload is between the 4th and n-3th byte (last 3 bytes are checksum and stop byte) 100 | const sumOfPayload = result.slice(4, result.length-3).reduce((partial_sum, a) => partial_sum + a, 0); 101 | const checksum = calcChecksum(sumOfPayload, result[3]); 102 | return checksum[0] === result[result.length-3] && checksum[1] === result[result.length-2]; 103 | } 104 | 105 | //returns a float to two decimal points for a signed/unsigned int and a multiplier 106 | function bytesToFloat(byte1, byte2, multiplier, signed) { 107 | multiplier = multiplier === undefined || multiplier === null ? 1 : multiplier; 108 | if(signed) { 109 | return parseFloat(toS16(byte1, byte2) * multiplier).toFixed(2); 110 | } 111 | return parseFloat(toU16(byte1, byte2) * multiplier).toFixed(2); 112 | } 113 | 114 | //takes two bytes and returns 16bit signed int (-32768 to +32767) 115 | function toS16(byte1, byte2) { 116 | return Buffer.from([byte1, byte2]).readInt16BE(); 117 | } 118 | 119 | //takes two bytes and returns 16 bit unsigned int (0 to 65535) 120 | function toU16(byte1, byte2) { 121 | return Buffer.from([byte1, byte2]).readUInt16BE(); 122 | } 123 | 124 | //takes one byte and returns 8 bit int (0 to 255) 125 | function toU8(byte) { 126 | return Buffer.from([byte]).readInt8(); 127 | } 128 | 129 | function process2BytesToBin(byte1, byte2) { 130 | return toU16(byte1, byte2).toString(2).padStart(16, '0'); 131 | } 132 | 133 | function process1BytesToBin(byte) { 134 | return toU8(byte).toString(2).padStart(8, '0'); 135 | } 136 | 137 | function getFETStatus(byte) { 138 | const fetBits = process1BytesToBin(byte).split(""); 139 | return { 140 | "charging": Boolean(fetBits[0]), 141 | "discharging": Boolean(fetBits[1]) 142 | } 143 | } 144 | 145 | function getBalanceStatus(byte1, byte2, numCells) { 146 | const balanceBits = process2BytesToBin(byte1, byte2).split("").slice(0, numCells); 147 | return balanceBits.map((bit, idx) =>{ 148 | const keyName = `cell${idx}`; 149 | return {[keyName]: Boolean(parseInt(bit))}; 150 | }); 151 | } 152 | 153 | function getProtectionStatus(byte1, byte2) { 154 | const protectionBits = process2BytesToBin(byte1, byte2).split("").map(pb => { 155 | pb = Boolean(parseInt(pb)); 156 | return pb; 157 | }); 158 | 159 | //Bit definitions 160 | const protectionStatus = { 161 | //bit0 - Single Cell overvolt 162 | singleCellOvervolt: protectionBits[0], 163 | //bit1 - Single Cell undervolt 164 | singleCellUndervolt:protectionBits[1], 165 | //bit2 - whole pack overvolt 166 | packOvervolt:protectionBits[2], 167 | //bit3 - whole pack undervolt 168 | packUndervolt:protectionBits[3], 169 | //bit4 - charging over temp 170 | chargeOvertemp:protectionBits[4], 171 | //bit5 - charging under temp 172 | chargeUndertemp:protectionBits[5], 173 | //bit6 - discharge over temp 174 | dischargeOvertemp:protectionBits[6], 175 | //bit7 - discharge under temp 176 | dischargeUndertemp:protectionBits[7], 177 | //bit8 - charge overcurrent 178 | chargeOvercurrent:protectionBits[8], 179 | //bit9 - discharge overcurrent 180 | dischargeOvercurrent:protectionBits[9], 181 | //bit10 - short circut 182 | shortCircut:protectionBits[10], 183 | //bit11 - front-end detection ic error 184 | frontEndDetectionICError:protectionBits[11], 185 | //bit12 - software lock MOS 186 | softwareLockMOS:protectionBits[12] 187 | //bit13-15 reserved/unused 188 | } 189 | return protectionStatus; 190 | } 191 | 192 | function getNTCValues(bytes, numNTCs) { 193 | let count = 0; 194 | let result = {}; 195 | for(var i = 27; i < 27+(numNTCs*2); i++) { 196 | if(i == 27 || i % 2 != 0) { 197 | const ntcName = `NTC${count}`; 198 | //temp is in 0.1K convert to celcius 199 | result[ntcName] = (bytesToFloat(bytes[i], bytes[i+1], 0.1) - 273.15).toFixed(2); 200 | count++; 201 | } 202 | } 203 | return result; 204 | } 205 | 206 | async function requestData(serialPort, buff, parser){ 207 | 208 | logger.trace('Requesting data from BMS...'); 209 | return new Promise(function(resolve, reject) { 210 | serialPort.write(buff, function (err) { 211 | if(err) { 212 | reject(err); 213 | } 214 | logger.trace(buff.map(b => {return b.toString(16)}), 'Request sent (HEX): '); 215 | resolve(); 216 | }) 217 | }); 218 | } 219 | 220 | const parser = port.pipe(new Delimiter({ delimiter: Buffer.alloc(1, STOP_BYTE), includeDelimiter: true })); 221 | parser.on('data', function (rawData) { 222 | logger.trace(rawData, 'Recieved Data from BMS (HEX): '); 223 | if(validateChecksum(rawData)) { 224 | logger.trace('Data from is valid!'); 225 | switch(rawData[1]) { 226 | case 0x03: 227 | const register3 = register0x03.setData(rawData); 228 | if(args.mqttbroker) { 229 | logger.trace(register3, 'Register 3 Data: '); 230 | mqtt.publish(register3, 'pack'); 231 | } 232 | else { 233 | console.log(register3); 234 | } 235 | break; 236 | case 0x04: 237 | const register4 = register0x04.setData(rawData); 238 | if(args.mqttbroker) { 239 | logger.trace(register4, 'Register 4 Data: '); 240 | mqtt.publish(register4, 'cells'); 241 | } 242 | else { 243 | console.log(register4); 244 | } 245 | break; 246 | } 247 | } 248 | else { 249 | logger.error('Recieved invalid data from BMS!'); 250 | } 251 | }); 252 | 253 | module.exports = { 254 | getRegister: async function(reg) { 255 | try { 256 | logger.trace(`Getting data from Register ${reg}`); 257 | await requestData(port, readRegisterPayload(reg), parser); 258 | } 259 | catch(e) { 260 | logger.error(e); 261 | } 262 | } 263 | }; 264 | -------------------------------------------------------------------------------- /logger.js: -------------------------------------------------------------------------------- 1 | const logger = require('pino'); 2 | const cli = require('./cli'); 3 | const args = cli.args; 4 | 5 | module.exports = logger( 6 | { 7 | prettyPrint: true, 8 | level: args.loglevel 9 | }, 10 | ); 11 | -------------------------------------------------------------------------------- /mqtt.js: -------------------------------------------------------------------------------- 1 | const cli = require('./cli'); 2 | const mqtt = require('async-mqtt'); 3 | const logger = require('./logger'); 4 | const args = cli.args; 5 | 6 | const mqttOptions = { 7 | username: args.mqttuser, 8 | password: args.mqttpass, 9 | clientId: `nodeJBD_${Math.random().toString(16).substr(2,8)}` 10 | }; 11 | 12 | module.exports = { 13 | publish: async function(data, subTopic) { 14 | try { 15 | logger.trace('Connecting to MQTT broker...'); 16 | logger.trace(mqttOptions, 'With MQTT options...'); 17 | const client = await mqtt.connectAsync(`tcp://${args.mqttbroker}`, mqttOptions) 18 | logger.trace('Publishing data to MQTT...'); 19 | await client.publish(`${args.mqtttopic}/${subTopic}`, JSON.stringify(data)); 20 | await client.end(); 21 | } catch (e){ 22 | logger.error(e); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejbd", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "nodejbd", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "async-mqtt": "^2.6.1", 13 | "pino": "^7.2.0", 14 | "pino-pretty": "^7.2.0", 15 | "serialport": "^9.2.5", 16 | "yargs": "^17.2.1" 17 | } 18 | }, 19 | "node_modules/@serialport/binding-abstract": { 20 | "version": "9.2.3", 21 | "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz", 22 | "integrity": "sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==", 23 | "dependencies": { 24 | "debug": "^4.3.2" 25 | }, 26 | "engines": { 27 | "node": ">=10.0.0" 28 | }, 29 | "funding": { 30 | "url": "https://opencollective.com/serialport/donate" 31 | } 32 | }, 33 | "node_modules/@serialport/binding-mock": { 34 | "version": "9.2.4", 35 | "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.2.4.tgz", 36 | "integrity": "sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g==", 37 | "dependencies": { 38 | "@serialport/binding-abstract": "9.2.3", 39 | "debug": "^4.3.2" 40 | }, 41 | "engines": { 42 | "node": ">=10.0.0" 43 | }, 44 | "funding": { 45 | "url": "https://opencollective.com/serialport/donate" 46 | } 47 | }, 48 | "node_modules/@serialport/bindings": { 49 | "version": "9.2.5", 50 | "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.2.5.tgz", 51 | "integrity": "sha512-fyabNg56gWbOMuYJc5c45z94sANC/WzTnGeML7Nr1IYVk0SJ1uksN4ETI8Nea9ZAtr4DhNiIMQ3/IOkyof6Tqg==", 52 | "hasInstallScript": true, 53 | "dependencies": { 54 | "@serialport/binding-abstract": "9.2.3", 55 | "@serialport/parser-readline": "9.2.4", 56 | "bindings": "^1.5.0", 57 | "debug": "^4.3.2", 58 | "nan": "^2.15.0", 59 | "prebuild-install": "^6.1.4" 60 | }, 61 | "engines": { 62 | "node": ">=10.0.0" 63 | }, 64 | "funding": { 65 | "url": "https://opencollective.com/serialport/donate" 66 | } 67 | }, 68 | "node_modules/@serialport/parser-byte-length": { 69 | "version": "9.2.4", 70 | "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz", 71 | "integrity": "sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg==", 72 | "engines": { 73 | "node": ">=10.0.0" 74 | }, 75 | "funding": { 76 | "url": "https://opencollective.com/serialport/donate" 77 | } 78 | }, 79 | "node_modules/@serialport/parser-cctalk": { 80 | "version": "9.2.4", 81 | "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz", 82 | "integrity": "sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ==", 83 | "engines": { 84 | "node": ">=10.0.0" 85 | }, 86 | "funding": { 87 | "url": "https://opencollective.com/serialport/donate" 88 | } 89 | }, 90 | "node_modules/@serialport/parser-delimiter": { 91 | "version": "9.2.4", 92 | "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz", 93 | "integrity": "sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==", 94 | "engines": { 95 | "node": ">=10.0.0" 96 | }, 97 | "funding": { 98 | "url": "https://opencollective.com/serialport/donate" 99 | } 100 | }, 101 | "node_modules/@serialport/parser-inter-byte-timeout": { 102 | "version": "9.2.4", 103 | "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz", 104 | "integrity": "sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A==", 105 | "engines": { 106 | "node": ">=10.0.0" 107 | }, 108 | "funding": { 109 | "url": "https://opencollective.com/serialport/donate" 110 | } 111 | }, 112 | "node_modules/@serialport/parser-readline": { 113 | "version": "9.2.4", 114 | "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.2.4.tgz", 115 | "integrity": "sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==", 116 | "dependencies": { 117 | "@serialport/parser-delimiter": "9.2.4" 118 | }, 119 | "engines": { 120 | "node": ">=10.0.0" 121 | }, 122 | "funding": { 123 | "url": "https://opencollective.com/serialport/donate" 124 | } 125 | }, 126 | "node_modules/@serialport/parser-ready": { 127 | "version": "9.2.4", 128 | "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.2.4.tgz", 129 | "integrity": "sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw==", 130 | "engines": { 131 | "node": ">=10.0.0" 132 | }, 133 | "funding": { 134 | "url": "https://opencollective.com/serialport/donate" 135 | } 136 | }, 137 | "node_modules/@serialport/parser-regex": { 138 | "version": "9.2.4", 139 | "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.2.4.tgz", 140 | "integrity": "sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ==", 141 | "engines": { 142 | "node": ">=10.0.0" 143 | }, 144 | "funding": { 145 | "url": "https://opencollective.com/serialport/donate" 146 | } 147 | }, 148 | "node_modules/@serialport/stream": { 149 | "version": "9.2.4", 150 | "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-9.2.4.tgz", 151 | "integrity": "sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ==", 152 | "dependencies": { 153 | "debug": "^4.3.2" 154 | }, 155 | "engines": { 156 | "node": ">=10.0.0" 157 | }, 158 | "funding": { 159 | "url": "https://opencollective.com/serialport/donate" 160 | } 161 | }, 162 | "node_modules/ansi-regex": { 163 | "version": "2.1.1", 164 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 165 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 166 | "engines": { 167 | "node": ">=0.10.0" 168 | } 169 | }, 170 | "node_modules/ansi-styles": { 171 | "version": "4.3.0", 172 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 173 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 174 | "dependencies": { 175 | "color-convert": "^2.0.1" 176 | }, 177 | "engines": { 178 | "node": ">=8" 179 | }, 180 | "funding": { 181 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 182 | } 183 | }, 184 | "node_modules/aproba": { 185 | "version": "1.2.0", 186 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 187 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 188 | }, 189 | "node_modules/are-we-there-yet": { 190 | "version": "1.1.7", 191 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", 192 | "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", 193 | "dependencies": { 194 | "delegates": "^1.0.0", 195 | "readable-stream": "^2.0.6" 196 | } 197 | }, 198 | "node_modules/args": { 199 | "version": "5.0.1", 200 | "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", 201 | "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", 202 | "dependencies": { 203 | "camelcase": "5.0.0", 204 | "chalk": "2.4.2", 205 | "leven": "2.1.0", 206 | "mri": "1.1.4" 207 | }, 208 | "engines": { 209 | "node": ">= 6.0.0" 210 | } 211 | }, 212 | "node_modules/async-mqtt": { 213 | "version": "2.6.1", 214 | "resolved": "https://registry.npmjs.org/async-mqtt/-/async-mqtt-2.6.1.tgz", 215 | "integrity": "sha512-EkXAwRzwMaPC6ji0EvNeM5OMe6VjMhEKVJJUN7gu/hGzkcDpZtaI34nUwdwCMbjQB3pnuSOHqQMFKsUpg+D8kA==", 216 | "dependencies": { 217 | "mqtt": "^4.1.0" 218 | } 219 | }, 220 | "node_modules/atomic-sleep": { 221 | "version": "1.0.0", 222 | "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 223 | "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", 224 | "engines": { 225 | "node": ">=8.0.0" 226 | } 227 | }, 228 | "node_modules/balanced-match": { 229 | "version": "1.0.2", 230 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 231 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 232 | }, 233 | "node_modules/base64-js": { 234 | "version": "1.5.1", 235 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 236 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 237 | "funding": [ 238 | { 239 | "type": "github", 240 | "url": "https://github.com/sponsors/feross" 241 | }, 242 | { 243 | "type": "patreon", 244 | "url": "https://www.patreon.com/feross" 245 | }, 246 | { 247 | "type": "consulting", 248 | "url": "https://feross.org/support" 249 | } 250 | ] 251 | }, 252 | "node_modules/bindings": { 253 | "version": "1.5.0", 254 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 255 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 256 | "dependencies": { 257 | "file-uri-to-path": "1.0.0" 258 | } 259 | }, 260 | "node_modules/bl": { 261 | "version": "4.1.0", 262 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 263 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 264 | "dependencies": { 265 | "buffer": "^5.5.0", 266 | "inherits": "^2.0.4", 267 | "readable-stream": "^3.4.0" 268 | } 269 | }, 270 | "node_modules/bl/node_modules/readable-stream": { 271 | "version": "3.6.0", 272 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 273 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 274 | "dependencies": { 275 | "inherits": "^2.0.3", 276 | "string_decoder": "^1.1.1", 277 | "util-deprecate": "^1.0.1" 278 | }, 279 | "engines": { 280 | "node": ">= 6" 281 | } 282 | }, 283 | "node_modules/brace-expansion": { 284 | "version": "1.1.11", 285 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 286 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 287 | "dependencies": { 288 | "balanced-match": "^1.0.0", 289 | "concat-map": "0.0.1" 290 | } 291 | }, 292 | "node_modules/buffer": { 293 | "version": "5.7.1", 294 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 295 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 296 | "funding": [ 297 | { 298 | "type": "github", 299 | "url": "https://github.com/sponsors/feross" 300 | }, 301 | { 302 | "type": "patreon", 303 | "url": "https://www.patreon.com/feross" 304 | }, 305 | { 306 | "type": "consulting", 307 | "url": "https://feross.org/support" 308 | } 309 | ], 310 | "dependencies": { 311 | "base64-js": "^1.3.1", 312 | "ieee754": "^1.1.13" 313 | } 314 | }, 315 | "node_modules/buffer-from": { 316 | "version": "1.1.2", 317 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 318 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 319 | }, 320 | "node_modules/camelcase": { 321 | "version": "5.0.0", 322 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", 323 | "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", 324 | "engines": { 325 | "node": ">=6" 326 | } 327 | }, 328 | "node_modules/chalk": { 329 | "version": "2.4.2", 330 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 331 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 332 | "dependencies": { 333 | "ansi-styles": "^3.2.1", 334 | "escape-string-regexp": "^1.0.5", 335 | "supports-color": "^5.3.0" 336 | }, 337 | "engines": { 338 | "node": ">=4" 339 | } 340 | }, 341 | "node_modules/chalk/node_modules/ansi-styles": { 342 | "version": "3.2.1", 343 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 344 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 345 | "dependencies": { 346 | "color-convert": "^1.9.0" 347 | }, 348 | "engines": { 349 | "node": ">=4" 350 | } 351 | }, 352 | "node_modules/chalk/node_modules/color-convert": { 353 | "version": "1.9.3", 354 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 355 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 356 | "dependencies": { 357 | "color-name": "1.1.3" 358 | } 359 | }, 360 | "node_modules/chalk/node_modules/color-name": { 361 | "version": "1.1.3", 362 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 363 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 364 | }, 365 | "node_modules/chownr": { 366 | "version": "1.1.4", 367 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 368 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 369 | }, 370 | "node_modules/cliui": { 371 | "version": "7.0.4", 372 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 373 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 374 | "dependencies": { 375 | "string-width": "^4.2.0", 376 | "strip-ansi": "^6.0.0", 377 | "wrap-ansi": "^7.0.0" 378 | } 379 | }, 380 | "node_modules/cliui/node_modules/ansi-regex": { 381 | "version": "5.0.1", 382 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 383 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 384 | "engines": { 385 | "node": ">=8" 386 | } 387 | }, 388 | "node_modules/cliui/node_modules/is-fullwidth-code-point": { 389 | "version": "3.0.0", 390 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 391 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 392 | "engines": { 393 | "node": ">=8" 394 | } 395 | }, 396 | "node_modules/cliui/node_modules/string-width": { 397 | "version": "4.2.3", 398 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 399 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 400 | "dependencies": { 401 | "emoji-regex": "^8.0.0", 402 | "is-fullwidth-code-point": "^3.0.0", 403 | "strip-ansi": "^6.0.1" 404 | }, 405 | "engines": { 406 | "node": ">=8" 407 | } 408 | }, 409 | "node_modules/cliui/node_modules/strip-ansi": { 410 | "version": "6.0.1", 411 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 412 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 413 | "dependencies": { 414 | "ansi-regex": "^5.0.1" 415 | }, 416 | "engines": { 417 | "node": ">=8" 418 | } 419 | }, 420 | "node_modules/code-point-at": { 421 | "version": "1.1.0", 422 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 423 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 424 | "engines": { 425 | "node": ">=0.10.0" 426 | } 427 | }, 428 | "node_modules/color-convert": { 429 | "version": "2.0.1", 430 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 431 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 432 | "dependencies": { 433 | "color-name": "~1.1.4" 434 | }, 435 | "engines": { 436 | "node": ">=7.0.0" 437 | } 438 | }, 439 | "node_modules/color-name": { 440 | "version": "1.1.4", 441 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 442 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 443 | }, 444 | "node_modules/colorette": { 445 | "version": "2.0.16", 446 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", 447 | "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" 448 | }, 449 | "node_modules/commist": { 450 | "version": "1.1.0", 451 | "resolved": "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz", 452 | "integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==", 453 | "dependencies": { 454 | "leven": "^2.1.0", 455 | "minimist": "^1.1.0" 456 | } 457 | }, 458 | "node_modules/concat-map": { 459 | "version": "0.0.1", 460 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 461 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 462 | }, 463 | "node_modules/concat-stream": { 464 | "version": "2.0.0", 465 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", 466 | "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", 467 | "engines": [ 468 | "node >= 6.0" 469 | ], 470 | "dependencies": { 471 | "buffer-from": "^1.0.0", 472 | "inherits": "^2.0.3", 473 | "readable-stream": "^3.0.2", 474 | "typedarray": "^0.0.6" 475 | } 476 | }, 477 | "node_modules/concat-stream/node_modules/readable-stream": { 478 | "version": "3.6.0", 479 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 480 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 481 | "dependencies": { 482 | "inherits": "^2.0.3", 483 | "string_decoder": "^1.1.1", 484 | "util-deprecate": "^1.0.1" 485 | }, 486 | "engines": { 487 | "node": ">= 6" 488 | } 489 | }, 490 | "node_modules/console-control-strings": { 491 | "version": "1.1.0", 492 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 493 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 494 | }, 495 | "node_modules/core-util-is": { 496 | "version": "1.0.3", 497 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 498 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 499 | }, 500 | "node_modules/dateformat": { 501 | "version": "4.6.3", 502 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", 503 | "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", 504 | "engines": { 505 | "node": "*" 506 | } 507 | }, 508 | "node_modules/debug": { 509 | "version": "4.3.2", 510 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 511 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 512 | "dependencies": { 513 | "ms": "2.1.2" 514 | }, 515 | "engines": { 516 | "node": ">=6.0" 517 | }, 518 | "peerDependenciesMeta": { 519 | "supports-color": { 520 | "optional": true 521 | } 522 | } 523 | }, 524 | "node_modules/decompress-response": { 525 | "version": "4.2.1", 526 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", 527 | "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", 528 | "dependencies": { 529 | "mimic-response": "^2.0.0" 530 | }, 531 | "engines": { 532 | "node": ">=8" 533 | } 534 | }, 535 | "node_modules/deep-extend": { 536 | "version": "0.6.0", 537 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 538 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 539 | "engines": { 540 | "node": ">=4.0.0" 541 | } 542 | }, 543 | "node_modules/delegates": { 544 | "version": "1.0.0", 545 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 546 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 547 | }, 548 | "node_modules/detect-libc": { 549 | "version": "1.0.3", 550 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 551 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", 552 | "bin": { 553 | "detect-libc": "bin/detect-libc.js" 554 | }, 555 | "engines": { 556 | "node": ">=0.10" 557 | } 558 | }, 559 | "node_modules/duplexify": { 560 | "version": "4.1.2", 561 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", 562 | "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", 563 | "dependencies": { 564 | "end-of-stream": "^1.4.1", 565 | "inherits": "^2.0.3", 566 | "readable-stream": "^3.1.1", 567 | "stream-shift": "^1.0.0" 568 | } 569 | }, 570 | "node_modules/duplexify/node_modules/readable-stream": { 571 | "version": "3.6.0", 572 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 573 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 574 | "dependencies": { 575 | "inherits": "^2.0.3", 576 | "string_decoder": "^1.1.1", 577 | "util-deprecate": "^1.0.1" 578 | }, 579 | "engines": { 580 | "node": ">= 6" 581 | } 582 | }, 583 | "node_modules/emoji-regex": { 584 | "version": "8.0.0", 585 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 586 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 587 | }, 588 | "node_modules/end-of-stream": { 589 | "version": "1.4.4", 590 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 591 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 592 | "dependencies": { 593 | "once": "^1.4.0" 594 | } 595 | }, 596 | "node_modules/escalade": { 597 | "version": "3.1.1", 598 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 599 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 600 | "engines": { 601 | "node": ">=6" 602 | } 603 | }, 604 | "node_modules/escape-string-regexp": { 605 | "version": "1.0.5", 606 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 607 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 608 | "engines": { 609 | "node": ">=0.8.0" 610 | } 611 | }, 612 | "node_modules/expand-template": { 613 | "version": "2.0.3", 614 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 615 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", 616 | "engines": { 617 | "node": ">=6" 618 | } 619 | }, 620 | "node_modules/fast-redact": { 621 | "version": "3.0.2", 622 | "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.2.tgz", 623 | "integrity": "sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg==", 624 | "engines": { 625 | "node": ">=6" 626 | } 627 | }, 628 | "node_modules/fast-safe-stringify": { 629 | "version": "2.1.1", 630 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", 631 | "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" 632 | }, 633 | "node_modules/fastify-warning": { 634 | "version": "0.2.0", 635 | "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz", 636 | "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==" 637 | }, 638 | "node_modules/file-uri-to-path": { 639 | "version": "1.0.0", 640 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 641 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 642 | }, 643 | "node_modules/fs-constants": { 644 | "version": "1.0.0", 645 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 646 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 647 | }, 648 | "node_modules/fs.realpath": { 649 | "version": "1.0.0", 650 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 651 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 652 | }, 653 | "node_modules/gauge": { 654 | "version": "2.7.4", 655 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 656 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 657 | "dependencies": { 658 | "aproba": "^1.0.3", 659 | "console-control-strings": "^1.0.0", 660 | "has-unicode": "^2.0.0", 661 | "object-assign": "^4.1.0", 662 | "signal-exit": "^3.0.0", 663 | "string-width": "^1.0.1", 664 | "strip-ansi": "^3.0.1", 665 | "wide-align": "^1.1.0" 666 | } 667 | }, 668 | "node_modules/get-caller-file": { 669 | "version": "2.0.5", 670 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 671 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 672 | "engines": { 673 | "node": "6.* || 8.* || >= 10.*" 674 | } 675 | }, 676 | "node_modules/github-from-package": { 677 | "version": "0.0.0", 678 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 679 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" 680 | }, 681 | "node_modules/glob": { 682 | "version": "7.2.0", 683 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 684 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 685 | "dependencies": { 686 | "fs.realpath": "^1.0.0", 687 | "inflight": "^1.0.4", 688 | "inherits": "2", 689 | "minimatch": "^3.0.4", 690 | "once": "^1.3.0", 691 | "path-is-absolute": "^1.0.0" 692 | }, 693 | "engines": { 694 | "node": "*" 695 | }, 696 | "funding": { 697 | "url": "https://github.com/sponsors/isaacs" 698 | } 699 | }, 700 | "node_modules/has-flag": { 701 | "version": "3.0.0", 702 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 703 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 704 | "engines": { 705 | "node": ">=4" 706 | } 707 | }, 708 | "node_modules/has-unicode": { 709 | "version": "2.0.1", 710 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 711 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 712 | }, 713 | "node_modules/help-me": { 714 | "version": "3.0.0", 715 | "resolved": "https://registry.npmjs.org/help-me/-/help-me-3.0.0.tgz", 716 | "integrity": "sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==", 717 | "dependencies": { 718 | "glob": "^7.1.6", 719 | "readable-stream": "^3.6.0" 720 | } 721 | }, 722 | "node_modules/help-me/node_modules/readable-stream": { 723 | "version": "3.6.0", 724 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 725 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 726 | "dependencies": { 727 | "inherits": "^2.0.3", 728 | "string_decoder": "^1.1.1", 729 | "util-deprecate": "^1.0.1" 730 | }, 731 | "engines": { 732 | "node": ">= 6" 733 | } 734 | }, 735 | "node_modules/ieee754": { 736 | "version": "1.2.1", 737 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 738 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 739 | "funding": [ 740 | { 741 | "type": "github", 742 | "url": "https://github.com/sponsors/feross" 743 | }, 744 | { 745 | "type": "patreon", 746 | "url": "https://www.patreon.com/feross" 747 | }, 748 | { 749 | "type": "consulting", 750 | "url": "https://feross.org/support" 751 | } 752 | ] 753 | }, 754 | "node_modules/inflight": { 755 | "version": "1.0.6", 756 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 757 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 758 | "dependencies": { 759 | "once": "^1.3.0", 760 | "wrappy": "1" 761 | } 762 | }, 763 | "node_modules/inherits": { 764 | "version": "2.0.4", 765 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 766 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 767 | }, 768 | "node_modules/ini": { 769 | "version": "1.3.8", 770 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 771 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 772 | }, 773 | "node_modules/is-fullwidth-code-point": { 774 | "version": "1.0.0", 775 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 776 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 777 | "dependencies": { 778 | "number-is-nan": "^1.0.0" 779 | }, 780 | "engines": { 781 | "node": ">=0.10.0" 782 | } 783 | }, 784 | "node_modules/isarray": { 785 | "version": "1.0.0", 786 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 787 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 788 | }, 789 | "node_modules/joycon": { 790 | "version": "3.0.1", 791 | "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.0.1.tgz", 792 | "integrity": "sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA==", 793 | "engines": { 794 | "node": ">=10" 795 | } 796 | }, 797 | "node_modules/leven": { 798 | "version": "2.1.0", 799 | "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", 800 | "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", 801 | "engines": { 802 | "node": ">=0.10.0" 803 | } 804 | }, 805 | "node_modules/mimic-response": { 806 | "version": "2.1.0", 807 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", 808 | "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", 809 | "engines": { 810 | "node": ">=8" 811 | }, 812 | "funding": { 813 | "url": "https://github.com/sponsors/sindresorhus" 814 | } 815 | }, 816 | "node_modules/minimatch": { 817 | "version": "3.0.4", 818 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 819 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 820 | "dependencies": { 821 | "brace-expansion": "^1.1.7" 822 | }, 823 | "engines": { 824 | "node": "*" 825 | } 826 | }, 827 | "node_modules/minimist": { 828 | "version": "1.2.5", 829 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 830 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 831 | }, 832 | "node_modules/mkdirp-classic": { 833 | "version": "0.5.3", 834 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 835 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" 836 | }, 837 | "node_modules/mqtt": { 838 | "version": "4.2.8", 839 | "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-4.2.8.tgz", 840 | "integrity": "sha512-DJYjlXODVXtSDecN8jnNzi6ItX3+ufGsEs9OB3YV24HtkRrh7kpx8L5M1LuyF0KzaiGtWr2PzDcMGAY60KGOSA==", 841 | "dependencies": { 842 | "commist": "^1.0.0", 843 | "concat-stream": "^2.0.0", 844 | "debug": "^4.1.1", 845 | "duplexify": "^4.1.1", 846 | "help-me": "^3.0.0", 847 | "inherits": "^2.0.3", 848 | "minimist": "^1.2.5", 849 | "mqtt-packet": "^6.8.0", 850 | "pump": "^3.0.0", 851 | "readable-stream": "^3.6.0", 852 | "reinterval": "^1.1.0", 853 | "split2": "^3.1.0", 854 | "ws": "^7.5.0", 855 | "xtend": "^4.0.2" 856 | }, 857 | "bin": { 858 | "mqtt": "bin/mqtt.js", 859 | "mqtt_pub": "bin/pub.js", 860 | "mqtt_sub": "bin/sub.js" 861 | }, 862 | "engines": { 863 | "node": ">=10.0.0" 864 | } 865 | }, 866 | "node_modules/mqtt-packet": { 867 | "version": "6.10.0", 868 | "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz", 869 | "integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==", 870 | "dependencies": { 871 | "bl": "^4.0.2", 872 | "debug": "^4.1.1", 873 | "process-nextick-args": "^2.0.1" 874 | } 875 | }, 876 | "node_modules/mqtt/node_modules/readable-stream": { 877 | "version": "3.6.0", 878 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 879 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 880 | "dependencies": { 881 | "inherits": "^2.0.3", 882 | "string_decoder": "^1.1.1", 883 | "util-deprecate": "^1.0.1" 884 | }, 885 | "engines": { 886 | "node": ">= 6" 887 | } 888 | }, 889 | "node_modules/mqtt/node_modules/split2": { 890 | "version": "3.2.2", 891 | "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", 892 | "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", 893 | "dependencies": { 894 | "readable-stream": "^3.0.0" 895 | } 896 | }, 897 | "node_modules/mri": { 898 | "version": "1.1.4", 899 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", 900 | "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", 901 | "engines": { 902 | "node": ">=4" 903 | } 904 | }, 905 | "node_modules/ms": { 906 | "version": "2.1.2", 907 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 908 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 909 | }, 910 | "node_modules/nan": { 911 | "version": "2.15.0", 912 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", 913 | "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" 914 | }, 915 | "node_modules/napi-build-utils": { 916 | "version": "1.0.2", 917 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", 918 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" 919 | }, 920 | "node_modules/node-abi": { 921 | "version": "2.30.1", 922 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", 923 | "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", 924 | "dependencies": { 925 | "semver": "^5.4.1" 926 | } 927 | }, 928 | "node_modules/npmlog": { 929 | "version": "4.1.2", 930 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 931 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 932 | "dependencies": { 933 | "are-we-there-yet": "~1.1.2", 934 | "console-control-strings": "~1.1.0", 935 | "gauge": "~2.7.3", 936 | "set-blocking": "~2.0.0" 937 | } 938 | }, 939 | "node_modules/number-is-nan": { 940 | "version": "1.0.1", 941 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 942 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 943 | "engines": { 944 | "node": ">=0.10.0" 945 | } 946 | }, 947 | "node_modules/object-assign": { 948 | "version": "4.1.1", 949 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 950 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 951 | "engines": { 952 | "node": ">=0.10.0" 953 | } 954 | }, 955 | "node_modules/on-exit-leak-free": { 956 | "version": "0.2.0", 957 | "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", 958 | "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==" 959 | }, 960 | "node_modules/once": { 961 | "version": "1.4.0", 962 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 963 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 964 | "dependencies": { 965 | "wrappy": "1" 966 | } 967 | }, 968 | "node_modules/path-is-absolute": { 969 | "version": "1.0.1", 970 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 971 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 972 | "engines": { 973 | "node": ">=0.10.0" 974 | } 975 | }, 976 | "node_modules/pino": { 977 | "version": "7.2.0", 978 | "resolved": "https://registry.npmjs.org/pino/-/pino-7.2.0.tgz", 979 | "integrity": "sha512-85EiMfTy2E7S+QSHgaN7oCfnfgxv/8PxG6Yf+CRXUZbRL+Rb9qHQAEATLubjJMSl3RvfrTKNkAP3D2hNNx41Aw==", 980 | "dependencies": { 981 | "fast-redact": "^3.0.0", 982 | "fastify-warning": "^0.2.0", 983 | "get-caller-file": "^2.0.5", 984 | "on-exit-leak-free": "^0.2.0", 985 | "pino-abstract-transport": "v0.5.0", 986 | "pino-std-serializers": "^4.0.0", 987 | "quick-format-unescaped": "^4.0.3", 988 | "real-require": "^0.1.0", 989 | "safe-stable-stringify": "^2.1.0", 990 | "sonic-boom": "^2.2.1", 991 | "thread-stream": "^0.13.0" 992 | }, 993 | "bin": { 994 | "pino": "bin.js" 995 | } 996 | }, 997 | "node_modules/pino-abstract-transport": { 998 | "version": "0.5.0", 999 | "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", 1000 | "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", 1001 | "dependencies": { 1002 | "duplexify": "^4.1.2", 1003 | "split2": "^4.0.0" 1004 | } 1005 | }, 1006 | "node_modules/pino-pretty": { 1007 | "version": "7.2.0", 1008 | "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-7.2.0.tgz", 1009 | "integrity": "sha512-pkZhaF1JiyQt4BRqkLANYWuZTxavmuXh3OHsb8goeQasTFgNdzOECXkZWyPYrA0YMRa8zKoVsCzeYz9lI2NYwA==", 1010 | "dependencies": { 1011 | "args": "^5.0.1", 1012 | "colorette": "^2.0.7", 1013 | "dateformat": "^4.6.3", 1014 | "fast-safe-stringify": "^2.0.7", 1015 | "joycon": "^3.0.0", 1016 | "pino-abstract-transport": "^0.5.0", 1017 | "pump": "^3.0.0", 1018 | "readable-stream": "^3.6.0", 1019 | "rfdc": "^1.3.0", 1020 | "secure-json-parse": "^2.4.0", 1021 | "sonic-boom": "^2.2.0", 1022 | "strip-json-comments": "^3.1.1" 1023 | }, 1024 | "bin": { 1025 | "pino-pretty": "bin.js" 1026 | } 1027 | }, 1028 | "node_modules/pino-pretty/node_modules/readable-stream": { 1029 | "version": "3.6.0", 1030 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1031 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1032 | "dependencies": { 1033 | "inherits": "^2.0.3", 1034 | "string_decoder": "^1.1.1", 1035 | "util-deprecate": "^1.0.1" 1036 | }, 1037 | "engines": { 1038 | "node": ">= 6" 1039 | } 1040 | }, 1041 | "node_modules/pino-pretty/node_modules/strip-json-comments": { 1042 | "version": "3.1.1", 1043 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1044 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1045 | "engines": { 1046 | "node": ">=8" 1047 | }, 1048 | "funding": { 1049 | "url": "https://github.com/sponsors/sindresorhus" 1050 | } 1051 | }, 1052 | "node_modules/pino-std-serializers": { 1053 | "version": "4.0.0", 1054 | "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", 1055 | "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" 1056 | }, 1057 | "node_modules/prebuild-install": { 1058 | "version": "6.1.4", 1059 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", 1060 | "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", 1061 | "dependencies": { 1062 | "detect-libc": "^1.0.3", 1063 | "expand-template": "^2.0.3", 1064 | "github-from-package": "0.0.0", 1065 | "minimist": "^1.2.3", 1066 | "mkdirp-classic": "^0.5.3", 1067 | "napi-build-utils": "^1.0.1", 1068 | "node-abi": "^2.21.0", 1069 | "npmlog": "^4.0.1", 1070 | "pump": "^3.0.0", 1071 | "rc": "^1.2.7", 1072 | "simple-get": "^3.0.3", 1073 | "tar-fs": "^2.0.0", 1074 | "tunnel-agent": "^0.6.0" 1075 | }, 1076 | "bin": { 1077 | "prebuild-install": "bin.js" 1078 | }, 1079 | "engines": { 1080 | "node": ">=6" 1081 | } 1082 | }, 1083 | "node_modules/process-nextick-args": { 1084 | "version": "2.0.1", 1085 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1086 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1087 | }, 1088 | "node_modules/pump": { 1089 | "version": "3.0.0", 1090 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1091 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1092 | "dependencies": { 1093 | "end-of-stream": "^1.1.0", 1094 | "once": "^1.3.1" 1095 | } 1096 | }, 1097 | "node_modules/quick-format-unescaped": { 1098 | "version": "4.0.4", 1099 | "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 1100 | "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" 1101 | }, 1102 | "node_modules/rc": { 1103 | "version": "1.2.8", 1104 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1105 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1106 | "dependencies": { 1107 | "deep-extend": "^0.6.0", 1108 | "ini": "~1.3.0", 1109 | "minimist": "^1.2.0", 1110 | "strip-json-comments": "~2.0.1" 1111 | }, 1112 | "bin": { 1113 | "rc": "cli.js" 1114 | } 1115 | }, 1116 | "node_modules/readable-stream": { 1117 | "version": "2.3.7", 1118 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1119 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1120 | "dependencies": { 1121 | "core-util-is": "~1.0.0", 1122 | "inherits": "~2.0.3", 1123 | "isarray": "~1.0.0", 1124 | "process-nextick-args": "~2.0.0", 1125 | "safe-buffer": "~5.1.1", 1126 | "string_decoder": "~1.1.1", 1127 | "util-deprecate": "~1.0.1" 1128 | } 1129 | }, 1130 | "node_modules/real-require": { 1131 | "version": "0.1.0", 1132 | "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", 1133 | "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", 1134 | "engines": { 1135 | "node": ">= 12.13.0" 1136 | } 1137 | }, 1138 | "node_modules/reinterval": { 1139 | "version": "1.1.0", 1140 | "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", 1141 | "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=" 1142 | }, 1143 | "node_modules/require-directory": { 1144 | "version": "2.1.1", 1145 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1146 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1147 | "engines": { 1148 | "node": ">=0.10.0" 1149 | } 1150 | }, 1151 | "node_modules/rfdc": { 1152 | "version": "1.3.0", 1153 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", 1154 | "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" 1155 | }, 1156 | "node_modules/safe-buffer": { 1157 | "version": "5.1.2", 1158 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1159 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1160 | }, 1161 | "node_modules/safe-stable-stringify": { 1162 | "version": "2.2.0", 1163 | "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.2.0.tgz", 1164 | "integrity": "sha512-C6AuMdYPuPV/P1leplHNu0lgc2LAElq/g3TdoksDCIVtBhr78o/CH03bt/9SKqugFbKU9CUjsNlCu0fjtQzQUw==", 1165 | "engines": { 1166 | "node": ">=10" 1167 | } 1168 | }, 1169 | "node_modules/secure-json-parse": { 1170 | "version": "2.4.0", 1171 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz", 1172 | "integrity": "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==" 1173 | }, 1174 | "node_modules/semver": { 1175 | "version": "5.7.1", 1176 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1177 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1178 | "bin": { 1179 | "semver": "bin/semver" 1180 | } 1181 | }, 1182 | "node_modules/serialport": { 1183 | "version": "9.2.5", 1184 | "resolved": "https://registry.npmjs.org/serialport/-/serialport-9.2.5.tgz", 1185 | "integrity": "sha512-nsDsD2GN/43T2a8jQYr1HH76gmDZ575Ts8FOdcBRUY8ecaI16BPbXa612cPPkQjOfg28+KL5qtQL9c0vvTaidg==", 1186 | "dependencies": { 1187 | "@serialport/binding-mock": "9.2.4", 1188 | "@serialport/bindings": "9.2.5", 1189 | "@serialport/parser-byte-length": "9.2.4", 1190 | "@serialport/parser-cctalk": "9.2.4", 1191 | "@serialport/parser-delimiter": "9.2.4", 1192 | "@serialport/parser-inter-byte-timeout": "9.2.4", 1193 | "@serialport/parser-readline": "9.2.4", 1194 | "@serialport/parser-ready": "9.2.4", 1195 | "@serialport/parser-regex": "9.2.4", 1196 | "@serialport/stream": "9.2.4", 1197 | "debug": "^4.3.2" 1198 | }, 1199 | "engines": { 1200 | "node": ">=10.0.0" 1201 | }, 1202 | "funding": { 1203 | "url": "https://opencollective.com/serialport/donate" 1204 | } 1205 | }, 1206 | "node_modules/set-blocking": { 1207 | "version": "2.0.0", 1208 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1209 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 1210 | }, 1211 | "node_modules/signal-exit": { 1212 | "version": "3.0.5", 1213 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", 1214 | "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" 1215 | }, 1216 | "node_modules/simple-concat": { 1217 | "version": "1.0.1", 1218 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 1219 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 1220 | "funding": [ 1221 | { 1222 | "type": "github", 1223 | "url": "https://github.com/sponsors/feross" 1224 | }, 1225 | { 1226 | "type": "patreon", 1227 | "url": "https://www.patreon.com/feross" 1228 | }, 1229 | { 1230 | "type": "consulting", 1231 | "url": "https://feross.org/support" 1232 | } 1233 | ] 1234 | }, 1235 | "node_modules/simple-get": { 1236 | "version": "3.1.0", 1237 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", 1238 | "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", 1239 | "dependencies": { 1240 | "decompress-response": "^4.2.0", 1241 | "once": "^1.3.1", 1242 | "simple-concat": "^1.0.0" 1243 | } 1244 | }, 1245 | "node_modules/sonic-boom": { 1246 | "version": "2.3.1", 1247 | "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.3.1.tgz", 1248 | "integrity": "sha512-o0vJPsRiCW5Q0EmRKjNiiYGy2DqSXcxk4mY9vIBSPwmkH/e/vJ2Tq8EECd5NTiO77x8vlVN+ykDjRQJTqf7eKg==", 1249 | "dependencies": { 1250 | "atomic-sleep": "^1.0.0" 1251 | } 1252 | }, 1253 | "node_modules/split2": { 1254 | "version": "4.1.0", 1255 | "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", 1256 | "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", 1257 | "engines": { 1258 | "node": ">= 10.x" 1259 | } 1260 | }, 1261 | "node_modules/stream-shift": { 1262 | "version": "1.0.1", 1263 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", 1264 | "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" 1265 | }, 1266 | "node_modules/string_decoder": { 1267 | "version": "1.1.1", 1268 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1269 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1270 | "dependencies": { 1271 | "safe-buffer": "~5.1.0" 1272 | } 1273 | }, 1274 | "node_modules/string-width": { 1275 | "version": "1.0.2", 1276 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1277 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1278 | "dependencies": { 1279 | "code-point-at": "^1.0.0", 1280 | "is-fullwidth-code-point": "^1.0.0", 1281 | "strip-ansi": "^3.0.0" 1282 | }, 1283 | "engines": { 1284 | "node": ">=0.10.0" 1285 | } 1286 | }, 1287 | "node_modules/strip-ansi": { 1288 | "version": "3.0.1", 1289 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1290 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1291 | "dependencies": { 1292 | "ansi-regex": "^2.0.0" 1293 | }, 1294 | "engines": { 1295 | "node": ">=0.10.0" 1296 | } 1297 | }, 1298 | "node_modules/strip-json-comments": { 1299 | "version": "2.0.1", 1300 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1301 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1302 | "engines": { 1303 | "node": ">=0.10.0" 1304 | } 1305 | }, 1306 | "node_modules/supports-color": { 1307 | "version": "5.5.0", 1308 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1309 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1310 | "dependencies": { 1311 | "has-flag": "^3.0.0" 1312 | }, 1313 | "engines": { 1314 | "node": ">=4" 1315 | } 1316 | }, 1317 | "node_modules/tar-fs": { 1318 | "version": "2.1.1", 1319 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", 1320 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", 1321 | "dependencies": { 1322 | "chownr": "^1.1.1", 1323 | "mkdirp-classic": "^0.5.2", 1324 | "pump": "^3.0.0", 1325 | "tar-stream": "^2.1.4" 1326 | } 1327 | }, 1328 | "node_modules/tar-stream": { 1329 | "version": "2.2.0", 1330 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 1331 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 1332 | "dependencies": { 1333 | "bl": "^4.0.3", 1334 | "end-of-stream": "^1.4.1", 1335 | "fs-constants": "^1.0.0", 1336 | "inherits": "^2.0.3", 1337 | "readable-stream": "^3.1.1" 1338 | }, 1339 | "engines": { 1340 | "node": ">=6" 1341 | } 1342 | }, 1343 | "node_modules/tar-stream/node_modules/readable-stream": { 1344 | "version": "3.6.0", 1345 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1346 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1347 | "dependencies": { 1348 | "inherits": "^2.0.3", 1349 | "string_decoder": "^1.1.1", 1350 | "util-deprecate": "^1.0.1" 1351 | }, 1352 | "engines": { 1353 | "node": ">= 6" 1354 | } 1355 | }, 1356 | "node_modules/thread-stream": { 1357 | "version": "0.13.0", 1358 | "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.13.0.tgz", 1359 | "integrity": "sha512-kTMZeX4Dzlb1zZ00/01aerGaTw2i8NE4sWF0TvF1uXewRhCiUjCvatQkvxIvFqauWG2ADFS2Wpd3qBeYL9i3dg==", 1360 | "dependencies": { 1361 | "real-require": "^0.1.0" 1362 | } 1363 | }, 1364 | "node_modules/tunnel-agent": { 1365 | "version": "0.6.0", 1366 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1367 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1368 | "dependencies": { 1369 | "safe-buffer": "^5.0.1" 1370 | }, 1371 | "engines": { 1372 | "node": "*" 1373 | } 1374 | }, 1375 | "node_modules/typedarray": { 1376 | "version": "0.0.6", 1377 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1378 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 1379 | }, 1380 | "node_modules/util-deprecate": { 1381 | "version": "1.0.2", 1382 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1383 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1384 | }, 1385 | "node_modules/wide-align": { 1386 | "version": "1.1.5", 1387 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 1388 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 1389 | "dependencies": { 1390 | "string-width": "^1.0.2 || 2 || 3 || 4" 1391 | } 1392 | }, 1393 | "node_modules/wrap-ansi": { 1394 | "version": "7.0.0", 1395 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1396 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1397 | "dependencies": { 1398 | "ansi-styles": "^4.0.0", 1399 | "string-width": "^4.1.0", 1400 | "strip-ansi": "^6.0.0" 1401 | }, 1402 | "engines": { 1403 | "node": ">=10" 1404 | }, 1405 | "funding": { 1406 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1407 | } 1408 | }, 1409 | "node_modules/wrap-ansi/node_modules/ansi-regex": { 1410 | "version": "5.0.1", 1411 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1412 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1413 | "engines": { 1414 | "node": ">=8" 1415 | } 1416 | }, 1417 | "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { 1418 | "version": "3.0.0", 1419 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1420 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1421 | "engines": { 1422 | "node": ">=8" 1423 | } 1424 | }, 1425 | "node_modules/wrap-ansi/node_modules/string-width": { 1426 | "version": "4.2.3", 1427 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1428 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1429 | "dependencies": { 1430 | "emoji-regex": "^8.0.0", 1431 | "is-fullwidth-code-point": "^3.0.0", 1432 | "strip-ansi": "^6.0.1" 1433 | }, 1434 | "engines": { 1435 | "node": ">=8" 1436 | } 1437 | }, 1438 | "node_modules/wrap-ansi/node_modules/strip-ansi": { 1439 | "version": "6.0.1", 1440 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1441 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1442 | "dependencies": { 1443 | "ansi-regex": "^5.0.1" 1444 | }, 1445 | "engines": { 1446 | "node": ">=8" 1447 | } 1448 | }, 1449 | "node_modules/wrappy": { 1450 | "version": "1.0.2", 1451 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1452 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1453 | }, 1454 | "node_modules/ws": { 1455 | "version": "7.5.5", 1456 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", 1457 | "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", 1458 | "engines": { 1459 | "node": ">=8.3.0" 1460 | }, 1461 | "peerDependencies": { 1462 | "bufferutil": "^4.0.1", 1463 | "utf-8-validate": "^5.0.2" 1464 | }, 1465 | "peerDependenciesMeta": { 1466 | "bufferutil": { 1467 | "optional": true 1468 | }, 1469 | "utf-8-validate": { 1470 | "optional": true 1471 | } 1472 | } 1473 | }, 1474 | "node_modules/xtend": { 1475 | "version": "4.0.2", 1476 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1477 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1478 | "engines": { 1479 | "node": ">=0.4" 1480 | } 1481 | }, 1482 | "node_modules/y18n": { 1483 | "version": "5.0.8", 1484 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1485 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1486 | "engines": { 1487 | "node": ">=10" 1488 | } 1489 | }, 1490 | "node_modules/yargs": { 1491 | "version": "17.2.1", 1492 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", 1493 | "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", 1494 | "dependencies": { 1495 | "cliui": "^7.0.2", 1496 | "escalade": "^3.1.1", 1497 | "get-caller-file": "^2.0.5", 1498 | "require-directory": "^2.1.1", 1499 | "string-width": "^4.2.0", 1500 | "y18n": "^5.0.5", 1501 | "yargs-parser": "^20.2.2" 1502 | }, 1503 | "engines": { 1504 | "node": ">=12" 1505 | } 1506 | }, 1507 | "node_modules/yargs-parser": { 1508 | "version": "20.2.9", 1509 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 1510 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 1511 | "engines": { 1512 | "node": ">=10" 1513 | } 1514 | }, 1515 | "node_modules/yargs/node_modules/ansi-regex": { 1516 | "version": "5.0.1", 1517 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1518 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1519 | "engines": { 1520 | "node": ">=8" 1521 | } 1522 | }, 1523 | "node_modules/yargs/node_modules/is-fullwidth-code-point": { 1524 | "version": "3.0.0", 1525 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1526 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1527 | "engines": { 1528 | "node": ">=8" 1529 | } 1530 | }, 1531 | "node_modules/yargs/node_modules/string-width": { 1532 | "version": "4.2.3", 1533 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1534 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1535 | "dependencies": { 1536 | "emoji-regex": "^8.0.0", 1537 | "is-fullwidth-code-point": "^3.0.0", 1538 | "strip-ansi": "^6.0.1" 1539 | }, 1540 | "engines": { 1541 | "node": ">=8" 1542 | } 1543 | }, 1544 | "node_modules/yargs/node_modules/strip-ansi": { 1545 | "version": "6.0.1", 1546 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1547 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1548 | "dependencies": { 1549 | "ansi-regex": "^5.0.1" 1550 | }, 1551 | "engines": { 1552 | "node": ">=8" 1553 | } 1554 | } 1555 | }, 1556 | "dependencies": { 1557 | "@serialport/binding-abstract": { 1558 | "version": "9.2.3", 1559 | "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz", 1560 | "integrity": "sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==", 1561 | "requires": { 1562 | "debug": "^4.3.2" 1563 | } 1564 | }, 1565 | "@serialport/binding-mock": { 1566 | "version": "9.2.4", 1567 | "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.2.4.tgz", 1568 | "integrity": "sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g==", 1569 | "requires": { 1570 | "@serialport/binding-abstract": "9.2.3", 1571 | "debug": "^4.3.2" 1572 | } 1573 | }, 1574 | "@serialport/bindings": { 1575 | "version": "9.2.5", 1576 | "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.2.5.tgz", 1577 | "integrity": "sha512-fyabNg56gWbOMuYJc5c45z94sANC/WzTnGeML7Nr1IYVk0SJ1uksN4ETI8Nea9ZAtr4DhNiIMQ3/IOkyof6Tqg==", 1578 | "requires": { 1579 | "@serialport/binding-abstract": "9.2.3", 1580 | "@serialport/parser-readline": "9.2.4", 1581 | "bindings": "^1.5.0", 1582 | "debug": "^4.3.2", 1583 | "nan": "^2.15.0", 1584 | "prebuild-install": "^6.1.4" 1585 | } 1586 | }, 1587 | "@serialport/parser-byte-length": { 1588 | "version": "9.2.4", 1589 | "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz", 1590 | "integrity": "sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg==" 1591 | }, 1592 | "@serialport/parser-cctalk": { 1593 | "version": "9.2.4", 1594 | "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz", 1595 | "integrity": "sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ==" 1596 | }, 1597 | "@serialport/parser-delimiter": { 1598 | "version": "9.2.4", 1599 | "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz", 1600 | "integrity": "sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==" 1601 | }, 1602 | "@serialport/parser-inter-byte-timeout": { 1603 | "version": "9.2.4", 1604 | "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz", 1605 | "integrity": "sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A==" 1606 | }, 1607 | "@serialport/parser-readline": { 1608 | "version": "9.2.4", 1609 | "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.2.4.tgz", 1610 | "integrity": "sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==", 1611 | "requires": { 1612 | "@serialport/parser-delimiter": "9.2.4" 1613 | } 1614 | }, 1615 | "@serialport/parser-ready": { 1616 | "version": "9.2.4", 1617 | "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.2.4.tgz", 1618 | "integrity": "sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw==" 1619 | }, 1620 | "@serialport/parser-regex": { 1621 | "version": "9.2.4", 1622 | "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.2.4.tgz", 1623 | "integrity": "sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ==" 1624 | }, 1625 | "@serialport/stream": { 1626 | "version": "9.2.4", 1627 | "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-9.2.4.tgz", 1628 | "integrity": "sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ==", 1629 | "requires": { 1630 | "debug": "^4.3.2" 1631 | } 1632 | }, 1633 | "ansi-regex": { 1634 | "version": "2.1.1", 1635 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 1636 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 1637 | }, 1638 | "ansi-styles": { 1639 | "version": "4.3.0", 1640 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1641 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1642 | "requires": { 1643 | "color-convert": "^2.0.1" 1644 | } 1645 | }, 1646 | "aproba": { 1647 | "version": "1.2.0", 1648 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 1649 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 1650 | }, 1651 | "are-we-there-yet": { 1652 | "version": "1.1.7", 1653 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", 1654 | "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", 1655 | "requires": { 1656 | "delegates": "^1.0.0", 1657 | "readable-stream": "^2.0.6" 1658 | } 1659 | }, 1660 | "args": { 1661 | "version": "5.0.1", 1662 | "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", 1663 | "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", 1664 | "requires": { 1665 | "camelcase": "5.0.0", 1666 | "chalk": "2.4.2", 1667 | "leven": "2.1.0", 1668 | "mri": "1.1.4" 1669 | } 1670 | }, 1671 | "async-mqtt": { 1672 | "version": "2.6.1", 1673 | "resolved": "https://registry.npmjs.org/async-mqtt/-/async-mqtt-2.6.1.tgz", 1674 | "integrity": "sha512-EkXAwRzwMaPC6ji0EvNeM5OMe6VjMhEKVJJUN7gu/hGzkcDpZtaI34nUwdwCMbjQB3pnuSOHqQMFKsUpg+D8kA==", 1675 | "requires": { 1676 | "mqtt": "^4.1.0" 1677 | } 1678 | }, 1679 | "atomic-sleep": { 1680 | "version": "1.0.0", 1681 | "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 1682 | "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" 1683 | }, 1684 | "balanced-match": { 1685 | "version": "1.0.2", 1686 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1687 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 1688 | }, 1689 | "base64-js": { 1690 | "version": "1.5.1", 1691 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1692 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1693 | }, 1694 | "bindings": { 1695 | "version": "1.5.0", 1696 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 1697 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 1698 | "requires": { 1699 | "file-uri-to-path": "1.0.0" 1700 | } 1701 | }, 1702 | "bl": { 1703 | "version": "4.1.0", 1704 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 1705 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 1706 | "requires": { 1707 | "buffer": "^5.5.0", 1708 | "inherits": "^2.0.4", 1709 | "readable-stream": "^3.4.0" 1710 | }, 1711 | "dependencies": { 1712 | "readable-stream": { 1713 | "version": "3.6.0", 1714 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1715 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1716 | "requires": { 1717 | "inherits": "^2.0.3", 1718 | "string_decoder": "^1.1.1", 1719 | "util-deprecate": "^1.0.1" 1720 | } 1721 | } 1722 | } 1723 | }, 1724 | "brace-expansion": { 1725 | "version": "1.1.11", 1726 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1727 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1728 | "requires": { 1729 | "balanced-match": "^1.0.0", 1730 | "concat-map": "0.0.1" 1731 | } 1732 | }, 1733 | "buffer": { 1734 | "version": "5.7.1", 1735 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 1736 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 1737 | "requires": { 1738 | "base64-js": "^1.3.1", 1739 | "ieee754": "^1.1.13" 1740 | } 1741 | }, 1742 | "buffer-from": { 1743 | "version": "1.1.2", 1744 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1745 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 1746 | }, 1747 | "camelcase": { 1748 | "version": "5.0.0", 1749 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", 1750 | "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" 1751 | }, 1752 | "chalk": { 1753 | "version": "2.4.2", 1754 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1755 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1756 | "requires": { 1757 | "ansi-styles": "^3.2.1", 1758 | "escape-string-regexp": "^1.0.5", 1759 | "supports-color": "^5.3.0" 1760 | }, 1761 | "dependencies": { 1762 | "ansi-styles": { 1763 | "version": "3.2.1", 1764 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1765 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1766 | "requires": { 1767 | "color-convert": "^1.9.0" 1768 | } 1769 | }, 1770 | "color-convert": { 1771 | "version": "1.9.3", 1772 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1773 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1774 | "requires": { 1775 | "color-name": "1.1.3" 1776 | } 1777 | }, 1778 | "color-name": { 1779 | "version": "1.1.3", 1780 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1781 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 1782 | } 1783 | } 1784 | }, 1785 | "chownr": { 1786 | "version": "1.1.4", 1787 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 1788 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 1789 | }, 1790 | "cliui": { 1791 | "version": "7.0.4", 1792 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 1793 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 1794 | "requires": { 1795 | "string-width": "^4.2.0", 1796 | "strip-ansi": "^6.0.0", 1797 | "wrap-ansi": "^7.0.0" 1798 | }, 1799 | "dependencies": { 1800 | "ansi-regex": { 1801 | "version": "5.0.1", 1802 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1803 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 1804 | }, 1805 | "is-fullwidth-code-point": { 1806 | "version": "3.0.0", 1807 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1808 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1809 | }, 1810 | "string-width": { 1811 | "version": "4.2.3", 1812 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1813 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1814 | "requires": { 1815 | "emoji-regex": "^8.0.0", 1816 | "is-fullwidth-code-point": "^3.0.0", 1817 | "strip-ansi": "^6.0.1" 1818 | } 1819 | }, 1820 | "strip-ansi": { 1821 | "version": "6.0.1", 1822 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1823 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1824 | "requires": { 1825 | "ansi-regex": "^5.0.1" 1826 | } 1827 | } 1828 | } 1829 | }, 1830 | "code-point-at": { 1831 | "version": "1.1.0", 1832 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 1833 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 1834 | }, 1835 | "color-convert": { 1836 | "version": "2.0.1", 1837 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1838 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1839 | "requires": { 1840 | "color-name": "~1.1.4" 1841 | } 1842 | }, 1843 | "color-name": { 1844 | "version": "1.1.4", 1845 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1846 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1847 | }, 1848 | "colorette": { 1849 | "version": "2.0.16", 1850 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", 1851 | "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" 1852 | }, 1853 | "commist": { 1854 | "version": "1.1.0", 1855 | "resolved": "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz", 1856 | "integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==", 1857 | "requires": { 1858 | "leven": "^2.1.0", 1859 | "minimist": "^1.1.0" 1860 | } 1861 | }, 1862 | "concat-map": { 1863 | "version": "0.0.1", 1864 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1865 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 1866 | }, 1867 | "concat-stream": { 1868 | "version": "2.0.0", 1869 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", 1870 | "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", 1871 | "requires": { 1872 | "buffer-from": "^1.0.0", 1873 | "inherits": "^2.0.3", 1874 | "readable-stream": "^3.0.2", 1875 | "typedarray": "^0.0.6" 1876 | }, 1877 | "dependencies": { 1878 | "readable-stream": { 1879 | "version": "3.6.0", 1880 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1881 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1882 | "requires": { 1883 | "inherits": "^2.0.3", 1884 | "string_decoder": "^1.1.1", 1885 | "util-deprecate": "^1.0.1" 1886 | } 1887 | } 1888 | } 1889 | }, 1890 | "console-control-strings": { 1891 | "version": "1.1.0", 1892 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 1893 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 1894 | }, 1895 | "core-util-is": { 1896 | "version": "1.0.3", 1897 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 1898 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 1899 | }, 1900 | "dateformat": { 1901 | "version": "4.6.3", 1902 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", 1903 | "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" 1904 | }, 1905 | "debug": { 1906 | "version": "4.3.2", 1907 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1908 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1909 | "requires": { 1910 | "ms": "2.1.2" 1911 | } 1912 | }, 1913 | "decompress-response": { 1914 | "version": "4.2.1", 1915 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", 1916 | "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", 1917 | "requires": { 1918 | "mimic-response": "^2.0.0" 1919 | } 1920 | }, 1921 | "deep-extend": { 1922 | "version": "0.6.0", 1923 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1924 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 1925 | }, 1926 | "delegates": { 1927 | "version": "1.0.0", 1928 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 1929 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 1930 | }, 1931 | "detect-libc": { 1932 | "version": "1.0.3", 1933 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 1934 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 1935 | }, 1936 | "duplexify": { 1937 | "version": "4.1.2", 1938 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", 1939 | "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", 1940 | "requires": { 1941 | "end-of-stream": "^1.4.1", 1942 | "inherits": "^2.0.3", 1943 | "readable-stream": "^3.1.1", 1944 | "stream-shift": "^1.0.0" 1945 | }, 1946 | "dependencies": { 1947 | "readable-stream": { 1948 | "version": "3.6.0", 1949 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1950 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1951 | "requires": { 1952 | "inherits": "^2.0.3", 1953 | "string_decoder": "^1.1.1", 1954 | "util-deprecate": "^1.0.1" 1955 | } 1956 | } 1957 | } 1958 | }, 1959 | "emoji-regex": { 1960 | "version": "8.0.0", 1961 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1962 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1963 | }, 1964 | "end-of-stream": { 1965 | "version": "1.4.4", 1966 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1967 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1968 | "requires": { 1969 | "once": "^1.4.0" 1970 | } 1971 | }, 1972 | "escalade": { 1973 | "version": "3.1.1", 1974 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1975 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 1976 | }, 1977 | "escape-string-regexp": { 1978 | "version": "1.0.5", 1979 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1980 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1981 | }, 1982 | "expand-template": { 1983 | "version": "2.0.3", 1984 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 1985 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" 1986 | }, 1987 | "fast-redact": { 1988 | "version": "3.0.2", 1989 | "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.2.tgz", 1990 | "integrity": "sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg==" 1991 | }, 1992 | "fast-safe-stringify": { 1993 | "version": "2.1.1", 1994 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", 1995 | "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" 1996 | }, 1997 | "fastify-warning": { 1998 | "version": "0.2.0", 1999 | "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz", 2000 | "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==" 2001 | }, 2002 | "file-uri-to-path": { 2003 | "version": "1.0.0", 2004 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 2005 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 2006 | }, 2007 | "fs-constants": { 2008 | "version": "1.0.0", 2009 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 2010 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 2011 | }, 2012 | "fs.realpath": { 2013 | "version": "1.0.0", 2014 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2015 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 2016 | }, 2017 | "gauge": { 2018 | "version": "2.7.4", 2019 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 2020 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 2021 | "requires": { 2022 | "aproba": "^1.0.3", 2023 | "console-control-strings": "^1.0.0", 2024 | "has-unicode": "^2.0.0", 2025 | "object-assign": "^4.1.0", 2026 | "signal-exit": "^3.0.0", 2027 | "string-width": "^1.0.1", 2028 | "strip-ansi": "^3.0.1", 2029 | "wide-align": "^1.1.0" 2030 | } 2031 | }, 2032 | "get-caller-file": { 2033 | "version": "2.0.5", 2034 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2035 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 2036 | }, 2037 | "github-from-package": { 2038 | "version": "0.0.0", 2039 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 2040 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" 2041 | }, 2042 | "glob": { 2043 | "version": "7.2.0", 2044 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 2045 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 2046 | "requires": { 2047 | "fs.realpath": "^1.0.0", 2048 | "inflight": "^1.0.4", 2049 | "inherits": "2", 2050 | "minimatch": "^3.0.4", 2051 | "once": "^1.3.0", 2052 | "path-is-absolute": "^1.0.0" 2053 | } 2054 | }, 2055 | "has-flag": { 2056 | "version": "3.0.0", 2057 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2058 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 2059 | }, 2060 | "has-unicode": { 2061 | "version": "2.0.1", 2062 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 2063 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 2064 | }, 2065 | "help-me": { 2066 | "version": "3.0.0", 2067 | "resolved": "https://registry.npmjs.org/help-me/-/help-me-3.0.0.tgz", 2068 | "integrity": "sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==", 2069 | "requires": { 2070 | "glob": "^7.1.6", 2071 | "readable-stream": "^3.6.0" 2072 | }, 2073 | "dependencies": { 2074 | "readable-stream": { 2075 | "version": "3.6.0", 2076 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2077 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2078 | "requires": { 2079 | "inherits": "^2.0.3", 2080 | "string_decoder": "^1.1.1", 2081 | "util-deprecate": "^1.0.1" 2082 | } 2083 | } 2084 | } 2085 | }, 2086 | "ieee754": { 2087 | "version": "1.2.1", 2088 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 2089 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 2090 | }, 2091 | "inflight": { 2092 | "version": "1.0.6", 2093 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2094 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2095 | "requires": { 2096 | "once": "^1.3.0", 2097 | "wrappy": "1" 2098 | } 2099 | }, 2100 | "inherits": { 2101 | "version": "2.0.4", 2102 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2103 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 2104 | }, 2105 | "ini": { 2106 | "version": "1.3.8", 2107 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 2108 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 2109 | }, 2110 | "is-fullwidth-code-point": { 2111 | "version": "1.0.0", 2112 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 2113 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 2114 | "requires": { 2115 | "number-is-nan": "^1.0.0" 2116 | } 2117 | }, 2118 | "isarray": { 2119 | "version": "1.0.0", 2120 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2121 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 2122 | }, 2123 | "joycon": { 2124 | "version": "3.0.1", 2125 | "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.0.1.tgz", 2126 | "integrity": "sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA==" 2127 | }, 2128 | "leven": { 2129 | "version": "2.1.0", 2130 | "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", 2131 | "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" 2132 | }, 2133 | "mimic-response": { 2134 | "version": "2.1.0", 2135 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", 2136 | "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" 2137 | }, 2138 | "minimatch": { 2139 | "version": "3.0.4", 2140 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2141 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2142 | "requires": { 2143 | "brace-expansion": "^1.1.7" 2144 | } 2145 | }, 2146 | "minimist": { 2147 | "version": "1.2.5", 2148 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 2149 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 2150 | }, 2151 | "mkdirp-classic": { 2152 | "version": "0.5.3", 2153 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 2154 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" 2155 | }, 2156 | "mqtt": { 2157 | "version": "4.2.8", 2158 | "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-4.2.8.tgz", 2159 | "integrity": "sha512-DJYjlXODVXtSDecN8jnNzi6ItX3+ufGsEs9OB3YV24HtkRrh7kpx8L5M1LuyF0KzaiGtWr2PzDcMGAY60KGOSA==", 2160 | "requires": { 2161 | "commist": "^1.0.0", 2162 | "concat-stream": "^2.0.0", 2163 | "debug": "^4.1.1", 2164 | "duplexify": "^4.1.1", 2165 | "help-me": "^3.0.0", 2166 | "inherits": "^2.0.3", 2167 | "minimist": "^1.2.5", 2168 | "mqtt-packet": "^6.8.0", 2169 | "pump": "^3.0.0", 2170 | "readable-stream": "^3.6.0", 2171 | "reinterval": "^1.1.0", 2172 | "split2": "^3.1.0", 2173 | "ws": "^7.5.0", 2174 | "xtend": "^4.0.2" 2175 | }, 2176 | "dependencies": { 2177 | "readable-stream": { 2178 | "version": "3.6.0", 2179 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2180 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2181 | "requires": { 2182 | "inherits": "^2.0.3", 2183 | "string_decoder": "^1.1.1", 2184 | "util-deprecate": "^1.0.1" 2185 | } 2186 | }, 2187 | "split2": { 2188 | "version": "3.2.2", 2189 | "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", 2190 | "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", 2191 | "requires": { 2192 | "readable-stream": "^3.0.0" 2193 | } 2194 | } 2195 | } 2196 | }, 2197 | "mqtt-packet": { 2198 | "version": "6.10.0", 2199 | "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz", 2200 | "integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==", 2201 | "requires": { 2202 | "bl": "^4.0.2", 2203 | "debug": "^4.1.1", 2204 | "process-nextick-args": "^2.0.1" 2205 | } 2206 | }, 2207 | "mri": { 2208 | "version": "1.1.4", 2209 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", 2210 | "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==" 2211 | }, 2212 | "ms": { 2213 | "version": "2.1.2", 2214 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2215 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2216 | }, 2217 | "nan": { 2218 | "version": "2.15.0", 2219 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", 2220 | "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" 2221 | }, 2222 | "napi-build-utils": { 2223 | "version": "1.0.2", 2224 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", 2225 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" 2226 | }, 2227 | "node-abi": { 2228 | "version": "2.30.1", 2229 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", 2230 | "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", 2231 | "requires": { 2232 | "semver": "^5.4.1" 2233 | } 2234 | }, 2235 | "npmlog": { 2236 | "version": "4.1.2", 2237 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 2238 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 2239 | "requires": { 2240 | "are-we-there-yet": "~1.1.2", 2241 | "console-control-strings": "~1.1.0", 2242 | "gauge": "~2.7.3", 2243 | "set-blocking": "~2.0.0" 2244 | } 2245 | }, 2246 | "number-is-nan": { 2247 | "version": "1.0.1", 2248 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2249 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 2250 | }, 2251 | "object-assign": { 2252 | "version": "4.1.1", 2253 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2254 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 2255 | }, 2256 | "on-exit-leak-free": { 2257 | "version": "0.2.0", 2258 | "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", 2259 | "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==" 2260 | }, 2261 | "once": { 2262 | "version": "1.4.0", 2263 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2264 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2265 | "requires": { 2266 | "wrappy": "1" 2267 | } 2268 | }, 2269 | "path-is-absolute": { 2270 | "version": "1.0.1", 2271 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2272 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 2273 | }, 2274 | "pino": { 2275 | "version": "7.2.0", 2276 | "resolved": "https://registry.npmjs.org/pino/-/pino-7.2.0.tgz", 2277 | "integrity": "sha512-85EiMfTy2E7S+QSHgaN7oCfnfgxv/8PxG6Yf+CRXUZbRL+Rb9qHQAEATLubjJMSl3RvfrTKNkAP3D2hNNx41Aw==", 2278 | "requires": { 2279 | "fast-redact": "^3.0.0", 2280 | "fastify-warning": "^0.2.0", 2281 | "get-caller-file": "^2.0.5", 2282 | "on-exit-leak-free": "^0.2.0", 2283 | "pino-abstract-transport": "v0.5.0", 2284 | "pino-std-serializers": "^4.0.0", 2285 | "quick-format-unescaped": "^4.0.3", 2286 | "real-require": "^0.1.0", 2287 | "safe-stable-stringify": "^2.1.0", 2288 | "sonic-boom": "^2.2.1", 2289 | "thread-stream": "^0.13.0" 2290 | } 2291 | }, 2292 | "pino-abstract-transport": { 2293 | "version": "0.5.0", 2294 | "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", 2295 | "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", 2296 | "requires": { 2297 | "duplexify": "^4.1.2", 2298 | "split2": "^4.0.0" 2299 | } 2300 | }, 2301 | "pino-pretty": { 2302 | "version": "7.2.0", 2303 | "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-7.2.0.tgz", 2304 | "integrity": "sha512-pkZhaF1JiyQt4BRqkLANYWuZTxavmuXh3OHsb8goeQasTFgNdzOECXkZWyPYrA0YMRa8zKoVsCzeYz9lI2NYwA==", 2305 | "requires": { 2306 | "args": "^5.0.1", 2307 | "colorette": "^2.0.7", 2308 | "dateformat": "^4.6.3", 2309 | "fast-safe-stringify": "^2.0.7", 2310 | "joycon": "^3.0.0", 2311 | "pino-abstract-transport": "^0.5.0", 2312 | "pump": "^3.0.0", 2313 | "readable-stream": "^3.6.0", 2314 | "rfdc": "^1.3.0", 2315 | "secure-json-parse": "^2.4.0", 2316 | "sonic-boom": "^2.2.0", 2317 | "strip-json-comments": "^3.1.1" 2318 | }, 2319 | "dependencies": { 2320 | "readable-stream": { 2321 | "version": "3.6.0", 2322 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2323 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2324 | "requires": { 2325 | "inherits": "^2.0.3", 2326 | "string_decoder": "^1.1.1", 2327 | "util-deprecate": "^1.0.1" 2328 | } 2329 | }, 2330 | "strip-json-comments": { 2331 | "version": "3.1.1", 2332 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2333 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" 2334 | } 2335 | } 2336 | }, 2337 | "pino-std-serializers": { 2338 | "version": "4.0.0", 2339 | "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", 2340 | "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" 2341 | }, 2342 | "prebuild-install": { 2343 | "version": "6.1.4", 2344 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", 2345 | "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", 2346 | "requires": { 2347 | "detect-libc": "^1.0.3", 2348 | "expand-template": "^2.0.3", 2349 | "github-from-package": "0.0.0", 2350 | "minimist": "^1.2.3", 2351 | "mkdirp-classic": "^0.5.3", 2352 | "napi-build-utils": "^1.0.1", 2353 | "node-abi": "^2.21.0", 2354 | "npmlog": "^4.0.1", 2355 | "pump": "^3.0.0", 2356 | "rc": "^1.2.7", 2357 | "simple-get": "^3.0.3", 2358 | "tar-fs": "^2.0.0", 2359 | "tunnel-agent": "^0.6.0" 2360 | } 2361 | }, 2362 | "process-nextick-args": { 2363 | "version": "2.0.1", 2364 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2365 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 2366 | }, 2367 | "pump": { 2368 | "version": "3.0.0", 2369 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2370 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2371 | "requires": { 2372 | "end-of-stream": "^1.1.0", 2373 | "once": "^1.3.1" 2374 | } 2375 | }, 2376 | "quick-format-unescaped": { 2377 | "version": "4.0.4", 2378 | "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 2379 | "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" 2380 | }, 2381 | "rc": { 2382 | "version": "1.2.8", 2383 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2384 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2385 | "requires": { 2386 | "deep-extend": "^0.6.0", 2387 | "ini": "~1.3.0", 2388 | "minimist": "^1.2.0", 2389 | "strip-json-comments": "~2.0.1" 2390 | } 2391 | }, 2392 | "readable-stream": { 2393 | "version": "2.3.7", 2394 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 2395 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 2396 | "requires": { 2397 | "core-util-is": "~1.0.0", 2398 | "inherits": "~2.0.3", 2399 | "isarray": "~1.0.0", 2400 | "process-nextick-args": "~2.0.0", 2401 | "safe-buffer": "~5.1.1", 2402 | "string_decoder": "~1.1.1", 2403 | "util-deprecate": "~1.0.1" 2404 | } 2405 | }, 2406 | "real-require": { 2407 | "version": "0.1.0", 2408 | "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", 2409 | "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==" 2410 | }, 2411 | "reinterval": { 2412 | "version": "1.1.0", 2413 | "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", 2414 | "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=" 2415 | }, 2416 | "require-directory": { 2417 | "version": "2.1.1", 2418 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2419 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 2420 | }, 2421 | "rfdc": { 2422 | "version": "1.3.0", 2423 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", 2424 | "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" 2425 | }, 2426 | "safe-buffer": { 2427 | "version": "5.1.2", 2428 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2429 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2430 | }, 2431 | "safe-stable-stringify": { 2432 | "version": "2.2.0", 2433 | "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.2.0.tgz", 2434 | "integrity": "sha512-C6AuMdYPuPV/P1leplHNu0lgc2LAElq/g3TdoksDCIVtBhr78o/CH03bt/9SKqugFbKU9CUjsNlCu0fjtQzQUw==" 2435 | }, 2436 | "secure-json-parse": { 2437 | "version": "2.4.0", 2438 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz", 2439 | "integrity": "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==" 2440 | }, 2441 | "semver": { 2442 | "version": "5.7.1", 2443 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2444 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 2445 | }, 2446 | "serialport": { 2447 | "version": "9.2.5", 2448 | "resolved": "https://registry.npmjs.org/serialport/-/serialport-9.2.5.tgz", 2449 | "integrity": "sha512-nsDsD2GN/43T2a8jQYr1HH76gmDZ575Ts8FOdcBRUY8ecaI16BPbXa612cPPkQjOfg28+KL5qtQL9c0vvTaidg==", 2450 | "requires": { 2451 | "@serialport/binding-mock": "9.2.4", 2452 | "@serialport/bindings": "9.2.5", 2453 | "@serialport/parser-byte-length": "9.2.4", 2454 | "@serialport/parser-cctalk": "9.2.4", 2455 | "@serialport/parser-delimiter": "9.2.4", 2456 | "@serialport/parser-inter-byte-timeout": "9.2.4", 2457 | "@serialport/parser-readline": "9.2.4", 2458 | "@serialport/parser-ready": "9.2.4", 2459 | "@serialport/parser-regex": "9.2.4", 2460 | "@serialport/stream": "9.2.4", 2461 | "debug": "^4.3.2" 2462 | } 2463 | }, 2464 | "set-blocking": { 2465 | "version": "2.0.0", 2466 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2467 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 2468 | }, 2469 | "signal-exit": { 2470 | "version": "3.0.5", 2471 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", 2472 | "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" 2473 | }, 2474 | "simple-concat": { 2475 | "version": "1.0.1", 2476 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 2477 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" 2478 | }, 2479 | "simple-get": { 2480 | "version": "3.1.0", 2481 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", 2482 | "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", 2483 | "requires": { 2484 | "decompress-response": "^4.2.0", 2485 | "once": "^1.3.1", 2486 | "simple-concat": "^1.0.0" 2487 | } 2488 | }, 2489 | "sonic-boom": { 2490 | "version": "2.3.1", 2491 | "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.3.1.tgz", 2492 | "integrity": "sha512-o0vJPsRiCW5Q0EmRKjNiiYGy2DqSXcxk4mY9vIBSPwmkH/e/vJ2Tq8EECd5NTiO77x8vlVN+ykDjRQJTqf7eKg==", 2493 | "requires": { 2494 | "atomic-sleep": "^1.0.0" 2495 | } 2496 | }, 2497 | "split2": { 2498 | "version": "4.1.0", 2499 | "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", 2500 | "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" 2501 | }, 2502 | "stream-shift": { 2503 | "version": "1.0.1", 2504 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", 2505 | "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" 2506 | }, 2507 | "string_decoder": { 2508 | "version": "1.1.1", 2509 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2510 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2511 | "requires": { 2512 | "safe-buffer": "~5.1.0" 2513 | } 2514 | }, 2515 | "string-width": { 2516 | "version": "1.0.2", 2517 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2518 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2519 | "requires": { 2520 | "code-point-at": "^1.0.0", 2521 | "is-fullwidth-code-point": "^1.0.0", 2522 | "strip-ansi": "^3.0.0" 2523 | } 2524 | }, 2525 | "strip-ansi": { 2526 | "version": "3.0.1", 2527 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2528 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2529 | "requires": { 2530 | "ansi-regex": "^2.0.0" 2531 | } 2532 | }, 2533 | "strip-json-comments": { 2534 | "version": "2.0.1", 2535 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2536 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 2537 | }, 2538 | "supports-color": { 2539 | "version": "5.5.0", 2540 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2541 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2542 | "requires": { 2543 | "has-flag": "^3.0.0" 2544 | } 2545 | }, 2546 | "tar-fs": { 2547 | "version": "2.1.1", 2548 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", 2549 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", 2550 | "requires": { 2551 | "chownr": "^1.1.1", 2552 | "mkdirp-classic": "^0.5.2", 2553 | "pump": "^3.0.0", 2554 | "tar-stream": "^2.1.4" 2555 | } 2556 | }, 2557 | "tar-stream": { 2558 | "version": "2.2.0", 2559 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 2560 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 2561 | "requires": { 2562 | "bl": "^4.0.3", 2563 | "end-of-stream": "^1.4.1", 2564 | "fs-constants": "^1.0.0", 2565 | "inherits": "^2.0.3", 2566 | "readable-stream": "^3.1.1" 2567 | }, 2568 | "dependencies": { 2569 | "readable-stream": { 2570 | "version": "3.6.0", 2571 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2572 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2573 | "requires": { 2574 | "inherits": "^2.0.3", 2575 | "string_decoder": "^1.1.1", 2576 | "util-deprecate": "^1.0.1" 2577 | } 2578 | } 2579 | } 2580 | }, 2581 | "thread-stream": { 2582 | "version": "0.13.0", 2583 | "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.13.0.tgz", 2584 | "integrity": "sha512-kTMZeX4Dzlb1zZ00/01aerGaTw2i8NE4sWF0TvF1uXewRhCiUjCvatQkvxIvFqauWG2ADFS2Wpd3qBeYL9i3dg==", 2585 | "requires": { 2586 | "real-require": "^0.1.0" 2587 | } 2588 | }, 2589 | "tunnel-agent": { 2590 | "version": "0.6.0", 2591 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2592 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2593 | "requires": { 2594 | "safe-buffer": "^5.0.1" 2595 | } 2596 | }, 2597 | "typedarray": { 2598 | "version": "0.0.6", 2599 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2600 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 2601 | }, 2602 | "util-deprecate": { 2603 | "version": "1.0.2", 2604 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2605 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2606 | }, 2607 | "wide-align": { 2608 | "version": "1.1.5", 2609 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 2610 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 2611 | "requires": { 2612 | "string-width": "^1.0.2 || 2 || 3 || 4" 2613 | } 2614 | }, 2615 | "wrap-ansi": { 2616 | "version": "7.0.0", 2617 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2618 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2619 | "requires": { 2620 | "ansi-styles": "^4.0.0", 2621 | "string-width": "^4.1.0", 2622 | "strip-ansi": "^6.0.0" 2623 | }, 2624 | "dependencies": { 2625 | "ansi-regex": { 2626 | "version": "5.0.1", 2627 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2628 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 2629 | }, 2630 | "is-fullwidth-code-point": { 2631 | "version": "3.0.0", 2632 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2633 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 2634 | }, 2635 | "string-width": { 2636 | "version": "4.2.3", 2637 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2638 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2639 | "requires": { 2640 | "emoji-regex": "^8.0.0", 2641 | "is-fullwidth-code-point": "^3.0.0", 2642 | "strip-ansi": "^6.0.1" 2643 | } 2644 | }, 2645 | "strip-ansi": { 2646 | "version": "6.0.1", 2647 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2648 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2649 | "requires": { 2650 | "ansi-regex": "^5.0.1" 2651 | } 2652 | } 2653 | } 2654 | }, 2655 | "wrappy": { 2656 | "version": "1.0.2", 2657 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2658 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2659 | }, 2660 | "ws": { 2661 | "version": "7.5.5", 2662 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", 2663 | "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", 2664 | "requires": {} 2665 | }, 2666 | "xtend": { 2667 | "version": "4.0.2", 2668 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2669 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 2670 | }, 2671 | "y18n": { 2672 | "version": "5.0.8", 2673 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2674 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 2675 | }, 2676 | "yargs": { 2677 | "version": "17.2.1", 2678 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", 2679 | "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", 2680 | "requires": { 2681 | "cliui": "^7.0.2", 2682 | "escalade": "^3.1.1", 2683 | "get-caller-file": "^2.0.5", 2684 | "require-directory": "^2.1.1", 2685 | "string-width": "^4.2.0", 2686 | "y18n": "^5.0.5", 2687 | "yargs-parser": "^20.2.2" 2688 | }, 2689 | "dependencies": { 2690 | "ansi-regex": { 2691 | "version": "5.0.1", 2692 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2693 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 2694 | }, 2695 | "is-fullwidth-code-point": { 2696 | "version": "3.0.0", 2697 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2698 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 2699 | }, 2700 | "string-width": { 2701 | "version": "4.2.3", 2702 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2703 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2704 | "requires": { 2705 | "emoji-regex": "^8.0.0", 2706 | "is-fullwidth-code-point": "^3.0.0", 2707 | "strip-ansi": "^6.0.1" 2708 | } 2709 | }, 2710 | "strip-ansi": { 2711 | "version": "6.0.1", 2712 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2713 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2714 | "requires": { 2715 | "ansi-regex": "^5.0.1" 2716 | } 2717 | } 2718 | } 2719 | }, 2720 | "yargs-parser": { 2721 | "version": "20.2.9", 2722 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 2723 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" 2724 | } 2725 | } 2726 | } 2727 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejbd", 3 | "version": "1.0.0", 4 | "description": "Utility to retrieve data from JBD/Overkill Solar BMS units and publish it to MQTT, written in NodeJS", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "mickwheelz", 10 | "license": "MIT", 11 | "bin": { 12 | "node-jbd": "./index.js" 13 | }, 14 | "dependencies": { 15 | "async-mqtt": "^2.6.1", 16 | "serialport": "^9.2.5", 17 | "mqtt": "^4.2.8", 18 | "pino": "^6.13.3", 19 | "pino-pretty": "^7.0.1", 20 | "yargs": "^17.2.1" 21 | } 22 | } 23 | --------------------------------------------------------------------------------