@wishknish/knishio-client-js 0.4.42 → 0.4.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-sha3"),require("big-integer"),require("@stablelib/base64"),require("get-random-values"),require("big-integer/BigInteger"),require("buffer"),require("base-x"),require("tweetnacl"),require("tweetnacl-sealedbox-js"),require("@stablelib/utf8"),require("@apollo/client/core"),require("isomorphic-fetch"),require("@apollo/client/cache"),require("@apollo/client/link/error"),require("laravel-echo"),require("socket.io-client"),require("graphql")):"function"==typeof define&&define.amd?define(["exports","js-sha3","big-integer","@stablelib/base64","get-random-values","big-integer/BigInteger","buffer","base-x","tweetnacl","tweetnacl-sealedbox-js","@stablelib/utf8","@apollo/client/core","isomorphic-fetch","@apollo/client/cache","@apollo/client/link/error","laravel-echo","socket.io-client","graphql"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).KnishIO={},e.shake256,e.bigInt,e.base64,e.getRandomValues,e.bigIntB,e.buffer,e.baseX,e.tweetnacl,e.tweetnaclSealedboxJs,e.utf8,e.apolloClientCore,e.fetch,e.apolloClientCache,e.apolloClientLinkError,e.Echo,e.io,e.graphql)}(this,(function(e,t,s,n,a,i,r,l,o,u,c,h,d,p,m,y,g,k){"use strict";function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=b(s),f=b(a),w=b(i),$=b(l),I=b(d),S=b(y),A=b(g);class T{static toHex(e,t){const s=(e,t)=>{const s=t?["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]:["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return s[Math.floor(e/16)]+s[e%16]},n=Object.assign({grouping:0,rowlength:0,uppercase:!1},t||{});let a="",i=0,r=0;for(let t=0;t<e.length&&(a+=s(e[t],n.uppercase),t!==e.length-1);++t)n.grouping>0&&++i===n.grouping&&(i=0,n.rowlength>0&&++r===n.rowlength?(r=0,a+="\n"):a+=" ");return a}static toUint8Array(e){let t=e.toLowerCase().replace(/\s/g,"");t.length%2==1&&(t=`0${t}`);let s=new Uint8Array(Math.floor(t.length/2)),n=-1;for(let e=0;e<t.length;++e){let a=t[e],i=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"].indexOf(a);if(-1===i)throw Error("unexpected character");-1===n?n=16*i:(s[Math.floor(e/2)]=n+i,n=-1)}return s}}function x(e,t){const s=Math.ceil(e.length/t),n=[];for(let a=0,i=0;a<s;++a,i+=t)n[a]=e.substr(i,t);return n}function v(e=256,t="abcdef0123456789"){let s=new Uint8Array(e);return s=f.default(s),s=s.map((e=>t.charCodeAt(e%t.length))),String.fromCharCode.apply(null,s)}function q(e,t,s,n,a){if(n=n||"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~`!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?¿¡",a=a||n,t>n.length||s>a.length)return console.warn("Strings::charsetBaseConvert() - Can't convert",e,"to base",s,"greater than symbol table length. src-table:",n.length,"dest-table:",a.length),!1;let i=_.default(0);for(let s=0;s<e.length;s++)i=i.multiply(t).add(n.indexOf(e.charAt(s)));if(i.lesser(0))return 0;let r=i.mod(s),l=a.charAt(r),o=i.divide(s);for(;!o.equals(0);)r=o.mod(s),o=o.divide(s),l=a.charAt(r)+l;return l}function M(e){return n.encode(T.toUint8Array(e))}function W(e){return T.toHex(n.decode(e),{})}function C(e){return/^[A-F0-9]+$/i.test(e)}function U(e,t){let s,n,a,i=[Array,Date,Number,String,Boolean],r=Object.prototype.toString;for(t=t||[],s=0;s<t.length;s+=2)e===t[s]&&(n=t[s+1]);if(!n&&e&&"object"==typeof e){for(n={},s=0;s<i.length;s++)r.call(e)===r.call(a=new i[s](e))&&(n=s?a:[]);for(s in t.push(e,n),e)t.hasOwnProperty.call(e,s)&&(n[s]=U(e[s],t))}return n||e}function H(...e){return[].concat(...e.map(((t,s)=>{const n=e.slice(0);n.splice(s,1);const a=[...new Set([].concat(...n))];return t.filter((e=>!a.includes(e)))})))}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),String.prototype.toCamelCase||(String.prototype.toCamelCase=function(){return this.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g,((e,t)=>t.toUpperCase()))}),String.prototype.toSnakeCase||(String.prototype.toSnakeCase=function(){return this.replace(/[A-Z]/g,(e=>`_${e.toLowerCase()}`))});class B{constructor({meta:e}){this.meta=e,this.createdAt=+new Date}static normalizeMeta(e){const t=[];for(const s in e)e.hasOwnProperty(s)&&null!==e[s]&&t.push({key:s,value:e[s].toString()});return t}static aggregateMeta(e){let t={};if(Array.isArray(e))for(let s of e)t[s.key]=s.value;else t=e;return t}static policy(e,t){const s={policy:{}};if(t)for(const[e,n]of Object.entries(t||{}))if(null!==n&&["read","write"].includes(e)){s.policy[e]={};for(const[t,a]of Object.entries(n))s.policy[e][t]=a}return s.policy=JSON.stringify(B.__defaultPolicy(s.policy,e)),s}static __defaultPolicy(e,t){const s=U(e),n=Array.from(s).filter((e=>"read"===e.action)),a=Array.from(s).filter((e=>"write"===e.action)),i=Object.keys(t||{});for(const[e,t]of Object.entries({read:n,write:a})){const n=t.map((e=>e.key));s[e]||(s[e]={});for(const t of H(i,n))s[e][t]||(s[e][t]="write"!==e||["characters","pubkey"].includes(t)?["all"]:["self"])}return s}}class R{constructor({position:e=null,walletAddress:t=null,isotope:s=null,token:n=null,value:a=null,batchId:i=null,metaType:r=null,metaId:l=null,meta:o=null,otsFragment:u=null,index:c=null}){this.position=e,this.walletAddress=t,this.isotope=s,this.token=n,this.value=null!==a?String(a):null,this.batchId=i,this.metaType=r,this.metaId=l,this.meta=o?B.normalizeMeta(o):[],this.index=c,this.otsFragment=u,this.createdAt=String(+new Date)}static get create(){return{C({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="C",new R(arguments[0])},I({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="I",new R(arguments[0])},M({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="M",new R(arguments[0])},T({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="T",new R(arguments[0])},U({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="U",new R(arguments[0])},V({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="V",new R(arguments[0])},R({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="R",new R(arguments[0])}}}static get hashSchema(){return new Map([["position",null],["walletAddress",null],["isotope",null],["token",null],["value",null],["batchId",null],["metaType",null],["metaId",null],["meta",null],["createdAt",null]])}aggregatedMeta(){return B.aggregateMeta(this.meta)}static jsonToObject(e){const t=Object.assign(new R({}),JSON.parse(e)),s=Object.keys(new R({}));for(const e in t)t.hasOwnProperty(e)&&!s.includes(e)&&delete t[e];return t}static molecularHashSchema(e){const t=R.hashSchema;for(const s in e)e.hasOwnProperty(s)&&t.has(s)&&t.set(s,e[s]);return t}static hashAtoms({atoms:e,output:s="base17"}){const n=t.shake256.create(256),a=e.length,i=R.sortAtoms(e);for(const e of i){const t=R.molecularHashSchema(e);n.update(String(a));for(const e of t.keys()){const s=t.get(e);if((null!==s||["position","walletAddress"].includes(e))&&!["otsFragment","index"].includes(e))if("meta"!==e)n.update(null===s?"":String(s));else for(const e of s)void 0!==e.value&&null!==e.value&&(n.update(String(e.key)),n.update(String(e.value)))}}switch(s){case"hex":return n.hex();case"array":return n.array();default:return q(n.hex(),16,17,"0123456789abcdef","0123456789abcdefg").padStart(64,"0")}}static sortAtoms(e){const t=[...e];return t.sort(((e,t)=>e.index===t.index?0:e.index<t.index?-1:1)),t}}class j{static encode(e){return n.encode(e)}static decode(e){return r.Buffer.from(n.decode(e))}encode(e){return j.encode(e)}decode(e){return j.decode(e)}}class O{constructor(e={}){this.$options=Object.assign({characters:"GMP"},e),this.$encoder=$.default(this[this.$options.characters]||this.GMP)}encode(e){return this.$encoder.encode(r.Buffer.from(e))}decode(e){return this.$encoder.decode(e)}get GMP(){return"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv"}get BITCOIN(){return"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}get FLICKR(){return"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"}get RIPPLE(){return"rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz"}get IPFS(){return"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}}class E{constructor(e={}){this.$options=Object.assign({characters:"BASE64"},e),this.$encoder=new O,["BASE64"].includes(this.$options.characters)?this.$encoder=new j:["BASE2","BASE8","BASE11","BASE36","BASE62","BASE67"].includes(this.$options.characters)?this.$encoder=$.default(this[this.$options.characters]):["BITCOIN","FLICKR","RIPPLE","IPFS"].includes(this.$options.characters)&&(this.$encoder=new O(this.$options))}encode(e){return this.$encoder.encode(r.Buffer.from(e))}decode(e){return this.$encoder.decode(e)}get BASE2(){return"01"}get BASE8(){return"01234567"}get BASE11(){return"0123456789a"}get BASE36(){return"0123456789abcdefghijklmnopqrstuvwxyz"}get BASE62(){return"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"}get BASE67(){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~"}}class K{constructor(e=null){this.base=new E({characters:e||"BASE64"})}encrypt(e,t){return this.encode(u.seal(c.encode(JSON.stringify(e)),this.decode(t)))}decrypt(e,t,s){try{return JSON.parse(c.decode(u.open(this.decode(e),this.decode(s),this.decode(t))))}catch(e){return null}}generatePrivateKey(e){const s=t.shake256.create(8*o.box.secretKeyLength);return s.update(e),this.base.encode(r.Buffer.from(s.digest()))}generatePublicKey(e){const t=o.box.keyPair.fromSecretKey(this.decode(e));return this.encode(t.publicKey)}shortHash(e){const s=t.shake256.create(64);return s.update(e),this.base.encode(r.Buffer.from(s.digest()))}decode(e){return this.base.decode(e)}encode(e){return this.base.encode(e)}}function Q(e=null,s=2048){if(console.info(`Crypto::generateSecret() - Computing new secret${e?" from existing seed":""}...`),e){const n=t.shake256.create(2*s);return n.update(e),n.hex()}return v(s)}function P(e){console.info("Crypto::generateBundleHash() - Computing wallet bundle from secret...");const s=t.shake256.create(256);return s.update(e),s.hex()}function N({molecularHash:e=null,index:t=null}){return null!==e&&null!==t?P(String(e)+String(t)):v(64)}function F(e=64){return v(e,"abcdef0123456789")}function V(e,t,s=null){return new K(s).encrypt(e,t)}function J(e,t,s,n=null){return new K(n).decrypt(e,t,s)}function D(e,t=null){return new K(t).generatePrivateKey(e)}function L(e,t=null){return new K(t).generatePublicKey(e)}function z(e,t=null){return new K(t).shortHash(e)}class G{constructor({secret:e=null,token:t="USER",position:s=null,batchId:n=null,characters:a=null}){this.token=t,this.balance=0,this.molecules={},this.key=null,this.address=null,this.privkey=null,this.pubkey=null,this.tokenUnits=[],this.bundle=e?P(e):null,this.batchId=n,this.position=s,this.characters=a||"BASE64",e&&(this.position=this.position||F(),this.prepareKeys(e))}static create({secretOrBundle:e,token:t,batchId:s=null,characters:n=null}){let a=G.isBundleHash(e)?null:e,i=a?P(a):e,r=a?F():null,l=new G({secret:a,token:t,position:r,batchId:s,characters:n});return l.bundle=i,l}static isBundleHash(e){return"string"==typeof e&&(64===e.length&&C(e))}static getTokenUnits(e){let t=[];return e.forEach((e=>{t.push({id:e.shift(),name:e.shift(),metas:e})})),t}hasTokenUnits(){return!!this.tokenUnits&&this.tokenUnits.length>0}tokenUnitsJson(){if(this.hasTokenUnits()){const e=[];return this.tokenUnits.forEach((t=>{e.push([t.id,t.name].concat(t.metas))})),JSON.stringify(e)}return null}splitUnits(e,t,s=null){if(0===e.length)return;let n=[],a=[];this.tokenUnits.forEach((t=>{e.includes(t.id)?n.push(t):a.push(t)})),this.tokenUnits=n,null!==s&&(s.tokenUnits=n),t.tokenUnits=a}isShadow(){return!(void 0!==this.position&&null!==this.position||void 0!==this.address&&null!==this.address)}initBatchId({sourceWallet:e,isRemainder:t=!1}){e.batchId&&(this.batchId=t?e.batchId:N({}))}prepareKeys(e){null===this.key&&null===this.address&&(this.key=G.generatePrivateKey({secret:e,token:this.token,position:this.position}),this.address=G.generatePublicKey(this.key),this.getMyEncPrivateKey(),this.getMyEncPublicKey())}getMyEncPrivateKey(){return null===this.privkey&&null!==this.key&&(this.privkey=D(this.key,this.characters)),this.privkey}getMyEncPublicKey(){const e=this.getMyEncPrivateKey();return!this.pubkey&&e&&(this.pubkey=L(e,this.characters)),this.pubkey}encryptMyMessage(e){const t={};for(let s=1,n=arguments.length;s<n;s++)t[z(arguments[s],this.characters)]=V(e,arguments[s],this.characters);return t}decryptMyMessage(e){const t=this.getMyEncPublicKey();let s=e;return null!==e&&"object"==typeof e&&"[object Object]"===Object.prototype.toString.call(e)&&(s=e[z(t,this.characters)]||""),J(s,this.getMyEncPrivateKey(),t,this.characters)}decryptBinary(e){const t=this.decryptMyMessage(e);return new E({characters:"BASE64"}).decode(t)}encryptBinary(e){const t=Array.from(arguments).slice(1),s=new E({characters:"BASE64"}).encode(e);return this.encryptMyMessage(s,...t)}encryptString({data:e,publicKeys:t}){if(e){const s=this.getMyEncPublicKey();"string"==typeof t&&(t=[t]);const n=this.encryptMyMessage(e,s,...t);return btoa(JSON.stringify(n))}}decryptString({data:e,fallbackValue:t=null}){if(e)try{const s=JSON.parse(atob(e));return this.decryptMyMessage(s)||t}catch(s){return console.error(s),t||e}}static generatePrivateKey({secret:e,token:s,position:n}){const a=w.default(e,16).add(w.default(n,16)),i=t.shake256.create(8192);return i.update(a.toString(16)),s&&i.update(s),t.shake256.create(8192).update(i.hex()).hex()}static generatePublicKey(e){const s=x(e,128),n=t.shake256.create(8192);for(const e in s){let a=s[e];for(let e=1;e<=16;e++)a=t.shake256.create(512).update(a).hex();n.update(a)}return t.shake256.create(256).update(n.hex()).hex()}}class Z extends TypeError{constructor(e=null,t=null,s=null){if(super(e,t,s),null===e)throw new this(`Unknown ${this.constructor.name}`);this.name="BaseException"}toString(){return`${this.name}: ${this.message}.\nStack:\n${this.stack}`}}class X extends Z{constructor(e="There is an atom without an index",t=null,s=null){super(e,t,s),this.name="AtomIndexException"}}class Y extends Z{constructor(e="The molecule does not contain atoms",t=null,s=null){super(e,t,s),this.name="AtomsMissingException"}}class ee extends Z{constructor(e="The molecular hash does not match",t=null,s=null){super(e,t,s),this.name="MolecularHashMismatchException"}}class te extends Z{constructor(e="The molecular hash is missing",t=null,s=null){super(e,t,s),this.name="MolecularHashMissingException"}}class se extends Z{constructor(e="OTS malformed",t=null,s=null){super(e,t,s),this.name="SignatureMalformedException"}}class ne extends Z{constructor(e="One-time signature (OTS) does not match!",t=null,s=null){super(e,t,s),this.name="SignatureMismatchException"}}class ae extends Z{constructor(e="Insufficient balance to make transfer",t=null,s=null){super(e,t,s),this.name="TransferBalanceException"}}class ie extends Z{constructor(e="Token transfer atoms are malformed",t=null,s=null){super(e,t,s),this.name="TransferMalformedException"}}class re extends Z{constructor(e="Token slugs for wallets in transfer do not match!",t=null,s=null){super(e,t,s),this.name="TransferMismatchedException"}}class le extends Z{constructor(e="Invalid remainder provided",t=null,s=null){super(e,t,s),this.name="TransferRemainderException"}}class oe extends Z{constructor(e="Sender and recipient(s) cannot be the same",t=null,s=null){super(e,t,s),this.name="TransferToSelfException"}}class ue extends Z{constructor(e="Token transfer atoms are unbalanced",t=null,s=null){super(e,t,s),this.name="TransferUnbalancedException"}}class ce extends Z{constructor(e="Empty meta data.",t=null,s=null){super(e,t,s),this.name="MetaMissingException"}}class he extends Z{constructor(e="Wrong type of token for this isotope",t=null,s=null){super(e,t,s),this.name="WrongTokenTypeException"}}class de extends Z{constructor(e="Incorrect BatchId",t=null,s=null){super(e,t,s),this.name="BatchIdException"}}class pe extends Z{constructor(e="",t=null,s=null){super(e,t,s),this.name="KnishIOInvalidPolicyException"}}class me{static continuId(e){me.missing(e);if("USER"===e.atoms[0].token&&me.isotopeFilter("I",e.atoms).length<1)throw new Y("Check::continuId() - Molecule is missing required ContinuID Atom!");return!0}static batchId(e){if(e.atoms.length>0){const t=e.atoms[0];if("V"===t.isotope&&null!==t.batchId){const s=me.isotopeFilter("V",e.atoms),n=s[s.length-1];if(t.batchId!==n.batchId)throw new de;for(const e of s)if(null===e.batchId)throw new de}return!0}throw new de}static isotopeI(e){me.missing(e);for(let t of me.isotopeFilter("I",e.atoms)){if("USER"!==t.token)throw new he(`Check::isotopeI() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);if(0===t.index)throw new X(`Check::isotopeI() - Isotope "${t.isotope}" Atoms must have a non-zero index!`)}return!0}static isotopeU(e){me.missing(e);for(let t of me.isotopeFilter("U",e.atoms)){if("AUTH"!==t.token)throw new he(`Check::isotopeU() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);if(0!==t.index)throw new X(`Check::isotopeU() - Isotope "${t.isotope}" Atoms must have an index equal to 0!`)}return!0}static isotopeM(e){me.missing(e);const t=["readPolicy","writePolicy"];for(let s of me.isotopeFilter("M",e.atoms)){if(s.meta.length<1)throw new ce;if("USER"!==s.token)throw new he(`Check::isotopeM() - "${s.token}" is not a valid Token slug for "${s.isotope}" isotope Atoms!`);const e=B.aggregateMeta(s.meta);for(const s of t){let n=e[s];if(n){n=JSON.parse(n);for(const[s,a]of Object.entries(n))if(!t.includes(s)){if(!Object.keys(e).includes(s))throw new pe(`${s} is missing from the meta.`);for(const e of a)if(!G.isBundleHash(e)&&!["all","self"].includes(e))throw new pe(`${e} does not correspond to the format of the policy.`)}}}}return!0}static isotopeC(e){me.missing(e);for(let t of me.isotopeFilter("C",e.atoms)){if("USER"!==t.token)throw new he(`Check::isotopeC() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);if(0!==t.index)throw new X(`Check::isotopeC() - Isotope "${t.isotope}" Atoms must have an index equal to 0!`)}return!0}static isotopeT(e){me.missing(e);for(let t of me.isotopeFilter("T",e.atoms)){const e=t.aggregatedMeta();if("wallet"===String(t.metaType).toLowerCase())for(let t of["position","bundle"])if(!e.hasOwnProperty(t)||!Boolean(e[t]))throw new ce(`Check::isotopeT() - Required meta field "${t}" is missing!`);for(let t of["token"])if(!e.hasOwnProperty(t)||!Boolean(e[t]))throw new ce(`Check::isotopeT() - Required meta field "${t}" is missing!`);if("USER"!==t.token)throw new he(`Check::isotopeT() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);if(0!==t.index)throw new X(`Check::isotopeT() - Isotope "${t.isotope}" Atoms must have an index equal to 0!`)}return!0}static isotopeR(e){me.missing(e);for(let t of me.isotopeFilter("R",e.atoms)){const e=t.aggregatedMeta();if(e.policy){const t=JSON.parse(e.policy);if(!Object.keys(t).every((e=>["read","write"].includes(e))))throw new ce("Check::isotopeR() - Mixing rules with politics!")}if(e.rule){const t=JSON.parse(e.rule);if(!Array.isArray(t))throw new ce("Check::isotopeR() - Incorrect rule format!");if(t.length<1)throw new ce("Check::isotopeR() - No rules!");for(const e of t){if(Object.keys(e).filter((e=>["key","value","callback"].includes(e))).length<3)throw new ce("Check::isotopeR() - Necessary rule fields are missing!")}}}return!0}static isotopeV(e,t=null){me.missing(e);const s=me.isotopeFilter("V",e.atoms);if(0===s.length)return!0;const n=e.atoms[0];if("V"===n.isotope&&2===s.length){const e=s[s.length-1];if(n.token!==e.token)throw new re;if(e.value<0)throw new ie;return!0}let a=0,i=0;for(let t in e.atoms)if(e.atoms.hasOwnProperty(t)){const s=e.atoms[t];if("V"!==s.isotope)continue;if(i=1*s.value,Number.isNaN(i))throw new TypeError('Invalid isotope "V" values');if(s.token!==n.token)throw new re;if(t>0){if(i<0)throw new ie;if(s.walletAddress===n.walletAddress)throw new oe}a+=i}if(a!==i)throw new ue;if(t){if(i=1*n.value,Number.isNaN(i))throw new TypeError('Invalid isotope "V" values');const e=1*t.balance+1*i;if(e<0)throw new ae;if(e!==a)throw new le}else if(0!==i)throw new le;return!0}static molecularHash(e){if(me.missing(e),e.molecularHash!==R.hashAtoms({atoms:e.atoms}))throw new ee;return!0}static ots(e){me.missing(e);const s=e.atoms[0].walletAddress,n=me.normalizedHash(e.molecularHash);let a=e.atoms.map((e=>e.otsFragment)).reduce(((e,t)=>e+t));if(2048!==a.length&&(a=W(a),2048!==a.length))throw new se;const i=x(a,128);let r="";for(const e in i){let s=i[e];for(let a=0,i=8+n[e];a<i;a++)s=t.shake256.create(512).update(s).hex();r+=s}const l=t.shake256.create(8192).update(r).hex();if(t.shake256.create(256).update(l).hex()!==s)throw new ne;return!0}static index(e){me.missing(e);for(let t of e.atoms)if(null===t.index)throw new X;return!0}static isotopeFilter(e,t){return(t=t||[]).filter((t=>e===t.isotope))}static normalizedHash(e){return me.normalize(me.enumerate(e))}static enumerate(e){const t={0:-8,1:-7,2:-6,3:-5,4:-4,5:-3,6:-2,7:-1,8:0,9:1,a:2,b:3,c:4,d:5,e:6,f:7,g:8},s=[],n=e.toLowerCase().split("");for(let e=0,a=n.length;e<a;++e){const a=n[e];void 0!==t[a]&&(s[e]=t[a])}return s}static normalize(e){let t=e.reduce(((e,t)=>e+t));const s=t<0;for(;t<0||t>0;)for(const n of Object.keys(e)){if((s?e[n]<8:e[n]>-8)&&(s?(++e[n],++t):(--e[n],--t),0===t))break}return e}static missing(e){if(null===e.molecularHash)throw new te;if(1>e.atoms.length)throw new Y}}class ye extends Z{constructor(e="Insufficient balance for requested transfer",t=null,s=null){super(e,t,s),this.name="BalanceInsufficientException"}}class ge extends Z{constructor(e="Amount cannot be negative!",t=null,s=null){super(e,t,s),this.name="NegativeAmountException"}}class ke{#e;#t;#s;#n;#a;constructor({metaType:e,metaId:t,isotope:s,token:n,amount:a}){this.#e=e,this.#t=t,this.#s=s,this.#n=n,this.#a=a}toJSON(){return{metaType:this.#e,metaId:this.#t,isotope:this.#s,token:this.#n,amount:this.#a}}}class be extends Z{constructor(e="An incorrect argument!",t=null,s=null){super(e,t,s),this.name="RuleArgumentException"}}class _e{#i;#r=null;constructor({action:e,meta:t}){if(t&&(this.meta=t),!e)throw new be('Callback structure violated, missing mandatory "action" parameter.');this.#i=e}set meta(e){if(!(e instanceof ke))throw new be("Incorrect meta argument. The meta argument can only be an instance of the Meta class.");this.#r=e}toJSON(){const e={action:this.#i};return this.#r&&(e.meta=this.#r),e}static toObject(e){const t=new _e({action:e.action,meta:null});return e.meta&&(t.meta=new ke({metaType:e.meta.metaType,metaId:e.meta.metaId,isotope:e.meta.isotope,token:e.meta.token,amount:e.meta.amount})),t}}class fe{#l;#o;#u;#c;constructor({key:e,value:t,comparison:s="===",callback:n=[]}){if(!e)throw new be('Rule structure violated, missing mandatory "key" parameter!');if(!t)throw new be('Rule structure violated, missing mandatory "value" parameter');for(const e of n)if(!(e instanceof _e))throw new be;this.#l=e,this.#o=t,this.#u=s,this.#c=n}set comparison(e){this.#u=e}set callback(e){this.#c.push(e)}toJSON(){return{key:this.#l,value:this.#o,comparison:this.#u,callback:this.#c}}static toObject(e){const t=new fe({key:e.key,value:e.value});if(e.comparison&&(t.comparison=e.comparison),e.callback)for(const s of e.callback)t.callback=s instanceof _e?s:_e.toObject(s);return t}}class we{constructor({secret:e=null,sourceWallet:t=null,remainderWallet:s=null,cellSlug:n=null}){this.cellSlugOrigin=this.cellSlug=n,this.secret=e,this.sourceWallet=t,this.atoms=[],(s||t)&&(this.remainderWallet=s||G.create({secretOrBundle:e,token:t.token,batchId:t.batchId,characters:t.characters})),this.clear()}static generateNextAtomIndex(e){const t=e.length-1;return t>-1?e[t].index+1:0}continuIdMetaType(){return"walletBundle"}fill(e){for(let t in Object.keys(e))this[t]=e[t]}addAtom(e){return this.molecularHash=null,this.atoms.push(e),this.atoms=R.sortAtoms(this.atoms),this}finalMetas(e=null,t=null){return e=e||{},t=t||this.sourceWallet,e.pubkey=t.pubkey,e.characters=t.characters,e}tokenUnitMetas(e,t=[]){return e.hasTokenUnits()&&(t.tokenUnits=e.tokenUnitsJson()),t}contextMetas(e=null,t=null){return e=e||{}}addUserRemainderAtom(e){return this.molecularHash=null,this.atoms.push(R.create.I({position:e.position,walletAddress:e.address,token:e.token,metaType:"walletBundle",metaId:e.bundle,meta:this.finalMetas({},e),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}addPolicyAtom({metaType:e,metaId:t,meta:s={},policy:n={}}){return this.molecularHash=null,this.addAtom(R.create.R({token:"USER",metaType:e,metaId:t,meta:B.policy(this.finalMetas(s),n),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}burnToken({amount:e,walletBundle:t=null}){if(e<0)throw new ge("Molecule::burnToken() - Amount to burn must be positive!");if(this.sourceWallet.balance-e<0)throw new ye;return this.molecularHash=null,this.atoms.push(R.create.V({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:-e,batchId:this.sourceWallet.batchId,meta:this.finalMetas(this.tokenUnitMetas(this.sourceWallet)),index:this.generateIndex()})),this.atoms.push(R.create.V({position:this.remainderWallet.position,walletAddress:this.remainderWallet.address,token:this.sourceWallet.token,value:this.sourceWallet.balance-e,batchId:this.remainderWallet.batchId,metaType:t?"walletBundle":null,metaId:t,meta:this.finalMetas(this.tokenUnitMetas(this.remainderWallet),this.remainderWallet),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}replenishToken({amount:e,units:t=[]}){if(e<0)throw new ge("Molecule::replenishToken() - Amount to replenish must be positive!");if(t.length){t=G.getTokenUnits(t),this.remainderWallet.tokenUnits=this.sourceWallet.tokenUnits;for(const e of t)this.remainderWallet.tokenUnits.push(e);this.remainderWallet.balance=this.remainderWallet.tokenUnits.length,this.sourceWallet.tokenUnits=t,this.sourceWallet.balance=this.sourceWallet.tokenUnits.length}else this.remainderWallet.balance=this.sourceWallet.balance+e,this.sourceWallet.balance=e;this.molecularHash=null,this.atoms.push(R.create.V({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:this.sourceWallet.balance,batchId:this.sourceWallet.batchId,meta:this.finalMetas(this.tokenUnitMetas(this.sourceWallet)),index:this.generateIndex()}));const s=this.remainderWallet.bundle;return this.atoms.push(R.create.V({position:this.remainderWallet.position,walletAddress:this.remainderWallet.address,token:this.sourceWallet.token,value:this.remainderWallet.balance,batchId:this.remainderWallet.batchId,metaType:s?"walletBundle":null,metaId:s,meta:this.finalMetas(this.tokenUnitMetas(this.remainderWallet),this.remainderWallet),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}initValue({recipientWallet:e,amount:t}){if(this.sourceWallet.balance-t<0)throw new ye;return this.molecularHash=null,this.atoms.push(R.create.V({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:-t,batchId:this.sourceWallet.batchId,meta:this.finalMetas(this.tokenUnitMetas(this.sourceWallet)),index:this.generateIndex()})),this.atoms.push(R.create.V({position:e.position,walletAddress:e.address,token:this.sourceWallet.token,value:t,batchId:e.batchId,metaType:"walletBundle",metaId:e.bundle,meta:this.finalMetas(this.tokenUnitMetas(e),e),index:this.generateIndex()})),this.atoms.push(R.create.V({position:this.remainderWallet.position,walletAddress:this.remainderWallet.address,token:this.sourceWallet.token,value:this.sourceWallet.balance-t,batchId:this.remainderWallet.batchId,metaType:"walletBundle",metaId:this.sourceWallet.bundle,meta:this.finalMetas(this.tokenUnitMetas(this.remainderWallet),this.remainderWallet),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}initWalletCreation(e){this.molecularHash=null;const t={address:e.address,token:e.token,bundle:e.bundle,position:e.position,amount:0,batchId:e.batchId,pubkey:e.pubkey,characters:e.characters};return this.atoms.push(R.create.C({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,batchId:this.sourceWallet.batchId,metaType:"wallet",metaId:e.address,meta:this.finalMetas(this.contextMetas(t),e),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initTokenCreation({recipientWallet:e,amount:t,meta:s}){this.molecularHash=null;for(const t of["walletAddress","walletPosition","walletPubkey","walletCharacters"])s[t]||(s[t]=e[t.toLowerCase().substring(6)]);return this.atoms.push(R.create.C({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:t,batchId:e.batchId,metaType:"token",metaId:e.token,meta:this.finalMetas(this.contextMetas(s),this.sourceWallet),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}createRule({metaType:e,metaId:t,rule:s,policy:n={}}){const a=[];for(const e of s)a.push(e instanceof fe?e:fe.toObject(e));const i={rule:JSON.stringify(a)},r=B.policy(i,n);return this.addAtom(R.create.R({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,metaType:e,metaId:t,meta:{...i,...r},index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initShadowWalletClaim({token:e,wallet:t}){this.molecularHash=null;let s={tokenSlug:e,walletAddress:t.address,walletPosition:t.position,batchId:t.batchId};return this.atoms.push(R.create.C({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,metaType:"wallet",metaId:t.address,meta:this.finalMetas(this.contextMetas(s)),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initIdentifierCreation({type:e,contact:t,code:s}){this.molecularHash=null;const n={code:s,hash:P(t.trim())};return this.atoms.push(R.create.C({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,metaType:"identifier",metaId:e,meta:this.finalMetas(n,this.sourceWallet),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initMeta({meta:e,metaType:t,metaId:s,policy:n}){return this.molecularHash=null,this.atoms.push(R.create.M({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,batchId:this.sourceWallet.batchId,metaType:t,metaId:s,meta:this.finalMetas(e,this.sourceWallet),index:this.generateIndex()})),this.addPolicyAtom({metaType:t,metaId:s,meta:e,policy:n}),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initTokenRequest({token:e,amount:t,metaType:s,metaId:n,meta:a={},batchId:i=null}){return this.molecularHash=null,a.token=e,this.atoms.push(R.create.T({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:t,batchId:i,metaType:s,metaId:n,meta:this.finalMetas(a),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initAuthorization({meta:e}){return this.molecularHash=null,this.atoms.push(R.create.U({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,batchId:this.sourceWallet.batchId,meta:this.finalMetas(e),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}clear(){return this.molecularHash=null,this.bundle=null,this.status=null,this.createdAt=String(+new Date),this.atoms=[],this}sign({anonymous:e=!1,compressed:s=!0}){if(0===this.atoms.length||0!==this.atoms.filter((e=>!(e instanceof R))).length)throw new Y;e||(this.bundle=P(this.secret)),this.molecularHash=R.hashAtoms({atoms:this.atoms});const n=this.atoms[0],a=x(G.generatePrivateKey({secret:this.secret,token:n.token,position:n.position}),128),i=me.normalizedHash(this.molecularHash);let r="";for(const e in a){let s=a[e];for(let n=0,a=8-i[e];n<a;n++)s=t.shake256.create(512).update(s).hex();r+=s}s&&(r=M(r));const l=x(r,Math.ceil(r.length/this.atoms.length));let o=null;for(let e=0,t=l.length;e<t;e++)this.atoms[e].otsFragment=l[e],o=this.atoms[e].position;return o}generateIndex(){return we.generateNextAtomIndex(this.atoms)}static jsonToObject(e){const t=Object.assign(new we({}),JSON.parse(e)),s=Object.keys(new we({}));if(!Array.isArray(t.atoms))throw new Y;for(const e in Object.keys(t.atoms)){t.atoms[e]=R.jsonToObject(JSON.stringify(t.atoms[e]));for(const s of["position","walletAddress","isotope"])if(void 0===t.atoms[e][s]||null===t.atoms[e][s])throw new Y("MolecularStructure::jsonToObject() - Required Atom properties are missing!")}for(const e in t)t.hasOwnProperty(e)&&!s.includes(e)&&delete t[e];return t.atoms=R.sortAtoms(t.atoms),t}get cellSlugDelimiter(){return"."}cellSlugBase(){return(this.cellSlug||"").split(this.cellSlugDelimiter)[0]}toJSON(){let e=U(this);for(let t of["remainderWallet","secret","sourceWallet","cellSlugOrigin"])e.hasOwnProperty(t)&&delete e[t];return e}check(e=null){return we.verify({molecule:this,sourceWallet:e})}static verify({molecule:e,sourceWallet:t=null}){return me.molecularHash(e)&&me.ots(e)&&me.index(e)&&me.batchId(e)&&me.continuId(e)&&me.isotopeM(e)&&me.isotopeT(e)&&me.isotopeC(e)&&me.isotopeU(e)&&me.isotopeI(e)&&me.isotopeR(e)&&me.isotopeV(e,t)}}class $e{static __init(e,t){this.arr=[],this.key=null,this.arr=String(t).split("."),this.key=this.arr.shift();const s=Number(this.key);Number.isInteger(s)&&(this.key=s),this.__nextKey=this.arr.length,this.__next=this.__tic(e)}static __tic(e){return!!(Array.isArray(e)||e instanceof Object)&&void 0!==e[this.key]}static has(e,t){return this.__init(e,t),!!this.__next&&(0===this.__nextKey||this.has(e[this.key],this.arr.join(".")))}static get(e,t,s=null){return this.__init(e,t),this.__next?0===this.__nextKey?e[this.key]:this.get(e[this.key],this.arr.join("."),s):s}}const Ie=10**18;class Se{static val(e){return Math.abs(e*Ie)<1?0:e}static cmp(e,t,s=!1){const n=Se.val(e)*Ie,a=Se.val(t)*Ie;return Math.abs(n-a)<1?0:n>a?1:-1}static equal(e,t){return 0===Se.cmp(e,t)}}class Ae{static create(e,t){let s=new Ae(e);return s.setWallet(t),s}static restore(e,t){let s=new G({secret:t,token:"AUTH",position:e.wallet.position,characters:e.wallet.characters});return Ae.create({token:e.token,expiresAt:e.expiresAt,pubkey:e.pubkey,encrypt:e.encrypt},s)}constructor({token:e,expiresAt:t,encrypt:s,pubkey:n}){this.$__token=e,this.$__expiresAt=t,this.$__pubkey=n,this.$__encrypt=s}setWallet(e){this.$__wallet=e}getWallet(){return this.$__wallet}getSnapshot(){return{token:this.$__token,expiresAt:this.$__expiresAt,pubkey:this.$__pubkey,encrypt:this.$__encrypt,wallet:{position:this.$__wallet.position,characters:this.$__wallet.characters}}}getToken(){return this.$__token}getPubkey(){return this.$__pubkey}getExpireInterval(){return 1e3*this.$__expiresAt-Date.now()}isExpired(){return!this.$__expiresAt||this.getExpireInterval()<0}getAuthData(){return{token:this.getToken(),pubkey:this.getPubkey(),wallet:this.getWallet()}}}class Te extends Z{constructor(e="Code exception",t=null,s=null){super(e,t,s),this.name="CodeException"}}class xe extends Z{constructor(e="GraphQL did not provide a valid response.",t=null,s=null){super(e,t,s),this.name="InvalidResponseException"}}class ve extends Z{constructor(e="Authorization token missing or invalid.",t=null,s=null){super(e,t,s),this.name="UnauthenticatedException"}}class qe{constructor({query:e,json:t,dataKey:s=null}){if(this.dataKey=s,this.errorKey="exception",this.$__payload=null,this.$__query=e,this.$__originResponse=t,this.$__response=t,void 0===this.$__response||null===this.$__response)throw new xe;if($e.has(this.$__response,this.errorKey)){const e=$e.get(this.$__response,this.errorKey);if(String(e).includes("Unauthenticated"))throw new ve;throw new xe}this.init()}init(){}data(){if(!this.dataKey)return this.response();if(!$e.has(this.response(),this.dataKey))throw new xe;return $e.get(this.response(),this.dataKey)}response(){return this.$__response}payload(){return null}query(){return this.$__query}status(){return null}}class Me{constructor(e){this.client=e,this.$__variables=null,this.$__query=null}response(){return this.$__response}async createResponseRaw(e){return this.createResponse(e)}createResponse(e){return new qe({query:this,json:e})}createQuery({variables:e=null}){if(this.$__variables=this.compiledVariables(e),!this.uri())throw new Te("Query::createQuery() - Node URI was not initialized for this client instance!");if(null===this.$__query)throw new Te("Query::createQuery() - GraphQL subscription was not initialized!");return{query:this.$__query,variables:this.variables()}}async execute({variables:e=null}){this.$__request=this.createQuery({variables:e});let t=await this.client.query(this.$__request);return this.$__response=await this.createResponseRaw(t),this.$__response}compiledVariables(e=null){return e||{}}uri(){return this.client.getUri()}variables(){return this.$__variables}}class We extends qe{constructor({query:e,json:t}){super({query:e,json:t,dataKey:"data.ContinuId"})}payload(){let e=null;const t=this.data();return t&&(e=new G({secret:null,token:t.tokenSlug}),e.address=t.address,e.position=t.position,e.bundle=t.bundleHash,e.batchId=t.batchId,e.characters=t.characters,e.pubkey=t.pubkey,e.balance=1*t.amount),e}}class Ce extends Me{constructor(e){super(e),this.$__query=h.gql`query ($bundle: String!) {
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("js-sha3"),require("big-integer"),require("@stablelib/base64"),require("get-random-values"),require("big-integer/BigInteger"),require("buffer"),require("base-x"),require("tweetnacl"),require("tweetnacl-sealedbox-js"),require("@stablelib/utf8"),require("@apollo/client/core"),require("isomorphic-fetch"),require("@apollo/client/cache"),require("@apollo/client/link/error"),require("laravel-echo"),require("socket.io-client"),require("graphql")):"function"==typeof define&&define.amd?define(["exports","js-sha3","big-integer","@stablelib/base64","get-random-values","big-integer/BigInteger","buffer","base-x","tweetnacl","tweetnacl-sealedbox-js","@stablelib/utf8","@apollo/client/core","isomorphic-fetch","@apollo/client/cache","@apollo/client/link/error","laravel-echo","socket.io-client","graphql"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).KnishIO={},e.shake256,e.bigInt,e.base64,e.getRandomValues,e.bigIntB,e.buffer,e.baseX,e.tweetnacl,e.tweetnaclSealedboxJs,e.utf8,e.apolloClientCore,e.fetch,e.apolloClientCache,e.apolloClientLinkError,e.Echo,e.io,e.graphql)}(this,(function(e,t,s,n,a,i,r,l,o,u,c,h,d,p,m,y,g,k){"use strict";function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=b(s),f=b(a),w=b(i),$=b(l),I=b(d),S=b(y),A=b(g);class T{static toHex(e,t){const s=(e,t)=>{const s=t?["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]:["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return s[Math.floor(e/16)]+s[e%16]},n=Object.assign({grouping:0,rowlength:0,uppercase:!1},t||{});let a="",i=0,r=0;for(let t=0;t<e.length&&(a+=s(e[t],n.uppercase),t!==e.length-1);++t)n.grouping>0&&++i===n.grouping&&(i=0,n.rowlength>0&&++r===n.rowlength?(r=0,a+="\n"):a+=" ");return a}static toUint8Array(e){let t=e.toLowerCase().replace(/\s/g,"");t.length%2==1&&(t=`0${t}`);let s=new Uint8Array(Math.floor(t.length/2)),n=-1;for(let e=0;e<t.length;++e){let a=t[e],i=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"].indexOf(a);if(-1===i)throw Error("unexpected character");-1===n?n=16*i:(s[Math.floor(e/2)]=n+i,n=-1)}return s}}function x(e,t){const s=Math.ceil(e.length/t),n=[];for(let a=0,i=0;a<s;++a,i+=t)n[a]=e.substr(i,t);return n}function v(e=256,t="abcdef0123456789"){let s=new Uint8Array(e);return s=f.default(s),s=s.map((e=>t.charCodeAt(e%t.length))),String.fromCharCode.apply(null,s)}function q(e,t,s,n,a){if(n=n||"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~`!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?¿¡",a=a||n,t>n.length||s>a.length)return console.warn("Strings::charsetBaseConvert() - Can't convert",e,"to base",s,"greater than symbol table length. src-table:",n.length,"dest-table:",a.length),!1;let i=_.default(0);for(let s=0;s<e.length;s++)i=i.multiply(t).add(n.indexOf(e.charAt(s)));if(i.lesser(0))return 0;let r=i.mod(s),l=a.charAt(r),o=i.divide(s);for(;!o.equals(0);)r=o.mod(s),o=o.divide(s),l=a.charAt(r)+l;return l}function M(e){return n.encode(T.toUint8Array(e))}function W(e){return T.toHex(n.decode(e),{})}function C(e){return/^[A-F0-9]+$/i.test(e)}function U(e,t){let s,n,a,i=[Array,Date,Number,String,Boolean],r=Object.prototype.toString;for(t=t||[],s=0;s<t.length;s+=2)e===t[s]&&(n=t[s+1]);if(!n&&e&&"object"==typeof e){for(n={},s=0;s<i.length;s++)r.call(e)===r.call(a=new i[s](e))&&(n=s?a:[]);for(s in t.push(e,n),e)t.hasOwnProperty.call(e,s)&&(n[s]=U(e[s],t))}return n||e}function H(...e){return[].concat(...e.map(((t,s)=>{const n=e.slice(0);n.splice(s,1);const a=[...new Set([].concat(...n))];return t.filter((e=>!a.includes(e)))})))}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),String.prototype.toCamelCase||(String.prototype.toCamelCase=function(){return this.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g,((e,t)=>t.toUpperCase()))}),String.prototype.toSnakeCase||(String.prototype.toSnakeCase=function(){return this.replace(/[A-Z]/g,(e=>`_${e.toLowerCase()}`))});class B{constructor({meta:e}){this.meta=e,this.createdAt=+new Date}static normalizeMeta(e){const t=[];for(const s in e)e.hasOwnProperty(s)&&null!==e[s]&&t.push({key:s,value:e[s].toString()});return t}static aggregateMeta(e){let t={};if(Array.isArray(e))for(let s of e)t[s.key]=s.value;else t=e;return t}static policy(e,t){const s={policy:{}};if(t)for(const[e,n]of Object.entries(t||{}))if(null!==n&&["read","write"].includes(e)){s.policy[e]={};for(const[t,a]of Object.entries(n))s.policy[e][t]=a}return s.policy=JSON.stringify(B.__defaultPolicy(s.policy,e)),s}static __defaultPolicy(e,t){const s=U(e),n=Array.from(s).filter((e=>"read"===e.action)),a=Array.from(s).filter((e=>"write"===e.action)),i=Object.keys(t||{});for(const[e,t]of Object.entries({read:n,write:a})){const n=t.map((e=>e.key));s[e]||(s[e]={});for(const t of H(i,n))s[e][t]||(s[e][t]="write"!==e||["characters","pubkey"].includes(t)?["all"]:["self"])}return s}}class R{constructor({position:e=null,walletAddress:t=null,isotope:s=null,token:n=null,value:a=null,batchId:i=null,metaType:r=null,metaId:l=null,meta:o=null,otsFragment:u=null,index:c=null}){this.position=e,this.walletAddress=t,this.isotope=s,this.token=n,this.value=null!==a?String(a):null,this.batchId=i,this.metaType=r,this.metaId=l,this.meta=o?B.normalizeMeta(o):[],this.index=c,this.otsFragment=u,this.createdAt=String(+new Date)}static get create(){return{C({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="C",new R(arguments[0])},I({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="I",new R(arguments[0])},M({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="M",new R(arguments[0])},T({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="T",new R(arguments[0])},U({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="U",new R(arguments[0])},V({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="V",new R(arguments[0])},R({position:e=null,walletAddress:t=null,token:s=null,value:n=null,batchId:a=null,metaType:i=null,metaId:r=null,meta:l=null,otsFragment:o=null,index:u=null}){return arguments[0].isotope="R",new R(arguments[0])}}}static get hashSchema(){return new Map([["position",null],["walletAddress",null],["isotope",null],["token",null],["value",null],["batchId",null],["metaType",null],["metaId",null],["meta",null],["createdAt",null]])}aggregatedMeta(){return B.aggregateMeta(this.meta)}static jsonToObject(e){const t=Object.assign(new R({}),JSON.parse(e)),s=Object.keys(new R({}));for(const e in t)t.hasOwnProperty(e)&&!s.includes(e)&&delete t[e];return t}static molecularHashSchema(e){const t=R.hashSchema;for(const s in e)e.hasOwnProperty(s)&&t.has(s)&&t.set(s,e[s]);return t}static hashAtoms({atoms:e,output:s="base17"}){const n=t.shake256.create(256),a=e.length,i=R.sortAtoms(e);for(const e of i){const t=R.molecularHashSchema(e);n.update(String(a));for(const e of t.keys()){const s=t.get(e);if((null!==s||["position","walletAddress"].includes(e))&&!["otsFragment","index"].includes(e))if("meta"!==e)n.update(null===s?"":String(s));else for(const e of s)void 0!==e.value&&null!==e.value&&(n.update(String(e.key)),n.update(String(e.value)))}}switch(s){case"hex":return n.hex();case"array":return n.array();default:return q(n.hex(),16,17,"0123456789abcdef","0123456789abcdefg").padStart(64,"0")}}static sortAtoms(e){const t=[...e];return t.sort(((e,t)=>e.index===t.index?0:e.index<t.index?-1:1)),t}}class j{static encode(e){return n.encode(e)}static decode(e){return r.Buffer.from(n.decode(e))}encode(e){return j.encode(e)}decode(e){return j.decode(e)}}class O{constructor(e={}){this.$options=Object.assign({characters:"GMP"},e),this.$encoder=$.default(this[this.$options.characters]||this.GMP)}encode(e){return this.$encoder.encode(r.Buffer.from(e))}decode(e){return this.$encoder.decode(e)}get GMP(){return"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv"}get BITCOIN(){return"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}get FLICKR(){return"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"}get RIPPLE(){return"rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz"}get IPFS(){return"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}}class E{constructor(e={}){this.$options=Object.assign({characters:"BASE64"},e),this.$encoder=new O,["BASE64"].includes(this.$options.characters)?this.$encoder=new j:["BASE2","BASE8","BASE11","BASE36","BASE62","BASE67"].includes(this.$options.characters)?this.$encoder=$.default(this[this.$options.characters]):["BITCOIN","FLICKR","RIPPLE","IPFS"].includes(this.$options.characters)&&(this.$encoder=new O(this.$options))}encode(e){return this.$encoder.encode(r.Buffer.from(e))}decode(e){return this.$encoder.decode(e)}get BASE2(){return"01"}get BASE8(){return"01234567"}get BASE11(){return"0123456789a"}get BASE36(){return"0123456789abcdefghijklmnopqrstuvwxyz"}get BASE62(){return"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"}get BASE67(){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~"}}class K{constructor(e=null){this.base=new E({characters:e||"BASE64"})}encrypt(e,t){return this.encode(u.seal(c.encode(JSON.stringify(e)),this.decode(t)))}decrypt(e,t,s){try{return JSON.parse(c.decode(u.open(this.decode(e),this.decode(s),this.decode(t))))}catch(e){return null}}generatePrivateKey(e){const s=t.shake256.create(8*o.box.secretKeyLength);return s.update(e),this.base.encode(r.Buffer.from(s.digest()))}generatePublicKey(e){const t=o.box.keyPair.fromSecretKey(this.decode(e));return this.encode(t.publicKey)}shortHash(e){const s=t.shake256.create(64);return s.update(e),this.base.encode(r.Buffer.from(s.digest()))}decode(e){return this.base.decode(e)}encode(e){return this.base.encode(e)}}function Q(e=null,s=2048){if(console.info(`Crypto::generateSecret() - Computing new secret${e?" from existing seed":""}...`),e){const n=t.shake256.create(2*s);return n.update(e),n.hex()}return v(s)}function P(e){console.info("Crypto::generateBundleHash() - Computing wallet bundle from secret...");const s=t.shake256.create(256);return s.update(e),s.hex()}function N({molecularHash:e=null,index:t=null}){return null!==e&&null!==t?P(String(e)+String(t)):v(64)}function F(e=64){return v(e,"abcdef0123456789")}function V(e,t,s=null){return new K(s).encrypt(e,t)}function J(e,t,s,n=null){return new K(n).decrypt(e,t,s)}function D(e,t=null){return new K(t).generatePrivateKey(e)}function L(e,t=null){return new K(t).generatePublicKey(e)}function z(e,t=null){return new K(t).shortHash(e)}class G{constructor({secret:e=null,token:t="USER",position:s=null,batchId:n=null,characters:a=null}){this.token=t,this.balance=0,this.molecules={},this.key=null,this.address=null,this.privkey=null,this.pubkey=null,this.tokenUnits=[],this.bundle=e?P(e):null,this.batchId=n,this.position=s,this.characters=a||"BASE64",e&&(this.position=this.position||F(),this.prepareKeys(e))}static create({secretOrBundle:e,token:t,batchId:s=null,characters:n=null}){let a=G.isBundleHash(e)?null:e,i=a?P(a):e,r=a?F():null,l=new G({secret:a,token:t,position:r,batchId:s,characters:n});return l.bundle=i,l}static isBundleHash(e){return"string"==typeof e&&(64===e.length&&C(e))}static getTokenUnits(e){let t=[];return e.forEach((e=>{t.push({id:e.shift(),name:e.shift(),metas:e})})),t}hasTokenUnits(){return!!this.tokenUnits&&this.tokenUnits.length>0}tokenUnitsJson(){if(this.hasTokenUnits()){const e=[];return this.tokenUnits.forEach((t=>{e.push([t.id,t.name].concat(t.metas))})),JSON.stringify(e)}return null}splitUnits(e,t,s=null){if(0===e.length)return;let n=[],a=[];this.tokenUnits.forEach((t=>{e.includes(t.id)?n.push(t):a.push(t)})),this.tokenUnits=n,null!==s&&(s.tokenUnits=n),t.tokenUnits=a}isShadow(){return!(void 0!==this.position&&null!==this.position||void 0!==this.address&&null!==this.address)}initBatchId({sourceWallet:e,isRemainder:t=!1}){e.batchId&&(this.batchId=t?e.batchId:N({}))}prepareKeys(e){null===this.key&&null===this.address&&(this.key=G.generatePrivateKey({secret:e,token:this.token,position:this.position}),this.address=G.generatePublicKey(this.key),this.getMyEncPrivateKey(),this.getMyEncPublicKey())}getMyEncPrivateKey(){return null===this.privkey&&null!==this.key&&(this.privkey=D(this.key,this.characters)),this.privkey}getMyEncPublicKey(){const e=this.getMyEncPrivateKey();return!this.pubkey&&e&&(this.pubkey=L(e,this.characters)),this.pubkey}encryptMyMessage(e){const t={};for(let s=1,n=arguments.length;s<n;s++)t[z(arguments[s],this.characters)]=V(e,arguments[s],this.characters);return t}decryptMyMessage(e){const t=this.getMyEncPublicKey();let s=e;return null!==e&&"object"==typeof e&&"[object Object]"===Object.prototype.toString.call(e)&&(s=e[z(t,this.characters)]||""),J(s,this.getMyEncPrivateKey(),t,this.characters)}decryptBinary(e){const t=this.decryptMyMessage(e);return new E({characters:"BASE64"}).decode(t)}encryptBinary(e){const t=Array.from(arguments).slice(1),s=new E({characters:"BASE64"}).encode(e);return this.encryptMyMessage(s,...t)}encryptString({data:e,publicKeys:t}){if(e){const s=this.getMyEncPublicKey();"string"==typeof t&&(t=[t]);const n=this.encryptMyMessage(e,s,...t);return btoa(JSON.stringify(n))}}decryptString({data:e,fallbackValue:t=null}){if(e)try{const s=JSON.parse(atob(e));return this.decryptMyMessage(s)||t}catch(s){return console.error(s),t||e}}static generatePrivateKey({secret:e,token:s,position:n}){const a=w.default(e,16).add(w.default(n,16)),i=t.shake256.create(8192);return i.update(a.toString(16)),s&&i.update(s),t.shake256.create(8192).update(i.hex()).hex()}static generatePublicKey(e){const s=x(e,128),n=t.shake256.create(8192);for(const e in s){let a=s[e];for(let e=1;e<=16;e++)a=t.shake256.create(512).update(a).hex();n.update(a)}return t.shake256.create(256).update(n.hex()).hex()}}class Z extends TypeError{constructor(e=null,t=null,s=null){if(super(e,t,s),null===e)throw new this(`Unknown ${this.constructor.name}`);this.name="BaseException"}toString(){return`${this.name}: ${this.message}.\nStack:\n${this.stack}`}}class X extends Z{constructor(e="There is an atom without an index",t=null,s=null){super(e,t,s),this.name="AtomIndexException"}}class Y extends Z{constructor(e="The molecule does not contain atoms",t=null,s=null){super(e,t,s),this.name="AtomsMissingException"}}class ee extends Z{constructor(e="The molecular hash does not match",t=null,s=null){super(e,t,s),this.name="MolecularHashMismatchException"}}class te extends Z{constructor(e="The molecular hash is missing",t=null,s=null){super(e,t,s),this.name="MolecularHashMissingException"}}class se extends Z{constructor(e="OTS malformed",t=null,s=null){super(e,t,s),this.name="SignatureMalformedException"}}class ne extends Z{constructor(e="One-time signature (OTS) does not match!",t=null,s=null){super(e,t,s),this.name="SignatureMismatchException"}}class ae extends Z{constructor(e="Insufficient balance to make transfer",t=null,s=null){super(e,t,s),this.name="TransferBalanceException"}}class ie extends Z{constructor(e="Token transfer atoms are malformed",t=null,s=null){super(e,t,s),this.name="TransferMalformedException"}}class re extends Z{constructor(e="Token slugs for wallets in transfer do not match!",t=null,s=null){super(e,t,s),this.name="TransferMismatchedException"}}class le extends Z{constructor(e="Invalid remainder provided",t=null,s=null){super(e,t,s),this.name="TransferRemainderException"}}class oe extends Z{constructor(e="Sender and recipient(s) cannot be the same",t=null,s=null){super(e,t,s),this.name="TransferToSelfException"}}class ue extends Z{constructor(e="Token transfer atoms are unbalanced",t=null,s=null){super(e,t,s),this.name="TransferUnbalancedException"}}class ce extends Z{constructor(e="Empty meta data.",t=null,s=null){super(e,t,s),this.name="MetaMissingException"}}class he extends Z{constructor(e="Wrong type of token for this isotope",t=null,s=null){super(e,t,s),this.name="WrongTokenTypeException"}}class de extends Z{constructor(e="Incorrect BatchId",t=null,s=null){super(e,t,s),this.name="BatchIdException"}}class pe extends Z{constructor(e="",t=null,s=null){super(e,t,s),this.name="KnishIOInvalidPolicyException"}}class me{static continuId(e){me.missing(e);if("USER"===e.atoms[0].token&&me.isotopeFilter("I",e.atoms).length<1)throw new Y("Check::continuId() - Molecule is missing required ContinuID Atom!");return!0}static batchId(e){if(e.atoms.length>0){const t=e.atoms[0];if("V"===t.isotope&&null!==t.batchId){const s=me.isotopeFilter("V",e.atoms),n=s[s.length-1];if(t.batchId!==n.batchId)throw new de;for(const e of s)if(null===e.batchId)throw new de}return!0}throw new de}static isotopeI(e){me.missing(e);for(let t of me.isotopeFilter("I",e.atoms)){if("USER"!==t.token)throw new he(`Check::isotopeI() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);if(0===t.index)throw new X(`Check::isotopeI() - Isotope "${t.isotope}" Atoms must have a non-zero index!`)}return!0}static isotopeU(e){me.missing(e);for(let t of me.isotopeFilter("U",e.atoms)){if("AUTH"!==t.token)throw new he(`Check::isotopeU() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);if(0!==t.index)throw new X(`Check::isotopeU() - Isotope "${t.isotope}" Atoms must have an index equal to 0!`)}return!0}static isotopeM(e){me.missing(e);const t=["readPolicy","writePolicy"];for(let s of me.isotopeFilter("M",e.atoms)){if(s.meta.length<1)throw new ce;if("USER"!==s.token)throw new he(`Check::isotopeM() - "${s.token}" is not a valid Token slug for "${s.isotope}" isotope Atoms!`);const e=B.aggregateMeta(s.meta);for(const s of t){let n=e[s];if(n){n=JSON.parse(n);for(const[s,a]of Object.entries(n))if(!t.includes(s)){if(!Object.keys(e).includes(s))throw new pe(`${s} is missing from the meta.`);for(const e of a)if(!G.isBundleHash(e)&&!["all","self"].includes(e))throw new pe(`${e} does not correspond to the format of the policy.`)}}}}return!0}static isotopeC(e){me.missing(e);for(let t of me.isotopeFilter("C",e.atoms)){if("USER"!==t.token)throw new he(`Check::isotopeC() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);if(0!==t.index)throw new X(`Check::isotopeC() - Isotope "${t.isotope}" Atoms must have an index equal to 0!`)}return!0}static isotopeT(e){me.missing(e);for(let t of me.isotopeFilter("T",e.atoms)){const e=t.aggregatedMeta();if("wallet"===String(t.metaType).toLowerCase())for(let t of["position","bundle"])if(!e.hasOwnProperty(t)||!Boolean(e[t]))throw new ce(`Check::isotopeT() - Required meta field "${t}" is missing!`);for(let t of["token"])if(!e.hasOwnProperty(t)||!Boolean(e[t]))throw new ce(`Check::isotopeT() - Required meta field "${t}" is missing!`);if("USER"!==t.token)throw new he(`Check::isotopeT() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);if(0!==t.index)throw new X(`Check::isotopeT() - Isotope "${t.isotope}" Atoms must have an index equal to 0!`)}return!0}static isotopeR(e){me.missing(e);for(let t of me.isotopeFilter("R",e.atoms)){const e=t.aggregatedMeta();if(e.policy){const t=JSON.parse(e.policy);if(!Object.keys(t).every((e=>["read","write"].includes(e))))throw new ce("Check::isotopeR() - Mixing rules with politics!")}if(e.rule){const t=JSON.parse(e.rule);if(!Array.isArray(t))throw new ce("Check::isotopeR() - Incorrect rule format!");if(t.length<1)throw new ce("Check::isotopeR() - No rules!");for(const e of t){if(Object.keys(e).filter((e=>["key","value","callback"].includes(e))).length<3)throw new ce("Check::isotopeR() - Necessary rule fields are missing!")}}}return!0}static isotopeV(e,t=null){me.missing(e);const s=me.isotopeFilter("V",e.atoms);if(0===s.length)return!0;const n=e.atoms[0];if("V"===n.isotope&&2===s.length){const e=s[s.length-1];if(n.token!==e.token)throw new re;if(e.value<0)throw new ie;return!0}let a=0,i=0;for(let t in e.atoms)if(e.atoms.hasOwnProperty(t)){const s=e.atoms[t];if("V"!==s.isotope)continue;if(i=1*s.value,Number.isNaN(i))throw new TypeError('Invalid isotope "V" values');if(s.token!==n.token)throw new re;if(t>0){if(i<0)throw new ie;if(s.walletAddress===n.walletAddress)throw new oe}a+=i}if(a!==i)throw new ue;if(t){if(i=1*n.value,Number.isNaN(i))throw new TypeError('Invalid isotope "V" values');const e=1*t.balance+1*i;if(e<0)throw new ae;if(e!==a)throw new le}else if(0!==i)throw new le;return!0}static molecularHash(e){if(me.missing(e),e.molecularHash!==R.hashAtoms({atoms:e.atoms}))throw new ee;return!0}static ots(e){me.missing(e);const s=e.atoms[0].walletAddress,n=me.normalizedHash(e.molecularHash);let a=e.atoms.map((e=>e.otsFragment)).reduce(((e,t)=>e+t));if(2048!==a.length&&(a=W(a),2048!==a.length))throw new se;const i=x(a,128);let r="";for(const e in i){let s=i[e];for(let a=0,i=8+n[e];a<i;a++)s=t.shake256.create(512).update(s).hex();r+=s}const l=t.shake256.create(8192).update(r).hex();if(t.shake256.create(256).update(l).hex()!==s)throw new ne;return!0}static index(e){me.missing(e);for(let t of e.atoms)if(null===t.index)throw new X;return!0}static isotopeFilter(e,t){return(t=t||[]).filter((t=>e===t.isotope))}static normalizedHash(e){return me.normalize(me.enumerate(e))}static enumerate(e){const t={0:-8,1:-7,2:-6,3:-5,4:-4,5:-3,6:-2,7:-1,8:0,9:1,a:2,b:3,c:4,d:5,e:6,f:7,g:8},s=[],n=e.toLowerCase().split("");for(let e=0,a=n.length;e<a;++e){const a=n[e];void 0!==t[a]&&(s[e]=t[a])}return s}static normalize(e){let t=e.reduce(((e,t)=>e+t));const s=t<0;for(;t<0||t>0;)for(const n of Object.keys(e)){if((s?e[n]<8:e[n]>-8)&&(s?(++e[n],++t):(--e[n],--t),0===t))break}return e}static missing(e){if(null===e.molecularHash)throw new te;if(1>e.atoms.length)throw new Y}}class ye extends Z{constructor(e="Insufficient balance for requested transfer",t=null,s=null){super(e,t,s),this.name="BalanceInsufficientException"}}class ge extends Z{constructor(e="Amount cannot be negative!",t=null,s=null){super(e,t,s),this.name="NegativeAmountException"}}class ke{_metaType;_metaId;_isotope;_token;_amount;constructor({metaType:e,metaId:t,isotope:s,token:n,amount:a}){this._metaType=e,this._metaId=t,this._isotope=s,this._token=n,this._amount=a}toJSON(){return{metaType:this._metaType,metaId:this._metaId,isotope:this._isotope,token:this._token,amount:this._amount}}}class be extends Z{constructor(e="An incorrect argument!",t=null,s=null){super(e,t,s),this.name="RuleArgumentException"}}class _e{_action;_meta=null;constructor({action:e,meta:t}){if(t&&(this.meta=t),!e)throw new be('Callback structure violated, missing mandatory "action" parameter.');this._action=e}set meta(e){if(!(e instanceof ke))throw new be("Incorrect meta argument. The meta argument can only be an instance of the Meta class.");this._meta=e}toJSON(){const e={action:this._action};return this._meta&&(e.meta=this._meta),e}static toObject(e){const t=new _e({action:e.action,meta:null});return e.meta&&(t.meta=new ke({metaType:e.meta.metaType,metaId:e.meta.metaId,isotope:e.meta.isotope,token:e.meta.token,amount:e.meta.amount})),t}}class fe{_key;_value;_comparison;_callback;constructor({key:e,value:t,comparison:s="===",callback:n=[]}){if(!e)throw new be('Rule structure violated, missing mandatory "key" parameter!');if(!t)throw new be('Rule structure violated, missing mandatory "value" parameter');for(const e of n)if(!(e instanceof _e))throw new be;this._key=e,this._value=t,this._comparison=s,this._callback=n}set comparison(e){this._comparison=e}set callback(e){this._callback.push(e)}toJSON(){return{key:this._key,value:this._value,comparison:this._comparison,callback:this._callback}}static toObject(e){const t=new fe({key:e.key,value:e.value});if(e.comparison&&(t.comparison=e.comparison),e.callback)for(const s of e.callback)t.callback=s instanceof _e?s:_e.toObject(s);return t}}class we{constructor({secret:e=null,sourceWallet:t=null,remainderWallet:s=null,cellSlug:n=null}){this.cellSlugOrigin=this.cellSlug=n,this.secret=e,this.sourceWallet=t,this.atoms=[],(s||t)&&(this.remainderWallet=s||G.create({secretOrBundle:e,token:t.token,batchId:t.batchId,characters:t.characters})),this.clear()}static generateNextAtomIndex(e){const t=e.length-1;return t>-1?e[t].index+1:0}continuIdMetaType(){return"walletBundle"}fill(e){for(let t in Object.keys(e))this[t]=e[t]}addAtom(e){return this.molecularHash=null,this.atoms.push(e),this.atoms=R.sortAtoms(this.atoms),this}finalMetas(e=null,t=null){return e=e||{},t=t||this.sourceWallet,e.pubkey=t.pubkey,e.characters=t.characters,e}tokenUnitMetas(e,t=[]){return e.hasTokenUnits()&&(t.tokenUnits=e.tokenUnitsJson()),t}contextMetas(e=null,t=null){return e=e||{}}addUserRemainderAtom(e){return this.molecularHash=null,this.atoms.push(R.create.I({position:e.position,walletAddress:e.address,token:e.token,metaType:"walletBundle",metaId:e.bundle,meta:this.finalMetas({},e),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}addPolicyAtom({metaType:e,metaId:t,meta:s={},policy:n={}}){return this.molecularHash=null,this.addAtom(R.create.R({token:"USER",metaType:e,metaId:t,meta:B.policy(this.finalMetas(s),n),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}burnToken({amount:e,walletBundle:t=null}){if(e<0)throw new ge("Molecule::burnToken() - Amount to burn must be positive!");if(this.sourceWallet.balance-e<0)throw new ye;return this.molecularHash=null,this.atoms.push(R.create.V({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:-e,batchId:this.sourceWallet.batchId,meta:this.finalMetas(this.tokenUnitMetas(this.sourceWallet)),index:this.generateIndex()})),this.atoms.push(R.create.V({position:this.remainderWallet.position,walletAddress:this.remainderWallet.address,token:this.sourceWallet.token,value:this.sourceWallet.balance-e,batchId:this.remainderWallet.batchId,metaType:t?"walletBundle":null,metaId:t,meta:this.finalMetas(this.tokenUnitMetas(this.remainderWallet),this.remainderWallet),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}replenishToken({amount:e,units:t=[]}){if(e<0)throw new ge("Molecule::replenishToken() - Amount to replenish must be positive!");if(t.length){t=G.getTokenUnits(t),this.remainderWallet.tokenUnits=this.sourceWallet.tokenUnits;for(const e of t)this.remainderWallet.tokenUnits.push(e);this.remainderWallet.balance=this.remainderWallet.tokenUnits.length,this.sourceWallet.tokenUnits=t,this.sourceWallet.balance=this.sourceWallet.tokenUnits.length}else this.remainderWallet.balance=this.sourceWallet.balance+e,this.sourceWallet.balance=e;this.molecularHash=null,this.atoms.push(R.create.V({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:this.sourceWallet.balance,batchId:this.sourceWallet.batchId,meta:this.finalMetas(this.tokenUnitMetas(this.sourceWallet)),index:this.generateIndex()}));const s=this.remainderWallet.bundle;return this.atoms.push(R.create.V({position:this.remainderWallet.position,walletAddress:this.remainderWallet.address,token:this.sourceWallet.token,value:this.remainderWallet.balance,batchId:this.remainderWallet.batchId,metaType:s?"walletBundle":null,metaId:s,meta:this.finalMetas(this.tokenUnitMetas(this.remainderWallet),this.remainderWallet),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}initValue({recipientWallet:e,amount:t}){if(this.sourceWallet.balance-t<0)throw new ye;return this.molecularHash=null,this.atoms.push(R.create.V({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:-t,batchId:this.sourceWallet.batchId,meta:this.finalMetas(this.tokenUnitMetas(this.sourceWallet)),index:this.generateIndex()})),this.atoms.push(R.create.V({position:e.position,walletAddress:e.address,token:this.sourceWallet.token,value:t,batchId:e.batchId,metaType:"walletBundle",metaId:e.bundle,meta:this.finalMetas(this.tokenUnitMetas(e),e),index:this.generateIndex()})),this.atoms.push(R.create.V({position:this.remainderWallet.position,walletAddress:this.remainderWallet.address,token:this.sourceWallet.token,value:this.sourceWallet.balance-t,batchId:this.remainderWallet.batchId,metaType:"walletBundle",metaId:this.sourceWallet.bundle,meta:this.finalMetas(this.tokenUnitMetas(this.remainderWallet),this.remainderWallet),index:this.generateIndex()})),this.atoms=R.sortAtoms(this.atoms),this}initWalletCreation(e){this.molecularHash=null;const t={address:e.address,token:e.token,bundle:e.bundle,position:e.position,amount:0,batchId:e.batchId,pubkey:e.pubkey,characters:e.characters};return this.atoms.push(R.create.C({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,batchId:this.sourceWallet.batchId,metaType:"wallet",metaId:e.address,meta:this.finalMetas(this.contextMetas(t),e),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initTokenCreation({recipientWallet:e,amount:t,meta:s}){this.molecularHash=null;for(const t of["walletAddress","walletPosition","walletPubkey","walletCharacters"])s[t]||(s[t]=e[t.toLowerCase().substring(6)]);return this.atoms.push(R.create.C({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:t,batchId:e.batchId,metaType:"token",metaId:e.token,meta:this.finalMetas(this.contextMetas(s),this.sourceWallet),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}createRule({metaType:e,metaId:t,rule:s,policy:n={}}){const a=[];for(const e of s)a.push(e instanceof fe?e:fe.toObject(e));const i={rule:JSON.stringify(a)},r=B.policy(i,n);return this.addAtom(R.create.R({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,metaType:e,metaId:t,meta:{...i,...r},index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initShadowWalletClaim({token:e,wallet:t}){this.molecularHash=null;let s={tokenSlug:e,walletAddress:t.address,walletPosition:t.position,batchId:t.batchId};return this.atoms.push(R.create.C({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,metaType:"wallet",metaId:t.address,meta:this.finalMetas(this.contextMetas(s)),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initIdentifierCreation({type:e,contact:t,code:s}){this.molecularHash=null;const n={code:s,hash:P(t.trim())};return this.atoms.push(R.create.C({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,metaType:"identifier",metaId:e,meta:this.finalMetas(n,this.sourceWallet),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initMeta({meta:e,metaType:t,metaId:s,policy:n}){return this.molecularHash=null,this.atoms.push(R.create.M({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,batchId:this.sourceWallet.batchId,metaType:t,metaId:s,meta:this.finalMetas(e,this.sourceWallet),index:this.generateIndex()})),this.addPolicyAtom({metaType:t,metaId:s,meta:e,policy:n}),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initTokenRequest({token:e,amount:t,metaType:s,metaId:n,meta:a={},batchId:i=null}){return this.molecularHash=null,a.token=e,this.atoms.push(R.create.T({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,value:t,batchId:i,metaType:s,metaId:n,meta:this.finalMetas(a),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}initAuthorization({meta:e}){return this.molecularHash=null,this.atoms.push(R.create.U({position:this.sourceWallet.position,walletAddress:this.sourceWallet.address,token:this.sourceWallet.token,batchId:this.sourceWallet.batchId,meta:this.finalMetas(e),index:this.generateIndex()})),this.addUserRemainderAtom(this.remainderWallet),this.atoms=R.sortAtoms(this.atoms),this}clear(){return this.molecularHash=null,this.bundle=null,this.status=null,this.createdAt=String(+new Date),this.atoms=[],this}sign({anonymous:e=!1,compressed:s=!0}){if(0===this.atoms.length||0!==this.atoms.filter((e=>!(e instanceof R))).length)throw new Y;e||(this.bundle=P(this.secret)),this.molecularHash=R.hashAtoms({atoms:this.atoms});const n=this.atoms[0],a=x(G.generatePrivateKey({secret:this.secret,token:n.token,position:n.position}),128),i=me.normalizedHash(this.molecularHash);let r="";for(const e in a){let s=a[e];for(let n=0,a=8-i[e];n<a;n++)s=t.shake256.create(512).update(s).hex();r+=s}s&&(r=M(r));const l=x(r,Math.ceil(r.length/this.atoms.length));let o=null;for(let e=0,t=l.length;e<t;e++)this.atoms[e].otsFragment=l[e],o=this.atoms[e].position;return o}generateIndex(){return we.generateNextAtomIndex(this.atoms)}static jsonToObject(e){const t=Object.assign(new we({}),JSON.parse(e)),s=Object.keys(new we({}));if(!Array.isArray(t.atoms))throw new Y;for(const e in Object.keys(t.atoms)){t.atoms[e]=R.jsonToObject(JSON.stringify(t.atoms[e]));for(const s of["position","walletAddress","isotope"])if(void 0===t.atoms[e][s]||null===t.atoms[e][s])throw new Y("MolecularStructure::jsonToObject() - Required Atom properties are missing!")}for(const e in t)t.hasOwnProperty(e)&&!s.includes(e)&&delete t[e];return t.atoms=R.sortAtoms(t.atoms),t}get cellSlugDelimiter(){return"."}cellSlugBase(){return(this.cellSlug||"").split(this.cellSlugDelimiter)[0]}toJSON(){let e=U(this);for(let t of["remainderWallet","secret","sourceWallet","cellSlugOrigin"])e.hasOwnProperty(t)&&delete e[t];return e}check(e=null){return we.verify({molecule:this,sourceWallet:e})}static verify({molecule:e,sourceWallet:t=null}){return me.molecularHash(e)&&me.ots(e)&&me.index(e)&&me.batchId(e)&&me.continuId(e)&&me.isotopeM(e)&&me.isotopeT(e)&&me.isotopeC(e)&&me.isotopeU(e)&&me.isotopeI(e)&&me.isotopeR(e)&&me.isotopeV(e,t)}}class $e{static __init(e,t){this.arr=[],this.key=null,this.arr=String(t).split("."),this.key=this.arr.shift();const s=Number(this.key);Number.isInteger(s)&&(this.key=s),this.__nextKey=this.arr.length,this.__next=this.__tic(e)}static __tic(e){return!!(Array.isArray(e)||e instanceof Object)&&void 0!==e[this.key]}static has(e,t){return this.__init(e,t),!!this.__next&&(0===this.__nextKey||this.has(e[this.key],this.arr.join(".")))}static get(e,t,s=null){return this.__init(e,t),this.__next?0===this.__nextKey?e[this.key]:this.get(e[this.key],this.arr.join("."),s):s}}const Ie=10**18;class Se{static val(e){return Math.abs(e*Ie)<1?0:e}static cmp(e,t,s=!1){const n=Se.val(e)*Ie,a=Se.val(t)*Ie;return Math.abs(n-a)<1?0:n>a?1:-1}static equal(e,t){return 0===Se.cmp(e,t)}}class Ae{static create(e,t){let s=new Ae(e);return s.setWallet(t),s}static restore(e,t){let s=new G({secret:t,token:"AUTH",position:e.wallet.position,characters:e.wallet.characters});return Ae.create({token:e.token,expiresAt:e.expiresAt,pubkey:e.pubkey,encrypt:e.encrypt},s)}constructor({token:e,expiresAt:t,encrypt:s,pubkey:n}){this.$__token=e,this.$__expiresAt=t,this.$__pubkey=n,this.$__encrypt=s}setWallet(e){this.$__wallet=e}getWallet(){return this.$__wallet}getSnapshot(){return{token:this.$__token,expiresAt:this.$__expiresAt,pubkey:this.$__pubkey,encrypt:this.$__encrypt,wallet:{position:this.$__wallet.position,characters:this.$__wallet.characters}}}getToken(){return this.$__token}getPubkey(){return this.$__pubkey}getExpireInterval(){return 1e3*this.$__expiresAt-Date.now()}isExpired(){return!this.$__expiresAt||this.getExpireInterval()<0}getAuthData(){return{token:this.getToken(),pubkey:this.getPubkey(),wallet:this.getWallet()}}}class Te extends Z{constructor(e="Code exception",t=null,s=null){super(e,t,s),this.name="CodeException"}}class xe extends Z{constructor(e="GraphQL did not provide a valid response.",t=null,s=null){super(e,t,s),this.name="InvalidResponseException"}}class ve extends Z{constructor(e="Authorization token missing or invalid.",t=null,s=null){super(e,t,s),this.name="UnauthenticatedException"}}class qe{constructor({query:e,json:t,dataKey:s=null}){if(this.dataKey=s,this.errorKey="exception",this.$__payload=null,this.$__query=e,this.$__originResponse=t,this.$__response=t,void 0===this.$__response||null===this.$__response)throw new xe;if($e.has(this.$__response,this.errorKey)){const e=$e.get(this.$__response,this.errorKey);if(String(e).includes("Unauthenticated"))throw new ve;throw new xe}this.init()}init(){}data(){if(!this.dataKey)return this.response();if(!$e.has(this.response(),this.dataKey))throw new xe;return $e.get(this.response(),this.dataKey)}response(){return this.$__response}payload(){return null}query(){return this.$__query}status(){return null}}class Me{constructor(e){this.client=e,this.$__variables=null,this.$__query=null}response(){return this.$__response}async createResponseRaw(e){return this.createResponse(e)}createResponse(e){return new qe({query:this,json:e})}createQuery({variables:e=null}){if(this.$__variables=this.compiledVariables(e),!this.uri())throw new Te("Query::createQuery() - Node URI was not initialized for this client instance!");if(null===this.$__query)throw new Te("Query::createQuery() - GraphQL subscription was not initialized!");return{query:this.$__query,variables:this.variables()}}async execute({variables:e=null}){this.$__request=this.createQuery({variables:e});let t=await this.client.query(this.$__request);return this.$__response=await this.createResponseRaw(t),this.$__response}compiledVariables(e=null){return e||{}}uri(){return this.client.getUri()}variables(){return this.$__variables}}class We extends qe{constructor({query:e,json:t}){super({query:e,json:t,dataKey:"data.ContinuId"})}payload(){let e=null;const t=this.data();return t&&(e=new G({secret:null,token:t.tokenSlug}),e.address=t.address,e.position=t.position,e.bundle=t.bundleHash,e.batchId=t.batchId,e.characters=t.characters,e.pubkey=t.pubkey,e.balance=1*t.amount),e}}class Ce extends Me{constructor(e){super(e),this.$__query=h.gql`query ($bundle: String!) {
2
2
  ContinuId(bundle: $bundle) {
3
3
  address,
4
4
  bundleHash,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wishknish/knishio-client-js",
3
- "version": "0.4.42",
3
+ "version": "0.4.43",
4
4
  "productName": "Knish.IO Javascript SDK Client",
5
5
  "description": "JavaScript implementation of the Knish.IO SDK to consume Knish.IO GraphQL APIs.",
6
6
  "license": "GPL-3.0-or-later",
@@ -53,9 +53,9 @@ import RuleArgumentException from './exception/RuleArgumentException';
53
53
  export default class Callback {
54
54
  // server to execute signed molecule with given atom meta; other options: 'reject' (reject matches);
55
55
  // 'accept' (reject non-matches), 'burn' (require appropriate burning of tokens in same molecule)
56
- #action
56
+ _action
57
57
  // supporting metadata for executing callback goes here
58
- #meta = null
58
+ _meta = null
59
59
 
60
60
  /**
61
61
  *
@@ -74,7 +74,7 @@ export default class Callback {
74
74
  throw new RuleArgumentException( 'Callback structure violated, missing mandatory "action" parameter.' );
75
75
  }
76
76
 
77
- this.#action = action;
77
+ this._action = action;
78
78
  }
79
79
 
80
80
  set meta ( meta ) {
@@ -82,16 +82,16 @@ export default class Callback {
82
82
  throw new RuleArgumentException( 'Incorrect meta argument. The meta argument can only be an instance of the Meta class.' );
83
83
  }
84
84
 
85
- this.#meta = meta;
85
+ this._meta = meta;
86
86
  }
87
87
 
88
88
  toJSON () {
89
89
  const meta = {
90
- action: this.#action
90
+ action: this._action
91
91
  };
92
92
 
93
- if ( this.#meta ) {
94
- meta.meta = this.#meta;
93
+ if ( this._meta ) {
94
+ meta.meta = this._meta;
95
95
  }
96
96
 
97
97
  return meta;
@@ -48,11 +48,11 @@ License: https://github.com/WishKnish/KnishIO-Client-JS/blob/master/LICENSE
48
48
 
49
49
  export default class Meta {
50
50
 
51
- #metaType
52
- #metaId
53
- #isotope
54
- #token
55
- #amount
51
+ _metaType
52
+ _metaId
53
+ _isotope
54
+ _token
55
+ _amount
56
56
 
57
57
  /**
58
58
  *
@@ -70,21 +70,21 @@ export default class Meta {
70
70
  token,
71
71
  amount
72
72
  } ) {
73
- this.#metaType = metaType;
74
- this.#metaId = metaId;
75
- this.#isotope = isotope;
76
- this.#token = token;
77
- this.#amount = amount;
73
+ this._metaType = metaType;
74
+ this._metaId = metaId;
75
+ this._isotope = isotope;
76
+ this._token = token;
77
+ this._amount = amount;
78
78
  }
79
79
 
80
80
 
81
81
  toJSON () {
82
82
  return {
83
- metaType: this.#metaType,
84
- metaId: this.#metaId,
85
- isotope: this.#isotope,
86
- token: this.#token,
87
- amount: this.#amount
83
+ metaType: this._metaType,
84
+ metaId: this._metaId,
85
+ isotope: this._isotope,
86
+ token: this._token,
87
+ amount: this._amount
88
88
  };
89
89
  }
90
90
  }
@@ -53,12 +53,12 @@ import RuleArgumentException from './exception/RuleArgumentException';
53
53
  export default class Rule {
54
54
  // which metadata field are we targeting? (if we're dealing with a ledger object like a Wallet,
55
55
  // this could be internal fields like 'amount', etc.)
56
- #key
56
+ _key
57
57
  // what is the target value that will trigger the rule? (meta value OR token amount)
58
- #value
58
+ _value
59
59
  // same list of possible options as when querying
60
- #comparison
61
- #callback
60
+ _comparison
61
+ _callback
62
62
 
63
63
  /**
64
64
  *
@@ -87,10 +87,10 @@ export default class Rule {
87
87
  }
88
88
  }
89
89
 
90
- this.#key = key;
91
- this.#value = value;
92
- this.#comparison = comparison;
93
- this.#callback = callback;
90
+ this._key = key;
91
+ this._value = value;
92
+ this._comparison = comparison;
93
+ this._callback = callback;
94
94
  }
95
95
 
96
96
  /**
@@ -98,19 +98,19 @@ export default class Rule {
98
98
  * @param {string} comparison
99
99
  */
100
100
  set comparison ( comparison ) {
101
- this.#comparison = comparison;
101
+ this._comparison = comparison;
102
102
  }
103
103
 
104
104
  set callback ( callback ) {
105
- this.#callback.push( callback );
105
+ this._callback.push( callback );
106
106
  }
107
107
 
108
108
  toJSON () {
109
109
  return {
110
- key: this.#key,
111
- value: this.#value,
112
- comparison: this.#comparison,
113
- callback: this.#callback
110
+ key: this._key,
111
+ value: this._value,
112
+ comparison: this._comparison,
113
+ callback: this._callback
114
114
  };
115
115
  }
116
116