UNPKG

@constructorfleet/ultimate-govee

Version:

Library for interacting with Govee devices written in Typescript.

67 lines 3.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.asOpCode = exports.chunk = exports.total = exports.hexToBase64 = exports.bufferToHex = exports.base64ToHex = exports.base64ToHexString = exports.unpaddedHexToArray = exports.uint8ToHex = exports.hexStringToArray = exports.OpType = exports.ArrayRange = void 0; const base64_arraybuffer_1 = require("base64-arraybuffer"); const ArrayRange = (count) => /* trunk-ignore(eslint/prefer-spread) */ // eslint-disable-next-line prefer-spread Array.apply(null, Array(count)).map((_, i) => i); exports.ArrayRange = ArrayRange; var OpType; (function (OpType) { OpType[OpType["COMMAND"] = 51] = "COMMAND"; OpType[OpType["REPORT"] = 170] = "REPORT"; })(OpType || (exports.OpType = OpType = {})); const hexStringToArray = (hexString) => hexString .trim() .split(' ') .map((x) => parseInt(`0x${x}`, 16)); exports.hexStringToArray = hexStringToArray; const uint8ToHex = (uint8Array) => Buffer.from(uint8Array) .toString('hex') .replace(/(.{2})/g, '$1 '); exports.uint8ToHex = uint8ToHex; const unpaddedHexToArray = (hexString) => { if (!hexString) { return undefined; } const padded = hexString ?.split(/(.{2})/g) ?.filter((i) => i.length > 0) ?.join(' '); const result = (0, exports.hexStringToArray)(padded); return result; }; exports.unpaddedHexToArray = unpaddedHexToArray; const base64ToHexString = (b64String) => (0, exports.uint8ToHex)(new Uint8Array((0, base64_arraybuffer_1.decode)(b64String))); exports.base64ToHexString = base64ToHexString; const base64ToHex = (b64String) => (0, exports.hexStringToArray)((0, exports.uint8ToHex)(new Uint8Array((0, base64_arraybuffer_1.decode)(b64String)))); exports.base64ToHex = base64ToHex; const bufferToHex = (buffer) => (0, exports.hexStringToArray)((0, exports.uint8ToHex)(new Uint8Array(buffer))); exports.bufferToHex = bufferToHex; const hexToBase64 = (codes) => (0, base64_arraybuffer_1.encode)(Uint8Array.of(...codes)); exports.hexToBase64 = hexToBase64; const total = (codes, reverse = false) => (reverse ? codes.reverse() : codes).reduce((res, code, index) => res | (code << (8 * (codes.length - index - 1))), 0); exports.total = total; const chunk = (codes, chunkSize) => (0, exports.ArrayRange)(Math.ceil(codes.length / chunkSize)).map((x, i) => codes.slice(i * chunkSize, i * chunkSize + chunkSize)); exports.chunk = chunk; const asOpCode = (opCode, ...values) => { const cmdFrame = Buffer.from([ opCode, ...values.map((v) => (typeof v === 'number' ? [v] : v)).flat(), ]); const cmdPaddedFrame = Buffer.concat([ cmdFrame, cmdFrame.length >= 19 ? new Uint8Array([]) : Buffer.from(new Array(19 - cmdFrame.length).fill(0)), ]); return Array.from(Buffer.concat([ cmdPaddedFrame, Buffer.from([ cmdPaddedFrame.reduce((checksum, val) => checksum ^ val, 0), ]), ])); }; exports.asOpCode = asOpCode; //# sourceMappingURL=op-code.js.map