UNPKG

immudb-node

Version:

Node.js SDK for immudb written in TypeScript

180 lines 8.15 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.isString = exports.bitLength = exports.withLeafPrefix = exports.encodeZAdd = exports.encodeKeyValue = exports.encodeReferenceValue = exports.prefixValue = exports.prefixKey = exports.maskString = exports.maskConfig = exports.isPowerOfTwo = exports.equalArray = exports.utf8Decode = exports.doubleToByteArray = exports.encodeInt32 = exports.encodeInt64 = exports.getAlh = exports.digestKeyValue = exports.utf8Encode = exports.hashUint8Array = void 0; const crypto = __importStar(require("crypto")); const util = __importStar(require("util")); const schemaTypes = __importStar(require("./proto/schema_pb")); const consts_1 = require("./consts"); exports.hashUint8Array = (value) => new Uint8Array(crypto.createHash('sha256').update(value).digest()); exports.utf8Encode = (val) => { return new util.TextEncoder().encode(val); }; exports.digestKeyValue = (kv) => { let valdigest; const key = kv.getKey_asU8(); const value = kv.getValue_asU8(); if (value === undefined) { valdigest = exports.hashUint8Array(exports.utf8Encode('')); } else { valdigest = exports.hashUint8Array(value); } const res = new Uint8Array(key.length + valdigest.length); res.set(key); res.set(valdigest, key.length); return exports.hashUint8Array(res); }; exports.getAlh = (txm) => { const encId = exports.encodeInt64(txm.getId()); const prevalh = txm.getPrevalh_asU8(); const encTs = exports.encodeInt64(txm.getTs()); const encEntries = exports.encodeInt32(txm.getNentries()); const eh = txm.getEh_asU8(); const encBltxid = exports.encodeInt64(txm.getBltxid()); const root = txm.getBlroot_asU8(); const bj = new Uint8Array(encTs.length + encEntries.length + eh.length + encBltxid.length + root.length); bj.set(encTs); bj.set(encEntries, encTs.length); bj.set(eh, encTs.length + encEntries.length); bj.set(encBltxid, encTs.length + encEntries.length + eh.length); bj.set(root, encTs.length + encEntries.length + eh.length + encBltxid.length); const innerHash = exports.hashUint8Array(bj); const bi = new Uint8Array(encId.length + prevalh.length + innerHash.length); bi.set(encId); bi.set(prevalh, encId.length); bi.set(innerHash, encId.length + prevalh.length); return exports.hashUint8Array(bi); }; exports.encodeInt64 = (num, buf = Buffer.allocUnsafe(8), offset = 0) => { const UINT_32_MAX = Math.pow(2, 32); const top = Math.floor(num / UINT_32_MAX); const rem = num - top * UINT_32_MAX; buf.writeUInt32BE(top, offset); buf.writeUInt32BE(rem, offset + 4); return buf; }; exports.encodeInt32 = (num, buf = Buffer.allocUnsafe(4), offset = 0) => { buf.writeUInt32BE(num, offset); return buf; }; exports.doubleToByteArray = (number) => { var buffer = new ArrayBuffer(8); // JS numbers are 8 bytes long, or 64 bits var longNum = new Float64Array(buffer); // so equivalent to Float64 longNum[0] = number; return Array.from(new Int8Array(buffer)).reverse(); // reverse to get little endian }; exports.utf8Decode = (val) => { return val === '' ? val : new util.TextDecoder("utf-8").decode(val); }; exports.equalArray = (a1, a2) => { if (a1.length != a2.length) { return false; } for (let i = 0; i < a1.length; i++) { if (a1[i] != a2[i]) { return false; } } return true; }; exports.isPowerOfTwo = (x) => { return Math.log2(x) % 1 === 0; }; exports.maskConfig = (c) => { let result = ''; if (c) { result += `[ address: ${c.host}:${c.port}`; c.user && (result += `, user: ${c.user}`); c.password && (result += ', password: *****'); c.database && (result += `, database: ${c.database || 'defaultdb'}`); c.rootPath && (result += `, rootPath: ${c.rootPath}`); c.secure && (result += `, secure: ${!!c.secure}`); c.certs && (result += `, certs: ${c.certs}`); c.autoLogin && (result += `, autoLogin: ${!!c.autoLogin}`); c.autoDatabase && (result += `, autoDatabase: ${!!c.autoDatabase}`); } return `${result} ]`; }; exports.maskString = (data, n = 12) => { if (data) { return `${data.slice(0, n)}************${data.slice(data.length - n)}`; } return ''; }; exports.prefixKey = (key) => { const res = new Uint8Array(consts_1.SET_KEY_PREFIX.length + key.length); res.set(consts_1.SET_KEY_PREFIX); res.set(key, consts_1.SET_KEY_PREFIX.length); return res; }; exports.prefixValue = (value) => { const res = new Uint8Array(consts_1.PLAIN_VALUE_PREFIX.length + value.length); res.set(consts_1.PLAIN_VALUE_PREFIX); res.set(value, consts_1.PLAIN_VALUE_PREFIX.length); return res; }; exports.encodeReferenceValue = (referencedKey, atTx) => { const atTxUint = exports.encodeInt64(atTx); const encoded = new Uint8Array(consts_1.REFERENCE_VALUE_PREFIX.length + atTxUint.length + consts_1.SET_KEY_PREFIX.length + referencedKey.length); encoded.set(consts_1.REFERENCE_VALUE_PREFIX); encoded.set(atTxUint, consts_1.REFERENCE_VALUE_PREFIX.length); encoded.set(consts_1.SET_KEY_PREFIX, consts_1.REFERENCE_VALUE_PREFIX.length + atTxUint.length); encoded.set(referencedKey, consts_1.REFERENCE_VALUE_PREFIX.length + atTxUint.length + consts_1.SET_KEY_PREFIX.length); return encoded; }; exports.encodeKeyValue = (key, value) => { const kv = new schemaTypes.KeyValue(); kv.setKey(exports.prefixKey(key)); kv.setValue(exports.prefixValue(value)); return kv; }; exports.encodeZAdd = (zSet, score, key, attx) => { const eKey = exports.prefixKey(key); const zSetLengthUint = exports.encodeInt64(zSet.length); const scoreUint = exports.doubleToByteArray(score); const eKeyLengthUint = exports.encodeInt64(eKey.length); const attxUint = exports.encodeInt64(attx); const zKey = new Uint8Array(consts_1.SORTED_KEY_PREFIX.length + zSetLengthUint.length + zSet.length + scoreUint.length + eKeyLengthUint.length + eKey.length + attxUint.length); zKey.set(consts_1.SORTED_KEY_PREFIX); zKey.set(zSetLengthUint, consts_1.SORTED_KEY_PREFIX.length); zKey.set(zSet, consts_1.SORTED_KEY_PREFIX.length + zSetLengthUint.length); zKey.set(scoreUint, consts_1.SORTED_KEY_PREFIX.length + zSetLengthUint.length + zSet.length); zKey.set(eKeyLengthUint, consts_1.SORTED_KEY_PREFIX.length + zSetLengthUint.length + zSet.length + scoreUint.length); zKey.set(eKey, consts_1.SORTED_KEY_PREFIX.length + zSetLengthUint.length + zSet.length + scoreUint.length + eKeyLengthUint.length); zKey.set(attxUint, consts_1.SORTED_KEY_PREFIX.length + zSetLengthUint.length + zSet.length + scoreUint.length + eKeyLengthUint.length + eKey.length); const kv = new schemaTypes.KeyValue(); kv.setKey(zKey); return kv; }; exports.withLeafPrefix = (value) => { const res = new Uint8Array(consts_1.LEAF_PREFIX.length + value.length); res.set(consts_1.LEAF_PREFIX); res.set(value, consts_1.LEAF_PREFIX.length); return res; }; exports.bitLength = (n) => n === 0 ? 0 : Math.abs(n).toString(2).length; exports.isString = (value) => { return typeof value === 'string'; }; //# sourceMappingURL=util.js.map