@wishknish/knishio-client-js 0.6.4 → 0.7.5

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.
Files changed (121) hide show
  1. package/dist/client.cjs.js +567 -0
  2. package/dist/client.cjs.js.map +1 -0
  3. package/dist/client.es.mjs +8665 -0
  4. package/dist/client.es.mjs.map +1 -0
  5. package/dist/client.iife.js +84 -45
  6. package/dist/client.iife.js.map +1 -0
  7. package/package.json +48 -28
  8. package/src/Atom.js +132 -5
  9. package/src/AtomMeta.js +7 -8
  10. package/src/AuthToken.js +1 -1
  11. package/src/KnishIOClient.js +180 -78
  12. package/src/Meta.js +6 -2
  13. package/src/Molecule.js +383 -44
  14. package/src/PolicyMeta.js +1 -1
  15. package/src/Wallet.js +67 -12
  16. package/src/exception/AtomIndexException.js +1 -1
  17. package/src/exception/AtomsMissingException.js +1 -1
  18. package/src/exception/AuthorizationRejectedException.js +1 -1
  19. package/src/exception/BalanceInsufficientException.js +1 -1
  20. package/src/exception/BatchIdException.js +1 -1
  21. package/src/exception/CodeException.js +1 -1
  22. package/src/exception/DecryptionKeyException.js +1 -1
  23. package/src/exception/InvalidResponseException.js +1 -1
  24. package/src/exception/MetaMissingException.js +1 -1
  25. package/src/exception/MolecularHashMismatchException.js +1 -1
  26. package/src/exception/MolecularHashMissingException.js +1 -1
  27. package/src/exception/NegativeAmountException.js +1 -1
  28. package/src/exception/PolicyInvalidException.js +1 -1
  29. package/src/exception/SignatureMalformedException.js +1 -1
  30. package/src/exception/SignatureMismatchException.js +1 -1
  31. package/src/exception/StackableUnitAmountException.js +1 -1
  32. package/src/exception/StackableUnitDecimalsException.js +1 -1
  33. package/src/exception/TransferBalanceException.js +1 -1
  34. package/src/exception/TransferMalformedException.js +1 -1
  35. package/src/exception/TransferMismatchedException.js +1 -1
  36. package/src/exception/TransferRemainderException.js +1 -1
  37. package/src/exception/TransferToSelfException.js +1 -1
  38. package/src/exception/TransferUnbalancedException.js +1 -1
  39. package/src/exception/UnauthenticatedException.js +1 -1
  40. package/src/exception/WalletCredentialException.js +1 -1
  41. package/src/exception/WalletShadowException.js +1 -1
  42. package/src/exception/WrongTokenTypeException.js +1 -1
  43. package/src/exception/index.js +25 -25
  44. package/src/index.js +29 -9
  45. package/src/instance/Rules/Callback.js +5 -5
  46. package/src/instance/Rules/Condition.js +1 -1
  47. package/src/instance/Rules/Rule.js +4 -4
  48. package/src/instance/Rules/exception/RuleArgumentException.js +1 -1
  49. package/src/libraries/CheckMolecule.js +285 -27
  50. package/src/libraries/crypto.js +16 -2
  51. package/src/libraries/strings.js +1 -1
  52. package/src/libraries/urql/UrqlClientWrapper.js +3 -1
  53. package/src/mutation/Mutation.js +2 -2
  54. package/src/mutation/MutationActiveSession.js +2 -2
  55. package/src/mutation/MutationAppendRequest.js +91 -0
  56. package/src/mutation/MutationClaimShadowWallet.js +3 -3
  57. package/src/mutation/MutationCreateIdentifier.js +2 -2
  58. package/src/mutation/MutationCreateMeta.js +2 -2
  59. package/src/mutation/MutationCreateRule.js +2 -2
  60. package/src/mutation/MutationCreateToken.js +2 -2
  61. package/src/mutation/MutationCreateWallet.js +2 -2
  62. package/src/mutation/MutationDepositBufferToken.js +1 -1
  63. package/src/mutation/MutationLinkIdentifier.js +2 -2
  64. package/src/mutation/MutationPeering.js +82 -0
  65. package/src/mutation/MutationProposeMolecule.js +2 -2
  66. package/src/mutation/MutationRequestAuthorization.js +2 -2
  67. package/src/mutation/MutationRequestAuthorizationGuest.js +2 -2
  68. package/src/mutation/MutationRequestTokens.js +2 -2
  69. package/src/mutation/MutationTransferTokens.js +2 -2
  70. package/src/mutation/MutationWithdrawBufferToken.js +1 -1
  71. package/src/query/Query.js +2 -2
  72. package/src/query/QueryActiveSession.js +2 -2
  73. package/src/query/QueryAtom.js +2 -2
  74. package/src/query/QueryBalance.js +2 -2
  75. package/src/query/QueryBatch.js +2 -2
  76. package/src/query/QueryBatchHistory.js +3 -3
  77. package/src/query/QueryContinuId.js +2 -2
  78. package/src/query/QueryMetaType.js +11 -5
  79. package/src/query/QueryMetaTypeViaAtom.js +11 -4
  80. package/src/query/QueryMetaTypeViaMolecule.js +223 -0
  81. package/src/query/QueryPolicy.js +2 -2
  82. package/src/query/QueryToken.js +2 -2
  83. package/src/query/QueryUserActivity.js +2 -2
  84. package/src/query/QueryWalletBundle.js +2 -2
  85. package/src/query/QueryWalletList.js +2 -2
  86. package/src/response/Response.js +168 -4
  87. package/src/response/ResponseActiveSession.js +2 -2
  88. package/src/response/{ResponseMetaBatch.js → ResponseAppendRequest.js} +4 -21
  89. package/src/response/ResponseAtom.js +2 -2
  90. package/src/response/ResponseAuthorizationGuest.js +4 -4
  91. package/src/response/ResponseBalance.js +9 -4
  92. package/src/response/ResponseClaimShadowWallet.js +1 -1
  93. package/src/response/ResponseContinuId.js +4 -4
  94. package/src/response/ResponseCreateIdentifier.js +1 -1
  95. package/src/response/ResponseCreateMeta.js +1 -1
  96. package/src/response/ResponseCreateRule.js +1 -1
  97. package/src/response/ResponseCreateToken.js +1 -1
  98. package/src/response/ResponseCreateWallet.js +1 -1
  99. package/src/response/ResponseLinkIdentifier.js +3 -3
  100. package/src/response/ResponseMetaType.js +2 -2
  101. package/src/response/ResponseMetaTypeViaAtom.js +2 -2
  102. package/src/response/ResponseMetaTypeViaMolecule.js +210 -0
  103. package/src/response/ResponsePeering.js +55 -0
  104. package/src/response/ResponsePolicy.js +2 -2
  105. package/src/response/ResponseProposeMolecule.js +3 -3
  106. package/src/response/ResponseQueryActiveSession.js +2 -2
  107. package/src/response/ResponseQueryUserActivity.js +2 -2
  108. package/src/response/ResponseRequestAuthorization.js +3 -3
  109. package/src/response/ResponseRequestAuthorizationGuest.js +3 -3
  110. package/src/response/ResponseRequestTokens.js +1 -1
  111. package/src/response/ResponseTransferTokens.js +1 -1
  112. package/src/response/ResponseWalletBundle.js +3 -3
  113. package/src/response/ResponseWalletList.js +5 -5
  114. package/src/subscribe/ActiveSessionSubscribe.js +1 -1
  115. package/src/subscribe/ActiveWalletSubscribe.js +1 -1
  116. package/src/subscribe/CreateMoleculeSubscribe.js +1 -1
  117. package/src/subscribe/Subscribe.js +1 -1
  118. package/src/subscribe/WalletStatusSubscribe.js +1 -1
  119. package/src/types/index.js +2 -2
  120. package/src/versions/Version4.js +1 -1
  121. package/src/versions/index.js +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.cjs.js","sources":["../src/libraries/Hex.js","../src/libraries/strings.js","../src/Meta.js","../src/libraries/array.js","../src/PolicyMeta.js","../src/AtomMeta.js","../src/exception/BaseException.js","../src/exception/AtomsMissingException.js","../src/versions/HashAtom.js","../src/versions/Version4.js","../src/versions/index.js","../src/Atom.js","../src/libraries/crypto.js","../src/TokenUnit.js","../src/exception/WalletCredentialException.js","../node_modules/@noble/hashes/_u64.js","../node_modules/@noble/hashes/utils.js","../node_modules/@noble/hashes/sha3.js","../node_modules/@noble/curves/abstract/fft.js","../node_modules/@noble/post-quantum/utils.js","../node_modules/@noble/post-quantum/_crystals.js","../node_modules/@noble/post-quantum/ml-kem.js","../src/Wallet.js","../src/exception/AtomIndexException.js","../src/exception/MolecularHashMismatchException.js","../src/exception/MolecularHashMissingException.js","../src/exception/PolicyInvalidException.js","../src/exception/SignatureMalformedException.js","../src/exception/SignatureMismatchException.js","../src/exception/TransferBalanceException.js","../src/exception/TransferMalformedException.js","../src/exception/TransferMismatchedException.js","../src/exception/TransferRemainderException.js","../src/exception/TransferToSelfException.js","../src/exception/TransferUnbalancedException.js","../src/exception/MetaMissingException.js","../src/exception/WrongTokenTypeException.js","../src/exception/BatchIdException.js","../src/instance/Rules/Meta.js","../src/instance/Rules/exception/RuleArgumentException.js","../src/exception/CodeException.js","../src/instance/Rules/Callback.js","../src/instance/Rules/Condition.js","../src/instance/Rules/Rule.js","../src/libraries/Dot.js","../src/libraries/CheckMolecule.js","../src/exception/BalanceInsufficientException.js","../src/exception/NegativeAmountException.js","../src/Molecule.js","../src/libraries/Decimal.js","../src/AuthToken.js","../src/exception/InvalidResponseException.js","../src/exception/UnauthenticatedException.js","../src/response/Response.js","../src/query/Query.js","../src/response/ResponseContinuId.js","../src/query/QueryContinuId.js","../src/response/ResponseWalletBundle.js","../src/query/QueryWalletBundle.js","../src/response/ResponseWalletList.js","../src/query/QueryWalletList.js","../src/response/ResponseBalance.js","../src/query/QueryBalance.js","../src/response/ResponseMetaType.js","../src/query/QueryMetaType.js","../src/query/QueryBatch.js","../src/query/QueryBatchHistory.js","../src/response/ResponseProposeMolecule.js","../src/mutation/Mutation.js","../src/mutation/MutationProposeMolecule.js","../src/response/ResponseRequestAuthorization.js","../src/mutation/MutationRequestAuthorization.js","../src/response/ResponseCreateToken.js","../src/mutation/MutationCreateToken.js","../src/response/ResponseRequestTokens.js","../src/mutation/MutationRequestTokens.js","../src/response/ResponseTransferTokens.js","../src/mutation/MutationTransferTokens.js","../src/response/ResponseCreateIdentifier.js","../src/mutation/MutationCreateIdentifier.js","../src/response/ResponseClaimShadowWallet.js","../src/mutation/MutationClaimShadowWallet.js","../src/response/ResponseCreateMeta.js","../src/mutation/MutationCreateMeta.js","../src/response/ResponsePeering.js","../src/mutation/MutationPeering.js","../src/response/ResponseAppendRequest.js","../src/mutation/MutationAppendRequest.js","../src/response/ResponseCreateWallet.js","../src/mutation/MutationCreateWallet.js","../src/response/ResponseRequestAuthorizationGuest.js","../src/mutation/MutationRequestAuthorizationGuest.js","../src/exception/WalletShadowException.js","../src/exception/StackableUnitDecimalsException.js","../src/exception/StackableUnitAmountException.js","../src/subscribe/Subscribe.js","../src/subscribe/CreateMoleculeSubscribe.js","../src/subscribe/WalletStatusSubscribe.js","../src/subscribe/ActiveWalletSubscribe.js","../src/subscribe/ActiveSessionSubscribe.js","../src/response/ResponseActiveSession.js","../src/mutation/MutationActiveSession.js","../src/response/ResponseQueryActiveSession.js","../src/query/QueryActiveSession.js","../src/response/ResponseQueryUserActivity.js","../src/query/QueryUserActivity.js","../src/query/QueryToken.js","../src/exception/AuthorizationRejectedException.js","../src/response/ResponseAtom.js","../src/query/QueryAtom.js","../src/response/ResponsePolicy.js","../src/query/QueryPolicy.js","../src/response/ResponseMetaTypeViaAtom.js","../src/query/QueryMetaTypeViaAtom.js","../src/response/ResponseMetaTypeViaMolecule.js","../src/query/QueryMetaTypeViaMolecule.js","../src/response/ResponseCreateRule.js","../src/mutation/MutationCreateRule.js","../src/mutation/MutationDepositBufferToken.js","../src/mutation/MutationWithdrawBufferToken.js","../node_modules/@thumbmarkjs/thumbmarkjs/dist/thumbmark.esm.js","../src/libraries/urql/UrqlClientWrapper.js","../src/KnishIOClient.js"],"sourcesContent":["/**\n * Create Uint8Array buffers from hexadecimal strings, and vice versa.\n */\n\nif (typeof self === 'undefined') {\n global.self = global\n}\n\nexport default class Hex {\n /**\n * Converts the given buffer to a string containing its hexadecimal representation.\n *\n * arr a Uint8Array buffer to convert.\n *\n * options an optional object with the following members:\n * grouping this number of hex bytes are grouped together with spaces between groups. 0 means no grouping is applied. 0 if unspecified.\n * rowlength the number of groups which make up a row. When 0, no splitting into rows occurs. 0 if unspecified.\n * uppercase if true, the output will be in uppercase. true by default.\n *\n * return a hexadecimal string representing the buffer.\n *\n * @param {array|ArrayBuffer|Uint8Array} arr\n * @param {object} options\n * @return {string}\n */\n static toHex (arr, options) {\n /**\n * @param {number} val\n * @param {boolean} uppercase\n * @return {*}\n */\n const numberToHex = (val, uppercase) => {\n const set = uppercase\n ? ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']\n : ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']\n\n return set[Math.floor(val / 16)] + set[val % 16]\n }\n const opts = Object.assign(\n {\n grouping: 0,\n rowlength: 0,\n uppercase: false\n },\n options || {}\n )\n\n let str = ''\n let group = 0\n let column = 0\n\n for (let i = 0; i < arr.length; ++i) {\n str += numberToHex(arr[i], opts.uppercase)\n\n if (i === arr.length - 1) {\n break\n }\n\n if (opts.grouping > 0 && ++group === opts.grouping) {\n group = 0\n\n if (opts.rowlength > 0 && ++column === opts.rowlength) {\n column = 0\n str += '\\n'\n } else {\n str += ' '\n }\n }\n }\n\n return str\n }\n\n /**\n * Takes a string containing hexadecimal and returns the equivalent as a Uint8Array buffer.\n *\n * str The string to convert. Whitespace is ignored. If an odd number of characters are specified,\n * it will act as if preceeded with a leading 0; that is, \"FFF\" is equivalent to \"0FFF\".\n *\n * return a Uint8Array array.\n *\n * @param {string} str\n * @return {Uint8Array}\n */\n static toUint8Array (str) {\n let target = str.toLowerCase().replace(/\\s/g, '')\n\n if (target.length % 2 === 1) {\n target = `0${ target }`\n }\n\n const buffer = new Uint8Array(Math.floor(target.length / 2))\n let curr = -1\n\n for (let i = 0; i < target.length; ++i) {\n const c = target[i]\n const val = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'].indexOf(c)\n\n if (val === -1) {\n throw Error('unexpected character')\n }\n\n if (curr === -1) {\n curr = 16 * val\n } else {\n buffer[Math.floor(i / 2)] = curr + val\n curr = -1\n }\n }\n\n return buffer\n }\n}\n","import Hex from './Hex.js'\n\nif (!String.prototype.trim) {\n String.prototype.trim = function () {\n return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '')\n }\n}\n\nif (!String.prototype.toCamelCase) {\n String.prototype.toCamelCase = function () {\n return this.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (m, chr) => chr.toUpperCase())\n }\n}\n\nif (!String.prototype.toSnakeCase) {\n String.prototype.toSnakeCase = function () {\n return this.replace(/[A-Z]/g, letter => `_${ letter.toLowerCase() }`)\n }\n}\n\n/**\n * Chunks a string into array segments of equal size\n *\n * @param str\n * @param size\n * @return {any[]}\n */\nexport function chunkSubstr (str, size) {\n const numChunks = Math.ceil(str.length / size)\n const chunks = []\n\n for (let chunkIndex = 0, o = 0; chunkIndex < numChunks; ++chunkIndex, o += size) {\n chunks[chunkIndex] = str.substr(o, size)\n }\n\n return chunks\n}\n\n/**\n * Generates a cryptographically-secure pseudo-random string of the given length out of the given alphabet\n *\n * @param length\n * @param alphabet\n * @return {string}\n */\nexport function randomString (length = 256, alphabet = 'abcdef0123456789') {\n let array = new Uint8Array(length)\n\n array = crypto.getRandomValues(array)\n\n array = array.map(x => alphabet.charCodeAt(x % alphabet.length))\n\n return String.fromCharCode.apply(null, array)\n}\n\n/**\n * Convert charset between bases and alphabets\n *\n * @param src\n * @param {int} fromBase\n * @param {int} toBase\n * @param { string} srcSymbolTable\n * @param {string} destSymbolTable\n * @return {boolean|string|number}\n */\nexport function charsetBaseConvert (src, fromBase, toBase, srcSymbolTable, destSymbolTable) {\n const baseSymbols = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~`!@#$%^&*()-_=+[{]}\\\\|;:\\'\",<.>/?¿¡'\n srcSymbolTable = srcSymbolTable || baseSymbols\n destSymbolTable = destSymbolTable || srcSymbolTable\n\n if (fromBase > srcSymbolTable.length || toBase > destSymbolTable.length) {\n console.warn('Strings::charsetBaseConvert() - Can\\'t convert', src, 'to base', toBase, 'greater than symbol table length. src-table:', srcSymbolTable.length, 'dest-table:', destSymbolTable.length)\n return false\n }\n\n // Convert from source base to BigInt in base 10\n let val = BigInt(0)\n for (let charIndex = 0; charIndex < src.length; charIndex++) {\n val = val * BigInt(fromBase) + BigInt(srcSymbolTable.indexOf(src.charAt(charIndex)))\n }\n\n // Convert from BigInt in base 10 to destination base\n let res = ''\n while (val > 0) {\n const r = val % BigInt(toBase)\n res = destSymbolTable.charAt(Number(r)) + res\n val /= BigInt(toBase)\n }\n\n // If the result is empty, it means the source was 0\n return res || '0'\n}\n\n/**\n * Converts a buffer into a hexadecimal string\n *\n * @param byteArray\n * @return {string}\n */\nexport function bufferToHexString (byteArray) {\n return Hex.toHex(byteArray, {})\n}\n\n/**\n * Converts a hexadecimal string into a buffer\n *\n * @param hexString\n * @return {Uint8Array}\n */\nexport function hexStringToBuffer (hexString) {\n return Hex.toUint8Array(hexString)\n}\n\n/**\n * Compresses a given string for web sharing\n *\n * @param string\n * @return {string}\n */\nexport function hexToBase64 (string) {\n const bytes = hexStringToBuffer(string)\n return btoa(String.fromCharCode.apply(null, bytes))\n}\n\n/**\n * Decompresses a compressed string\n *\n * @param {string} string\n * @return {string}\n */\nexport function base64ToHex (string) {\n const bytes = new Uint8Array(atob(string).split('').map(char => char.charCodeAt(0)))\n return bufferToHexString(bytes)\n}\n\n/**\n * @param {string} str\n * @return {boolean}\n */\nexport function isHex (str) {\n return /^[A-F0-9]+$/i.test(str)\n}\n\n/**\n * @param {string} str\n * @return {boolean}\n */\nexport function isNumeric (str) {\n return (typeof (str) === 'number' || (typeof (str) === 'string' && str.trim() !== '')) && !isNaN(str)\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n */\n\n/**\n * Meta class to represent metadata conveyed by Atoms\n */\nexport default class Meta {\n /**\n * Normalizes the meta array into the standard {key: ..., value: ...} format\n *\n * @param {array|object} meta\n * @return {array}\n */\n static normalizeMeta (meta) {\n // Ensuring that only object-based meta gets normalized\n if (Array.isArray(meta)) {\n return meta.map(entry => ({\n key: entry.key,\n value: entry.value == null ? null : String(entry.value)\n }))\n }\n\n // Converting object-based meta into array-based notation\n const target = []\n for (const property in meta) {\n if (Object.prototype.hasOwnProperty.call(meta, property)) {\n const raw = meta[property]\n target.push({ key: property, value: raw == null ? null : String(raw) })\n }\n }\n\n return target\n }\n\n /**\n * Condenses metadata array into object-based key: value notation\n *\n * @param {array|object} meta\n * @return {object}\n */\n static aggregateMeta (meta) {\n let aggregate = {}\n\n // Ensuring that only array-based meta gets aggregated\n if (Array.isArray(meta)) {\n for (const metaEntry of meta) {\n aggregate[metaEntry.key] = metaEntry.value\n }\n } else {\n aggregate = meta\n }\n\n return aggregate\n }\n}\n","/**\n * Split an array into chunks\n *\n * @param {array} arr\n * @param {number} size\n * @return {array}\n */\nexport function chunkArray (arr, size) {\n if (!arr.length) {\n return []\n }\n\n return [arr.slice(0, size)].concat(chunkArray(arr.slice(size), size))\n}\n\nexport function deepCloning (\n o // The only argument passed by user: object to clone\n , h // Cache (organized as array: [key,value,key,value,...])\n) {\n let i\n let r\n let x // Property indexer, result, temporary variable\n\n const t = [Array, Date, Number, String, Boolean] // Types to treat in a special way\n\n const s = Object.prototype.toString // Shortcut to Object.prototype.toString\n h = h || [] // If cache is not created yet, create it!\n // Search cache for our object\n for (i = 0; i < h.length; i += 2) {\n if (o === h[i]) {\n r = h[i + 1]\n }\n }\n // Clone o if it is uncached object and not null\n if (!r && o && typeof o === 'object') {\n r = {} // Default result template: plain hash\n // To handle multiframe environment, search for type by\n for (i = 0; i < t.length; i++) {\n // comparing Object.prototype.toString's of our object\n // and new object x created with the constructor t[i]\n // Notice that it will create new Date(o), new String(o)\n // which is good and new Array(o) which is bad\n if (s.call(o) === s.call(x = new t[i](o))) {\n r = i ? x : []\n }\n } // If i==0, t==Array. We need to recreate it. Else use x\n h.push(o, r) // Add object to cache before (!) making recursive call\n // Just copy properties recursively\n for (i in o) {\n // As o might have key 'hasOwnProperty', use something\n if (h.hasOwnProperty.call(o, i)) {\n r[i] = deepCloning(o[i], h)\n }\n } // we defined right instead\n }\n return r || o // Return r if it was found in cache or built in if(){}\n}\n\n/**\n * @param arrays\n * @returns {*[]}\n */\nexport function diff (...arrays) {\n return [].concat(...arrays.map((arr, i) => {\n const others = arrays.slice(0)\n\n others.splice(i, 1)\n\n const unique = [...new Set([].concat(...others))]\n\n return arr.filter(item => !unique.includes(item))\n }))\n}\n\n/**\n *\n * @param arrays\n * @return {*[]}\n */\nexport function intersect (...arrays) {\n return arrays.reduce((first, second) => first.filter(item => second.includes(item)))\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport { diff } from './libraries/array.js'\n\n/**\n *\n */\nexport default class PolicyMeta {\n /**\n *\n * @param policy\n * @param metaKeys\n */\n constructor (policy = {}, metaKeys = {}) {\n this.policy = PolicyMeta.normalizePolicy(policy)\n this.fillDefault(metaKeys)\n }\n\n /**\n *\n * @param policy\n * @returns {{}}\n */\n static normalizePolicy (policy = {}) {\n const policyMeta = {}\n for (const [policyKey, value] of Object.entries(policy)) {\n if (value !== null && ['read', 'write'].includes(policyKey)) {\n policyMeta[policyKey] = {}\n for (const [key, content] of Object.entries(value)) {\n policyMeta[policyKey][key] = content\n }\n }\n }\n return policyMeta\n }\n\n /**\n *\n */\n fillDefault (metaKeys = {}) {\n const readPolicy = Array.from(this.policy).filter(item => item.action === 'read')\n const writePolicy = Array.from(this.policy).filter(item => item.action === 'write')\n\n for (const [type, value] of Object.entries({\n read: readPolicy,\n write: writePolicy\n })) {\n const policyKey = value.map(item => item.key)\n\n if (!this.policy[type]) {\n this.policy[type] = {}\n }\n\n for (const key of diff(metaKeys, policyKey)) {\n if (!this.policy[type][key]) {\n this.policy[type][key] = (type === 'write' && !['characters', 'pubkey'].includes(key)) ? ['self'] : ['all']\n }\n }\n }\n }\n\n /**\n *\n * @returns {{}|*}\n */\n get () {\n return this.policy\n }\n\n /**\n *\n * @returns {string}\n */\n toJson () {\n return JSON.stringify(this.get())\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport PolicyMeta from './PolicyMeta.js'\nimport Meta from './Meta.js'\n\nconst USE_META_CONTEXT = false\nconst DEFAULT_META_CONTEXT = 'https://www.schema.org'\n\n/**\n *\n */\nexport default class AtomMeta {\n /**\n *\n * @param {object|array} meta\n */\n constructor (meta = []) {\n this.meta = Meta.normalizeMeta(meta)\n }\n\n /**\n *\n * @param {object|array} meta\n * @returns {AtomMeta}\n */\n merge (meta) {\n this.meta = Array.from(new Set([...this.meta, ...Meta.normalizeMeta(meta)]))\n return this\n }\n\n /**\n *\n * @param context\n * @returns {AtomMeta}\n */\n addContext (context = null) {\n // Add context key if it is enabled\n if (USE_META_CONTEXT) {\n this.merge({ context: context || DEFAULT_META_CONTEXT })\n }\n\n return this\n }\n\n /**\n *\n * @param {Wallet} wallet\n * @returns {AtomMeta}\n */\n setAtomWallet (wallet) {\n const walletMeta = {}\n\n // Add token units meta key\n if (wallet.tokenUnits && wallet.tokenUnits.length) {\n walletMeta.tokenUnits = JSON.stringify(wallet.getTokenUnitsData())\n }\n // Add trade rates meta key\n if (wallet.tradeRates && wallet.tradeRates.length) {\n walletMeta.tradeRates = JSON.stringify(wallet.tradeRates)\n }\n\n // Merge all wallet's metas (if any)\n if (Object.keys(walletMeta).length > 0) {\n this.merge(walletMeta)\n }\n return this\n }\n\n /**\n * Set full NEW wallet metadata\n * Used for shadow wallet claim & wallet creation & token creation\n *\n * @param {Wallet} wallet\n * @returns {AtomMeta}\n */\n setMetaWallet (wallet) {\n this.merge({\n walletTokenSlug: wallet.token,\n walletBundleHash: wallet.bundle,\n walletAddress: wallet.address,\n walletPosition: wallet.position,\n walletBatchId: wallet.batchId,\n walletPubkey: wallet.pubkey,\n walletCharacters: wallet.characters\n })\n return this\n }\n\n /**\n *\n * @param shadowWalletClaim\n * @returns {AtomMeta}\n */\n setShadowWalletClaim (shadowWalletClaim) {\n this.merge({ shadowWalletClaim: shadowWalletClaim * 1 })\n return this\n }\n\n /**\n *\n * @param {Wallet} signingWallet\n * @returns {AtomMeta}\n */\n setSigningWallet (signingWallet) {\n this.merge({\n signingWallet: JSON.stringify({\n tokenSlug: signingWallet.token,\n bundleHash: signingWallet.bundle,\n address: signingWallet.address,\n position: signingWallet.position,\n pubkey: signingWallet.pubkey,\n characters: signingWallet.characters\n })\n })\n return this\n }\n\n /**\n *\n * @param policy\n * @todo move logic to the separated class\n * @returns {AtomMeta}\n */\n addPolicy (policy) {\n // Policy meta initialization\n const policyMeta = new PolicyMeta(policy, Object.keys(this.meta))\n\n this.merge({\n policy: policyMeta.toJson()\n })\n\n return this\n }\n\n /**\n *\n * @returns {array}\n */\n get () {\n return this.meta\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n/**\n * Base exception class\n */\nexport default class BaseException extends TypeError {\n /**\n * @param {string|null} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = null, fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n\n if (message === null) {\n throw new this(`Unknown ${ this.constructor.name }`)\n }\n\n this.name = 'BaseException'\n }\n\n /**\n * @return {string}\n */\n toString () {\n return `${ this.name }: ${ this.message }.\\nStack:\\n${ this.stack }`\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Empty molecules are not allowed\n */\nexport default class AtomsMissingException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'The molecule does not contain atoms', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'AtomsMissingException'\n }\n}\n","export default class HashAtom {\n /**\n *\n * @param {Atom} atom\n */\n static create (atom) {\n const parameters = {}\n\n for (const key of Object.keys(atom)) {\n if (Object.prototype.hasOwnProperty.call(atom, key)) {\n parameters[key] = atom[key]\n }\n }\n\n return new this(parameters)\n }\n\n /**\n *\n * @param {Object|Array} object\n * @returns {Object|Array[]}\n */\n static structure (object) {\n switch (Object.prototype.toString.call(object)) {\n case '[object Array]': {\n const result = []\n for (const key in object) {\n result.push(HashAtom.isStructure(object[key]) ? HashAtom.structure(object[key]) : object[key])\n }\n\n return result\n }\n\n case '[object Object]': {\n const result = []\n const keys = Object.keys(object).sort((first, second) => {\n if (first === second) {\n return 0\n }\n return (first < second) ? -1 : 1\n })\n\n for (const key of keys) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n const item = {}\n item[key] = HashAtom.isStructure(object[key]) ? HashAtom.structure(object[key]) : object[key]\n result.push(item)\n }\n }\n\n if (result.length > 0) {\n return result\n }\n\n break\n }\n }\n\n return object\n }\n\n /**\n *\n * @param {*} structure\n * @returns {boolean}\n */\n static isStructure (structure) {\n return ['[object Object]', '[object Array]'].includes(Object.prototype.toString.call(structure))\n }\n\n /**\n *\n * @returns {Object[]}\n */\n view () {\n return HashAtom.structure(this)\n }\n}\n","import HashAtom from './HashAtom.js'\n\nexport default class Version4 extends HashAtom {\n constructor ({\n position = null,\n walletAddress = null,\n isotope = null,\n token = null,\n value = null,\n batchId = null,\n metaType = null,\n metaId = null,\n meta = null,\n index = null,\n createdAt = null,\n version = null\n }) {\n super()\n this.position = position\n this.walletAddress = walletAddress\n this.isotope = isotope\n this.token = token\n this.value = value\n this.batchId = batchId\n\n this.metaType = metaType\n this.metaId = metaId\n this.meta = meta\n\n this.index = index\n this.createdAt = createdAt\n this.version = version\n }\n}\n","import Version4 from './Version4.js'\n\nexport default {\n 4: Version4\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport JsSHA from 'jssha'\nimport { charsetBaseConvert } from './libraries/strings.js'\nimport Meta from './Meta.js'\nimport AtomMeta from './AtomMeta.js'\nimport AtomsMissingException from './exception/AtomsMissingException.js'\nimport versions from './versions/index.js'\n\n/**\n * Atom class used to form microtransactions within a Molecule\n */\nexport default class Atom {\n /**\n * Class constructor\n *\n * @param {string|null} position\n * @param {string|null} walletAddress\n * @param {string|null} isotope\n * @param {string|null} token\n * @param {string|number|null} value\n * @param {string|null} batchId\n * @param {string|null} metaType\n * @param {string|null} metaId\n * @param {array|object|null} meta\n * @param {string|null} otsFragment\n * @param {number|null} index\n * @param {string|null} version\n */\n constructor ({\n position = null,\n walletAddress = null,\n isotope = null,\n token = null,\n value = null,\n batchId = null,\n metaType = null,\n metaId = null,\n meta = null,\n otsFragment = null,\n index = null,\n version = null\n }) {\n this.position = position\n this.walletAddress = walletAddress\n this.isotope = isotope\n this.token = token\n this.value = value !== null ? String(value) : null\n this.batchId = batchId\n\n this.metaType = metaType\n this.metaId = metaId\n this.meta = meta ? Meta.normalizeMeta(meta) : []\n\n this.index = index\n this.otsFragment = otsFragment\n this.createdAt = String(+new Date())\n if (version !== null && Object.prototype.hasOwnProperty.call(versions, version)) {\n this.version = String(version)\n }\n }\n\n /**\n *\n * @returns {string[]}\n */\n static getHashableProps () {\n return [\n 'position',\n 'walletAddress',\n 'isotope',\n 'token',\n 'value',\n 'batchId',\n 'metaType',\n 'metaId',\n 'meta',\n 'createdAt'\n ]\n }\n\n /**\n *\n * @returns {string[]}\n */\n static getUnclaimedProps () {\n return [\n 'otsFragment'\n ]\n }\n\n /**\n *\n * @param {string} isotope\n * @param {Wallet|null} wallet\n * @param {int|null} value\n * @param {string|null} metaType\n * @param {string|null} metaId\n * @param {AtomMeta|array|object|null} meta\n * @param {string|null} batchId\n * @returns {Atom}\n */\n static create ({\n isotope,\n wallet = null,\n value = null,\n metaType = null,\n metaId = null,\n meta = null,\n batchId = null\n }) {\n // If meta object is not passed - create it\n if (!meta) {\n meta = new AtomMeta()\n }\n\n // If meta object is not an instance of AtomMeta - create it from meta\n if (!(meta instanceof AtomMeta)) {\n meta = new AtomMeta(meta)\n }\n\n // If wallet has been passed => add related metas\n if (wallet) {\n // Add wallet's meta\n meta.setAtomWallet(wallet)\n\n // If batch ID does not passed: set it from the wallet\n if (!batchId) {\n batchId = wallet.batchId\n }\n }\n\n // Create the final atom's object\n // walletAddress is null for atoms without a pre-existing wallet (e.g., recipient V-atoms).\n // toJSON() serializes null as '' for GraphQL compatibility; hash computation treats both identically.\n return new Atom({\n position: wallet ? wallet.position : null,\n walletAddress: wallet ? wallet.address : null,\n isotope,\n token: wallet ? wallet.token : null,\n value,\n batchId,\n metaType,\n metaId,\n meta: meta.get()\n })\n }\n\n /**\n * Converts a compliant JSON string into an Atom class instance\n *\n * @param {string} json\n * @return {object}\n */\n static jsonToObject (json) {\n const target = Object.assign(new Atom({}), JSON.parse(json))\n const properties = Object.keys(new Atom({}))\n\n for (const property in target) {\n if (Object.prototype.hasOwnProperty.call(target, property) && !properties.includes(property)) {\n delete target[property]\n }\n }\n\n return target\n }\n\n /**\n * Returns JSON-ready object for cross-SDK compatibility (2025 JS best practices)\n * \n * Provides clean serialization of atomic operations with optional OTS fragments.\n * Follows 2025 JavaScript best practices with proper type safety and validation.\n *\n * @param {Object} options - Serialization options\n * @param {boolean} options.includeOtsFragments - Include OTS signature fragments (default: true)\n * @param {boolean} options.validateFields - Validate required fields (default: false)\n * @return {Object} JSON-serializable object\n * @throws {Error} If atom is in invalid state for serialization\n */\n toJSON (options = {}) {\n const {\n includeOtsFragments = true,\n validateFields = false\n } = options;\n\n try {\n // Validate required fields if requested\n if (validateFields) {\n const requiredFields = ['position', 'walletAddress', 'isotope', 'token'];\n for (const field of requiredFields) {\n if (!this[field]) {\n throw new Error(`Required field '${field}' is missing or empty`);\n }\n }\n }\n\n // Core atom properties (always included)\n // Coerce null position/walletAddress/token to empty string for GraphQL compatibility.\n // The molecular hash computation (getHashableValues) already treats null as '' (line 448),\n // so this coercion does NOT change the hash. Required because the Rust validator's\n // GraphQL schema uses String! (non-null) with #[graphql(default)] for these fields,\n // which accepts omitted values but rejects explicit null.\n const serialized = {\n position: this.position ?? '',\n walletAddress: this.walletAddress ?? '',\n isotope: this.isotope,\n token: this.token ?? '',\n value: this.value,\n batchId: this.batchId,\n metaType: this.metaType,\n metaId: this.metaId,\n meta: this.meta || [],\n index: this.index,\n createdAt: this.createdAt,\n version: this.version\n };\n\n // Optional OTS fragments (can be large, so optional)\n if (includeOtsFragments && this.otsFragment) {\n serialized.otsFragment = this.otsFragment;\n }\n\n return serialized;\n\n } catch (error) {\n throw new Error(`Atom serialization failed: ${error.message}`);\n }\n }\n\n /**\n * Creates an Atom instance from JSON data (2025 JS best practices)\n * \n * Handles cross-SDK atom deserialization with robust error handling.\n * Essential for reconstructing atoms from other SDK implementations.\n *\n * @param {string|Object} json - JSON string or object to deserialize\n * @param {Object} options - Deserialization options\n * @param {boolean} options.validateStructure - Validate required fields (default: true)\n * @param {boolean} options.strictMode - Strict validation mode (default: false)\n * @return {Atom} Reconstructed atom instance\n * @throws {Error} If JSON is invalid or required fields are missing\n */\n static fromJSON (json, options = {}) {\n const {\n validateStructure = true,\n strictMode = false\n } = options;\n\n try {\n // Parse JSON safely\n const data = typeof json === 'string' ? JSON.parse(json) : json;\n\n // Validate required fields in strict mode\n if (strictMode || validateStructure) {\n const requiredFields = ['position', 'walletAddress', 'isotope', 'token'];\n for (const field of requiredFields) {\n if (!data[field]) {\n throw new Error(`Required field '${field}' is missing or empty`);\n }\n }\n }\n\n // Create atom instance with required fields\n const atom = new Atom({\n position: data.position,\n walletAddress: data.walletAddress,\n isotope: data.isotope,\n token: data.token,\n value: data.value,\n batchId: data.batchId,\n metaType: data.metaType,\n metaId: data.metaId,\n meta: data.meta,\n index: data.index,\n version: data.version\n });\n\n // Set additional properties that may not be in constructor\n if (data.otsFragment) {\n atom.otsFragment = data.otsFragment;\n }\n if (data.createdAt) {\n atom.createdAt = data.createdAt;\n }\n\n return atom;\n\n } catch (error) {\n throw new Error(`Atom deserialization failed: ${error.message}`);\n }\n }\n\n /**\n * Produces a hash of the atoms inside a molecule.\n * Used to generate the molecularHash field for Molecules.\n *\n * @param {array} atoms\n * @param {string} output\n * @return {number[]|*}\n */\n static hashAtoms ({\n atoms,\n output = 'base17'\n }) {\n const molecularSponge = new JsSHA('SHAKE256', 'TEXT')\n const atomList = Atom.sortAtoms(atoms)\n\n if (atomList.length === 0) {\n throw new AtomsMissingException()\n }\n\n atomList.map(atom => {\n if (!(atom instanceof Atom)) {\n throw new AtomsMissingException()\n }\n return atom\n })\n\n // Hashing each atom in the molecule to produce a molecular hash\n if (atomList.every(atom => atom.version && Object.prototype.hasOwnProperty.call(versions, atom.version))) {\n molecularSponge.update(JSON.stringify(atomList.map(atom => versions[atom.version].create(atom).view())))\n } else {\n const numberOfAtoms = String(atoms.length)\n let hashableValues = []\n\n for (const atom of atomList) {\n // Add number of atoms (???)\n hashableValues.push(numberOfAtoms)\n\n // Add atom's properties\n hashableValues = hashableValues.concat(atom.getHashableValues())\n }\n\n // Add hash values to the sponge\n for (const hashableValue of hashableValues) {\n molecularSponge.update(hashableValue)\n }\n }\n\n // Return the hash in the requested format\n switch (output) {\n case 'hex': {\n return molecularSponge.getHash('HEX', { outputLen: 256 })\n }\n case 'array': {\n return molecularSponge.getHash('ARRAYBUFFER', { outputLen: 256 })\n }\n default: {\n return charsetBaseConvert(molecularSponge.getHash('HEX', { outputLen: 256 }), 16, 17, '0123456789abcdef', '0123456789abcdefg').padStart(64, '0')\n }\n }\n }\n\n static jsonSerialization (key, value) {\n if (!Atom.getUnclaimedProps().includes(key)) {\n return value\n }\n\n return undefined\n }\n\n /**\n * Sort the atoms in a Molecule\n *\n * @param {array} atoms\n * @return {array}\n */\n static sortAtoms (atoms) {\n const atomList = [...atoms]\n\n // Sort based on atomic index\n atomList.sort((first, second) => {\n return first.index < second.index ? -1 : 1\n })\n\n return atomList\n }\n\n /**\n * Get aggregated meta from stored normalized ones\n */\n aggregatedMeta () {\n return Meta.aggregateMeta(this.meta)\n }\n\n /**\n *\n * @returns {*[]}\n */\n getHashableValues () {\n const hashableValues = []\n for (const property of Atom.getHashableProps()) {\n const value = this[property]\n\n // All nullable values are not hashed (only custom keys)\n if (value === null && !['position', 'walletAddress'].includes(property)) {\n continue\n }\n\n // Hashing individual meta keys and values\n if (property === 'meta') {\n for (const meta of value) {\n if (typeof meta.value !== 'undefined' && meta.value !== null) {\n hashableValues.push(String(meta.key))\n hashableValues.push(String(meta.value))\n }\n }\n } else {\n // Default value\n hashableValues.push(value === null ? '' : String(value))\n }\n }\n return hashableValues\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n */\nimport { randomString } from './strings.js'\nimport JsSHA from 'jssha'\n\n/**\n * Generates a secret based on an optional seed\n *\n * @param seed\n * @param length\n * @return {string|*}\n */\nexport function generateSecret (seed = null, length = 2048) {\n // console.info(`Crypto::generateSecret() - Computing new secret${ seed ? ' from existing seed' : '' }...`)\n if (seed) {\n const sponge = new JsSHA('SHAKE256', 'TEXT')\n sponge.update(seed)\n // Fix: outputLen is in BITS, so for 'length' hex chars (length/2 bytes), we need length*2 bits\n return sponge.getHash('HEX', { outputLen: length * 2 })\n } else {\n return randomString(length)\n }\n}\n\n/**\n * Hashes the user secret to produce a bundle hash\n *\n * @param {string} secret\n * @param {string|null} source\n * @return {string}\n */\nexport function generateBundleHash (secret, source = null) {\n const sponge = new JsSHA('SHAKE256', 'TEXT')\n sponge.update(secret)\n return sponge.getHash('HEX', { outputLen: 64 * 4 }) // 64 bytes = 512 bits\n}\n\n/**\n * SHAKE256 hash function\n *\n * @param {string} input - The input string to hash\n * @param {number} outputLength - The desired output length in bits\n * @return {string} The hex-encoded hash\n */\nexport function shake256 (input, outputLength) {\n const sponge = new JsSHA('SHAKE256', 'TEXT')\n sponge.update(input)\n return sponge.getHash('HEX', { outputLen: outputLength })\n}\n\n/**\n * Returns a new batch ID for stackable tokens\n *\n * @param {string|null} molecularHash\n * @param {number|null} index\n *\n * @return {string}\n */\nexport function generateBatchId ({\n molecularHash = null,\n index = null\n}) {\n if (molecularHash !== null && index !== null) {\n return generateBundleHash(String(molecularHash) + String(index), 'generateBatchId')\n }\n\n return randomString(64)\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\n/**\n * AuthToken class\n */\nexport default class TokenUnit {\n /**\n *\n * @param id\n * @param name\n * @param metas\n */\n constructor (id, name, metas) {\n this.id = id\n this.name = name\n this.metas = metas || {}\n }\n\n /**\n *\n * @param data\n * @returns {*}\n */\n static createFromGraphQL (data) {\n let metas = data.metas || {}\n if (metas.length) {\n metas = JSON.parse(metas)\n if (!metas) { // set an empty object instead of an array\n metas = {}\n }\n }\n return new TokenUnit(\n data.id,\n data.name,\n metas\n )\n }\n\n /**\n *\n * @param data\n * @returns {TokenUnit}\n */\n static createFromDB (data) {\n return new TokenUnit(\n data[0],\n data[1],\n data.length > 2 ? data[2] : {}\n )\n }\n\n /**\n *\n * @returns {*|null}\n */\n getFragmentZone () {\n return this.metas.fragmentZone || null\n }\n\n /**\n *\n * @returns {*|null}\n */\n getFusedTokenUnits () {\n return this.metas.fusedTokenUnits || null\n }\n\n /**\n * @return array\n */\n toData () {\n return [this.id, this.name, this.metas]\n }\n\n /**\n *\n * @returns {{metas: string, name: *, id: *}}\n */\n toGraphQLResponse () {\n return {\n id: this.id,\n name: this.name,\n metas: JSON.stringify(this.metas)\n }\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when failing to retrieve shadow wallets\n */\nexport default class WalletCredentialException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Attempting to create a wallet with no credentials (secret or bundle hash)', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'WalletCredentialException'\n }\n}\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n, title = '') {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >0, got ${n}`);\n }\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(value, length, title = '') {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data, errorTitle = '') {\n if (typeof data === 'string')\n return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/** Merges default options and passed options. */\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher(hashCons, info = {}) {\n const hashC = (msg, opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n const cr = typeof globalThis === 'object' ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix) => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n//# sourceMappingURL=utils.js.map","/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from \"./_u64.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createHasher, oidNist, swap32IfBE, u32 } from \"./utils.js\";\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = []; // no pure annotation: var is always used\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean(B);\n}\n/** Keccak sponge function. */\nexport class Keccak {\n state;\n pos = 0;\n posOut = 0;\n finished = false;\n state32;\n destroyed = false;\n blockLen;\n suffix;\n outputLen;\n enableXOF = false;\n rounds;\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n anumber(outputLen, 'outputLen');\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200))\n throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n clone() {\n return this._cloneInto();\n }\n keccak() {\n swap32IfBE(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists(this);\n abytes(data);\n const { blockLen, state } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n clean(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst genKeccak = (suffix, blockLen, outputLen, info = {}) => createHasher(() => new Keccak(blockLen, suffix, outputLen), info);\n/** SHA3-224 hash function. */\nexport const sha3_224 = /* @__PURE__ */ genKeccak(0x06, 144, 28, \n/* @__PURE__ */ oidNist(0x07));\n/** SHA3-256 hash function. Different from keccak-256. */\nexport const sha3_256 = /* @__PURE__ */ genKeccak(0x06, 136, 32, \n/* @__PURE__ */ oidNist(0x08));\n/** SHA3-384 hash function. */\nexport const sha3_384 = /* @__PURE__ */ genKeccak(0x06, 104, 48, \n/* @__PURE__ */ oidNist(0x09));\n/** SHA3-512 hash function. */\nexport const sha3_512 = /* @__PURE__ */ genKeccak(0x06, 72, 64, \n/* @__PURE__ */ oidNist(0x0a));\n/** keccak-224 hash function. */\nexport const keccak_224 = /* @__PURE__ */ genKeccak(0x01, 144, 28);\n/** keccak-256 hash function. Different from SHA3-256. */\nexport const keccak_256 = /* @__PURE__ */ genKeccak(0x01, 136, 32);\n/** keccak-384 hash function. */\nexport const keccak_384 = /* @__PURE__ */ genKeccak(0x01, 104, 48);\n/** keccak-512 hash function. */\nexport const keccak_512 = /* @__PURE__ */ genKeccak(0x01, 72, 64);\nconst genShake = (suffix, blockLen, outputLen, info = {}) => createHasher((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true), info);\n/** SHAKE128 XOF with 128-bit security. */\nexport const shake128 = \n/* @__PURE__ */\ngenShake(0x1f, 168, 16, /* @__PURE__ */ oidNist(0x0b));\n/** SHAKE256 XOF with 256-bit security. */\nexport const shake256 = \n/* @__PURE__ */\ngenShake(0x1f, 136, 32, /* @__PURE__ */ oidNist(0x0c));\n/** SHAKE128 XOF with 256-bit output (NIST version). */\nexport const shake128_32 = \n/* @__PURE__ */\ngenShake(0x1f, 168, 32, /* @__PURE__ */ oidNist(0x0b));\n/** SHAKE256 XOF with 512-bit output (NIST version). */\nexport const shake256_64 = \n/* @__PURE__ */\ngenShake(0x1f, 136, 64, /* @__PURE__ */ oidNist(0x0c));\n//# sourceMappingURL=sha3.js.map","function checkU32(n) {\n // 0xff_ff_ff_ff\n if (!Number.isSafeInteger(n) || n < 0 || n > 0xffffffff)\n throw new Error('wrong u32 integer:' + n);\n return n;\n}\n/** Checks if integer is in form of `1 << X` */\nexport function isPowerOfTwo(x) {\n checkU32(x);\n return (x & (x - 1)) === 0 && x !== 0;\n}\nexport function nextPowerOfTwo(n) {\n checkU32(n);\n if (n <= 1)\n return 1;\n return (1 << (log2(n - 1) + 1)) >>> 0;\n}\nexport function reverseBits(n, bits) {\n checkU32(n);\n let reversed = 0;\n for (let i = 0; i < bits; i++, n >>>= 1)\n reversed = (reversed << 1) | (n & 1);\n return reversed;\n}\n/** Similar to `bitLen(x)-1` but much faster for small integers, like indices */\nexport function log2(n) {\n checkU32(n);\n return 31 - Math.clz32(n);\n}\n/**\n * Moves lowest bit to highest position, which at first step splits\n * array on even and odd indices, then it applied again to each part,\n * which is core of fft\n */\nexport function bitReversalInplace(values) {\n const n = values.length;\n if (n < 2 || !isPowerOfTwo(n))\n throw new Error('n must be a power of 2 and greater than 1. Got ' + n);\n const bits = log2(n);\n for (let i = 0; i < n; i++) {\n const j = reverseBits(i, bits);\n if (i < j) {\n const tmp = values[i];\n values[i] = values[j];\n values[j] = tmp;\n }\n }\n return values;\n}\nexport function bitReversalPermutation(values) {\n return bitReversalInplace(values.slice());\n}\nconst _1n = /** @__PURE__ */ BigInt(1);\nfunction findGenerator(field) {\n let G = BigInt(2);\n for (; field.eql(field.pow(G, field.ORDER >> _1n), field.ONE); G++)\n ;\n return G;\n}\n/** We limit roots up to 2**31, which is a lot: 2-billion polynomimal should be rare. */\nexport function rootsOfUnity(field, generator) {\n // Factor field.ORDER-1 as oddFactor * 2^powerOfTwo\n let oddFactor = field.ORDER - _1n;\n let powerOfTwo = 0;\n for (; (oddFactor & _1n) !== _1n; powerOfTwo++, oddFactor >>= _1n)\n ;\n // Find non quadratic residue\n let G = generator !== undefined ? BigInt(generator) : findGenerator(field);\n // Powers of generator\n const omegas = new Array(powerOfTwo + 1);\n omegas[powerOfTwo] = field.pow(G, oddFactor);\n for (let i = powerOfTwo; i > 0; i--)\n omegas[i - 1] = field.sqr(omegas[i]);\n // Compute all roots of unity for powers up to maxPower\n const rootsCache = [];\n const checkBits = (bits) => {\n checkU32(bits);\n if (bits > 31 || bits > powerOfTwo)\n throw new Error('rootsOfUnity: wrong bits ' + bits + ' powerOfTwo=' + powerOfTwo);\n return bits;\n };\n const precomputeRoots = (maxPower) => {\n checkBits(maxPower);\n for (let power = maxPower; power >= 0; power--) {\n if (rootsCache[power])\n continue; // Skip if we've already computed roots for this power\n const rootsAtPower = [];\n for (let j = 0, cur = field.ONE; j < 2 ** power; j++, cur = field.mul(cur, omegas[power]))\n rootsAtPower.push(cur);\n rootsCache[power] = rootsAtPower;\n }\n return rootsCache[maxPower];\n };\n const brpCache = new Map();\n const inverseCache = new Map();\n // NOTE: we use bits instead of power, because power = 2**bits,\n // but power is not neccesary isPowerOfTwo(power)!\n return {\n roots: (bits) => {\n const b = checkBits(bits);\n return precomputeRoots(b);\n },\n brp(bits) {\n const b = checkBits(bits);\n if (brpCache.has(b))\n return brpCache.get(b);\n else {\n const res = bitReversalPermutation(this.roots(b));\n brpCache.set(b, res);\n return res;\n }\n },\n inverse(bits) {\n const b = checkBits(bits);\n if (inverseCache.has(b))\n return inverseCache.get(b);\n else {\n const res = field.invertBatch(this.roots(b));\n inverseCache.set(b, res);\n return res;\n }\n },\n omega: (bits) => omegas[checkBits(bits)],\n clear: () => {\n rootsCache.splice(0, rootsCache.length);\n brpCache.clear();\n },\n };\n}\n/**\n * Constructs different flavors of FFT. radix2 implementation of low level mutating API. Flavors:\n *\n * - DIT (Decimation-in-Time): Bottom-Up (leaves -> root), Cool-Turkey\n * - DIF (Decimation-in-Frequency): Top-Down (root -> leaves), Gentleman–Sande\n *\n * DIT takes brp input, returns natural output.\n * DIF takes natural input, returns brp output.\n *\n * The output is actually identical. Time / frequence distinction is not meaningful\n * for Polynomial multiplication in fields.\n * Which means if protocol supports/needs brp output/inputs, then we can skip this step.\n *\n * Cyclic NTT: Rq = Zq[x]/(x^n-1). butterfly_DIT+loop_DIT OR butterfly_DIF+loop_DIT, roots are omega\n * Negacyclic NTT: Rq = Zq[x]/(x^n+1). butterfly_DIT+loop_DIF, at least for mlkem / mldsa\n */\nexport const FFTCore = (F, coreOpts) => {\n const { N, roots, dit, invertButterflies = false, skipStages = 0, brp = true } = coreOpts;\n const bits = log2(N);\n if (!isPowerOfTwo(N))\n throw new Error('FFT: Polynomial size should be power of two');\n const isDit = dit !== invertButterflies;\n isDit;\n return (values) => {\n if (values.length !== N)\n throw new Error('FFT: wrong Polynomial length');\n if (dit && brp)\n bitReversalInplace(values);\n for (let i = 0, g = 1; i < bits - skipStages; i++) {\n // For each stage s (sub-FFT length m = 2^s)\n const s = dit ? i + 1 + skipStages : bits - i;\n const m = 1 << s;\n const m2 = m >> 1;\n const stride = N >> s;\n // Loop over each subarray of length m\n for (let k = 0; k < N; k += m) {\n // Loop over each butterfly within the subarray\n for (let j = 0, grp = g++; j < m2; j++) {\n const rootPos = invertButterflies ? (dit ? N - grp : grp) : j * stride;\n const i0 = k + j;\n const i1 = k + j + m2;\n const omega = roots[rootPos];\n const b = values[i1];\n const a = values[i0];\n // Inlining gives us 10% perf in kyber vs functions\n if (isDit) {\n const t = F.mul(b, omega); // Standard DIT butterfly\n values[i0] = F.add(a, t);\n values[i1] = F.sub(a, t);\n }\n else if (invertButterflies) {\n values[i0] = F.add(b, a); // DIT loop + inverted butterflies (Kyber decode)\n values[i1] = F.mul(F.sub(b, a), omega);\n }\n else {\n values[i0] = F.add(a, b); // Standard DIF butterfly\n values[i1] = F.mul(F.sub(a, b), omega);\n }\n }\n }\n }\n if (!dit && brp)\n bitReversalInplace(values);\n return values;\n };\n};\n/**\n * NTT aka FFT over finite field (NOT over complex numbers).\n * Naming mirrors other libraries.\n */\nexport function FFT(roots, opts) {\n const getLoop = (N, roots, brpInput = false, brpOutput = false) => {\n if (brpInput && brpOutput) {\n // we cannot optimize this case, but lets support it anyway\n return (values) => FFTCore(opts, { N, roots, dit: false, brp: false })(bitReversalInplace(values));\n }\n if (brpInput)\n return FFTCore(opts, { N, roots, dit: true, brp: false });\n if (brpOutput)\n return FFTCore(opts, { N, roots, dit: false, brp: false });\n return FFTCore(opts, { N, roots, dit: true, brp: true }); // all natural\n };\n return {\n direct(values, brpInput = false, brpOutput = false) {\n const N = values.length;\n if (!isPowerOfTwo(N))\n throw new Error('FFT: Polynomial size should be power of two');\n const bits = log2(N);\n return getLoop(N, roots.roots(bits), brpInput, brpOutput)(values.slice());\n },\n inverse(values, brpInput = false, brpOutput = false) {\n const N = values.length;\n const bits = log2(N);\n const res = getLoop(N, roots.inverse(bits), brpInput, brpOutput)(values.slice());\n const ivm = opts.inv(BigInt(values.length)); // scale\n // we can get brp output if we use dif instead of dit!\n for (let i = 0; i < res.length; i++)\n res[i] = opts.mul(res[i], ivm);\n // Allows to re-use non-inverted roots, but is VERY fragile\n // return [res[0]].concat(res.slice(1).reverse());\n // inverse calculated as pow(-1), which transforms into ω^{-kn} (-> reverses indices)\n return res;\n },\n };\n}\nexport function poly(field, roots, create, fft, length) {\n const F = field;\n const _create = create ||\n ((len, elm) => new Array(len).fill(elm ?? F.ZERO));\n const isPoly = (x) => Array.isArray(x) || ArrayBuffer.isView(x);\n const checkLength = (...lst) => {\n if (!lst.length)\n return 0;\n for (const i of lst)\n if (!isPoly(i))\n throw new Error('poly: not polynomial: ' + i);\n const L = lst[0].length;\n for (let i = 1; i < lst.length; i++)\n if (lst[i].length !== L)\n throw new Error(`poly: mismatched lengths ${L} vs ${lst[i].length}`);\n if (length !== undefined && L !== length)\n throw new Error(`poly: expected fixed length ${length}, got ${L}`);\n return L;\n };\n function findOmegaIndex(x, n, brp = false) {\n const bits = log2(n);\n const omega = brp ? roots.brp(bits) : roots.roots(bits);\n for (let i = 0; i < n; i++)\n if (F.eql(x, omega[i]))\n return i;\n return -1;\n }\n // TODO: mutating versions for mlkem/mldsa\n return {\n roots,\n create: _create,\n length,\n extend: (a, len) => {\n checkLength(a);\n const out = _create(len, F.ZERO);\n for (let i = 0; i < a.length; i++)\n out[i] = a[i];\n return out;\n },\n degree: (a) => {\n checkLength(a);\n for (let i = a.length - 1; i >= 0; i--)\n if (!F.is0(a[i]))\n return i;\n return -1;\n },\n add: (a, b) => {\n const len = checkLength(a, b);\n const out = _create(len);\n for (let i = 0; i < len; i++)\n out[i] = F.add(a[i], b[i]);\n return out;\n },\n sub: (a, b) => {\n const len = checkLength(a, b);\n const out = _create(len);\n for (let i = 0; i < len; i++)\n out[i] = F.sub(a[i], b[i]);\n return out;\n },\n dot: (a, b) => {\n const len = checkLength(a, b);\n const out = _create(len);\n for (let i = 0; i < len; i++)\n out[i] = F.mul(a[i], b[i]);\n return out;\n },\n mul: (a, b) => {\n if (isPoly(b)) {\n const len = checkLength(a, b);\n if (fft) {\n const A = fft.direct(a, false, true);\n const B = fft.direct(b, false, true);\n for (let i = 0; i < A.length; i++)\n A[i] = F.mul(A[i], B[i]);\n return fft.inverse(A, true, false);\n }\n else {\n // NOTE: this is quadratic and mostly for compat tests with FFT\n const res = _create(len);\n for (let i = 0; i < len; i++) {\n for (let j = 0; j < len; j++) {\n const k = (i + j) % len; // wrap mod length\n res[k] = F.add(res[k], F.mul(a[i], b[j]));\n }\n }\n return res;\n }\n }\n else {\n const out = _create(checkLength(a));\n for (let i = 0; i < out.length; i++)\n out[i] = F.mul(a[i], b);\n return out;\n }\n },\n convolve(a, b) {\n const len = nextPowerOfTwo(a.length + b.length - 1);\n return this.mul(this.extend(a, len), this.extend(b, len));\n },\n shift(p, factor) {\n const out = _create(checkLength(p));\n out[0] = p[0];\n for (let i = 1, power = F.ONE; i < p.length; i++) {\n power = F.mul(power, factor);\n out[i] = F.mul(p[i], power);\n }\n return out;\n },\n clone: (a) => {\n checkLength(a);\n const out = _create(a.length);\n for (let i = 0; i < a.length; i++)\n out[i] = a[i];\n return out;\n },\n eval: (a, basis) => {\n checkLength(a);\n let acc = F.ZERO;\n for (let i = 0; i < a.length; i++)\n acc = F.add(acc, F.mul(a[i], basis[i]));\n return acc;\n },\n monomial: {\n basis: (x, n) => {\n const out = _create(n);\n let pow = F.ONE;\n for (let i = 0; i < n; i++) {\n out[i] = pow;\n pow = F.mul(pow, x);\n }\n return out;\n },\n eval: (a, x) => {\n checkLength(a);\n // Same as eval(a, monomialBasis(x, a.length)), but it is faster this way\n let acc = F.ZERO;\n for (let i = a.length - 1; i >= 0; i--)\n acc = F.add(F.mul(acc, x), a[i]);\n return acc;\n },\n },\n lagrange: {\n basis: (x, n, brp = false, weights) => {\n const bits = log2(n);\n const cache = weights || brp ? roots.brp(bits) : roots.roots(bits); // [ω⁰, ω¹, ..., ωⁿ⁻¹]\n const out = _create(n);\n // Fast Kronecker-δ shortcut\n const idx = findOmegaIndex(x, n, brp);\n if (idx !== -1) {\n out[idx] = F.ONE;\n return out;\n }\n const tm = F.pow(x, BigInt(n));\n const c = F.mul(F.sub(tm, F.ONE), F.inv(BigInt(n))); // c = (xⁿ - 1)/n\n const denom = _create(n);\n for (let i = 0; i < n; i++)\n denom[i] = F.sub(x, cache[i]);\n const inv = F.invertBatch(denom);\n for (let i = 0; i < n; i++)\n out[i] = F.mul(c, F.mul(cache[i], inv[i]));\n return out;\n },\n eval(a, x, brp = false) {\n checkLength(a);\n const idx = findOmegaIndex(x, a.length, brp);\n if (idx !== -1)\n return a[idx]; // fast path\n const L = this.basis(x, a.length, brp); // Lᵢ(x)\n let acc = F.ZERO;\n for (let i = 0; i < a.length; i++)\n if (!F.is0(a[i]))\n acc = F.add(acc, F.mul(a[i], L[i]));\n return acc;\n },\n },\n vanishing(roots) {\n checkLength(roots);\n const out = _create(roots.length + 1, F.ZERO);\n out[0] = F.ONE;\n for (const r of roots) {\n const neg = F.neg(r);\n for (let j = out.length - 1; j > 0; j--)\n out[j] = F.add(F.mul(out[j], neg), out[j - 1]);\n out[0] = F.mul(out[0], neg);\n }\n return out;\n },\n };\n}\n//# sourceMappingURL=fft.js.map","/**\n * Utilities for hex, bytearray and number handling.\n * @module\n */\n/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */\nimport { abytes, abytes as abytes_, concatBytes, isBytes, randomBytes as randb, } from '@noble/hashes/utils.js';\nexport { abytes } from '@noble/hashes/utils.js';\nexport { concatBytes };\nexport const randomBytes = randb;\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++)\n diff |= a[i] ^ b[i];\n return diff === 0;\n}\n// copy bytes to new u8a (aligned). Because Buffer.slice is broken.\nexport function copyBytes(bytes) {\n return Uint8Array.from(bytes);\n}\nexport function validateOpts(opts) {\n // We try to catch u8a, since it was previously valid argument at this position\n if (typeof opts !== 'object' || opts === null || isBytes(opts))\n throw new Error('expected opts to be an object');\n}\nexport function validateVerOpts(opts) {\n validateOpts(opts);\n if (opts.context !== undefined)\n abytes(opts.context, undefined, 'opts.context');\n}\nexport function validateSigOpts(opts) {\n validateVerOpts(opts);\n if (opts.extraEntropy !== false && opts.extraEntropy !== undefined)\n abytes(opts.extraEntropy, undefined, 'opts.extraEntropy');\n}\nexport function splitCoder(label, ...lengths) {\n const getLength = (c) => (typeof c === 'number' ? c : c.bytesLen);\n const bytesLen = lengths.reduce((sum, a) => sum + getLength(a), 0);\n return {\n bytesLen,\n encode: (bufs) => {\n const res = new Uint8Array(bytesLen);\n for (let i = 0, pos = 0; i < lengths.length; i++) {\n const c = lengths[i];\n const l = getLength(c);\n const b = typeof c === 'number' ? bufs[i] : c.encode(bufs[i]);\n abytes_(b, l, label);\n res.set(b, pos);\n if (typeof c !== 'number')\n b.fill(0); // clean\n pos += l;\n }\n return res;\n },\n decode: (buf) => {\n abytes_(buf, bytesLen, label);\n const res = [];\n for (const c of lengths) {\n const l = getLength(c);\n const b = buf.subarray(0, l);\n res.push(typeof c === 'number' ? b : c.decode(b));\n buf = buf.subarray(l);\n }\n return res;\n },\n };\n}\n// nano-packed.array (fixed size)\nexport function vecCoder(c, vecLen) {\n const bytesLen = vecLen * c.bytesLen;\n return {\n bytesLen,\n encode: (u) => {\n if (u.length !== vecLen)\n throw new Error(`vecCoder.encode: wrong length=${u.length}. Expected: ${vecLen}`);\n const res = new Uint8Array(bytesLen);\n for (let i = 0, pos = 0; i < u.length; i++) {\n const b = c.encode(u[i]);\n res.set(b, pos);\n b.fill(0); // clean\n pos += b.length;\n }\n return res;\n },\n decode: (a) => {\n abytes_(a, bytesLen);\n const r = [];\n for (let i = 0; i < a.length; i += c.bytesLen)\n r.push(c.decode(a.subarray(i, i + c.bytesLen)));\n return r;\n },\n };\n}\n// cleanBytes(Uint8Array.of(), [Uint16Array.of(), Uint32Array.of()])\nexport function cleanBytes(...list) {\n for (const t of list) {\n if (Array.isArray(t))\n for (const b of t)\n b.fill(0);\n else\n t.fill(0);\n }\n}\nexport function getMask(bits) {\n return (1 << bits) - 1; // 4 -> 0b1111\n}\nexport const EMPTY = Uint8Array.of();\nexport function getMessage(msg, ctx = EMPTY) {\n abytes_(msg);\n abytes_(ctx);\n if (ctx.length > 255)\n throw new Error('context should be less than 255 bytes');\n return concatBytes(new Uint8Array([0, ctx.length]), ctx, msg);\n}\n// 06 09 60 86 48 01 65 03 04 02\nconst oidNistP = /* @__PURE__ */ Uint8Array.from([6, 9, 0x60, 0x86, 0x48, 1, 0x65, 3, 4, 2]);\nexport function checkHash(hash, requiredStrength = 0) {\n if (!hash.oid || !equalBytes(hash.oid.subarray(0, 10), oidNistP))\n throw new Error('hash.oid is invalid: expected NIST hash');\n const collisionResistance = (hash.outputLen * 8) / 2;\n if (requiredStrength > collisionResistance) {\n throw new Error('Pre-hash security strength too low: ' +\n collisionResistance +\n ', required: ' +\n requiredStrength);\n }\n}\nexport function getMessagePrehash(hash, msg, ctx = EMPTY) {\n abytes_(msg);\n abytes_(ctx);\n if (ctx.length > 255)\n throw new Error('context should be less than 255 bytes');\n const hashed = hash(msg);\n return concatBytes(new Uint8Array([1, ctx.length]), ctx, hash.oid, hashed);\n}\n//# sourceMappingURL=utils.js.map","/**\n * Internal methods for lattice-based ML-KEM and ML-DSA.\n * @module\n */\n/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */\nimport { FFTCore, reverseBits } from '@noble/curves/abstract/fft.js';\nimport { shake128, shake256 } from '@noble/hashes/sha3.js';\nimport { cleanBytes, getMask } from \"./utils.js\";\nexport const genCrystals = (opts) => {\n // isKyber: true means Kyber, false means Dilithium\n const { newPoly, N, Q, F, ROOT_OF_UNITY, brvBits, isKyber } = opts;\n const mod = (a, modulo = Q) => {\n const result = a % modulo | 0;\n return (result >= 0 ? result | 0 : (modulo + result) | 0) | 0;\n };\n // -(Q-1)/2 < a <= (Q-1)/2\n const smod = (a, modulo = Q) => {\n const r = mod(a, modulo) | 0;\n return (r > modulo >> 1 ? (r - modulo) | 0 : r) | 0;\n };\n // Generate zettas (different from roots of unity, negacyclic uses phi, where acyclic uses omega)\n function getZettas() {\n const out = newPoly(N);\n for (let i = 0; i < N; i++) {\n const b = reverseBits(i, brvBits);\n const p = BigInt(ROOT_OF_UNITY) ** BigInt(b) % BigInt(Q);\n out[i] = Number(p) | 0;\n }\n return out;\n }\n const nttZetas = getZettas();\n // Number-Theoretic Transform\n // Explained: https://electricdusk.com/ntt.html\n // Kyber has slightly different params, since there is no 512th primitive root of unity mod q,\n // only 256th primitive root of unity mod. Which also complicates MultiplyNTT.\n const field = {\n add: (a, b) => mod((a | 0) + (b | 0)) | 0,\n sub: (a, b) => mod((a | 0) - (b | 0)) | 0,\n mul: (a, b) => mod((a | 0) * (b | 0)) | 0,\n inv: (_a) => {\n throw new Error('not implemented');\n },\n };\n const nttOpts = {\n N,\n roots: nttZetas,\n invertButterflies: true,\n skipStages: isKyber ? 1 : 0,\n brp: false,\n };\n const dif = FFTCore(field, { dit: false, ...nttOpts });\n const dit = FFTCore(field, { dit: true, ...nttOpts });\n const NTT = {\n encode: (r) => {\n return dif(r);\n },\n decode: (r) => {\n dit(r);\n // kyber uses 128 here, because brv && stuff\n for (let i = 0; i < r.length; i++)\n r[i] = mod(F * r[i]);\n return r;\n },\n };\n // Encode polynominal as bits\n const bitsCoder = (d, c) => {\n const mask = getMask(d);\n const bytesLen = d * (N / 8);\n return {\n bytesLen,\n encode: (poly) => {\n const r = new Uint8Array(bytesLen);\n for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < poly.length; i++) {\n buf |= (c.encode(poly[i]) & mask) << bufLen;\n bufLen += d;\n for (; bufLen >= 8; bufLen -= 8, buf >>= 8)\n r[pos++] = buf & getMask(bufLen);\n }\n return r;\n },\n decode: (bytes) => {\n const r = newPoly(N);\n for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < bytes.length; i++) {\n buf |= bytes[i] << bufLen;\n bufLen += 8;\n for (; bufLen >= d; bufLen -= d, buf >>= d)\n r[pos++] = c.decode(buf & mask);\n }\n return r;\n },\n };\n };\n return { mod, smod, nttZetas, NTT, bitsCoder };\n};\nconst createXofShake = (shake) => (seed, blockLen) => {\n if (!blockLen)\n blockLen = shake.blockLen;\n // Optimizations that won't mater:\n // - cached seed update (two .update(), on start and on the end)\n // - another cache which cloned into working copy\n // Faster than multiple updates, since seed less than blockLen\n const _seed = new Uint8Array(seed.length + 2);\n _seed.set(seed);\n const seedLen = seed.length;\n const buf = new Uint8Array(blockLen); // == shake128.blockLen\n let h = shake.create({});\n let calls = 0;\n let xofs = 0;\n return {\n stats: () => ({ calls, xofs }),\n get: (x, y) => {\n _seed[seedLen + 0] = x;\n _seed[seedLen + 1] = y;\n h.destroy();\n h = shake.create({}).update(_seed);\n calls++;\n return () => {\n xofs++;\n return h.xofInto(buf);\n };\n },\n clean: () => {\n h.destroy();\n cleanBytes(buf, _seed);\n },\n };\n};\nexport const XOF128 = /* @__PURE__ */ createXofShake(shake128);\nexport const XOF256 = /* @__PURE__ */ createXofShake(shake256);\n//# sourceMappingURL=_crystals.js.map","/**\n * ML-KEM: Module Lattice-based Key Encapsulation Mechanism from\n * [FIPS-203](https://csrc.nist.gov/pubs/fips/203/ipd). A.k.a. CRYSTALS-Kyber.\n *\n * Key encapsulation is similar to DH / ECDH (think X25519), with important differences:\n * * Unlike in ECDH, we can't verify if it was \"Bob\" who've sent the shared secret\n * * Unlike ECDH, it is probabalistic and relies on quality of randomness (CSPRNG).\n * * Decapsulation never throws an error, even when shared secret was\n * encrypted by a different public key. It will just return a different shared secret.\n *\n * There are some concerns with regards to security: see\n * [djb blog](https://blog.cr.yp.to/20231003-countcorrectly.html) and\n * [mailing list](https://groups.google.com/a/list.nist.gov/g/pqc-forum/c/W2VOzy0wz_E).\n *\n * Has similar internals to ML-DSA, but their keys and params are different.\n *\n * Check out [official site](https://www.pq-crystals.org/kyber/resources.shtml),\n * [repo](https://github.com/pq-crystals/kyber),\n * [spec](https://datatracker.ietf.org/doc/draft-cfrg-schwabe-kyber/).\n * @module\n */\n/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */\nimport { sha3_256, sha3_512, shake256 } from '@noble/hashes/sha3.js';\nimport { u32 } from '@noble/hashes/utils.js';\nimport { genCrystals, XOF128 } from \"./_crystals.js\";\nimport { abytes, cleanBytes, copyBytes, equalBytes, randomBytes, splitCoder, vecCoder, } from \"./utils.js\";\n/** Key encapsulation mechanism interface */\nconst N = 256; // Kyber (not FIPS-203) supports different lengths, but all std modes were using 256\nconst Q = 3329; // 13*(2**8)+1, modulo prime\nconst F = 3303; // 3303 ≡ 128**(−1) mod q (FIPS-203)\nconst ROOT_OF_UNITY = 17; // ζ = 17 ∈ Zq is a primitive 256-th root of unity modulo Q. ζ**128 ≡−1\nconst { mod, nttZetas, NTT, bitsCoder } = genCrystals({\n N,\n Q,\n F,\n ROOT_OF_UNITY,\n newPoly: (n) => new Uint16Array(n),\n brvBits: 7,\n isKyber: true,\n});\n/** Internal params of ML-KEM versions */\n// prettier-ignore\nexport const PARAMS = {\n 512: { N, Q, K: 2, ETA1: 3, ETA2: 2, du: 10, dv: 4, RBGstrength: 128 },\n 768: { N, Q, K: 3, ETA1: 2, ETA2: 2, du: 10, dv: 4, RBGstrength: 192 },\n 1024: { N, Q, K: 4, ETA1: 2, ETA2: 2, du: 11, dv: 5, RBGstrength: 256 },\n};\n// FIPS-203: compress/decompress\nconst compress = (d) => {\n // Special case, no need to compress, pass as is, but strip high bytes on compression\n if (d >= 12)\n return { encode: (i) => i, decode: (i) => i };\n // NOTE: we don't use float arithmetic (forbidden by FIPS-203 and high chance of bugs).\n // Comments map to python implementation in RFC (draft-cfrg-schwabe-kyber)\n // const round = (i: number) => Math.floor(i + 0.5) | 0;\n const a = 2 ** (d - 1);\n return {\n // const compress = (i: number) => round((2 ** d / Q) * i) % 2 ** d;\n encode: (i) => ((i << d) + Q / 2) / Q,\n // const decompress = (i: number) => round((Q / 2 ** d) * i);\n decode: (i) => (i * Q + a) >>> d,\n };\n};\n// NOTE: we merge encoding and compress because it is faster, also both require same d param\n// Converts between bytes and d-bits compressed representation. Kinda like convertRadix2 from @scure/base\n// decode(encode(t)) == t, but there is loss of information on encode(decode(t))\nconst polyCoder = (d) => bitsCoder(d, compress(d));\nfunction polyAdd(a, b) {\n for (let i = 0; i < N; i++)\n a[i] = mod(a[i] + b[i]); // a += b\n}\nfunction polySub(a, b) {\n for (let i = 0; i < N; i++)\n a[i] = mod(a[i] - b[i]); // a -= b\n}\n// FIPS-203: Computes the product of two degree-one polynomials with respect to a quadratic modulus\nfunction BaseCaseMultiply(a0, a1, b0, b1, zeta) {\n const c0 = mod(a1 * b1 * zeta + a0 * b0);\n const c1 = mod(a0 * b1 + a1 * b0);\n return { c0, c1 };\n}\n// FIPS-203: Computes the product (in the ring Tq) of two NTT representations. NOTE: works inplace for f\n// NOTE: since multiply defined only for NTT representation, we need to convert to NTT, multiply and convert back\nfunction MultiplyNTTs(f, g) {\n for (let i = 0; i < N / 2; i++) {\n let z = nttZetas[64 + (i >> 1)];\n if (i & 1)\n z = -z;\n const { c0, c1 } = BaseCaseMultiply(f[2 * i + 0], f[2 * i + 1], g[2 * i + 0], g[2 * i + 1], z);\n f[2 * i + 0] = c0;\n f[2 * i + 1] = c1;\n }\n return f;\n}\n// Return poly in NTT representation\nfunction SampleNTT(xof) {\n const r = new Uint16Array(N);\n for (let j = 0; j < N;) {\n const b = xof();\n if (b.length % 3)\n throw new Error('SampleNTT: unaligned block');\n for (let i = 0; j < N && i + 3 <= b.length; i += 3) {\n const d1 = ((b[i + 0] >> 0) | (b[i + 1] << 8)) & 0xfff;\n const d2 = ((b[i + 1] >> 4) | (b[i + 2] << 4)) & 0xfff;\n if (d1 < Q)\n r[j++] = d1;\n if (j < N && d2 < Q)\n r[j++] = d2;\n }\n }\n return r;\n}\n// Sampling from the centered binomial distribution\n// Returns poly with small coefficients (noise/errors)\nfunction sampleCBD(PRF, seed, nonce, eta) {\n const buf = PRF((eta * N) / 4, seed, nonce);\n const r = new Uint16Array(N);\n const b32 = u32(buf);\n let len = 0;\n for (let i = 0, p = 0, bb = 0, t0 = 0; i < b32.length; i++) {\n let b = b32[i];\n for (let j = 0; j < 32; j++) {\n bb += b & 1;\n b >>= 1;\n len += 1;\n if (len === eta) {\n t0 = bb;\n bb = 0;\n }\n else if (len === 2 * eta) {\n r[p++] = mod(t0 - bb);\n bb = 0;\n len = 0;\n }\n }\n }\n if (len)\n throw new Error(`sampleCBD: leftover bits: ${len}`);\n return r;\n}\n// K-PKE\n// As per FIPS-203, it doesn't perform any input validation and can't be used in standalone fashion.\nconst genKPKE = (opts) => {\n const { K, PRF, XOF, HASH512, ETA1, ETA2, du, dv } = opts;\n const poly1 = polyCoder(1);\n const polyV = polyCoder(dv);\n const polyU = polyCoder(du);\n const publicCoder = splitCoder('publicKey', vecCoder(polyCoder(12), K), 32);\n const secretCoder = vecCoder(polyCoder(12), K);\n const cipherCoder = splitCoder('ciphertext', vecCoder(polyU, K), polyV);\n const seedCoder = splitCoder('seed', 32, 32);\n return {\n secretCoder,\n lengths: {\n secretKey: secretCoder.bytesLen,\n publicKey: publicCoder.bytesLen,\n cipherText: cipherCoder.bytesLen,\n },\n keygen: (seed) => {\n abytes(seed, 32, 'seed');\n const seedDst = new Uint8Array(33);\n seedDst.set(seed);\n seedDst[32] = K;\n const seedHash = HASH512(seedDst);\n const [rho, sigma] = seedCoder.decode(seedHash);\n const sHat = [];\n const tHat = [];\n for (let i = 0; i < K; i++)\n sHat.push(NTT.encode(sampleCBD(PRF, sigma, i, ETA1)));\n const x = XOF(rho);\n for (let i = 0; i < K; i++) {\n const e = NTT.encode(sampleCBD(PRF, sigma, K + i, ETA1));\n for (let j = 0; j < K; j++) {\n const aji = SampleNTT(x.get(j, i)); // A[j][i], inplace\n polyAdd(e, MultiplyNTTs(aji, sHat[j]));\n }\n tHat.push(e); // t ← A ◦ s + e\n }\n x.clean();\n const res = {\n publicKey: publicCoder.encode([tHat, rho]),\n secretKey: secretCoder.encode(sHat),\n };\n cleanBytes(rho, sigma, sHat, tHat, seedDst, seedHash);\n return res;\n },\n encrypt: (publicKey, msg, seed) => {\n const [tHat, rho] = publicCoder.decode(publicKey);\n const rHat = [];\n for (let i = 0; i < K; i++)\n rHat.push(NTT.encode(sampleCBD(PRF, seed, i, ETA1)));\n const x = XOF(rho);\n const tmp2 = new Uint16Array(N);\n const u = [];\n for (let i = 0; i < K; i++) {\n const e1 = sampleCBD(PRF, seed, K + i, ETA2);\n const tmp = new Uint16Array(N);\n for (let j = 0; j < K; j++) {\n const aij = SampleNTT(x.get(i, j)); // A[i][j], inplace\n polyAdd(tmp, MultiplyNTTs(aij, rHat[j])); // t += aij * rHat[j]\n }\n polyAdd(e1, NTT.decode(tmp)); // e1 += tmp\n u.push(e1);\n polyAdd(tmp2, MultiplyNTTs(tHat[i], rHat[i])); // t2 += tHat[i] * rHat[i]\n cleanBytes(tmp);\n }\n x.clean();\n const e2 = sampleCBD(PRF, seed, 2 * K, ETA2);\n polyAdd(e2, NTT.decode(tmp2)); // e2 += tmp2\n const v = poly1.decode(msg); // encode plaintext m into polynomial v\n polyAdd(v, e2); // v += e2\n cleanBytes(tHat, rHat, tmp2, e2);\n return cipherCoder.encode([u, v]);\n },\n decrypt: (cipherText, privateKey) => {\n const [u, v] = cipherCoder.decode(cipherText);\n const sk = secretCoder.decode(privateKey); // s ← ByteDecode_12(dkPKE)\n const tmp = new Uint16Array(N);\n for (let i = 0; i < K; i++)\n polyAdd(tmp, MultiplyNTTs(sk[i], NTT.encode(u[i]))); // tmp += sk[i] * u[i]\n polySub(v, NTT.decode(tmp)); // v += tmp\n cleanBytes(tmp, sk, u);\n return poly1.encode(v);\n },\n };\n};\nfunction createKyber(opts) {\n const KPKE = genKPKE(opts);\n const { HASH256, HASH512, KDF } = opts;\n const { secretCoder: KPKESecretCoder, lengths } = KPKE;\n const secretCoder = splitCoder('secretKey', lengths.secretKey, lengths.publicKey, 32, 32);\n const msgLen = 32;\n const seedLen = 64;\n return {\n info: { type: 'ml-kem' },\n lengths: {\n ...lengths,\n seed: 64,\n msg: msgLen,\n msgRand: msgLen,\n secretKey: secretCoder.bytesLen,\n },\n keygen: (seed = randomBytes(seedLen)) => {\n abytes(seed, seedLen, 'seed');\n const { publicKey, secretKey: sk } = KPKE.keygen(seed.subarray(0, 32));\n const publicKeyHash = HASH256(publicKey);\n // (dkPKE||ek||H(ek)||z)\n const secretKey = secretCoder.encode([sk, publicKey, publicKeyHash, seed.subarray(32)]);\n cleanBytes(sk, publicKeyHash);\n return { publicKey, secretKey };\n },\n getPublicKey: (secretKey) => {\n const [_sk, publicKey, _publicKeyHash, _z] = secretCoder.decode(secretKey);\n return Uint8Array.from(publicKey);\n },\n encapsulate: (publicKey, msg = randomBytes(msgLen)) => {\n abytes(publicKey, lengths.publicKey, 'publicKey');\n abytes(msg, msgLen, 'message');\n // FIPS-203 includes additional verification check for modulus\n const eke = publicKey.subarray(0, 384 * opts.K);\n const ek = KPKESecretCoder.encode(KPKESecretCoder.decode(copyBytes(eke))); // Copy because of inplace encoding\n // (Modulus check.) Perform the computation ek ← ByteEncode12(ByteDecode12(eke)).\n // If ek = ̸ eke, the input is invalid. (See Section 4.2.1.)\n if (!equalBytes(ek, eke)) {\n cleanBytes(ek);\n throw new Error('ML-KEM.encapsulate: wrong publicKey modulus');\n }\n cleanBytes(ek);\n const kr = HASH512.create().update(msg).update(HASH256(publicKey)).digest(); // derive randomness\n const cipherText = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64));\n cleanBytes(kr.subarray(32));\n return { cipherText, sharedSecret: kr.subarray(0, 32) };\n },\n decapsulate: (cipherText, secretKey) => {\n abytes(secretKey, secretCoder.bytesLen, 'secretKey'); // 768*k + 96\n abytes(cipherText, lengths.cipherText, 'cipherText'); // 32(du*k + dv)\n // test ← H(dk[384𝑘 ∶ 768𝑘 + 32])) .\n const k768 = secretCoder.bytesLen - 96;\n const start = k768 + 32;\n const test = HASH256(secretKey.subarray(k768 / 2, start));\n // If test ≠ dk[768𝑘 + 32 ∶ 768𝑘 + 64], then input checking has failed.\n if (!equalBytes(test, secretKey.subarray(start, start + 32)))\n throw new Error('invalid secretKey: hash check failed');\n const [sk, publicKey, publicKeyHash, z] = secretCoder.decode(secretKey);\n const msg = KPKE.decrypt(cipherText, sk);\n const kr = HASH512.create().update(msg).update(publicKeyHash).digest(); // derive randomness, Khat, rHat = G(mHat || h)\n const Khat = kr.subarray(0, 32);\n const cipherText2 = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64)); // re-encrypt using the derived randomness\n const isValid = equalBytes(cipherText, cipherText2); // if ciphertexts do not match, “implicitly reject”\n const Kbar = KDF.create({ dkLen: 32 }).update(z).update(cipherText).digest();\n cleanBytes(msg, cipherText2, !isValid ? Khat : Kbar);\n return isValid ? Khat : Kbar;\n },\n };\n}\nfunction shakePRF(dkLen, key, nonce) {\n return shake256\n .create({ dkLen })\n .update(key)\n .update(new Uint8Array([nonce]))\n .digest();\n}\nconst opts = {\n HASH256: sha3_256,\n HASH512: sha3_512,\n KDF: shake256,\n XOF: XOF128,\n PRF: shakePRF,\n};\n/** ML-KEM-512 for 128-bit security level. Not recommended after 2030, as per ASD. */\nexport const ml_kem512 = /* @__PURE__ */ createKyber({\n ...opts,\n ...PARAMS[512],\n});\n/** ML-KEM-768, for 192-bit security level. Not recommended after 2030, as per ASD. */\nexport const ml_kem768 = /* @__PURE__ */ createKyber({\n ...opts,\n ...PARAMS[768],\n});\n/** ML-KEM-1024 for 256-bit security level. OK after 2030, as per ASD. */\nexport const ml_kem1024 = /* @__PURE__ */ createKyber({\n ...opts,\n ...PARAMS[1024],\n});\n//# sourceMappingURL=ml-kem.js.map","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport JsSHA from 'jssha'\nimport {\n chunkSubstr,\n isHex,\n randomString\n} from './libraries/strings.js'\nimport {\n generateBatchId,\n generateBundleHash,\n generateSecret,\n shake256\n} from './libraries/crypto.js'\nimport TokenUnit from './TokenUnit.js'\nimport WalletCredentialException from './exception/WalletCredentialException.js'\nimport { ml_kem768 as MlKEM768 } from '@noble/post-quantum/ml-kem.js'\n\n/**\n * Wallet class represents the set of public and private\n * keys to sign Molecules\n */\nexport default class Wallet {\n /**\n * Class constructor\n *\n * @param {string|null} secret - typically a 2048-character biometric hash\n * @param {string|null} bundle - 64-character hexadecimal user identifier\n * @param {string} token - slug for the token this wallet is intended for\n * @param {string|null} address - hexadecimal public key for the signature of this wallet\n * @param {string|null} position - hexadecimal string used to salt the secret and produce one-time signatures\n * @param {string|null} batchId\n * @param {string|null} characters\n */\n constructor ({\n secret = null,\n bundle = null,\n token = 'USER',\n address = null,\n position = null,\n batchId = null,\n characters = null\n }) {\n this.token = token\n this.balance = '0'\n this.molecules = {}\n\n // Empty values\n this.key = null\n this.privkey = null\n this.pubkey = null\n this.tokenUnits = []\n this.tradeRates = {}\n\n this.address = address\n this.position = position\n this.bundle = bundle\n this.batchId = batchId\n this.characters = characters\n\n if (secret) {\n // Set bundle from the secret\n this.bundle = this.bundle || generateBundleHash(secret, 'Wallet::constructor')\n\n // Generate a position for non-shadow wallet if not initialized\n this.position = this.position || Wallet.generatePosition()\n\n // Key & address initialization\n this.key = Wallet.generateKey({\n secret,\n token: this.token,\n position: this.position\n })\n this.address = this.address || Wallet.generateAddress(this.key)\n\n // Set characters\n this.characters = this.characters || 'BASE64'\n\n // Initialize ML-KEM keys\n this.initializeMLKEM()\n }\n }\n\n /**\n * Creates a new Wallet instance\n *\n * @param {string|null} secret\n * @param {string|null} bundle\n * @param {string} token\n * @param {string|null} batchId\n * @param {string|null} characters\n * @return {Wallet}\n */\n static create ({\n secret = null,\n bundle = null,\n token,\n batchId = null,\n characters = null\n }) {\n let position = null\n\n // No credentials parameters provided?\n if (!secret && !bundle) {\n throw new WalletCredentialException()\n }\n\n // Secret, but no bundle?\n if (secret && !bundle) {\n position = Wallet.generatePosition()\n bundle = generateBundleHash(secret, 'Wallet::create')\n }\n\n // Wallet initialization\n return new Wallet({\n secret,\n bundle,\n token,\n position,\n batchId,\n characters\n })\n }\n\n /**\n * Determines if the provided string is a bundle hash\n *\n * @param {string} maybeBundleHash\n * @return {boolean}\n */\n static isBundleHash (maybeBundleHash) {\n if (typeof maybeBundleHash !== 'string') {\n return false\n }\n\n return maybeBundleHash.length === 64 && isHex(maybeBundleHash)\n }\n\n /**\n * Get formatted token units from the raw data\n *\n * @param unitsData\n * @return {[]}\n */\n static getTokenUnits (unitsData) {\n const result = []\n unitsData.forEach(unitData => {\n result.push(TokenUnit.createFromDB(unitData))\n })\n return result\n }\n\n /**\n * Generates a private key for the given parameters\n *\n * @param {string} secret\n * @param {string} token\n * @param {string} position\n * @return {string}\n */\n static generateKey ({\n secret,\n token,\n position\n }) {\n if (!secret) {\n throw new WalletCredentialException('Wallet::generateKey() - Secret is required!')\n }\n if (!position) {\n throw new WalletCredentialException('Wallet::generateKey() - Position is required!')\n }\n\n // Normalize non-hex secret via SHAKE256 (matching Rust/Kotlin behavior)\n const secretHex = isHex(secret) ? secret : shake256(secret, 1024)\n // Normalize non-hex position via SHAKE256\n const positionHex = isHex(position) ? position : shake256(position, 256)\n\n // Converting secret to bigInt\n const bigIntSecret = BigInt(`0x${ secretHex }`)\n\n // Adding new position to the user secret to produce the indexed key\n const indexedKey = bigIntSecret + BigInt(`0x${ positionHex }`)\n\n // Hashing the indexed key to produce the intermediate key\n const intermediateKeySponge = new JsSHA('SHAKE256', 'TEXT')\n\n intermediateKeySponge.update(indexedKey.toString(16))\n\n if (token) {\n intermediateKeySponge.update(token)\n }\n\n // Hashing the intermediate key to produce the private key\n const privateKeySponge = new JsSHA('SHAKE256', 'TEXT')\n privateKeySponge.update(intermediateKeySponge.getHash('HEX', { outputLen: 8192 }))\n return privateKeySponge.getHash('HEX', { outputLen: 8192 })\n }\n\n /**\n * Generates a wallet address\n *\n * @param {string} key\n * @return {string}\n */\n static generateAddress (key) {\n // Subdivide private key into 16 fragments of 128 characters each\n const keyFragments = chunkSubstr(key, 128)\n // Generating wallet digest\n const digestSponge = new JsSHA('SHAKE256', 'TEXT')\n\n for (const index in keyFragments) {\n let workingFragment = keyFragments[index]\n for (let fragmentCount = 1; fragmentCount <= 16; fragmentCount++) {\n const workingSponge = new JsSHA('SHAKE256', 'TEXT')\n workingSponge.update(workingFragment)\n workingFragment = workingSponge.getHash('HEX', { outputLen: 512 })\n }\n\n digestSponge.update(workingFragment)\n }\n\n // Producing wallet address\n const outputSponge = new JsSHA('SHAKE256', 'TEXT')\n outputSponge.update(digestSponge.getHash('HEX', { outputLen: 8192 }))\n return outputSponge.getHash('HEX', { outputLen: 256 })\n }\n\n /**\n *\n * @param saltLength\n * @returns {string}\n */\n static generatePosition (saltLength = 64) {\n return randomString(saltLength, 'abcdef0123456789')\n }\n\n /**\n * Initializes the ML-KEM key pair\n */\n initializeMLKEM () {\n // Generate a 64-byte (512-bit) seed from the Knish.IO private key \n // Use deterministic approach: generateSecret(key, 128) → 128 hex chars = 64 bytes\n const seedHex = generateSecret(this.key, 128) // 128 hex chars = 64 bytes\n\n // Convert the hex string to a Uint8Array \n const seed = new Uint8Array(64)\n for (let i = 0; i < 64; i++) {\n seed[i] = parseInt(seedHex.substr(i * 2, 2), 16)\n }\n\n const { publicKey, secretKey } = MlKEM768.keygen(seed)\n\n this.pubkey = this.serializeKey(publicKey)\n this.privkey = secretKey // Note: We're keeping privkey as UInt8Array for security\n }\n\n serializeKey (key) {\n return btoa(String.fromCharCode.apply(null, key))\n }\n\n deserializeKey (serializedKey) {\n const binaryString = atob(serializedKey)\n return new Uint8Array(binaryString.length).map((_, i) => binaryString.charCodeAt(i))\n }\n\n /**\n * Returns balance as a Number for arithmetic operations.\n * WARNING: Precision loss for values > 2^53.\n *\n * @return {number}\n */\n balanceAsNumber () {\n return Number(this.balance)\n }\n\n /**\n * Returns balance as a BigInt for precision-safe integer arithmetic.\n * Truncates any fractional component.\n *\n * @return {bigint}\n */\n balanceAsBigInt () {\n const str = String(this.balance)\n const intPart = str.includes('.') ? str.split('.')[0] : str\n return BigInt(intPart || '0')\n }\n\n /**\n * Sets balance from a BigInt value\n *\n * @param {bigint} value\n */\n setBalanceBigInt (value) {\n this.balance = value.toString()\n }\n\n /**\n * Sets balance from a Number value, storing as String\n *\n * @param {number} value\n */\n setBalanceNumber (value) {\n this.balance = String(value)\n }\n\n /**\n *\n * @returns {*[]}\n */\n getTokenUnitsData () {\n const result = []\n this.tokenUnits.forEach(tokenUnit => {\n result.push(tokenUnit.toData())\n })\n return result\n }\n\n /**\n * Split token units\n *\n * @param {array} units\n * @param remainderWallet\n * @param recipientWallet\n */\n splitUnits (\n units, // Array: token unit IDs\n remainderWallet,\n recipientWallet = null\n ) {\n // No units supplied, nothing to split\n if (units.length === 0) {\n return\n }\n\n // Init recipient & remainder token units\n const recipientTokenUnits = []\n const remainderTokenUnits = []\n this.tokenUnits.forEach(tokenUnit => {\n if (units.includes(tokenUnit.id)) {\n recipientTokenUnits.push(tokenUnit)\n } else {\n remainderTokenUnits.push(tokenUnit)\n }\n })\n\n // Reset token units to the sending value\n this.tokenUnits = recipientTokenUnits\n\n // Set token units to recipient & remainder\n if (recipientWallet !== null) {\n recipientWallet.tokenUnits = recipientTokenUnits\n }\n remainderWallet.tokenUnits = remainderTokenUnits\n }\n\n /**\n * Create a remainder wallet from the source one\n *\n * @param secret\n */\n createRemainder (secret) {\n const remainderWallet = Wallet.create({\n secret,\n token: this.token,\n characters: this.characters\n })\n remainderWallet.initBatchId({\n sourceWallet: this,\n isRemainder: true\n })\n return remainderWallet\n }\n\n /**\n * @return boolean\n */\n isShadow () {\n return (\n (typeof this.position === 'undefined' || this.position === null) &&\n (typeof this.address === 'undefined' || this.address === null)\n )\n }\n\n /**\n * Sets up a batch ID - either using the sender's, or a new one\n *\n * @param {Wallet} sourceWallet\n * @param {boolean} isRemainder\n */\n initBatchId ({\n sourceWallet,\n isRemainder = false\n }) {\n if (sourceWallet.batchId) {\n this.batchId = isRemainder ? sourceWallet.batchId : generateBatchId({})\n }\n }\n\n async encryptMessage (message, recipientPubkey) {\n const messageString = JSON.stringify(message)\n const messageUint8 = new TextEncoder().encode(messageString)\n const deserializedPubkey = this.deserializeKey(recipientPubkey)\n const { cipherText, sharedSecret } = MlKEM768.encapsulate(deserializedPubkey)\n const encryptedMessage = await this.encryptWithSharedSecret(messageUint8, sharedSecret)\n return {\n cipherText: this.serializeKey(cipherText),\n encryptedMessage: this.serializeKey(encryptedMessage)\n }\n }\n\n async decryptMessage (encryptedData) {\n const { cipherText, encryptedMessage } = encryptedData\n\n let sharedSecret\n try {\n sharedSecret = MlKEM768.decapsulate(this.deserializeKey(cipherText), this.privkey)\n } catch (e) {\n console.error('Wallet::decryptMessage() - Decapsulation failed', e)\n console.info('Wallet::decryptMessage() - my public key', this.pubkey)\n return null\n }\n\n let deserializedEncryptedMessage\n try {\n deserializedEncryptedMessage = this.deserializeKey(encryptedMessage)\n } catch (e) {\n console.warn('Wallet::decryptMessage() - Deserialization failed', e)\n console.info('Wallet::decryptMessage() - my public key', this.pubkey)\n console.info('Wallet::decryptMessage() - our shared secret', sharedSecret)\n return null\n }\n\n let decryptedUint8\n try {\n decryptedUint8 = await this.decryptWithSharedSecret(deserializedEncryptedMessage, sharedSecret)\n } catch (e) {\n console.warn('Wallet::decryptMessage() - Decryption failed', e)\n console.info('Wallet::decryptMessage() - my public key', this.pubkey)\n console.info('Wallet::decryptMessage() - our shared secret', sharedSecret)\n console.info('Wallet::decryptMessage() - deserialized encrypted message', deserializedEncryptedMessage)\n return null\n }\n\n let decryptedString\n try {\n decryptedString = new TextDecoder().decode(decryptedUint8)\n } catch (e) {\n console.warn('Wallet::decryptMessage() - Decoding failed', e)\n console.info('Wallet::decryptMessage() - my public key', this.pubkey)\n console.info('Wallet::decryptMessage() - our shared secret', sharedSecret)\n console.info('Wallet::decryptMessage() - deserialized encrypted message', deserializedEncryptedMessage)\n console.info('Wallet::decryptMessage() - decrypted Uint8Array', decryptedUint8)\n return null\n }\n\n return JSON.parse(decryptedString)\n }\n\n async encryptWithSharedSecret (message, sharedSecret) {\n const iv = crypto.getRandomValues(new Uint8Array(12))\n const algorithm = { name: 'AES-GCM', iv }\n\n // Convert the shared secret to a CryptoKey\n const key = await crypto.subtle.importKey(\n 'raw',\n sharedSecret,\n { name: 'AES-GCM' },\n false,\n ['encrypt']\n )\n\n // Encrypt the message\n const encryptedContent = await crypto.subtle.encrypt(\n algorithm,\n key,\n message\n )\n\n // Combine IV and encrypted content\n const result = new Uint8Array(iv.length + encryptedContent.byteLength)\n result.set(iv)\n result.set(new Uint8Array(encryptedContent), iv.length)\n\n return result\n }\n\n /**\n * Decrypts the given message using the shared secret\n * @param encryptedMessage\n * @param sharedSecret\n * @returns {Promise<Uint8Array>}\n */\n async decryptWithSharedSecret (encryptedMessage, sharedSecret) {\n // Extract IV from the encrypted message\n const iv = encryptedMessage.slice(0, 12)\n const algorithm = { name: 'AES-GCM', iv }\n\n // Convert the shared secret to a CryptoKey\n const key = await crypto.subtle.importKey(\n 'raw',\n sharedSecret,\n { name: 'AES-GCM' },\n false,\n ['decrypt']\n )\n\n // Decrypt the message\n const decryptedContent = await crypto.subtle.decrypt(\n algorithm,\n key,\n encryptedMessage.slice(12)\n )\n\n return new Uint8Array(decryptedContent)\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Atoms must have an index so that they can be sorted in a Molecule\n */\nexport default class AtomIndexException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'There is an atom without an index', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'AtomIndexException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Molecular hash does not match - contents may have been tampered with\n */\nexport default class MolecularHashMismatchException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'The molecular hash does not match', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'MolecularHashMismatchException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * A molecular hash is always required.\n */\nexport default class MolecularHashMissingException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'The molecular hash is missing', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'MolecularHashMissingException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Exception for bad GraphQL responses\n */\nexport default class PolicyInvalidException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = '', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'PolicyInvalidException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when a molecular signature is malformed\n */\nexport default class SignatureMalformedException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'OTS malformed', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'SignatureMalformedException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when signature does not match the public key\n */\nexport default class SignatureMismatchException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'One-time signature (OTS) does not match!', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'SignatureMismatchException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when you try to transfer more tokens than you have available\n */\nexport default class TransferBalanceException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Insufficient balance to make transfer', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'TransferBalanceException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when V isotope atoms are arranged incorrectly\n */\nexport default class TransferMalformedException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Token transfer atoms are malformed', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'TransferMalformedException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when the token slugs of wallets involved in a transfer do not match\n */\nexport default class TransferMismatchedException extends BaseException {\n /**\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Token slugs for wallets in transfer do not match!', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'TransferMismatchedException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when the remainder atom in a V isotope transfer is incorrect\n */\nexport default class TransferRemainderException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Invalid remainder provided', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'TransferRemainderException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when attempting to transfer tokens to yourself\n */\nexport default class TransferToSelfException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Sender and recipient(s) cannot be the same', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'TransferToSelfException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when V isotope atom amounts do not add up to zero\n */\nexport default class TransferUnbalancedException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Token transfer atoms are unbalanced', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'TransferUnbalancedException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * M isotope atoms must always contain metadata\n */\nexport default class MetaMissingException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Empty meta data.', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'MetaMissingException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when trying to use an inappropriate token slug for a particular isotope\n */\nexport default class WrongTokenTypeException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Wrong type of token for this isotope', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'WrongTokenTypeException'\n }\n}\n","import BaseException from './BaseException.js'\n\n/**\n * Generic code exception\n */\nexport default class BatchIdException extends BaseException {\n /**\n * @param {string|null} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Incorrect BatchId', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'BatchIdException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nexport default class Meta {\n constructor ({}) {\n const args = arguments[0]\n\n for (const key in args) {\n this[`__${ key }`] = args[key]\n }\n }\n\n static toObject (object) {\n return new this(object)\n }\n\n /**\n *\n * @returns {{}}\n */\n toJSON () {\n const object = {}\n\n for (const item of Object.keys(this)) {\n if (item.substring(0, 2) === '__') {\n object[item.substring(2, item.length)] = this[item]\n }\n }\n\n return object\n }\n}\n","import BaseException from '../../../exception/BaseException.js'\n\nexport default class RuleArgumentException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'An incorrect argument!', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'RuleArgumentException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Generic code exception\n */\nexport default class CodeException extends BaseException {\n /**\n * @param {string|null} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Code exception', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'CodeException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Meta from './Meta.js'\nimport RuleArgumentException from './exception/RuleArgumentException.js'\nimport { isNumeric } from '../../libraries/strings.js'\nimport { intersect } from '../../libraries/array.js'\nimport CodeException from '../../exception/CodeException.js'\n\nexport default class Callback {\n /**\n *\n * @param {string} action\n * @param {string|null} metaType\n * @param {string|null} metaId\n * @param {Meta|null} meta\n * @param {string|null} address\n * @param {string|null} token\n * @param {string|null} amount\n * @param {string|null} comparison\n */\n constructor ({\n action,\n metaType = null,\n metaId = null,\n meta = null,\n address = null,\n token = null,\n amount = null,\n comparison = null\n }) {\n if (meta) {\n this.meta = meta\n }\n\n if (!action) {\n throw new RuleArgumentException('Callback structure violated, missing mandatory \"action\" parameter.')\n }\n\n this.__metaId = metaId\n this.__metaType = metaType\n this.__action = action\n this.__address = address\n this.__token = token\n this.__amount = amount\n this.__comparison = comparison\n }\n\n /**\n *\n * @param {string} comparison\n */\n set comparison (comparison) {\n this.__comparison = comparison\n }\n\n /**\n *\n * @param {string} amount\n */\n set amount (amount) {\n if (!isNumeric(amount)) {\n throw new CodeException('Parameter amount should be a string containing numbers')\n }\n this.__amount = amount\n }\n\n /**\n *\n * @param {string} token\n */\n set token (token) {\n this.__token = token\n }\n\n /**\n *\n * @param {string} address\n */\n set address (address) {\n this.__address = address\n }\n\n /**\n *\n * @param {Meta|object} meta\n */\n set meta (meta) {\n this.__meta = meta instanceof Meta ? meta : Meta.toObject(meta)\n }\n\n /**\n *\n * @param {string} metaType\n */\n set metaType (metaType) {\n this.__metaType = metaType\n }\n\n /**\n *\n * @param {string} metaId\n */\n set metaId (metaId) {\n this.__metaId = metaId\n }\n\n /**\n *\n * @param {object} object\n *\n * @return Callback\n */\n static toObject (object) {\n const callback = new Callback({\n action: object.action\n })\n\n if (object.metaType) {\n callback.metaType = object.metaType\n }\n\n if (object.metaId) {\n callback.metaId = object.metaId\n }\n\n if (object.meta) {\n callback.meta = object.meta\n }\n\n if (object.address) {\n callback.address = object.address\n }\n\n if (object.token) {\n callback.token = object.token\n }\n\n if (object.amount) {\n callback.amount = object.amount\n }\n\n if (object.comparison) {\n callback.comparison = object.comparison\n }\n\n return callback\n }\n\n /**\n *\n * @return {{action: string}}\n */\n toJSON () {\n const meta = {\n action: this.__action\n }\n\n if (this.__metaType) {\n meta.metaType = this.__metaType\n }\n if (this.__metaId) {\n meta.metaId = this.__metaId\n }\n if (this.__meta) {\n meta.meta = this.__meta\n }\n\n if (this.__address) {\n meta.address = this.__address\n }\n\n if (this.__token) {\n meta.token = this.__token\n }\n\n if (this.__amount) {\n meta.amount = this.__amount\n }\n\n if (this.__comparison) {\n meta.comparison = this.__comparison\n }\n\n return meta\n }\n\n /**\n * @return {boolean}\n */\n isReject () {\n return this._is('reject')\n }\n\n /**\n * @return {boolean}\n */\n isMeta () {\n const prop = intersect(Object.keys(this.toJSON()), ['action', 'metaId', 'metaType', 'meta'])\n\n return prop.length === 4 && this._is('meta')\n }\n\n /**\n * @return {boolean}\n */\n isCollect () {\n const prop = intersect(Object.keys(this.toJSON()), ['action', 'address', 'token', 'amount', 'comparison'])\n\n return prop.length === 5 && this._is('collect')\n }\n\n /**\n * @return {boolean}\n */\n isBuffer () {\n const prop = intersect(Object.keys(this.toJSON()), ['action', 'address', 'token', 'amount', 'comparison'])\n\n return prop.length === 5 && this._is('buffer')\n }\n\n /**\n * @return {boolean}\n */\n isRemit () {\n const prop = intersect(Object.keys(this.toJSON()), ['action', 'token', 'amount'])\n\n return prop.length === 3 && this._is('remit')\n }\n\n /**\n * @return {boolean}\n */\n isBurn () {\n const prop = intersect(Object.keys(this.toJSON()), ['action', 'token', 'amount', 'comparison'])\n\n return prop.length === 4 && this._is('burn')\n }\n\n /**\n * @param {string} type\n *\n * @return {boolean}\n * @private\n */\n _is (type) {\n return this.__action.toLowerCase() === type.toLowerCase()\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport RuleArgumentException from './exception/RuleArgumentException.js'\n\nexport default class Condition {\n /**\n *\n * @param key\n * @param value\n * @param comparison\n */\n constructor ({\n key,\n value,\n comparison\n }) {\n if ([key, value, comparison].some(item => !item)) {\n throw new RuleArgumentException('Condition::constructor( { key, value, comparison } ) - not all class parameters are initialised!')\n }\n\n this.__key = key\n this.__value = value\n this.__comparison = comparison\n }\n\n /**\n * @param object\n * @return {Condition}\n */\n static toObject (object) {\n return new this({\n key: object.key,\n value: object.value,\n comparison: object.comparison\n })\n }\n\n /**\n * @return {{comparison, value, key}}\n */\n toJSON () {\n return {\n key: this.__key,\n value: this.__value,\n comparison: this.__comparison\n }\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Callback from './Callback.js'\nimport Condition from './Condition.js'\nimport RuleArgumentException from './exception/RuleArgumentException.js'\nimport MetaMissingException from '../../exception/MetaMissingException.js'\n\nexport default class Rule {\n /**\n *\n * @param {Condition[]} condition\n * @param {Callback[]} callback\n */\n constructor ({\n condition = [],\n callback = []\n }) {\n for (const element of condition) {\n if (!(element instanceof Condition)) {\n throw new RuleArgumentException()\n }\n }\n\n for (const element of callback) {\n if (!(element instanceof Callback)) {\n throw new RuleArgumentException()\n }\n }\n\n this.__condition = condition\n this.__callback = callback\n }\n\n /**\n *\n * @param {Condition[]|{}} condition\n */\n set comparison (condition) {\n this.__condition.push(condition instanceof Condition ? condition : Condition.toObject(condition))\n }\n\n /**\n * @param {Callback[]|{}} callback\n */\n set callback (callback) {\n this.__callback.push(callback instanceof Callback ? callback : Callback.toObject(callback))\n }\n\n /**\n *\n * @param {object} object\n *\n * @return {Rule}\n */\n static toObject (object) {\n if (!object.condition) {\n throw new MetaMissingException('Rule::toObject() - Incorrect rule format! There is no condition field.')\n }\n if (!object.callback) {\n throw new MetaMissingException('Rule::toObject() - Incorrect rule format! There is no callback field.')\n }\n\n const rule = new Rule({})\n\n for (const condition of object.condition) {\n rule.comparison = condition\n }\n\n for (const callback of object.callback) {\n rule.callback = callback\n }\n\n return rule\n }\n\n /**\n * @returns {{condition: *, callback: Callback[]}}\n */\n toJSON () {\n return {\n condition: this.__condition,\n callback: this.__callback\n }\n }\n}\n","/**\n * Utility class for accessing nested object properties using dot notation\n */\nexport default class Dot {\n /**\n * Initialize the Dot utility with the given object and key path\n * @param {object|array} obj - The object or array to traverse\n * @param {string} keys - The dot-notated string of keys\n * @private\n */\n static __init (obj, keys) {\n this.arr = String(keys).split('.')\n this.key = this.arr.shift()\n\n // Convert to number if the key is a valid integer\n const numberKey = Number(this.key)\n if (Number.isInteger(numberKey)) {\n this.key = numberKey\n }\n\n this.__nextKey = this.arr.length\n this.__next = this.__tic(obj)\n }\n\n /**\n * Check if the current key exists in the object\n * @param {object|array} obj - The object or array to check\n * @return {boolean} - Whether the key exists\n * @private\n */\n static __tic (obj) {\n if (!Array.isArray(obj) && !(obj instanceof Object)) {\n return false\n }\n\n return typeof obj[this.key] !== 'undefined'\n }\n\n /**\n * Check if a nested property exists in an object using dot notation\n * @param {object|array} obj - The object or array to search\n * @param {string} keys - The path to the property, using dot notation\n * @return {boolean} - True if the property exists, false otherwise\n */\n static has (obj, keys) {\n this.__init(obj, keys)\n\n if (!this.__next) {\n return false\n }\n if (this.__nextKey === 0) {\n return true\n }\n\n return this.has(obj[this.key], this.arr.join('.'))\n }\n\n /**\n * Get a nested property from an object using dot notation\n * @param {object|array} obj - The object or array to search\n * @param {string} keys - The path to the property, using dot notation\n * @param {*} [def=null] - The default value to return if the property is not found\n * @return {*} - The value of the property, or the default value if not found\n */\n static get (obj, keys, def = null) {\n this.__init(obj, keys)\n\n if (!this.__next) {\n return def\n }\n if (this.__nextKey === 0) {\n return obj[this.key]\n }\n\n return this.get(obj[this.key], this.arr.join('.'), def)\n }\n\n /**\n * Set a nested property in an object using dot notation\n * @param {object|array} obj - The object or array to modify\n * @param {string} keys - The path to the property, using dot notation\n * @param {*} value - The value to set\n * @return {object|array} - The modified object or array\n */\n static set (obj, keys, value) {\n const parts = keys.split('.')\n let current = obj\n const lastIndex = parts.length - 1\n\n for (let i = 0; i < lastIndex; i++) {\n const key = parts[i]\n const numberKey = Number(key)\n const useNumberKey = Number.isInteger(numberKey)\n\n if (!(useNumberKey ? numberKey : key in current)) {\n current[useNumberKey ? numberKey : key] = parts[i + 1].match(/^\\d+$/) ? [] : {}\n }\n current = current[useNumberKey ? numberKey : key]\n }\n\n const lastKey = parts[lastIndex]\n const lastNumberKey = Number(lastKey)\n current[Number.isInteger(lastNumberKey) ? lastNumberKey : lastKey] = value\n\n return obj\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n */\nimport AtomIndexException from './../exception/AtomIndexException.js'\nimport AtomsMissingException from './../exception/AtomsMissingException.js'\nimport MolecularHashMismatchException from './../exception/MolecularHashMismatchException.js'\nimport MolecularHashMissingException from './../exception/MolecularHashMissingException.js'\nimport PolicyInvalidException from './../exception/PolicyInvalidException.js'\nimport SignatureMalformedException from './../exception/SignatureMalformedException.js'\nimport SignatureMismatchException from './../exception/SignatureMismatchException.js'\nimport TransferBalanceException from './../exception/TransferBalanceException.js'\nimport TransferMalformedException from './../exception/TransferMalformedException.js'\nimport TransferMismatchedException from './../exception/TransferMismatchedException.js'\nimport TransferRemainderException from './../exception/TransferRemainderException.js'\nimport TransferToSelfException from './../exception/TransferToSelfException.js'\nimport TransferUnbalancedException from './../exception/TransferUnbalancedException.js'\nimport MetaMissingException from './../exception/MetaMissingException.js'\nimport WrongTokenTypeException from './../exception/WrongTokenTypeException.js'\nimport BatchIdException from './../exception/BatchIdException.js'\nimport Atom from './../Atom.js'\nimport Meta from './../Meta.js'\nimport Molecule from './../Molecule.js'\nimport Wallet from './../Wallet.js'\nimport Rule from '../instance/Rules/Rule.js'\nimport {\n base64ToHex,\n chunkSubstr\n} from './strings.js'\nimport JsSHA from 'jssha'\nimport Dot from './../libraries/Dot.js'\n\n/**\n *\n */\nexport default class CheckMolecule {\n /**\n *\n * @param molecule\n */\n constructor (molecule) {\n // No molecular hash?\n if (molecule.molecularHash === null) {\n throw new MolecularHashMissingException()\n }\n\n // No atoms?\n if (!molecule.atoms.length) {\n throw new AtomsMissingException()\n }\n\n // Check atom indexes\n for (const atom of molecule.atoms) {\n if (atom.index === null) {\n throw new AtomIndexException()\n }\n }\n\n this.molecule = molecule\n }\n\n /**\n *\n * @param senderWallet\n * @returns {false|*|boolean}\n */\n verify (senderWallet) {\n return this.molecularHash() &&\n this.ots() &&\n this.batchId() &&\n this.continuId() &&\n this.isotopeM() &&\n this.isotopeT() &&\n this.isotopeC() &&\n this.isotopeU() &&\n this.isotopeI() &&\n this.isotopeR() &&\n this.isotopeP() &&\n this.isotopeA() &&\n this.isotopeB() &&\n this.isotopeF() &&\n this.isotopeV(senderWallet)\n }\n\n /**\n *\n * @returns {boolean}\n */\n continuId () {\n const firstAtom = this.molecule.atoms[0]\n\n if (firstAtom.token === 'USER' && this.molecule.getIsotopes('I').length < 1) {\n throw new AtomsMissingException('Check::continuId() - Molecule is missing required ContinuID Atom!')\n }\n\n return true\n }\n\n /**\n *\n * @returns {boolean}\n */\n batchId () {\n if (this.molecule.atoms.length > 0) {\n const signingAtom = this.molecule.atoms[0]\n\n if (signingAtom.isotope === 'V' && signingAtom.batchId !== null) {\n const atoms = this.molecule.getIsotopes('V')\n const remainderAtom = atoms[atoms.length - 1]\n\n if (signingAtom.batchId !== remainderAtom.batchId) {\n throw new BatchIdException()\n }\n\n for (const atom of atoms) {\n if (atom.batchId === null) {\n throw new BatchIdException()\n }\n }\n }\n\n return true\n }\n\n throw new BatchIdException()\n }\n\n /**\n *\n * @returns {boolean}\n */\n isotopeI () {\n for (const atom of this.molecule.getIsotopes('I')) {\n if (atom.token !== 'USER') {\n throw new WrongTokenTypeException(`Check::isotopeI() - \"${ atom.token }\" is not a valid Token slug for \"${ atom.isotope }\" isotope Atoms!`)\n }\n\n if (atom.index === 0) {\n throw new AtomIndexException(`Check::isotopeI() - Isotope \"${ atom.isotope }\" Atoms must have a non-zero index!`)\n }\n }\n\n return true\n }\n\n /**\n *\n * @returns {boolean}\n */\n isotopeU () {\n for (const atom of this.molecule.getIsotopes('U')) {\n if (atom.token !== 'AUTH') {\n throw new WrongTokenTypeException(`Check::isotopeU() - \"${ atom.token }\" is not a valid Token slug for \"${ atom.isotope }\" isotope Atoms!`)\n }\n\n if (atom.index !== 0) {\n throw new AtomIndexException(`Check::isotopeU() - Isotope \"${ atom.isotope }\" Atoms must have an index equal to 0!`)\n }\n }\n\n return true\n }\n\n /**\n *\n * @returns {boolean}\n */\n isotopeM () {\n const policyArray = ['readPolicy', 'writePolicy']\n\n for (/** @type {Atom} */ const atom of this.molecule.getIsotopes('M')) {\n if (atom.meta.length < 1) {\n throw new MetaMissingException()\n }\n\n if (atom.token !== 'USER') {\n throw new WrongTokenTypeException(`Check::isotopeM() - \"${ atom.token }\" is not a valid Token slug for \"${ atom.isotope }\" isotope Atoms!`)\n }\n\n const metas = Meta.aggregateMeta(atom.meta)\n\n for (const key of policyArray) {\n let policy = metas[key]\n\n if (policy) {\n policy = JSON.parse(policy)\n\n for (const [policyName, policyValue] of Object.entries(policy)) {\n if (!policyArray.includes(policyName)) {\n if (!Object.keys(metas).includes(policyName)) {\n throw new PolicyInvalidException(`${ policyName } is missing from the meta.`)\n }\n\n for (const value of policyValue) {\n if (!Wallet.isBundleHash(value) && !['all', 'self'].includes(value)) {\n throw new PolicyInvalidException(`${ value } does not correspond to the format of the policy.`)\n }\n }\n }\n }\n }\n }\n }\n\n return true\n }\n\n /**\n *\n * @returns {boolean}\n */\n isotopeC () {\n for (const atom of this.molecule.getIsotopes('C')) {\n if (atom.token !== 'USER') {\n throw new WrongTokenTypeException(`Check::isotopeC() - \"${ atom.token }\" is not a valid Token slug for \"${ atom.isotope }\" isotope Atoms!`)\n }\n\n if (atom.index !== 0) {\n throw new AtomIndexException(`Check::isotopeC() - Isotope \"${ atom.isotope }\" Atoms must have an index equal to 0!`)\n }\n }\n\n return true\n }\n\n /**\n *\n * @returns {boolean}\n */\n isotopeT () {\n for (const atom of this.molecule.getIsotopes('T')) {\n const meta = atom.aggregatedMeta()\n const metaType = String(atom.metaType).toLowerCase()\n\n if (metaType === 'wallet') {\n for (const key of ['position', 'bundle']) {\n if (!Object.prototype.hasOwnProperty.call(meta, key) || !meta[key]) {\n throw new MetaMissingException(`Check::isotopeT() - Required meta field \"${ key }\" is missing!`)\n }\n }\n }\n\n for (const key of ['token']) {\n if (!Object.prototype.hasOwnProperty.call(meta, key) || !meta[key]) {\n throw new MetaMissingException(`Check::isotopeT() - Required meta field \"${ key }\" is missing!`)\n }\n }\n\n if (atom.token !== 'USER') {\n throw new WrongTokenTypeException(`Check::isotopeT() - \"${ atom.token }\" is not a valid Token slug for \"${ atom.isotope }\" isotope Atoms!`)\n }\n\n if (atom.index !== 0) {\n throw new AtomIndexException(`Check::isotopeT() - Isotope \"${ atom.isotope }\" Atoms must have an index equal to 0!`)\n }\n }\n\n return true\n }\n\n /**\n *\n * @returns {boolean}\n */\n isotopeR () {\n for (const atom of this.molecule.getIsotopes('R')) {\n const metas = atom.aggregatedMeta()\n\n if (metas.policy) {\n const policy = JSON.parse(metas.policy)\n\n if (!Object.keys(policy).every(i => ['read', 'write'].includes(i))) {\n throw new MetaMissingException('Check::isotopeR() - Mixing rules with politics!')\n }\n }\n\n if (metas.rule) {\n const rules = JSON.parse(metas.rule)\n\n if (!Array.isArray(rules)) {\n throw new MetaMissingException('Check::isotopeR() - Incorrect rule format!')\n }\n\n for (const item of rules) {\n Rule.toObject(item)\n }\n\n if (rules.length < 1) {\n throw new MetaMissingException('Check::isotopeR() - No rules!')\n }\n }\n }\n\n return true\n }\n\n /**\n * Validates P-isotope (Peering) atoms\n *\n * @returns {boolean}\n */\n isotopeP () {\n for (const atom of this.molecule.getIsotopes('P')) {\n if (atom.token !== 'USER') {\n throw new WrongTokenTypeException(`Check::isotopeP() - \"${ atom.token }\" is not a valid Token slug for \"${ atom.isotope }\" isotope Atoms!`)\n }\n\n const metas = atom.aggregatedMeta()\n\n if (!Object.prototype.hasOwnProperty.call(metas, 'peerHost') || !metas.peerHost) {\n throw new MetaMissingException('Check::isotopeP() - Required meta field \"peerHost\" is missing!')\n }\n }\n\n return true\n }\n\n /**\n * Validates A-isotope (Append Request) atoms\n *\n * @returns {boolean}\n */\n isotopeA () {\n for (const atom of this.molecule.getIsotopes('A')) {\n if (atom.token !== 'USER') {\n throw new WrongTokenTypeException(`Check::isotopeA() - \"${ atom.token }\" is not a valid Token slug for \"${ atom.isotope }\" isotope Atoms!`)\n }\n\n if (!atom.metaType) {\n throw new MetaMissingException('Check::isotopeA() - Required field \"metaType\" is missing!')\n }\n\n if (!atom.metaId) {\n throw new MetaMissingException('Check::isotopeA() - Required field \"metaId\" is missing!')\n }\n\n const metas = atom.aggregatedMeta()\n\n if (!Object.prototype.hasOwnProperty.call(metas, 'action') || !metas.action) {\n throw new MetaMissingException('Check::isotopeA() - Required meta field \"action\" is missing!')\n }\n }\n\n return true\n }\n\n /**\n * Validates B-isotope (Buffer/Exchange) atoms\n *\n * @returns {boolean}\n */\n isotopeB () {\n const isotopeB = this.molecule.getIsotopes('B')\n\n if (isotopeB.length === 0) {\n return true\n }\n\n for (const atom of isotopeB) {\n // B atoms must reference a wallet bundle\n if (!atom.metaType || atom.metaType !== 'walletBundle') {\n throw new MetaMissingException('Check::isotopeB() - B-isotope atoms must have metaType \"walletBundle\"!')\n }\n\n if (!atom.metaId) {\n throw new MetaMissingException('Check::isotopeB() - B-isotope atoms must have a metaId!')\n }\n\n // Value must be parseable as a number\n const value = Number(atom.value)\n if (Number.isNaN(value)) {\n throw new TransferMalformedException('Check::isotopeB() - B-isotope atom value is not a valid number!')\n }\n }\n\n // V+B balance conservation: sum of all V and B atom values must equal zero\n const vAtoms = this.molecule.getIsotopes('V')\n if (vAtoms.length > 0) {\n let sum = 0\n for (const atom of [...vAtoms, ...isotopeB]) {\n const value = Number(atom.value)\n if (!Number.isNaN(value)) {\n sum += value\n }\n }\n if (sum !== 0) {\n throw new TransferUnbalancedException('Check::isotopeB() - V+B atom values do not balance to zero!')\n }\n }\n\n return true\n }\n\n /**\n * Validates F-isotope (Fusion/NFT) atoms\n *\n * @returns {boolean}\n */\n isotopeF () {\n const isotopeF = this.molecule.getIsotopes('F')\n\n if (isotopeF.length === 0) {\n return true\n }\n\n for (const atom of isotopeF) {\n // F atoms must reference a wallet bundle\n if (!atom.metaType || atom.metaType !== 'walletBundle') {\n throw new MetaMissingException('Check::isotopeF() - F-isotope atoms must have metaType \"walletBundle\"!')\n }\n\n if (!atom.metaId) {\n throw new MetaMissingException('Check::isotopeF() - F-isotope atoms must have a metaId!')\n }\n\n // Value must be parseable\n const value = Number(atom.value)\n if (Number.isNaN(value)) {\n throw new TransferMalformedException('Check::isotopeF() - F-isotope atom value is not a valid number!')\n }\n\n if (value < 0) {\n throw new TransferMalformedException('Check::isotopeF() - F-isotope atom value must not be negative!')\n }\n }\n\n // V+F balance conservation: sum of all V and F atom values must equal zero\n const vAtoms = this.molecule.getIsotopes('V')\n if (vAtoms.length > 0) {\n let sum = 0\n for (const atom of [...vAtoms, ...isotopeF]) {\n const value = Number(atom.value)\n if (!Number.isNaN(value)) {\n sum += value\n }\n }\n if (sum !== 0) {\n throw new TransferUnbalancedException('Check::isotopeF() - V+F atom values do not balance to zero!')\n }\n }\n\n return true\n }\n\n /**\n *\n * @param senderWallet\n * @returns {boolean}\n */\n isotopeV (senderWallet = null) {\n const isotopeV = this.molecule.getIsotopes('V')\n\n if (isotopeV.length === 0) {\n return true\n }\n\n // When B or F atoms are present, cross-isotope conservation is validated\n // by isotopeB()/isotopeF() — skip V-only conservation check\n const hasCrossIsotope = this.molecule.getIsotopes('B').length > 0 ||\n this.molecule.getIsotopes('F').length > 0\n\n const firstAtom = this.molecule.atoms[0]\n\n if (!hasCrossIsotope && firstAtom.isotope === 'V' && isotopeV.length === 2) {\n const endAtom = isotopeV[isotopeV.length - 1]\n\n if (firstAtom.token !== endAtom.token) {\n throw new TransferMismatchedException()\n }\n\n if (endAtom.value < 0) {\n throw new TransferMalformedException()\n }\n\n // Conservation check for 2-atom transfers\n if ((Number(firstAtom.value) + Number(endAtom.value)) !== 0) {\n throw new TransferUnbalancedException()\n }\n\n return true\n }\n\n let sum = 0\n let value = 0\n\n for (const index in this.molecule.atoms) {\n if (Object.prototype.hasOwnProperty.call(this.molecule.atoms, index)) {\n const vAtom = this.molecule.atoms[index]\n\n // Not V? Next...\n if (vAtom.isotope !== 'V') {\n continue\n }\n\n // Making sure we're in integer land\n value = vAtom.value * 1\n\n if (Number.isNaN(value)) {\n throw new TypeError('Invalid isotope \"V\" values')\n }\n\n // Making sure all V atoms of the same token\n if (vAtom.token !== firstAtom.token) {\n throw new TransferMismatchedException()\n }\n\n // Checking non-primary atoms\n if (index > 0) {\n // Negative V atom in a non-primary position?\n if (value < 0) {\n throw new TransferMalformedException()\n }\n\n // Cannot be sending and receiving from the same address\n if (vAtom.walletAddress === firstAtom.walletAddress) {\n throw new TransferToSelfException()\n }\n }\n\n // Adding this Atom's value to the total sum\n sum += value\n }\n }\n\n // V-only conservation: all V atoms must sum to zero (skip for B/F cross-isotope)\n if (!hasCrossIsotope && sum !== 0) {\n throw new TransferUnbalancedException()\n }\n\n // If we're provided with a senderWallet argument, we can perform additional checks\n if (senderWallet) {\n value = firstAtom.value * 1\n\n if (Number.isNaN(value)) {\n throw new TypeError('Invalid isotope \"V\" values')\n }\n\n const remainder = Number(senderWallet.balance) + value\n\n // Is there enough balance to send?\n if (remainder < 0) {\n throw new TransferBalanceException()\n }\n\n // Does the remainder match what should be there in the source wallet, if provided?\n // Skip for cross-isotope (B/F) — conservation is validated by isotopeB()/isotopeF()\n if (!hasCrossIsotope && remainder !== sum) {\n throw new TransferRemainderException()\n }\n } else if (value !== 0) {\n // No senderWallet, but have a remainder?\n throw new TransferRemainderException()\n }\n\n // Looks like we passed all the tests!\n return true\n }\n\n /**\n * Verifies if the hash of all the atoms matches the molecular hash to ensure content has not been messed with\n *\n * @returns {boolean}\n */\n molecularHash () {\n if (this.molecule.molecularHash !== Atom.hashAtoms({\n atoms: this.molecule.atoms\n })) {\n throw new MolecularHashMismatchException()\n }\n\n // Looks like we passed all the tests!\n return true\n }\n\n /**\n * Checks if the provided molecule was signed properly by transforming a collection of signature\n * fragments from its atoms and its molecular hash into a single-use wallet address to be matched\n * against the sender’s address. If it matches, the molecule was correctly signed.\n *\n * @returns {boolean}\n */\n ots () {\n // Convert Hm to numeric notation via EnumerateMolecule(Hm)\n const normalizedHash = this.molecule.normalizedHash()\n\n // Rebuilding OTS out of all the atoms\n let ots = this.molecule.atoms.map(\n atom => atom.otsFragment\n ).reduce(\n (accumulator, otsFragment) => accumulator + otsFragment\n )\n\n // Wrong size? Maybe it's compressed\n if (ots.length !== 2048) {\n // Attempting decompression\n ots = base64ToHex(ots)\n\n // Still wrong? That's a failure\n if (ots.length !== 2048) {\n throw new SignatureMalformedException()\n }\n }\n\n // Subdivide Kk into 16 segments of 256 bytes (128 characters) each\n const otsChunks = chunkSubstr(ots, 128)\n\n let keyFragments = ''\n\n for (const index in otsChunks) {\n let workingChunk = otsChunks[index]\n\n for (let iterationCount = 0, condition = 8 + normalizedHash[index]; iterationCount < condition; iterationCount++) {\n workingChunk = (new JsSHA('SHAKE256', 'TEXT')).update(workingChunk).getHash('HEX', { outputLen: 512 })\n }\n\n keyFragments += workingChunk\n }\n\n // Absorb the hashed Kk into the sponge to receive the digest Dk\n const digestSponge = new JsSHA('SHAKE256', 'TEXT')\n digestSponge.update(keyFragments)\n const digest = digestSponge.getHash('HEX', { outputLen: 8192 })\n\n // Squeeze the sponge to retrieve a 128 byte (64 character) string that should match the sender’s wallet address\n const addressSponge = new JsSHA('SHAKE256', 'TEXT')\n addressSponge.update(digest)\n const address = addressSponge.getHash('HEX', { outputLen: 256 })\n\n // Signing atom\n const signingAtom = this.molecule.atoms[0]\n\n // Get a signing address\n let signingAddress = signingAtom.walletAddress\n\n // Get signing wallet from first atom's metas\n const signingWallet = Dot.get(signingAtom.aggregatedMeta(), 'signingWallet')\n\n // Try to get custom signing address from the metas (local molecule with server secret)\n if (signingWallet) {\n signingAddress = Dot.get(JSON.parse(signingWallet), 'address')\n }\n\n if (address !== signingAddress) {\n throw new SignatureMismatchException()\n }\n\n // Looks like we passed all the tests!\n return true\n }\n\n /**\n * Converts server-side molecule data (from GraphQL meta query responses)\n * into a Molecule instance suitable for verification via CheckMolecule.\n *\n * Handles field mapping differences between server and client:\n * - tokenSlug → token\n * - metasJson (JSON string) → meta (array of {key, value})\n * - bundleHash → bundle\n *\n * @param {object} serverData - Molecule data from GraphQL response\n * @param {string} serverData.molecularHash\n * @param {string} serverData.bundleHash\n * @param {string|null} serverData.cellSlug\n * @param {string|null} serverData.status\n * @param {string|null} serverData.createdAt\n * @param {array} serverData.atoms - Array of server-format atom objects\n * @return {Molecule}\n */\n static fromServerData ({\n molecularHash,\n bundleHash,\n cellSlug = null,\n status = null,\n createdAt = null,\n atoms = []\n }) {\n const mappedAtoms = atoms.map(serverAtom => {\n let meta = []\n if (serverAtom.metasJson) {\n try {\n const parsed = JSON.parse(serverAtom.metasJson)\n if (Array.isArray(parsed)) {\n // Already in [{key, value}] format\n meta = parsed\n } else if (parsed && typeof parsed === 'object') {\n // Object format {key1: val1, key2: val2} — convert to [{key, value}] pairs\n meta = Object.entries(parsed).map(([key, value]) => ({ key, value }))\n }\n } catch (e) {\n meta = []\n }\n }\n\n return {\n position: serverAtom.position || null,\n walletAddress: serverAtom.walletAddress || null,\n isotope: serverAtom.isotope || null,\n token: serverAtom.tokenSlug || serverAtom.token || null,\n value: serverAtom.value != null ? String(serverAtom.value) : null,\n batchId: serverAtom.batchId || null,\n metaType: serverAtom.metaType || null,\n metaId: serverAtom.metaId || null,\n meta,\n index: serverAtom.index != null ? serverAtom.index : null,\n otsFragment: serverAtom.otsFragment || null,\n createdAt: serverAtom.createdAt || null\n }\n })\n\n return Molecule.fromJSON({\n molecularHash,\n bundle: bundleHash,\n cellSlug,\n status,\n createdAt,\n atoms: mappedAtoms\n })\n }\n\n /**\n * Verifies a molecule reconstructed from server-side GraphQL data.\n * Returns an object with verification result and any error details.\n *\n * @param {object} moleculeData - Server molecule data (same format as fromServerData)\n * @return {{ molecularHash: string, verified: boolean, error: string|null }}\n */\n static verifyFromServerData (moleculeData) {\n try {\n const molecule = CheckMolecule.fromServerData(moleculeData)\n new CheckMolecule(molecule).verify()\n return {\n molecularHash: moleculeData.molecularHash,\n verified: true,\n error: null\n }\n } catch (error) {\n return {\n molecularHash: moleculeData.molecularHash || null,\n verified: false,\n error: error.message || String(error)\n }\n }\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when the node does not have enough tokens to fulfill a T request\n */\nexport default class BalanceInsufficientException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Insufficient balance for requested transfer', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'BalanceInsufficientException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when a negative amount is provided\n */\nexport default class NegativeAmountException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Amount cannot be negative!', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'NegativeAmountException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Atom from './Atom.js'\nimport AtomMeta from './AtomMeta.js'\nimport Wallet from './Wallet.js'\nimport JsSHA from 'jssha'\nimport {\n chunkSubstr,\n hexToBase64\n} from './libraries/strings.js'\nimport CheckMolecule from './libraries/CheckMolecule.js'\nimport {\n generateBatchId,\n generateBundleHash\n} from './libraries/crypto.js'\nimport Dot from './libraries/Dot.js'\nimport Rule from './instance/Rules/Rule.js'\nimport AtomsMissingException from './exception/AtomsMissingException.js'\nimport BalanceInsufficientException from './exception/BalanceInsufficientException.js'\nimport NegativeAmountException from './exception/NegativeAmountException.js'\nimport SignatureMalformedException from './exception/SignatureMalformedException.js'\nimport versions from './versions/index.js'\n\n/**\n * Molecule class used for committing changes to the ledger\n */\nexport default class Molecule {\n /**\n * Class constructor\n *\n * @param {string|null} secret\n * @param {string|null} bundle\n * @param {Wallet|null} sourceWallet\n * @param {Wallet|null} remainderWallet\n * @param {string|null} cellSlug\n * @param {string|number|null} version\n */\n constructor ({\n secret = null,\n bundle = null,\n sourceWallet = null,\n remainderWallet = null,\n cellSlug = null,\n version = null\n }) {\n this.status = null\n this.molecularHash = null\n this.createdAt = String(+new Date())\n this.cellSlugOrigin = this.cellSlug = cellSlug\n this.secret = secret\n this.bundle = bundle\n this.sourceWallet = sourceWallet\n this.atoms = []\n this.parentHashes = []\n if (version !== null && Object.prototype.hasOwnProperty.call(versions, version)) {\n this.version = String(version)\n }\n\n // Set the remainder wallet for this transaction\n if (remainderWallet || sourceWallet) {\n this.remainderWallet = remainderWallet || Wallet.create({\n secret,\n bundle,\n token: sourceWallet.token,\n batchId: sourceWallet.batchId,\n characters: sourceWallet.characters\n })\n }\n }\n\n /**\n * Sets parent molecular hashes for DAG linkage\n *\n * @param {string[]} hashes - Array of parent molecular hash strings\n * @return {Molecule} this instance for chaining\n */\n withParentHashes (hashes) {\n this.parentHashes = Array.isArray(hashes) ? [...hashes] : []\n return this\n }\n\n /**\n * Returns the cell slug delimiter\n *\n * @return {string}\n */\n get cellSlugDelimiter () {\n return '.'\n }\n\n /**\n * Filters the atoms array by the supplied isotope list\n *\n * @param {string|array} isotopes\n * @param {array} atoms\n * @returns {*[]}\n */\n static isotopeFilter (isotopes, atoms) {\n if (!Array.isArray(isotopes)) {\n isotopes = [isotopes]\n }\n return atoms.filter(atom => isotopes.includes(atom.isotope))\n }\n\n /**\n * Generates the next atomic index\n *\n * @param {array} atoms\n * @return {number}\n */\n static generateNextAtomIndex (atoms) {\n return atoms.length\n }\n\n /**\n * Converts a JSON object into a Molecule Structure instance\n *\n * @param {string} json\n * @return {object}\n * @throws {AtomsMissingException}\n */\n static jsonToObject (json) {\n const target = Object.assign(new Molecule({}), JSON.parse(json))\n const properties = Object.keys(new Molecule({}))\n\n if (!Array.isArray(target.atoms)) {\n throw new AtomsMissingException()\n }\n\n for (const index in Object.keys(target.atoms)) {\n target.atoms[index] = Atom.jsonToObject(JSON.stringify(target.atoms[index]))\n\n for (const property of ['position', 'walletAddress', 'isotope']) {\n if (target.atoms[index].isotope.toLowerCase() !== 'r' && (typeof target.atoms[index][property] === 'undefined' || target.atoms[index][property] === null)) {\n throw new AtomsMissingException('MolecularStructure::jsonToObject() - Required Atom properties are missing!')\n }\n }\n }\n\n for (const property in target) {\n if (Object.prototype.hasOwnProperty.call(target, property) && !properties.includes(property)) {\n delete target[property]\n }\n }\n\n target.atoms = Atom.sortAtoms(target.atoms)\n\n return target\n }\n\n /**\n * Accept a string of letters and numbers, and outputs a collection of decimals representing each\n * character according to a pre-defined dictionary. Input string would typically be 64-character\n * hexadecimal string featuring numbers from 0 to 9 and characters from a to f - a total of 15\n * unique symbols. To ensure that string has an even number of symbols, convert it to Base 17\n * (adding G as a possible symbol). Map each symbol to integer values as follows:\n * 0 1 2 3 4 5 6 7 8 9 a b c d e f g\n * -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8\n *\n * @param {string} hash\n * @return {array}\n */\n static enumerate (hash) {\n const mapped = {\n 0: -8,\n 1: -7,\n 2: -6,\n 3: -5,\n 4: -4,\n 5: -3,\n 6: -2,\n 7: -1,\n 8: 0,\n 9: 1,\n a: 2,\n b: 3,\n c: 4,\n d: 5,\n e: 6,\n f: 7,\n g: 8\n }\n const target = []\n const hashList = hash.toLowerCase().split('')\n\n for (let index = 0, len = hashList.length; index < len; ++index) {\n const symbol = hashList[index]\n\n if (typeof mapped[symbol] !== 'undefined') {\n target[index] = mapped[symbol]\n }\n }\n\n return target\n }\n\n /**\n * Normalize enumerated string to ensure that the total sum of all symbols is exactly zero. This\n * ensures that exactly 50% of the WOTS+ key is leaked with each usage, ensuring predictable key\n * safety:\n * The sum of each symbol within Hm shall be presented by m\n * While m0 iterate across that set’s integers as Im:\n * If m0 and Im>-8 , let Im=Im-1\n * If m<0 and Im<8 , let Im=Im+1\n * If m=0, stop the iteration\n *\n * @param {array} mappedHashArray\n * @return {array}\n */\n static normalize (mappedHashArray) {\n let total = mappedHashArray.reduce((total, num) => total + num)\n\n const totalCondition = total < 0\n\n while (total < 0 || total > 0) {\n for (const index of Object.keys(mappedHashArray)) {\n const condition = totalCondition ? mappedHashArray[index] < 8 : mappedHashArray[index] > -8\n\n if (condition) {\n const process = totalCondition ? [++mappedHashArray[index], ++total] : [--mappedHashArray[index], --total]\n\n if (total === 0) {\n break\n }\n }\n }\n }\n\n return mappedHashArray\n }\n\n /**\n *\n * @param isotopes\n * @returns {*[]}\n */\n getIsotopes (isotopes) {\n return Molecule.isotopeFilter(isotopes, this.atoms)\n }\n\n /**\n * Generates the next atomic index\n *\n * @return {number}\n */\n generateIndex () {\n return Molecule.generateNextAtomIndex(this.atoms)\n }\n\n /**\n * Fills a Molecule's properties with the provided object\n *\n * @param {Molecule} molecule\n */\n fill (molecule) {\n for (const key in Object.keys(molecule)) {\n this[key] = molecule[key]\n }\n }\n\n /**\n *\n * @param {Atom} atom\n * @returns {Molecule}\n */\n addAtom (atom) {\n // Reset the molecular hash\n this.molecularHash = null\n\n // Set atom's index\n atom.index = this.generateIndex()\n atom.version = this.version\n\n // Add atom\n this.atoms.push(atom)\n\n // Sort atoms\n this.atoms = Atom.sortAtoms(this.atoms)\n\n return this\n }\n\n /**\n * Add user remainder atom for ContinuID\n *\n * @return {Molecule}\n */\n addContinuIdAtom () {\n // If remainder wallet is not USER token, create a new USER remainder wallet\n if (!this.remainderWallet || this.remainderWallet.token !== 'USER') {\n this.remainderWallet = Wallet.create({\n secret: this.secret,\n bundle: this.bundle\n })\n }\n\n // ContinuID metadata for chain integrity validation (matching Rust SDK GAP-07-002).\n // These are atom meta fields (not core fields), so they don't affect molecular hash.\n const continuIdMeta = {}\n\n // previousPosition: the source wallet's position being consumed\n if (this.sourceWallet && this.sourceWallet.position) {\n continuIdMeta.previousPosition = this.sourceWallet.position\n }\n\n // pubkey: ML-KEM public key for encrypted communication\n if (this.remainderWallet.pubkey) {\n continuIdMeta.pubkey = this.remainderWallet.pubkey\n }\n\n // characters: encoding format for the wallet\n if (this.remainderWallet.characters) {\n continuIdMeta.characters = this.remainderWallet.characters\n }\n\n this.addAtom(Atom.create({\n isotope: 'I',\n wallet: this.remainderWallet,\n metaType: 'walletBundle',\n metaId: this.remainderWallet.bundle,\n meta: new AtomMeta(continuIdMeta)\n }))\n return this\n }\n\n /**\n *\n * @param {string} metaType\n * @param {string} metaId\n * @param {object} meta\n * @param {object} policy\n *\n * @return {Molecule}\n */\n addPolicyAtom ({\n metaType,\n metaId,\n meta = {},\n policy = {}\n }) {\n // AtomMeta object initialization\n const atomMeta = new AtomMeta(meta)\n atomMeta.addPolicy(policy)\n\n const wallet = Wallet.create({\n secret: this.secret,\n bundle: this.sourceWallet.bundle,\n token: 'USER'\n })\n\n this.addAtom(Atom.create({\n wallet,\n isotope: 'R',\n metaType,\n metaId,\n meta: atomMeta\n }))\n return this\n }\n\n /**\n *\n * @param tokenUnits\n * @param recipientWallet\n * @returns {Molecule}\n */\n fuseToken (tokenUnits, recipientWallet) {\n // Calculate amount\n const amount = tokenUnits.length\n\n if ((this.sourceWallet.balance - amount) < 0) {\n throw new BalanceInsufficientException()\n }\n\n // Initializing a new Atom to remove tokens from source\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.sourceWallet,\n value: -amount\n }))\n\n // Add F isotope for fused tokens creation\n this.addAtom(Atom.create({\n isotope: 'F',\n wallet: recipientWallet,\n value: 1,\n metaType: 'walletBundle',\n metaId: recipientWallet.bundle\n }))\n\n // Initializing a new Atom to remove tokens from source\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.remainderWallet,\n value: this.sourceWallet.balance - amount,\n metaType: 'walletBundle',\n metaId: this.remainderWallet.bundle\n }))\n\n return this\n }\n\n /**\n * Burns some amount of tokens from a wallet\n *\n * @param {number} amount\n * @param {string|null} walletBundle\n * @return {Molecule}\n */\n burnToken ({\n amount,\n walletBundle = null\n }) {\n if (amount < 0.0) {\n throw new NegativeAmountException('Molecule::burnToken() - Amount to burn must be positive!')\n }\n\n if ((this.sourceWallet.balance - amount) < 0) {\n throw new BalanceInsufficientException()\n }\n\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.sourceWallet,\n value: -amount\n }))\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.remainderWallet,\n value: this.sourceWallet.balance - amount,\n metaType: 'walletBundle',\n metaId: this.remainderWallet.bundle\n }))\n\n return this\n }\n\n /*\n * Replenishes non-finite token supplies\n *\n * @param {number} amount\n * @param {string} token\n * @param {array|object} metas\n * @return {Molecule}\n */\n replenishToken ({\n amount,\n units = []\n }) {\n if (amount < 0) {\n throw new NegativeAmountException('Molecule::replenishToken() - Amount to replenish must be positive!')\n }\n\n // Special code for the token unit logic\n if (units.length) {\n // Prepare token units to formatted style\n units = Wallet.getTokenUnits(units)\n\n // Merge token units with source wallet & new items\n this.remainderWallet.tokenUnits = this.sourceWallet.tokenUnits\n for (const unit of units) {\n this.remainderWallet.tokenUnits.push(unit)\n }\n this.remainderWallet.balance = String(this.remainderWallet.tokenUnits.length)\n\n // Override first atom's token units to replenish values\n this.sourceWallet.tokenUnits = units\n this.sourceWallet.balance = String(this.sourceWallet.tokenUnits.length)\n } else {\n // Update wallet's balances\n this.remainderWallet.balance = String(Number(this.sourceWallet.balance) + amount)\n this.sourceWallet.balance = String(amount)\n }\n\n // Initializing a new Atom to remove tokens from source\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.sourceWallet,\n value: Number(this.sourceWallet.balance)\n }))\n\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.remainderWallet,\n value: Number(this.remainderWallet.balance),\n metaType: 'walletBundle',\n metaId: this.remainderWallet.bundle\n }))\n\n return this\n }\n\n /**\n * Initialize a V-type molecule to transfer value from one wallet to another, with a third,\n * regenerated wallet receiving the remainder\n *\n * @param {Wallet} recipientWallet\n * @param {number} amount\n * @return {Molecule}\n */\n initValue ({\n recipientWallet,\n amount\n }) {\n if (this.sourceWallet.balance - amount < 0) {\n throw new BalanceInsufficientException()\n }\n\n // Initializing a new Atom to remove tokens from source (debit full balance)\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.sourceWallet,\n value: -this.sourceWallet.balance\n }))\n // Initializing a new Atom to add tokens to recipient\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: recipientWallet,\n value: amount,\n metaType: 'walletBundle',\n metaId: recipientWallet.bundle\n }))\n // Initializing a remainder atom\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.remainderWallet,\n value: this.sourceWallet.balance - amount,\n metaType: 'walletBundle',\n metaId: this.remainderWallet.bundle\n }))\n\n return this\n }\n\n /**\n * Creates a stackable V-isotope transfer with 3 atoms:\n * source debit, recipient credit, remainder.\n * Propagates batchId from source wallet.\n *\n * @param {Wallet} recipientWallet - wallet receiving the tokens\n * @param {number} amount - amount to transfer\n * @return {Molecule}\n */\n addStackableTransfer ({\n recipientWallet,\n amount\n }) {\n if (amount <= 0) {\n throw new NegativeAmountException('Molecule::addStackableTransfer() - Amount must be positive!')\n }\n\n if (this.sourceWallet.balance - amount < 0) {\n throw new BalanceInsufficientException()\n }\n\n const batchId = this.sourceWallet.batchId || generateBatchId({})\n\n // Source debit atom\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.sourceWallet,\n value: -amount,\n batchId\n }))\n\n // Recipient credit atom\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: recipientWallet,\n value: amount,\n metaType: 'walletBundle',\n metaId: recipientWallet.bundle,\n batchId: generateBatchId({})\n }))\n\n // Remainder atom\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.remainderWallet,\n value: this.sourceWallet.balance - amount,\n metaType: 'walletBundle',\n metaId: this.remainderWallet.bundle,\n batchId\n }))\n\n return this\n }\n\n /**\n *\n * @param amount\n * @param tradeRates\n */\n initDepositBuffer ({\n amount,\n tradeRates\n }) {\n if (this.sourceWallet.balance - amount < 0) {\n throw new BalanceInsufficientException()\n }\n\n // Create a buffer wallet\n const bufferWallet = Wallet.create({\n secret: this.secret,\n bundle: this.bundle,\n token: this.sourceWallet.token,\n batchId: this.sourceWallet.batchId\n })\n bufferWallet.tradeRates = tradeRates\n\n // Initializing a new Atom to remove tokens from source (debit full balance)\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.sourceWallet,\n value: -this.sourceWallet.balance\n }))\n\n // Initializing a new Atom to add tokens to recipient\n this.addAtom(Atom.create({\n isotope: 'B',\n wallet: bufferWallet,\n value: amount,\n metaType: 'walletBundle',\n metaId: this.sourceWallet.bundle\n }))\n\n this.addAtom(Atom.create({\n isotope: 'V',\n wallet: this.remainderWallet,\n value: this.sourceWallet.balance - amount,\n metaType: 'walletBundle',\n metaId: this.sourceWallet.bundle\n }))\n\n return this\n }\n\n /**\n *\n * @param {{}} recipients\n * @param {Wallet|{}} signingWallet\n * @returns {Molecule}\n */\n initWithdrawBuffer ({\n recipients,\n signingWallet = null\n }) {\n // Calculate final amount from all recipients\n let amount = 0\n for (const [recipientBundle, recipientAmount] of Object.entries(recipients || {})) {\n amount += recipientAmount\n }\n if (this.sourceWallet.balance - amount < 0) {\n throw new BalanceInsufficientException()\n }\n\n // Set a metas signing position for molecule correct reconciliation\n const firstAtomMeta = new AtomMeta()\n if (signingWallet) {\n firstAtomMeta.setSigningWallet(signingWallet)\n }\n\n // Initializing a new Atom to remove tokens from source (debit full balance)\n this.addAtom(Atom.create({\n isotope: 'B',\n wallet: this.sourceWallet,\n value: -this.sourceWallet.balance,\n meta: firstAtomMeta,\n metaType: 'walletBundle',\n metaId: this.sourceWallet.bundle\n }))\n\n // Initializing a new Atom to add tokens to recipient\n for (const [recipientBundle, recipientAmount] of Object.entries(recipients || {})) {\n this.addAtom(new Atom({\n isotope: 'V',\n token: this.sourceWallet.token,\n value: recipientAmount,\n batchId: this.sourceWallet.batchId ? generateBatchId({}) : null,\n metaType: 'walletBundle',\n metaId: recipientBundle\n }))\n }\n\n this.addAtom(Atom.create({\n isotope: 'B',\n wallet: this.remainderWallet,\n value: this.sourceWallet.balance - amount,\n metaType: 'walletBundle',\n metaId: this.remainderWallet.bundle\n }))\n\n return this\n }\n\n /**\n * Initialize a C-type molecule to issue a new type of token\n *\n * @param {Wallet} recipientWallet - wallet receiving the tokens. Needs to be initialized for the new token beforehand.\n * @param {number} amount - how many of the token we are initially issuing (for fungible tokens only)\n * @param {array|object} meta - additional fields to configure the token\n * @return {Molecule}\n */\n initTokenCreation ({\n recipientWallet,\n amount,\n meta\n }) {\n const atomMeta = new AtomMeta(meta)\n atomMeta.setMetaWallet(recipientWallet)\n\n // The primary atom tells the ledger that a certain amount of the new token is being issued.\n this.addAtom(Atom.create({\n isotope: 'C',\n wallet: this.sourceWallet,\n value: amount,\n metaType: 'token',\n metaId: recipientWallet.token,\n meta: atomMeta,\n batchId: recipientWallet.batchId\n }))\n\n // User remainder atom\n this.addContinuIdAtom()\n\n return this\n }\n\n /**\n *\n * @param {string} metaType\n * @param {string} metaId\n * @param {object[]} rule,\n * @param {object} policy\n * @return {Molecule}\n */\n createRule ({\n metaType,\n metaId,\n rule,\n policy = {}\n }) {\n const $rules = []\n\n for (const $rule of rule) {\n $rules.push($rule instanceof Rule ? $rule : Rule.toObject($rule))\n }\n\n // Create atom meta with rules\n const atomMeta = new AtomMeta({\n rule: JSON.stringify($rules)\n })\n\n // Add policies to meta object\n atomMeta.addPolicy(policy)\n\n this.addAtom(Atom.create({\n isotope: 'R',\n wallet: this.sourceWallet,\n metaType,\n metaId,\n meta: atomMeta\n }))\n\n // User continuID atom\n this.addContinuIdAtom()\n\n return this\n }\n\n /**\n * Builds Atoms to define a new wallet on the ledger\n *\n * @param {Wallet} wallet\n * @param {AtomMeta|null} atomMeta\n * @return {Molecule}\n */\n initWalletCreation (wallet, atomMeta = null) {\n if (!atomMeta) {\n atomMeta = new AtomMeta()\n }\n atomMeta.setMetaWallet(wallet)\n const creationAtom = Atom.create({\n isotope: 'C',\n wallet: this.sourceWallet,\n metaType: 'wallet',\n metaId: wallet.address,\n meta: atomMeta,\n batchId: wallet.batchId\n })\n this.addAtom(creationAtom)\n this.addContinuIdAtom()\n\n return this\n }\n\n /**\n * Init shadow wallet claim\n *\n * @param wallet\n */\n initShadowWalletClaim (wallet) {\n const atomMeta = (new AtomMeta()).setShadowWalletClaim(true)\n return this.initWalletCreation(wallet, atomMeta)\n }\n\n /**\n * Builds Atoms to define a new identifier on the ledger\n *\n * @param {string} type - phone or email\n * @param {string} contact - phone number or email string\n * @param {string} code -\n *\n * @return {Molecule}\n */\n initIdentifierCreation ({\n type,\n contact,\n code\n }) {\n const meta = {\n code,\n hash: generateBundleHash(contact.trim(), 'Molecule::initIdentifierCreation')\n }\n\n this.addAtom(Atom.create({\n isotope: 'C',\n wallet: this.sourceWallet,\n metaType: 'identifier',\n metaId: type,\n meta: new AtomMeta(meta)\n }))\n\n this.addContinuIdAtom()\n\n return this\n }\n\n /**\n * Initialize an M-type molecule with the given data\n *\n * @param {array|object} meta\n * @param {string} metaType\n * @param {string} metaId\n * @param {object} policy\n * @return {Molecule}\n */\n initMeta ({\n meta,\n metaType,\n metaId,\n policy\n }) {\n // Initializing a new Atom to hold our metadata\n this.addAtom(Atom.create({\n isotope: 'M',\n wallet: this.sourceWallet,\n metaType,\n metaId,\n meta: new AtomMeta(meta)\n }))\n\n // Only add policy atom if policy is provided and not empty\n if (policy && Object.keys(policy).length > 0) {\n this.addPolicyAtom({\n metaType,\n metaId,\n meta,\n policy\n })\n }\n\n // User remainder atom\n this.addContinuIdAtom()\n\n return this\n }\n\n /**\n * Initialize a P-type molecule for peer registration\n *\n * @param {string} host - The peer host URL to register\n * @return {Molecule}\n */\n initPeering ({\n host\n }) {\n this.addAtom(Atom.create({\n isotope: 'P',\n wallet: this.sourceWallet,\n metaType: 'walletBundle',\n metaId: this.bundle,\n meta: new AtomMeta({ peerHost: host })\n }))\n\n this.addContinuIdAtom()\n\n return this\n }\n\n /**\n * Initialize an A-type molecule for an append request\n *\n * @param {string} metaType - The target MetaType to append to\n * @param {string} metaId - The target MetaId to append to\n * @param {string} action - The action to perform\n * @param {object} meta - Additional metadata\n * @return {Molecule}\n */\n initAppendRequest ({\n metaType,\n metaId,\n action,\n meta = {}\n }) {\n this.addAtom(Atom.create({\n isotope: 'A',\n wallet: this.sourceWallet,\n metaType,\n metaId,\n meta: new AtomMeta({ action, ...meta })\n }))\n\n this.addContinuIdAtom()\n\n return this\n }\n\n /**\n * Arranges atoms to request tokens from the node itself\n *\n * @param {string} token\n * @param {Number} amount\n * @param {string} metaType\n * @param {string} metaId\n * @param {array|object} meta\n * @param {string|null} batchId\n *\n * @return {Molecule}\n */\n initTokenRequest ({\n token,\n amount,\n metaType,\n metaId,\n meta = {},\n batchId = null\n }) {\n meta.token = token\n meta.amount = String(amount)\n\n this.addAtom(Atom.create({\n isotope: 'T',\n wallet: this.sourceWallet,\n value: amount,\n metaType,\n metaId,\n meta: new AtomMeta(meta),\n batchId\n }))\n\n // User remainder atom\n this.addContinuIdAtom()\n\n return this\n }\n\n /**\n * Arranges atoms to request an authorization token from the node\n *\n * @param {object} meta\n *\n * @return {Molecule}\n */\n initAuthorization ({ meta }) {\n this.addAtom(Atom.create({\n isotope: 'U',\n wallet: this.sourceWallet,\n meta: new AtomMeta(meta)\n }))\n\n // User remainder atom\n this.addContinuIdAtom()\n\n return this\n }\n\n /**\n * Creates a one-time signature for a molecule and breaks it up across multiple atoms within that\n * molecule. Resulting 4096 byte (2048 character) string is the one-time signature, which is then compressed.\n *\n * @param {string|null} bundle\n * @param {boolean} anonymous\n * @param {boolean} compressed\n * @return {string|null}\n * @throws {AtomsMissingException}\n */\n sign ({\n bundle = null,\n anonymous = false,\n compressed = true\n }) {\n // Do we have atoms?\n if (this.atoms.length === 0 || this.atoms.filter(atom => !(atom instanceof Atom)).length !== 0) {\n throw new AtomsMissingException()\n }\n\n // Derive the user's bundle\n if (!anonymous && !this.bundle) {\n this.bundle = bundle || generateBundleHash(this.secret, 'Molecule::sign')\n }\n\n // Hash atoms to get molecular hash\n this.molecularHash = Atom.hashAtoms({\n atoms: this.atoms\n })\n\n // Signing atom\n const signingAtom = this.atoms[0]\n\n // Set signing position from the first atom\n let signingPosition = signingAtom.position\n\n // Get signing wallet from first atom's metas\n const signingWallet = Dot.get(signingAtom.aggregatedMeta(), 'signingWallet')\n\n // Try to get custom signing position from the metas (local molecule with server secret)\n if (signingWallet) {\n signingPosition = Dot.get(JSON.parse(signingWallet), 'position')\n }\n\n // Signing position is required\n if (!signingPosition) {\n throw new SignatureMalformedException('Signing wallet must have a position!')\n }\n\n // Generate the private signing key for this molecule\n const key = Wallet.generateKey({\n secret: this.secret,\n token: signingAtom.token,\n position: signingAtom.position\n })\n // Subdivide Kk into 16 segments of 256 bytes (128 characters) each\n const keyChunks = chunkSubstr(key, 128)\n // Convert Hm to numeric notation, and then normalize\n const normalizedHash = this.normalizedHash()\n\n // Building a one-time-signature\n let signatureFragments = ''\n\n for (const index in keyChunks) {\n let workingChunk = keyChunks[index]\n\n for (let iterationCount = 0, condition = 8 - normalizedHash[index]; iterationCount < condition; iterationCount++) {\n workingChunk = (new JsSHA('SHAKE256', 'TEXT')).update(workingChunk).getHash('HEX', { outputLen: 512 })\n }\n signatureFragments += workingChunk\n }\n\n // Compressing the OTS\n if (compressed) {\n signatureFragments = hexToBase64(signatureFragments)\n }\n\n // Chunking the signature across multiple atoms\n const chunkedSignature = chunkSubstr(signatureFragments, Math.ceil(signatureFragments.length / this.atoms.length))\n\n let lastPosition = null\n\n for (let chunkCount = 0, condition = chunkedSignature.length; chunkCount < condition; chunkCount++) {\n this.atoms[chunkCount].otsFragment = chunkedSignature[chunkCount]\n lastPosition = this.atoms[chunkCount].position\n }\n\n return lastPosition\n }\n\n /**\n * Synchronous signing — identical to sign() since all operations are CPU-bound.\n * Provided for API parity with Rust SDK's sign_sync().\n *\n * @param {object} options\n * @param {string|null} options.bundle\n * @param {boolean} options.anonymous\n * @param {boolean} options.compressed\n * @return {string|null}\n */\n signSync (options = {}) {\n return this.sign(options)\n }\n\n /**\n * Returns the base cell slug portion\n *\n * @return {string}\n */\n cellSlugBase () {\n return (this.cellSlug || '').split(this.cellSlugDelimiter)[0]\n }\n\n /**\n * Returns JSON-ready object for cross-SDK compatibility (2025 JS best practices)\n *\n * Includes all necessary fields for cross-SDK validation while excluding sensitive data.\n * Follows 2025 JavaScript best practices with proper error handling and type safety.\n *\n * @param {Object} options - Serialization options\n * @param {boolean} options.includeValidationContext - Include sourceWallet/remainderWallet for validation (default: false)\n * @param {boolean} options.includeOtsFragments - Include OTS signature fragments (default: true)\n * @param {boolean} options.secureMode - Extra security checks (default: false)\n * @return {Object} JSON-serializable object\n * @throws {Error} If molecule is in invalid state for serialization\n */\n toJSON (options = {}) {\n const {\n includeValidationContext = false,\n includeOtsFragments = true\n } = options;\n\n try {\n // Core molecule properties (server-compatible fields only)\n const serialized = {\n status: this.status,\n molecularHash: this.molecularHash,\n createdAt: this.createdAt,\n cellSlug: this.cellSlug,\n bundle: this.bundle,\n\n // Serialized atoms array with optional OTS fragments\n atoms: this.atoms.map(atom => atom.toJSON({\n includeOtsFragments\n }))\n };\n\n // Parent molecular hashes for DAG linkage (only include when non-empty\n // to maintain backward compatibility with servers that don't support it)\n if (this.parentHashes && this.parentHashes.length > 0) {\n serialized.parentHashes = this.parentHashes\n }\n\n // Extended context for Rust validator and local validation\n if (includeValidationContext) {\n serialized.cellSlugOrigin = this.cellSlugOrigin\n serialized.version = this.version\n\n if (this.sourceWallet) {\n serialized.sourceWallet = {\n address: this.sourceWallet.address,\n position: this.sourceWallet.position,\n token: this.sourceWallet.token,\n balance: this.sourceWallet.balance || '0',\n bundle: this.sourceWallet.bundle,\n batchId: this.sourceWallet.batchId || null,\n characters: this.sourceWallet.characters || 'BASE64',\n pubkey: this.sourceWallet.pubkey || null,\n tokenUnits: this.sourceWallet.tokenUnits || [],\n tradeRates: this.sourceWallet.tradeRates || {},\n molecules: this.sourceWallet.molecules || {}\n };\n }\n\n if (this.remainderWallet) {\n serialized.remainderWallet = {\n address: this.remainderWallet.address,\n position: this.remainderWallet.position,\n token: this.remainderWallet.token,\n balance: this.remainderWallet.balance || '0',\n bundle: this.remainderWallet.bundle,\n batchId: this.remainderWallet.batchId || null,\n characters: this.remainderWallet.characters || 'BASE64',\n pubkey: this.remainderWallet.pubkey || null,\n tokenUnits: this.remainderWallet.tokenUnits || [],\n tradeRates: this.remainderWallet.tradeRates || {},\n molecules: this.remainderWallet.molecules || {}\n };\n }\n }\n\n return serialized;\n\n } catch (error) {\n throw new Error(`Molecule serialization failed: ${error.message}`);\n }\n }\n\n /**\n * Creates a Molecule instance from JSON data (2025 JS best practices)\n *\n * Handles cross-SDK deserialization with robust error handling and validation.\n * Essential for cross-platform molecule validation and compatibility testing.\n *\n * @param {string|Object} json - JSON string or object to deserialize\n * @param {Object} options - Deserialization options\n * @param {boolean} options.includeValidationContext - Reconstruct sourceWallet/remainderWallet (default: false)\n * @param {boolean} options.validateStructure - Validate required fields (default: true)\n * @return {Molecule} Reconstructed molecule instance\n * @throws {Error} If JSON is invalid or required fields are missing\n */\n static fromJSON (json, options = {}) {\n const {\n includeValidationContext = false,\n validateStructure = true\n } = options;\n\n try {\n // Parse JSON safely\n const data = typeof json === 'string' ? JSON.parse(json) : json;\n\n // Validate required fields in strict mode\n if (validateStructure) {\n if (!data.molecularHash || !Array.isArray(data.atoms)) {\n throw new Error('Invalid molecule data: missing molecularHash or atoms array');\n }\n }\n\n // Create minimal molecule instance (never include secret from JSON)\n const molecule = new Molecule({\n secret: null,\n bundle: data.bundle || null,\n cellSlug: data.cellSlug || null,\n version: data.version || null\n });\n\n // Populate core properties\n molecule.status = data.status;\n molecule.molecularHash = data.molecularHash;\n molecule.createdAt = data.createdAt || String(+new Date());\n molecule.cellSlugOrigin = data.cellSlugOrigin;\n molecule.parentHashes = Array.isArray(data.parentHashes) ? [...data.parentHashes] : [];\n\n // Reconstruct atoms array with proper Atom instances\n if (Array.isArray(data.atoms)) {\n molecule.atoms = data.atoms.map((atomData, index) => {\n try {\n return Atom.fromJSON(atomData);\n } catch (error) {\n throw new Error(`Failed to reconstruct atom ${index}: ${error.message}`);\n }\n });\n }\n\n // Reconstruct validation context if available and requested\n if (includeValidationContext) {\n if (data.sourceWallet) {\n // Create source wallet for validation (without secret for security)\n molecule.sourceWallet = new Wallet({\n secret: null,\n token: data.sourceWallet.token,\n position: data.sourceWallet.position,\n bundle: data.sourceWallet.bundle,\n batchId: data.sourceWallet.batchId,\n characters: data.sourceWallet.characters\n });\n\n // Set additional properties for validation context\n molecule.sourceWallet.balance = String(data.sourceWallet.balance != null ? data.sourceWallet.balance : 0);\n molecule.sourceWallet.address = data.sourceWallet.address;\n if (data.sourceWallet.pubkey) {\n molecule.sourceWallet.pubkey = data.sourceWallet.pubkey;\n }\n molecule.sourceWallet.tokenUnits = data.sourceWallet.tokenUnits || [];\n molecule.sourceWallet.tradeRates = data.sourceWallet.tradeRates || {};\n molecule.sourceWallet.molecules = data.sourceWallet.molecules || {};\n }\n\n if (data.remainderWallet) {\n // Create remainder wallet for validation (without secret for security)\n molecule.remainderWallet = new Wallet({\n secret: null,\n token: data.remainderWallet.token,\n position: data.remainderWallet.position,\n bundle: data.remainderWallet.bundle,\n batchId: data.remainderWallet.batchId,\n characters: data.remainderWallet.characters\n });\n\n // Set additional properties for validation context\n molecule.remainderWallet.balance = String(data.remainderWallet.balance != null ? data.remainderWallet.balance : 0);\n molecule.remainderWallet.address = data.remainderWallet.address;\n if (data.remainderWallet.pubkey) {\n molecule.remainderWallet.pubkey = data.remainderWallet.pubkey;\n }\n molecule.remainderWallet.tokenUnits = data.remainderWallet.tokenUnits || [];\n molecule.remainderWallet.tradeRates = data.remainderWallet.tradeRates || {};\n molecule.remainderWallet.molecules = data.remainderWallet.molecules || {};\n }\n }\n\n return molecule;\n\n } catch (error) {\n throw new Error(`Molecule deserialization failed: ${error.message}`);\n }\n }\n\n /**\n * Validates the current molecular structure\n *\n * @param senderWallet\n */\n check (senderWallet = null) {\n return (new CheckMolecule(this)).verify(senderWallet)\n }\n\n /**\n * Convert Hm to numeric notation via EnumerateMolecule(Hm)\n *\n * @returns {Array}\n */\n normalizedHash () {\n return Molecule.normalize(Molecule.enumerate(this.molecularHash))\n }\n}\n","// Value determines by min sql decimal precision\nconst multiplier = 10 ** 18\n\nexport default class Decimal {\n /**\n * @param {number} value\n * @return {number}\n */\n static val (value) {\n if (Math.abs(value * multiplier) < 1) {\n return 0.0\n }\n\n return value\n }\n\n /**\n * @param {number} value1\n * @param {number} value2\n * @param {boolean} debug\n * @return {number}\n */\n static cmp (value1, value2, debug = false) {\n const val1 = Decimal.val(value1) * multiplier\n const val2 = Decimal.val(value2) * multiplier\n\n // Equal\n if (Math.abs(val1 - val2) < 1) {\n return 0\n }\n\n // Greater or smaller\n return (val1 > val2) ? 1 : -1\n }\n\n /**\n * @param {number} value1\n * @param {number} value2\n * @return {boolean}\n */\n static equal (value1, value2) {\n return (Decimal.cmp(value1, value2) === 0)\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Wallet from './Wallet.js'\n\n/**\n *\n */\nexport default class AuthToken {\n /**\n *\n * @param {string} token\n * @param {number} expiresAt\n * @param {boolean} encrypt\n * @param {string} pubkey\n */\n constructor ({\n token,\n expiresAt,\n encrypt,\n pubkey\n }) {\n this.$__token = token\n this.$__expiresAt = expiresAt\n this.$__pubkey = pubkey\n this.$__encrypt = encrypt\n }\n\n /**\n *\n * @param data\n * @param wallet\n * @returns {AuthToken}\n */\n static create (data, wallet) {\n const authToken = new AuthToken(data)\n authToken.setWallet(wallet)\n return authToken\n }\n\n /**\n *\n * @param {object} snapshot\n * @param {string} secret\n * @return {AuthToken}\n */\n static restore (snapshot, secret) {\n const wallet = new Wallet({\n secret,\n token: 'AUTH',\n position: snapshot.wallet.position,\n characters: snapshot.wallet.characters\n })\n return AuthToken.create({\n token: snapshot.token,\n expiresAt: snapshot.expiresAt,\n pubkey: snapshot.pubkey,\n encrypt: snapshot.encrypt\n }, wallet)\n }\n\n /**\n *\n * @param {Wallet} wallet\n */\n setWallet (wallet) {\n this.$__wallet = wallet\n }\n\n /**\n * Get a wallet\n * @return {Wallet}\n */\n getWallet () {\n return this.$__wallet\n }\n\n /**\n *\n * @return {{wallet: {characters, position}, encrypt, expiresAt, token, pubkey}}\n */\n getSnapshot () {\n return {\n token: this.$__token,\n expiresAt: this.$__expiresAt,\n pubkey: this.$__pubkey,\n encrypt: this.$__encrypt,\n wallet: {\n position: this.$__wallet.position,\n characters: this.$__wallet.characters\n }\n }\n }\n\n /**\n *\n * @return {string}\n */\n getToken () {\n return this.$__token\n }\n\n /**\n *\n * @return {string}\n */\n getPubkey () {\n return this.$__pubkey\n }\n\n /**\n *\n * @return {number}\n */\n getExpireInterval () {\n return (this.$__expiresAt * 1000) - Date.now()\n }\n\n /**\n *\n * @return {boolean}\n */\n isExpired () {\n return !this.$__expiresAt || this.getExpireInterval() < 0\n }\n\n /**\n * Get auth data for the final GraphQL client\n * @return {{wallet: Wallet, token: string, pubkey: string}}\n */\n getAuthData () {\n return {\n token: this.getToken(),\n pubkey: this.getPubkey(),\n wallet: this.getWallet()\n }\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Exception for bad GraphQL responses\n */\nexport default class InvalidResponseException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'GraphQL did not provide a valid response.', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'InvalidResponseException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when attempting to transact without an auth token\n */\nexport default class UnauthenticatedException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Authorization token missing or invalid.', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'UnauthenticatedException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport InvalidResponseException from '../exception/InvalidResponseException.js'\nimport UnauthenticatedException from '../exception/UnauthenticatedException.js'\nimport Dot from '../libraries/Dot.js'\n\n/**\n * Base Response class for processing node responses\n */\nexport default class Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n * @param {string|null} dataKey\n */\n constructor ({\n query,\n json,\n dataKey = null\n }) {\n this.dataKey = dataKey\n this.errorKey = 'exception'\n this.$__payload = null\n this.$__query = query\n this.$__originResponse = json\n this.$__response = json\n\n if (typeof this.$__response === 'undefined' || this.$__response === null) {\n throw new InvalidResponseException()\n }\n\n if (Dot.has(this.$__response, this.errorKey)) {\n const error = Dot.get(this.$__response, this.errorKey)\n\n if (String(error).includes('Unauthenticated')) {\n throw new UnauthenticatedException()\n }\n\n throw new InvalidResponseException()\n }\n\n // Check for GraphQL errors array\n if (this.$__response.errors && Array.isArray(this.$__response.errors) && this.$__response.errors.length > 0) {\n const errorMessage = this.$__response.errors[0].message || 'Unknown GraphQL error'\n\n if (errorMessage.includes('Unauthenticated')) {\n throw new UnauthenticatedException()\n }\n\n throw new InvalidResponseException(`GraphQL Error: ${errorMessage}`)\n }\n\n this.init()\n }\n\n /**\n *\n */\n init () {\n }\n\n /**\n * @return {*}\n */\n data () {\n if (!this.dataKey) {\n return this.response()\n }\n\n // Check if response has data field\n if (!this.response().data) {\n throw new InvalidResponseException('Response has no data field')\n }\n\n // Check key & return custom data from the response\n if (!Dot.has(this.response(), this.dataKey)) {\n throw new InvalidResponseException(`Missing expected field: ${this.dataKey}`)\n }\n\n return Dot.get(this.response(), this.dataKey)\n }\n\n /**\n * @return {object}\n */\n response () {\n return this.$__response\n }\n\n /**\n * @return {*}\n */\n payload () {\n return null\n }\n\n /**\n * @return {Query}\n */\n query () {\n return this.$__query\n }\n\n /**\n * @return {*}\n */\n status () {\n return null\n }\n\n /**\n * Check if response was successful\n * @return {boolean}\n */\n success () {\n // Default implementation - can be overridden by subclasses\n return !this.$__response?.errors?.length\n }\n\n /**\n * Get error message if any\n *\n * @return {string|null}\n */\n error () {\n return this.$__response?.errors?.length ? this.$__response.errors[0].message || 'Unknown error' : null\n }\n\n /**\n * Enhanced interface methods for standardized response handling\n */\n \n /**\n * Get error reason (alias for error() to match standardized interface)\n * @return {string|null}\n */\n reason () {\n return this.error()\n }\n\n /**\n * Convert to ValidationResult for enhanced error handling\n * @return {object}\n */\n toValidationResult () {\n if (this.success() && this.payload() !== null) {\n return {\n success: true,\n data: this.payload(),\n warnings: []\n }\n } else {\n return {\n success: false,\n error: {\n message: this.reason() || 'Unknown error',\n context: this.constructor.name,\n details: this.$__response?.errors || []\n }\n }\n }\n }\n\n /**\n * Enhanced error handling with callbacks\n * @param {function} callback\n * @return {Response}\n */\n onSuccess (callback) {\n if (this.success() && this.payload() !== null) {\n try {\n callback(this.payload())\n } catch (error) {\n console.warn('Response.onSuccess callback failed:', error)\n }\n }\n return this\n }\n\n /**\n * Enhanced failure handling with callbacks\n * @param {function} callback\n * @return {Response}\n */\n onFailure (callback) {\n if (!this.success()) {\n try {\n callback(this.reason() || 'Unknown error')\n } catch (error) {\n console.warn('Response.onFailure callback failed:', error)\n }\n }\n return this\n }\n\n /**\n * Debug logging with enhanced context\n * @param {string|null} label\n * @return {Response}\n */\n debug (label = null) {\n const debugPrefix = label ? `[${label}]` : `[${this.constructor.name}]`\n \n if (this.success()) {\n console.debug(`${debugPrefix} Success:`, {\n payload: this.payload(),\n query: this.$__query?.constructor?.name,\n dataKey: this.dataKey\n })\n } else {\n console.debug(`${debugPrefix} Failure:`, {\n error: this.reason(),\n errors: this.$__response?.errors,\n rawData: this.$__response\n })\n }\n \n return this\n }\n\n /**\n * Promise conversion for enhanced async patterns\n * @return {Promise}\n */\n toPromise () {\n if (this.success() && this.payload() !== null) {\n return Promise.resolve(this.payload())\n } else {\n return Promise.reject(new Error(this.reason() || 'Unknown error'))\n }\n }\n\n /**\n * Functional programming map operation\n * @param {function} mapper\n * @return {Response}\n */\n map (mapper) {\n if (this.success() && this.payload() !== null) {\n try {\n const mappedPayload = mapper(this.payload())\n // Create new response with mapped payload\n const newResponse = Object.create(Object.getPrototypeOf(this))\n Object.assign(newResponse, this)\n newResponse.$__payload = mappedPayload\n return newResponse\n } catch (error) {\n // Create error response\n const errorResponse = Object.create(Object.getPrototypeOf(this))\n Object.assign(errorResponse, this)\n errorResponse.$__response = { errors: [{ message: `Mapping failed: ${error.message}` }] }\n return errorResponse\n }\n } else {\n return this\n }\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport CodeException from '../exception/CodeException.js'\nimport Response from '../response/Response.js'\n\nexport default class Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n this.client = graphQLClient\n this.knishIOClient = knishIOClient\n this.$__variables = null\n this.$__query = null\n this.$__response = null\n this.$__request = null\n }\n\n /**\n * Return a response object\n * Used at KnishIOClient::createMolecule => sets the source wallet from the remainder one stored in response object\n * @return {Response}\n */\n response () {\n return this.$__response\n }\n\n /**\n * Builds a Response based on JSON input\n *\n * @param response\n * @return {Promise<Response>}\n */\n async createResponseRaw (response) {\n return this.createResponse(response)\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {Response}\n */\n createResponse (json) {\n return new Response({\n query: this,\n json\n })\n }\n\n /**\n * Creates a new Request for the given parameters\n *\n * @param {{}} variables\n * @returns {{variables: (Object|null), query: null}}\n */\n createQuery ({ variables = null }) {\n this.$__variables = this.compiledVariables(variables)\n\n // Uri is a required parameter\n const uri = this.uri()\n\n if (!uri) {\n throw new CodeException('Query::createQuery() - Node URI was not initialized for this client instance!')\n }\n\n if (this.$__query === null) {\n throw new CodeException('Query::createQuery() - GraphQL subscription was not initialized!')\n }\n\n return {\n query: this.$__query,\n variables: this.variables()\n }\n }\n\n /**\n * Sends the Query to a Knish.IO node and returns the Response\n *\n * @param {object} variables\n * @param {object} context\n * @return {Promise<Response>}\n */\n async execute ({ variables = null, context = {} }) {\n this.$__request = this.createQuery({ variables })\n\n const mergedContext = {\n ...context,\n ...this.createQueryContext()\n }\n\n try {\n const response = await this.client.query({\n ...this.$__request,\n context: mergedContext\n })\n\n this.$__response = await this.createResponseRaw(response)\n\n return this.$__response\n } catch (error) {\n if (error.name === 'AbortError') {\n this.knishIOClient.log('warn', 'Query was cancelled')\n // You might want to create a custom response for cancelled queries\n return new Response({\n query: this,\n json: { data: null, errors: [{ message: 'Query was cancelled' }] }\n })\n } else {\n throw error\n }\n }\n }\n\n /**\n * Returns a variables object for the Query\n *\n * @param {object} variables\n * @return {object}\n */\n compiledVariables (variables = null) {\n return variables || {}\n }\n\n /**\n * Returns the Knish.IO endpoint URI\n *\n * @return {string}\n */\n uri () {\n return this.client.getUri()\n }\n\n /**\n * Returns the query variables object\n *\n * @return {object|null}\n */\n variables () {\n return this.$__variables\n }\n\n createQueryContext () {\n // Override this method in subclasses if needed\n return {}\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\nimport Wallet from '../Wallet.js'\n\n/**\n * Response for ContinuID query\n */\nexport default class ResponseContinuId extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.ContinuId'\n })\n }\n\n /**\n * Returns the ContinuID wallet\n *\n * @return {Wallet|null}\n */\n payload () {\n let wallet = null\n\n const continuId = this.data()\n\n if (continuId) {\n wallet = new Wallet({\n secret: null,\n token: continuId.tokenSlug\n })\n wallet.address = continuId.address\n wallet.position = continuId.position\n wallet.bundle = continuId.bundleHash\n wallet.batchId = continuId.batchId\n wallet.characters = continuId.characters\n wallet.pubkey = continuId.pubkey\n wallet.balance = String(continuId.amount != null ? continuId.amount : 0)\n }\n\n return wallet\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseContinuId from '../response/ResponseContinuId.js'\nimport { gql } from '@urql/core'\n\n/**\n * Queries the node for the next wallet to sign with for ContinuID\n */\nexport default class QueryContinuId extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query ($bundle: String!) {\n ContinuId(bundle: $bundle) {\n address,\n bundleHash,\n tokenSlug,\n position,\n batchId,\n characters,\n pubkey,\n amount,\n createdAt\n }\n }`\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponseContinuId}\n */\n createResponse (json) {\n return new ResponseContinuId({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\nimport Meta from '../Meta.js'\n\n/**\n * Response for Wallet Bundle query\n */\nexport default class ResponseWalletBundle extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.WalletBundle'\n })\n }\n\n /**\n * Returns a wallet bundle with normalized metadata\n *\n * @return {{}|null}\n */\n payload () {\n const bundleData = this.data()\n\n if (!bundleData || bundleData.length === 0) {\n return null\n }\n\n const aggregate = {}\n\n bundleData.forEach(bundle => {\n bundle.metas = Meta.aggregateMeta(bundle.metas)\n aggregate[bundle.bundleHash] = bundle\n })\n\n return aggregate\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseWalletBundle from '../response/ResponseWalletBundle.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for retrieving information about Wallet Bundles\n */\nexport default class QueryWalletBundle extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query( $bundleHashes: [ String! ] ) {\n WalletBundle( bundleHashes: $bundleHashes ) {\n bundleHash,\n metas {\n molecularHash,\n position,\n key,\n value,\n createdAt\n },\n createdAt\n }\n }`\n }\n\n /**\n * Builds a Response object out of a JSON string\n *\n * @param {object} json\n * @return {ResponseWalletBundle}\n */\n createResponse (json) {\n return new ResponseWalletBundle({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\nimport Wallet from '../Wallet.js'\nimport TokenUnit from '../TokenUnit.js'\n\n/**\n * Response for Wallet List query\n */\nexport default class ResponseWalletList extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.Wallet'\n })\n }\n\n /**\n * Returns a Knish.IO client Wallet class instance out of object data\n *\n * @param {object} data\n * @param {string|null} secret\n * @return {Wallet}\n */\n static toClientWallet ({\n data,\n secret = null\n }) {\n let wallet\n\n if (data.position === null || typeof data.position === 'undefined') {\n wallet = Wallet.create({\n bundle: data.bundleHash,\n token: data.tokenSlug,\n batchId: data.batchId,\n characters: data.characters\n })\n } else {\n wallet = new Wallet({\n secret,\n token: data.tokenSlug,\n position: data.position,\n batchId: data.batchId,\n characters: data.characters\n })\n wallet.address = data.address\n wallet.bundle = data.bundleHash\n }\n\n if (data.token) {\n wallet.tokenName = data.token.name\n wallet.tokenAmount = data.token.amount\n wallet.tokenSupply = data.token.supply\n wallet.tokenFungibility = data.token.fungibility\n }\n\n if (data.tokenUnits.length) {\n for (const tokenUnitData of data.tokenUnits) {\n wallet.tokenUnits.push(TokenUnit.createFromGraphQL(tokenUnitData))\n }\n }\n\n if (data.tradeRates.length) {\n for (const tradeRate of data.tradeRates) {\n wallet.tradeRates[tradeRate.tokenSlug] = tradeRate.amount\n }\n }\n\n wallet.balance = String(data.amount != null ? data.amount : 0)\n wallet.pubkey = data.pubkey\n wallet.createdAt = data.createdAt\n\n return wallet\n }\n\n /**\n * Returns a list of Wallet class instances\n *\n * @param secret\n * @return {null|[Wallet]}\n */\n getWallets (secret = null) {\n const list = this.data()\n\n if (!list) {\n return null\n }\n\n const wallets = []\n\n for (const data of list) {\n wallets.push(ResponseWalletList.toClientWallet({\n data,\n secret\n }))\n }\n\n return wallets\n }\n\n /**\n * Returns response payload\n *\n * @return {null|[Wallet]}\n */\n payload () {\n return this.getWallets()\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseWalletList from '../response/ResponseWalletList.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for getting a list of Wallets\n */\nexport default class QueryWalletList extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query( $bundleHash: String, $tokenSlug: String ) {\n Wallet( bundleHash: $bundleHash, tokenSlug: $tokenSlug ) {\n address,\n bundleHash,\n token {\n name,\n amount,\n fungibility,\n supply\n },\n tokenSlug,\n batchId,\n position,\n amount,\n characters,\n pubkey,\n createdAt,\n tokenUnits {\n id,\n name,\n metas\n },\n tradeRates {\n tokenSlug,\n amount\n }\n }\n }`\n }\n\n /**\n * Builds a Response object out of a JSON string\n *\n * @param {object} json\n * @return {ResponseWalletList}\n */\n createResponse (json) {\n return new ResponseWalletList({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\nimport ResponseWalletList from './ResponseWalletList.js'\n\n/**\n * Response for balance query\n */\nexport default class ResponseBalance extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.Balance'\n })\n }\n\n /**\n * Returns a wallet with balance\n *\n * @return {null|Wallet}\n */\n payload () {\n let walletData = this.data()\n\n // Handle array response (e.g. from Rust validator which returns Vec<Wallet>)\n if (Array.isArray(walletData)) {\n walletData = walletData.length > 0 ? walletData[0] : null\n }\n\n if (!walletData || !walletData.bundleHash || !walletData.tokenSlug) {\n return null\n }\n\n return ResponseWalletList.toClientWallet({\n data: walletData\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseBalance from '../response/ResponseBalance.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for getting the balance of a given wallet or token slug\n */\nexport default class QueryBalance extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query( $address: String, $bundleHash: String, $type: String, $token: String, $position: String ) {\n Balance( address: $address, bundleHash: $bundleHash, type: $type, token: $token, position: $position ) {\n address,\n bundleHash,\n type,\n tokenSlug,\n batchId,\n position,\n amount,\n characters,\n pubkey,\n createdAt,\n tokenUnits {\n id,\n name,\n metas\n },\n tradeRates {\n tokenSlug,\n amount\n }\n }\n }`\n }\n\n /**\n * @param {object} json\n * @return {ResponseBalance}\n */\n createResponse (json) {\n return new ResponseBalance({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\n\n/**\n * Response for MetaType Query\n */\nexport default class ResponseMetaType extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.MetaType'\n })\n }\n\n /**\n * Returns meta type instance results\n *\n * @return {null|*}\n */\n payload () {\n const metaTypeData = this.data()\n\n if (!metaTypeData || metaTypeData.length === 0) {\n return null\n }\n\n const response = {\n instances: {},\n instanceCount: {},\n paginatorInfo: {}\n }\n\n const metaData = metaTypeData.pop()\n\n if (metaData.instances) {\n response.instances = metaData.instances\n }\n\n if (metaData.instanceCount) {\n response.instanceCount = metaData.instanceCount\n }\n\n if (metaData.paginatorInfo) {\n response.paginatorInfo = metaData.paginatorInfo\n }\n\n return response\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseMetaType from '../response/ResponseMetaType.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for retrieving Meta Asset information\n */\nexport default class QueryMetaType extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query( $metaType: String, $metaTypes: [ String! ], $metaId: String, $metaIds: [ String! ], $key: String, $keys: [ String! ], $value: String, $values: [ String! ], $count: String, $latest: Boolean, $filter: [ MetaFilter! ], $queryArgs: QueryArgs, $countBy: String, $cellSlug: String ) {\n MetaType( metaType: $metaType, metaTypes: $metaTypes, metaId: $metaId, metaIds: $metaIds, key: $key, keys: $keys, value: $value, values: $values, count: $count, filter: $filter, queryArgs: $queryArgs, countBy: $countBy, cellSlug: $cellSlug ) {\n metaType,\n instanceCount {\n key,\n value\n },\n instances {\n metaType,\n metaId,\n createdAt,\n metas(latest:$latest) {\n molecularHash,\n position,\n key,\n value,\n createdAt\n }\n },\n paginatorInfo {\n currentPage,\n total\n }\n }\n }`\n }\n\n /**\n * Builds a GraphQL-friendly variables object based on input fields\n *\n * @param {string|array|null} metaType\n * @param {string|array|null} metaId\n * @param {string|array|null} key\n * @param {string|array|null} value\n * @param {boolean|null} latest\n * @param {object|null} filter\n * @param {object|null} queryArgs\n * @param {string|null} count\n * @param {string|null} countBy\n * @param {string|null} cellSlug\n * @return {{}}\n */\n static createVariables ({\n metaType = null,\n metaId = null,\n key = null,\n value = null,\n latest = null,\n filter = null,\n queryArgs = null,\n count = null,\n countBy = null,\n cellSlug = null\n }) {\n const variables = {}\n\n if (metaType) {\n variables[typeof metaType === 'string' ? 'metaType' : 'metaTypes'] = metaType\n }\n\n if (metaId) {\n variables[typeof metaId === 'string' ? 'metaId' : 'metaIds'] = metaId\n }\n\n if (key) {\n variables[typeof key === 'string' ? 'key' : 'keys'] = key\n }\n\n if (value) {\n variables[typeof value === 'string' ? 'value' : 'values'] = value\n }\n\n variables.latest = latest === true\n\n if (filter) {\n variables.filter = filter\n }\n\n if (queryArgs) {\n if (typeof queryArgs.limit === 'undefined' || queryArgs.limit === 0) {\n queryArgs.limit = '*'\n }\n\n variables.queryArgs = queryArgs\n }\n\n if (count) {\n variables.count = count\n }\n\n if (countBy) {\n variables.countBy = countBy\n }\n\n if (cellSlug) {\n variables.cellSlug = cellSlug\n }\n\n return variables\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponseMetaType}\n */\n createResponse (json) {\n return new ResponseMetaType({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport Response from '../response/Response.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for retrieving Meta Asset information\n */\nexport default class QueryBatch extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query( $batchId: String ) {\n Batch( batchId: $batchId ) {\n ${ QueryBatch.getFields() },\n children {\n ${ QueryBatch.getFields() }\n }\n }\n }`\n }\n\n static getFields () {\n return `batchId,\n molecularHash,\n type,\n status,\n createdAt,\n wallet {\n address,\n bundleHash,\n amount,\n tokenSlug,\n token {\n name,\n amount\n },\n tokenUnits {\n id,\n name,\n metas\n }\n },\n fromWallet {\n address,\n bundleHash,\n amount,\n batchId\n },\n toWallet {\n address,\n bundleHash,\n amount,\n batchId\n },\n sourceTokenUnits {\n id,\n name,\n metas\n },\n transferTokenUnits {\n id,\n name,\n metas\n },\n metas {\n key,\n value,\n },\n throughMetas {\n key,\n value\n }`\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {Response}\n */\n createResponse (json) {\n const responseObject = new Response({\n query: this,\n json\n })\n responseObject.dataKey = 'data.Batch'\n return responseObject\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport QueryBatch from './QueryBatch.js'\nimport Response from '../response/Response.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for retrieving Meta Asset information\n */\nexport default class QueryBatchHistory extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query( $batchId: String ) {\n BatchHistory( batchId: $batchId ) {\n ${ QueryBatch.getFields() }\n }\n }`\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {Response}\n */\n createResponse (json) {\n const responseObject = new Response({\n query: this,\n json\n })\n responseObject.dataKey = 'data.BatchHistory'\n return responseObject\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Response from './Response.js'\nimport Dot from '../libraries/Dot.js'\nimport Molecule from '../Molecule.js'\n\n/**\n * Response for proposing new Molecules\n */\nexport default class ResponseProposeMolecule extends Response {\n /**\n * Class constructor\n *\n * @param {MutationProposeMolecule} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.ProposeMolecule'\n })\n this.$__clientMolecule = query.molecule()\n }\n\n /**\n * Initialize response object with payload data\n */\n init () {\n const payloadJson = Dot.get(this.data(), 'payload')\n try {\n this.$__payload = Object.prototype.toString.call(payloadJson) === '[object String]'\n ? JSON.parse(payloadJson)\n : payloadJson\n } catch (err) {\n this.$__payload = null\n }\n }\n\n /**\n * Returns the client molecule\n */\n clientMolecule () {\n return this.$__clientMolecule\n }\n\n /**\n * Returns the resulting molecule\n *\n * @return {Molecule|null}\n */\n molecule () {\n const data = this.data()\n\n if (!data) {\n return null\n }\n\n const molecule = new Molecule({})\n\n molecule.molecularHash = Dot.get(data, 'molecularHash')\n molecule.status = Dot.get(data, 'status')\n molecule.createdAt = Dot.get(data, 'createdAt')\n\n return molecule\n }\n\n /**\n * Returns whether molecule was accepted or not\n *\n * @return {boolean}\n */\n success () {\n return this.status() === 'accepted'\n }\n\n /**\n * Returns the status of the proposal\n *\n * @return {string}\n */\n status () {\n return Dot.get(this.data(), 'status', 'rejected')\n }\n\n /**\n * Returns the reason for rejection\n *\n * @return {string}\n */\n reason () {\n return Dot.get(this.data(), 'reason', 'Invalid response from server')\n }\n\n /**\n * Returns payload object\n *\n * @return {null}\n */\n payload () {\n return this.$__payload\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from '../query/Query.js'\nimport Response from '../response/Response.js'\n\n/**\n * Base class used to construct various GraphQL mutations\n */\nexport default class Mutation extends Query {\n /**\n * Creates a new Request for the given parameters\n *\n * @param {{}} variables\n * @returns {{variables: (Object|null), query: null}}\n */\n createQuery ({ variables = null }) {\n const request = super.createQuery({ variables })\n request.mutation = request.query\n delete request.query\n return request\n }\n\n /**\n * Sends the Mutation to a Knish.IO node and returns the Response\n * @param {Object||null} variables\n * @param {Object||null} context\n * @returns {Promise<Response|null>}\n */\n async execute ({ variables = {}, context = {} }) {\n this.$__request = this.createQuery({\n variables\n })\n\n const mergedContext = {\n ...context,\n ...this.createQueryContext()\n }\n\n try {\n const mutationParams = {\n ...this.$__request,\n context: mergedContext\n }\n const response = await this.client.mutate(mutationParams)\n\n this.$__response = await this.createResponseRaw(response)\n\n return this.$__response\n } catch (error) {\n if (error.name === 'AbortError') {\n this.knishIOClient.log('warn', 'Mutation was cancelled')\n // You might want to create a custom response for cancelled mutations\n return new Response({\n query: this,\n json: { data: null, errors: [{ message: 'Mutation was cancelled' }] }\n })\n } else {\n throw error\n }\n }\n }\n\n createQueryContext () {\n // Override this method in subclasses if needed\n return {}\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from '../response/ResponseProposeMolecule.js'\nimport Mutation from './Mutation.js'\nimport { gql } from '@urql/core'\n\nexport default class MutationProposeMolecule extends Mutation {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n * @param molecule\n */\n constructor (graphQLClient, knishIOClient, molecule) {\n super(graphQLClient, knishIOClient)\n\n this.$__molecule = molecule\n this.$__remainderWallet = null\n this.$__query = gql`mutation( $molecule: MoleculeInput! ) {\n ProposeMolecule( molecule: $molecule ) {\n molecularHash,\n height,\n depth,\n status,\n reason,\n payload,\n createdAt,\n receivedAt,\n processedAt,\n broadcastedAt,\n }\n }`\n }\n\n /**\n * Returns an object of query variables\n *\n * @param {object} variables\n * @return {object}\n */\n compiledVariables (variables) {\n const _variables = super.compiledVariables(variables)\n\n return { ..._variables, ...{ molecule: this.molecule() } }\n }\n\n /**\n * Creates a new response from a JSON string\n *\n * @param {object} json\n * @return {ResponseProposeMolecule}\n */\n createResponse (json) {\n return new ResponseProposeMolecule({\n query: this,\n json\n })\n }\n\n /**\n * Executes the query\n *\n * @param {object} variables\n * @return {Promise}\n */\n async execute ({ variables = null }) {\n variables = variables || {}\n variables.molecule = this.molecule()\n\n return super.execute({\n variables\n })\n }\n\n /**\n * Returns the remainder wallet\n *\n * @return {null}\n */\n remainderWallet () {\n return this.$__remainderWallet\n }\n\n /**\n * Returns the molecule we are proposing\n *\n * @return {Molecule}\n */\n molecule () {\n return this.$__molecule\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Dot from '../libraries/Dot.js'\nimport InvalidResponseException from '../exception/InvalidResponseException.js'\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for auth token mutation\n */\nexport default class ResponseRequestAuthorization extends ResponseProposeMolecule {\n /**\n * return the authorization key\n *\n * @param key\n * @return {*}\n */\n payloadKey (key) {\n if (!Dot.has(this.payload(), key)) {\n throw new InvalidResponseException(`ResponseRequestAuthorization::payloadKey() - '${ key }' key was not found in the payload!`)\n }\n return Dot.get(this.payload(), key)\n }\n\n /**\n * Returns the auth token\n *\n * @return {string}\n */\n token () {\n return this.payloadKey('token')\n }\n\n /**\n * Returns timestamp\n *\n * @return {string}\n */\n time () {\n return this.payloadKey('time')\n }\n\n /**\n *\n * @return {string}\n */\n encrypt () {\n return this.payloadKey('encrypt')\n }\n\n /**\n *\n * @return {string}\n */\n pubKey () {\n return this.payloadKey('key')\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponseRequestAuthorization from '../response/ResponseRequestAuthorization.js'\n\n/**\n * Query for requesting an authorization token from the node\n */\nexport default class MutationRequestAuthorization extends MutationProposeMolecule {\n /**\n *\n * @param {object} meta\n */\n fillMolecule ({ meta }) {\n this.$__molecule.initAuthorization({ meta })\n this.$__molecule.sign({})\n this.$__molecule.check()\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponseRequestAuthorization}\n */\n createResponse (json) {\n return new ResponseRequestAuthorization({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for token creation\n */\nexport default class ResponseCreateToken extends ResponseProposeMolecule {\n\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponseCreateToken from '../response/ResponseCreateToken.js'\n\n/**\n * Query for creating new Tokens\n */\nexport default class MutationCreateToken extends MutationProposeMolecule {\n /**\n * @param {Wallet|null} recipientWallet\n * @param {number|null} amount\n * @param {object|null} meta\n */\n fillMolecule ({\n recipientWallet,\n amount,\n meta = null\n }) {\n this.$__molecule.initTokenCreation({\n recipientWallet,\n amount,\n meta: meta || {}\n })\n this.$__molecule.sign({\n bundle: recipientWallet.bundle\n })\n this.$__molecule.check()\n }\n\n /**\n * Builds a new Response object from a JSON string\n *\n * @param {object} json\n * @return {ResponseCreateToken}\n */\n createResponse (json) {\n return new ResponseCreateToken({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for identifier creation\n */\nexport default class ResponseRequestTokens extends ResponseProposeMolecule {\n\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponseRequestTokens from '../response/ResponseRequestTokens.js'\n\nexport default class MutationRequestTokens extends MutationProposeMolecule {\n /**\n * Fills a Molecule with the appropriate atoms and prepares for broadcast\n *\n * @param {string} token\n * @param {Number} amount\n * @param {string} metaType\n * @param {string} metaId\n * @param {object} meta\n * @param {string|null} batchId\n */\n fillMolecule ({\n token,\n amount,\n metaType,\n metaId,\n meta = null,\n batchId = null\n }) {\n this.$__molecule.initTokenRequest({\n token,\n amount,\n metaType,\n metaId,\n meta: meta || {},\n batchId\n })\n this.$__molecule.sign({})\n this.$__molecule.check()\n }\n\n /**\n * Builds a Response object out of a JSON string\n *\n * @param {object} json\n * @return {ResponseRequestTokens}\n */\n createResponse (json) {\n return new ResponseRequestTokens({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for token transfer queries\n */\nexport default class ResponseTransferTokens extends ResponseProposeMolecule {\n /**\n * Returns result of the transfer\n *\n * @return {{reason: null, status: null}}\n */\n payload () {\n const result = {\n reason: null,\n status: null\n }\n const data = this.data()\n\n result.reason = typeof data.reason === 'undefined' ? 'Invalid response from server' : data.reason\n result.status = typeof data.status === 'undefined' ? 'rejected' : data.status\n\n return result\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponseTransferTokens from '../response/ResponseTransferTokens.js'\n\n/**\n * Query for moving tokens between wallets\n */\nexport default class MutationTransferTokens extends MutationProposeMolecule {\n /**\n * Fills the Molecule with provided wallet and amount data\n *\n * @param recipientWallet\n * @param amount\n */\n fillMolecule ({\n recipientWallet,\n amount\n }) {\n this.$__molecule.initValue({\n recipientWallet,\n amount\n })\n this.$__molecule.sign({})\n this.$__molecule.check(this.$__molecule.sourceWallet)\n }\n\n /**\n * Builds a Response object out of a JSON string\n *\n * @param {object} json\n * @return {ResponseTransferTokens}\n */\n createResponse (json) {\n return new ResponseTransferTokens({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for identifier creation\n */\nexport default class ResponseCreateIdentifier extends ResponseProposeMolecule {\n\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponseCreateIdentifier from '../response/ResponseCreateIdentifier.js'\n\n/**\n * Query for creating a new Identifier\n */\nexport default class MutationCreateIdentifier extends MutationProposeMolecule {\n fillMolecule ({\n type,\n contact,\n code\n }) {\n this.$__molecule.initIdentifierCreation({\n type,\n contact,\n code\n })\n this.$__molecule.sign({})\n this.$__molecule.check()\n }\n\n /**\n * Builds a Response object out of a JSON string\n *\n * @param {object} json\n * @return {ResponseCreateIdentifier}\n */\n createResponse (json) {\n return new ResponseCreateIdentifier({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for identifier creation\n */\nexport default class ResponseClaimShadowWallet extends ResponseProposeMolecule {\n\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport Wallet from '../Wallet.js'\nimport ResponseClaimShadowWallet from '../response/ResponseClaimShadowWallet.js'\n\n/**\n * Mutation for claiming a Shadow Wallet\n */\nexport default class MutationClaimShadowWallet extends MutationProposeMolecule {\n /**\n * Class constructor\n *\n * @param {string} token\n * @param {string|null} batchId\n */\n fillMolecule ({\n token,\n batchId = null\n }) {\n const wallet = Wallet.create({\n secret: this.$__molecule.secret,\n bundle: this.$__molecule.bundle,\n token,\n batchId\n })\n\n this.$__molecule.initShadowWalletClaim(wallet)\n this.$__molecule.sign({})\n this.$__molecule.check()\n }\n\n /**\n * Builds a Response object out of a JSON string\n *\n * @param {object} json\n * @return {ResponseClaimShadowWallet}\n */\n createResponse (json) {\n return new ResponseClaimShadowWallet({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for token creation\n */\nexport default class ResponseCreateMeta extends ResponseProposeMolecule {\n\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponseCreateMeta from '../response/ResponseCreateMeta.js'\n\n/**\n * Query for creating new Meta attached to some MetaType\n */\nexport default class MutationCreateMeta extends MutationProposeMolecule {\n /**\n * Fills a molecule with an appropriate metadata atom\n *\n * @param {string} metaType\n * @param {string} metaId\n * @param {array|object} meta\n * @param {object} policy\n */\n fillMolecule ({\n metaType,\n metaId,\n meta,\n policy\n }) {\n this.$__molecule.initMeta({\n meta,\n metaType,\n metaId,\n policy\n })\n this.$__molecule.sign({})\n this.$__molecule.check()\n }\n\n /**\n * Builds a new Response object from a JSON string\n *\n * @param {object} json\n * @return {ResponseCreateMeta}\n */\n createResponse (json) {\n return new ResponseCreateMeta({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for peer registration via P-isotope\n */\nexport default class ResponsePeering extends ResponseProposeMolecule {\n\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponsePeering from '../response/ResponsePeering.js'\n\n/**\n * Mutation for registering a peer node via the P-isotope\n */\nexport default class MutationPeering extends MutationProposeMolecule {\n /**\n * Fills a molecule with a P-isotope peering atom\n *\n * @param {string} host\n */\n fillMolecule ({\n host\n }) {\n this.$__molecule.initPeering({\n host\n })\n this.$__molecule.sign({})\n this.$__molecule.check()\n }\n\n /**\n * Builds a new Response object from a JSON string\n *\n * @param {object} json\n * @return {ResponsePeering}\n */\n createResponse (json) {\n return new ResponsePeering({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for append requests via A-isotope\n */\nexport default class ResponseAppendRequest extends ResponseProposeMolecule {\n\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponseAppendRequest from '../response/ResponseAppendRequest.js'\n\n/**\n * Mutation for submitting an append request via the A-isotope\n */\nexport default class MutationAppendRequest extends MutationProposeMolecule {\n /**\n * Fills a molecule with an A-isotope append request atom\n *\n * @param {string} metaType\n * @param {string} metaId\n * @param {string} action\n * @param {object} meta\n */\n fillMolecule ({\n metaType,\n metaId,\n action,\n meta = {}\n }) {\n this.$__molecule.initAppendRequest({\n metaType,\n metaId,\n action,\n meta\n })\n this.$__molecule.sign({})\n this.$__molecule.check()\n }\n\n /**\n * Builds a new Response object from a JSON string\n *\n * @param {object} json\n * @return {ResponseAppendRequest}\n */\n createResponse (json) {\n return new ResponseAppendRequest({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for Wallet creation\n */\nexport default class ResponseCreateWallet extends ResponseProposeMolecule {\n\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponseCreateWallet from '../response/ResponseCreateWallet.js'\n\n/**\n * Query for creating new Wallets\n */\nexport default class MutationCreateWallet extends MutationProposeMolecule {\n fillMolecule (wallet) {\n this.$__molecule.initWalletCreation(wallet)\n this.$__molecule.sign({})\n this.$__molecule.check()\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponseCreateWallet}\n */\n createResponse (json) {\n return new ResponseCreateWallet({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Response from './Response.js'\nimport Dot from '../libraries/Dot.js'\nimport InvalidResponseException from '../exception/InvalidResponseException.js'\n\n/**\n * Response for guest auth mutation\n */\nexport default class ResponseRequestAuthorizationGuest extends Response {\n /**\n * Class constructor\n *\n * @param {MutationRequestAuthorizationGuest} query\n * @param json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.AccessToken'\n })\n }\n\n /**\n * Returns the reason for rejection\n *\n * @return {string}\n */\n reason () {\n return 'Invalid response from server'\n }\n\n /**\n * Returns whether molecule was accepted or not\n *\n * @return {boolean}\n */\n success () {\n return this.payload() !== null\n }\n\n /**\n * Returns a wallet with balance\n *\n * @return {null|Wallet}\n */\n payload () {\n return this.data()\n }\n\n /**\n * Returns the authorization key\n *\n * @param key\n * @return {*}\n */\n payloadKey (key) {\n if (!Dot.has(this.payload(), key)) {\n throw new InvalidResponseException(`ResponseAuthorizationGuest::payloadKey() - '${ key }' key is not found in the payload!`)\n }\n return Dot.get(this.payload(), key)\n }\n\n /**\n * Returns the auth token\n *\n * @return {*}\n */\n token () {\n return this.payloadKey('token')\n }\n\n /**\n * Returns timestamp\n *\n * @return {*}\n */\n time () {\n return this.payloadKey('time')\n }\n\n /**\n * Returns timestamp\n *\n * @return {string}\n */\n pubKey () {\n return this.payloadKey('key')\n }\n\n /**\n *\n * @return {string}\n */\n encrypt () {\n return this.payloadKey('encrypt')\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Mutation from '../mutation/Mutation.js'\nimport ResponseRequestAuthorizationGuest from '../response/ResponseRequestAuthorizationGuest.js'\nimport { gql } from '@urql/core'\n\nexport default class MutationRequestAuthorizationGuest extends Mutation {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`mutation( $cellSlug: String, $pubkey: String, $encrypt: Boolean ) {\n AccessToken( cellSlug: $cellSlug, pubkey: $pubkey, encrypt: $encrypt ) {\n token,\n pubkey,\n expiresAt\n }\n }`\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponseRequestAuthorizationGuest}\n */\n createResponse (json) {\n return new ResponseRequestAuthorizationGuest({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when failing to retrieve shadow wallets\n */\nexport default class WalletShadowException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'The shadow wallet does not exist', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'WalletShadowException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when a stackable token is being created with units and non-zero decimals\n */\nexport default class StackableUnitDecimalsException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Stackable tokens with unit IDs cannot have decimal places!', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'StackableUnitDecimalsException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when a stackable token is being transferred with both unit IDs AND an amount specified (ambiguous)\n */\nexport default class StackableUnitAmountException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Stackable tokens with unit IDs cannot have an amount!', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'StackableUnitAmountException'\n }\n}\n","import CodeException from '../exception/CodeException.js'\n\nexport default class Subscribe {\n /**\n *\n * @param {UrqlClientWrapper} graphQLClient\n */\n constructor (graphQLClient) {\n this.client = graphQLClient\n this.$__variables = null\n this.$__subscribe = null\n }\n\n /**\n * Creates a new Request for the given parameters\n *\n * @param {{}} variables\n * @returns {{variables: (Object|null), fetchPolicy: string, query: null}}\n */\n createSubscribe ({\n variables = null\n }) {\n this.$__variables = this.compiledVariables(variables)\n\n // Uri is a required parameter\n const uri = this.uri()\n\n if (!uri) {\n throw new CodeException('Subscribe::createSubscribe() - Node URI was not initialized for this client instance!')\n }\n\n if (this.$__subscribe === null) {\n throw new CodeException('Subscribe::createSubscribe() - GraphQL subscription was not initialized!')\n }\n\n return {\n query: this.$__subscribe,\n variables: this.variables(),\n fetchPolicy: 'no-cache'\n }\n }\n\n /**\n * Sends the Query to a Knish.IO node and returns the Response\n *\n * @param {{}} variables\n * @param {function} closure\n * @return {string}\n */\n async execute ({\n variables = null,\n closure\n }) {\n if (!closure) {\n throw new CodeException(`${ this.constructor.name }::execute() - closure parameter is required!`)\n }\n\n this.$__request = this.createSubscribe({\n variables\n })\n\n return this.client.subscribe(this.$__request, closure)\n }\n\n /**\n * Returns a variables object for the Query\n *\n * @param variables\n * @return {object}\n */\n compiledVariables (variables = null) {\n return variables || {}\n }\n\n /**\n * Returns the Knish.IO endpoint URI\n *\n * @return {string}\n */\n uri () {\n return this.client.getUri()\n }\n\n /**\n * Returns the query variables object\n *\n * @return {object|null}\n */\n variables () {\n return this.$__variables\n }\n}\n","import Subscribe from './Subscribe.js'\nimport { gql } from '@urql/core'\n\nexport default class CreateMoleculeSubscribe extends Subscribe {\n constructor (graphQLClient) {\n super(graphQLClient)\n this.$__subscribe = gql`\n subscription onCreateMolecule ( $bundle: String! ) {\n CreateMolecule( bundle: $bundle ) {\n molecularHash,\n cellSlug,\n counterparty,\n bundleHash,\n status,\n local,\n height,\n depth,\n createdAt,\n receivedAt,\n processedAt,\n broadcastedAt,\n reason,\n reasonPayload,\n payload,\n status,\n atoms {\n molecularHash,\n position,\n isotope,\n walletAddress,\n tokenSlug,\n batchId,\n value,\n index,\n metaType,\n metaId,\n metasJson,\n otsFragment,\n createdAt,\n metas {\n molecularHash,\n position,\n metaType,\n metaId,\n key,\n value,\n createdAt,\n }\n }\n }\n }\n `\n }\n}\n","import Subscribe from './Subscribe.js'\nimport { gql } from '@urql/core'\n\nexport default class WalletStatusSubscribe extends Subscribe {\n constructor (graphQLClient) {\n super(graphQLClient)\n this.$__subscribe = gql`\n subscription onWalletStatus ( $bundle: String!, $token: String! ) {\n WalletStatus( bundle: $bundle, token: $token ) {\n bundle,\n token,\n admission,\n balance,\n }\n }\n `\n }\n}\n","import Subscribe from './Subscribe.js'\nimport { gql } from '@urql/core'\n\nexport default class ActiveWalletSubscribe extends Subscribe {\n constructor (graphQLClient) {\n super(graphQLClient)\n this.$__subscribe = gql`\n subscription onActiveWallet ( $bundle: String! ) {\n ActiveWallet( bundle: $bundle ) {\n address,\n bundleHash,\n walletBundle {\n bundleHash,\n slug,\n createdAt,\n },\n tokenSlug,\n token {\n slug,\n name,\n fungibility,\n supply,\n decimals,\n amount,\n icon,\n createdAt\n },\n batchId,\n position,\n characters,\n pubkey,\n amount,\n createdAt,\n metas {\n molecularHash,\n position,\n metaType,\n metaId,\n key,\n value,\n createdAt,\n }\n }\n }\n `\n }\n}\n","import Subscribe from './Subscribe.js'\nimport { gql } from '@urql/core'\n\nexport default class ActiveSessionSubscribe extends Subscribe {\n constructor (graphQLClient) {\n super(graphQLClient)\n this.$__subscribe = gql`\n subscription onActiveUser ( $metaType: String!, $metaId: String! ) {\n ActiveUser( metaType: $metaType, metaId: $metaId ) {\n bundleHash,\n metaType,\n metaId,\n jsonData,\n createdAt,\n updatedAt\n }\n }`\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\n\nexport default class ResponseActiveSession extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.ActiveSession'\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Mutation from '../mutation/Mutation.js'\nimport ResponseActiveSession from '../response/ResponseActiveSession.js'\nimport { gql } from '@urql/core'\n\n/**\n * Mutation for declaring an active User Session with a given MetaAsset\n */\nexport default class MutationActiveSession extends Mutation {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`mutation(\n $bundleHash: String!,\n $metaType: String!,\n $metaId: String!,\n $ipAddress: String,\n $browser: String,\n $osCpu: String,\n $resolution: String,\n $timeZone: String,\n $json: String ) {\n ActiveSession(\n bundleHash: $bundleHash,\n metaType: $metaType,\n metaId: $metaId,\n ipAddress: $ipAddress,\n browser: $browser,\n osCpu: $osCpu,\n resolution: $resolution,\n timeZone: $timeZone,\n json: $json\n ) {\n bundleHash,\n metaType,\n metaId,\n jsonData,\n createdAt,\n updatedAt\n }\n }`\n }\n\n /**\n * Builds a Response object out of a JSON string\n *\n * @param {object} json\n * @return {ResponseActiveSession}\n */\n createResponse (json) {\n return new ResponseActiveSession({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\n\n/**\n * Response for QueryActiveSession\n */\nexport default class ResponseQueryActiveSession extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.ActiveUser'\n })\n }\n\n payload () {\n const list = this.data()\n\n if (!list) {\n return null\n }\n\n const activeUsers = []\n\n for (const item of list) {\n const activeSession = { ...item }\n\n if (activeSession.jsonData) {\n activeSession.jsonData = JSON.parse(activeSession.jsonData)\n }\n\n if (activeSession.createdAt) {\n activeSession.createdAt = new Date(activeSession.createdAt)\n }\n\n if (activeSession.updatedAt) {\n activeSession.updatedAt = new Date(activeSession.updatedAt)\n }\n\n activeUsers.push(activeSession)\n }\n\n return activeUsers\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseQueryActiveSession from '../response/ResponseQueryActiveSession.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for retrieving a list of active User Sessions\n */\nexport default class QueryActiveSession extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query ActiveUserQuery ($bundleHash:String, $metaType: String, $metaId: String) {\n ActiveUser (bundleHash: $bundleHash, metaType: $metaType, metaId: $metaId) {\n bundleHash,\n metaType,\n metaId,\n jsonData,\n createdAt,\n updatedAt\n }\n }`\n }\n\n /**\n * @param {object} json\n * @return {ResponseQueryActiveSession}\n */\n createResponse (json) {\n return new ResponseQueryActiveSession({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\n\nexport default class ResponseQueryUserActivity extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.UserActivity'\n })\n }\n\n payload () {\n const data = JSON.parse(JSON.stringify(this.data()))\n\n if (data.instances) {\n for (const datum of data.instances) {\n datum.jsonData = JSON.parse(datum.jsonData)\n }\n }\n\n return data\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseQueryUserActivity from '../response/ResponseQueryUserActivity.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for retrieving information about user activity\n */\nexport default class QueryUserActivity extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query UserActivity (\n $bundleHash:String,\n $metaType: String,\n $metaId: String,\n $ipAddress: String,\n $browser: String,\n $osCpu: String,\n $resolution: String,\n $timeZone: String,\n $countBy: [CountByUserActivity],\n $interval: span\n ) {\n UserActivity (\n bundleHash: $bundleHash,\n metaType: $metaType,\n metaId: $metaId,\n ipAddress: $ipAddress,\n browser: $browser,\n osCpu: $osCpu,\n resolution: $resolution,\n timeZone: $timeZone,\n countBy: $countBy,\n interval: $interval\n ) {\n createdAt,\n bundleHash,\n metaType,\n metaId,\n instances {\n bundleHash,\n metaType,\n metaId,\n jsonData,\n createdAt,\n updatedAt\n },\n instanceCount {\n ...SubFields,\n ...Recursive\n }\n }\n }\n\n fragment SubFields on InstanceCountType {\n id,\n count\n }\n\n fragment Recursive on InstanceCountType {\n instances {\n ...SubFields\n instances {\n ...SubFields,\n instances {\n ...SubFields\n instances {\n ...SubFields\n instances {\n ...SubFields\n instances {\n ...SubFields\n instances {\n ...SubFields\n instances {\n ...SubFields\n }\n }\n }\n }\n }\n }\n }\n }\n }`\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponseQueryUserActivity}\n */\n createResponse (json) {\n return new ResponseQueryUserActivity({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport Response from '../response/Response.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for getting the token info\n */\nexport default class QueryToken extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query( $slug: String, $slugs: [ String! ], $limit: Int, $order: String ) {\n Token( slug: $slug, slugs: $slugs, limit: $limit, order: $order ) {\n slug,\n name,\n fungibility,\n supply,\n decimals,\n amount,\n icon,\n }\n }`\n }\n\n /**\n *\n * @param json\n * @returns {Response}\n */\n createResponse (json) {\n return new Response({\n query: this,\n json,\n dataKey: 'data.Token'\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport BaseException from './BaseException.js'\n\n/**\n * Thrown when attempt to authorize is rejected by the node\n */\nexport default class AuthorizationRejectedException extends BaseException {\n /**\n * Class constructor\n *\n * @param {string} message\n * @param {string|null} fileName\n * @param {number|null} lineNumber\n */\n constructor (message = 'Authorization attempt rejected by ledger.', fileName = null, lineNumber = null) {\n super(message, fileName, lineNumber)\n this.name = 'AuthorizationRejectedException'\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\n\n/**\n * Response for MetaType Query\n */\nexport default class ResponseAtom extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.Atom'\n })\n }\n\n /**\n * Returns meta type instance results\n *\n * @return {null|*}\n */\n payload () {\n const metaTypeData = this.data()\n\n if (!metaTypeData) {\n return null\n }\n\n const response = {\n instances: [],\n instanceCount: {},\n paginatorInfo: {}\n }\n\n if (metaTypeData.instances) {\n response.instances = metaTypeData.instances\n\n for (const instanceKey in response.instances) {\n const instance = response.instances[instanceKey]\n if (instance.metasJson) {\n response.instances[instanceKey].metas = JSON.parse(instance.metasJson)\n }\n }\n }\n\n if (metaTypeData.instanceCount) {\n response.instanceCount = metaTypeData.instanceCount\n }\n\n if (metaTypeData.paginatorInfo) {\n response.paginatorInfo = metaTypeData.paginatorInfo\n }\n\n return response\n }\n\n metas () {\n const response = this.payload()\n const metas = []\n\n if (response && response.instances) {\n for (const instance of response.instances) {\n if (instance.metasJson) {\n metas.push(JSON.parse(instance.metasJson))\n }\n }\n }\n\n return metas\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseAtom from '../response/ResponseAtom.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for getting the balance of a given wallet or token slug\n */\nexport default class QueryAtom extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query(\n $molecularHashes: [String!],\n $bundleHashes: [String!],\n $positions:[String!],\n $walletAddresses: [String!],\n $isotopes: [String!],\n $tokenSlugs: [String!],\n $cellSlugs: [String!],\n $batchIds: [String!],\n $values: [String!],\n $metaTypes: [String!],\n $metaIds: [String!],\n $indexes: [String!],\n $filter: [ MetaFilter! ],\n $latest: Boolean,\n $queryArgs: QueryArgs,\n ) {\n Atom(\n molecularHashes: $molecularHashes,\n bundleHashes: $bundleHashes,\n positions: $positions,\n walletAddresses: $walletAddresses,\n isotopes: $isotopes,\n tokenSlugs: $tokenSlugs,\n cellSlugs: $cellSlugs,\n batchIds: $batchIds,\n values: $values,\n metaTypes: $metaTypes,\n metaIds: $metaIds,\n indexes: $indexes,\n filter: $filter,\n latest: $latest,\n queryArgs: $queryArgs,\n ) {\n instances {\n position,\n walletAddress,\n tokenSlug,\n isotope,\n index,\n molecularHash,\n metaId,\n metaType,\n metasJson,\n batchId,\n value,\n bundleHashes,\n cellSlugs,\n createdAt,\n otsFragment\n },\n paginatorInfo {\n currentPage,\n total\n }\n }\n }`\n }\n\n /**\n * Queries Knish.IO Atoms\n *\n * @param {string[]} molecularHashes\n * @param {string} molecularHash\n * @param {string[]} bundleHashes\n * @param {string} bundleHash\n * @param {string[]} positions\n * @param {string} position\n * @param {string[]} walletAddresses\n * @param {string} walletAddress\n * @param {string[]} isotopes\n * @param {string} isotope\n * @param {string[]} tokenSlugs\n * @param {string} tokenSlug\n * @param {string[]} cellSlugs\n * @param {string} cellSlug\n * @param {string[]} batchIds\n * @param {string} batchId\n * @param {string[]} values\n * @param {string|number} value\n * @param {string[]} metaTypes\n * @param {string} metaType\n * @param {string[]} metaIds\n * @param {string} metaId\n * @param {number[]} indexes\n * @param {number} index\n * @param {object[]} filter,\n * @param {boolean} latest\n * @param {object} queryArgs\n * @return {object}\n */\n static createVariables ({\n molecularHashes,\n molecularHash,\n bundleHashes,\n bundleHash,\n positions,\n position,\n walletAddresses,\n walletAddress,\n isotopes,\n isotope,\n tokenSlugs,\n tokenSlug,\n cellSlugs,\n cellSlug,\n batchIds,\n batchId,\n values,\n value,\n metaTypes,\n metaType,\n metaIds,\n metaId,\n indexes,\n index,\n filter,\n latest,\n queryArgs\n }) {\n if (molecularHash) {\n molecularHashes = molecularHashes || []\n molecularHashes.push(molecularHash)\n }\n\n if (bundleHash) {\n bundleHashes = bundleHashes || []\n bundleHashes.push(bundleHash)\n }\n\n if (position) {\n positions = positions || []\n positions.push(position)\n }\n\n if (walletAddress) {\n walletAddresses = walletAddresses || []\n walletAddresses.push(walletAddress)\n }\n\n if (isotope) {\n isotopes = isotopes || []\n isotopes.push(isotope)\n }\n\n if (tokenSlug) {\n tokenSlugs = tokenSlugs || []\n tokenSlugs.push(tokenSlug)\n }\n\n if (cellSlug) {\n cellSlugs = cellSlugs || []\n cellSlugs.push(cellSlug)\n }\n\n if (batchId) {\n batchIds = batchIds || []\n batchIds.push(batchId)\n }\n\n if (value) {\n values = values || []\n values.push(value)\n }\n\n if (metaType) {\n metaTypes = metaTypes || []\n metaTypes.push(metaType)\n }\n\n if (metaId) {\n metaIds = metaIds || []\n metaIds.push(metaId)\n }\n\n if (index) {\n indexes = indexes || []\n indexes.push(index)\n }\n\n return {\n molecularHashes,\n bundleHashes,\n positions,\n walletAddresses,\n isotopes,\n tokenSlugs,\n cellSlugs,\n batchIds,\n values,\n metaTypes,\n metaIds,\n indexes,\n filter,\n latest,\n queryArgs\n }\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponseAtom}\n */\n createResponse (json) {\n return new ResponseAtom({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\n\nexport default class ResponsePolicy extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json\n })\n this.dataKey = 'data.Policy'\n this.init()\n }\n\n /**\n *\n * @returns {null|object}\n */\n payload () {\n const policy = this.data()\n\n if (!policy) {\n return null\n }\n\n if (policy.callback) {\n return JSON.parse(policy.callback)\n }\n\n return null\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Query from './Query.js'\nimport ResponsePolicy from '../response/ResponsePolicy.js'\nimport { gql } from \"@urql/core\";\n\nexport default class QueryPolicy extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query( $metaType: String, $metaId: String, ) {\n Policy( metaType: $metaType, metaId: $metaId ) {\n molecularHash,\n position,\n metaType,\n metaId,\n conditions,\n callback,\n rule,\n createdAt\n }\n }`\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponsePolicy}\n */\n createResponse (json) {\n return new ResponsePolicy({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\n\nexport default class ResponseMetaTypeViaAtom extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.MetaTypeViaAtom'\n })\n }\n\n payload () {\n const metaTypeData = this.data()\n\n if (!metaTypeData || metaTypeData.length === 0) {\n return null\n }\n\n const response = {\n instances: {},\n instanceCount: {},\n paginatorInfo: {}\n }\n\n const metaData = metaTypeData.pop()\n\n if (metaData.instances) {\n response.instances = metaData.instances\n }\n\n if (metaData.instanceCount) {\n response.instanceCount = metaData.instanceCount\n }\n\n if (metaData.paginatorInfo) {\n response.paginatorInfo = metaData.paginatorInfo\n }\n\n return response\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseMetaTypeViaAtom from '../response/ResponseMetaTypeViaAtom.js'\nimport { gql } from '@urql/core'\n\nexport default class QueryMetaTypeViaAtom extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query ($metaTypes: [String!], $metaIds: [String!], $values: [String!], $keys: [String!], $latest: Boolean, $filter: [MetaFilter!], $queryArgs: QueryArgs, $countBy: String, $atomValues: [String!], $cellSlugs: [String!] ) {\n MetaTypeViaAtom(\n metaTypes: $metaTypes\n metaIds: $metaIds\n atomValues: $atomValues\n cellSlugs: $cellSlugs\n filter: $filter,\n latest: $latest,\n queryArgs: $queryArgs\n countBy: $countBy\n ) {\n metaType,\n instanceCount {\n key,\n value\n },\n instances {\n metaType,\n metaId,\n createdAt,\n metas( values: $values, keys: $keys ) {\n molecularHash,\n position,\n key,\n value,\n createdAt\n }\n },\n paginatorInfo {\n currentPage,\n total\n }\n }\n }`\n }\n\n /**\n * Builds a GraphQL-friendly variables object based on input fields\n *\n * @param {string|array|null} metaType\n * @param {string|array|null} metaId\n * @param {string|null} key\n * @param {string|null} value\n * @param {array|null} values\n * @param {array|null} keys\n * @param {array|null} atomValues\n * @param {boolean|null} latest\n * @param {array|null} filter\n * @param {object|null} queryArgs\n * @param {string|null} countBy\n * @param {string|null} cellSlug\n * @return {{}}\n */\n static createVariables ({\n metaType = null,\n metaId = null,\n key = null,\n value = null,\n keys = null,\n values = null,\n atomValues = null,\n latest = null,\n filter = null,\n queryArgs = null,\n countBy = null,\n cellSlug = null\n }) {\n const variables = {}\n\n if (atomValues) {\n variables.atomValues = atomValues\n }\n\n if (keys) {\n variables.keys = keys\n }\n\n if (values) {\n variables.values = values\n }\n\n if (metaType) {\n variables.metaTypes = typeof metaType === 'string' ? [metaType] : metaType\n }\n\n if (metaId) {\n variables.metaIds = typeof metaId === 'string' ? [metaId] : metaId\n }\n\n if (cellSlug) {\n variables.cellSlugs = typeof cellSlug === 'string' ? [cellSlug] : cellSlug\n }\n\n if (countBy) {\n variables.countBy = countBy\n }\n\n if (filter) {\n variables.filter = filter\n }\n\n if (key && value) {\n variables.filter = variables.filter || []\n variables.filter.push({\n key,\n value,\n comparison: '='\n })\n }\n\n variables.latest = latest === true\n\n if (queryArgs) {\n if (typeof queryArgs.limit === 'undefined' || queryArgs.limit === 0) {\n queryArgs.limit = '*'\n }\n\n variables.queryArgs = queryArgs\n }\n\n return variables\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponseMetaTypeViaAtom}\n */\n createResponse (json) {\n return new ResponseMetaTypeViaAtom({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (//////////////)\n (////////////////( (///////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\n\nimport Query from '../query/Query.js'\nimport Response from './Response.js'\nimport CheckMolecule from '../libraries/CheckMolecule.js'\n\n/**\n * Response for MetaType queries via Molecule data.\n *\n * Instead of using the redundant instance-level `metas` field,\n * this response extracts metadata from molecule atoms' `metasJson`,\n * producing a payload format compatible with ResponseMetaType and\n * ResponseMetaTypeViaAtom for drop-in replacement usage.\n */\nexport default class ResponseMetaTypeViaMolecule extends Response {\n /**\n * Class constructor\n *\n * @param {Query} query\n * @param {object} json\n */\n constructor ({\n query,\n json\n }) {\n super({\n query,\n json,\n dataKey: 'data.MetaTypeViaAtom'\n })\n }\n\n /**\n * Extracts metas from a molecule's atoms' metasJson for a specific instance.\n * Filters atoms by matching metaType and metaId, then parses metasJson.\n *\n * @param {object} molecule - Molecule data with atoms array\n * @param {string} metaType - Instance meta type to filter by\n * @param {string} metaId - Instance meta ID to filter by\n * @return {Array<{molecularHash: string, position: string, key: string, value: string, createdAt: string}>}\n */\n static extractMetasFromMolecule (molecule, metaType, metaId) {\n if (!molecule || !molecule.atoms) {\n return []\n }\n\n const metas = []\n\n for (const atom of molecule.atoms) {\n // Filter atoms to those matching this instance's metaType and metaId\n if (atom.metaType !== metaType || atom.metaId !== metaId) {\n continue\n }\n\n if (!atom.metasJson) {\n continue\n }\n\n let parsed\n try {\n parsed = JSON.parse(atom.metasJson)\n if (!Array.isArray(parsed)) {\n continue\n }\n } catch (e) {\n continue\n }\n\n for (const entry of parsed) {\n metas.push({\n molecularHash: molecule.molecularHash,\n position: atom.position,\n key: entry.key,\n value: entry.value,\n createdAt: atom.createdAt\n })\n }\n }\n\n return metas\n }\n\n /**\n * Returns meta type instance results with metas synthesized from molecule data.\n * Produces the same payload format as ResponseMetaType and ResponseMetaTypeViaAtom:\n * { instances, instanceCount, paginatorInfo }\n *\n * @return {null|{instances: Array, instanceCount: Array, paginatorInfo: object}}\n */\n payload () {\n const metaTypeData = this.data()\n\n if (!metaTypeData || metaTypeData.length === 0) {\n return null\n }\n\n const response = {\n instances: {},\n instanceCount: {},\n paginatorInfo: {}\n }\n\n const metaData = metaTypeData.pop()\n\n if (metaData.instances) {\n response.instances = metaData.instances.map(instance => {\n // Prefer server-filtered metas (from metas sub-field) when available\n let metas = instance.metas\n if (!metas || metas.length === 0) {\n // Fallback: synthesize from molecule atoms' metasJson\n metas = ResponseMetaTypeViaMolecule.extractMetasFromMolecule(\n instance.molecule,\n instance.metaType,\n instance.metaId\n )\n }\n\n return {\n ...instance,\n metas\n }\n })\n }\n\n if (metaData.instanceCount) {\n response.instanceCount = metaData.instanceCount\n }\n\n if (metaData.paginatorInfo) {\n response.paginatorInfo = metaData.paginatorInfo\n }\n\n return response\n }\n\n /**\n * Verifies the cryptographic integrity of all molecules associated\n * with meta instances in this response. For each instance, reconstructs\n * the molecule from server data and runs CheckMolecule.verify() to validate\n * the molecular hash and OTS signature.\n *\n * @return {{ verified: boolean, molecules: Array<{ molecularHash: string, verified: boolean, error: string|null }> }}\n */\n verifyIntegrity () {\n const results = []\n const metaTypeData = this.data()\n\n if (!metaTypeData || metaTypeData.length === 0) {\n return { verified: true, molecules: results }\n }\n\n const instances = metaTypeData[metaTypeData.length - 1]?.instances || []\n\n for (const instance of instances) {\n if (!instance.molecule) continue\n results.push(CheckMolecule.verifyFromServerData(instance.molecule))\n }\n\n return {\n verified: results.length === 0 || results.every(r => r.verified),\n molecules: results\n }\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (//////////////)\n (////////////////( (///////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport Query from './Query.js'\nimport ResponseMetaTypeViaMolecule from '../response/ResponseMetaTypeViaMolecule.js'\nimport { gql } from '@urql/core'\n\n/**\n * Query for retrieving Meta Asset information via Molecule data.\n *\n * Unlike QueryMetaTypeViaAtom, this query does NOT request the redundant\n * instance-level `metas` field. Instead, metadata is extracted client-side\n * from molecule atoms' `metasJson`, eliminating duplicate data transfer.\n */\nexport default class QueryMetaTypeViaMolecule extends Query {\n /**\n * @param {UrqlClientWrapper} graphQLClient\n * @param {KnishIOClient} knishIOClient\n */\n constructor (graphQLClient, knishIOClient) {\n super(graphQLClient, knishIOClient)\n\n this.$__query = gql`query ($metaTypes: [String!], $metaIds: [String!], $values: [String!], $keys: [String!], $latest: Boolean, $filter: [MetaFilter!], $queryArgs: QueryArgs, $countBy: String, $atomValues: [String!], $cellSlugs: [String!] ) {\n MetaTypeViaAtom(\n metaTypes: $metaTypes\n metaIds: $metaIds\n atomValues: $atomValues\n cellSlugs: $cellSlugs\n filter: $filter,\n latest: $latest,\n queryArgs: $queryArgs\n countBy: $countBy\n ) {\n metaType,\n instanceCount {\n key,\n value\n },\n instances {\n metaType,\n metaId,\n createdAt,\n metas( values: $values, keys: $keys ) {\n molecularHash,\n position,\n key,\n value,\n createdAt\n },\n molecule {\n molecularHash,\n bundleHash,\n cellSlug,\n status,\n createdAt,\n atoms {\n position,\n walletAddress,\n isotope,\n tokenSlug,\n value,\n batchId,\n metaType,\n metaId,\n index,\n createdAt,\n otsFragment,\n metasJson\n }\n }\n },\n paginatorInfo {\n currentPage,\n total\n }\n }\n }`\n }\n\n /**\n * Builds a GraphQL-friendly variables object based on input fields\n *\n * @param {string|array|null} metaType\n * @param {string|array|null} metaId\n * @param {string|null} key\n * @param {string|null} value\n * @param {array|null} values\n * @param {array|null} keys\n * @param {array|null} atomValues\n * @param {boolean|null} latest\n * @param {array|null} filter\n * @param {object|null} queryArgs\n * @param {string|null} countBy\n * @param {string|null} cellSlug\n * @return {{}}\n */\n static createVariables ({\n metaType = null,\n metaId = null,\n key = null,\n value = null,\n keys = null,\n values = null,\n atomValues = null,\n latest = null,\n filter = null,\n queryArgs = null,\n countBy = null,\n cellSlug = null\n }) {\n const variables = {}\n\n if (atomValues) {\n variables.atomValues = atomValues\n }\n\n if (keys) {\n variables.keys = keys\n }\n\n if (values) {\n variables.values = values\n }\n\n if (metaType) {\n variables.metaTypes = typeof metaType === 'string' ? [metaType] : metaType\n }\n\n if (metaId) {\n variables.metaIds = typeof metaId === 'string' ? [metaId] : metaId\n }\n\n if (cellSlug) {\n variables.cellSlugs = typeof cellSlug === 'string' ? [cellSlug] : cellSlug\n }\n\n if (countBy) {\n variables.countBy = countBy\n }\n\n if (filter) {\n variables.filter = filter\n }\n\n if (key && value) {\n variables.filter = variables.filter || []\n variables.filter.push({\n key,\n value,\n comparison: '='\n })\n }\n\n variables.latest = latest === true\n\n if (queryArgs) {\n if (typeof queryArgs.limit === 'undefined' || queryArgs.limit === 0) {\n queryArgs.limit = '*'\n }\n\n variables.queryArgs = queryArgs\n }\n\n return variables\n }\n\n /**\n * Returns a Response object\n *\n * @param {object} json\n * @return {ResponseMetaTypeViaMolecule}\n */\n createResponse (json) {\n return new ResponseMetaTypeViaMolecule({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport ResponseProposeMolecule from './ResponseProposeMolecule.js'\n\n/**\n * Response for rule creation\n */\nexport default class ResponseCreateRule extends ResponseProposeMolecule {\n\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\nimport ResponseCreateRule from '../response/ResponseCreateRule.js'\n\n/**\n * Query for creating new Meta attached to some MetaType\n */\nexport default class MutationCreateRule extends MutationProposeMolecule {\n /**\n *\n * @param {string} metaType\n * @param {string} metaId\n * @param {object[]} rule\n * @param {object} policy\n */\n fillMolecule ({\n metaType,\n metaId,\n rule,\n policy\n }) {\n this.$__molecule.createRule({\n metaType,\n metaId,\n rule,\n policy\n })\n this.$__molecule.sign({})\n this.$__molecule.check()\n }\n\n /**\n * Builds a new Response object from a JSON string\n *\n * @param {object} json\n * @return {ResponseCreateRule}\n */\n createResponse (json) {\n return new ResponseCreateRule({\n query: this,\n json\n })\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\n\n/**\n *\n */\nexport default class MutationDepositBufferToken extends MutationProposeMolecule {\n /**\n * Fills the Molecule with provided wallet and amount data\n *\n * @param amount\n * @param tradeRates\n */\n fillMolecule ({\n amount,\n tradeRates\n }) {\n this.$__molecule.initDepositBuffer({\n amount,\n tradeRates\n })\n this.$__molecule.sign({})\n this.$__molecule.check(this.$__molecule.sourceWallet)\n }\n}\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n*/\nimport MutationProposeMolecule from './MutationProposeMolecule.js'\n\n/**\n *\n */\nexport default class MutationWithdrawBufferToken extends MutationProposeMolecule {\n /**\n *\n * @param recipients\n * @param signingWallet\n */\n fillMolecule ({\n recipients,\n signingWallet\n }) {\n this.$__molecule.initWithdrawBuffer({\n recipients,\n signingWallet\n })\n this.$__molecule.sign({})\n this.$__molecule.check(this.$__molecule.sourceWallet)\n }\n}\n","function e(e,n,r,t){return new(r||(r=Promise))((function(o,a){function i(e){try{c(t.next(e))}catch(e){a(e)}}function u(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var n;e.done?o(e.value):(n=e.value,n instanceof r?n:new r((function(e){e(n)}))).then(i,u)}c((t=t.apply(e,n||[])).next())}))}function n(e,n){var r,t,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:u(0),throw:u(1),return:u(2)},\"function\"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(r)throw new TypeError(\"Generator is already executing.\");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(r=1,t&&(o=2&u[0]?t.return:u[0]?t.throw||((o=t.return)&&o.call(t),0):t.next)&&!(o=o.call(t,u[1])).done)return o;switch(t=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,t=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=n.call(e,i)}catch(e){u=[6,e],t=0}finally{r=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}\"function\"==typeof SuppressedError&&SuppressedError;var r={exclude:[],include:[],logging:!0};function t(e,n){if(![\"include\",\"exclude\",\"permissions_to_check\",\"retries\",\"timeout\",\"logging\"].includes(e))throw new Error(\"Unknown option \"+e);if([\"include\",\"exclude\",\"permissions_to_check\"].includes(e)&&(!Array.isArray(n)||!n.every((function(e){return\"string\"==typeof e}))))throw new Error(\"The value of the include, exclude and permissions_to_check must be an array of strings\");if([\"retries\",\"timeout\"].includes(e)&&\"number\"!=typeof n)throw new Error(\"The value of retries must be a number\");r[e]=n}var o={},a={timeout:\"true\"},i=function(e,n){\"undefined\"!=typeof window&&(o[e]=n)},u=function(){return Object.fromEntries(Object.entries(o).filter((function(e){var n,t=e[0];return!(null===(n=null==r?void 0:r.exclude)||void 0===n?void 0:n.includes(t))})).filter((function(e){var n,t,o,a,i=e[0];return(null===(n=null==r?void 0:r.include)||void 0===n?void 0:n.some((function(e){return e.includes(\".\")})))?null===(t=null==r?void 0:r.include)||void 0===t?void 0:t.some((function(e){return e.startsWith(i)})):0===(null===(o=null==r?void 0:r.include)||void 0===o?void 0:o.length)||(null===(a=null==r?void 0:r.include)||void 0===a?void 0:a.includes(i))})).map((function(e){return[e[0],(0,e[1])()]})))};function c(e){return e^=e>>>16,e=Math.imul(e,2246822507),e^=e>>>13,e=Math.imul(e,3266489909),(e^=e>>>16)>>>0}var s=new Uint32Array([597399067,2869860233,951274213,2716044179]);function l(e,n){return e<<n|e>>>32-n}function d(e,n){var r;if(void 0===n&&(n=0),n=n?0|n:0,\"string\"==typeof e&&(r=e,e=(new TextEncoder).encode(r).buffer),!(e instanceof ArrayBuffer))throw new TypeError(\"Expected key to be ArrayBuffer or string\");var t=new Uint32Array([n,n,n,n]);!function(e,n){for(var r=e.byteLength/16|0,t=new Uint32Array(e,0,4*r),o=0;o<r;o++){var a=t.subarray(4*o,4*(o+1));a[0]=Math.imul(a[0],s[0]),a[0]=l(a[0],15),a[0]=Math.imul(a[0],s[1]),n[0]=n[0]^a[0],n[0]=l(n[0],19),n[0]=n[0]+n[1],n[0]=Math.imul(n[0],5)+1444728091,a[1]=Math.imul(a[1],s[1]),a[1]=l(a[1],16),a[1]=Math.imul(a[1],s[2]),n[1]=n[1]^a[1],n[1]=l(n[1],17),n[1]=n[1]+n[2],n[1]=Math.imul(n[1],5)+197830471,a[2]=Math.imul(a[2],s[2]),a[2]=l(a[2],17),a[2]=Math.imul(a[2],s[3]),n[2]=n[2]^a[2],n[2]=l(n[2],15),n[2]=n[2]+n[3],n[2]=Math.imul(n[2],5)+2530024501,a[3]=Math.imul(a[3],s[3]),a[3]=l(a[3],18),a[3]=Math.imul(a[3],s[0]),n[3]=n[3]^a[3],n[3]=l(n[3],13),n[3]=n[3]+n[0],n[3]=Math.imul(n[3],5)+850148119}}(e,t),function(e,n){var r=e.byteLength/16|0,t=e.byteLength%16,o=new Uint32Array(4),a=new Uint8Array(e,16*r,t);switch(t){case 15:o[3]=o[3]^a[14]<<16;case 14:o[3]=o[3]^a[13]<<8;case 13:o[3]=o[3]^a[12]<<0,o[3]=Math.imul(o[3],s[3]),o[3]=l(o[3],18),o[3]=Math.imul(o[3],s[0]),n[3]=n[3]^o[3];case 12:o[2]=o[2]^a[11]<<24;case 11:o[2]=o[2]^a[10]<<16;case 10:o[2]=o[2]^a[9]<<8;case 9:o[2]=o[2]^a[8]<<0,o[2]=Math.imul(o[2],s[2]),o[2]=l(o[2],17),o[2]=Math.imul(o[2],s[3]),n[2]=n[2]^o[2];case 8:o[1]=o[1]^a[7]<<24;case 7:o[1]=o[1]^a[6]<<16;case 6:o[1]=o[1]^a[5]<<8;case 5:o[1]=o[1]^a[4]<<0,o[1]=Math.imul(o[1],s[1]),o[1]=l(o[1],16),o[1]=Math.imul(o[1],s[2]),n[1]=n[1]^o[1];case 4:o[0]=o[0]^a[3]<<24;case 3:o[0]=o[0]^a[2]<<16;case 2:o[0]=o[0]^a[1]<<8;case 1:o[0]=o[0]^a[0]<<0,o[0]=Math.imul(o[0],s[0]),o[0]=l(o[0],15),o[0]=Math.imul(o[0],s[1]),n[0]=n[0]^o[0]}}(e,t),function(e,n){n[0]=n[0]^e.byteLength,n[1]=n[1]^e.byteLength,n[2]=n[2]^e.byteLength,n[3]=n[3]^e.byteLength,n[0]=n[0]+n[1]|0,n[0]=n[0]+n[2]|0,n[0]=n[0]+n[3]|0,n[1]=n[1]+n[0]|0,n[2]=n[2]+n[0]|0,n[3]=n[3]+n[0]|0,n[0]=c(n[0]),n[1]=c(n[1]),n[2]=c(n[2]),n[3]=c(n[3]),n[0]=n[0]+n[1]|0,n[0]=n[0]+n[2]|0,n[0]=n[0]+n[3]|0,n[1]=n[1]+n[0]|0,n[2]=n[2]+n[0]|0,n[3]=n[3]+n[0]|0}(e,t);var o=new Uint8Array(t.buffer);return Array.from(o).map((function(e){return e.toString(16).padStart(2,\"0\")})).join(\"\")}function f(e,n){return new Promise((function(r){setTimeout((function(){return r(n)}),e)}))}function h(e,n,r){return Promise.all(e.map((function(e){var t=performance.now();return Promise.race([e.then((function(e){return{value:e,elapsed:performance.now()-t}})),f(n,r).then((function(e){return{value:e,elapsed:performance.now()-t}}))])})))}function m(e,n,r){return Promise.all(e.map((function(e){return Promise.race([e,f(n,r)])})))}var v=\"0.19.1\";function g(){return v}function p(){return e(this,void 0,void 0,(function(){var e,t,o,i,c;return n(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),e=u(),t=Object.keys(e),[4,m(Object.values(e),(null==r?void 0:r.timeout)||1e3,a)];case 1:return o=n.sent(),i=o.filter((function(e){return void 0!==e})),c={},i.forEach((function(e,n){c[t[n]]=e})),[2,w(c,r.exclude||[],r.include||[],\"\")];case 2:throw n.sent();case 3:return[2]}}))}))}function w(e,n,r,t){void 0===t&&(t=\"\");for(var o={},a=function(e,a){var i=t+e+\".\";if(\"object\"!=typeof a||Array.isArray(a)){var u=n.some((function(e){return i.startsWith(e)})),c=r.some((function(e){return i.startsWith(e)}));u&&!c||(o[e]=a)}else{var s=w(a,n,r,i);Object.keys(s).length>0&&(o[e]=s)}},i=0,u=Object.entries(e);i<u.length;i++){var c=u[i];a(c[0],c[1])}return o}function y(t){return e(this,void 0,void 0,(function(){var o,a;return n(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,p()];case 1:return o=i.sent(),a=d(JSON.stringify(o)),Math.random()<.001&&r.logging&&function(r,t){e(this,void 0,void 0,(function(){var e,o;return n(this,(function(n){switch(n.label){case 0:if(e=\"https://logging.thumbmarkjs.com/v1/log\",o={thumbmark:r,components:t,version:g()},sessionStorage.getItem(\"_tmjs_l\"))return[3,4];sessionStorage.setItem(\"_tmjs_l\",\"1\"),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,fetch(e,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify(o)})];case 2:case 3:return n.sent(),[3,4];case 4:return[2]}}))}))}(a,o),t?[2,{hash:a.toString(),data:o}]:[2,a.toString()];case 2:throw i.sent();case 3:return[2]}}))}))}function b(){return e(this,void 0,void 0,(function(){var e,t,o,i;return n(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),e=u(),t=Object.keys(e),[4,h(Object.values(e),(null==r?void 0:r.timeout)||1e3,a)];case 1:return o=n.sent(),i={elapsed:{}},o.forEach((function(e,n){i[t[n]]=e.value,i.elapsed[t[n]]=e.elapsed})),[2,i];case 2:throw n.sent();case 3:return[2]}}))}))}function S(e){for(var n=0,r=0;r<e.length;++r)n+=Math.abs(e[r]);return n}function M(e,n,r){for(var t=[],o=0;o<e[0].data.length;o++){for(var a=[],i=0;i<e.length;i++)a.push(e[i].data[o]);t.push(E(a))}var u=new Uint8ClampedArray(t);return new ImageData(u,n,r)}function E(e){if(0===e.length)return 0;for(var n={},r=0,t=e;r<t.length;r++){n[a=t[r]]=(n[a]||0)+1}var o=e[0];for(var a in n)n[a]>n[o]&&(o=parseInt(a,10));return o}function P(){if(\"undefined\"==typeof navigator)return{name:\"unknown\",version:\"unknown\"};for(var e=navigator.userAgent,n={Edg:\"Edge\",OPR:\"Opera\"},r=0,t=[/(?<name>Edge|Edg)\\/(?<version>\\d+(?:\\.\\d+)?)/,/(?<name>(?:Chrome|Chromium|OPR|Opera|Vivaldi|Brave))\\/(?<version>\\d+(?:\\.\\d+)?)/,/(?<name>(?:Firefox|Waterfox|Iceweasel|IceCat))\\/(?<version>\\d+(?:\\.\\d+)?)/,/(?<name>Safari)\\/(?<version>\\d+(?:\\.\\d+)?)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\\d+(?:\\.\\d+)?)/,/(?<name>[A-Za-z]+)\\/(?<version>\\d+(?:\\.\\d+)?)/,/(?<name>SamsungBrowser)\\/(?<version>\\d+(?:\\.\\d+)?)/];r<t.length;r++){var o=t[r],a=e.match(o);if(a&&a.groups)return{name:n[a.groups.name]||a.groups.name,version:a.groups.version}}return{name:\"unknown\",version:\"unknown\"}}i(\"audio\",(function(){return e(this,void 0,void 0,(function(){return n(this,(function(e){return[2,new Promise((function(e,n){try{var r=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,5e3,44100),t=r.createBufferSource(),o=r.createOscillator();o.frequency.value=1e3;var a,i=r.createDynamicsCompressor();i.threshold.value=-50,i.knee.value=40,i.ratio.value=12,i.attack.value=0,i.release.value=.2,o.connect(i),i.connect(r.destination),o.start(),r.oncomplete=function(n){a=n.renderedBuffer.getChannelData(0),e({sampleHash:S(a),oscillator:o.type,maxChannels:r.destination.maxChannelCount,channelCountMode:t.channelCountMode})},r.startRendering()}catch(e){console.error(\"Error creating audio fingerprint:\",e),n(e)}}))]}))}))}));var A=\"SamsungBrowser\"!==P().name?1:3,C=280,x=20;\"Firefox\"!=P().name&&i(\"canvas\",(function(){return document.createElement(\"canvas\").getContext(\"2d\"),new Promise((function(e){var n=Array.from({length:A},(function(){return function(){var e=document.createElement(\"canvas\"),n=e.getContext(\"2d\");if(!n)return new ImageData(1,1);e.width=C,e.height=x;var r=n.createLinearGradient(0,0,e.width,e.height);r.addColorStop(0,\"red\"),r.addColorStop(1/6,\"orange\"),r.addColorStop(2/6,\"yellow\"),r.addColorStop(.5,\"green\"),r.addColorStop(4/6,\"blue\"),r.addColorStop(5/6,\"indigo\"),r.addColorStop(1,\"violet\"),n.fillStyle=r,n.fillRect(0,0,e.width,e.height);var t=\"Random Text WMwmil10Oo\";n.font=\"23.123px Arial\",n.fillStyle=\"black\",n.fillText(t,-5,15),n.fillStyle=\"rgba(0, 0, 255, 0.5)\",n.fillText(t,-3.3,17.7),n.beginPath(),n.moveTo(0,0),n.lineTo(2*e.width/7,e.height),n.strokeStyle=\"white\",n.lineWidth=2,n.stroke();var o=n.getImageData(0,0,e.width,e.height);return o}()}));e({commonImageDataHash:d(M(n,C,x).data.toString()).toString()})}))}));var T,k=[\"Arial\",\"Arial Black\",\"Arial Narrow\",\"Arial Rounded MT\",\"Arimo\",\"Archivo\",\"Barlow\",\"Bebas Neue\",\"Bitter\",\"Bookman\",\"Calibri\",\"Cabin\",\"Candara\",\"Century\",\"Century Gothic\",\"Comic Sans MS\",\"Constantia\",\"Courier\",\"Courier New\",\"Crimson Text\",\"DM Mono\",\"DM Sans\",\"DM Serif Display\",\"DM Serif Text\",\"Dosis\",\"Droid Sans\",\"Exo\",\"Fira Code\",\"Fira Sans\",\"Franklin Gothic Medium\",\"Garamond\",\"Geneva\",\"Georgia\",\"Gill Sans\",\"Helvetica\",\"Impact\",\"Inconsolata\",\"Indie Flower\",\"Inter\",\"Josefin Sans\",\"Karla\",\"Lato\",\"Lexend\",\"Lucida Bright\",\"Lucida Console\",\"Lucida Sans Unicode\",\"Manrope\",\"Merriweather\",\"Merriweather Sans\",\"Montserrat\",\"Myriad\",\"Noto Sans\",\"Nunito\",\"Nunito Sans\",\"Open Sans\",\"Optima\",\"Orbitron\",\"Oswald\",\"Pacifico\",\"Palatino\",\"Perpetua\",\"PT Sans\",\"PT Serif\",\"Poppins\",\"Prompt\",\"Public Sans\",\"Quicksand\",\"Rajdhani\",\"Recursive\",\"Roboto\",\"Roboto Condensed\",\"Rockwell\",\"Rubik\",\"Segoe Print\",\"Segoe Script\",\"Segoe UI\",\"Sora\",\"Source Sans Pro\",\"Space Mono\",\"Tahoma\",\"Taviraj\",\"Times\",\"Times New Roman\",\"Titillium Web\",\"Trebuchet MS\",\"Ubuntu\",\"Varela Round\",\"Verdana\",\"Work Sans\"],R=[\"monospace\",\"sans-serif\",\"serif\"];function I(e,n){if(!e)throw new Error(\"Canvas context not supported\");return e.font,e.font=\"72px \".concat(n),e.measureText(\"WwMmLli0Oo\").width}function O(){var e,n=document.createElement(\"canvas\"),r=null!==(e=n.getContext(\"webgl\"))&&void 0!==e?e:n.getContext(\"experimental-webgl\");if(r&&\"getParameter\"in r)try{var t=(r.getParameter(r.VENDOR)||\"\").toString(),o=(r.getParameter(r.RENDERER)||\"\").toString(),a={vendor:t,renderer:o,version:(r.getParameter(r.VERSION)||\"\").toString(),shadingLanguageVersion:(r.getParameter(r.SHADING_LANGUAGE_VERSION)||\"\").toString()};if(!o.length||!t.length){var i=r.getExtension(\"WEBGL_debug_renderer_info\");if(i){var u=(r.getParameter(i.UNMASKED_VENDOR_WEBGL)||\"\").toString(),c=(r.getParameter(i.UNMASKED_RENDERER_WEBGL)||\"\").toString();u&&(a.vendorUnmasked=u),c&&(a.rendererUnmasked=c)}}return a}catch(e){}return\"undefined\"}function _(){var e=new Float32Array(1),n=new Uint8Array(e.buffer);return e[0]=1/0,e[0]=e[0]-e[0],n[3]}function L(e,n){var r={};return n.forEach((function(n){var t=function(e){if(0===e.length)return null;var n={};e.forEach((function(e){var r=String(e);n[r]=(n[r]||0)+1}));var r=e[0],t=1;return Object.keys(n).forEach((function(e){n[e]>t&&(r=e,t=n[e])})),r}(e.map((function(e){return n in e?e[n]:void 0})).filter((function(e){return void 0!==e})));t&&(r[n]=t)})),r}function D(){var e=[],n={\"prefers-contrast\":[\"high\",\"more\",\"low\",\"less\",\"forced\",\"no-preference\"],\"any-hover\":[\"hover\",\"none\"],\"any-pointer\":[\"none\",\"coarse\",\"fine\"],pointer:[\"none\",\"coarse\",\"fine\"],hover:[\"hover\",\"none\"],update:[\"fast\",\"slow\"],\"inverted-colors\":[\"inverted\",\"none\"],\"prefers-reduced-motion\":[\"reduce\",\"no-preference\"],\"prefers-reduced-transparency\":[\"reduce\",\"no-preference\"],scripting:[\"none\",\"initial-only\",\"enabled\"],\"forced-colors\":[\"active\",\"none\"]};return Object.keys(n).forEach((function(r){n[r].forEach((function(n){matchMedia(\"(\".concat(r,\": \").concat(n,\")\")).matches&&e.push(\"\".concat(r,\": \").concat(n))}))})),e}function B(){if(\"https:\"===window.location.protocol&&\"function\"==typeof window.ApplePaySession)try{for(var e=window.ApplePaySession.supportsVersion,n=15;n>0;n--)if(e(n))return n}catch(e){return 0}return 0}\"Firefox\"!=P().name&&i(\"fonts\",(function(){var r=this;return new Promise((function(t,o){try{!function(r){var t;e(this,void 0,void 0,(function(){var e,o,a;return n(this,(function(n){switch(n.label){case 0:return document.body?[3,2]:[4,(i=50,new Promise((function(e){return setTimeout(e,i,u)})))];case 1:return n.sent(),[3,0];case 2:if((e=document.createElement(\"iframe\")).setAttribute(\"frameBorder\",\"0\"),(o=e.style).setProperty(\"position\",\"fixed\"),o.setProperty(\"display\",\"block\",\"important\"),o.setProperty(\"visibility\",\"visible\"),o.setProperty(\"border\",\"0\"),o.setProperty(\"opacity\",\"0\"),e.src=\"about:blank\",document.body.appendChild(e),!(a=e.contentDocument||(null===(t=e.contentWindow)||void 0===t?void 0:t.document)))throw new Error(\"Iframe document is not accessible\");return r({iframe:a}),setTimeout((function(){document.body.removeChild(e)}),0),[2]}var i,u}))}))}((function(o){var a=o.iframe;return e(r,void 0,void 0,(function(){var e,r,o,i;return n(this,(function(n){return\"Hello, world!\",e=a.createElement(\"canvas\"),r=e.getContext(\"2d\"),o=R.map((function(e){return I(r,e)})),i={},k.forEach((function(e){var n=I(r,e);o.includes(n)||(i[e]=n)})),t(i),[2]}))}))}))}catch(e){o({error:\"unsupported\"})}}))})),i(\"hardware\",(function(){return new Promise((function(e,n){var r=void 0!==navigator.deviceMemory?navigator.deviceMemory:0,t=window.performance&&window.performance.memory?window.performance.memory:0;e({videocard:O(),architecture:_(),deviceMemory:r.toString()||\"undefined\",jsHeapSizeLimit:t.jsHeapSizeLimit||0})}))})),i(\"locales\",(function(){return new Promise((function(e){e({languages:navigator.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone})}))})),i(\"permissions\",(function(){return e(this,void 0,void 0,(function(){var t;return n(this,(function(o){return T=(null==r?void 0:r.permissions_to_check)||[\"accelerometer\",\"accessibility\",\"accessibility-events\",\"ambient-light-sensor\",\"background-fetch\",\"background-sync\",\"bluetooth\",\"camera\",\"clipboard-read\",\"clipboard-write\",\"device-info\",\"display-capture\",\"gyroscope\",\"geolocation\",\"local-fonts\",\"magnetometer\",\"microphone\",\"midi\",\"nfc\",\"notifications\",\"payment-handler\",\"persistent-storage\",\"push\",\"speaker\",\"storage-access\",\"top-level-storage-access\",\"window-management\",\"query\"],t=Array.from({length:(null==r?void 0:r.retries)||3},(function(){return function(){return e(this,void 0,void 0,(function(){var e,r,t,o,a;return n(this,(function(n){switch(n.label){case 0:e={},r=0,t=T,n.label=1;case 1:if(!(r<t.length))return[3,6];o=t[r],n.label=2;case 2:return n.trys.push([2,4,,5]),[4,navigator.permissions.query({name:o})];case 3:return a=n.sent(),e[o]=a.state.toString(),[3,5];case 4:return n.sent(),[3,5];case 5:return r++,[3,1];case 6:return[2,e]}}))}))}()})),[2,Promise.all(t).then((function(e){return L(e,T)}))]}))}))})),i(\"plugins\",(function(){var e=[];if(navigator.plugins)for(var n=0;n<navigator.plugins.length;n++){var r=navigator.plugins[n];e.push([r.name,r.filename,r.description].join(\"|\"))}return new Promise((function(n){n({plugins:e})}))})),i(\"screen\",(function(){return new Promise((function(e){e({is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:D()})}))})),i(\"system\",(function(){return new Promise((function(e){var n=P();e({platform:window.navigator.platform,cookieEnabled:window.navigator.cookieEnabled,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:n.name,version:n.version},applePayVersion:B()})}))}));var U,F=\"SamsungBrowser\"!==P().name?1:3,N=null;i(\"webgl\",(function(){return e(this,void 0,void 0,(function(){var e;return n(this,(function(n){\"undefined\"!=typeof document&&((U=document.createElement(\"canvas\")).width=200,U.height=100,N=U.getContext(\"webgl\"));try{if(!N)throw new Error(\"WebGL not supported\");return e=Array.from({length:F},(function(){return function(){try{if(!N)throw new Error(\"WebGL not supported\");var e=\"\\n attribute vec2 position;\\n void main() {\\n gl_Position = vec4(position, 0.0, 1.0);\\n }\\n \",n=\"\\n precision mediump float;\\n void main() {\\n gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color\\n }\\n \",r=N.createShader(N.VERTEX_SHADER),t=N.createShader(N.FRAGMENT_SHADER);if(!r||!t)throw new Error(\"Failed to create shaders\");if(N.shaderSource(r,e),N.shaderSource(t,n),N.compileShader(r),!N.getShaderParameter(r,N.COMPILE_STATUS))throw new Error(\"Vertex shader compilation failed: \"+N.getShaderInfoLog(r));if(N.compileShader(t),!N.getShaderParameter(t,N.COMPILE_STATUS))throw new Error(\"Fragment shader compilation failed: \"+N.getShaderInfoLog(t));var o=N.createProgram();if(!o)throw new Error(\"Failed to create shader program\");if(N.attachShader(o,r),N.attachShader(o,t),N.linkProgram(o),!N.getProgramParameter(o,N.LINK_STATUS))throw new Error(\"Shader program linking failed: \"+N.getProgramInfoLog(o));N.useProgram(o);for(var a=137,i=new Float32Array(4*a),u=2*Math.PI/a,c=0;c<a;c++){var s=c*u;i[4*c]=0,i[4*c+1]=0,i[4*c+2]=Math.cos(s)*(U.width/2),i[4*c+3]=Math.sin(s)*(U.height/2)}var l=N.createBuffer();N.bindBuffer(N.ARRAY_BUFFER,l),N.bufferData(N.ARRAY_BUFFER,i,N.STATIC_DRAW);var d=N.getAttribLocation(o,\"position\");N.enableVertexAttribArray(d),N.vertexAttribPointer(d,2,N.FLOAT,!1,0,0),N.viewport(0,0,U.width,U.height),N.clearColor(0,0,0,1),N.clear(N.COLOR_BUFFER_BIT),N.drawArrays(N.LINES,0,2*a);var f=new Uint8ClampedArray(U.width*U.height*4);return N.readPixels(0,0,U.width,U.height,N.RGBA,N.UNSIGNED_BYTE,f),new ImageData(f,U.width,U.height)}catch(e){return new ImageData(1,1)}finally{N&&(N.bindBuffer(N.ARRAY_BUFFER,null),N.useProgram(null),N.viewport(0,0,N.drawingBufferWidth,N.drawingBufferHeight),N.clearColor(0,0,0,0))}}()})),[2,{commonImageHash:d(M(e,U.width,U.height).data.toString()).toString()}]}catch(e){return[2,{webgl:\"unsupported\"}]}return[2]}))}))}));var j=function(e,n,r,t){for(var o=(r-n)/t,a=0,i=0;i<t;i++){a+=e(n+(i+.5)*o)}return a*o};i(\"math\",(function(){return e(void 0,void 0,void 0,(function(){return n(this,(function(e){return[2,{acos:Math.acos(.5),asin:j(Math.asin,-1,1,97),atan:j(Math.atan,-1,1,97),cos:j(Math.cos,0,Math.PI,97),cosh:Math.cosh(9/7),e:Math.E,largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),log:Math.log(1e3),pi:Math.PI,sin:j(Math.sin,-Math.PI,Math.PI,97),sinh:j(Math.sinh,-9/7,7/9,97),sqrt:Math.sqrt(2),tan:j(Math.tan,0,2*Math.PI,97),tanh:j(Math.tanh,-9/7,7/9,97)}]}))}))}));export{y as getFingerprint,p as getFingerprintData,b as getFingerprintPerformance,g as getVersion,i as includeComponent,t as setOption};\n//# sourceMappingURL=thumbmark.esm.js.map\n","import {\n createClient,\n subscriptionExchange,\n cacheExchange,\n fetchExchange\n} from '@urql/core'\nimport { createClient as createWSClient } from 'graphql-ws'\nimport { pipe, map } from 'wonka'\n\nclass UrqlClientWrapper {\n constructor ({ serverUri, socket = null, encrypt = false }) {\n this.$__client = this.createUrqlClient({ serverUri, socket, encrypt })\n this.$__authToken = ''\n this.$__pubkey = null\n this.$__wallet = null\n this.serverUri = serverUri\n this.soketi = socket\n this.cipherLink = !!encrypt\n this.$__subscriptionManager = new Map()\n }\n\n createUrqlClient ({ serverUri, socket, encrypt }) {\n const exchanges = [cacheExchange, fetchExchange]\n\n // Add subscription support if socket is configured\n if (socket && socket.socketUri) {\n const wsClient = createWSClient({\n url: socket.socketUri,\n connectionParams: () => ({\n authToken: this.$__authToken\n })\n })\n\n exchanges.push(subscriptionExchange({\n forwardSubscription: operation => ({\n subscribe: sink => {\n const disposable = wsClient.subscribe(operation, sink)\n return { unsubscribe: disposable }\n }\n })\n }))\n }\n\n return createClient({\n url: serverUri,\n exchanges,\n fetchOptions: () => ({\n headers: {\n 'X-Auth-Token': this.$__authToken\n },\n // Add 60 second timeout for debugging\n signal: AbortSignal.timeout(60000)\n })\n })\n }\n\n setAuthData ({ token, pubkey, wallet }) {\n this.$__authToken = token\n this.$__pubkey = pubkey\n this.$__wallet = wallet\n\n // Recreate client with new auth data\n this.$__client = this.createUrqlClient({\n serverUri: this.serverUri,\n socket: this.soketi,\n encrypt: !!this.cipherLink\n })\n }\n\n async query (request) {\n const { query, variables } = request\n const result = await this.$__client.query(query, variables).toPromise()\n return this.formatResponse(result)\n }\n\n async mutate (request) {\n const { mutation, variables } = request\n const result = await this.$__client.mutation(mutation, variables).toPromise()\n return this.formatResponse(result)\n }\n\n subscribe (request, closure) {\n const { query, variables, operationName } = request\n\n const { unsubscribe } = pipe(\n this.$__client.subscription(query, variables),\n map(result => {\n closure(this.formatResponse(result))\n })\n ).subscribe(() => {})\n\n // Store subscription for later cleanup\n this.$__subscriptionManager.set(operationName, { unsubscribe })\n\n return {\n unsubscribe: () => this.unsubscribe(operationName)\n }\n }\n\n formatResponse (result) {\n // Match old Apollo response format\n return {\n data: result.data,\n errors: result.error ? [result.error] : undefined\n }\n }\n\n socketDisconnect () {\n if (this.soketi) {\n // Unsubscribe from all active subscriptions\n this.unsubscribeAll()\n }\n }\n\n unsubscribe (operationName) {\n const subscription = this.$__subscriptionManager.get(operationName)\n if (subscription) {\n subscription.unsubscribe()\n this.$__subscriptionManager.delete(operationName)\n }\n }\n\n unsubscribeAll () {\n this.$__subscriptionManager.forEach((subscription, operationName) => {\n this.unsubscribe(operationName)\n })\n }\n\n unsubscribeFromChannel (operationName) {\n this.unsubscribe(operationName)\n }\n\n setEncryption (encrypt = false) {\n this.cipherLink = encrypt\n this.$__client = this.createUrqlClient({\n serverUri: this.serverUri,\n socket: this.soketi,\n encrypt\n })\n }\n\n getAuthToken () { return this.$__authToken }\n getPubKey () { return this.$__pubkey }\n getWallet () { return this.$__wallet }\n getServerUri () { return this.serverUri }\n getSocketUri () { return this.soketi ? this.soketi.socketUri : null }\n getUri () { return this.serverUri }\n\n setUri (uri) {\n this.serverUri = uri\n this.$__client = this.createUrqlClient({\n serverUri: uri,\n socket: this.soketi,\n encrypt: !!this.cipherLink\n })\n }\n\n setSocketUri ({ socketUri, appKey }) {\n this.soketi = { socketUri, appKey }\n this.$__client = this.createUrqlClient({\n serverUri: this.serverUri,\n socket: this.soketi,\n encrypt: !!this.cipherLink\n })\n }\n}\n\nexport default UrqlClientWrapper\n","/*\n (\n (/(\n (//(\n (///(\n (/////(\n (//////( )\n (////////( (/)\n (////////( (///)\n (//////////( (////)\n (//////////( (//////)\n (////////////( (///////)\n (/////////////( (/////////)\n (//////////////( (///////////)\n (///////////////( (/////////////)\n (////////////////( (//////////////)\n ((((((((((((((((((( (((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n ((((((((((((((((((( ((((((((((((((\n (((((((((((((((((((( (((((((((((((\n (((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((((\n ((((((((((((((((((( ((((((((((\n ((((((((((((((((((/ (((((((((\n (((((((((((((((((( ((((((((\n ((((((((((((((((( (((((((\n (((((((((((((((((( (((((\n ################# ##\n ################ #\n ################# ##\n %################ ###\n ###############( ####\n ############### ####\n ############### ######\n %#############( (#######\n %############# #########\n ############( ##########\n ########### #############\n ######### ##############\n %######\n\n Powered by Knish.IO: Connecting a Decentralized World\n\nPlease visit https://github.com/WishKnish/KnishIO-Client-JS for information.\n\nLicense: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE\n */\nimport Dot from './libraries/Dot.js'\nimport Decimal from './libraries/Decimal.js'\nimport {\n generateBatchId,\n generateBundleHash,\n generateSecret\n} from './libraries/crypto.js'\nimport Molecule from './Molecule.js'\nimport Wallet from './Wallet.js'\nimport TokenUnit from './TokenUnit.js'\nimport AuthToken from './AuthToken.js'\nimport QueryContinuId from './query/QueryContinuId.js'\nimport QueryWalletBundle from './query/QueryWalletBundle.js'\nimport QueryWalletList from './query/QueryWalletList.js'\nimport QueryBalance from './query/QueryBalance.js'\nimport QueryMetaType from './query/QueryMetaType.js'\nimport QueryBatch from './query/QueryBatch.js'\nimport QueryBatchHistory from './query/QueryBatchHistory.js'\nimport MutationRequestAuthorization from './mutation/MutationRequestAuthorization.js'\nimport MutationCreateToken from './mutation/MutationCreateToken.js'\nimport MutationRequestTokens from './mutation/MutationRequestTokens.js'\nimport MutationTransferTokens from './mutation/MutationTransferTokens.js'\nimport MutationProposeMolecule from './mutation/MutationProposeMolecule.js'\nimport MutationCreateIdentifier from './mutation/MutationCreateIdentifier.js'\nimport MutationClaimShadowWallet from './mutation/MutationClaimShadowWallet.js'\nimport MutationCreateMeta from './mutation/MutationCreateMeta.js'\nimport MutationPeering from './mutation/MutationPeering.js'\nimport MutationAppendRequest from './mutation/MutationAppendRequest.js'\nimport MutationCreateWallet from './mutation/MutationCreateWallet.js'\nimport MutationRequestAuthorizationGuest from './mutation/MutationRequestAuthorizationGuest.js'\nimport TransferBalanceException from './exception/TransferBalanceException.js'\nimport CodeException from './exception/CodeException.js'\nimport UnauthenticatedException from './exception/UnauthenticatedException.js'\nimport WalletShadowException from './exception/WalletShadowException.js'\nimport StackableUnitDecimalsException from './exception/StackableUnitDecimalsException.js'\nimport StackableUnitAmountException from './exception/StackableUnitAmountException.js'\nimport CreateMoleculeSubscribe from './subscribe/CreateMoleculeSubscribe.js'\nimport WalletStatusSubscribe from './subscribe/WalletStatusSubscribe.js'\nimport ActiveWalletSubscribe from './subscribe/ActiveWalletSubscribe.js'\nimport ActiveSessionSubscribe from './subscribe/ActiveSessionSubscribe.js'\nimport MutationActiveSession from './mutation/MutationActiveSession.js'\nimport QueryActiveSession from './query/QueryActiveSession.js'\nimport QueryUserActivity from './query/QueryUserActivity.js'\nimport QueryToken from './query/QueryToken.js'\nimport BatchIdException from './exception/BatchIdException.js'\nimport AuthorizationRejectedException from './exception/AuthorizationRejectedException.js'\nimport QueryAtom from './query/QueryAtom.js'\nimport QueryPolicy from './query/QueryPolicy.js'\nimport QueryMetaTypeViaAtom from './query/QueryMetaTypeViaAtom.js'\nimport QueryMetaTypeViaMolecule from './query/QueryMetaTypeViaMolecule.js'\nimport MutationCreateRule from './mutation/MutationCreateRule.js'\nimport MutationDepositBufferToken from './mutation/MutationDepositBufferToken.js'\nimport MutationWithdrawBufferToken from './mutation/MutationWithdrawBufferToken.js'\nimport {\n getFingerprint,\n getFingerprintData\n} from '@thumbmarkjs/thumbmarkjs'\nimport UrqlClientWrapper from './libraries/urql/UrqlClientWrapper.js'\n\n/**\n * Base client class providing a powerful but user-friendly wrapper\n * around complex Knish.IO ledger transactions.\n */\nexport default class KnishIOClient {\n /**\n * Class constructor\n *\n * @param {string} uri\n * @param {string|null} cellSlug\n * @param {object|null} socket\n * @param {UrqlClientWrapper|null} client\n * @param {number} serverSdkVersion\n * @param {boolean} logging\n */\n constructor ({\n uri,\n cellSlug = null,\n client = null,\n socket = null,\n serverSdkVersion = 3,\n logging = false\n }) {\n this.initialize({\n uri,\n cellSlug,\n socket,\n client,\n serverSdkVersion,\n logging\n })\n }\n\n /**\n * Initializes a new Knish.IO client session\n *\n * @param {string|[]} uri\n * @param {string|null} cellSlug\n * @param {object|null} socket\n * @param {UrqlClientWrapper|null} client\n * @param {number} serverSdkVersion\n * @param {boolean} logging\n */\n initialize ({\n uri,\n cellSlug = null,\n socket = null,\n client = null,\n serverSdkVersion = 3,\n logging = false\n }) {\n this.reset()\n\n this.$__logging = logging\n this.$__authTokenObjects = {}\n this.$__authInProcess = false\n this.abortControllers = new Map()\n\n this.setUri(uri)\n\n if (cellSlug) {\n this.setCellSlug(cellSlug)\n }\n\n for (const uriKey in this.$__uris) {\n const url = this.$__uris[uriKey]\n this.$__authTokenObjects[url] = null\n }\n\n this.log('info', `KnishIOClient::initialize() - Initializing new Knish.IO client session for SDK version ${ serverSdkVersion }...`)\n\n this.$__client = client || new UrqlClientWrapper({\n socket: {\n ...{\n socketUri: null,\n appKey: 'knishio'\n },\n ...socket || {}\n },\n serverUri: this.getRandomUri()\n })\n\n this.$__serverSdkVersion = serverSdkVersion\n }\n\n /**\n * Get random uri from specified this.$__uris\n *\n * @return {string}\n */\n getRandomUri () {\n const rand = Math.floor(Math.random() * (this.$__uris.length))\n return this.$__uris[rand]\n }\n\n /**\n *\n * @param encrypt\n * @return {boolean}\n */\n switchEncryption (encrypt) {\n if (this.$__encrypt === encrypt) {\n return false\n }\n this.log('info', `KnishIOClient::switchEncryption() - Forcing encryption ${ encrypt ? 'on' : 'off' } to match node...`)\n\n // Set encryption\n this.$__encrypt = encrypt\n this.$__client.setEncryption(encrypt)\n return true\n }\n\n /**\n * De-initializes the Knish.IO client session so that a new session can replace it\n */\n deinitialize () {\n this.log('info', 'KnishIOClient::deinitialize() - Clearing the Knish.IO client session...')\n this.reset()\n }\n\n /**\n * Subscribes the client to the node's broadcast socket\n *\n * @return {UrqlClientWrapper}\n */\n subscribe () {\n if (!this.client().getSocketUri()) {\n throw new CodeException('KnishIOClient::subscribe() - Socket client not initialized!')\n }\n return this.client()\n }\n\n /**\n * Gets the client's SDK version\n *\n * @return {number}\n */\n getServerSdkVersion () {\n return this.$__serverSdkVersion\n }\n\n /**\n * Reset common properties\n */\n reset () {\n this.$__secret = ''\n this.$__bundle = ''\n this.remainderWallet = null\n }\n\n /**\n * Returns the currently defined Cell identifier for this session\n *\n * @return {string|null}\n */\n getCellSlug () {\n return this.$__cellSlug || null\n }\n\n /**\n * Sets the Cell identifier for this session\n *\n * @param {string} cellSlug\n */\n setCellSlug (cellSlug) {\n this.$__cellSlug = cellSlug\n }\n\n /**\n * Sets the endpoint URI for this session\n *\n * @param {string|object} uri\n */\n setUri (uri) {\n this.$__uris = typeof uri === 'object' ? uri : [uri]\n\n // If client exists, update its URI with a random one from the new array\n if (this.$__client) {\n const randomUri = this.getRandomUri()\n this.$__client.setUri(randomUri)\n }\n }\n\n /**\n * Retrieves the endpoint URI for this session\n *\n * @return {string}\n */\n getUri () {\n return this.$__client.getUri()\n }\n\n /**\n * Returns the GraphQL client class session\n *\n * @return {UrqlClientWrapper}\n */\n client () {\n if (!this.$__authInProcess) {\n const randomUri = this.getRandomUri()\n this.$__client.setUri(randomUri)\n\n // Try to get stored auth token object\n const authTokenObject = this.$__authTokenObjects[randomUri]\n\n // Not authorized - try to do it\n if (!authTokenObject) {\n this.requestAuthToken({\n secret: this.$__secret,\n cellSlug: this.$__cellSlug,\n encrypt: this.$__encrypt\n }).catch(err => {\n this.log('warn', `KnishIOClient::client() - Background authorization failed: ${ err.message }`)\n })\n } else {\n // Use stored authorization data\n this.$__client.setAuthData(authTokenObject.getAuthData())\n }\n }\n return this.$__client\n }\n\n /**\n * Returns whether a secret is being stored for this session\n *\n * @return {boolean}\n */\n hasSecret () {\n return !!this.$__secret\n }\n\n /**\n * Set the client's secret\n *\n * @param secret\n */\n setSecret (secret) {\n this.$__secret = secret\n this.$__bundle = this.hashSecret(secret, 'setSecret')\n }\n\n /**\n * Hashes the user secret to produce a bundle hash\n * @param {string} secret\n * @param {string|null} source\n * @returns {string}\n */\n hashSecret (secret, source = null) {\n this.log('info', `KnishIOClient::hashSecret(${ source ? `source: ${ source }` : '' }) - Computing wallet bundle from secret...`)\n return generateBundleHash(secret)\n }\n\n /**\n * Retrieves the stored secret for this session\n *\n * @return {string}\n */\n getSecret () {\n if (!this.hasSecret()) {\n throw new UnauthenticatedException('KnishIOClient::getSecret() - Unable to find a stored secret! Have you set a secret?')\n }\n return this.$__secret\n }\n\n /**\n * Returns whether a bundle hash is being stored for this session\n *\n * @return {boolean}\n */\n hasBundle () {\n return !!this.$__bundle\n }\n\n /**\n * Returns the bundle hash for this session\n *\n * @return {string}\n */\n getBundle () {\n if (!this.hasBundle()) {\n throw new UnauthenticatedException('KnishIOClient::getBundle() - Unable to find a stored bundle! Have you set a secret?')\n }\n return this.$__bundle\n }\n\n /**\n * Retrieves the device fingerprint.\n *\n * @returns {Promise<string>} A promise that resolves to the device fingerprint as a string.\n */\n getFingerprint () {\n return getFingerprint()\n }\n\n getFingerprintData () {\n return getFingerprintData()\n }\n\n /**\n * Retrieves this session's wallet used for signing the next Molecule\n *\n * @return {Promise<*|Wallet|null>}\n */\n async getSourceWallet () {\n let sourceWallet = (await this.queryContinuId({\n bundle: this.getBundle()\n })).payload()\n\n if (!sourceWallet) {\n sourceWallet = new Wallet({\n secret: this.getSecret()\n })\n } else {\n sourceWallet.key = Wallet.generateKey({\n secret: this.getSecret(),\n token: sourceWallet.token,\n position: sourceWallet.position\n })\n }\n\n return sourceWallet\n }\n\n /**\n * Retrieves this session's remainder wallet\n *\n * @return {null}\n */\n getRemainderWallet () {\n return this.remainderWallet\n }\n\n /**\n * Instantiates a new Molecule and prepares this client session to operate on it\n *\n * @param secret\n * @param bundle\n * @param sourceWallet\n * @param remainderWallet\n * @return {Promise<Molecule>}\n */\n async createMolecule ({\n secret = null,\n bundle = null,\n sourceWallet = null,\n remainderWallet = null\n }) {\n this.log('info', 'KnishIOClient::createMolecule() - Creating a new molecule...')\n\n secret = secret || this.getSecret()\n bundle = bundle || this.getBundle()\n\n // Sets the source wallet as the last remainder wallet (to maintain ContinuID)\n if (!sourceWallet &&\n this.lastMoleculeQuery &&\n this.getRemainderWallet().token === 'USER' &&\n this.lastMoleculeQuery.response() &&\n this.lastMoleculeQuery.response().success()\n ) {\n sourceWallet = this.getRemainderWallet()\n }\n\n // Unable to use last remainder wallet; Figure out what wallet to use:\n if (sourceWallet === null) {\n sourceWallet = await this.getSourceWallet()\n }\n\n // Set the remainder wallet for the next transaction\n this.remainderWallet = remainderWallet || Wallet.create({\n secret,\n bundle,\n token: 'USER',\n batchId: sourceWallet.batchId,\n characters: sourceWallet.characters\n })\n\n return new Molecule({\n secret,\n sourceWallet,\n remainderWallet: this.getRemainderWallet(),\n cellSlug: this.getCellSlug(),\n version: this.getServerSdkVersion()\n })\n }\n\n /**\n * Builds a new instance of the provided Query class\n *\n * @param QueryClass\n * @return {*}\n */\n createQuery (QueryClass) {\n return new QueryClass(this.client(), this)\n }\n\n /**\n * Builds a new instance of the provided Subscription class\n *\n * @param SubscribeClass\n * @return {*}\n */\n createSubscribe (SubscribeClass) {\n return new SubscribeClass(this.subscribe())\n }\n\n /**\n * Uses the supplied Mutation class to build a new tailored Molecule\n *\n * @param mutationClass\n * @param molecule\n */\n async createMoleculeMutation ({\n mutationClass,\n molecule = null\n }) {\n this.log('info', `KnishIOClient::createMoleculeQuery() - Creating a new ${ mutationClass.name } query...`)\n\n // If you don't supply the molecule, we'll generate one for you\n const _molecule = molecule || await this.createMolecule({})\n\n const mutation = new mutationClass(this.client(), this, _molecule)\n\n if (!(mutation instanceof MutationProposeMolecule)) {\n throw new CodeException(`${ this.constructor.name }::createMoleculeMutation() - This method only accepts MutationProposeMolecule!`)\n }\n\n this.lastMoleculeQuery = mutation\n\n return mutation\n }\n\n /**\n *\n * @param query\n * @param variables\n * @returns {Promise<*>}\n */\n async executeQuery (query, variables = null) {\n // Check and refresh authorization token if needed\n // Guard with $__authInProcess to prevent concurrent auth requests\n if (this.$__authToken && this.$__authToken.isExpired() && !this.$__authInProcess) {\n this.log('info', 'KnishIOClient::executeQuery() - Access token is expired. Getting new one...')\n await this.requestAuthToken({\n secret: this.$__secret,\n cellSlug: this.$__cellSlug,\n encrypt: this.$__encrypt\n })\n }\n\n // Create a new AbortController for this query\n const abortController = new AbortController()\n const queryKey = JSON.stringify({\n query: query.$__query,\n variables\n })\n this.abortControllers.set(queryKey, abortController)\n\n try {\n // Use the existing query execution method, but add the abort signal\n const result = await query.execute({\n variables,\n context: {\n fetchOptions: {\n signal: abortController.signal\n }\n }\n })\n\n // Remove the AbortController after the query is complete\n this.abortControllers.delete(queryKey)\n\n return result\n } catch (error) {\n if (error.name === 'AbortError') {\n this.log('warn', 'Query was cancelled')\n } else {\n throw error\n }\n }\n }\n\n cancelQuery (query, variables = null) {\n const queryKey = JSON.stringify({\n query: query.$__query,\n variables\n })\n const controller = this.abortControllers.get(queryKey)\n if (controller) {\n controller.abort()\n this.abortControllers.delete(queryKey)\n }\n }\n\n cancelAllQueries () {\n for (const controller of this.abortControllers.values()) {\n controller.abort()\n }\n this.abortControllers.clear()\n }\n\n /**\n * Retrieves the balance wallet for a specified Knish.IO identity and token slug\n *\n * @param {string} token\n * @param {string|null} bundle\n * @param {string} type\n * @returns {Promise<*>}\n */\n async queryBalance ({\n token,\n bundle = null,\n type = 'regular'\n }) {\n /**\n * @type {QueryBalance}\n */\n const query = this.createQuery(QueryBalance)\n\n // Execute query with either the provided bundle hash or the active client's bundle\n return this.executeQuery(query, {\n bundleHash: bundle || this.getBundle(),\n token,\n type\n })\n }\n\n /**\n *\n * @param {string} token\n * @param {number} amount\n * @param {string} type\n * @returns {Promise<{address}|{position}|*>}\n */\n async querySourceWallet ({\n token,\n amount,\n type = 'regular'\n }) {\n const sourceWallet = (await this.queryBalance({\n token,\n type\n })).payload()\n\n // Do you have enough tokens?\n if (sourceWallet === null || Decimal.cmp(sourceWallet.balance, amount) < 0) {\n throw new TransferBalanceException()\n }\n\n // Check shadow wallet\n if (!sourceWallet.position || !sourceWallet.address) {\n throw new TransferBalanceException('Source wallet can not be a shadow wallet.')\n }\n\n return sourceWallet\n }\n\n /**\n * @param {string|null} bundle\n * @param {function} closure\n * @return {Promise<string>}\n */\n async subscribeCreateMolecule ({\n bundle,\n closure\n }) {\n const subscribe = this.createSubscribe(CreateMoleculeSubscribe)\n\n return await subscribe.execute({\n variables: {\n bundle: bundle || this.getBundle()\n },\n closure\n })\n }\n\n /**\n * Creates a subscription for updating Wallet status\n *\n * @param {string|null} bundle\n * @param {string} token\n * @param {function} closure\n * @return {string}\n */\n subscribeWalletStatus ({\n bundle,\n token,\n closure\n }) {\n if (!token) {\n throw new CodeException(`${ this.constructor.name }::subscribeWalletStatus() - Token parameter is required!`)\n }\n\n const subscribe = this.createSubscribe(WalletStatusSubscribe)\n\n return subscribe.execute({\n variables: {\n bundle: bundle || this.getBundle(),\n token\n },\n closure\n })\n }\n\n /**\n * Creates a subscription for updating active Wallet\n *\n * @param {string|null} bundle\n * @param {function} closure\n * @return {string}\n */\n subscribeActiveWallet ({\n bundle,\n closure\n }) {\n const subscribe = this.createSubscribe(ActiveWalletSubscribe)\n\n return subscribe.execute({\n variables: {\n bundle: bundle || this.getBundle()\n },\n closure\n })\n }\n\n /**\n * Creates a subscription for updating list of active sessions for a given MetaType\n *\n * @param {string} metaType\n * @param {string} metaId\n * @param {function} closure\n * @return {*}\n */\n subscribeActiveSession ({\n metaType,\n metaId,\n closure\n }) {\n const subscribe = this.createSubscribe(ActiveSessionSubscribe)\n\n return subscribe.execute({\n variables: {\n metaType,\n metaId\n },\n closure\n })\n }\n\n /**\n * Unsubscribes from a given subscription name\n *\n * @param {string} operationName\n */\n unsubscribe (operationName) {\n this.subscribe().unsubscribe(operationName)\n }\n\n unsubscribeAll () {\n this.subscribe().unsubscribeAll()\n }\n\n /**\n * Retrieves metadata for the given metaType and provided parameters\n *\n * @param {string|array|null} metaType\n * @param {string|array|null} metaId\n * @param {string|array|null} key\n * @param {string|array|null} value\n * @param {boolean|null} latest\n * @param {object|null} fields\n * @param {object|null} filter\n * @param {object|null} queryArgs\n * @param {string|null} count\n * @param {string|null} countBy\n * @param {boolean} throughAtom\n * @param {boolean} throughMolecule\n * @param {array|null} values\n * @param {array|null} keys\n * @param {array|null} atomValues\n * @return {Promise<ResponseMetaType|ResponseMetaTypeViaAtom|ResponseMetaTypeViaMolecule>}\n */\n queryMeta ({\n metaType,\n metaId = null,\n key = null,\n value = null,\n latest = true,\n fields = null,\n filter = null,\n queryArgs = null,\n count = null,\n countBy = null,\n throughAtom = true,\n throughMolecule = false,\n values = null,\n keys = null,\n atomValues = null\n }) {\n this.log('info', `KnishIOClient::queryMeta() - Querying metaType: ${ metaType }, metaId: ${ metaId }...`)\n\n let query\n let variables\n\n if (throughMolecule) {\n /**\n * @type {QueryMetaTypeViaMolecule}\n */\n query = this.createQuery(QueryMetaTypeViaMolecule)\n variables = QueryMetaTypeViaMolecule.createVariables({\n metaType,\n metaId,\n key,\n value,\n latest,\n filter,\n queryArgs,\n countBy,\n values,\n keys,\n atomValues,\n cellSlug: this.getCellSlug()\n })\n } else if (throughAtom) {\n /**\n * @type {QueryMetaTypeViaAtom}\n */\n query = this.createQuery(QueryMetaTypeViaAtom)\n variables = QueryMetaTypeViaAtom.createVariables({\n metaType,\n metaId,\n key,\n value,\n latest,\n filter,\n queryArgs,\n countBy,\n values,\n keys,\n atomValues,\n cellSlug: this.getCellSlug()\n })\n } else {\n /**\n * @type {QueryMetaType}\n */\n query = this.createQuery(QueryMetaType)\n variables = QueryMetaType.createVariables({\n metaType,\n metaId,\n key,\n value,\n latest,\n filter,\n queryArgs,\n count,\n countBy,\n cellSlug: this.getCellSlug()\n })\n }\n\n return this.executeQuery(query, variables)\n }\n\n /**\n * Queries meta assets and verifies cryptographic integrity of associated molecules.\n * Returns the same response as queryMeta(), with an additional `integrity` field on the payload\n * containing verification results for each molecule.\n *\n * @param {object} params - Same parameters as queryMeta()\n * @return {Promise<ResponseMetaType|ResponseMetaTypeViaAtom|ResponseMetaTypeViaMolecule>}\n */\n async queryMetaVerified (params) {\n const response = await this.queryMeta(params)\n const payload = response.payload()\n if (payload) {\n payload.integrity = response.verifyIntegrity()\n }\n return response\n }\n\n /**\n * Query batch to get cascading meta instances by batchID\n *\n * @param batchId\n * @return {Promise<*>}\n */\n async queryBatch ({\n batchId\n }) {\n this.log('info', `KnishIOClient::queryBatch() - Querying cascading meta instances for batchId: ${ batchId }...`)\n const query = this.createQuery(QueryBatch)\n return await this.executeQuery(query, {\n batchId\n })\n }\n\n /**\n * Query batch history to get cascading meta instances by batchID\n *\n * @param batchId\n * @return {Promise<*>}\n */\n async queryBatchHistory ({\n batchId\n }) {\n this.log('info', `KnishIOClient::queryBatchHistory() - Querying cascading meta instances for batchId: ${ batchId }...`)\n\n const query = this.createQuery(QueryBatchHistory)\n\n return await this.executeQuery(query, {\n batchId\n })\n }\n\n /**\n * Queries atom instances based on the provided parameters.\n *\n * @param {string[]} molecularHashes - Array of multiple molecular hashes.\n * @param {string} molecularHash - Single molecular hash.\n * @param {string[]} bundleHashes - Array of multiple bundle hashes.\n * @param {string} bundleHash - Single bundle hash.\n * @param {number[]} positions - Array of multiple positions.\n * @param {number} position - Single position.\n * @param {string[]} walletAddresses - Array of multiple wallet addresses.\n * @param {string} walletAddress - Single wallet address.\n * @param {string[]} isotopes - Array of multiple isotopes.\n * @param {string} isotope - Single isotope.\n * @param {string[]} tokenSlugs - Array of multiple token slugs.\n * @param {string} tokenSlug - Single token slug.\n * @param {string[]} cellSlugs - Array of multiple cell slugs.\n * @param {string} cellSlug - Single cell slug.\n * @param {string[]} batchIds - Array of multiple batch IDs.\n * @param {string} batchId - Single batch ID.\n * @param {any[]} values - Array of multiple values.\n * @param {any} value - Single value.\n * @param {string[]} metaTypes - Array of multiple meta types.\n * @param {string} metaType - Single meta type.\n * @param {string[]} metaIds - Array of multiple meta IDs.\n * @param {string} metaId - Single meta ID.\n * @param {string[]} indexes - Array of multiple atom indices.\n * @param {string} index - Single atom index.\n * @param {object} filter - The filter object.\n * @param {boolean} latest - The latest flag.\n * @param {object} [queryArgs] - The query arguments (limit, offset).\n * @param {number} [queryArgs.limit=15] - The limit.\n * @param {number} [queryArgs.offset=1] - The offset.\n *\n * @returns {Promise<ResponseAtom>} - A promise that resolves with the queried atom instances.\n */\n async queryAtom ({\n molecularHashes,\n molecularHash,\n bundleHashes,\n bundleHash,\n positions,\n position,\n walletAddresses,\n walletAddress,\n isotopes,\n isotope,\n tokenSlugs,\n tokenSlug,\n cellSlugs,\n cellSlug,\n batchIds,\n batchId,\n values,\n value,\n metaTypes,\n metaType,\n metaIds,\n metaId,\n indexes,\n index,\n filter,\n latest,\n queryArgs = {\n limit: 15,\n offset: 1\n }\n }) {\n this.log('info', 'KnishIOClient::queryAtom() - Querying atom instances')\n\n /** @type QueryAtom */\n const query = this.createQuery(QueryAtom)\n\n return await this.executeQuery(query, QueryAtom.createVariables({\n molecularHashes,\n molecularHash,\n bundleHashes,\n bundleHash,\n positions,\n position,\n walletAddresses,\n walletAddress,\n isotopes,\n isotope,\n tokenSlugs,\n tokenSlug,\n cellSlugs,\n cellSlug,\n batchIds,\n batchId,\n values,\n value,\n metaTypes,\n metaType,\n metaIds,\n metaId,\n indexes,\n index,\n filter,\n latest,\n queryArgs\n }))\n }\n\n /**\n * Builds and executes a molecule to issue a new Wallet on the ledger\n *\n * @param {string} token - The token slug for the new wallet\n * @returns {Promise<ResponseCreateWallet>} - A Promise that resolves with the result of the execution.\n */\n async createWallet ({\n token\n }) {\n const newWallet = new Wallet({\n secret: this.getSecret(),\n token\n })\n\n /**\n * @type {MutationCreateWallet}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationCreateWallet\n })\n\n query.fillMolecule(newWallet)\n\n return await this.executeQuery(query)\n }\n\n /**\n * Queries the ledger to retrieve a list of active sessions for the given MetaType\n *\n * @param {string} bundleHash - The hash of the session bundle.\n * @param {string} metaType - The type of metadata associated with the session.\n * @param {string} metaId - The ID of the metadata associated with the session.\n * @returns {Promise<ResponseQueryActiveSession>} - Returns a promise containing the result of the query.\n */\n async queryActiveSession ({\n bundleHash,\n metaType,\n metaId\n }) {\n const query = this.createQuery(QueryActiveSession)\n\n return await this.executeQuery(query, {\n bundleHash,\n metaType,\n metaId\n })\n }\n\n /**\n * Queries user activity based on the provided parameters.\n *\n * @param {string} bundleHash - The bundle hash.\n * @param {string} metaType - The meta type.\n * @param {string} metaId - The meta ID.\n * @param {string} ipAddress - The IP address.\n * @param {string} browser - The browser.\n * @param {string} osCpu - The operating system and CPU.\n * @param {string} resolution - The screen resolution.\n * @param {string} timeZone - The time zone.\n * @param {string} countBy - The count by parameter.\n * @param {string} interval - The interval parameter.\n *\n * @returns {Promise<ResponseQueryUserActivity>} The result of the query.\n */\n async queryUserActivity ({\n bundleHash,\n metaType,\n metaId,\n ipAddress,\n browser,\n osCpu,\n resolution,\n timeZone,\n countBy,\n interval\n }) {\n const query = this.createQuery(QueryUserActivity)\n\n return await this.executeQuery(query, {\n bundleHash,\n metaType,\n metaId,\n ipAddress,\n browser,\n osCpu,\n resolution,\n timeZone,\n countBy,\n interval\n })\n }\n\n /**\n * Builds and executes a molecule to declare an active session for the given MetaType\n *\n * @param {Object} options - The options for activating a session.\n * @param {string} options.bundle - The bundle hash.\n * @param {string} options.metaType - The meta type.\n * @param {string} options.metaId - The meta ID.\n * @param {string} options.ipAddress - The client's IP address.\n * @param {string} options.browser - The client's browser.\n * @param {string} options.osCpu - The client's operating system and CPU.\n * @param {string} options.resolution - The client's screen resolution.\n * @param {string} options.timeZone - The client's time zone.\n * @param {Object} [options.json={}] - Additional JSON data.\n * @returns {Promise<ResponseActiveSession>} A promise that resolves with the result of the activation.\n */\n async activeSession ({\n bundle,\n metaType,\n metaId,\n ipAddress,\n browser,\n osCpu,\n resolution,\n timeZone,\n json = {}\n }) {\n const query = this.createQuery(MutationActiveSession)\n\n return await this.executeQuery(query, {\n bundleHash: bundle,\n metaType,\n metaId,\n ipAddress,\n browser,\n osCpu,\n resolution,\n timeZone,\n json: JSON.stringify(json)\n })\n }\n\n /**\n * Creates a new token with the given parameters.\n *\n * @param {object} options - The options for creating the token.\n * @param {string} options.token - The token identifier.\n * @param {number} [options.amount] - The amount of tokens to create.\n * @param {object} [options.meta] - Additional metadata for the token.\n * @param {string} [options.batchId] - The batch identifier for stackable tokens.\n * @param {array} [options.units] - The unit IDs for the token.\n *\n * @throws {StackableUnitDecimalsException} If a stackable token has decimals.\n * @throws {StackableUnitAmountException} If stackable units are provided with an amount.\n *\n * @returns {Promise<ResponseCreateToken>} A Promise that resolves to the result of creating the token.\n */\n async createToken ({\n token,\n amount = null,\n meta = null,\n batchId = null,\n units = []\n }) {\n // What is the fungibility mode for this token?\n const fungibility = Dot.get(meta || {}, 'fungibility')\n\n // For stackable token - create a batch ID\n if (fungibility === 'stackable') {\n meta.batchId = batchId || generateBatchId({})\n }\n\n // Special logic for token unit initialization (nonfungible || stackable)\n if (['nonfungible', 'stackable'].includes(fungibility) && units.length > 0) {\n // Stackable tokens with Unit IDs must not use decimals\n if (Dot.get(meta || {}, 'decimals') > 0) {\n throw new StackableUnitDecimalsException()\n }\n\n // Can't create stackable units AND provide amount\n if (amount > 0) {\n throw new StackableUnitAmountException()\n }\n\n // Calculating amount based on Unit IDs\n amount = units.length\n meta.splittable = 1\n meta.decimals = 0\n meta.tokenUnits = JSON.stringify(units)\n }\n\n // Creating the wallet that will receive the new tokens\n const recipientWallet = new Wallet({\n secret: this.getSecret(),\n bundle: this.getBundle(),\n token,\n batchId\n })\n\n /**\n * @type {MutationCreateToken}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationCreateToken\n })\n\n query.fillMolecule({\n recipientWallet,\n amount,\n meta: meta || {}\n })\n\n return await this.executeQuery(query)\n }\n\n /**\n * Creates a new rule with the specified parameters.\n *\n * @param {string} metaType - The type of the metadata associated with the rule.\n * @param {string} metaId - The ID of the metadata associated with the rule.\n * @param {object} rule - The rule object.\n * @param {object} [policy={}] - The policy object. (optional)\n * @returns {Promise<ResponseCreateRule>} - A promise that resolves to the created rule.\n */\n async createRule ({\n metaType,\n metaId,\n rule,\n policy = {}\n }) {\n /**\n * @type {MutationCreateRule}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationCreateRule,\n molecule: await this.createMolecule({\n secret: this.getSecret(),\n sourceWallet: await this.getSourceWallet()\n })\n }\n )\n\n query.fillMolecule({\n metaType,\n metaId,\n rule,\n policy\n })\n\n return await this.executeQuery(query)\n }\n\n /**\n * Builds and executes a molecule to convey new metadata to the ledger\n *\n * @param {string} metaType - The type of the metadata entry.\n * @param {string} metaId - The ID of the metadata entry.\n * @param {object|array} meta - The metadata object.\n * @param {object} [policy={}] - The policy object.\n * @returns {Promise<ResponseCreateMeta>} - A Promise that resolves with the created metadata entry.\n */\n async createMeta ({\n metaType,\n metaId,\n meta = null,\n policy = {}\n }) {\n /**\n * @type {MutationCreateMeta}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationCreateMeta,\n molecule: await this.createMolecule({\n secret: this.getSecret(),\n sourceWallet: await this.getSourceWallet()\n })\n }\n )\n\n const metas = meta || {}\n\n query.fillMolecule({\n metaType,\n metaId,\n meta: metas,\n policy\n })\n\n return await this.executeQuery(query)\n }\n\n /**\n * Builds and executes a molecule to register a peer node via P-isotope\n *\n * @param {string} host - The peer host URL to register\n * @returns {Promise<ResponsePeering>} - A Promise that resolves with the peering response.\n */\n async registerPeer ({\n host\n }) {\n /**\n * @type {MutationPeering}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationPeering,\n molecule: await this.createMolecule({\n secret: this.getSecret(),\n sourceWallet: await this.getSourceWallet()\n })\n })\n\n query.fillMolecule({\n host\n })\n\n return await this.executeQuery(query)\n }\n\n /**\n * Builds and executes a molecule to submit an append request via A-isotope\n *\n * @param {string} metaType - The target MetaType to append to\n * @param {string} metaId - The target MetaId to append to\n * @param {string} action - The action to perform\n * @param {object} [meta={}] - Additional metadata\n * @returns {Promise<ResponseAppendRequest>} - A Promise that resolves with the append request response.\n */\n async appendRequest ({\n metaType,\n metaId,\n action,\n meta = {}\n }) {\n /**\n * @type {MutationAppendRequest}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationAppendRequest,\n molecule: await this.createMolecule({\n secret: this.getSecret(),\n sourceWallet: await this.getSourceWallet()\n })\n })\n\n query.fillMolecule({\n metaType,\n metaId,\n action,\n meta\n })\n\n return await this.executeQuery(query)\n }\n\n /**\n * Builds and executes a molecule to create a new identifier on the ledger\n *\n * @param {string} type - The type of the identifier.\n * @param {string} contact - The contact associated with the identifier.\n * @param {string} code - The code for the identifier.\n * @returns {Promise<ResponseCreateIdentifier>} - A promise that resolves to the created identifier.\n */\n async createIdentifier ({\n type,\n contact,\n code\n }) {\n /**\n * @type {MutationCreateIdentifier}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationCreateIdentifier\n })\n\n query.fillMolecule({\n type,\n contact,\n code\n })\n\n return await this.executeQuery(query)\n }\n\n /**\n * Creates a policy for a given metaType and metaId.\n *\n * @param {Object} options - The options for creating the policy.\n * @param {string} options.metaType - The type of the meta.\n * @param {string} options.metaId - The ID of the meta.\n * @param {Object} [options.policy={}] - The policy object.\n * @returns {Promise<*>} - A promise that resolves with the result of the execution.\n */\n async createPolicy ({\n metaType,\n metaId,\n policy = {}\n }) {\n // Create a molecule\n const molecule = await this.createMolecule({})\n molecule.addPolicyAtom({\n metaType,\n metaId,\n meta: {},\n policy\n })\n molecule.addContinuIdAtom()\n molecule.sign({\n bundle: this.getBundle()\n })\n molecule.check()\n\n // Create & execute a mutation\n const query = await this.createMoleculeMutation({\n mutationClass: MutationProposeMolecule,\n molecule\n })\n return await this.executeQuery(query)\n }\n\n /**\n * Queries the policy based on the provided metaType and metaId.\n *\n * @param {string} metaType - The type of the meta.\n * @param {string} metaId - The ID of the meta.\n * @returns {Promise<ResponsePolicy>} - A Promise that resolves to the query result.\n */\n async queryPolicy ({\n metaType,\n metaId\n }) {\n const query = this.createQuery(QueryPolicy)\n return await this.executeQuery(query, {\n metaType,\n metaId\n })\n }\n\n /**\n * Queries wallets based on the provided parameters.\n *\n * @param {object} options - The options for querying wallets.\n * @param {string|null} options.bundle - The bundle to query wallets for.\n * @param {string|null} options.token - The token to query wallets for.\n * @param {boolean} [options.unspent=true] - Whether to include unspent wallets or not.\n *\n * @returns {Promise<ResponseWalletList>} - A promise that resolves to the response payload of the query.\n */\n queryWallets ({\n bundle = null,\n token = null,\n unspent = true\n }) {\n this.log('info', `KnishIOClient::queryWallets() - Querying wallets${ bundle ? ` for ${ bundle }` : '' }...`)\n\n /**\n * @type {QueryWalletList}\n */\n const walletQuery = this.createQuery(QueryWalletList)\n\n return this.executeQuery(walletQuery, {\n bundleHash: bundle || this.getBundle(),\n tokenSlug: token,\n unspent\n })\n .then((response) => {\n return response.payload()\n })\n }\n\n /**\n * Queries wallet bundle metadata.\n *\n * @param {Object} options - The options for the query.\n * @param {string|null} options.bundle - The bundle to query. Default is null.\n * @param {string|null} options.fields - The fields to retrieve. Default is null.\n * @param {boolean} options.raw - Whether to return the raw response or the payload. Default is false.\n * @returns {Promise<ResponseWalletBundle|{}|null>} - A promise that resolves to the response or payload.\n */\n queryBundle ({\n bundle = null,\n fields = null,\n raw = false\n }) {\n this.log('info', `KnishIOClient::queryBundle() - Querying wallet bundle metadata${ bundle ? ` for ${ bundle }` : '' }...`)\n\n // Bundle default init & to array convertion\n if (!bundle) {\n bundle = this.getBundle()\n }\n if (typeof bundle === 'string') {\n bundle = [bundle]\n }\n\n /**\n * @type {QueryWalletBundle}\n */\n const query = this.createQuery(QueryWalletBundle)\n return this.executeQuery(query, { bundleHashes: bundle })\n .then((/** ResponseWalletBundle */ response) => {\n return raw ? response : response.payload()\n })\n }\n\n /**\n * Queries the ledger for the next ContinuId wallet\n *\n * @param {String} bundle - The bundle hash used in the query.\n * @returns {Promise<ResponseContinuId>} - A promise that resolves to the result of the query.\n */\n async queryContinuId ({\n bundle\n }) {\n /**\n * @type {QueryContinuId}\n */\n const query = this.createQuery(QueryContinuId)\n\n return this.executeQuery(query, {\n bundle\n })\n }\n\n /**\n * Requests tokens for a specific recipient or for the current wallet bundle.\n *\n * @param {Object} options - The options for the token request.\n * @param {string} options.token - The token slug.\n * @param {string|Wallet} [options.to] - The recipient of the tokens. If not provided, tokens will be requested for the current wallet bundle.\n * @param {number|null} [options.amount=null] - The amount of tokens to request. If not provided and `options.units` are provided, the amount will be calculated based on the number of\n * units.\n * @param {Array} [options.units=[]] - The array of unit IDs. If provided, the amount will be calculated based on the length of `options.units`.\n * @param {Object|null} [options.meta=null] - Additional metadata for the token request.\n * @param {string|null} [options.batchId=null] - The batch ID for the token request. If not provided and the token is stackable, a new batch ID will be generated.\n *\n * @returns {Promise<ResponseRequestTokens>} - A promise that resolves with the response from the token request.\n *\n * @throws {BatchIdException} - When a non-stackable token is used and `options.batchId` is not null.\n * @throws {StackableUnitAmountException} - When both `options.units` and `options.amount` are provided for stackable tokens.\n */\n async requestTokens ({\n token,\n to,\n amount = null,\n units = [],\n meta = null,\n batchId = null\n }) {\n let metaType,\n metaId\n\n meta = meta || {}\n\n // Get a token & init is Stackable flag for batch ID initialization\n const queryToken = this.createQuery(QueryToken)\n const tokenResponse = await this.executeQuery(queryToken, {\n slug: token\n })\n const isStackable = Dot.get(tokenResponse.data(), '0.fungibility') === 'stackable'\n\n // NON-stackable tokens & batch ID is NOT NULL - error\n if (!isStackable && batchId !== null) {\n throw new BatchIdException('Expected Batch ID = null for non-stackable tokens.')\n }\n // Stackable tokens & batch ID is NULL - generate new one\n if (isStackable && batchId === null) {\n batchId = generateBatchId({})\n }\n\n // Calculate amount & set meta key\n if (units.length > 0) {\n // Can't move stackable units AND provide amount\n if (amount > 0) {\n throw new StackableUnitAmountException()\n }\n\n // Calculating amount based on Unit IDs\n amount = units.length\n meta.tokenUnits = JSON.stringify(units)\n }\n\n // Are we specifying a specific recipient?\n if (to) {\n // If the recipient is provided as an object, try to figure out the actual recipient\n if (Object.prototype.toString.call(to) === '[object String]') {\n if (Wallet.isBundleHash(to)) {\n metaType = 'walletBundle'\n metaId = to\n } else {\n to = Wallet.create({\n secret: to,\n token\n })\n }\n }\n\n // If recipient is a Wallet, we need to help the node triangulate\n // the transfer by providing position and bundle hash\n if (to instanceof Wallet) {\n metaType = 'wallet'\n meta.position = to.position\n meta.bundle = to.bundle\n metaId = to.address\n }\n } else {\n // No recipient, so request tokens for ourselves\n metaType = 'walletBundle'\n metaId = this.getBundle()\n }\n\n /**\n * @type {MutationRequestTokens}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationRequestTokens\n })\n\n query.fillMolecule({\n token,\n amount,\n metaType,\n metaId,\n meta,\n batchId\n })\n\n return await this.executeQuery(query)\n }\n\n /**\n * Claims a shadow wallet for a given token.\n *\n * @param {string} token - The token for which to claim the shadow wallet.\n * @param {string|null} batchId - The batch ID of the shadow wallet (optional).\n * @param {string|null} molecule - The molecule associated with the shadow wallet (optional).\n *\n * @returns {Promise<ResponseClaimShadowWallet>} - A promise that resolves to the result of the claim operation.\n */\n async claimShadowWallet ({\n token,\n batchId = null,\n molecule = null\n }) {\n /**\n * @type {MutationClaimShadowWallet}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationClaimShadowWallet,\n molecule\n })\n\n query.fillMolecule({\n token,\n batchId\n })\n\n return await this.executeQuery(query)\n }\n\n /**\n * Claims all shadow wallets for a given token.\n *\n * @param {Object} options - The options for claiming shadow wallets.\n * @param {string} options.token - The token to claim shadow wallets for.\n * @returns {Promise<*>} - A promise that resolves to an array of responses from claiming shadow wallets.\n * @throws {WalletShadowException} - If the shadow wallet list is invalid or if a non-shadow wallet is found.\n */\n async claimShadowWallets ({\n token\n }) {\n // --- Get & check a shadow wallet list\n const shadowWallets = await this.queryWallets({ token })\n if (!shadowWallets || !Array.isArray(shadowWallets)) {\n throw new WalletShadowException()\n }\n\n shadowWallets.forEach(shadowWallet => {\n if (!shadowWallet.isShadow()) {\n throw new WalletShadowException()\n }\n })\n // ----\n\n const responses = []\n for (const shadowWallet of shadowWallets) {\n responses.push(await this.claimShadowWallet({\n token,\n batchId: shadowWallet.batchId\n }))\n }\n return responses\n }\n\n /**\n * Transfers tokens from one wallet to another.\n *\n * @param {Object} options - The transfer options.\n * @param {string} options.bundleHash - The bundle hash of the source wallet.\n * @param {string} options.token - The token to transfer.\n * @param {number} [options.amount=null] - The amount of tokens to transfer. Not required if units are provided.\n * @param {Array} [options.units=[]] - An array of units to transfer. Overrides the amount if provided.\n * @param {string} [options.batchId=null] - The batch ID for the recipient wallet.\n * @param {Object} [options.sourceWallet=null] - The source wallet object. If not provided, it will be queried.\n *\n * @returns {Promise} - A Promise that resolves to the transaction result.\n *\n * @throws {StackableUnitAmountException} - If both amount and units are provided.\n * @throws {TransferBalanceException} - If the source wallet does not have enough balance.\n */\n async transferToken ({\n bundleHash,\n token,\n amount = null,\n units = [],\n batchId = null,\n sourceWallet = null\n }) {\n // Calculate amount & set meta key\n if (units.length > 0) {\n // Can't move stackable units AND provide amount\n if (amount > 0) {\n throw new StackableUnitAmountException()\n }\n\n amount = units.length\n }\n\n // Get a source wallet\n if (sourceWallet === null) {\n sourceWallet = await this.querySourceWallet({\n token,\n amount\n })\n }\n\n // Do you have enough tokens?\n if (sourceWallet === null || Decimal.cmp(sourceWallet.balance, amount) < 0) {\n throw new TransferBalanceException()\n }\n\n // Attempt to get the recipient's wallet, if not provided\n const recipientWallet = Wallet.create({\n bundle: bundleHash,\n token\n })\n\n // Compute the batch ID for the recipient\n // (typically used by stackable tokens)\n if (batchId !== null) {\n recipientWallet.batchId = batchId\n } else {\n recipientWallet.initBatchId({\n sourceWallet\n })\n }\n\n // Create a remainder from the source wallet\n const remainderWallet = sourceWallet.createRemainder(this.getSecret())\n\n // --- Token units splitting\n sourceWallet.splitUnits(\n units,\n remainderWallet,\n recipientWallet\n )\n // ---\n\n // Build the molecule itself\n const molecule = await this.createMolecule({\n sourceWallet,\n remainderWallet\n })\n /**\n * @type {MutationTransferTokens}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationTransferTokens,\n molecule\n })\n\n query.fillMolecule({\n recipientWallet,\n amount\n })\n\n return await this.executeQuery(query)\n }\n\n /**\n * Deposits buffer token into the source wallet.\n *\n * @param {Object} options - The options for depositing buffer token.\n * @param {string} options.tokenSlug - The slug of the token to deposit.\n * @param {number} options.amount - The amount of token to deposit.\n * @param {Object} options.tradeRates - The trade rates for the deposit.\n * @param {Wallet|null} options.sourceWallet - The source wallet for the deposit. If not provided, a source wallet will be queried.\n *\n * @returns {Promise<*>} - A promise that resolves with the result of the deposit.\n */\n async depositBufferToken ({\n tokenSlug,\n amount,\n tradeRates,\n sourceWallet = null\n }) {\n // Get a source wallet\n if (sourceWallet === null) {\n sourceWallet = await this.querySourceWallet({\n token: tokenSlug,\n amount\n })\n }\n\n // Remainder wallet\n const remainderWallet = sourceWallet.createRemainder(this.getSecret())\n\n // Build the molecule itself\n const molecule = await this.createMolecule({\n sourceWallet,\n remainderWallet\n })\n /**\n * @type {MutationDepositBufferToken}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationDepositBufferToken,\n molecule\n })\n query.fillMolecule({\n amount,\n tradeRates\n })\n return await this.executeQuery(query)\n }\n\n /**\n * Withdraws buffer tokens.\n *\n * @param {Object} options - The options for withdrawing buffer tokens.\n * @param {string} options.tokenSlug - The token slug.\n * @param {number} options.amount - The amount of tokens to withdraw.\n * @param {Object} [options.sourceWallet=null] - The source wallet to withdraw tokens from. If not provided, a source wallet will be queried.\n * @param {Object} [options.signingWallet=null] - The signing wallet to use for the transaction.\n * @returns {Promise<Object>} A promise that resolves to the result of the withdrawal transaction.\n */\n async withdrawBufferToken ({\n tokenSlug,\n amount,\n sourceWallet = null,\n signingWallet = null\n }) {\n // Get a source wallet\n if (sourceWallet === null) {\n sourceWallet = await this.querySourceWallet({\n token: tokenSlug,\n amount,\n type: 'buffer'\n })\n }\n\n // Remainder wallet\n const remainderWallet = sourceWallet\n\n // Build the molecule itself\n const molecule = await this.createMolecule({\n sourceWallet,\n remainderWallet\n })\n /**\n * @type {MutationWithdrawBufferToken}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationWithdrawBufferToken,\n molecule\n })\n const recipients = {}\n recipients[this.getBundle()] = amount\n query.fillMolecule({\n recipients,\n signingWallet\n })\n return await this.executeQuery(query)\n }\n\n /**\n * Builds and executes a molecule to destroy the specified Token units\n *\n * @param {string} token\n * @param {number|null} amount\n * @param {array|null} units\n * @param {Wallet|null} sourceWallet\n * @return {Promise<unknown>}\n */\n async burnTokens ({\n token,\n amount = null,\n units = [],\n sourceWallet = null\n }) {\n // Get a source wallet\n if (sourceWallet === null) {\n sourceWallet = await this.querySourceWallet({\n token,\n amount\n })\n }\n\n // Remainder wallet\n const remainderWallet = sourceWallet.createRemainder(this.getSecret())\n\n // Calculate amount & set meta key\n if (units.length > 0) {\n // Can't burn stackable units AND provide amount\n if (amount > 0) {\n throw new StackableUnitAmountException()\n }\n\n // Calculating amount based on Unit IDs\n amount = units.length\n\n // --- Token units splitting\n sourceWallet.splitUnits(\n units,\n remainderWallet\n )\n // ---\n }\n\n // Create a molecule\n const molecule = await this.createMolecule({\n sourceWallet,\n remainderWallet\n })\n molecule.burnToken({ amount })\n molecule.sign({\n bundle: this.getBundle()\n })\n molecule.check()\n\n // Create & execute a mutation\n const query = await this.createMoleculeMutation({\n mutationClass: MutationProposeMolecule,\n molecule\n })\n return this.executeQuery(query)\n }\n\n /**\n * Builds and executes a molecule to destroy the specified Token units\n *\n * @param {string} token\n * @param {number|null} amount\n * @param {array|null} units\n * @param {Wallet|null} sourceWallet\n * @return {Promise<unknown>}\n */\n async replenishToken ({\n token,\n amount = null,\n units = [],\n sourceWallet = null\n }) {\n if (sourceWallet === null) {\n sourceWallet = (await this.queryBalance({ token })).payload()\n }\n if (!sourceWallet) {\n throw new TransferBalanceException('Source wallet is missing or invalid.')\n }\n\n // Remainder wallet\n const remainderWallet = sourceWallet.createRemainder(this.getSecret())\n\n // Create a molecule\n const molecule = await this.createMolecule({\n sourceWallet,\n remainderWallet\n })\n molecule.replenishToken({\n amount,\n units\n })\n molecule.sign({\n bundle: this.getBundle()\n })\n molecule.check()\n\n // Create & execute a mutation\n const query = await this.createMoleculeMutation({\n mutationClass: MutationProposeMolecule,\n molecule\n })\n return this.executeQuery(query)\n }\n\n /**\n *\n * @param bundleHash\n * @param tokenSlug\n * @param newTokenUnit\n * @param fusedTokenUnitIds\n * @param sourceWallet\n * @returns {Promise<*>}\n */\n async fuseToken ({\n bundleHash,\n tokenSlug,\n newTokenUnit,\n fusedTokenUnitIds,\n sourceWallet = null\n }) {\n if (sourceWallet === null) {\n sourceWallet = (await this.queryBalance({ token: tokenSlug })).payload()\n }\n\n // Check source wallet\n if (sourceWallet === null) {\n throw new TransferBalanceException('Source wallet is missing or invalid.')\n }\n if (!sourceWallet.tokenUnits || !sourceWallet.tokenUnits.length) {\n throw new TransferBalanceException('Source wallet does not have token units.')\n }\n if (!fusedTokenUnitIds.length) {\n throw new TransferBalanceException('Fused token unit list is empty.')\n }\n\n // Check fused token units\n const sourceTokenUnitIds = []\n sourceWallet.tokenUnits.forEach((tokenUnit) => {\n sourceTokenUnitIds.push(tokenUnit.id)\n })\n fusedTokenUnitIds.forEach((tokenUnitId) => {\n if (!sourceTokenUnitIds.includes(tokenUnitId)) {\n throw new TransferBalanceException(`Fused token unit ID = ${ tokenUnitId } does not found in the source wallet.`)\n }\n })\n\n // Generate new recipient wallet if only recipient secret has been passed\n const recipientWallet = Wallet.create({\n bundle: bundleHash,\n token: tokenSlug\n })\n\n // Set batch ID\n recipientWallet.initBatchId({ sourceWallet })\n\n // Remainder wallet\n const remainderWallet = sourceWallet.createRemainder(this.getSecret())\n\n // Split token units (fused)\n sourceWallet.splitUnits(fusedTokenUnitIds, remainderWallet)\n\n // Coerce string newTokenUnit to TokenUnit object\n if (typeof newTokenUnit === 'string') {\n newTokenUnit = new TokenUnit(newTokenUnit, newTokenUnit, {})\n }\n\n // Set recipient new fused token unit\n newTokenUnit.metas.fusedTokenUnits = sourceWallet.getTokenUnitsData()\n recipientWallet.tokenUnits = [newTokenUnit]\n\n // Create a molecule\n const molecule = await this.createMolecule({\n sourceWallet,\n remainderWallet\n })\n molecule.fuseToken(sourceWallet.tokenUnits, recipientWallet)\n molecule.sign({\n bundle: this.getBundle()\n })\n molecule.check()\n\n // Create & execute a mutation\n const query = await this.createMoleculeMutation({\n mutationClass: MutationProposeMolecule,\n molecule\n })\n return this.executeQuery(query)\n }\n\n /**\n * Requests a guest authentication token using the fingerprint of the user.\n * @param {Object} options - The options for the guest authentication token request.\n * @param {string} options.cellSlug - The slug of the cell to request the token for.\n * @param {boolean} options.encrypt - Indicates whether the session should be encrypted.\n * @returns {Promise<ResponseRequestAuthorizationGuest>} - A promise that resolves to the response of the guest authentication token request.\n */\n async requestGuestAuthToken ({\n cellSlug,\n encrypt\n }) {\n this.setCellSlug(cellSlug)\n\n // Create a wallet for encryption\n const wallet = new Wallet({\n secret: generateSecret(await this.getFingerprint()),\n token: 'AUTH'\n })\n\n /**\n * @type {MutationRequestAuthorizationGuest}\n */\n const query = await this.createQuery(MutationRequestAuthorizationGuest)\n\n const variables = {\n cellSlug,\n pubkey: wallet.pubkey,\n encrypt\n }\n\n /**\n * @type {ResponseRequestAuthorizationGuest}\n */\n const response = await query.execute({ variables })\n\n // Did the authorization molecule get accepted?\n if (response.success()) {\n // Create & set an auth token from the response data\n // Map server payload field names (time/key) to AuthToken constructor names (expiresAt/pubkey)\n const authToken = AuthToken.create({\n token: response.token(),\n expiresAt: response.time(),\n pubkey: response.pubKey(),\n encrypt: response.encrypt()\n }, wallet)\n this.setAuthToken(authToken)\n } else {\n throw new AuthorizationRejectedException(`KnishIOClient::requestGuestAuthToken() - Authorization attempt rejected by ledger. Reason: ${ response.reason() }`)\n }\n\n return response\n }\n\n /**\n * Request a profile auth token\n *\n * @param secret\n * @param encrypt\n * @returns {Promise<ResponseRequestAuthorization>}\n */\n async requestProfileAuthToken ({\n secret,\n encrypt\n }) {\n this.setSecret(secret)\n\n // Generate a signing wallet\n const wallet = new Wallet({\n secret,\n token: 'AUTH'\n })\n\n // Create a wallet with a signing wallet\n const molecule = await this.createMolecule({\n secret,\n sourceWallet: wallet\n })\n\n /**\n * @type {MutationRequestAuthorization}\n */\n const query = await this.createMoleculeMutation({\n mutationClass: MutationRequestAuthorization,\n molecule\n })\n\n query.fillMolecule({ meta: { encrypt: (encrypt ? 'true' : 'false') } })\n /**\n * @type {ResponseRequestAuthorization}\n */\n const response = await query.execute({})\n\n // Did the authorization molecule get accepted?\n if (response.success()) {\n // Create & set an auth token from the response data\n // Map server payload field names (time/key) to AuthToken constructor names (expiresAt/pubkey)\n const authToken = AuthToken.create({\n token: response.token(),\n expiresAt: response.time(),\n pubkey: response.pubKey(),\n encrypt: response.encrypt()\n }, wallet)\n this.setAuthToken(authToken)\n } else {\n throw new AuthorizationRejectedException(`KnishIOClient::requestProfileAuthToken() - Authorization attempt rejected by ledger. Reason: ${ response.reason() }`)\n }\n\n return response\n }\n\n /**\n * Request an auth token (guest or profile)\n *\n * @param secret\n * @param seed\n * @param cellSlug\n * @param encrypt\n * @returns {Promise<ResponseRequestAuthorizationGuest|ResponseRequestAuthorization|null>}\n */\n async requestAuthToken ({\n secret = null,\n seed = null,\n cellSlug = null,\n encrypt = false\n }) {\n // SDK versions 2 and below do not utilize an authorization token\n if (this.$__serverSdkVersion < 3) {\n this.log('warn', 'KnishIOClient::authorize() - Server SDK version does not require an authorization...')\n return null\n }\n\n // Generate a secret from the seed if it has been passed\n if (secret === null && seed) {\n secret = generateSecret(seed)\n }\n\n // Set cell slug if it has been passed\n if (cellSlug) {\n this.setCellSlug(cellSlug)\n }\n\n // Auth in process...\n this.$__authInProcess = true\n\n // Auth token response\n let response\n\n // Authorized user\n if (secret) {\n response = await this.requestProfileAuthToken({\n secret,\n encrypt\n })\n } else {\n // Guest\n response = await this.requestGuestAuthToken({\n cellSlug,\n encrypt\n })\n }\n\n // Set auth token\n this.log('info', `KnishIOClient::authorize() - Successfully retrieved auth token ${ this.$__authToken.getToken() }...`)\n\n // Switch encryption mode if it has been changed\n this.switchEncryption(encrypt)\n\n // Auth process is stopped\n this.$__authInProcess = false\n\n // Return full response\n return response\n }\n\n /**\n * Sets the auth token\n *\n * @param {AuthToken} authToken\n */\n setAuthToken (authToken) {\n // An empty auth token\n if (!authToken) {\n this.log('info', 'KnishIOClient::setAuthToken() - authToken object is empty.')\n return\n }\n\n // Save auth token object to global list\n this.$__authTokenObjects[this.getUri()] = authToken\n\n // Set auth data to GraphQL client\n this.client().setAuthData(authToken.getAuthData())\n\n // Save a full auth token object with expireAt key\n this.$__authToken = authToken\n }\n\n /**\n * Returns the current authorization token\n *\n * @return {AuthToken}\n */\n getAuthToken () {\n return this.$__authToken\n }\n\n /**\n * Writes the specified message to the console.\n * @param {string} level\n * @param {string} message\n */\n log (level, message) {\n if (this.$__logging) {\n switch (level) {\n case 'info':\n console.info(message)\n break\n case 'warn':\n console.warn(message)\n break\n case 'error':\n console.error(message)\n break\n default:\n console.log(message)\n }\n }\n }\n}\n"],"names":["Hex","arr","options","numberToHex","val","uppercase","set","opts","str","group","column","i","target","buffer","curr","c","m","chr","letter","chunkSubstr","size","numChunks","chunks","chunkIndex","o","randomString","length","alphabet","array","x","charsetBaseConvert","src","fromBase","toBase","srcSymbolTable","destSymbolTable","charIndex","res","r","bufferToHexString","byteArray","hexStringToBuffer","hexString","hexToBase64","string","bytes","base64ToHex","char","isHex","isNumeric","Meta$1","meta","entry","property","raw","aggregate","metaEntry","diff","arrays","others","unique","item","intersect","first","second","PolicyMeta","policy","metaKeys","policyMeta","policyKey","value","key","content","readPolicy","writePolicy","type","AtomMeta","Meta","context","wallet","walletMeta","shadowWalletClaim","signingWallet","BaseException","message","fileName","lineNumber","AtomsMissingException","HashAtom","atom","parameters","object","result","keys","structure","Version4","position","walletAddress","isotope","token","batchId","metaType","metaId","index","createdAt","version","versions","Atom","otsFragment","json","properties","includeOtsFragments","validateFields","requiredFields","field","serialized","error","validateStructure","strictMode","data","atoms","output","molecularSponge","JsSHA","atomList","numberOfAtoms","hashableValues","hashableValue","generateSecret","seed","sponge","generateBundleHash","secret","source","shake256","input","outputLength","generateBatchId","molecularHash","TokenUnit","id","name","metas","WalletCredentialException","U32_MASK64","_32n","fromBig","n","le","split","lst","len","Ah","Al","h","l","rotlSH","s","rotlSL","rotlBH","rotlBL","isBytes","a","anumber","title","prefix","abytes","needsLen","ofLen","got","aexists","instance","checkFinished","aoutput","out","min","u32","clean","isLE","byteSwap","word","byteSwap32","swap32IfBE","u","createHasher","hashCons","info","hashC","msg","tmp","randomBytes","bytesLength","cr","oidNist","suffix","_0n","_1n","_2n","_7n","_256n","_0x71n","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","round","R","y","t","j","IOTAS","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlL","keccakP","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","shift","PI","Keccak","blockLen","outputLen","enableXOF","__publicField","state","pos","take","bufferOut","to","genKeccak","sha3_256","sha3_512","genShake","shake128","checkU32","isPowerOfTwo","reverseBits","bits","reversed","log2","bitReversalInplace","values","FFTCore","F","coreOpts","N","roots","dit","invertButterflies","skipStages","brp","isDit","g","m2","stride","k","grp","rootPos","i0","i1","omega","b","randb","equalBytes","copyBytes","splitCoder","label","lengths","getLength","bytesLen","sum","bufs","abytes_","buf","vecCoder","vecLen","cleanBytes","list","getMask","genCrystals","newPoly","Q","ROOT_OF_UNITY","brvBits","mod","modulo","smod","getZettas","p","nttZetas","_a","nttOpts","dif","d","mask","poly","bufLen","createXofShake","shake","_seed","seedLen","calls","xofs","XOF128","NTT","bitsCoder","PARAMS","compress","polyCoder","polyAdd","polySub","BaseCaseMultiply","a0","a1","b0","b1","zeta","c0","c1","MultiplyNTTs","f","z","SampleNTT","xof","d1","d2","sampleCBD","PRF","nonce","eta","b32","bb","t0","genKPKE","K","XOF","HASH512","ETA1","ETA2","du","dv","poly1","polyV","polyU","publicCoder","secretCoder","cipherCoder","seedCoder","seedDst","seedHash","rho","sigma","sHat","tHat","e","aji","publicKey","rHat","tmp2","e1","aij","e2","v","cipherText","privateKey","sk","createKyber","KPKE","HASH256","KDF","KPKESecretCoder","msgLen","publicKeyHash","secretKey","_sk","eke","ek","kr","k768","start","test","Khat","cipherText2","isValid","Kbar","shakePRF","dkLen","ml_kem768","Wallet","bundle","address","characters","maybeBundleHash","unitsData","unitData","secretHex","positionHex","indexedKey","intermediateKeySponge","privateKeySponge","keyFragments","digestSponge","workingFragment","fragmentCount","workingSponge","outputSponge","saltLength","seedHex","MlKEM768","serializedKey","binaryString","_","intPart","tokenUnit","units","remainderWallet","recipientWallet","recipientTokenUnits","remainderTokenUnits","sourceWallet","isRemainder","recipientPubkey","messageString","messageUint8","deserializedPubkey","sharedSecret","encryptedMessage","encryptedData","deserializedEncryptedMessage","decryptedUint8","decryptedString","iv","algorithm","encryptedContent","decryptedContent","AtomIndexException","MolecularHashMismatchException","MolecularHashMissingException","PolicyInvalidException","SignatureMalformedException","SignatureMismatchException","TransferBalanceException","TransferMalformedException","TransferMismatchedException","TransferRemainderException","TransferToSelfException","TransferUnbalancedException","MetaMissingException","WrongTokenTypeException","BatchIdException","args","RuleArgumentException","CodeException","Callback","action","amount","comparison","callback","Condition","Rule","condition","element","rule","Dot","obj","numberKey","def","parts","current","lastIndex","useNumberKey","lastKey","lastNumberKey","CheckMolecule","molecule","senderWallet","signingAtom","remainderAtom","policyArray","policyName","policyValue","rules","isotopeB","vAtoms","isotopeF","isotopeV","hasCrossIsotope","firstAtom","endAtom","vAtom","remainder","normalizedHash","ots","accumulator","otsChunks","workingChunk","iterationCount","digest","addressSponge","signingAddress","bundleHash","cellSlug","status","mappedAtoms","serverAtom","parsed","Molecule","moleculeData","BalanceInsufficientException","NegativeAmountException","hashes","isotopes","hash","mapped","hashList","symbol","mappedHashArray","total","num","totalCondition","continuIdMeta","atomMeta","tokenUnits","walletBundle","unit","tradeRates","bufferWallet","recipients","recipientBundle","recipientAmount","firstAtomMeta","$rules","$rule","creationAtom","contact","code","host","anonymous","compressed","signingPosition","keyChunks","signatureFragments","chunkedSignature","lastPosition","chunkCount","includeValidationContext","atomData","multiplier","Decimal","value1","value2","debug","val1","val2","AuthToken","expiresAt","encrypt","pubkey","authToken","snapshot","InvalidResponseException","UnauthenticatedException","Response","query","dataKey","errorMessage","_b","debugPrefix","_c","mapper","mappedPayload","newResponse","errorResponse","Query","graphQLClient","knishIOClient","response","variables","mergedContext","ResponseContinuId","continuId","QueryContinuId","gql","ResponseWalletBundle","bundleData","QueryWalletBundle","ResponseWalletList","tokenUnitData","tradeRate","wallets","QueryWalletList","ResponseBalance","walletData","QueryBalance","ResponseMetaType","metaTypeData","metaData","QueryMetaType","latest","filter","queryArgs","count","countBy","QueryBatch","responseObject","QueryBatchHistory","ResponseProposeMolecule","payloadJson","Mutation","request","mutationParams","MutationProposeMolecule","ResponseRequestAuthorization","MutationRequestAuthorization","ResponseCreateToken","MutationCreateToken","ResponseRequestTokens","MutationRequestTokens","ResponseTransferTokens","MutationTransferTokens","ResponseCreateIdentifier","MutationCreateIdentifier","ResponseClaimShadowWallet","MutationClaimShadowWallet","ResponseCreateMeta","MutationCreateMeta","ResponsePeering","MutationPeering","ResponseAppendRequest","MutationAppendRequest","ResponseCreateWallet","MutationCreateWallet","ResponseRequestAuthorizationGuest","MutationRequestAuthorizationGuest","WalletShadowException","StackableUnitDecimalsException","StackableUnitAmountException","Subscribe","closure","CreateMoleculeSubscribe","WalletStatusSubscribe","ActiveWalletSubscribe","ActiveSessionSubscribe","ResponseActiveSession","MutationActiveSession","ResponseQueryActiveSession","activeUsers","activeSession","QueryActiveSession","ResponseQueryUserActivity","datum","QueryUserActivity","QueryToken","AuthorizationRejectedException","ResponseAtom","instanceKey","QueryAtom","molecularHashes","bundleHashes","positions","walletAddresses","tokenSlugs","tokenSlug","cellSlugs","batchIds","metaTypes","metaIds","indexes","ResponsePolicy","QueryPolicy","ResponseMetaTypeViaAtom","QueryMetaTypeViaAtom","atomValues","ResponseMetaTypeViaMolecule","results","instances","QueryMetaTypeViaMolecule","ResponseCreateRule","MutationCreateRule","MutationDepositBufferToken","MutationWithdrawBufferToken","w","S","M","E","P","A","C","T","I","O","L","D","U","UrqlClientWrapper","serverUri","socket","exchanges","cacheExchange","fetchExchange","wsClient","createWSClient","subscriptionExchange","operation","sink","createClient","mutation","operationName","unsubscribe","pipe","map","subscription","uri","socketUri","appKey","KnishIOClient","client","serverSdkVersion","logging","uriKey","url","rand","randomUri","authTokenObject","err","getFingerprint","getFingerprintData","QueryClass","SubscribeClass","mutationClass","_molecule","abortController","queryKey","controller","fields","throughAtom","throughMolecule","params","payload","newWallet","ipAddress","browser","osCpu","resolution","timeZone","interval","fungibility","unspent","walletQuery","queryToken","tokenResponse","isStackable","shadowWallets","shadowWallet","responses","newTokenUnit","fusedTokenUnitIds","sourceTokenUnitIds","tokenUnitId","level"],"mappings":"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","x_google_ignoreList":[15,16,17,18,19,20,21,120]}