postchain-client 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/gtv/definition.js","../src/gtx/errors.js","../src/formatter.js","../src/gtx/serialization.js","../src/merkle/path.js","../src/merkle/binarytree.js","../src/encryption/errors.js","../src/encryption/encryption.js","../src/merkle/merklehashcalculator.js","../src/merkle/binarytreefactory.js","../src/merkle/proof/merkleprooftree.js","../src/merkle/proof/merkleprooftreefactory.js","../src/merkle/proof/merklehashcarrier.js","../src/merkle/proof/merklehashsummaryfactory.js","../src/merkle/proof/merkleproof.js","../src/gtv/index.js","../src/gtx/index.js","../src/gtx/gtx.js","../src/logger.js","../src/gtx/gtxclient.js","../src/restclient/types.js","../src/restclient/errors.js","../src/restclient/restclientutil.js","../src/restclient/restclient.js","../src/merkle/merkleHelper.js","../src/chromia/errors.js","../src/chromia/chromiaClientProvider.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst asn = require(\"asn1.js/lib/asn1\");\nexport const ASNDictPair = asn.define(\"DictPair\", function () {\n this.seq().obj(this.key(\"name\").utf8str(), this.key(\"value\").use(rawGTV));\n});\nexport const rawGTV = asn.define(\"GtvValue\", function () {\n this.choice({\n null: this.explicit(0).null_(),\n byteArray: this.explicit(1).octstr(),\n string: this.explicit(2).utf8str(),\n integer: this.explicit(3).int(),\n dict: this.explicit(4).seqof(ASNDictPair),\n array: this.explicit(5).seqof(rawGTV),\n bigInteger: this.explicit(6).int(),\n });\n});\nexport const ASNBuffer = asn.define(\"Buffer\", function () {\n this.octstr();\n});\n//# sourceMappingURL=definition.js.map","export class UnexpectedArgumentTypeError extends Error {\n constructor(typedArg) {\n super(`Cannot parse typedArg ${JSON.stringify(typedArg)}. Unknown type ${typedArg.type}`);\n }\n}\nexport class MissingGtxException extends Error {\n constructor() {\n super(`Missing instance of gtx protocol (used for communicating with postchain) to add operation to`);\n }\n}\nexport class AlreadySignedTransactionException extends Error {\n constructor(operation) {\n super(`Cannot add ${operation} calls to an already signed gtx`);\n }\n}\nexport class NumberOfSignersAndSignaturesException extends Error {\n constructor() {\n super(`Not matching number of signers and signatures`);\n }\n}\nexport class MissingSignerException extends Error {\n constructor() {\n super(`No such signer, remember to call addSignerToGtx() before adding a signature`);\n }\n}\n//# sourceMappingURL=errors.js.map","export function pgBytes(buffer) {\n if (!Buffer.isBuffer(buffer)) {\n throw new PgBytesInputException(buffer);\n }\n return \"\\\\x\" + buffer.toString(\"hex\");\n}\n/**\n * Converts hex string to Buffer\n * @param key: string\n * @returns {Buffer}\n */\nexport function toBuffer(key) {\n return Buffer.from(key, \"hex\");\n}\n/**\n * Converts Buffer to hex string\n * @param buffer: Buffer\n * @returns {string}\n */\nexport function toString(buffer) {\n return buffer.toString(\"hex\");\n}\nexport function toQueryObjectGTV(object) {\n const objectCopy = Object.assign({}, object);\n const name = objectCopy.type;\n delete objectCopy.type;\n return [name, objectCopy];\n}\nexport class PgBytesInputException extends Error {\n constructor(buffer) {\n super(`util.pgBytes expects a buffer, but got ${typeof buffer}`);\n }\n}\nexport function ensureBuffer(value) {\n if (value instanceof Buffer) {\n return value;\n }\n else {\n return toBuffer(value);\n }\n}\nexport function checkGtvType(value) {\n try {\n if (value == null) {\n return true;\n }\n if (Buffer.isBuffer(value)) {\n return true;\n }\n if (typeof value === \"string\") {\n return true;\n }\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) {\n throw Error(\"User error: Only integers are supported\");\n }\n return true;\n }\n if (typeof value === \"bigint\") {\n return true;\n }\n if (value.constructor === Array) {\n value.map((item) => checkGtvType(item));\n return true;\n }\n if (typeof value === \"object\") {\n Object.keys(value).map(function (key) {\n checkGtvType(value[key]);\n });\n return true;\n }\n }\n catch (error) {\n throw new Error(`Failed to check type: ${error}`);\n }\n return false;\n}\nexport function rawGtxToGtx(rawGtx) {\n const rawGtxBody = rawGtx[0];\n const signatures = rawGtx[1];\n const gtxBody = {\n blockchainRID: rawGtxBody[0],\n operations: rawGtxBody[1].map((operation) => ({\n opName: operation[0],\n args: operation[1],\n })),\n signers: rawGtxBody[2],\n };\n return {\n blockchainRID: gtxBody.blockchainRID,\n operations: gtxBody.operations,\n signers: gtxBody.signers,\n signatures,\n };\n}\nexport function checkGtxType(value) {\n try {\n rawGtxToGtx(value);\n return true;\n }\n catch (error) {\n return false;\n }\n}\nexport function removeDuplicateSigners(signers) {\n const signersAsString = [];\n signers.forEach((item) => {\n const itemAsString = item.toString(\"hex\");\n if (!signersAsString.includes(itemAsString)) {\n signersAsString.push(itemAsString);\n }\n });\n const result = [];\n signersAsString.forEach((item) => {\n result.push(Buffer.from(item, \"hex\"));\n });\n return result;\n}\n//# sourceMappingURL=formatter.js.map","import { rawGTV } from \"../gtv/definition\";\nimport { BN } from \"bn.js\";\nimport { UnexpectedArgumentTypeError } from \"./errors\";\nimport { checkGtxType } from \"../formatter\";\nexport function encodeValue(rawGtv) {\n return rawGTV.encode(createTypedArg(rawGtv));\n}\nexport function encodeValueGtx(rawGtx) {\n return encodeValue(rawGtx);\n}\nexport function decodeValue(bytes) {\n const obj = rawGTV.decode(bytes);\n return parseValue(obj);\n}\nexport function decodeValueGtx(bytes) {\n const decodedValue = decodeValue(bytes);\n if (!checkGtxType(decodedValue)) {\n throw new Error(`Unexpected type of value: ${decodedValue}, expected decoded value to be of type RawGtx`);\n }\n return decodedValue;\n}\nexport function parseValue(typedArg) {\n if (typedArg.type === \"null\") {\n return null;\n }\n else if (typedArg.type === \"byteArray\") {\n return typedArg.value;\n }\n else if (typedArg.type === \"string\") {\n return typedArg.value;\n }\n else if (typedArg.type === \"integer\") {\n return Number(typedArg.value);\n }\n else if (typedArg.type === \"array\") {\n const arrayValue = typedArg.value;\n return arrayValue.map((item) => parseValue(item));\n }\n else if (typedArg.type === \"bigInteger\") {\n return BigInt(typedArg.value);\n }\n else if (typedArg.type === \"dict\") {\n const arrayValue = typedArg.value;\n const result = {};\n arrayValue.forEach((pair) => {\n result[pair.name] = parseValue(pair.value);\n });\n return result;\n }\n else {\n throw new UnexpectedArgumentTypeError(typedArg);\n }\n}\nexport function createTypedArg(value) {\n try {\n if (value == null) {\n return { type: \"null\", value: null };\n }\n if (Buffer.isBuffer(value)) {\n return { type: \"byteArray\", value: value };\n }\n if (typeof value === \"boolean\") {\n return { type: \"integer\", value: value ? 1 : 0 };\n }\n if (typeof value === \"string\") {\n return { type: \"string\", value: value };\n }\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) {\n throw Error(\"User error: Only integers are supported\");\n }\n return { type: \"integer\", value: new BN(value) };\n }\n if (typeof value === \"bigint\") {\n return { type: \"bigInteger\", value: new BN(Number(value)) };\n }\n if (value.constructor === Array) {\n return {\n type: \"array\",\n value: value.map((item) => createTypedArg(item)),\n };\n }\n if (typeof value === \"object\") {\n const valueAsDictPair = value;\n return { type: \"dict\", value: Object.keys(valueAsDictPair).map(function (key) {\n return { name: key, value: createTypedArg(valueAsDictPair[key]) };\n }) };\n }\n }\n catch (error) {\n throw new Error(`Failed to encode ${value.toString()}: ${error}`);\n }\n throw new Error(`value ${value} have unsupported type: ${typeof value}`);\n}\n//# sourceMappingURL=serialization.js.map","\"use strict\";\nvar util = require('../formatter');\nfunction PathElement(previous) {\n this.previous = previous;\n}\nPathElement.prototype.getSearchKey = function () { };\nfunction PathLeafElement(previous) {\n PathElement.call(this, previous);\n}\nPathLeafElement.prototype = Object.create(PathElement.prototype);\nPathLeafElement.prototype.constructor = PathLeafElement;\nPathLeafElement.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this !== typeof other)\n return false;\n return true;\n};\nfunction SearchablePathElement(previous) {\n PathElement.call(this, previous);\n}\nSearchablePathElement.prototype = Object.create(PathElement.prototype);\nSearchablePathElement.prototype.constructor = SearchablePathElement;\nSearchablePathElement.prototype.getSearchKey = function () { };\n/**\n *\n * @param {SearchablePathElement} previous\n * @param {number} index\n */\nfunction ArrayPathElement(previous, index) {\n SearchablePathElement.call(this, previous);\n this.index = index;\n}\nArrayPathElement.prototype = Object.create(SearchablePathElement.prototype);\nArrayPathElement.prototype.constructor = ArrayPathElement;\nArrayPathElement.prototype.getSearchKey = function () {\n return this.index;\n};\n/**\n * @param {ArrayPathElement} other\n */\nArrayPathElement.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this !== typeof other)\n return false;\n if (this.index != other.index)\n return false;\n return true;\n};\n/**\n *\n * @param {SearchablePathElement} previous\n * @param {string} key\n */\nfunction DictPathElement(previous, key) {\n SearchablePathElement.call(this, previous);\n this.key = key;\n}\nDictPathElement.prototype = Object.create(SearchablePathElement.prototype);\nDictPathElement.prototype.constructor = DictPathElement;\nDictPathElement.prototype.getSearchKey = function () {\n return this.key;\n};\n/**\n * @param {DictPathElement} other\n */\nDictPathElement.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this !== typeof other)\n return false;\n if (this.key != other.key)\n return false;\n return true;\n};\n/**\n *\n * @param {Array} pathElements\n */\nfunction Path(pathElements) {\n this.pathElements = pathElements;\n}\n/**\n *\n */\nPath.prototype.getCurrentPathElement = function () {\n return this.pathElements[0];\n};\n/**\n *\n */\nPath.prototype.size = function () {\n return this.pathElements.length;\n};\n/**\n *\n */\nPath.prototype.tail = function () {\n if (this.pathElements.length == 0) {\n throw new Error(\"Impossible to tail this array\");\n }\n else {\n var tail = this.pathElements.slice(1);\n return new Path(tail);\n }\n};\nPath.prototype.debugString = function () {\n var sb = \"\";\n this.pathElements.forEach(elem => {\n if (elem instanceof SearchablePathElement) {\n sb = sb + \"-> \" + elem.getSearchKey();\n }\n else if (elem instanceof PathLeafElement) {\n sb = sb + \"-> Leaf\";\n }\n });\n return sb;\n};\n/**\n * @param {Path} other\n */\nPath.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this != typeof other)\n return false;\n return this.pathElements == other.pathElements;\n};\n/**\n * @param {number} index\n * @param {Path} path\n */\nvar getTailIfFirstElementIsArrayOfThisIndex = function (index, path) {\n return getTail(index, path);\n};\n/**\n *\n * @param {string} key\n * @param {Path} path\n */\nvar getTailIfFirstElementIsDictOfThisKey = function (key, path) {\n return getTail(key, path);\n};\n/**\n *\n * @param {string|number} searchKey\n * @param {Path} path\n */\nvar getTail = function (searchKey, path) {\n if (searchKey === null) {\n throw new Error(\"Have to provide a search key\");\n }\n try {\n var firstElement = path.pathElements[0];\n if (firstElement instanceof SearchablePathElement) {\n if (firstElement.getSearchKey() == searchKey) {\n return path.tail();\n }\n }\n }\n catch (err) {\n util.logError(\"Why are we dropping first element of an empty path? \" + err);\n return null;\n }\n return null;\n};\n/**\n *\n * @param {Array} paths\n */\nfunction PathSet(paths) {\n this.paths = paths;\n}\n/**\n *\n */\nPathSet.prototype.isEmpty = function () {\n return this.paths.length == 0;\n};\n/**\n *\n */\nPathSet.prototype.getPathLeafOrElseAnyCurrentPathElement = function () {\n var leafElem = null;\n var currElem = null;\n var prev = {\n \"path\": null,\n \"elem\": null,\n };\n this.paths.forEach(path => {\n currElem = path.getCurrentPathElement();\n if (currElem instanceof PathLeafElement) {\n leafElem = currElem;\n }\n prev = this.errorCheckUnequalParent(path, currElem, prev.path, prev.elem);\n });\n if (leafElem != null) {\n return leafElem;\n }\n else {\n return currElem; // It doesn't matter which one we return (Next step we will get the \"previous\" from this one)\n }\n};\n/**\n * Yeah, this might be a completely un-needed check (but it MIGHT save us later on if we forget this rule).\n * What we are looking for here is an impossible state where two paths in the same set don't have the same parent.\n * (Since we usually only have one path in a path set, this check should be cheap)\n *\n * @param {Path} currPath\n * @param {PathElement} currElem\n * @param {Path} prevPath\n * @param {PathElement} prevElem\n */\nPathSet.prototype.errorCheckUnequalParent = function (currPath, currElem, prevPath, prevElem) {\n if (prevElem != null) {\n // weird: javascript cannot compare null == null then we have to compare each with null separately :(\n if (currElem.previous == null && prevElem.previous == null) {\n return {\n \"path\": currPath,\n \"elem\": currElem\n };\n }\n else if ((currElem.previous == null && prevElem.previous != null) || (currElem.previous != null && prevElem.previous == null)) {\n throw new Error(\"Something is wrong, these paths do not have the same parent. (\" + currPath + \") (\" + prevPath + \")\");\n }\n else if (!currElem.previous.equals(prevElem.previous)) {\n throw new Error(\"Something is wrong, these paths do not have the same parent. (\" + currPath + \") (\" + prevPath + \")\");\n }\n }\n return {\n \"path\": currPath,\n \"elem\": currElem\n };\n};\n/**\n *\n */\nPathSet.prototype.keepOnlyArrayPaths = function () {\n var filteredPaths = this.paths.filter(path => {\n return path.pathElements[0] instanceof ArrayPathElement;\n });\n return new PathSet(filteredPaths);\n};\n/**\n *\n */\nPathSet.prototype.keepOnlyDictPaths = function () {\n var filteredPaths = this.paths.filter(path => {\n return path.pathElements[0] instanceof DictPathElement;\n });\n return new PathSet(filteredPaths);\n};\n/**\n *\n */\nPathSet.prototype.getTailIfFirstElementIsArrayOfThisIndexFromList = function (index) {\n return this.getTailFromList(index, getTailIfFirstElementIsArrayOfThisIndex);\n};\n/**\n *\n */\nPathSet.prototype.getTailIfFirstElementIsDictOfThisKeyFromList = function (key) {\n return this.getTailFromList(key, getTailIfFirstElementIsDictOfThisKey);\n};\n/**\n *\n */\nPathSet.prototype.getTailFromList = function (searchKey, filterFunc) {\n var retPaths = new Array();\n this.paths.forEach(path => {\n var newPath = filterFunc(searchKey, path);\n if (newPath != null) {\n retPaths.push(newPath);\n }\n });\n return new PathSet(retPaths);\n};\n/**\n *\n * @param {Array} arr\n */\nvar buildPathFromArray = function (arr) {\n var pathElements = new Array();\n var lastPathElem = null;\n arr.forEach(item => {\n var newElem = null;\n if (typeof item === 'number') {\n newElem = new ArrayPathElement(lastPathElem, item);\n }\n else if (typeof item === 'string') {\n newElem = new DictPathElement(lastPathElem, item);\n }\n else {\n throw new Error(\"A path structure must only consist of Ints and Strings, not \" + item);\n }\n pathElements.push(newElem);\n lastPathElem = newElem;\n });\n var lastOne = lastPathElem;\n pathElements.push(new PathLeafElement(lastOne));\n return new Path(pathElements);\n};\nmodule.exports = { Path, PathElement, PathLeafElement, ArrayPathElement, SearchablePathElement, DictPathElement, PathSet,\n getTailIfFirstElementIsArrayOfThisIndex, buildPathFromArray };\n//# sourceMappingURL=path.js.map","\"use strict\";\nvar PathLeafElement = require('./path').PathLeafElement;\nconst HASH_PREFIX_NODE = 0;\nconst HASH_PREFIX_LEAF = 1;\nconst HASH_PREFIX_NODE_ARRAY = 7;\nconst HASH_PREFIX_NODE_DICT = 8;\n/**\n *\n */\nfunction BinaryTreeElement() {\n this.pathElem = null;\n}\nBinaryTreeElement.prototype.isPath = function () {\n return this.pathElem != null;\n};\nBinaryTreeElement.prototype.isPathLeaf = function () {\n if (this.pathElem == null) {\n return false;\n }\n if (this.pathElem instanceof PathLeafElement) {\n return true;\n }\n else {\n return false;\n }\n};\nBinaryTreeElement.prototype.setPathElement = function (pathElem) {\n this.pathElem = pathElem;\n};\nBinaryTreeElement.prototype.getPrefixByte = function () {\n return HASH_PREFIX_NODE;\n};\n/**\n *\n * @param {BinaryTreeElement} left\n * @param {BinaryTreeElement} right\n */\nfunction Node(left, right) {\n this.left = left;\n this.right = right;\n}\nNode.prototype = Object.create(BinaryTreeElement.prototype);\nNode.prototype.constructor = Node;\nNode.prototype.getPrefixByte = function () {\n return HASH_PREFIX_NODE;\n};\n/**\n *\n * @param {BinaryTreeElement} left\n * @param {BinaryTreeElement} right\n * @param {*} content\n * @param {PathSet} pathElem\n */\nfunction SubTreeRootNode(left, right, content, pathElem) {\n Node.call(this, left, right);\n this.content = content;\n BinaryTreeElement.prototype.setPathElement.call(this, pathElem);\n}\nSubTreeRootNode.prototype = Object.create(Node.prototype);\nSubTreeRootNode.prototype.constructor = SubTreeRootNode;\n/**\n *\n * @param {*} content\n * @param {PathElement} pathElem\n */\nfunction Leaf(content, pathElem = null) {\n this.content = content;\n if (pathElem != null) {\n if (pathElem instanceof PathLeafElement) {\n BinaryTreeElement.prototype.setPathElement.call(this, pathElem);\n }\n else {\n throw new Error(\"The path and object structure does not match! We are at a leaf, but the path expects a sub structure.\");\n }\n }\n}\nLeaf.prototype = Object.create(BinaryTreeElement.prototype);\nLeaf.prototype.constructor = Leaf;\nLeaf.prototype.getPrefixByte = function () {\n return HASH_PREFIX_LEAF;\n};\nfunction EmptyLeaf() { }\nEmptyLeaf.prototype = Object.create(BinaryTreeElement.prototype);\nEmptyLeaf.prototype.constructor = EmptyLeaf;\n/**\n * Wrapper class for the root object.\n * @param {BinaryTreeElement} root\n */\nfunction BinaryTree(root) {\n this.root = root;\n}\nBinaryTree.prototype.maxLevel = function () {\n return this.maxLevelInternal(this.root);\n};\nBinaryTree.prototype.maxLevelInternal = function (node) {\n if (node instanceof EmptyLeaf) {\n return 0;\n }\n else if (node instanceof Leaf) {\n return 1;\n }\n else if (node instanceof Node) {\n return Math.max(this.maxLevelInternal(node.left), this.maxLevelInternal(node.right)) + 1;\n }\n else {\n throw new Error(\"What is this type? \" + typeof node);\n }\n};\n/**\n * Represents the top of a sub tree generated by a [Array]\n *\n * @param {*} left\n * @param {*} right\n * @param {*} content\n * @param {*} size\n * @param {PathElement} pathElem\n */\nfunction ArrayHeadNode(left, right, content, size, pathElem = null) {\n SubTreeRootNode.call(this, left, right, content, pathElem);\n this.size = size;\n}\nArrayHeadNode.prototype = Object.create(SubTreeRootNode.prototype);\nArrayHeadNode.prototype.constructor = ArrayHeadNode;\nArrayHeadNode.prototype.getPrefixByte = function () {\n return HASH_PREFIX_NODE_ARRAY;\n};\n/**\n * Represents the top a sub tree generated by a [Dictionary]\n * @param {*} left\n * @param {*} right\n * @param {*} content\n * @param {*} size\n * @param {PathElement} pathElem\n */\nfunction DictHeadNode(left, right, content, size, pathElem = null) {\n SubTreeRootNode.call(this, left, right, content, pathElem);\n this.size = size;\n}\nDictHeadNode.prototype = Object.create(SubTreeRootNode.prototype);\nDictHeadNode.prototype.constructor = DictHeadNode;\nDictHeadNode.prototype.getPrefixByte = function () {\n return HASH_PREFIX_NODE_DICT;\n};\nmodule.exports = { HASH_PREFIX_NODE, HASH_PREFIX_LEAF, HASH_PREFIX_NODE_ARRAY, HASH_PREFIX_NODE_DICT,\n Node, Leaf, EmptyLeaf, SubTreeRootNode, BinaryTreeElement, BinaryTree, ArrayHeadNode, DictHeadNode };\n//# sourceMappingURL=binarytree.js.map","export class PrivKeyFormatException extends Error {\n constructor(privKey) {\n super(`Invalid key length. Expected 32, but got ${privKey.length}`);\n }\n}\nexport class MissingPrivKeyArgumentException extends Error {\n constructor() {\n super(`Missing argument privKey`);\n }\n}\n//# sourceMappingURL=errors.js.map","\"use strict\";\nimport * as crypto from \"crypto\";\nimport * as secp256k1 from \"secp256k1\";\nimport { ensureBuffer } from \"../formatter\";\nimport { MissingPrivKeyArgumentException, PrivKeyFormatException, } from \"./errors\";\nexport function createPublicKey(privKey) {\n validatePrivKeyFormat(privKey);\n return Buffer.from(secp256k1.publicKeyCreate(privKey, true).buffer);\n}\nexport function randomBytes(size) {\n return crypto.randomBytes(size);\n}\nexport function sha256(buffer) {\n return crypto.createHash(\"sha256\").update(buffer).digest();\n}\nexport const hash256 = sha256;\nexport function hashConcat(items) {\n return hash256(Buffer.concat(items));\n}\n/**\n * @param content the content that the signature signs. It will be digested before validating.\n * @param pubKey The pubKey to validate the signature with\n * @param signature the signature to validate\n *\n * @return true if signature ok, false otherwise\n */\nexport function checkSignature(content, pubKey, signature) {\n const digest = hash256(content);\n return checkDigestSignature(digest, pubKey, signature);\n}\n/**\n * @param digest the signed digest. It will not be digested before validating.\n * @param pubKey The pubKey to validate the signature with\n * @param signature the signature to validate\n *\n * @return true if signature ok, false otherwise\n */\nexport function checkDigestSignature(digest, pubKey, signature) {\n return secp256k1.ecdsaVerify(signature, digest, pubKey);\n}\n/**\n * @param content to sign. It will be digested before signing.\n * @param privKey The private key to sign the content with\n *\n * @return the signature\n */\nexport function sign(content, privKey) {\n validatePrivKeyFormat(privKey);\n const digestBuffer = sha256(content);\n return signDigest(digestBuffer, privKey);\n}\n/**\n * @param digestBuffer to sign. It will not be digested before signing.\n * @param privKey The private key to sign the digest with\n *\n * @return the signature\n */\nexport function signDigest(digestBuffer, privKey) {\n return Buffer.from(secp256k1.ecdsaSign(digestBuffer, privKey).signature);\n}\n/**\n * Creates a key pair (which usually represents one user)\n * @param privKey to create key pair based on\n * @returns {{pubKey: Buffer, privKey: Buffer}}\n */\nexport function makeKeyPair(privKey) {\n let pubKey;\n if (privKey) {\n privKey = ensureBuffer(privKey);\n pubKey = createPublicKey(privKey);\n }\n else {\n do {\n privKey = randomBytes(32);\n } while (!secp256k1.privateKeyVerify(privKey));\n pubKey = Buffer.from(secp256k1.publicKeyCreate(privKey).buffer);\n }\n return { pubKey, privKey };\n}\n/**\n * Generates a 16bytes TUID (Text unique ID) (a 32characters long string)\n * @returns string\n */\nexport function makeTuid() {\n return randomBytes(16).toString(\"hex\");\n}\n/**\n * Verify that keypair is correct. Providing the private key, this function returns its associated public key\n * @param privKey: Buffer\n * @returns {{pubKey: Buffer, privKey: Buffer}}\n */\nexport function verifyKeyPair(privKey) {\n validatePrivKeyFormat(privKey);\n const pubKey = Buffer.from(secp256k1.publicKeyCreate(privKey).buffer);\n return { pubKey, privKey };\n}\nfunction validatePrivKeyFormat(privKey) {\n if (!privKey) {\n throw new MissingPrivKeyArgumentException();\n }\n if (!Buffer.isBuffer(privKey) || privKey.length !== 32) {\n throw new PrivKeyFormatException(privKey);\n }\n}\n//# sourceMappingURL=encryption.js.map","var serialization = require('../gtx/serialization');\nvar HASH_PREFIX_LEAF = require('./binarytree').HASH_PREFIX_LEAF;\nvar encryption = require('../../src/encryption/encryption');\nfunction CryptoSystem() { }\nCryptoSystem.prototype.digest = function (buffer) {\n return encryption.hash256(buffer);\n};\n/**\n *\n * @param {Buffer} buffer\n * @param {CryptoSystem} cryptoSystem\n */\nfunction hashingFun(buffer, cryptoSystem) {\n if (cryptoSystem === null) {\n throw new Error(\"In this case we need the CryptoSystem to calculate the hash\");\n }\n else {\n return cryptoSystem.digest(buffer);\n }\n}\n/**\n *\n * @param {CryptoSystem} cryptoSystem\n */\nfunction MerkleHashCalculator(cryptoSystem) {\n this.cryptoSystem = cryptoSystem;\n}\n/**\n * @param {number} prefix\n * @param {Buffer} hashLeft\n * @param {Buffer} hashRight\n */\nMerkleHashCalculator.prototype.calculateNodeHash = function (prefix, hashLeft, hashRight) {\n return this.calculateNodeHashInternal(prefix, hashLeft, hashRight, hashingFun);\n};\n/**\n * @param {*} value\n */\nMerkleHashCalculator.prototype.calculateLeafHash = function (value) {\n return this.calculateHashOfValueInternal(value, serialization.encodeValue, hashingFun);\n};\n/**\n * @param {number} prefix\n * @param {Buffer} hashLeft\n * @param {Buffer} hashRight\n */\nMerkleHashCalculator.prototype.calculateNodeHashInternal = function (prefix, hashLeft, hashRight, hashFunc) {\n var buf = Buffer.alloc(1);\n buf.writeInt8(prefix);\n var bufferSum = Buffer.concat([buf, hashLeft, hashRight]);\n return hashFunc(bufferSum, this.cryptoSystem);\n};\nMerkleHashCalculator.prototype.calculateHashOfValueInternal = function (valuetoHash, serializeFun, hashFunc) {\n var buf = Buffer.alloc(1);\n buf.writeInt8(HASH_PREFIX_LEAF);\n var bufferSum = Buffer.concat([buf, serializeFun(valuetoHash)]);\n return hashFunc(bufferSum, this.cryptoSystem);\n};\nMerkleHashCalculator.prototype.isContainerProofValueLeaf = function (value) {\n if (value == null) {\n return false;\n }\n if (value.constructor === Array || typeof value === 'object') {\n return true;\n }\n else {\n return false;\n }\n};\nmodule.exports = { MerkleHashCalculator, CryptoSystem };\n//# sourceMappingURL=merklehashcalculator.js.map","\"use strict\";\nvar util = require('../formatter');\nvar PathSet = require('./path').PathSet;\nvar PathLeafElement = require('./path').PathLeafElement;\nvar EmptyLeaf = require('./binarytree').EmptyLeaf;\nvar Leaf = require('./binarytree').Leaf;\nvar Node = require('./binarytree').Node;\nvar BinaryTree = require('./binarytree').BinaryTree;\nvar ArrayHeadNode = require('./binarytree').ArrayHeadNode;\nvar DictHeadNode = require('./binarytree').DictHeadNode;\nconst NO_PATHS = new PathSet([]);\n/**\n * The factory does the conversion between list of elements and tree of elements.\n *\n * Note: The idea is that you should sub class for each type of element you want to build.\n */\nfunction BinaryTreeFactory() { }\n/**\n * Transforms the incoming leaf into an [BinaryTreeElement]\n * The idea with this function is that it can be recursive (if the leaf in turn is complex object with sub objects).\n *\n * Note: If we don't have a path here we can try to find the leaf in the cache.\n *\n * @param leaf the raw data we should wrap in a leaf\n * @param paths a collection of proof paths that might point to this leaf\n * @return the resulting [BinaryTreeElement] the leaf got converted to\n */\nBinaryTreeFactory.prototype.handleLeaf = function (leaf, paths, isRoot = false) {\n if (paths.length == 0 && !isRoot) {\n return this.innerHandleLeaf(leaf, this.getEmptyPathSet());\n }\n else {\n return this.innerHandleLeaf(leaf, paths);\n }\n};\n/**\n *\n */\nBinaryTreeFactory.prototype.getEmptyPathSet = function () {\n return NO_PATHS;\n};\n/**\n * At this point we should have looked in cache.\n *\n * @param leaf we should turn into a tree element\n * @param {PathSet} paths\n * @return the tree element we created.\n */\nBinaryTreeFactory.prototype.innerHandleLeaf = function (leaf, paths) {\n if (leaf == null) {\n return this.handlePrimitiveLeaf(leaf, paths);\n }\n if (Buffer.isBuffer(leaf)) {\n return this.handlePrimitiveLeaf(leaf, paths);\n }\n if (typeof leaf === 'string') {\n return this.handlePrimitiveLeaf(leaf, paths);\n }\n if (typeof leaf === 'number') {\n return this.handlePrimitiveLeaf(leaf, paths);\n }\n if (typeof leaf === 'boolean') {\n return this.handlePrimitiveLeaf(leaf ? 1 : 0, paths);\n }\n if (leaf.constructor === Array) {\n return this.buildFromArray(leaf, paths);\n }\n if (typeof leaf === 'object') {\n return this.buildFromDictionary(leaf, paths);\n }\n else {\n throw new Error(\"Unsupporting data type\");\n }\n};\n/**\n * Just like [handleLeaf] but we know that this leaf should not be a complex type, but something we can\n * immediately wrap\n *\n * @param leaf\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.handlePrimitiveLeaf = function (leaf, paths) {\n var pathElem = paths.getPathLeafOrElseAnyCurrentPathElement();\n if (pathElem != null && !(pathElem instanceof PathLeafElement)) {\n throw new Error(\"Path does not match the tree structure. We are at a leaf \" + leaf + \" but found path element \" + pathElem);\n }\n return new Leaf(leaf, pathElem);\n};\n/**\n * Calls itself until the return value only holds 1 element\n *\n * Note: This method can only create standard [Node] that fills up the area between the \"top\" and the leaves.\n * These \"in-between\" nodes cannot be \"path leaf\" or have any interesting properties.\n *\n * @param layer What layer we aim calculate\n * @param inList The args of nodes we should build from\n * @return All [BinaryTreeElement] nodes of the next layer\n */\nBinaryTreeFactory.prototype.buildHigherLayer = function (layer, inList) {\n if (inList.length === 0) {\n throw new Error(\"Cannot work on empty arrays. Layer: \" + layer);\n }\n else if (inList.length === 1) {\n return inList;\n }\n var returnArray = new Array();\n var nrOfNodesToCreate = Math.floor(inList.length / 2);\n var leftValue = null;\n var isLeft = true;\n for (var i = 0; i < inList.length; i++) {\n if (isLeft) {\n leftValue = inList[i];\n isLeft = false;\n }\n else {\n var tempNode = new Node(leftValue, inList[i]);\n returnArray.push(tempNode);\n nrOfNodesToCreate--;\n isLeft = true;\n leftValue = null;\n }\n }\n if (!isLeft) {\n // If there is odd number of nodes, then move the last node up one level\n returnArray.push(leftValue);\n }\n // Extra check\n if (nrOfNodesToCreate != 0) {\n util.logDebug(\"Why didn't we build exactly the correct amount? Layer: \" + layer + \" , residue: \" + nrOfNodesToCreate + \" , input args size: \" + inList.length + \".\");\n }\n return this.buildHigherLayer((layer + 1), returnArray);\n};\nBinaryTreeFactory.prototype.build = function (data) {\n return this.buildWithPath(data, NO_PATHS);\n};\n/**\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildWithPath = function (data, paths) {\n var result = this.handleLeaf(data, paths, true);\n return new BinaryTree(result);\n};\n/**\n * @param {Array} array\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildFromArray = function (array, paths) {\n var pathElem = paths.getPathLeafOrElseAnyCurrentPathElement();\n // 1. Build leaf layer\n if (array.length == 0) {\n return new ArrayHeadNode(new EmptyLeaf(), new EmptyLeaf(), array, 0, 0, pathElem);\n }\n var leafArray = this.buildLeafElements(array, paths);\n // 2. Build all higher layers\n var result = this.buildHigherLayer(1, leafArray);\n // 3. Fix and return the root node\n var orgRoot = result[0];\n if (orgRoot instanceof Node) {\n return new ArrayHeadNode(orgRoot.left, orgRoot.right, array, array.length, pathElem);\n }\n if (orgRoot instanceof Leaf) {\n return this.buildFromOneLeaf(array, orgRoot, pathElem);\n }\n else {\n throw new Error(\"Should not find element of this type here\");\n }\n};\n/**\n *\n */\nBinaryTreeFactory.prototype.buildFromOneLeaf = function (array, orgRoot, pathElem) {\n if (array.length > 1) {\n throw new Error(\"How come we got a leaf returned when we had \" + array.length + \" elements is the args?\");\n }\n else {\n return new ArrayHeadNode(orgRoot, new EmptyLeaf(), array, array.length, pathElem);\n }\n};\n/**\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildLeafElements = function (leafList, paths) {\n var leafArray = new Array();\n var onlyArrayPaths = paths.keepOnlyArrayPaths(); // For performance, since we will loop soon\n for (var i = 0; i < leafList.length; i++) {\n var pathsRelevantForThisLeaf = onlyArrayPaths.getTailIfFirstElementIsArrayOfThisIndexFromList(i);\n var leaf = leafList[i];\n var binaryTreeElement = this.handleLeaf(leaf, pathsRelevantForThisLeaf);\n leafArray.push(binaryTreeElement);\n }\n return leafArray;\n};\n/**\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildFromDictionary = function (dict, paths) {\n var pathElem = paths.getPathLeafOrElseAnyCurrentPathElement();\n // Needs to be sorted, or else the order is undefined\n var keys = Object.keys(dict).sort();\n if (keys.length == 0) {\n return new DictHeadNode(new EmptyLeaf(), new EmptyLeaf(), dict, keys.length, 0, pathElem);\n }\n // 1. Build first (leaf) layer\n var leafArray = this.buildLeafElementFromDict(keys, dict, paths);\n // 2. Build all higher layers\n var result = this.buildHigherLayer(1, leafArray);\n // 3. Fix and return the root node\n var orgRoot = result[0];\n if (orgRoot instanceof Node) {\n return new DictHeadNode(orgRoot.left, orgRoot.right, dict, keys.length, pathElem);\n }\n else {\n throw new Error(\"Should not find element of this type here: \" + typeof orgRoot);\n }\n};\n/**\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildLeafElementFromDict = function (keys, dict, paths) {\n var leafArray = new Array();\n var onlyDictPaths = paths.keepOnlyDictPaths(); // For performance, since we will loop soon\n for (var i = 0; i < keys.length; i++) {\n // The key cannot not be proved, so NO_PATHS\n var key = keys[i];\n var keyElement = this.handleLeaf(key, NO_PATHS);\n leafArray.push(keyElement);\n var content = dict[key];\n var pathsRelevantForThisLeaf = onlyDictPaths.getTailIfFirstElementIsDictOfThisKeyFromList(key);\n var contentElement = this.handleLeaf(content, pathsRelevantForThisLeaf);\n leafArray.push(contentElement);\n }\n return leafArray;\n};\nmodule.exports = { BinaryTreeFactory };\n//# sourceMappingURL=binarytreefactory.js.map","var SearchablePathElement = require('../path').SearchablePathElement;\nvar HASH_PREFIX_NODE = require('../binarytree').HASH_PREFIX_NODE;\nvar HASH_PREFIX_NODE_ARRAY = require('../binarytree').HASH_PREFIX_NODE_ARRAY;\nvar HASH_PREFIX_NODE_DICT = require('../binarytree').HASH_PREFIX_NODE_DICT;\n/**\n *\n */\nfunction MerkleProofElement() { }\n/**\n *\n * @param {Buffer} prefix\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n */\nfunction ProofNode(prefix, left, right) {\n this.prefix = prefix;\n this.left = left;\n this.right = right;\n}\nProofNode.prototype = Object.create(MerkleProofElement.prototype);\nProofNode.prototype.constructor = ProofNode;\n/**\n *\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n */\nfunction ProofNodeSimple(left, right) {\n ProofNode.call(this, HASH_PREFIX_NODE, left, right);\n}\nProofNodeSimple.prototype = Object.create(ProofNode.prototype);\nProofNodeSimple.prototype.constructor = ProofNodeSimple;\n/**\n *\n * @param {*} content\n * @param {SearchablePathElement} pathElem\n */\nfunction ProofValueLeaf(content, pathElem) {\n this.content = content;\n this.pathElem = pathElem;\n}\nProofValueLeaf.prototype = Object.create(MerkleProofElement.prototype);\nProofValueLeaf.prototype.constructor = ProofValueLeaf;\n/**\n *\n * @param {Buffer} merkleHash\n */\nfunction ProofHashedLeaf(merkleHash) {\n this.merkleHash = merkleHash;\n}\nProofHashedLeaf.prototype = Object.create(MerkleProofElement.prototype);\nProofHashedLeaf.prototype.constructor = ProofHashedLeaf;\n/**\n * @param {ProofHashedLeaf} other\n */\nProofHashedLeaf.prototype.equals = function (other) {\n if (other instanceof ProofHashedLeaf) {\n return this.merkleHash.equals(other.merkleHash);\n }\n else {\n return false;\n }\n};\n/**\n *\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n * @param {SearchablePathElement} pathElem\n */\nfunction ProofNodeArrayHead(left, right, pathElem = null) {\n ProofNode.call(this, HASH_PREFIX_NODE_ARRAY, left, right);\n this.pathElem = pathElem;\n}\nProofNodeArrayHead.prototype = Object.create(ProofNode.prototype);\nProofNodeArrayHead.prototype.constructor = ProofNodeArrayHead;\n/**\n *\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n * @param {SearchablePathElement} pathElem\n */\nfunction ProofNodeDictHead(left, right, pathElem = null) {\n ProofNode.call(this, HASH_PREFIX_NODE_DICT, left, right);\n this.pathElem = pathElem;\n}\nProofNodeDictHead.prototype = Object.create(ProofNode.prototype);\nProofNodeDictHead.prototype.constructor = ProofNodeDictHead;\n/**\n *\n * @param {MerkleProofElement} root\n */\nfunction MerkleProofTree(root) {\n this.root = root;\n}\nMerkleProofTree.prototype.maxLevel = function () {\n return this.maxLevelInternal(this.root);\n};\n/**\n * @param {MerkleProofElement} node\n */\nMerkleProofTree.prototype.maxLevelInternal = function (node) {\n if (node instanceof ProofValueLeaf) {\n return 1;\n }\n else if (node instanceof ProofHashedLeaf) {\n return 1;\n }\n else if (node instanceof ProofNode) {\n return Math.max(this.maxLevelInternal(node.left), this.maxLevelInternal(node.right)) + 1;\n }\n else {\n throw new Error(\"Should be able to handle node type: \" + typeof node);\n }\n};\nmodule.exports = { ProofNode, ProofNodeSimple, ProofHashedLeaf, ProofValueLeaf,\n ProofNodeArrayHead, ProofNodeDictHead, MerkleProofElement, MerkleProofTree };\n//# sourceMappingURL=merkleprooftree.js.map","var BinaryTreeElement = require('../binarytree').BinaryTreeElement;\nvar Node = require('../binarytree').Node;\nvar Leaf = require('../binarytree').Leaf;\nvar EmptyLeaf = require('../binarytree').EmptyLeaf;\nvar BinaryTree = require('../binarytree').BinaryTree;\nvar ProofHashedLeaf = require('./merkleprooftree').ProofHashedLeaf;\nvar ProofValueLeaf = require('./merkleprooftree').ProofValueLeaf;\nvar MerkleProofElement = require('./merkleprooftree').MerkleProofElement;\nvar MerkleProofTree = require('./merkleprooftree').MerkleProofTree;\nvar ProofNodeArrayHead = require('./merkleprooftree').ProofNodeArrayHead;\nvar ProofNodeDictHead = require('./merkleprooftree').ProofNodeDictHead;\nvar PathLeafElement = require('../path').PathLeafElement;\nvar SubTreeRootNode = require('../binarytree').SubTreeRootNode;\nvar ArrayHeadNode = require('../binarytree').ArrayHeadNode;\nvar DictHeadNode = require('../binarytree').DictHeadNode;\nvar ProofNodeSimple = require('./merkleprooftree').ProofNodeSimple;\nconst EMPTY_HASH = new Buffer.alloc(32);\n/**\n *\n */\nfunction MerkleProofTreeFactory() { }\n/**\n * @param {BinaryTree} orginalTree\n */\nMerkleProofTreeFactory.prototype.buildFromBinaryTree = function (orginalTree, calculator) {\n var rootElem = this.buildFromBinaryTreeInternal(orginalTree.root, calculator);\n return new MerkleProofTree(rootElem);\n};\n/**\n * @param {BinaryTreeElement} elem\n * @param {*} calculator\n */\nMerkleProofTreeFactory.prototype.buildFromBinaryTreeInternal = function (elem, calculator) {\n if (elem instanceof EmptyLeaf) {\n return new ProofHashedLeaf(EMPTY_HASH);\n }\n else if (elem instanceof Leaf) {\n var pathElem = elem.pathElem;\n if (pathElem != null) {\n if (pathElem instanceof PathLeafElement) {\n return new ProofValueLeaf(elem.content, pathElem.previous);\n }\n else {\n throw new Error(\"The path and structure don't match. We are at a leaf, but path elem is not a leaf: \" + pathElem);\n }\n }\n else {\n // make a hash\n var hash = calculator.calculateLeafHash(elem.content);\n return new ProofHashedLeaf(hash);\n }\n }\n else if (elem instanceof SubTreeRootNode) {\n var pathElem = elem.pathElem;\n if (pathElem != null) {\n if (pathElem instanceof PathLeafElement) {\n // Don't convert it\n return new ProofValueLeaf(elem.content, pathElem.previous);\n }\n else {\n return this.convertNode(elem, calculator);\n }\n }\n else {\n return this.convertNode(elem, calculator);\n }\n }\n else if (elem instanceof Node) {\n return this.convertNode(elem, calculator);\n }\n else {\n throw new Error(\"Cannot handle \" + elem);\n }\n};\n/**\n * @param {Node} node\n */\nMerkleProofTreeFactory.prototype.convertNode = function (node, calculator) {\n var left = this.buildFromBinaryTreeInternal(node.left, calculator);\n var right = this.buildFromBinaryTreeInternal(node.right, calculator);\n if (left instanceof ProofHashedLeaf && right instanceof ProofHashedLeaf) {\n var addedHash = calculator.calculateNodeHash(node.getPrefixByte(), left.merkleHash, right.merkleHash);\n return new ProofHashedLeaf(addedHash);\n }\n else {\n return this.buildNodeOfCorrectType(node, left, right);\n }\n};\n/**\n * @param {ArrayHeadNode} node\n */\nMerkleProofTreeFactory.prototype.extractSearchablePathElement = function (node) {\n var pathElem = node.pathElem;\n if (pathElem != null) {\n return pathElem.previous;\n }\n else {\n return null;\n }\n};\n/**\n * @param {Node} node\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n */\nMerkleProofTreeFactory.prototype.buildNodeOfCorrectType = function (node, left, right) {\n if (node instanceof ArrayHeadNode) {\n return new ProofNodeArrayHead(left, right, this.extractSearchablePathElement(node));\n }\n else if (node instanceof DictHeadNode) {\n return new ProofNodeDictHead(left, right, this.extractSearchablePathElement(node));\n }\n else if (node instanceof Node) {\n return new ProofNodeSimple(left, right);\n }\n else {\n throw new Error(\"Should have taken care of this node type: \" + node);\n }\n};\nmodule.exports = { MerkleProofTreeFactory };\n//# sourceMappingURL=merkleprooftreefactory.js.map","\"use strict\";\n/**\n *\n * @param {Buffer} merkleHash\n */\nfunction MerkleHashSummary(merkleHash) {\n this.merkleHash = merkleHash;\n}\n/**\n * @param {MerkleHashSummary} other\n */\nMerkleHashSummary.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this != typeof other)\n return false;\n if (this.merkleHash.compare(other.merkleHash) === 0) {\n return true;\n }\n return false;\n};\nmodule.exports = { MerkleHashSummary };\n//# sourceMappingURL=merklehashcarrier.js.map","var BinaryTreeFactory = require('../binarytreefactory').BinaryTreeFactory;\nvar MerkleProofTreeFactory = require('./merkleprooftreefactory').MerkleProofTreeFactory;\nvar MerkleHashCalculator = require('../merklehashcalculator').MerkleHashCalculator;\nvar MerkleProofTree = require('./merkleprooftree').MerkleProofTree;\nvar MerkleProofElement = require('./merkleprooftree').MerkleProofElement;\nvar ProofHashedLeaf = require('./merkleprooftree').ProofHashedLeaf;\nvar ProofValueLeaf = require('./merkleprooftree').ProofValueLeaf;\nvar ProofNode = require('./merkleprooftree').ProofNode;\nvar MerkleHashSummary = require('./merklehashcarrier').MerkleHashSummary;\n/**\n *\n * @param {BinaryTreeFactory} treeFactory\n * @param {MerkleProofTreeFactory} proofFactory\n */\nfunction MerkleHashSummaryFactory(treeFactory, proofFactory) {\n this.treeFactory = treeFactory;\n this.proofFactory = proofFactory;\n}\n/**\n * @param {any} value\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.calculateMerkleRoot = function (value, calculator) {\n var binaryTree = this.treeFactory.build(value);\n var proofTree = this.proofFactory.buildFromBinaryTree(binaryTree, calculator);\n return this.calculateMerkleRootOfTree(proofTree, calculator);\n};\n/**\n * @param {MerkleProofTree} value\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.calculateMerkleTreeRoot = function (tree, calculator) {\n return this.calculateMerkleRootOfTree(tree, calculator);\n};\n/**\n * @param {MerkleProofTree} proofTree\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.calculateMerkleRootOfTree = function (proofTree, calculator) {\n var calculatedSummary = this.calculateMerkleRootInternal(proofTree.root, calculator);\n return new MerkleHashSummary(calculatedSummary);\n};\n/**\n * @param {MerkleProofElement} currentElement\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.calculateMerkleRootInternal = function (currentElement, calculator) {\n if (currentElement instanceof ProofHashedLeaf) {\n return currentElement.merkleHash;\n }\n else if (currentElement instanceof ProofValueLeaf) {\n var value = currentElement.content;\n if (calculator.isContainerProofValueLeaf(value)) {\n // We have a container value to prove, so need to convert the value to a binary tree, and THEN hash it\n var merkleProofTree = this.buildProofTree(value, calculator);\n return this.calculateMerkleRootInternal(merkleProofTree.root, calculator);\n }\n else {\n // This is a primitive value, just hash it\n return calculator.calculateLeafHash(value);\n }\n }\n else if (currentElement instanceof ProofNode) {\n var left = this.calculateMerkleRootInternal(currentElement.left, calculator);\n var right = this.calculateMerkleRootInternal(currentElement.right, calculator);\n return calculator.calculateNodeHash(currentElement.prefix, left, right);\n }\n else {\n throw new Error(\"Should have handled this type? \" + typeof currentElement);\n }\n};\n/**\n * @param {any} value\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.buildProofTree = function (value, calculator) {\n var root = this.treeFactory.build(value);\n return this.proofFactory.buildFromBinaryTree(root, calculator);\n};\nmodule.exports = { MerkleHashSummaryFactory };\n//# sourceMappingURL=merklehashsummaryfactory.js.map","\"use strict\";\nvar MerkleHashCalculator = require('../merklehashcalculator').MerkleHashCalculator;\nvar MerkleHashSummaryFactory = require('./merklehashsummaryfactory').MerkleHashSummaryFactory;\nvar BinaryTreeFactory = require('../binarytreefactory').BinaryTreeFactory;\nvar MerkleProofTreeFactory = require('./merkleprooftreefactory').MerkleProofTreeFactory;\nvar treeFactory = new BinaryTreeFactory();\nvar proofFactory = new MerkleProofTreeFactory();\nvar PathSet = require('../path').PathSet;\nvar MerkleProofTree = require('./merkleprooftree').MerkleProofTree;\n/**\n * Calculates the merkle root hash of the structure.\n *\n * @param {any} value\n * @param {MerkleHashCalculator} calculator describes the method we use for hashing and serialization\n * @return the merkle root hash (32 bytes) of the data structure.\n */\nfunction merkleHash(value, calculator) {\n return merkleHashSummary(value, calculator).merkleHash;\n}\n/**\n *\n * @param {MerkleProofTree} tree\n * @param {MerkleHashCalculator} calculator\n */\nfunction merkleTreeHash(tree, calculator) {\n return merkleProofHashSummary(tree, calculator).merkleHash;\n}\n/**\n * Calculates the merkle root hash of the structure\n *\n * @param {any} value\n * @param {MerkleHashCalculator} calculator describes the method we use for hashing and serialization\n * @return the merkle root hash summary\n */\nfunction merkleHashSummary(value, calculator) {\n var summaryFactory = new MerkleHashSummaryFactory(treeFactory, proofFactory);\n return summaryFactory.calculateMerkleRoot(value, calculator);\n}\n/**\n *\n * @param {MerkleProofTree} tree\n * @param {MerkleHashCalculator} calculator\n */\nfunction merkleProofHashSummary(tree, calculator) {\n var summaryFactory = new MerkleHashSummaryFactory(treeFactory, proofFactory);\n return summaryFactory.calculateMerkleTreeRoot(tree, calculator);\n}\n/**\n *\n * @param {any} value\n * @param {PathSet} pathSet\n * @param {MerkleHashCalculator} calculator\n */\nfunction generateProof(value, pathSet, calculator) {\n var binaryTree = treeFactory.buildWithPath(value, pathSet);\n return proofFactory.buildFromBinaryTree(binaryTree, calculator);\n}\nmodule.exports = { merkleHash, merkleTreeHash, merkleHashSummary, generateProof };\n//# sourceMappingURL=merkleproof.js.map","import { MerkleHashCalculator, CryptoSystem, } from \"../merkle/merklehashcalculator\";\nconst theMerkleHashCalculator = new MerkleHashCalculator(new CryptoSystem());\nimport { merkleHashSummary } from \"../merkle/proof/merkleproof\";\nimport * as serialization from \"../gtx/serialization\";\nconst gtvHash = (obj) => {\n return merkleHashSummary(obj, theMerkleHashCalculator).merkleHash;\n};\nconst encode = serialization.encodeValue;\nconst decode = serialization.decodeValue;\nexport { encode, decode, gtvHash };\n//# sourceMappingURL=index.js.map","import * as serialization from \"./serialization\";\nconst encode = serialization.encodeValueGtx;\nconst decode = serialization.decodeValueGtx;\nexport { encode, decode };\n//# sourceMappingURL=index.js.map","import * as gtv from \"../gtv\";\nimport { signDigest, checkDigestSignature } from \"../encryption/encryption\";\nimport { AlreadySignedTransactionException, MissingGtxException, MissingSignerException, NumberOfSignersAndSignaturesException, } from \"./errors\";\nimport { encode as gtxEncode, decode as gtxDecode } from \"./index\";\nexport function emptyGtx(blockchainRID) {\n return { blockchainRID: blockchainRID, operations: [], signers: [] };\n}\n/**\n * Adds a function call to a GTX. Creates a new GTX if none specified.\n * This function will throw Error if gtx is already signed\n * @param opName the name of the function to call\n * @param args the array of arguments of the function call. If no args, this must be an empty array\n * @param gtx the function call will be added to this gtx\n * @returns the gtx\n * @throws if gtx is null or if gtx is already signed\n */\nexport function addTransactionToGtx(opName, args, gtx) {\n if (gtx == null) {\n throw new MissingGtxException();\n }\n if (gtx.signatures) {\n throw new AlreadySignedTransactionException(\"function\");\n }\n gtx.operations.push({ opName: opName, args: args });\n return gtx;\n}\nexport function addSignerToGtx(signer, gtx) {\n if (gtx.signatures) {\n throw new AlreadySignedTransactionException(\"signer\");\n }\n gtx.signers.push(signer);\n}\n/**\n * Serializes the gtx for signing\n * @param gtx the gtx to serialize\n */\nexport function getDigestToSign(gtx) {\n return gtv.gtvHash(gtvTxBody(gtx));\n}\nexport function gtvTxBody(gtx) {\n return [\n gtx.blockchainRID,\n gtx.operations.map((op) => [op.opName, op.args]),\n gtx.signers,\n ];\n}\n/**\n * Signs the gtx with the provided privKey. This is a convenience function\n * for situations where you don't have to ask someone else to sign.\n */\nexport function sign(privKey, pubKey, gtx) {\n const digestToSign = getDigestToSign(gtx);\n const signature = signDigest(digestToSign, privKey);\n addSignature(pubKey, signature, gtx);\n}\nexport function signRawTransaction(_keyPair, _rawTransaction) {\n throw Error(\"TODO\");\n //TODO\n //const gtx = module.exports.deserialize(rawTransaction);\n //module.exports.sign(keyPair.privKey, keyPair.pubKey, gtx);\n // return module.exports.serialize(gtx)\n}\n/**\n * Adds a signature to the gtx\n */\nexport function addSignature(pubKeyBuffer, signatureBuffer, gtx) {\n if (!gtx.signatures) {\n gtx.signatures = Array(gtx.signers.length).fill(Buffer.alloc(64));\n }\n if (gtx.signers.length !== gtx.signatures.length) {\n throw new NumberOfSignersAndSignaturesException();\n }\n const signerIndex = gtx.signers.findIndex((signer) => pubKeyBuffer.equals(signer));\n if (signerIndex === -1) {\n throw new MissingSignerException();\n }\n gtx.signatures[signerIndex] = signatureBuffer;\n}\nexport function serialize(gtx) {\n if (!gtx.signatures) {\n // TODO\n // The gtx is not signed, but we must include\n // the signatures attribute, so let's add that.\n gtx.signatures = [];\n }\n return gtxEncode([gtvTxBody(gtx), gtx.signatures]);\n}\nexport function deserialize(gtxBytes) {\n const deserializedTx = gtxDecode(gtxBytes);\n const body = deserializedTx[0];\n const gtvTxBody = {\n blockchainRID: body[0],\n operations: body[1].map((operation) => ({\n opName: operation[0],\n args: operation[1],\n })),\n signers: body[2],\n };\n const signatures = deserializedTx[1];\n return {\n blockchainRID: gtvTxBody.blockchainRID,\n operations: gtvTxBody.operations,\n signers: gtvTxBody.signers,\n signatures,\n };\n}\nexport function checkGTXSignatures(txHash, gtx) {\n for (const i in gtx.signers) {\n const signValid = checkDigestSignature(txHash, gtx.signers[i], gtx.signatures[i]);\n if (!signValid)\n return signValid;\n }\n return true;\n}\n//# sourceMappingURL=gtx.js.map","export { debug, info, error, warning, setLogLevel, getLogLevel };\nvar MsgType;\n(function (MsgType) {\n MsgType[\"debug\"] = \"DEBUG\";\n MsgType[\"info\"] = \"INFO\";\n MsgType[\"error\"] = \"ERROR\";\n MsgType[\"warning\"] = \"WARNING\";\n})(MsgType || (MsgType = {}));\nvar LogColor;\n(function (LogColor) {\n LogColor[\"red\"] = \"\\u001B[91m\";\n LogColor[\"green\"] = \"\\u001B[92m\";\n LogColor[\"blue\"] = \"\\u001B[36m\";\n LogColor[\"yellow\"] = \"\\u001B[93m\";\n LogColor[\"stopColor\"] = \"\\u001B[0m\";\n})(LogColor || (LogColor = {}));\nlet logLevel = 1;\nfunction setLogLevel(level) {\n logLevel = level;\n}\nfunction getLogLevel() {\n return logLevel;\n}\nfunction debug(message) {\n if (logLevel >= 3) {\n emitLogMessage(MsgType.debug, message, LogColor.blue);\n }\n}\nfunction info(message) {\n if (logLevel >= 2) {\n emitLogMessage(MsgType.info, message, LogColor.green);\n }\n}\nfunction error(message) {\n if (logLevel != -1) {\n emitLogMessage(MsgType.error, message, LogColor.red);\n }\n}\nfunction warning(message) {\n if (logLevel >= 1) {\n emitLogMessage(MsgType.warning, message, LogColor.yellow);\n }\n}\nfunction emitLogMessage(msgType, message, color) {\n const time = getTimestamp();\n console.log(`[${time}] ${color}${msgType}:${LogColor.stopColor} ${message}`);\n}\nfunction getTimestamp() {\n const pad = (n, s = 2) => `${new Array(s).fill(0)}${n}`.slice(-s);\n const date = new Date();\n return `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}:${pad(date.getMilliseconds(), 3)}`;\n}\n//# sourceMappingURL=logger.js.map","\"use strict\";\nimport * as gtxTool from \"./gtx\";\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst secp256k1 = require(\"secp256k1\");\nimport * as logger from \"../logger\";\nimport { removeDuplicateSigners } from \"../formatter\";\nexport function createClient(restApiClient, blockchainRID, functionNames) {\n functionNames.push(\"message\");\n function transaction(gtx) {\n return {\n gtx,\n sign: function (privKey, pubKey) {\n let pub = pubKey;\n if (!pub) {\n logger.debug(`pubKey not provided, will instead be generated using secp256k1`);\n pub = Buffer.from(secp256k1.publicKeyCreate(privKey));\n }\n logger.debug(`signing transaction with privKey: ${privKey}, pubKey: ${pub}`);\n gtxTool.sign(privKey, pub, this.gtx);\n },\n getTxRID: function () {\n return this.getDigestToSign();\n },\n getDigestToSign: function () {\n return gtxTool.getDigestToSign(this.gtx);\n },\n addSignature: function (pubKey, signature) {\n gtxTool.addSignature(pubKey, signature, this.gtx);\n },\n // raw call\n addOperation: function (name, ...args) {\n gtxTool.addTransactionToGtx(name, args, this.gtx);\n },\n postAndWaitConfirmation() {\n return restApiClient.postAndWaitConfirmation(gtxTool.serialize(this.gtx), this.getTxRID());\n },\n send: function (callback) {\n const gtxBytes = gtxTool.serialize(this.gtx);\n restApiClient.postTransaction(gtxBytes, callback);\n this.gtx = null;\n this.gtxBytes = gtxBytes;\n },\n encode: function () {\n return gtxTool.serialize(this.gtx);\n },\n };\n }\n function addFunctions(req) {\n functionNames.forEach((functionName) => {\n req[functionName] = function (...args) {\n gtxTool.addTransactionToGtx(functionName, args, this.gtx);\n };\n });\n }\n const client = {\n newTransaction: function (signers) {\n signers = removeDuplicateSigners(signers);\n const newGtx = gtxTool.emptyGtx(Buffer.from(blockchainRID, \"hex\"));\n signers.forEach((signer) => gtxTool.addSignerToGtx(signer, newGtx));\n const req = transaction(newGtx);\n addFunctions(req);\n return req;\n },\n transactionFromRawTransaction: function (rawTransaction) {\n const gtx = gtxTool.deserialize(rawTransaction);\n logger.debug(`Output from deserializing a raw transaction: ${JSON.stringify(gtx)}`);\n const req = transaction(gtx);\n addFunctions(req);\n return req;\n },\n query: function (queryObject, callback) {\n return restApiClient.query(queryObject, callback);\n },\n };\n return client;\n}\n//# sourceMappingURL=gtxclient.js.map","export var ResponseStatus;\n(function (ResponseStatus) {\n ResponseStatus[\"Confirmed\"] = \"confirmed\";\n ResponseStatus[\"Rejected\"] = \"rejected\";\n ResponseStatus[\"Unknown\"] = \"unknown\";\n ResponseStatus[\"Waiting\"] = \"waiting\";\n})(ResponseStatus || (ResponseStatus = {}));\nexport var Method;\n(function (Method) {\n Method[\"GET\"] = \"get\";\n Method[\"POST\"] = \"post\";\n})(Method || (Method = {}));\n//# sourceMappingURL=types.js.map","export class TxRejectedError extends Error {\n constructor(rejectReason) {\n super(\"Transaction was rejected\");\n this.name = \"TxRejectedError\";\n this.fullReason = rejectReason;\n const parsed = rejectReason.match(/^\\[(.+)\\] Operation '(.+)' failed: (.+)$/);\n if (parsed) {\n this.shortReason = parsed[3];\n this.rellLine = parsed[1];\n this.operation = parsed[2];\n }\n }\n}\nexport class UnexpectedStatusError extends Error {\n constructor(status) {\n super(`Unexpected status code from server: ${status}`);\n }\n}\nexport class LostMessageError extends Error {\n constructor() {\n super(`Server lost our message`);\n }\n}\nexport class UnexpectedResponseError extends Error {\n constructor() {\n super(`got unexpected response from server`);\n }\n}\nexport class UnvalidTxRidException extends Error {\n constructor(txRID) {\n super(`expected length 32 of txRID, but got ${txRID.length}`);\n }\n}\nexport class SerializedTransactionFormatException extends Error {\n constructor() {\n super(`messageHash is not a Buffer`);\n }\n}\nexport class GetBridFromChainException extends Error {\n constructor(chainId, reason) {\n super(`Error resolving BRID for chainId ${chainId}, reason: ${reason}`);\n }\n}\nexport class EmptyListOfUrlsException extends Error {\n constructor() {\n super(`Failed to initialize rest client with empty list of urls`);\n }\n}\nexport class InvalidBlochchainRIDException extends Error {\n constructor() {\n super(`Failed to initialize rest client with blockchain RID that is not 32 bytes`);\n }\n}\n//# sourceMappingURL=errors.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as logger from \"../logger\";\nimport { decodeValue } from \"../gtx/serialization\";\nimport { GetBridFromChainException } from \"./errors\";\nimport { Method, } from \"./types\";\nexport function getBrid(urlBase, chainId) {\n if (chainId >= 0) {\n const url = `${urlBase}/brid/iid_${chainId}`;\n return fetch(url).then((response) => {\n if (response.ok)\n return response.text();\n throw new GetBridFromChainException(chainId, response.statusText);\n });\n }\n else {\n const url = `${urlBase}/_debug`;\n return fetch(url).then((response) => {\n if (response.ok)\n return response\n .json()\n .then((json) => json.blockchain[json.blockchain.length - 1].brid);\n throw new GetBridFromChainException(chainId, response.statusText);\n });\n }\n}\nexport function requestWithRetry(method, path, config, postObject) {\n return __awaiter(this, void 0, void 0, function* () {\n let statusCode, rspBody, error;\n const noRetryStatusCodes = [200, 400, 409, 500];\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const _endpoint of config.endpointPool) {\n const endpoint = nextEndpoint(config.endpointPool);\n for (let attempt = 0; attempt < config.attemptsPerEndpoint; attempt++) {\n ({ error, statusCode, rspBody } = yield handleRequest(method, path, endpoint, postObject));\n if (noRetryStatusCodes.includes(statusCode)) {\n return { error, statusCode, rspBody };\n }\n if (statusCode == 503) {\n break;\n }\n logger.info(`${method} request failed on ${endpoint}. Attempt: ${attempt + 1} / ${config.attemptsPerEndpoint}`);\n yield sleep(config.attemptInterval);\n }\n }\n return { error, statusCode, rspBody };\n });\n}\nexport function handleRequest(method, path, endpoint, postObject) {\n return __awaiter(this, void 0, void 0, function* () {\n if (method == Method.GET) {\n return yield get(path, endpoint);\n }\n else {\n return yield post(path, endpoint, postObject);\n }\n });\n}\n/**\n * Sends request to get data from a given API endpoint.\n * @param path API endpoint of Rell backend\n * @param endpoint\n */\nfunction get(path, endpoint) {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug(\"GET URL \" + new URL(path, endpoint).href);\n try {\n const response = yield fetch(new URL(path, endpoint).href);\n if (response.status == 404) {\n return { error: null, statusCode: response.status, rspBody: null };\n }\n const rspBody = yield response.json();\n return { error: null, statusCode: response.status, rspBody };\n }\n catch (error) {\n logger.error(error.message);\n return { error, statusCode: null, rspBody: null };\n }\n });\n}\n/**\n * Sends request to post data to a given API endpoint.\n * @param path API endpoint of Rell backend\n * @param endpoint\n * @param requestBody request body\n */\nfunction post(path, endpoint, requestBody) {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug(\"POST URL \" + new URL(path, endpoint).href);\n logger.debug(\"POST body \" + JSON.stringify(requestBody));\n if (Buffer.isBuffer(requestBody)) {\n try {\n const requestOptions = {\n method: \"post\",\n body: requestBody,\n };\n const response = yield fetch(new URL(path, endpoint).href, requestOptions);\n return {\n error: null,\n statusCode: response.status,\n rspBody: decodeValue(Buffer.from(yield response.arrayBuffer())),\n };\n }\n catch (error) {\n return { error, statusCode: null, rspBody: null };\n }\n }\n else {\n try {\n const response = yield fetch(new URL(path, endpoint).href, {\n method: \"post\",\n body: JSON.stringify(requestBody),\n });\n return {\n error: null,\n statusCode: response.status,\n rspBody: yield response.json(),\n };\n }\n catch (error) {\n return { error, statusCode: null, rspBody: null };\n }\n }\n });\n}\nexport function nextEndpoint(endpointPool) {\n return endpointPool[Math.floor(Math.random() * endpointPool.length)];\n}\nexport const sleep = (ms) => new Promise((r) => setTimeout(r, ms));\n//# sourceMappingURL=restclientutil.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ResponseStatus, Method, } from \"./types\";\nimport * as logger from \"../logger\";\nimport { EmptyListOfUrlsException, LostMessageError, SerializedTransactionFormatException, TxRejectedError, UnexpectedResponseError, UnexpectedStatusError, UnvalidTxRidException, } from \"./errors\";\nimport { toBuffer, toQueryObjectGTV } from \"../formatter\";\nimport { requestWithRetry } from \"./restclientutil\";\nimport { encodeValue } from \"../gtx/serialization\";\nexport function createRestClient(endpointPool, blockchainRID, maxSockets = 10, pollingInterval = 500, failOverConfig) {\n validateInput(endpointPool, failOverConfig);\n return {\n config: {\n endpointPool: endpointPool,\n pool: { maxSockets },\n pollingInterval,\n attemptsPerEndpoint: (failOverConfig === null || failOverConfig === void 0 ? void 0 : failOverConfig.attemptsPerEndpoint) || 3,\n attemptInterval: (failOverConfig === null || failOverConfig === void 0 ? void 0 : failOverConfig.attemptInterval) || 500,\n },\n /**\n * Retrieves the client message with the specified double-sha256 hash\n * @param txRID the id of the transaction\n * @param callback parameters (error, serializedMessage) if first\n * parameter is not null, an error occurred.\n * If first parameter is null, then the second parameter is a buffer\n * with the serialized client message. If no such client message exists,\n * the callback will be called with (null, null).\n */\n getTransaction: function (txRID, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!validTxRID(txRID)) {\n callback(new UnvalidTxRidException(txRID), null);\n }\n else {\n const { error, statusCode, rspBody } = yield requestWithRetry(Method.GET, \"tx/\" + blockchainRID + \"/\" + txRID.toString(\"hex\"), this.config);\n handleGetResponse(error, statusCode, statusCode === 200 ? toBuffer(rspBody.tx) : rspBody, callback);\n }\n });\n },\n /**\n * Sends a transaction to postchain for inclusion in a block.\n * Use status() to monitor progress once this transaction is\n * posted.\n *\n * @param serializedTransaction The transaction (a buffer) to send\n * @param callback taking parameter (error, responseObject) if error is null\n * then resonseObject is also null. If error is not null, then responseObject\n * is an object with the string property 'error'\n */\n postTransaction: function (serializedTransaction, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!Buffer.isBuffer(serializedTransaction)) {\n throw new SerializedTransactionFormatException();\n }\n const transactionObject = {\n tx: serializedTransaction.toString(\"hex\"),\n };\n const { error, statusCode, rspBody } = yield requestWithRetry(Method.POST, \"tx/\" + blockchainRID, this.config, transactionObject);\n handlePostResponse(error, statusCode, rspBody, callback);\n });\n },\n /**\n * Retrieves a confirmation proof for a client message with the specified double-sha256\n * hash.\n * @param txRID the id of the transaction\n * @param callback parameters (error, responseObjectProof) if first\n * parameter is not null, an error occurred.\n * If first parameter is null, then the second parameter is an object\n * like the following:\n *\n * {hash: messageHashBuffer,\n * blockHeader: blockHeaderBuffer,\n * signatures: [{pubKey: pubKeyBuffer, signature: sigBuffer}, ...],\n * merklePath: [{side: <0|1>, hash: <hash buffer level n-1>},\n * ...\n * {side: <0|1>, hash: <hash buffer level 1>}]}\n *\n * If no such client message exists, the callback will be called with (null, null).\n *\n * The proof object can be validated using\n * postchain-common.util.validateMerklePath(proof.merklePath, proof.hash,\n * proof.blockHeader.slice(32, 64))\n *\n * The signatures must be validated agains some know trusted source for valid signers\n * at this specific block height.\n */\n getConfirmationProof: function (txRID, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!validTxRID(txRID)) {\n callback(new UnvalidTxRidException(txRID), null);\n }\n else {\n const { error, statusCode, rspBody } = yield requestWithRetry(Method.GET, \"tx/\" +\n blockchainRID +\n \"/\" +\n txRID.toString(\"hex\") +\n \"/confirmationProof\", this.config);\n const confirmationProof = {\n hash: undefined,\n blockHeader: undefined,\n signatures: [],\n merklePath: [],\n };\n if (statusCode === 200 || statusCode === 503) {\n confirmationProof.hash = toBuffer(rspBody.hash);\n confirmationProof.blockHeader = toBuffer(rspBody.blockHeader);\n if (rspBody.signatures) {\n confirmationProof.signatures = rspBody.signatures.map((item) => ({\n pubKey: toBuffer(item.pubKey),\n signature: toBuffer(item.signature),\n }));\n }\n if (rspBody.merklePath) {\n confirmationProof.merklePath = rspBody.merklePath.map((item) => {\n return { side: item.side, hash: toBuffer(item.hash) };\n });\n }\n }\n handleGetResponse(error, statusCode, confirmationProof, callback);\n }\n });\n },\n /**\n * Queries the status of a certain transaction.\n * @param txRID the id of the transaction\n * @param callback taking parameters (error, responseBody). If error is null\n * then responseBody is an object on the form\n * { status: '<confirmed|waiting|rejected|unknown>' }\n * If error is not null, then responseBody\n * is an object with the string property 'error'\n */\n status: function (txRID, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!validTxRID(txRID)) {\n callback(new UnvalidTxRidException(txRID), null);\n }\n else {\n const { error, statusCode, rspBody } = yield requestWithRetry(Method.GET, \"tx/\" + blockchainRID + \"/\" + txRID.toString(\"hex\") + \"/status\", this.config);\n handleGetResponse(error, statusCode, rspBody, callback);\n }\n });\n },\n /**\n * Interfaces the query enpoint of the Rell backend. Returns either a resolved or rejected promise.\n * @param queryObject an object that must contain a \"type\" and follows this pattern: { type: \"nameOfQuery\", arg1: argValue1, arg2: argvalue2 }\n */\n query: function (queryObject) {\n return __awaiter(this, void 0, void 0, function* () {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n const callback = (error, result) => {\n if (error) {\n reject(error);\n }\n else {\n resolve(result);\n }\n };\n const { error, statusCode, rspBody } = yield requestWithRetry(Method.POST, `query_gtv/${blockchainRID}`, this.config, encodeValue(toQueryObjectGTV(queryObject)));\n handlePostResponse(error, statusCode, rspBody, callback);\n }));\n });\n },\n /**\n * Polls for status while waiting for response; confirmed, rejected or unknown. Returns either a resolved or rejected promise.\n * @param txRID the id of the transaction\n */\n waitConfirmation(txRID) {\n return new Promise((resolve, reject) => {\n this.status(txRID, (error, result) => {\n if (error) {\n reject(error);\n }\n else {\n const status = result.status;\n switch (status) {\n case ResponseStatus.Confirmed:\n resolve(null);\n break;\n case ResponseStatus.Rejected:\n reject(new TxRejectedError(result.rejectReason));\n break;\n case ResponseStatus.Unknown:\n reject(new LostMessageError());\n break;\n case ResponseStatus.Waiting:\n setTimeout(() => this.waitConfirmation(txRID).then(resolve, reject), this.config.pollingInterval);\n break;\n default:\n logger.error(status);\n reject(new UnexpectedResponseError());\n }\n }\n });\n });\n },\n /**\n * Posts a transaction and polls for status while waiting for status response; confirmed, rejected or unknown. Returns either a resolved or rejected promise.\n * @param serializedTransaction The transaction (a buffer) to send\n * @param txRID the id of the transaction\n * @param validate true if the transaction needs to be validated\n */\n postAndWaitConfirmation(serializedTransaction, txRID, validate) {\n if (validate === true) {\n return Promise.reject(\"Automatic validation is not yet implemented\");\n }\n return new Promise((resolve, reject) => {\n this.postTransaction(serializedTransaction, (error) => {\n if (error)\n reject(error);\n else {\n setTimeout(() => this.waitConfirmation(txRID).then(resolve, reject), 1011);\n }\n });\n });\n },\n /**\n * Returns a string array with the endpoints hosting the dApp the client\n * is connected to\n */\n getEndpointPool() {\n return this.config.endpointPool;\n },\n };\n}\n/**\n * Validates that txRID is a Buffer of 32 bytes.\n * @param txRID A buffer of 32 bytes\n */\nfunction validTxRID(txRID) {\n if (txRID.length != 32) {\n const error = new UnvalidTxRidException(txRID);\n logger.error(error.toString());\n return false;\n }\n return true;\n}\nfunction validateInput(endpointPool, failOverConfig) {\n if (!endpointPool.length) {\n throw new EmptyListOfUrlsException();\n }\n if ((failOverConfig === null || failOverConfig === void 0 ? void 0 : failOverConfig.attemptsPerEndpoint) < 1) {\n logger.debug(\"Attempts can not be 0 or below, setting it to 1\");\n failOverConfig.attemptsPerEndpoint = 1;\n }\n}\n/**\n * @param error response error\n * @param statusCode response status code\n * @param responseObject the responsebody from the server\n * @param callback the callback function to propagate the error and response back to the caller\n */\nfunction handleGetResponse(error, statusCode, responseObject, callback) {\n try {\n logger.debug(`error: ${error}, status code: ${statusCode}, response body: ${JSON.stringify(responseObject)}`);\n if (error) {\n callback(error, null);\n }\n else if (statusCode === 404) {\n logger.error(\"404 received\");\n callback(null, null);\n }\n else if (statusCode != 200) {\n callback(new UnexpectedStatusError(statusCode), responseObject);\n }\n else {\n callback(null, responseObject);\n }\n }\n catch (error) {\n logger.error(\"restclient.handleGetResponse(): Failed to call callback function \" +\n error);\n }\n}\n/**\n * @param error response error\n * @param statusCode response status code\n * @param responseObject the responsebody from the server\n * @param callback the callback function to propagate the error and response back to the caller\n */\nfunction handlePostResponse(error, statusCode, responseObject, callback) {\n logger.debug(`error: ${error}, status code: ${statusCode}, response body: ${JSON.stringify(responseObject)}`);\n try {\n if (error) {\n logger.error(`In restclient post(). ${error}`);\n callback(error);\n }\n else if (statusCode != 200) {\n logger.error(`Unexpected status code from server: ${statusCode}`);\n callback(new UnexpectedStatusError(statusCode), responseObject);\n }\n else {\n logger.info(`Calling responseCallback with responseObject: ${JSON.stringify(responseObject)}`);\n callback(null, responseObject);\n }\n }\n catch (error) {\n logger.error(\"restclient.handlePostResponse(): Failed to call callback function \" +\n error);\n }\n}\n//# sourceMappingURL=restclient.js.map","import { hashConcat } from \"../encryption/encryption\";\nvar internalNodePrefix = Buffer.alloc(1, 0);\nvar leafPrefix = Buffer.alloc(1, 1);\nvar nonExistingNodeHash = Buffer.alloc(32);\nexport function calculateRoot(hashes, depth, leafDepth) {\n var numTransactions = hashes.length;\n if (numTransactions === 0) {\n return Buffer.alloc(32);\n }\n if (depth === undefined) {\n depth = 0;\n }\n if (!leafDepth) {\n leafDepth = Math.ceil(Math.log2(numTransactions));\n }\n if (depth === leafDepth) {\n return hashes[0];\n }\n var maxLeavesPerChild = Math.pow(2, leafDepth - depth - 1);\n var prefix = depth === leafDepth - 1 ? leafPrefix : internalNodePrefix;\n if (numTransactions <= maxLeavesPerChild) {\n var left = calculateRoot(hashes, depth + 1, leafDepth);\n return hashConcat([prefix, left, nonExistingNodeHash]);\n }\n var left = calculateRoot(hashes.slice(0, maxLeavesPerChild), depth + 1, leafDepth);\n var right = calculateRoot(hashes.slice(maxLeavesPerChild), depth + 1, leafDepth);\n return hashConcat([prefix, left, prefix, right]);\n}\nfunction internalMerklePath(hashes, targetIndex, depth, leafDepth) {\n var numTransactions = hashes.length;\n if (depth === leafDepth) {\n return [];\n }\n var maxLeavesPerChild = Math.pow(2, leafDepth - depth - 1);\n var prefix = depth == leafDepth - 1 ? leafPrefix : internalNodePrefix;\n if (numTransactions <= maxLeavesPerChild) {\n var path = internalMerklePath(hashes, targetIndex, depth + 1, leafDepth);\n path.push({ side: 1, hash: nonExistingNodeHash });\n return path;\n }\n if (targetIndex < maxLeavesPerChild) {\n var path = internalMerklePath(hashes.slice(0, maxLeavesPerChild), targetIndex, depth + 1, leafDepth);\n var right = calculateRoot(hashes.slice(maxLeavesPerChild), depth + 1, leafDepth);\n path.push({ side: 1, hash: right });\n }\n else {\n var left = calculateRoot(hashes.slice(0, maxLeavesPerChild), depth + 1, leafDepth);\n var path = internalMerklePath(hashes.slice(maxLeavesPerChild), targetIndex - maxLeavesPerChild, depth + 1, leafDepth);\n path.push({ side: 0, hash: left });\n }\n return path;\n}\n/*\n * a path looks like this:\n * {merklePath: [{side: <0|1>, hash: <hash buffer depth n-1>},\n * {side: <0|1>, hash: <hash buffer depth n-2>},\n * ...\n * {side: <0|1>, hash: <hash buffer depth 1>}]}\n */\nexport function merklePath(hashes, target) {\n if (!hashes || hashes.length == 0) {\n throw new Error(\"Cannot make merkle path from empty transaction set\");\n }\n var index = -1;\n for (var i = 0; i < hashes.length; i++) {\n if (hashes[i].equals(target)) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error(\"Target is not in list of hashes\");\n }\n var leafDepth = Math.ceil(Math.log2(hashes.length));\n var path = internalMerklePath(hashes, index, 0, leafDepth);\n return path;\n}\n/**\n *\n * @param path The merkle path to validate.\n * Format [{side: <0|1>, hash: <hash buffer depth n-1>},\n * {side: <0|1>, hash: <hash buffer depth n-2>},\n * ...,\n * {side: <0|1>, hash: <hash buffer depth 1>}]\n\n * @param target the leaf hash that the path proves belongs in the merkleRoot\n * @param merkleRoot The merkle root that supposedly contains the target via the supplied path.\n * The merkle root is typically taken from a block header.\n */\nexport function validateMerklePath(path, target, merkleRoot) {\n let currentHash = target;\n for (let i = 0; i < path.length; i++) {\n const item = path[i];\n const prefix = (i === 0) ? Buffer.from([1]) : Buffer.from([0]);\n if (item.side === 0) {\n currentHash = hashConcat([prefix, item.hash, prefix, currentHash]);\n }\n else {\n if (item.hash.equals(nonExistingNodeHash)) {\n currentHash = hashConcat([prefix, currentHash, nonExistingNodeHash]);\n }\n else {\n currentHash = hashConcat([prefix, currentHash, prefix, item.hash]);\n }\n }\n }\n return merkleRoot.equals(currentHash);\n}\n//# sourceMappingURL=merkleHelper.js.map","export class BlockchainUrlUndefinedException extends Error {\n constructor(brid) {\n super(`Cannot find nodes hosting the blockchain with RID ${brid}`);\n }\n}\n//# sourceMappingURL=errors.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as pc from \"../../index\";\nimport { BlockchainUrlUndefinedException } from \"./errors\";\n/**\n * Provides postchain clients that can be used to communicate with dapps within the chromia network\n * @param chain0BRID brid of chain0\n * @param rest rest client configured to node running chain0\n */\nexport function chromiaClientProvider(chain0BRID, rest) {\n const chain0Client = pc.gtxClient.createClient(rest, chain0BRID, []);\n return {\n blockchainConnection: function (dappBRID) {\n return __awaiter(this, void 0, void 0, function* () {\n const queryObject = {\n type: \"cm_get_blockchain_api_urls\",\n blockchain_rid: dappBRID,\n };\n const baseUrls = yield chain0Client.query(queryObject);\n if (!baseUrls.length) {\n throw new BlockchainUrlUndefinedException(dappBRID);\n }\n return pc.restClient.createRestClient(baseUrls, dappBRID);\n });\n },\n };\n}\n//# sourceMappingURL=chromiaClientProvider.js.map"],"names":["BN","util","PathLeafElement","PathSet","require$$0","HASH_PREFIX_NODE","HASH_PREFIX_LEAF","HASH_PREFIX_NODE_ARRAY","HASH_PREFIX_NODE_DICT","Node","SubTreeRootNode","Leaf","EmptyLeaf","BinaryTree","ArrayHeadNode","DictHeadNode","secp256k1","crypto","sign","require$$1","require$$2","BinaryTreeFactory","ProofNode","ProofNodeSimple","ProofValueLeaf","ProofHashedLeaf","ProofNodeArrayHead","ProofNodeDictHead","MerkleProofTree","MerkleProofTreeFactory","MerkleHashSummary","require$$3","require$$4","MerkleHashSummaryFactory","MerkleHashCalculator","CryptoSystem","merkleHashSummary","encode","serialization.encodeValue","decode","serialization.decodeValue","serialization.encodeValueGtx","serialization.decodeValueGtx","gtv.gtvHash","gtxEncode","gtxDecode","gtx","logger.debug","gtxTool.sign","gtxTool.getDigestToSign","gtxTool.addSignature","gtxTool.addTransactionToGtx","gtxTool.serialize","gtxTool.emptyGtx","gtxTool.addSignerToGtx","gtxTool.deserialize","__awaiter","this","logger.info","error","logger.error","pc.gtxClient.createClient","pc.restClient.createRestClient"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/gtv/definition.js","../src/gtx/errors.js","../src/formatter.js","../src/gtx/serialization.js","../src/merkle/path.js","../src/merkle/binarytree.js","../src/encryption/errors.js","../src/encryption/encryption.js","../src/merkle/merklehashcalculator.js","../src/merkle/binarytreefactory.js","../src/merkle/proof/merkleprooftree.js","../src/merkle/proof/merkleprooftreefactory.js","../src/merkle/proof/merklehashcarrier.js","../src/merkle/proof/merklehashsummaryfactory.js","../src/merkle/proof/merkleproof.js","../src/gtv/index.js","../src/gtx/index.js","../src/gtx/gtx.js","../src/logger.js","../src/gtx/gtxclient.js","../src/restclient/types.js","../src/restclient/errors.js","../src/restclient/httpUtil.js","../src/restclient/restclientutil.js","../src/restclient/restclient.js","../src/merkle/merkleHelper.js","../src/chromia/errors.js","../src/chromia/chromiaClientProvider.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst asn = require(\"asn1.js/lib/asn1\");\nexport const ASNDictPair = asn.define(\"DictPair\", function () {\n this.seq().obj(this.key(\"name\").utf8str(), this.key(\"value\").use(rawGTV));\n});\nexport const rawGTV = asn.define(\"GtvValue\", function () {\n this.choice({\n null: this.explicit(0).null_(),\n byteArray: this.explicit(1).octstr(),\n string: this.explicit(2).utf8str(),\n integer: this.explicit(3).int(),\n dict: this.explicit(4).seqof(ASNDictPair),\n array: this.explicit(5).seqof(rawGTV),\n bigInteger: this.explicit(6).int(),\n });\n});\nexport const ASNBuffer = asn.define(\"Buffer\", function () {\n this.octstr();\n});\n//# sourceMappingURL=definition.js.map","export class UnexpectedArgumentTypeError extends Error {\n constructor(typedArg) {\n super(`Cannot parse typedArg ${JSON.stringify(typedArg)}. Unknown type ${typedArg.type}`);\n }\n}\nexport class MissingGtxException extends Error {\n constructor() {\n super(`Missing instance of gtx protocol (used for communicating with postchain) to add operation to`);\n }\n}\nexport class AlreadySignedTransactionException extends Error {\n constructor(operation) {\n super(`Cannot add ${operation} calls to an already signed gtx`);\n }\n}\nexport class NumberOfSignersAndSignaturesException extends Error {\n constructor() {\n super(`Not matching number of signers and signatures`);\n }\n}\nexport class MissingSignerException extends Error {\n constructor() {\n super(`No such signer, remember to call addSignerToGtx() before adding a signature`);\n }\n}\n//# sourceMappingURL=errors.js.map","export function pgBytes(buffer) {\n if (!Buffer.isBuffer(buffer)) {\n throw new PgBytesInputException(buffer);\n }\n return \"\\\\x\" + buffer.toString(\"hex\");\n}\n/**\n * Converts hex string to Buffer\n * @param key: string\n * @returns {Buffer}\n */\nexport function toBuffer(key) {\n return Buffer.from(key, \"hex\");\n}\n/**\n * Converts Buffer to hex string\n * @param buffer: Buffer\n * @returns {string}\n */\nexport function toString(buffer) {\n return buffer.toString(\"hex\");\n}\nexport function toQueryObjectGTV(nameOrObject, queryArguments) {\n let name;\n if (typeof nameOrObject === \"string\") {\n name = nameOrObject;\n return [name, Object.assign({}, queryArguments)];\n }\n else {\n const objectCopy = Object.assign({}, nameOrObject);\n name = objectCopy.type;\n delete objectCopy.type;\n return [name, objectCopy];\n }\n}\nexport class PgBytesInputException extends Error {\n constructor(buffer) {\n super(`util.pgBytes expects a buffer, but got ${typeof buffer}`);\n }\n}\nexport function ensureBuffer(value) {\n if (value instanceof Buffer) {\n return value;\n }\n else {\n return toBuffer(value);\n }\n}\nexport function checkGtvType(value) {\n try {\n if (value == null) {\n return true;\n }\n if (Buffer.isBuffer(value)) {\n return true;\n }\n if (typeof value === \"string\") {\n return true;\n }\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) {\n throw Error(\"User error: Only integers are supported\");\n }\n return true;\n }\n if (typeof value === \"bigint\") {\n return true;\n }\n if (value.constructor === Array) {\n value.map((item) => checkGtvType(item));\n return true;\n }\n if (typeof value === \"object\") {\n Object.keys(value).map(function (key) {\n checkGtvType(value[key]);\n });\n return true;\n }\n }\n catch (error) {\n throw new Error(`Failed to check type: ${error}`);\n }\n return false;\n}\nexport function rawGtxToGtx(rawGtx) {\n const rawGtxBody = rawGtx[0];\n const signatures = rawGtx[1];\n const gtxBody = {\n blockchainRID: rawGtxBody[0],\n operations: rawGtxBody[1].map((operation) => ({\n opName: operation[0],\n args: operation[1],\n })),\n signers: rawGtxBody[2],\n };\n return {\n blockchainRID: gtxBody.blockchainRID,\n operations: gtxBody.operations,\n signers: gtxBody.signers,\n signatures,\n };\n}\nexport function checkGtxType(value) {\n try {\n rawGtxToGtx(value);\n return true;\n }\n catch (error) {\n return false;\n }\n}\nexport function removeDuplicateSigners(signers) {\n const signersAsString = [];\n signers.forEach((item) => {\n const itemAsString = item.toString(\"hex\");\n if (!signersAsString.includes(itemAsString)) {\n signersAsString.push(itemAsString);\n }\n });\n const result = [];\n signersAsString.forEach((item) => {\n result.push(Buffer.from(item, \"hex\"));\n });\n return result;\n}\n//# sourceMappingURL=formatter.js.map","import { rawGTV } from \"../gtv/definition\";\nimport { BN } from \"bn.js\";\nimport { UnexpectedArgumentTypeError } from \"./errors\";\nimport { checkGtxType } from \"../formatter\";\nexport function encodeValue(rawGtv) {\n return rawGTV.encode(createTypedArg(rawGtv));\n}\nexport function encodeValueGtx(rawGtx) {\n return encodeValue(rawGtx);\n}\nexport function decodeValue(bytes) {\n const obj = rawGTV.decode(bytes);\n return parseValue(obj);\n}\nexport function decodeValueGtx(bytes) {\n const decodedValue = decodeValue(bytes);\n if (!checkGtxType(decodedValue)) {\n throw new Error(`Unexpected type of value: ${decodedValue}, expected decoded value to be of type RawGtx`);\n }\n return decodedValue;\n}\nexport function parseValue(typedArg) {\n if (typedArg.type === \"null\") {\n return null;\n }\n else if (typedArg.type === \"byteArray\") {\n return typedArg.value;\n }\n else if (typedArg.type === \"string\") {\n return typedArg.value;\n }\n else if (typedArg.type === \"integer\") {\n return Number(typedArg.value);\n }\n else if (typedArg.type === \"array\") {\n const arrayValue = typedArg.value;\n return arrayValue.map((item) => parseValue(item));\n }\n else if (typedArg.type === \"bigInteger\") {\n return BigInt(typedArg.value);\n }\n else if (typedArg.type === \"dict\") {\n const arrayValue = typedArg.value;\n const result = {};\n arrayValue.forEach((pair) => {\n result[pair.name] = parseValue(pair.value);\n });\n return result;\n }\n else {\n throw new UnexpectedArgumentTypeError(typedArg);\n }\n}\nexport function createTypedArg(value) {\n try {\n if (value == null) {\n return { type: \"null\", value: null };\n }\n if (Buffer.isBuffer(value)) {\n return { type: \"byteArray\", value: value };\n }\n if (typeof value === \"boolean\") {\n return { type: \"integer\", value: value ? 1 : 0 };\n }\n if (typeof value === \"string\") {\n return { type: \"string\", value: value };\n }\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) {\n throw Error(\"User error: Only integers are supported\");\n }\n return { type: \"integer\", value: new BN(value) };\n }\n if (typeof value === \"bigint\") {\n return { type: \"bigInteger\", value: new BN(Number(value)) };\n }\n if (value.constructor === Array) {\n return {\n type: \"array\",\n value: value.map((item) => createTypedArg(item)),\n };\n }\n if (typeof value === \"object\") {\n const valueAsDictPair = value;\n return { type: \"dict\", value: Object.keys(valueAsDictPair).map(function (key) {\n return { name: key, value: createTypedArg(valueAsDictPair[key]) };\n }) };\n }\n }\n catch (error) {\n throw new Error(`Failed to encode ${value.toString()}: ${error}`);\n }\n throw new Error(`value ${value} have unsupported type: ${typeof value}`);\n}\n//# sourceMappingURL=serialization.js.map","\"use strict\";\nvar util = require('../formatter');\nfunction PathElement(previous) {\n this.previous = previous;\n}\nPathElement.prototype.getSearchKey = function () { };\nfunction PathLeafElement(previous) {\n PathElement.call(this, previous);\n}\nPathLeafElement.prototype = Object.create(PathElement.prototype);\nPathLeafElement.prototype.constructor = PathLeafElement;\nPathLeafElement.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this !== typeof other)\n return false;\n return true;\n};\nfunction SearchablePathElement(previous) {\n PathElement.call(this, previous);\n}\nSearchablePathElement.prototype = Object.create(PathElement.prototype);\nSearchablePathElement.prototype.constructor = SearchablePathElement;\nSearchablePathElement.prototype.getSearchKey = function () { };\n/**\n *\n * @param {SearchablePathElement} previous\n * @param {number} index\n */\nfunction ArrayPathElement(previous, index) {\n SearchablePathElement.call(this, previous);\n this.index = index;\n}\nArrayPathElement.prototype = Object.create(SearchablePathElement.prototype);\nArrayPathElement.prototype.constructor = ArrayPathElement;\nArrayPathElement.prototype.getSearchKey = function () {\n return this.index;\n};\n/**\n * @param {ArrayPathElement} other\n */\nArrayPathElement.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this !== typeof other)\n return false;\n if (this.index != other.index)\n return false;\n return true;\n};\n/**\n *\n * @param {SearchablePathElement} previous\n * @param {string} key\n */\nfunction DictPathElement(previous, key) {\n SearchablePathElement.call(this, previous);\n this.key = key;\n}\nDictPathElement.prototype = Object.create(SearchablePathElement.prototype);\nDictPathElement.prototype.constructor = DictPathElement;\nDictPathElement.prototype.getSearchKey = function () {\n return this.key;\n};\n/**\n * @param {DictPathElement} other\n */\nDictPathElement.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this !== typeof other)\n return false;\n if (this.key != other.key)\n return false;\n return true;\n};\n/**\n *\n * @param {Array} pathElements\n */\nfunction Path(pathElements) {\n this.pathElements = pathElements;\n}\n/**\n *\n */\nPath.prototype.getCurrentPathElement = function () {\n return this.pathElements[0];\n};\n/**\n *\n */\nPath.prototype.size = function () {\n return this.pathElements.length;\n};\n/**\n *\n */\nPath.prototype.tail = function () {\n if (this.pathElements.length == 0) {\n throw new Error(\"Impossible to tail this array\");\n }\n else {\n var tail = this.pathElements.slice(1);\n return new Path(tail);\n }\n};\nPath.prototype.debugString = function () {\n var sb = \"\";\n this.pathElements.forEach(elem => {\n if (elem instanceof SearchablePathElement) {\n sb = sb + \"-> \" + elem.getSearchKey();\n }\n else if (elem instanceof PathLeafElement) {\n sb = sb + \"-> Leaf\";\n }\n });\n return sb;\n};\n/**\n * @param {Path} other\n */\nPath.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this != typeof other)\n return false;\n return this.pathElements == other.pathElements;\n};\n/**\n * @param {number} index\n * @param {Path} path\n */\nvar getTailIfFirstElementIsArrayOfThisIndex = function (index, path) {\n return getTail(index, path);\n};\n/**\n *\n * @param {string} key\n * @param {Path} path\n */\nvar getTailIfFirstElementIsDictOfThisKey = function (key, path) {\n return getTail(key, path);\n};\n/**\n *\n * @param {string|number} searchKey\n * @param {Path} path\n */\nvar getTail = function (searchKey, path) {\n if (searchKey === null) {\n throw new Error(\"Have to provide a search key\");\n }\n try {\n var firstElement = path.pathElements[0];\n if (firstElement instanceof SearchablePathElement) {\n if (firstElement.getSearchKey() == searchKey) {\n return path.tail();\n }\n }\n }\n catch (err) {\n util.logError(\"Why are we dropping first element of an empty path? \" + err);\n return null;\n }\n return null;\n};\n/**\n *\n * @param {Array} paths\n */\nfunction PathSet(paths) {\n this.paths = paths;\n}\n/**\n *\n */\nPathSet.prototype.isEmpty = function () {\n return this.paths.length == 0;\n};\n/**\n *\n */\nPathSet.prototype.getPathLeafOrElseAnyCurrentPathElement = function () {\n var leafElem = null;\n var currElem = null;\n var prev = {\n \"path\": null,\n \"elem\": null,\n };\n this.paths.forEach(path => {\n currElem = path.getCurrentPathElement();\n if (currElem instanceof PathLeafElement) {\n leafElem = currElem;\n }\n prev = this.errorCheckUnequalParent(path, currElem, prev.path, prev.elem);\n });\n if (leafElem != null) {\n return leafElem;\n }\n else {\n return currElem; // It doesn't matter which one we return (Next step we will get the \"previous\" from this one)\n }\n};\n/**\n * Yeah, this might be a completely un-needed check (but it MIGHT save us later on if we forget this rule).\n * What we are looking for here is an impossible state where two paths in the same set don't have the same parent.\n * (Since we usually only have one path in a path set, this check should be cheap)\n *\n * @param {Path} currPath\n * @param {PathElement} currElem\n * @param {Path} prevPath\n * @param {PathElement} prevElem\n */\nPathSet.prototype.errorCheckUnequalParent = function (currPath, currElem, prevPath, prevElem) {\n if (prevElem != null) {\n // weird: javascript cannot compare null == null then we have to compare each with null separately :(\n if (currElem.previous == null && prevElem.previous == null) {\n return {\n \"path\": currPath,\n \"elem\": currElem\n };\n }\n else if ((currElem.previous == null && prevElem.previous != null) || (currElem.previous != null && prevElem.previous == null)) {\n throw new Error(\"Something is wrong, these paths do not have the same parent. (\" + currPath + \") (\" + prevPath + \")\");\n }\n else if (!currElem.previous.equals(prevElem.previous)) {\n throw new Error(\"Something is wrong, these paths do not have the same parent. (\" + currPath + \") (\" + prevPath + \")\");\n }\n }\n return {\n \"path\": currPath,\n \"elem\": currElem\n };\n};\n/**\n *\n */\nPathSet.prototype.keepOnlyArrayPaths = function () {\n var filteredPaths = this.paths.filter(path => {\n return path.pathElements[0] instanceof ArrayPathElement;\n });\n return new PathSet(filteredPaths);\n};\n/**\n *\n */\nPathSet.prototype.keepOnlyDictPaths = function () {\n var filteredPaths = this.paths.filter(path => {\n return path.pathElements[0] instanceof DictPathElement;\n });\n return new PathSet(filteredPaths);\n};\n/**\n *\n */\nPathSet.prototype.getTailIfFirstElementIsArrayOfThisIndexFromList = function (index) {\n return this.getTailFromList(index, getTailIfFirstElementIsArrayOfThisIndex);\n};\n/**\n *\n */\nPathSet.prototype.getTailIfFirstElementIsDictOfThisKeyFromList = function (key) {\n return this.getTailFromList(key, getTailIfFirstElementIsDictOfThisKey);\n};\n/**\n *\n */\nPathSet.prototype.getTailFromList = function (searchKey, filterFunc) {\n var retPaths = new Array();\n this.paths.forEach(path => {\n var newPath = filterFunc(searchKey, path);\n if (newPath != null) {\n retPaths.push(newPath);\n }\n });\n return new PathSet(retPaths);\n};\n/**\n *\n * @param {Array} arr\n */\nvar buildPathFromArray = function (arr) {\n var pathElements = new Array();\n var lastPathElem = null;\n arr.forEach(item => {\n var newElem = null;\n if (typeof item === 'number') {\n newElem = new ArrayPathElement(lastPathElem, item);\n }\n else if (typeof item === 'string') {\n newElem = new DictPathElement(lastPathElem, item);\n }\n else {\n throw new Error(\"A path structure must only consist of Ints and Strings, not \" + item);\n }\n pathElements.push(newElem);\n lastPathElem = newElem;\n });\n var lastOne = lastPathElem;\n pathElements.push(new PathLeafElement(lastOne));\n return new Path(pathElements);\n};\nmodule.exports = { Path, PathElement, PathLeafElement, ArrayPathElement, SearchablePathElement, DictPathElement, PathSet,\n getTailIfFirstElementIsArrayOfThisIndex, buildPathFromArray };\n//# sourceMappingURL=path.js.map","\"use strict\";\nvar PathLeafElement = require('./path').PathLeafElement;\nconst HASH_PREFIX_NODE = 0;\nconst HASH_PREFIX_LEAF = 1;\nconst HASH_PREFIX_NODE_ARRAY = 7;\nconst HASH_PREFIX_NODE_DICT = 8;\n/**\n *\n */\nfunction BinaryTreeElement() {\n this.pathElem = null;\n}\nBinaryTreeElement.prototype.isPath = function () {\n return this.pathElem != null;\n};\nBinaryTreeElement.prototype.isPathLeaf = function () {\n if (this.pathElem == null) {\n return false;\n }\n if (this.pathElem instanceof PathLeafElement) {\n return true;\n }\n else {\n return false;\n }\n};\nBinaryTreeElement.prototype.setPathElement = function (pathElem) {\n this.pathElem = pathElem;\n};\nBinaryTreeElement.prototype.getPrefixByte = function () {\n return HASH_PREFIX_NODE;\n};\n/**\n *\n * @param {BinaryTreeElement} left\n * @param {BinaryTreeElement} right\n */\nfunction Node(left, right) {\n this.left = left;\n this.right = right;\n}\nNode.prototype = Object.create(BinaryTreeElement.prototype);\nNode.prototype.constructor = Node;\nNode.prototype.getPrefixByte = function () {\n return HASH_PREFIX_NODE;\n};\n/**\n *\n * @param {BinaryTreeElement} left\n * @param {BinaryTreeElement} right\n * @param {*} content\n * @param {PathSet} pathElem\n */\nfunction SubTreeRootNode(left, right, content, pathElem) {\n Node.call(this, left, right);\n this.content = content;\n BinaryTreeElement.prototype.setPathElement.call(this, pathElem);\n}\nSubTreeRootNode.prototype = Object.create(Node.prototype);\nSubTreeRootNode.prototype.constructor = SubTreeRootNode;\n/**\n *\n * @param {*} content\n * @param {PathElement} pathElem\n */\nfunction Leaf(content, pathElem = null) {\n this.content = content;\n if (pathElem != null) {\n if (pathElem instanceof PathLeafElement) {\n BinaryTreeElement.prototype.setPathElement.call(this, pathElem);\n }\n else {\n throw new Error(\"The path and object structure does not match! We are at a leaf, but the path expects a sub structure.\");\n }\n }\n}\nLeaf.prototype = Object.create(BinaryTreeElement.prototype);\nLeaf.prototype.constructor = Leaf;\nLeaf.prototype.getPrefixByte = function () {\n return HASH_PREFIX_LEAF;\n};\nfunction EmptyLeaf() { }\nEmptyLeaf.prototype = Object.create(BinaryTreeElement.prototype);\nEmptyLeaf.prototype.constructor = EmptyLeaf;\n/**\n * Wrapper class for the root object.\n * @param {BinaryTreeElement} root\n */\nfunction BinaryTree(root) {\n this.root = root;\n}\nBinaryTree.prototype.maxLevel = function () {\n return this.maxLevelInternal(this.root);\n};\nBinaryTree.prototype.maxLevelInternal = function (node) {\n if (node instanceof EmptyLeaf) {\n return 0;\n }\n else if (node instanceof Leaf) {\n return 1;\n }\n else if (node instanceof Node) {\n return Math.max(this.maxLevelInternal(node.left), this.maxLevelInternal(node.right)) + 1;\n }\n else {\n throw new Error(\"What is this type? \" + typeof node);\n }\n};\n/**\n * Represents the top of a sub tree generated by a [Array]\n *\n * @param {*} left\n * @param {*} right\n * @param {*} content\n * @param {*} size\n * @param {PathElement} pathElem\n */\nfunction ArrayHeadNode(left, right, content, size, pathElem = null) {\n SubTreeRootNode.call(this, left, right, content, pathElem);\n this.size = size;\n}\nArrayHeadNode.prototype = Object.create(SubTreeRootNode.prototype);\nArrayHeadNode.prototype.constructor = ArrayHeadNode;\nArrayHeadNode.prototype.getPrefixByte = function () {\n return HASH_PREFIX_NODE_ARRAY;\n};\n/**\n * Represents the top a sub tree generated by a [Dictionary]\n * @param {*} left\n * @param {*} right\n * @param {*} content\n * @param {*} size\n * @param {PathElement} pathElem\n */\nfunction DictHeadNode(left, right, content, size, pathElem = null) {\n SubTreeRootNode.call(this, left, right, content, pathElem);\n this.size = size;\n}\nDictHeadNode.prototype = Object.create(SubTreeRootNode.prototype);\nDictHeadNode.prototype.constructor = DictHeadNode;\nDictHeadNode.prototype.getPrefixByte = function () {\n return HASH_PREFIX_NODE_DICT;\n};\nmodule.exports = { HASH_PREFIX_NODE, HASH_PREFIX_LEAF, HASH_PREFIX_NODE_ARRAY, HASH_PREFIX_NODE_DICT,\n Node, Leaf, EmptyLeaf, SubTreeRootNode, BinaryTreeElement, BinaryTree, ArrayHeadNode, DictHeadNode };\n//# sourceMappingURL=binarytree.js.map","export class PrivKeyFormatException extends Error {\n constructor(privKey) {\n super(`Invalid key length. Expected 32, but got ${privKey.length}`);\n }\n}\nexport class MissingPrivKeyArgumentException extends Error {\n constructor() {\n super(`Missing argument privKey`);\n }\n}\n//# sourceMappingURL=errors.js.map","\"use strict\";\nimport * as crypto from \"crypto\";\nimport * as secp256k1 from \"secp256k1\";\nimport { ensureBuffer } from \"../formatter\";\nimport { MissingPrivKeyArgumentException, PrivKeyFormatException, } from \"./errors\";\nexport function createPublicKey(privKey) {\n validatePrivKeyFormat(privKey);\n return Buffer.from(secp256k1.publicKeyCreate(privKey, true).buffer);\n}\nexport function randomBytes(size) {\n return crypto.randomBytes(size);\n}\nexport function sha256(buffer) {\n return crypto.createHash(\"sha256\").update(buffer).digest();\n}\nexport const hash256 = sha256;\nexport function hashConcat(items) {\n return hash256(Buffer.concat(items));\n}\n/**\n * @param content the content that the signature signs. It will be digested before validating.\n * @param pubKey The pubKey to validate the signature with\n * @param signature the signature to validate\n *\n * @return true if signature ok, false otherwise\n */\nexport function checkSignature(content, pubKey, signature) {\n const digest = hash256(content);\n return checkDigestSignature(digest, pubKey, signature);\n}\n/**\n * @param digest the signed digest. It will not be digested before validating.\n * @param pubKey The pubKey to validate the signature with\n * @param signature the signature to validate\n *\n * @return true if signature ok, false otherwise\n */\nexport function checkDigestSignature(digest, pubKey, signature) {\n return secp256k1.ecdsaVerify(signature, digest, pubKey);\n}\n/**\n * @param content to sign. It will be digested before signing.\n * @param privKey The private key to sign the content with\n *\n * @return the signature\n */\nexport function sign(content, privKey) {\n validatePrivKeyFormat(privKey);\n const digestBuffer = sha256(content);\n return signDigest(digestBuffer, privKey);\n}\n/**\n * @param digestBuffer to sign. It will not be digested before signing.\n * @param privKey The private key to sign the digest with\n *\n * @return the signature\n */\nexport function signDigest(digestBuffer, privKey) {\n return Buffer.from(secp256k1.ecdsaSign(digestBuffer, privKey).signature);\n}\n/**\n * Creates a key pair (which usually represents one user)\n * @param privKey to create key pair based on\n * @returns {{pubKey: Buffer, privKey: Buffer}}\n */\nexport function makeKeyPair(privKey) {\n let pubKey;\n if (privKey) {\n privKey = ensureBuffer(privKey);\n pubKey = createPublicKey(privKey);\n }\n else {\n do {\n privKey = randomBytes(32);\n } while (!secp256k1.privateKeyVerify(privKey));\n pubKey = Buffer.from(secp256k1.publicKeyCreate(privKey).buffer);\n }\n return { pubKey, privKey };\n}\n/**\n * Generates a 16bytes TUID (Text unique ID) (a 32characters long string)\n * @returns string\n */\nexport function makeTuid() {\n return randomBytes(16).toString(\"hex\");\n}\n/**\n * Verify that keypair is correct. Providing the private key, this function returns its associated public key\n * @param privKey: Buffer\n * @returns {{pubKey: Buffer, privKey: Buffer}}\n */\nexport function verifyKeyPair(privKey) {\n validatePrivKeyFormat(privKey);\n const pubKey = Buffer.from(secp256k1.publicKeyCreate(privKey).buffer);\n return { pubKey, privKey };\n}\nfunction validatePrivKeyFormat(privKey) {\n if (!privKey) {\n throw new MissingPrivKeyArgumentException();\n }\n if (!Buffer.isBuffer(privKey) || privKey.length !== 32) {\n throw new PrivKeyFormatException(privKey);\n }\n}\n//# sourceMappingURL=encryption.js.map","var serialization = require('../gtx/serialization');\nvar HASH_PREFIX_LEAF = require('./binarytree').HASH_PREFIX_LEAF;\nvar encryption = require('../../src/encryption/encryption');\nfunction CryptoSystem() { }\nCryptoSystem.prototype.digest = function (buffer) {\n return encryption.hash256(buffer);\n};\n/**\n *\n * @param {Buffer} buffer\n * @param {CryptoSystem} cryptoSystem\n */\nfunction hashingFun(buffer, cryptoSystem) {\n if (cryptoSystem === null) {\n throw new Error(\"In this case we need the CryptoSystem to calculate the hash\");\n }\n else {\n return cryptoSystem.digest(buffer);\n }\n}\n/**\n *\n * @param {CryptoSystem} cryptoSystem\n */\nfunction MerkleHashCalculator(cryptoSystem) {\n this.cryptoSystem = cryptoSystem;\n}\n/**\n * @param {number} prefix\n * @param {Buffer} hashLeft\n * @param {Buffer} hashRight\n */\nMerkleHashCalculator.prototype.calculateNodeHash = function (prefix, hashLeft, hashRight) {\n return this.calculateNodeHashInternal(prefix, hashLeft, hashRight, hashingFun);\n};\n/**\n * @param {*} value\n */\nMerkleHashCalculator.prototype.calculateLeafHash = function (value) {\n return this.calculateHashOfValueInternal(value, serialization.encodeValue, hashingFun);\n};\n/**\n * @param {number} prefix\n * @param {Buffer} hashLeft\n * @param {Buffer} hashRight\n */\nMerkleHashCalculator.prototype.calculateNodeHashInternal = function (prefix, hashLeft, hashRight, hashFunc) {\n var buf = Buffer.alloc(1);\n buf.writeInt8(prefix);\n var bufferSum = Buffer.concat([buf, hashLeft, hashRight]);\n return hashFunc(bufferSum, this.cryptoSystem);\n};\nMerkleHashCalculator.prototype.calculateHashOfValueInternal = function (valuetoHash, serializeFun, hashFunc) {\n var buf = Buffer.alloc(1);\n buf.writeInt8(HASH_PREFIX_LEAF);\n var bufferSum = Buffer.concat([buf, serializeFun(valuetoHash)]);\n return hashFunc(bufferSum, this.cryptoSystem);\n};\nMerkleHashCalculator.prototype.isContainerProofValueLeaf = function (value) {\n if (value == null) {\n return false;\n }\n if (value.constructor === Array || typeof value === 'object') {\n return true;\n }\n else {\n return false;\n }\n};\nmodule.exports = { MerkleHashCalculator, CryptoSystem };\n//# sourceMappingURL=merklehashcalculator.js.map","\"use strict\";\nvar util = require('../formatter');\nvar PathSet = require('./path').PathSet;\nvar PathLeafElement = require('./path').PathLeafElement;\nvar EmptyLeaf = require('./binarytree').EmptyLeaf;\nvar Leaf = require('./binarytree').Leaf;\nvar Node = require('./binarytree').Node;\nvar BinaryTree = require('./binarytree').BinaryTree;\nvar ArrayHeadNode = require('./binarytree').ArrayHeadNode;\nvar DictHeadNode = require('./binarytree').DictHeadNode;\nconst NO_PATHS = new PathSet([]);\n/**\n * The factory does the conversion between list of elements and tree of elements.\n *\n * Note: The idea is that you should sub class for each type of element you want to build.\n */\nfunction BinaryTreeFactory() { }\n/**\n * Transforms the incoming leaf into an [BinaryTreeElement]\n * The idea with this function is that it can be recursive (if the leaf in turn is complex object with sub objects).\n *\n * Note: If we don't have a path here we can try to find the leaf in the cache.\n *\n * @param leaf the raw data we should wrap in a leaf\n * @param paths a collection of proof paths that might point to this leaf\n * @return the resulting [BinaryTreeElement] the leaf got converted to\n */\nBinaryTreeFactory.prototype.handleLeaf = function (leaf, paths, isRoot = false) {\n if (paths.length == 0 && !isRoot) {\n return this.innerHandleLeaf(leaf, this.getEmptyPathSet());\n }\n else {\n return this.innerHandleLeaf(leaf, paths);\n }\n};\n/**\n *\n */\nBinaryTreeFactory.prototype.getEmptyPathSet = function () {\n return NO_PATHS;\n};\n/**\n * At this point we should have looked in cache.\n *\n * @param leaf we should turn into a tree element\n * @param {PathSet} paths\n * @return the tree element we created.\n */\nBinaryTreeFactory.prototype.innerHandleLeaf = function (leaf, paths) {\n if (leaf == null) {\n return this.handlePrimitiveLeaf(leaf, paths);\n }\n if (Buffer.isBuffer(leaf)) {\n return this.handlePrimitiveLeaf(leaf, paths);\n }\n if (typeof leaf === 'string') {\n return this.handlePrimitiveLeaf(leaf, paths);\n }\n if (typeof leaf === 'number') {\n return this.handlePrimitiveLeaf(leaf, paths);\n }\n if (typeof leaf === 'boolean') {\n return this.handlePrimitiveLeaf(leaf ? 1 : 0, paths);\n }\n if (leaf.constructor === Array) {\n return this.buildFromArray(leaf, paths);\n }\n if (typeof leaf === 'object') {\n return this.buildFromDictionary(leaf, paths);\n }\n else {\n throw new Error(\"Unsupporting data type\");\n }\n};\n/**\n * Just like [handleLeaf] but we know that this leaf should not be a complex type, but something we can\n * immediately wrap\n *\n * @param leaf\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.handlePrimitiveLeaf = function (leaf, paths) {\n var pathElem = paths.getPathLeafOrElseAnyCurrentPathElement();\n if (pathElem != null && !(pathElem instanceof PathLeafElement)) {\n throw new Error(\"Path does not match the tree structure. We are at a leaf \" + leaf + \" but found path element \" + pathElem);\n }\n return new Leaf(leaf, pathElem);\n};\n/**\n * Calls itself until the return value only holds 1 element\n *\n * Note: This method can only create standard [Node] that fills up the area between the \"top\" and the leaves.\n * These \"in-between\" nodes cannot be \"path leaf\" or have any interesting properties.\n *\n * @param layer What layer we aim calculate\n * @param inList The args of nodes we should build from\n * @return All [BinaryTreeElement] nodes of the next layer\n */\nBinaryTreeFactory.prototype.buildHigherLayer = function (layer, inList) {\n if (inList.length === 0) {\n throw new Error(\"Cannot work on empty arrays. Layer: \" + layer);\n }\n else if (inList.length === 1) {\n return inList;\n }\n var returnArray = new Array();\n var nrOfNodesToCreate = Math.floor(inList.length / 2);\n var leftValue = null;\n var isLeft = true;\n for (var i = 0; i < inList.length; i++) {\n if (isLeft) {\n leftValue = inList[i];\n isLeft = false;\n }\n else {\n var tempNode = new Node(leftValue, inList[i]);\n returnArray.push(tempNode);\n nrOfNodesToCreate--;\n isLeft = true;\n leftValue = null;\n }\n }\n if (!isLeft) {\n // If there is odd number of nodes, then move the last node up one level\n returnArray.push(leftValue);\n }\n // Extra check\n if (nrOfNodesToCreate != 0) {\n util.logDebug(\"Why didn't we build exactly the correct amount? Layer: \" + layer + \" , residue: \" + nrOfNodesToCreate + \" , input args size: \" + inList.length + \".\");\n }\n return this.buildHigherLayer((layer + 1), returnArray);\n};\nBinaryTreeFactory.prototype.build = function (data) {\n return this.buildWithPath(data, NO_PATHS);\n};\n/**\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildWithPath = function (data, paths) {\n var result = this.handleLeaf(data, paths, true);\n return new BinaryTree(result);\n};\n/**\n * @param {Array} array\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildFromArray = function (array, paths) {\n var pathElem = paths.getPathLeafOrElseAnyCurrentPathElement();\n // 1. Build leaf layer\n if (array.length == 0) {\n return new ArrayHeadNode(new EmptyLeaf(), new EmptyLeaf(), array, 0, 0, pathElem);\n }\n var leafArray = this.buildLeafElements(array, paths);\n // 2. Build all higher layers\n var result = this.buildHigherLayer(1, leafArray);\n // 3. Fix and return the root node\n var orgRoot = result[0];\n if (orgRoot instanceof Node) {\n return new ArrayHeadNode(orgRoot.left, orgRoot.right, array, array.length, pathElem);\n }\n if (orgRoot instanceof Leaf) {\n return this.buildFromOneLeaf(array, orgRoot, pathElem);\n }\n else {\n throw new Error(\"Should not find element of this type here\");\n }\n};\n/**\n *\n */\nBinaryTreeFactory.prototype.buildFromOneLeaf = function (array, orgRoot, pathElem) {\n if (array.length > 1) {\n throw new Error(\"How come we got a leaf returned when we had \" + array.length + \" elements is the args?\");\n }\n else {\n return new ArrayHeadNode(orgRoot, new EmptyLeaf(), array, array.length, pathElem);\n }\n};\n/**\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildLeafElements = function (leafList, paths) {\n var leafArray = new Array();\n var onlyArrayPaths = paths.keepOnlyArrayPaths(); // For performance, since we will loop soon\n for (var i = 0; i < leafList.length; i++) {\n var pathsRelevantForThisLeaf = onlyArrayPaths.getTailIfFirstElementIsArrayOfThisIndexFromList(i);\n var leaf = leafList[i];\n var binaryTreeElement = this.handleLeaf(leaf, pathsRelevantForThisLeaf);\n leafArray.push(binaryTreeElement);\n }\n return leafArray;\n};\n/**\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildFromDictionary = function (dict, paths) {\n var pathElem = paths.getPathLeafOrElseAnyCurrentPathElement();\n // Needs to be sorted, or else the order is undefined\n var keys = Object.keys(dict).sort();\n if (keys.length == 0) {\n return new DictHeadNode(new EmptyLeaf(), new EmptyLeaf(), dict, keys.length, 0, pathElem);\n }\n // 1. Build first (leaf) layer\n var leafArray = this.buildLeafElementFromDict(keys, dict, paths);\n // 2. Build all higher layers\n var result = this.buildHigherLayer(1, leafArray);\n // 3. Fix and return the root node\n var orgRoot = result[0];\n if (orgRoot instanceof Node) {\n return new DictHeadNode(orgRoot.left, orgRoot.right, dict, keys.length, pathElem);\n }\n else {\n throw new Error(\"Should not find element of this type here: \" + typeof orgRoot);\n }\n};\n/**\n * @param {PathSet} paths\n */\nBinaryTreeFactory.prototype.buildLeafElementFromDict = function (keys, dict, paths) {\n var leafArray = new Array();\n var onlyDictPaths = paths.keepOnlyDictPaths(); // For performance, since we will loop soon\n for (var i = 0; i < keys.length; i++) {\n // The key cannot not be proved, so NO_PATHS\n var key = keys[i];\n var keyElement = this.handleLeaf(key, NO_PATHS);\n leafArray.push(keyElement);\n var content = dict[key];\n var pathsRelevantForThisLeaf = onlyDictPaths.getTailIfFirstElementIsDictOfThisKeyFromList(key);\n var contentElement = this.handleLeaf(content, pathsRelevantForThisLeaf);\n leafArray.push(contentElement);\n }\n return leafArray;\n};\nmodule.exports = { BinaryTreeFactory };\n//# sourceMappingURL=binarytreefactory.js.map","var SearchablePathElement = require('../path').SearchablePathElement;\nvar HASH_PREFIX_NODE = require('../binarytree').HASH_PREFIX_NODE;\nvar HASH_PREFIX_NODE_ARRAY = require('../binarytree').HASH_PREFIX_NODE_ARRAY;\nvar HASH_PREFIX_NODE_DICT = require('../binarytree').HASH_PREFIX_NODE_DICT;\n/**\n *\n */\nfunction MerkleProofElement() { }\n/**\n *\n * @param {Buffer} prefix\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n */\nfunction ProofNode(prefix, left, right) {\n this.prefix = prefix;\n this.left = left;\n this.right = right;\n}\nProofNode.prototype = Object.create(MerkleProofElement.prototype);\nProofNode.prototype.constructor = ProofNode;\n/**\n *\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n */\nfunction ProofNodeSimple(left, right) {\n ProofNode.call(this, HASH_PREFIX_NODE, left, right);\n}\nProofNodeSimple.prototype = Object.create(ProofNode.prototype);\nProofNodeSimple.prototype.constructor = ProofNodeSimple;\n/**\n *\n * @param {*} content\n * @param {SearchablePathElement} pathElem\n */\nfunction ProofValueLeaf(content, pathElem) {\n this.content = content;\n this.pathElem = pathElem;\n}\nProofValueLeaf.prototype = Object.create(MerkleProofElement.prototype);\nProofValueLeaf.prototype.constructor = ProofValueLeaf;\n/**\n *\n * @param {Buffer} merkleHash\n */\nfunction ProofHashedLeaf(merkleHash) {\n this.merkleHash = merkleHash;\n}\nProofHashedLeaf.prototype = Object.create(MerkleProofElement.prototype);\nProofHashedLeaf.prototype.constructor = ProofHashedLeaf;\n/**\n * @param {ProofHashedLeaf} other\n */\nProofHashedLeaf.prototype.equals = function (other) {\n if (other instanceof ProofHashedLeaf) {\n return this.merkleHash.equals(other.merkleHash);\n }\n else {\n return false;\n }\n};\n/**\n *\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n * @param {SearchablePathElement} pathElem\n */\nfunction ProofNodeArrayHead(left, right, pathElem = null) {\n ProofNode.call(this, HASH_PREFIX_NODE_ARRAY, left, right);\n this.pathElem = pathElem;\n}\nProofNodeArrayHead.prototype = Object.create(ProofNode.prototype);\nProofNodeArrayHead.prototype.constructor = ProofNodeArrayHead;\n/**\n *\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n * @param {SearchablePathElement} pathElem\n */\nfunction ProofNodeDictHead(left, right, pathElem = null) {\n ProofNode.call(this, HASH_PREFIX_NODE_DICT, left, right);\n this.pathElem = pathElem;\n}\nProofNodeDictHead.prototype = Object.create(ProofNode.prototype);\nProofNodeDictHead.prototype.constructor = ProofNodeDictHead;\n/**\n *\n * @param {MerkleProofElement} root\n */\nfunction MerkleProofTree(root) {\n this.root = root;\n}\nMerkleProofTree.prototype.maxLevel = function () {\n return this.maxLevelInternal(this.root);\n};\n/**\n * @param {MerkleProofElement} node\n */\nMerkleProofTree.prototype.maxLevelInternal = function (node) {\n if (node instanceof ProofValueLeaf) {\n return 1;\n }\n else if (node instanceof ProofHashedLeaf) {\n return 1;\n }\n else if (node instanceof ProofNode) {\n return Math.max(this.maxLevelInternal(node.left), this.maxLevelInternal(node.right)) + 1;\n }\n else {\n throw new Error(\"Should be able to handle node type: \" + typeof node);\n }\n};\nmodule.exports = { ProofNode, ProofNodeSimple, ProofHashedLeaf, ProofValueLeaf,\n ProofNodeArrayHead, ProofNodeDictHead, MerkleProofElement, MerkleProofTree };\n//# sourceMappingURL=merkleprooftree.js.map","var BinaryTreeElement = require('../binarytree').BinaryTreeElement;\nvar Node = require('../binarytree').Node;\nvar Leaf = require('../binarytree').Leaf;\nvar EmptyLeaf = require('../binarytree').EmptyLeaf;\nvar BinaryTree = require('../binarytree').BinaryTree;\nvar ProofHashedLeaf = require('./merkleprooftree').ProofHashedLeaf;\nvar ProofValueLeaf = require('./merkleprooftree').ProofValueLeaf;\nvar MerkleProofElement = require('./merkleprooftree').MerkleProofElement;\nvar MerkleProofTree = require('./merkleprooftree').MerkleProofTree;\nvar ProofNodeArrayHead = require('./merkleprooftree').ProofNodeArrayHead;\nvar ProofNodeDictHead = require('./merkleprooftree').ProofNodeDictHead;\nvar PathLeafElement = require('../path').PathLeafElement;\nvar SubTreeRootNode = require('../binarytree').SubTreeRootNode;\nvar ArrayHeadNode = require('../binarytree').ArrayHeadNode;\nvar DictHeadNode = require('../binarytree').DictHeadNode;\nvar ProofNodeSimple = require('./merkleprooftree').ProofNodeSimple;\nconst EMPTY_HASH = new Buffer.alloc(32);\n/**\n *\n */\nfunction MerkleProofTreeFactory() { }\n/**\n * @param {BinaryTree} orginalTree\n */\nMerkleProofTreeFactory.prototype.buildFromBinaryTree = function (orginalTree, calculator) {\n var rootElem = this.buildFromBinaryTreeInternal(orginalTree.root, calculator);\n return new MerkleProofTree(rootElem);\n};\n/**\n * @param {BinaryTreeElement} elem\n * @param {*} calculator\n */\nMerkleProofTreeFactory.prototype.buildFromBinaryTreeInternal = function (elem, calculator) {\n if (elem instanceof EmptyLeaf) {\n return new ProofHashedLeaf(EMPTY_HASH);\n }\n else if (elem instanceof Leaf) {\n var pathElem = elem.pathElem;\n if (pathElem != null) {\n if (pathElem instanceof PathLeafElement) {\n return new ProofValueLeaf(elem.content, pathElem.previous);\n }\n else {\n throw new Error(\"The path and structure don't match. We are at a leaf, but path elem is not a leaf: \" + pathElem);\n }\n }\n else {\n // make a hash\n var hash = calculator.calculateLeafHash(elem.content);\n return new ProofHashedLeaf(hash);\n }\n }\n else if (elem instanceof SubTreeRootNode) {\n var pathElem = elem.pathElem;\n if (pathElem != null) {\n if (pathElem instanceof PathLeafElement) {\n // Don't convert it\n return new ProofValueLeaf(elem.content, pathElem.previous);\n }\n else {\n return this.convertNode(elem, calculator);\n }\n }\n else {\n return this.convertNode(elem, calculator);\n }\n }\n else if (elem instanceof Node) {\n return this.convertNode(elem, calculator);\n }\n else {\n throw new Error(\"Cannot handle \" + elem);\n }\n};\n/**\n * @param {Node} node\n */\nMerkleProofTreeFactory.prototype.convertNode = function (node, calculator) {\n var left = this.buildFromBinaryTreeInternal(node.left, calculator);\n var right = this.buildFromBinaryTreeInternal(node.right, calculator);\n if (left instanceof ProofHashedLeaf && right instanceof ProofHashedLeaf) {\n var addedHash = calculator.calculateNodeHash(node.getPrefixByte(), left.merkleHash, right.merkleHash);\n return new ProofHashedLeaf(addedHash);\n }\n else {\n return this.buildNodeOfCorrectType(node, left, right);\n }\n};\n/**\n * @param {ArrayHeadNode} node\n */\nMerkleProofTreeFactory.prototype.extractSearchablePathElement = function (node) {\n var pathElem = node.pathElem;\n if (pathElem != null) {\n return pathElem.previous;\n }\n else {\n return null;\n }\n};\n/**\n * @param {Node} node\n * @param {MerkleProofElement} left\n * @param {MerkleProofElement} right\n */\nMerkleProofTreeFactory.prototype.buildNodeOfCorrectType = function (node, left, right) {\n if (node instanceof ArrayHeadNode) {\n return new ProofNodeArrayHead(left, right, this.extractSearchablePathElement(node));\n }\n else if (node instanceof DictHeadNode) {\n return new ProofNodeDictHead(left, right, this.extractSearchablePathElement(node));\n }\n else if (node instanceof Node) {\n return new ProofNodeSimple(left, right);\n }\n else {\n throw new Error(\"Should have taken care of this node type: \" + node);\n }\n};\nmodule.exports = { MerkleProofTreeFactory };\n//# sourceMappingURL=merkleprooftreefactory.js.map","\"use strict\";\n/**\n *\n * @param {Buffer} merkleHash\n */\nfunction MerkleHashSummary(merkleHash) {\n this.merkleHash = merkleHash;\n}\n/**\n * @param {MerkleHashSummary} other\n */\nMerkleHashSummary.prototype.equals = function (other) {\n if (this === other)\n return true;\n if (typeof this != typeof other)\n return false;\n if (this.merkleHash.compare(other.merkleHash) === 0) {\n return true;\n }\n return false;\n};\nmodule.exports = { MerkleHashSummary };\n//# sourceMappingURL=merklehashcarrier.js.map","var BinaryTreeFactory = require('../binarytreefactory').BinaryTreeFactory;\nvar MerkleProofTreeFactory = require('./merkleprooftreefactory').MerkleProofTreeFactory;\nvar MerkleHashCalculator = require('../merklehashcalculator').MerkleHashCalculator;\nvar MerkleProofTree = require('./merkleprooftree').MerkleProofTree;\nvar MerkleProofElement = require('./merkleprooftree').MerkleProofElement;\nvar ProofHashedLeaf = require('./merkleprooftree').ProofHashedLeaf;\nvar ProofValueLeaf = require('./merkleprooftree').ProofValueLeaf;\nvar ProofNode = require('./merkleprooftree').ProofNode;\nvar MerkleHashSummary = require('./merklehashcarrier').MerkleHashSummary;\n/**\n *\n * @param {BinaryTreeFactory} treeFactory\n * @param {MerkleProofTreeFactory} proofFactory\n */\nfunction MerkleHashSummaryFactory(treeFactory, proofFactory) {\n this.treeFactory = treeFactory;\n this.proofFactory = proofFactory;\n}\n/**\n * @param {any} value\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.calculateMerkleRoot = function (value, calculator) {\n var binaryTree = this.treeFactory.build(value);\n var proofTree = this.proofFactory.buildFromBinaryTree(binaryTree, calculator);\n return this.calculateMerkleRootOfTree(proofTree, calculator);\n};\n/**\n * @param {MerkleProofTree} value\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.calculateMerkleTreeRoot = function (tree, calculator) {\n return this.calculateMerkleRootOfTree(tree, calculator);\n};\n/**\n * @param {MerkleProofTree} proofTree\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.calculateMerkleRootOfTree = function (proofTree, calculator) {\n var calculatedSummary = this.calculateMerkleRootInternal(proofTree.root, calculator);\n return new MerkleHashSummary(calculatedSummary);\n};\n/**\n * @param {MerkleProofElement} currentElement\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.calculateMerkleRootInternal = function (currentElement, calculator) {\n if (currentElement instanceof ProofHashedLeaf) {\n return currentElement.merkleHash;\n }\n else if (currentElement instanceof ProofValueLeaf) {\n var value = currentElement.content;\n if (calculator.isContainerProofValueLeaf(value)) {\n // We have a container value to prove, so need to convert the value to a binary tree, and THEN hash it\n var merkleProofTree = this.buildProofTree(value, calculator);\n return this.calculateMerkleRootInternal(merkleProofTree.root, calculator);\n }\n else {\n // This is a primitive value, just hash it\n return calculator.calculateLeafHash(value);\n }\n }\n else if (currentElement instanceof ProofNode) {\n var left = this.calculateMerkleRootInternal(currentElement.left, calculator);\n var right = this.calculateMerkleRootInternal(currentElement.right, calculator);\n return calculator.calculateNodeHash(currentElement.prefix, left, right);\n }\n else {\n throw new Error(\"Should have handled this type? \" + typeof currentElement);\n }\n};\n/**\n * @param {any} value\n * @param {MerkleHashCalculator} calculator\n */\nMerkleHashSummaryFactory.prototype.buildProofTree = function (value, calculator) {\n var root = this.treeFactory.build(value);\n return this.proofFactory.buildFromBinaryTree(root, calculator);\n};\nmodule.exports = { MerkleHashSummaryFactory };\n//# sourceMappingURL=merklehashsummaryfactory.js.map","\"use strict\";\nvar MerkleHashCalculator = require('../merklehashcalculator').MerkleHashCalculator;\nvar MerkleHashSummaryFactory = require('./merklehashsummaryfactory').MerkleHashSummaryFactory;\nvar BinaryTreeFactory = require('../binarytreefactory').BinaryTreeFactory;\nvar MerkleProofTreeFactory = require('./merkleprooftreefactory').MerkleProofTreeFactory;\nvar treeFactory = new BinaryTreeFactory();\nvar proofFactory = new MerkleProofTreeFactory();\nvar PathSet = require('../path').PathSet;\nvar MerkleProofTree = require('./merkleprooftree').MerkleProofTree;\n/**\n * Calculates the merkle root hash of the structure.\n *\n * @param {any} value\n * @param {MerkleHashCalculator} calculator describes the method we use for hashing and serialization\n * @return the merkle root hash (32 bytes) of the data structure.\n */\nfunction merkleHash(value, calculator) {\n return merkleHashSummary(value, calculator).merkleHash;\n}\n/**\n *\n * @param {MerkleProofTree} tree\n * @param {MerkleHashCalculator} calculator\n */\nfunction merkleTreeHash(tree, calculator) {\n return merkleProofHashSummary(tree, calculator).merkleHash;\n}\n/**\n * Calculates the merkle root hash of the structure\n *\n * @param {any} value\n * @param {MerkleHashCalculator} calculator describes the method we use for hashing and serialization\n * @return the merkle root hash summary\n */\nfunction merkleHashSummary(value, calculator) {\n var summaryFactory = new MerkleHashSummaryFactory(treeFactory, proofFactory);\n return summaryFactory.calculateMerkleRoot(value, calculator);\n}\n/**\n *\n * @param {MerkleProofTree} tree\n * @param {MerkleHashCalculator} calculator\n */\nfunction merkleProofHashSummary(tree, calculator) {\n var summaryFactory = new MerkleHashSummaryFactory(treeFactory, proofFactory);\n return summaryFactory.calculateMerkleTreeRoot(tree, calculator);\n}\n/**\n *\n * @param {any} value\n * @param {PathSet} pathSet\n * @param {MerkleHashCalculator} calculator\n */\nfunction generateProof(value, pathSet, calculator) {\n var binaryTree = treeFactory.buildWithPath(value, pathSet);\n return proofFactory.buildFromBinaryTree(binaryTree, calculator);\n}\nmodule.exports = { merkleHash, merkleTreeHash, merkleHashSummary, generateProof };\n//# sourceMappingURL=merkleproof.js.map","import { MerkleHashCalculator, CryptoSystem, } from \"../merkle/merklehashcalculator\";\nconst theMerkleHashCalculator = new MerkleHashCalculator(new CryptoSystem());\nimport { merkleHashSummary } from \"../merkle/proof/merkleproof\";\nimport * as serialization from \"../gtx/serialization\";\nconst gtvHash = (obj) => {\n return merkleHashSummary(obj, theMerkleHashCalculator).merkleHash;\n};\nconst encode = serialization.encodeValue;\nconst decode = serialization.decodeValue;\nexport { encode, decode, gtvHash };\n//# sourceMappingURL=index.js.map","import * as serialization from \"./serialization\";\nconst encode = serialization.encodeValueGtx;\nconst decode = serialization.decodeValueGtx;\nexport { encode, decode };\n//# sourceMappingURL=index.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as gtv from \"../gtv\";\nimport { checkDigestSignature, createPublicKey, makeKeyPair, signDigest } from \"../encryption/encryption\";\nimport { AlreadySignedTransactionException, MissingGtxException, MissingSignerException, NumberOfSignersAndSignaturesException, } from \"./errors\";\nimport { encode as gtxEncode, decode as gtxDecode } from \"./index\";\nimport { ensureBuffer } from \"../formatter\";\nexport function emptyGtx(blockchainRID) {\n return { blockchainRID: blockchainRID, operations: [], signers: [] };\n}\n/**\n * Adds a function call to a GTX. Creates a new GTX if none specified.\n * This function will throw Error if gtx is already signed\n * @param opName the name of the function to call\n * @param args the array of arguments of the function call. If no args, this must be an empty array\n * @param gtx the function call will be added to this gtx\n * @returns the gtx\n * @throws if gtx is null or if gtx is already signed\n */\nexport function addTransactionToGtx(opName, args, gtx) {\n if (gtx == null) {\n throw new MissingGtxException();\n }\n if (gtx.signatures) {\n throw new AlreadySignedTransactionException(\"function\");\n }\n gtx.operations.push({ opName: opName, args: args });\n return gtx;\n}\nexport function addSignerToGtx(signer, gtx) {\n if (gtx.signatures) {\n throw new AlreadySignedTransactionException(\"signer\");\n }\n gtx.signers.push(signer);\n}\n/**\n * Serializes the gtx for signing\n * @param gtx the gtx to serialize\n */\nexport function getDigestToSign(gtx) {\n return gtv.gtvHash(gtvTxBody(gtx));\n}\nexport function gtvTxBody(gtx) {\n return [\n gtx.blockchainRID,\n gtx.operations.map((op) => [op.opName, op.args]),\n gtx.signers,\n ];\n}\nexport function sign(gtx, privOrSigProv, pubKey) {\n return __awaiter(this, void 0, void 0, function* () {\n if (privOrSigProv instanceof Buffer) {\n const digestToSign = getDigestToSign(gtx);\n const signature = signDigest(digestToSign, privOrSigProv);\n addSignature(pubKey || makeKeyPair(privOrSigProv).pubKey, signature, gtx);\n }\n else {\n const digestToSign = getDigestToSign(gtx);\n const signature = yield privOrSigProv.sign(digestToSign);\n addSignature(privOrSigProv.pubKey, signature, gtx);\n }\n });\n}\nexport function signRawTransaction(_keyPair, _rawTransaction) {\n throw Error(\"TODO\");\n //TODO\n //const gtx = module.exports.deserialize(rawTransaction);\n //module.exports.sign(keyPair.privKey, keyPair.pubKey, gtx);\n // return module.exports.serialize(gtx)\n}\n/**\n * Adds a signature to the gtx\n */\nexport function addSignature(pubKeyBuffer, signatureBuffer, gtx) {\n if (!gtx.signatures) {\n gtx.signatures = Array(gtx.signers.length).fill(Buffer.alloc(64));\n }\n if (gtx.signers.length !== gtx.signatures.length) {\n throw new NumberOfSignersAndSignaturesException();\n }\n const signerIndex = gtx.signers.findIndex((signer) => pubKeyBuffer.equals(signer));\n if (signerIndex === -1) {\n throw new MissingSignerException();\n }\n gtx.signatures[signerIndex] = signatureBuffer;\n}\nexport function serialize(gtx) {\n if (!gtx.signatures) {\n // TODO\n // The gtx is not signed, but we must include\n // the signatures attribute, so let's add that.\n gtx.signatures = [];\n }\n return gtxEncode([gtvTxBody(gtx), gtx.signatures]);\n}\nexport function deserialize(gtxBytes) {\n const deserializedTx = gtxDecode(gtxBytes);\n const body = deserializedTx[0];\n const gtvTxBody = {\n blockchainRID: body[0],\n operations: body[1].map((operation) => ({\n opName: operation[0],\n args: operation[1],\n })),\n signers: body[2],\n };\n const signatures = deserializedTx[1];\n return {\n blockchainRID: gtvTxBody.blockchainRID,\n operations: gtvTxBody.operations,\n signers: gtvTxBody.signers,\n signatures,\n };\n}\nexport function checkGTXSignatures(txHash, gtx) {\n for (const i in gtx.signers) {\n const signValid = checkDigestSignature(txHash, gtx.signers[i], gtx.signatures[i]);\n if (!signValid)\n return signValid;\n }\n return true;\n}\nexport function newSignatureProvider(keyPair) {\n let pub, priv;\n if (keyPair) {\n priv = ensureBuffer(keyPair.privKey);\n pub = keyPair.pubKey ? ensureBuffer(keyPair.pubKey) : createPublicKey(priv);\n }\n else {\n ({ privKey: priv, pubKey: pub } = makeKeyPair());\n }\n return {\n pubKey: pub,\n sign: (digest) => __awaiter(this, void 0, void 0, function* () { return signDigest(digest, priv); })\n };\n}\n//# sourceMappingURL=gtx.js.map","export { debug, info, error, warning, setLogLevel, getLogLevel };\nvar MsgType;\n(function (MsgType) {\n MsgType[\"debug\"] = \"DEBUG\";\n MsgType[\"info\"] = \"INFO\";\n MsgType[\"error\"] = \"ERROR\";\n MsgType[\"warning\"] = \"WARNING\";\n})(MsgType || (MsgType = {}));\nvar LogColor;\n(function (LogColor) {\n LogColor[\"red\"] = \"\\u001B[91m\";\n LogColor[\"green\"] = \"\\u001B[92m\";\n LogColor[\"blue\"] = \"\\u001B[36m\";\n LogColor[\"yellow\"] = \"\\u001B[93m\";\n LogColor[\"stopColor\"] = \"\\u001B[0m\";\n})(LogColor || (LogColor = {}));\nlet logLevel = 1;\nfunction setLogLevel(level) {\n logLevel = level;\n}\nfunction getLogLevel() {\n return logLevel;\n}\nfunction debug(message) {\n if (logLevel >= 3) {\n emitLogMessage(MsgType.debug, message, LogColor.blue);\n }\n}\nfunction info(message) {\n if (logLevel >= 2) {\n emitLogMessage(MsgType.info, message, LogColor.green);\n }\n}\nfunction error(message) {\n if (logLevel != -1) {\n emitLogMessage(MsgType.error, message, LogColor.red);\n }\n}\nfunction warning(message) {\n if (logLevel >= 1) {\n emitLogMessage(MsgType.warning, message, LogColor.yellow);\n }\n}\nfunction emitLogMessage(msgType, message, color) {\n const time = getTimestamp();\n console.log(`[${time}] ${color}${msgType}:${LogColor.stopColor} ${message}`);\n}\nfunction getTimestamp() {\n const pad = (n, s = 2) => `${new Array(s).fill(0)}${n}`.slice(-s);\n const date = new Date();\n return `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}:${pad(date.getMilliseconds(), 3)}`;\n}\n//# sourceMappingURL=logger.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as gtxTool from \"./gtx\";\nimport * as logger from \"../logger\";\nimport { removeDuplicateSigners } from \"../formatter\";\nexport function createClient(restApiClient, blockchainRID, functionNames) {\n functionNames.push(\"message\");\n function transaction(gtx) {\n return {\n gtx,\n sign: function (privOrSigProv, pubKey) {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug(`signing transaction with ${privOrSigProv instanceof Buffer\n ? \"privkey: \" + privOrSigProv.toString(\"hex\")\n : \"signature provider [pubkey: \" + privOrSigProv.pubKey + \"]\"}`);\n if (privOrSigProv instanceof Buffer) {\n yield gtxTool.sign(this.gtx, privOrSigProv, pubKey);\n }\n else {\n yield gtxTool.sign(this.gtx, privOrSigProv);\n }\n });\n },\n getTxRID: function () {\n return this.getDigestToSign();\n },\n getDigestToSign: function () {\n return gtxTool.getDigestToSign(this.gtx);\n },\n addSignature: function (pubKey, signature) {\n gtxTool.addSignature(pubKey, signature, this.gtx);\n },\n // raw call\n addOperation: function (name, ...args) {\n gtxTool.addTransactionToGtx(name, args, this.gtx);\n },\n postAndWaitConfirmation() {\n return restApiClient.postAndWaitConfirmation(gtxTool.serialize(this.gtx), this.getTxRID());\n },\n send: function (callback) {\n const gtxBytes = gtxTool.serialize(this.gtx);\n restApiClient.postTransaction(gtxBytes, callback);\n this.gtx = null;\n this.gtxBytes = gtxBytes;\n },\n encode: function () {\n return gtxTool.serialize(this.gtx);\n },\n };\n }\n function addFunctions(req) {\n functionNames.forEach((functionName) => {\n req[functionName] = function (...args) {\n gtxTool.addTransactionToGtx(functionName, args, this.gtx);\n };\n });\n }\n const client = {\n newTransaction: function (signers) {\n signers = removeDuplicateSigners(signers);\n const newGtx = gtxTool.emptyGtx(Buffer.from(blockchainRID, \"hex\"));\n signers.forEach((signer) => gtxTool.addSignerToGtx(signer, newGtx));\n const req = transaction(newGtx);\n addFunctions(req);\n return req;\n },\n transactionFromRawTransaction: function (rawTransaction) {\n const gtx = gtxTool.deserialize(rawTransaction);\n logger.debug(`Output from deserializing a raw transaction: ${JSON.stringify(gtx)}`);\n const req = transaction(gtx);\n addFunctions(req);\n return req;\n },\n query: function (nameOrObject, queryArguments) {\n if (typeof nameOrObject === \"string\") {\n return restApiClient.query(nameOrObject, queryArguments);\n }\n else {\n return restApiClient.query(nameOrObject);\n }\n },\n };\n return client;\n}\n//# sourceMappingURL=gtxclient.js.map","export var ResponseStatus;\n(function (ResponseStatus) {\n ResponseStatus[\"Confirmed\"] = \"confirmed\";\n ResponseStatus[\"Rejected\"] = \"rejected\";\n ResponseStatus[\"Unknown\"] = \"unknown\";\n ResponseStatus[\"Waiting\"] = \"waiting\";\n})(ResponseStatus || (ResponseStatus = {}));\nexport var Method;\n(function (Method) {\n Method[\"GET\"] = \"get\";\n Method[\"POST\"] = \"post\";\n})(Method || (Method = {}));\n//# sourceMappingURL=types.js.map","export class TxRejectedError extends Error {\n constructor(rejectReason) {\n super(\"Transaction was rejected\");\n this.name = \"TxRejectedError\";\n this.fullReason = rejectReason;\n const parsed = rejectReason.match(/^\\[(.+)\\] Operation '(.+)' failed: (.+)$/);\n if (parsed) {\n this.shortReason = parsed[3];\n this.rellLine = parsed[1];\n this.operation = parsed[2];\n }\n }\n}\nexport class UnexpectedStatusError extends Error {\n constructor(status) {\n super(`Unexpected status code from server: ${status}`);\n }\n}\nexport class LostMessageError extends Error {\n constructor() {\n super(`Server lost our message`);\n }\n}\nexport class UnexpectedResponseError extends Error {\n constructor() {\n super(`got unexpected response from server`);\n }\n}\nexport class UnvalidTxRidException extends Error {\n constructor(txRID) {\n super(`expected length 32 of txRID, but got ${txRID.length}`);\n }\n}\nexport class SerializedTransactionFormatException extends Error {\n constructor() {\n super(`messageHash is not a Buffer`);\n }\n}\nexport class GetBridFromChainException extends Error {\n constructor(chainId, reason) {\n super(`Error resolving BRID for chainId ${chainId}, reason: ${reason}`);\n }\n}\nexport class EmptyListOfUrlsException extends Error {\n constructor() {\n super(`Failed to initialize rest client with empty list of urls`);\n }\n}\nexport class InvalidBlochchainRIDException extends Error {\n constructor() {\n super(`Failed to initialize rest client with blockchain RID that is not 32 bytes`);\n }\n}\n//# sourceMappingURL=errors.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as logger from \"../logger\";\nimport { decodeValue } from \"../gtx/serialization\";\nimport { Method } from \"./types\";\nfunction handleRequest(method, path, endpoint, postObject) {\n return __awaiter(this, void 0, void 0, function* () {\n if (method == Method.GET) {\n return yield get(path, endpoint);\n }\n else {\n return yield post(path, endpoint, postObject);\n }\n });\n}\nexport default handleRequest;\n/**\n * Sends request to get data from a given API endpoint.\n * @param path API endpoint of Rell backend\n * @param endpoint\n */\nfunction get(path, endpoint) {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug(\"GET URL \" + new URL(path, endpoint).href);\n try {\n const response = yield fetch(new URL(path, endpoint).href);\n if (response.status == 404) {\n return { error: null, statusCode: response.status, rspBody: null };\n }\n const rspBody = yield response.json();\n return { error: null, statusCode: response.status, rspBody };\n }\n catch (error) {\n logger.error(error.message);\n return { error, statusCode: null, rspBody: null };\n }\n });\n}\n/**\n * Sends request to post data to a given API endpoint.\n * @param path API endpoint of Rell backend\n * @param endpoint\n * @param requestBody request body\n */\nfunction post(path, endpoint, requestBody) {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug(\"POST URL \" + new URL(path, endpoint).href);\n logger.debug(\"POST body \" + JSON.stringify(requestBody));\n if (Buffer.isBuffer(requestBody)) {\n try {\n const requestOptions = {\n method: \"post\",\n body: requestBody,\n };\n const response = yield fetch(new URL(path, endpoint).href, requestOptions);\n return {\n error: null,\n statusCode: response.status,\n rspBody: decodeValue(Buffer.from(yield response.arrayBuffer())),\n };\n }\n catch (error) {\n return { error, statusCode: null, rspBody: null };\n }\n }\n else {\n try {\n const response = yield fetch(new URL(path, endpoint).href, {\n method: \"post\",\n body: JSON.stringify(requestBody),\n });\n return {\n error: null,\n statusCode: response.status,\n rspBody: yield response.json(),\n };\n }\n catch (error) {\n return { error, statusCode: null, rspBody: null };\n }\n }\n });\n}\n//# sourceMappingURL=httpUtil.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as logger from \"../logger\";\nimport { GetBridFromChainException } from \"./errors\";\nimport handleRequest from \"./httpUtil\";\nexport function getBrid(urlBase, chainId) {\n if (chainId >= 0) {\n const url = `${urlBase}/brid/iid_${chainId}`;\n return fetch(url).then((response) => {\n if (response.ok)\n return response.text();\n throw new GetBridFromChainException(chainId, response.statusText);\n });\n }\n else {\n const url = `${urlBase}/_debug`;\n return fetch(url).then((response) => {\n if (response.ok)\n return response\n .json()\n .then((json) => json.blockchain[json.blockchain.length - 1].brid);\n throw new GetBridFromChainException(chainId, response.statusText);\n });\n }\n}\nexport function requestWithRetry(method, path, config, postObject) {\n return __awaiter(this, void 0, void 0, function* () {\n let statusCode, rspBody, error;\n const noRetryStatusCodes = [200, 400, 409, 500];\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const _endpoint of config.endpointPool) {\n const endpoint = nextEndpoint(config.endpointPool);\n for (let attempt = 0; attempt < config.attemptsPerEndpoint; attempt++) {\n ({ error, statusCode, rspBody } = yield handleRequest(method, path, endpoint, postObject));\n if (noRetryStatusCodes.includes(statusCode)) {\n return { error, statusCode, rspBody };\n }\n if (statusCode == 503) {\n break;\n }\n logger.info(`${method} request failed on ${endpoint}. Attempt: ${attempt + 1} / ${config.attemptsPerEndpoint}`);\n yield sleep(config.attemptInterval);\n }\n }\n return { error, statusCode, rspBody };\n });\n}\nexport function nextEndpoint(endpointPool) {\n return endpointPool[Math.floor(Math.random() * endpointPool.length)];\n}\nexport const sleep = (ms) => new Promise((r) => setTimeout(r, ms));\n//# sourceMappingURL=restclientutil.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ResponseStatus, Method, } from \"./types\";\nimport * as logger from \"../logger\";\nimport { EmptyListOfUrlsException, LostMessageError, SerializedTransactionFormatException, TxRejectedError, UnexpectedResponseError, UnexpectedStatusError, UnvalidTxRidException, } from \"./errors\";\nimport { toBuffer, toQueryObjectGTV } from \"../formatter\";\nimport { requestWithRetry } from \"./restclientutil\";\nimport { encodeValue } from \"../gtx/serialization\";\nexport function createRestClient(endpointPool, blockchainRID, maxSockets = 10, pollingInterval = 500, failOverConfig) {\n validateInput(endpointPool, failOverConfig);\n return {\n config: {\n endpointPool: endpointPool,\n pool: { maxSockets },\n pollingInterval,\n attemptsPerEndpoint: (failOverConfig === null || failOverConfig === void 0 ? void 0 : failOverConfig.attemptsPerEndpoint) || 3,\n attemptInterval: (failOverConfig === null || failOverConfig === void 0 ? void 0 : failOverConfig.attemptInterval) || 500,\n },\n getTransaction: function (txRID, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!validTxRID(txRID)) {\n callback(new UnvalidTxRidException(txRID), null);\n }\n else {\n const { error, statusCode, rspBody } = yield requestWithRetry(Method.GET, \"tx/\" + blockchainRID + \"/\" + txRID.toString(\"hex\"), this.config);\n handleGetResponse(error, statusCode, statusCode === 200 ? toBuffer(rspBody.tx) : rspBody, callback);\n }\n });\n },\n postTransaction: function (serializedTransaction, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!Buffer.isBuffer(serializedTransaction)) {\n throw new SerializedTransactionFormatException();\n }\n const transactionObject = {\n tx: serializedTransaction.toString(\"hex\"),\n };\n const { error, statusCode, rspBody } = yield requestWithRetry(Method.POST, \"tx/\" + blockchainRID, this.config, transactionObject);\n handlePostResponse(error, statusCode, rspBody, callback);\n });\n },\n status: function (txRID, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!validTxRID(txRID)) {\n callback(new UnvalidTxRidException(txRID), null);\n }\n else {\n const { error, statusCode, rspBody } = yield requestWithRetry(Method.GET, \"tx/\" + blockchainRID + \"/\" + txRID.toString(\"hex\") + \"/status\", this.config);\n handleGetResponse(error, statusCode, rspBody, callback);\n }\n });\n },\n query: function (nameOrQueryObject, queryArguments) {\n return __awaiter(this, void 0, void 0, function* () {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n const callback = (error, result) => {\n if (error) {\n reject(error);\n }\n else {\n resolve(result);\n }\n };\n const { error, statusCode, rspBody } = yield requestWithRetry(Method.POST, `query_gtv/${blockchainRID}`, this.config, encodeValue(toQueryObjectGTV(nameOrQueryObject, queryArguments)));\n handlePostResponse(error, statusCode, rspBody, callback);\n }));\n });\n },\n waitConfirmation(txRID) {\n return new Promise((resolve, reject) => {\n this.status(txRID, (error, result) => {\n if (error) {\n reject(error);\n }\n else {\n const status = result.status;\n switch (status) {\n case ResponseStatus.Confirmed:\n resolve(null);\n break;\n case ResponseStatus.Rejected:\n reject(new TxRejectedError(result.rejectReason));\n break;\n case ResponseStatus.Unknown:\n reject(new LostMessageError());\n break;\n case ResponseStatus.Waiting:\n setTimeout(() => this.waitConfirmation(txRID).then(resolve, reject), this.config.pollingInterval);\n break;\n default:\n logger.error(status);\n reject(new UnexpectedResponseError());\n }\n }\n });\n });\n },\n postAndWaitConfirmation(serializedTransaction, txRID, validate) {\n if (validate === true) {\n return Promise.reject(\"Automatic validation is not yet implemented\");\n }\n return new Promise((resolve, reject) => {\n this.postTransaction(serializedTransaction, (error) => {\n if (error)\n reject(error);\n else {\n setTimeout(() => this.waitConfirmation(txRID).then(resolve, reject), 1011);\n }\n });\n });\n },\n getEndpointPool() {\n return this.config.endpointPool;\n },\n };\n}\n/**\n * Validates that txRID is a Buffer of 32 bytes.\n * @param txRID A buffer of 32 bytes\n */\nfunction validTxRID(txRID) {\n if (txRID.length != 32) {\n const error = new UnvalidTxRidException(txRID);\n logger.error(error.toString());\n return false;\n }\n return true;\n}\nfunction validateInput(endpointPool, failOverConfig) {\n if (!endpointPool.length) {\n throw new EmptyListOfUrlsException();\n }\n if ((failOverConfig === null || failOverConfig === void 0 ? void 0 : failOverConfig.attemptsPerEndpoint) < 1) {\n logger.debug(\"Attempts can not be 0 or below, setting it to 1\");\n failOverConfig.attemptsPerEndpoint = 1;\n }\n}\n/**\n * @param error response error\n * @param statusCode response status code\n * @param responseObject the responsebody from the server\n * @param callback the callback function to propagate the error and response back to the caller\n */\nfunction handleGetResponse(error, statusCode, responseObject, callback) {\n try {\n logger.debug(`error: ${error}, status code: ${statusCode}, response body: ${JSON.stringify(responseObject)}`);\n if (error) {\n callback(error, null);\n }\n else if (statusCode === 404) { //TODO remove \n logger.error(\"404 received\");\n callback(null, null);\n }\n else if (statusCode !== 200) {\n callback(new UnexpectedStatusError(statusCode), responseObject);\n }\n else {\n callback(null, responseObject);\n }\n }\n catch (error) {\n logger.error(\"restclient.handleGetResponse(): Failed to call callback function \" +\n error);\n }\n}\n/**\n * @param error response error\n * @param statusCode response status code\n * @param responseObject the responsebody from the server\n * @param callback the callback function to propagate the error and response back to the caller\n */\nfunction handlePostResponse(error, statusCode, responseObject, callback) {\n logger.debug(`error: ${error}, status code: ${statusCode}, response body: ${JSON.stringify(responseObject)}`);\n try {\n if (error) {\n logger.error(`In restclient post(). ${error}`);\n callback(error);\n }\n else if (statusCode != 200) {\n logger.error(`Unexpected status code from server: ${statusCode}`);\n callback(new UnexpectedStatusError(statusCode), responseObject);\n }\n else {\n logger.info(`Calling responseCallback with responseObject: ${JSON.stringify(responseObject)}`);\n callback(null, responseObject);\n }\n }\n catch (error) {\n logger.error(\"restclient.handlePostResponse(): Failed to call callback function \" +\n error);\n }\n}\n//# sourceMappingURL=restclient.js.map","import { hashConcat } from \"../encryption/encryption\";\nvar internalNodePrefix = Buffer.alloc(1, 0);\nvar leafPrefix = Buffer.alloc(1, 1);\nvar nonExistingNodeHash = Buffer.alloc(32);\nexport function calculateRoot(hashes, depth, leafDepth) {\n var numTransactions = hashes.length;\n if (numTransactions === 0) {\n return Buffer.alloc(32);\n }\n if (depth === undefined) {\n depth = 0;\n }\n if (!leafDepth) {\n leafDepth = Math.ceil(Math.log2(numTransactions));\n }\n if (depth === leafDepth) {\n return hashes[0];\n }\n var maxLeavesPerChild = Math.pow(2, leafDepth - depth - 1);\n var prefix = depth === leafDepth - 1 ? leafPrefix : internalNodePrefix;\n if (numTransactions <= maxLeavesPerChild) {\n var left = calculateRoot(hashes, depth + 1, leafDepth);\n return hashConcat([prefix, left, nonExistingNodeHash]);\n }\n var left = calculateRoot(hashes.slice(0, maxLeavesPerChild), depth + 1, leafDepth);\n var right = calculateRoot(hashes.slice(maxLeavesPerChild), depth + 1, leafDepth);\n return hashConcat([prefix, left, prefix, right]);\n}\nfunction internalMerklePath(hashes, targetIndex, depth, leafDepth) {\n var numTransactions = hashes.length;\n if (depth === leafDepth) {\n return [];\n }\n var maxLeavesPerChild = Math.pow(2, leafDepth - depth - 1);\n var prefix = depth == leafDepth - 1 ? leafPrefix : internalNodePrefix;\n if (numTransactions <= maxLeavesPerChild) {\n var path = internalMerklePath(hashes, targetIndex, depth + 1, leafDepth);\n path.push({ side: 1, hash: nonExistingNodeHash });\n return path;\n }\n if (targetIndex < maxLeavesPerChild) {\n var path = internalMerklePath(hashes.slice(0, maxLeavesPerChild), targetIndex, depth + 1, leafDepth);\n var right = calculateRoot(hashes.slice(maxLeavesPerChild), depth + 1, leafDepth);\n path.push({ side: 1, hash: right });\n }\n else {\n var left = calculateRoot(hashes.slice(0, maxLeavesPerChild), depth + 1, leafDepth);\n var path = internalMerklePath(hashes.slice(maxLeavesPerChild), targetIndex - maxLeavesPerChild, depth + 1, leafDepth);\n path.push({ side: 0, hash: left });\n }\n return path;\n}\n/*\n * a path looks like this:\n * {merklePath: [{side: <0|1>, hash: <hash buffer depth n-1>},\n * {side: <0|1>, hash: <hash buffer depth n-2>},\n * ...\n * {side: <0|1>, hash: <hash buffer depth 1>}]}\n */\nexport function merklePath(hashes, target) {\n if (!hashes || hashes.length == 0) {\n throw new Error(\"Cannot make merkle path from empty transaction set\");\n }\n var index = -1;\n for (var i = 0; i < hashes.length; i++) {\n if (hashes[i].equals(target)) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error(\"Target is not in list of hashes\");\n }\n var leafDepth = Math.ceil(Math.log2(hashes.length));\n var path = internalMerklePath(hashes, index, 0, leafDepth);\n return path;\n}\n/**\n *\n * @param path The merkle path to validate.\n * Format [{side: <0|1>, hash: <hash buffer depth n-1>},\n * {side: <0|1>, hash: <hash buffer depth n-2>},\n * ...,\n * {side: <0|1>, hash: <hash buffer depth 1>}]\n\n * @param target the leaf hash that the path proves belongs in the merkleRoot\n * @param merkleRoot The merkle root that supposedly contains the target via the supplied path.\n * The merkle root is typically taken from a block header.\n */\nexport function validateMerklePath(path, target, merkleRoot) {\n let currentHash = target;\n for (let i = 0; i < path.length; i++) {\n const item = path[i];\n const prefix = (i === 0) ? Buffer.from([1]) : Buffer.from([0]);\n if (item.side === 0) {\n currentHash = hashConcat([prefix, item.hash, prefix, currentHash]);\n }\n else {\n if (item.hash.equals(nonExistingNodeHash)) {\n currentHash = hashConcat([prefix, currentHash, nonExistingNodeHash]);\n }\n else {\n currentHash = hashConcat([prefix, currentHash, prefix, item.hash]);\n }\n }\n }\n return merkleRoot.equals(currentHash);\n}\n//# sourceMappingURL=merkleHelper.js.map","export class BlockchainUrlUndefinedException extends Error {\n constructor(brid) {\n super(`Cannot find nodes hosting the blockchain with RID ${brid}`);\n }\n}\n//# sourceMappingURL=errors.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as pc from \"../../index\";\nimport { BlockchainUrlUndefinedException } from \"./errors\";\n/**\n * Provides postchain clients that can be used to communicate with dapps within the chromia network\n * @param chain0BRID brid of chain0\n * @param rest rest client configured to node running chain0\n */\nexport function chromiaClientProvider(chain0BRID, rest) {\n const chain0Client = pc.gtxClient.createClient(rest, chain0BRID, []);\n return {\n blockchainConnection: function (dappBRID) {\n return __awaiter(this, void 0, void 0, function* () {\n const queryObject = {\n type: \"cm_get_blockchain_api_urls\",\n blockchain_rid: dappBRID,\n };\n const baseUrls = yield chain0Client.query(queryObject);\n if (!baseUrls.length) {\n throw new BlockchainUrlUndefinedException(dappBRID);\n }\n return pc.restClient.createRestClient(baseUrls, dappBRID);\n });\n },\n };\n}\n//# sourceMappingURL=chromiaClientProvider.js.map"],"names":["BN","util","PathLeafElement","PathSet","require$$0","HASH_PREFIX_NODE","HASH_PREFIX_LEAF","HASH_PREFIX_NODE_ARRAY","HASH_PREFIX_NODE_DICT","Node","SubTreeRootNode","Leaf","EmptyLeaf","BinaryTree","ArrayHeadNode","DictHeadNode","secp256k1","crypto","sign","require$$1","require$$2","BinaryTreeFactory","ProofNode","ProofNodeSimple","ProofValueLeaf","ProofHashedLeaf","ProofNodeArrayHead","ProofNodeDictHead","MerkleProofTree","MerkleProofTreeFactory","MerkleHashSummary","require$$3","require$$4","MerkleHashSummaryFactory","MerkleHashCalculator","CryptoSystem","merkleHashSummary","encode","serialization.encodeValue","decode","serialization.decodeValue","serialization.encodeValueGtx","serialization.decodeValueGtx","__awaiter","this","gtv.gtvHash","gtxEncode","gtxDecode","gtx","logger.debug","gtxTool.sign","gtxTool.getDigestToSign","gtxTool.addSignature","gtxTool.addTransactionToGtx","gtxTool.serialize","gtxTool.emptyGtx","gtxTool.addSignerToGtx","gtxTool.deserialize","error","logger.error","logger.info","pc.gtxClient.createClient","pc.restClient.createRestClient"],"mappings":"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"}