@wishknish/knishio-client-js 0.8.1 → 0.8.2
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.
- package/dist/client.cjs.js +4 -4
- package/dist/client.cjs.js.map +1 -1
- package/dist/client.es.mjs +37 -8
- package/dist/client.es.mjs.map +1 -1
- package/dist/client.iife.js +22 -22
- package/dist/client.iife.js.map +1 -1
- package/package.json +1 -1
- package/src/Atom.js +18 -20
- package/src/KnishIOClient.js +3 -3
- package/src/Molecule.js +42 -38
- package/src/Wallet.js +3 -3
- package/src/instance/Rules/Callback.js +1 -0
- package/src/instance/Rules/Meta.js +1 -3
- package/src/instance/Rules/Rule.js +1 -0
- package/src/libraries/strings.js +1 -0
- package/src/libraries/urql/UrqlClientWrapper.js +41 -10
- package/src/query/QueryPolicy.js +1 -1
- package/src/response/Response.js +3 -3
- package/src/response/ResponseActiveSession.js +0 -1
- package/src/response/ResponseAtom.js +0 -1
- package/src/response/ResponseAuthorizationGuest.js +0 -1
- package/src/response/ResponseBalance.js +0 -1
- package/src/response/ResponseContinuId.js +0 -1
- package/src/response/ResponseLinkIdentifier.js +0 -1
- package/src/response/ResponseMetaType.js +0 -1
- package/src/response/ResponseMetaTypeViaAtom.js +0 -1
- package/src/response/ResponseMetaTypeViaMolecule.js +0 -1
- package/src/response/ResponsePolicy.js +0 -1
- package/src/response/ResponseQueryActiveSession.js +0 -1
- package/src/response/ResponseQueryUserActivity.js +0 -1
- package/src/response/ResponseWalletBundle.js +0 -1
- package/src/response/ResponseWalletList.js +0 -1
package/dist/client.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";var hs=Object.defineProperty;var ds=(o,e,t)=>e in o?hs(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var j=(o,e,t)=>ds(o,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("jssha"),x=require("@urql/core"),ps=require("graphql-ws"),Ye=require("wonka");typeof self>"u"&&(global.self=global);class Bt{static toHex(e,t){const n=(c,u)=>{const l=u?["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 l[Math.floor(c/16)]+l[c%16]},s=Object.assign({grouping:0,rowlength:0,uppercase:!1},t||{});let r="",i=0,a=0;for(let c=0;c<e.length&&(r+=n(e[c],s.uppercase),c!==e.length-1);++c)s.grouping>0&&++i===s.grouping&&(i=0,s.rowlength>0&&++a===s.rowlength?(a=0,r+=`
|
|
2
2
|
`):r+=" ");return r}static toUint8Array(e){let t=e.toLowerCase().replace(/\s/g,"");t.length%2===1&&(t=`0${t}`);const n=new Uint8Array(Math.floor(t.length/2));let s=-1;for(let r=0;r<t.length;++r){const i=t[r],a=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"].indexOf(i);if(a===-1)throw Error("unexpected character");s===-1?s=16*a:(n[Math.floor(r/2)]=s+a,s=-1)}return n}}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,(o,e)=>e.toUpperCase())});String.prototype.toSnakeCase||(String.prototype.toSnakeCase=function(){return this.replace(/[A-Z]/g,o=>`_${o.toLowerCase()}`)});function Te(o,e){const t=Math.ceil(o.length/e),n=[];for(let s=0,r=0;s<t;++s,r+=e)n[s]=o.substr(r,e);return n}function De(o=256,e="abcdef0123456789"){let t=new Uint8Array(o);return t=crypto.getRandomValues(t),t=t.map(n=>e.charCodeAt(n%e.length)),String.fromCharCode.apply(null,t)}function Ut(o,e,t,n,s){if(n=n||"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~`!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?¿¡",s=s||n,e>n.length||t>s.length)return console.warn("Strings::charsetBaseConvert() - Can't convert",o,"to base",t,"greater than symbol table length. src-table:",n.length,"dest-table:",s.length),!1;let i=BigInt(0);for(let c=0;c<o.length;c++)i=i*BigInt(e)+BigInt(n.indexOf(o.charAt(c)));let a="";for(;i>0;){const c=i%BigInt(t);a=s.charAt(Number(c))+a,i/=BigInt(t)}return a||"0"}function Ht(o){return Bt.toHex(o,{})}function Pt(o){return Bt.toUint8Array(o)}function Kt(o){const e=Pt(o);return btoa(String.fromCharCode.apply(null,e))}function Nt(o){const e=new Uint8Array(atob(o).split("").map(t=>t.charCodeAt(0)));return Ht(e)}function Ke(o){return/^[A-F0-9]+$/i.test(o)}function Qt(o){return(typeof o=="number"||typeof o=="string"&&o.trim()!=="")&&!isNaN(o)}let de=class{static normalizeMeta(e){if(Array.isArray(e))return e.map(n=>({key:n.key,value:n.value==null?null:String(n.value)}));const t=[];for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const s=e[n];t.push({key:n,value:s==null?null:String(s)})}return t}static aggregateMeta(e){let t={};if(Array.isArray(e))for(const n of e)t[n.key]=n.value;else t=e;return t}};function Ft(o,e){return o.length?[o.slice(0,e)].concat(Ft(o.slice(e),e)):[]}function Lt(o,e){let t,n,s;const r=[Array,Date,Number,String,Boolean],i=Object.prototype.toString;for(e=e||[],t=0;t<e.length;t+=2)o===e[t]&&(n=e[t+1]);if(!n&&o&&typeof o=="object"){for(n={},t=0;t<r.length;t++)i.call(o)===i.call(s=new r[t](o))&&(n=t?s:[]);e.push(o,n);for(t in o)e.hasOwnProperty.call(o,t)&&(n[t]=Lt(o[t],e))}return n||o}function jt(...o){return[].concat(...o.map((e,t)=>{const n=o.slice(0);n.splice(t,1);const s=[...new Set([].concat(...n))];return e.filter(r=>!s.includes(r))}))}function ye(...o){return o.reduce((e,t)=>e.filter(n=>t.includes(n)))}class Ve{constructor(e={},t={}){this.policy=Ve.normalizePolicy(e),this.fillDefault(t)}static normalizePolicy(e={}){const t={};for(const[n,s]of Object.entries(e))if(s!==null&&["read","write"].includes(n)){t[n]={};for(const[r,i]of Object.entries(s))t[n][r]=i}return t}fillDefault(e={}){const t=Array.from(this.policy).filter(s=>s.action==="read"),n=Array.from(this.policy).filter(s=>s.action==="write");for(const[s,r]of Object.entries({read:t,write:n})){const i=r.map(a=>a.key);this.policy[s]||(this.policy[s]={});for(const a of jt(e,i))this.policy[s][a]||(this.policy[s][a]=s==="write"&&!["characters","pubkey"].includes(a)?["self"]:["all"])}}get(){return this.policy}toJson(){return JSON.stringify(this.get())}}class U{constructor(e=[]){this.meta=de.normalizeMeta(e)}merge(e){return this.meta=Array.from(new Set([...this.meta,...de.normalizeMeta(e)])),this}addContext(e=null){return this}setAtomWallet(e){const t={};return e.tokenUnits&&e.tokenUnits.length&&(t.tokenUnits=JSON.stringify(e.getTokenUnitsData())),e.tradeRates&&e.tradeRates.length&&(t.tradeRates=JSON.stringify(e.tradeRates)),Object.keys(t).length>0&&this.merge(t),this}setMetaWallet(e){return this.merge({walletTokenSlug:e.token,walletBundleHash:e.bundle,walletAddress:e.address,walletPosition:e.position,walletBatchId:e.batchId,walletPubkey:e.pubkey,walletCharacters:e.characters}),this}setShadowWalletClaim(e){return this.merge({shadowWalletClaim:e*1}),this}setSigningWallet(e){return this.merge({signingWallet:JSON.stringify({tokenSlug:e.token,bundleHash:e.bundle,address:e.address,position:e.position,pubkey:e.pubkey,characters:e.characters})}),this}addPolicy(e){const t=new Ve(e,Object.keys(this.meta));return this.merge({policy:t.toJson()}),this}get(){return this.meta}}class I extends TypeError{constructor(e=null,t=null,n=null){if(super(e,t,n),e===null)throw new this(`Unknown ${this.constructor.name}`);this.name="BaseException"}toString(){return`${this.name}: ${this.message}.
|
|
3
3
|
Stack:
|
|
4
|
-
${this.stack}`}}class se extends I{constructor(e="The molecule does not contain atoms",t=null,n=null){super(e,t,n),this.name="AtomsMissingException"}}class le{static create(e){const t={};for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return new this(t)}static structure(e){switch(Object.prototype.toString.call(e)){case"[object Array]":{const t=[];for(const n in e)t.push(le.isStructure(e[n])?le.structure(e[n]):e[n]);return t}case"[object Object]":{const t=[],n=Object.keys(e).sort((s,r)=>s===r?0:s<r?-1:1);for(const s of n)if(Object.prototype.hasOwnProperty.call(e,s)){const r={};r[s]=le.isStructure(e[s])?le.structure(e[s]):e[s],t.push(r)}if(t.length>0)return t;break}}return e}static isStructure(e){return["[object Object]","[object Array]"].includes(Object.prototype.toString.call(e))}view(){return le.structure(this)}}class fs extends le{constructor({position:e=null,walletAddress:t=null,isotope:n=null,token:s=null,value:r=null,batchId:i=null,metaType:a=null,metaId:c=null,meta:u=null,index:l=null,createdAt:h=null,version:p=null}){super(),this.position=e,this.walletAddress=t,this.isotope=n,this.token=s,this.value=r,this.batchId=i,this.metaType=a,this.metaId=c,this.meta=u,this.index=l,this.createdAt=h,this.version=p}}const Ne={4:fs};class g{constructor({position:e=null,walletAddress:t=null,isotope:n=null,token:s=null,value:r=null,batchId:i=null,metaType:a=null,metaId:c=null,meta:u=null,otsFragment:l=null,index:h=null,version:p=null}){this.position=e,this.walletAddress=t,this.isotope=n,this.token=s,this.value=r!==null?String(r):null,this.batchId=i,this.metaType=a,this.metaId=c,this.meta=u?de.normalizeMeta(u):[],this.index=h,this.otsFragment=l,this.createdAt=String(+new Date),p!==null&&Object.prototype.hasOwnProperty.call(Ne,p)&&(this.version=String(p))}static getHashableProps(){return["position","walletAddress","isotope","token","value","batchId","metaType","metaId","meta","createdAt"]}static getUnclaimedProps(){return["otsFragment"]}static create({isotope:e,wallet:t=null,value:n=null,metaType:s=null,metaId:r=null,meta:i=null,batchId:a=null}){return i||(i=new U),i instanceof U||(i=new U(i)),t&&(i.setAtomWallet(t),a||(a=t.batchId)),new g({position:t?t.position:null,walletAddress:t?t.address:null,isotope:e,token:t?t.token:null,value:n,batchId:a,metaType:s,metaId:r,meta:i.get()})}static jsonToObject(e){const t=Object.assign(new g({}),JSON.parse(e)),n=Object.keys(new g({}));for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&!n.includes(s)&&delete t[s];return t}toJSON(e={}){const{includeOtsFragments:t=!0,validateFields:n=!1}=e;try{if(n){const r=["position","walletAddress","isotope","token"];for(const i of r)if(!this[i])throw new Error(`Required field '${i}' is missing or empty`)}const s={position:this.position??"",walletAddress:this.walletAddress??"",isotope:this.isotope,token:this.token??"",value:this.value,batchId:this.batchId,metaType:this.metaType,metaId:this.metaId,meta:this.meta||[],index:this.index,createdAt:this.createdAt,version:this.version};return t&&this.otsFragment&&(s.otsFragment=this.otsFragment),s}catch(s){throw new Error(`Atom serialization failed: ${s.message}`)}}static fromJSON(e,t={}){const{validateStructure:n=!0,strictMode:s=!1}=t;try{const r=typeof e=="string"?JSON.parse(e):e;if(s||n){const a=["position","walletAddress","isotope","token"];for(const c of a)if(!r[c])throw new Error(`Required field '${c}' is missing or empty`)}const i=new g({position:r.position,walletAddress:r.walletAddress,isotope:r.isotope,token:r.token,value:r.value,batchId:r.batchId,metaType:r.metaType,metaId:r.metaId,meta:r.meta,index:r.index,version:r.version});return r.otsFragment&&(i.otsFragment=r.otsFragment),r.createdAt&&(i.createdAt=r.createdAt),i}catch(r){throw new Error(`Atom deserialization failed: ${r.message}`)}}static hashAtoms({atoms:e,output:t="base17"}){const n=new F("SHAKE256","TEXT"),s=g.sortAtoms(e);if(s.length===0)throw new se;if(s.map(r=>{if(!(r instanceof g))throw new se;return r}),s.every(r=>r.version&&Object.prototype.hasOwnProperty.call(Ne,r.version)))n.update(JSON.stringify(s.map(r=>Ne[r.version].create(r).view())));else{const r=String(e.length);let i=[];for(const a of s)i.push(r),i=i.concat(a.getHashableValues());for(const a of i)n.update(a)}switch(t){case"hex":return n.getHash("HEX",{outputLen:256});case"array":return n.getHash("ARRAYBUFFER",{outputLen:256});default:return Ut(n.getHash("HEX",{outputLen:256}),16,17,"0123456789abcdef","0123456789abcdefg").padStart(64,"0")}}static jsonSerialization(e,t){if(!g.getUnclaimedProps().includes(e))return t}static sortAtoms(e){const t=[...e];return t.sort((n,s)=>n.index<s.index?-1:1),t}aggregatedMeta(){return de.aggregateMeta(this.meta)}getHashableValues(){const e=[];for(const t of g.getHashableProps()){const n=this[t];if(!(n===null&&!["position","walletAddress"].includes(t)))if(t==="meta")for(const s of n)typeof s.value<"u"&&s.value!==null&&(e.push(String(s.key)),e.push(String(s.value)));else e.push(n===null?"":String(n))}return e}}function Le(o=null,e=2048){if(o){const t=new F("SHAKE256","TEXT");return t.update(o),t.getHash("HEX",{outputLen:e*4})}else return De(e)}function pe(o,e=null){const t=new F("SHAKE256","TEXT");return t.update(o),t.getHash("HEX",{outputLen:256})}function at(o,e){const t=new F("SHAKE256","TEXT");return t.update(o),t.getHash("HEX",{outputLen:e})}function ce({molecularHash:o=null,index:e=null}){return o!==null&&e!==null?pe(String(o)+String(e),"generateBatchId"):De(64)}class fe{constructor(e,t,n){this.id=e,this.name=t,this.metas=n||{}}static createFromGraphQL(e){let t=e.metas||{};return t.length&&(t=JSON.parse(t),t||(t={})),new fe(e.id,e.name,t)}static createFromDB(e){return new fe(e[0],e[1],e.length>2?e[2]:{})}getFragmentZone(){return this.metas.fragmentZone||null}getFusedTokenUnits(){return this.metas.fusedTokenUnits||null}toData(){return[this.id,this.name,this.metas]}toGraphQLResponse(){return{id:this.id,name:this.name,metas:JSON.stringify(this.metas)}}}class et extends I{constructor(e="Attempting to create a wallet with no credentials (secret or bundle hash)",t=null,n=null){super(e,t,n),this.name="WalletCredentialException"}}const Ue=BigInt(2**32-1),St=BigInt(32);function ms(o,e=!1){return e?{h:Number(o&Ue),l:Number(o>>St&Ue)}:{h:Number(o>>St&Ue)|0,l:Number(o&Ue)|0}}function ys(o,e=!1){const t=o.length;let n=new Uint32Array(t),s=new Uint32Array(t);for(let r=0;r<t;r++){const{h:i,l:a}=ms(o[r],e);[n[r],s[r]]=[i,a]}return[n,s]}const gs=(o,e,t)=>o<<t|e>>>32-t,bs=(o,e,t)=>e<<t|o>>>32-t,ws=(o,e,t)=>e<<t-32|o>>>64-t,ks=(o,e,t)=>o<<t-32|e>>>64-t;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Ss(o){return o instanceof Uint8Array||ArrayBuffer.isView(o)&&o.constructor.name==="Uint8Array"}function _t(o,e=""){if(!Number.isSafeInteger(o)||o<0){const t=e&&`"${e}" `;throw new Error(`${t}expected integer >= 0, got ${o}`)}}function z(o,e,t=""){const n=Ss(o),s=o==null?void 0:o.length,r=e!==void 0;if(!n||r&&s!==e){const i=t&&`"${t}" `,a=r?` of length ${e}`:"",c=n?`length=${s}`:`type=${typeof o}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return o}function $t(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function _s(o,e){z(o,void 0,"digestInto() output");const t=e.outputLen;if(o.length<t)throw new Error('"digestInto() output" expected to be of length >='+t)}function Dt(o){return new Uint32Array(o.buffer,o.byteOffset,Math.floor(o.byteLength/4))}function Vt(...o){for(let e=0;e<o.length;e++)o[e].fill(0)}const $s=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function As(o){return o<<24&4278190080|o<<8&16711680|o>>>8&65280|o>>>24&255}function vs(o){for(let e=0;e<o.length;e++)o[e]=As(o[e]);return o}const At=$s?o=>o:vs;function zt(o,e={}){const t=(s,r)=>o(r).update(s).digest(),n=o(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=s=>o(s),Object.assign(t,e),Object.freeze(t)}function xs(o=32){const e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof(e==null?void 0:e.getRandomValues)!="function")throw new Error("crypto.getRandomValues must be defined");return e.getRandomValues(new Uint8Array(o))}const ze=o=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,o])}),Is=BigInt(0),_e=BigInt(1),Ms=BigInt(2),Ts=BigInt(7),Cs=BigInt(256),Es=BigInt(113),Jt=[],Gt=[],Xt=[];for(let o=0,e=_e,t=1,n=0;o<24;o++){[t,n]=[n,(2*t+3*n)%5],Jt.push(2*(5*n+t)),Gt.push((o+1)*(o+2)/2%64);let s=Is;for(let r=0;r<7;r++)e=(e<<_e^(e>>Ts)*Es)%Cs,e&Ms&&(s^=_e<<(_e<<BigInt(r))-_e);Xt.push(s)}const Zt=ys(Xt,!0),Rs=Zt[0],qs=Zt[1],vt=(o,e,t)=>t>32?ws(o,e,t):gs(o,e,t),xt=(o,e,t)=>t>32?ks(o,e,t):bs(o,e,t);function Os(o,e=24){const t=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let i=0;i<10;i++)t[i]=o[i]^o[i+10]^o[i+20]^o[i+30]^o[i+40];for(let i=0;i<10;i+=2){const a=(i+8)%10,c=(i+2)%10,u=t[c],l=t[c+1],h=vt(u,l,1)^t[a],p=xt(u,l,1)^t[a+1];for(let d=0;d<50;d+=10)o[i+d]^=h,o[i+d+1]^=p}let s=o[2],r=o[3];for(let i=0;i<24;i++){const a=Gt[i],c=vt(s,r,a),u=xt(s,r,a),l=Jt[i];s=o[l],r=o[l+1],o[l]=c,o[l+1]=u}for(let i=0;i<50;i+=10){for(let a=0;a<10;a++)t[a]=o[i+a];for(let a=0;a<10;a++)o[i+a]^=~t[(a+2)%10]&t[(a+4)%10]}o[0]^=Rs[n],o[1]^=qs[n]}Vt(t)}class Je{constructor(e,t,n,s=!1,r=24){j(this,"state");j(this,"pos",0);j(this,"posOut",0);j(this,"finished",!1);j(this,"state32");j(this,"destroyed",!1);j(this,"blockLen");j(this,"suffix");j(this,"outputLen");j(this,"enableXOF",!1);j(this,"rounds");if(this.blockLen=e,this.suffix=t,this.outputLen=n,this.enableXOF=s,this.rounds=r,_t(n,"outputLen"),!(0<e&&e<200))throw new Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=Dt(this.state)}clone(){return this._cloneInto()}keccak(){At(this.state32),Os(this.state32,this.rounds),At(this.state32),this.posOut=0,this.pos=0}update(e){$t(this),z(e);const{blockLen:t,state:n}=this,s=e.length;for(let r=0;r<s;){const i=Math.min(t-this.pos,s-r);for(let a=0;a<i;a++)n[this.pos++]^=e[r++];this.pos===t&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;const{state:e,suffix:t,pos:n,blockLen:s}=this;e[n]^=t,(t&128)!==0&&n===s-1&&this.keccak(),e[s-1]^=128,this.keccak()}writeInto(e){$t(this,!1),z(e),this.finish();const t=this.state,{blockLen:n}=this;for(let s=0,r=e.length;s<r;){this.posOut>=n&&this.keccak();const i=Math.min(n-this.posOut,r-s);e.set(t.subarray(this.posOut,this.posOut+i),s),this.posOut+=i,s+=i}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return _t(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(_s(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,Vt(this.state)}_cloneInto(e){const{blockLen:t,suffix:n,outputLen:s,rounds:r,enableXOF:i}=this;return e||(e=new Je(t,n,s,i,r)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=r,e.suffix=n,e.outputLen=s,e.enableXOF=i,e.destroyed=this.destroyed,e}}const Yt=(o,e,t,n={})=>zt(()=>new Je(e,o,t),n),Ws=Yt(6,136,32,ze(8)),Bs=Yt(6,72,64,ze(10)),en=(o,e,t,n={})=>zt((s={})=>new Je(e,o,s.dkLen===void 0?t:s.dkLen,!0),n),Us=en(31,168,16,ze(11)),tn=en(31,136,32,ze(12));function bt(o){if(!Number.isSafeInteger(o)||o<0||o>4294967295)throw new Error("wrong u32 integer:"+o);return o}function nn(o){return bt(o),(o&o-1)===0&&o!==0}function sn(o,e){bt(o);let t=0;for(let n=0;n<e;n++,o>>>=1)t=t<<1|o&1;return t}function rn(o){return bt(o),31-Math.clz32(o)}function It(o){const e=o.length;if(e<2||!nn(e))throw new Error("n must be a power of 2 and greater than 1. Got "+e);const t=rn(e);for(let n=0;n<e;n++){const s=sn(n,t);if(n<s){const r=o[n];o[n]=o[s],o[s]=r}}return o}const Mt=(o,e)=>{const{N:t,roots:n,dit:s,invertButterflies:r=!1,skipStages:i=0,brp:a=!0}=e,c=rn(t);if(!nn(t))throw new Error("FFT: Polynomial size should be power of two");const u=s!==r;return l=>{if(l.length!==t)throw new Error("FFT: wrong Polynomial length");s&&a&&It(l);for(let h=0,p=1;h<c-i;h++){const d=s?h+1+i:c-h,b=1<<d,A=b>>1,R=t>>d;for(let f=0;f<t;f+=b)for(let m=0,w=p++;m<A;m++){const E=r?s?t-w:w:m*R,k=f+m,$=f+m+A,v=n[E],M=l[$],S=l[k];if(u){const P=o.mul(M,v);l[k]=o.add(S,P),l[$]=o.sub(S,P)}else r?(l[k]=o.add(M,S),l[$]=o.mul(o.sub(M,S),v)):(l[k]=o.add(S,M),l[$]=o.mul(o.sub(S,M),v))}}return!s&&a&&It(l),l}};/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */const Tt=xs;function tt(o,e){if(o.length!==e.length)return!1;let t=0;for(let n=0;n<o.length;n++)t|=o[n]^e[n];return t===0}function Hs(o){return Uint8Array.from(o)}function Qe(o,...e){const t=s=>typeof s=="number"?s:s.bytesLen,n=e.reduce((s,r)=>s+t(r),0);return{bytesLen:n,encode:s=>{const r=new Uint8Array(n);for(let i=0,a=0;i<e.length;i++){const c=e[i],u=t(c),l=typeof c=="number"?s[i]:c.encode(s[i]);z(l,u,o),r.set(l,a),typeof c!="number"&&l.fill(0),a+=u}return r},decode:s=>{z(s,n,o);const r=[];for(const i of e){const a=t(i),c=s.subarray(0,a);r.push(typeof i=="number"?c:i.decode(c)),s=s.subarray(a)}return r}}}function nt(o,e){const t=e*o.bytesLen;return{bytesLen:t,encode:n=>{if(n.length!==e)throw new Error(`vecCoder.encode: wrong length=${n.length}. Expected: ${e}`);const s=new Uint8Array(t);for(let r=0,i=0;r<n.length;r++){const a=o.encode(n[r]);s.set(a,i),a.fill(0),i+=a.length}return s},decode:n=>{z(n,t);const s=[];for(let r=0;r<n.length;r+=o.bytesLen)s.push(o.decode(n.subarray(r,r+o.bytesLen)));return s}}}function X(...o){for(const e of o)if(Array.isArray(e))for(const t of e)t.fill(0);else e.fill(0)}function Ct(o){return(1<<o)-1}/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */const Ps=o=>{const{newPoly:e,N:t,Q:n,F:s,ROOT_OF_UNITY:r,brvBits:i}=o,a=(f,m=n)=>{const w=f%m|0;return(w>=0?w|0:m+w|0)|0},c=(f,m=n)=>{const w=a(f,m)|0;return(w>m>>1?w-m|0:w)|0};function u(){const f=e(t);for(let m=0;m<t;m++){const w=sn(m,i),E=BigInt(r)**BigInt(w)%BigInt(n);f[m]=Number(E)|0}return f}const l=u(),h={add:(f,m)=>a((f|0)+(m|0))|0,sub:(f,m)=>a((f|0)-(m|0))|0,mul:(f,m)=>a((f|0)*(m|0))|0,inv:f=>{throw new Error("not implemented")}},p={N:t,roots:l,invertButterflies:!0,skipStages:1,brp:!1},d=Mt(h,{dit:!1,...p}),b=Mt(h,{dit:!0,...p});return{mod:a,smod:c,nttZetas:l,NTT:{encode:f=>d(f),decode:f=>{b(f);for(let m=0;m<f.length;m++)f[m]=a(s*f[m]);return f}},bitsCoder:(f,m)=>{const w=Ct(f),E=f*(t/8);return{bytesLen:E,encode:k=>{const $=new Uint8Array(E);for(let v=0,M=0,S=0,P=0;v<k.length;v++)for(M|=(m.encode(k[v])&w)<<S,S+=f;S>=8;S-=8,M>>=8)$[P++]=M&Ct(S);return $},decode:k=>{const $=e(t);for(let v=0,M=0,S=0,P=0;v<k.length;v++)for(M|=k[v]<<S,S+=8;S>=f;S-=f,M>>=f)$[P++]=m.decode(M&w);return $}}}}},Ks=o=>(e,t)=>{t||(t=o.blockLen);const n=new Uint8Array(e.length+2);n.set(e);const s=e.length,r=new Uint8Array(t);let i=o.create({}),a=0,c=0;return{stats:()=>({calls:a,xofs:c}),get:(u,l)=>(n[s+0]=u,n[s+1]=l,i.destroy(),i=o.create({}).update(n),a++,()=>(c++,i.xofInto(r))),clean:()=>{i.destroy(),X(r,n)}}},Ns=Ks(Us);/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */const Q=256,ue=3329,Qs=3303,Fs=17,{mod:Ce,nttZetas:Ls,NTT:re,bitsCoder:js}=Ps({N:Q,Q:ue,F:Qs,ROOT_OF_UNITY:Fs,newPoly:o=>new Uint16Array(o),brvBits:7}),Ds={768:{N:Q,Q:ue,K:3,ETA1:2,ETA2:2,du:10,dv:4,RBGstrength:192}},Vs=o=>{if(o>=12)return{encode:t=>t,decode:t=>t};const e=2**(o-1);return{encode:t=>((t<<o)+ue/2)/ue,decode:t=>t*ue+e>>>o}},$e=o=>js(o,Vs(o));function ie(o,e){for(let t=0;t<Q;t++)o[t]=Ce(o[t]+e[t])}function zs(o,e){for(let t=0;t<Q;t++)o[t]=Ce(o[t]-e[t])}function Js(o,e,t,n,s){const r=Ce(e*n*s+o*t),i=Ce(o*n+e*t);return{c0:r,c1:i}}function He(o,e){for(let t=0;t<Q/2;t++){let n=Ls[64+(t>>1)];t&1&&(n=-n);const{c0:s,c1:r}=Js(o[2*t+0],o[2*t+1],e[2*t+0],e[2*t+1],n);o[2*t+0]=s,o[2*t+1]=r}return o}function Et(o){const e=new Uint16Array(Q);for(let t=0;t<Q;){const n=o();if(n.length%3)throw new Error("SampleNTT: unaligned block");for(let s=0;t<Q&&s+3<=n.length;s+=3){const r=(n[s+0]>>0|n[s+1]<<8)&4095,i=(n[s+1]>>4|n[s+2]<<4)&4095;r<ue&&(e[t++]=r),t<Q&&i<ue&&(e[t++]=i)}}return e}function Ae(o,e,t,n){const s=o(n*Q/4,e,t),r=new Uint16Array(Q),i=Dt(s);let a=0;for(let c=0,u=0,l=0,h=0;c<i.length;c++){let p=i[c];for(let d=0;d<32;d++)l+=p&1,p>>=1,a+=1,a===n?(h=l,l=0):a===2*n&&(r[u++]=Ce(h-l),l=0,a=0)}if(a)throw new Error(`sampleCBD: leftover bits: ${a}`);return r}const Gs=o=>{const{K:e,PRF:t,XOF:n,HASH512:s,ETA1:r,ETA2:i,du:a,dv:c}=o,u=$e(1),l=$e(c),h=$e(a),p=Qe("publicKey",nt($e(12),e),32),d=nt($e(12),e),b=Qe("ciphertext",nt(h,e),l),A=Qe("seed",32,32);return{secretCoder:d,lengths:{secretKey:d.bytesLen,publicKey:p.bytesLen,cipherText:b.bytesLen},keygen:R=>{z(R,32,"seed");const f=new Uint8Array(33);f.set(R),f[32]=e;const m=s(f),[w,E]=A.decode(m),k=[],$=[];for(let S=0;S<e;S++)k.push(re.encode(Ae(t,E,S,r)));const v=n(w);for(let S=0;S<e;S++){const P=re.encode(Ae(t,E,e+S,r));for(let q=0;q<e;q++){const me=Et(v.get(q,S));ie(P,He(me,k[q]))}$.push(P)}v.clean();const M={publicKey:p.encode([$,w]),secretKey:d.encode(k)};return X(w,E,k,$,f,m),M},encrypt:(R,f,m)=>{const[w,E]=p.decode(R),k=[];for(let q=0;q<e;q++)k.push(re.encode(Ae(t,m,q,r)));const $=n(E),v=new Uint16Array(Q),M=[];for(let q=0;q<e;q++){const me=Ae(t,m,e+q,i),Ze=new Uint16Array(Q);for(let Be=0;Be<e;Be++){const us=Et($.get(q,Be));ie(Ze,He(us,k[Be]))}ie(me,re.decode(Ze)),M.push(me),ie(v,He(w[q],k[q])),X(Ze)}$.clean();const S=Ae(t,m,2*e,i);ie(S,re.decode(v));const P=u.decode(f);return ie(P,S),X(w,k,v,S),b.encode([M,P])},decrypt:(R,f)=>{const[m,w]=b.decode(R),E=d.decode(f),k=new Uint16Array(Q);for(let $=0;$<e;$++)ie(k,He(E[$],re.encode(m[$])));return zs(w,re.decode(k)),X(k,E,m),u.encode(w)}}};function Xs(o){const e=Gs(o),{HASH256:t,HASH512:n,KDF:s}=o,{secretCoder:r,lengths:i}=e,a=Qe("secretKey",i.secretKey,i.publicKey,32,32),c=32,u=64;return{info:{type:"ml-kem"},lengths:{...i,seed:64,msg:c,msgRand:c,secretKey:a.bytesLen},keygen:(l=Tt(u))=>{z(l,u,"seed");const{publicKey:h,secretKey:p}=e.keygen(l.subarray(0,32)),d=t(h),b=a.encode([p,h,d,l.subarray(32)]);return X(p,d),{publicKey:h,secretKey:b}},getPublicKey:l=>{const[h,p]=a.decode(l);return Uint8Array.from(p)},encapsulate:(l,h=Tt(c))=>{z(l,i.publicKey,"publicKey"),z(h,c,"message");const p=l.subarray(0,384*o.K),d=r.encode(r.decode(Hs(p)));if(!tt(d,p))throw X(d),new Error("ML-KEM.encapsulate: wrong publicKey modulus");X(d);const b=n.create().update(h).update(t(l)).digest(),A=e.encrypt(l,h,b.subarray(32,64));return X(b.subarray(32)),{cipherText:A,sharedSecret:b.subarray(0,32)}},decapsulate:(l,h)=>{z(h,a.bytesLen,"secretKey"),z(l,i.cipherText,"cipherText");const p=a.bytesLen-96,d=p+32,b=t(h.subarray(p/2,d));if(!tt(b,h.subarray(d,d+32)))throw new Error("invalid secretKey: hash check failed");const[A,R,f,m]=a.decode(h),w=e.decrypt(l,A),E=n.create().update(w).update(f).digest(),k=E.subarray(0,32),$=e.encrypt(R,w,E.subarray(32,64)),v=tt(l,$),M=s.create({dkLen:32}).update(m).update(l).digest();return X(w,$,v?M:k),v?k:M}}}function Zs(o,e,t){return tn.create({dkLen:o}).update(e).update(new Uint8Array([t])).digest()}const Ys={HASH256:Ws,HASH512:Bs,KDF:tn,XOF:Ns,PRF:Zs},st=Xs({...Ys,...Ds[768]});class _{constructor({secret:e=null,bundle:t=null,token:n="USER",address:s=null,position:r=null,batchId:i=null,characters:a=null}){this.token=n,this.balance="0",this.molecules={},this.key=null,this.privkey=null,this.pubkey=null,this.tokenUnits=[],this.tradeRates={},this.address=s,this.position=r,this.bundle=t,this.batchId=i,this.characters=a,e&&(this.bundle=this.bundle||pe(e,"Wallet::constructor"),this.position=this.position||_.generatePosition(),this.key=_.generateKey({secret:e,token:this.token,position:this.position}),this.address=this.address||_.generateAddress(this.key),this.characters=this.characters||"BASE64",this.initializeMLKEM())}static create({secret:e=null,bundle:t=null,token:n,batchId:s=null,characters:r=null}){let i=null;if(!e&&!t)throw new et;return e&&!t&&(i=_.generatePosition(),t=pe(e,"Wallet::create")),new _({secret:e,bundle:t,token:n,position:i,batchId:s,characters:r})}static isBundleHash(e){return typeof e!="string"?!1:e.length===64&&Ke(e)}static getTokenUnits(e){const t=[];return e.forEach(n=>{t.push(fe.createFromDB(n))}),t}static generateKey({secret:e,token:t,position:n}){if(!e)throw new et("Wallet::generateKey() - Secret is required!");if(!n)throw new et("Wallet::generateKey() - Position is required!");const s=Ke(e)?e:at(e,1024),r=Ke(n)?n:at(n,256),a=BigInt(`0x${s}`)+BigInt(`0x${r}`),c=new F("SHAKE256","TEXT");c.update(a.toString(16)),t&&c.update(t);const u=new F("SHAKE256","TEXT");return u.update(c.getHash("HEX",{outputLen:8192})),u.getHash("HEX",{outputLen:8192})}static generateAddress(e){const t=Te(e,128),n=new F("SHAKE256","TEXT");for(const r in t){let i=t[r];for(let a=1;a<=16;a++){const c=new F("SHAKE256","TEXT");c.update(i),i=c.getHash("HEX",{outputLen:512})}n.update(i)}const s=new F("SHAKE256","TEXT");return s.update(n.getHash("HEX",{outputLen:8192})),s.getHash("HEX",{outputLen:256})}static generatePosition(e=64){return De(e,"abcdef0123456789")}initializeMLKEM(){const e=Le(this.key,128),t=new Uint8Array(64);for(let r=0;r<64;r++)t[r]=parseInt(e.substr(r*2,2),16);const{publicKey:n,secretKey:s}=st.keygen(t);this.pubkey=this.serializeKey(n),this.privkey=s}serializeKey(e){return btoa(String.fromCharCode.apply(null,e))}deserializeKey(e){const t=atob(e);return new Uint8Array(t.length).map((n,s)=>t.charCodeAt(s))}balanceAsNumber(){return Number(this.balance)}balanceAsBigInt(){const e=String(this.balance),t=e.includes(".")?e.split(".")[0]:e;return BigInt(t||"0")}setBalanceBigInt(e){this.balance=e.toString()}setBalanceNumber(e){this.balance=String(e)}getTokenUnitsData(){const e=[];return this.tokenUnits.forEach(t=>{e.push(t.toData())}),e}splitUnits(e,t,n=null){if(e.length===0)return;const s=[],r=[];this.tokenUnits.forEach(i=>{e.includes(i.id)?s.push(i):r.push(i)}),this.tokenUnits=s,n!==null&&(n.tokenUnits=s),t.tokenUnits=r}createRemainder(e){const t=_.create({secret:e,token:this.token,characters:this.characters});return t.initBatchId({sourceWallet:this,isRemainder:!0}),t}isShadow(){return(typeof this.position>"u"||this.position===null)&&(typeof this.address>"u"||this.address===null)}initBatchId({sourceWallet:e,isRemainder:t=!1}){e.batchId&&(this.batchId=t?e.batchId:ce({}))}async encryptMessage(e,t){const n=JSON.stringify(e),s=new TextEncoder().encode(n),r=this.deserializeKey(t),{cipherText:i,sharedSecret:a}=st.encapsulate(r),c=await this.encryptWithSharedSecret(s,a);return{cipherText:this.serializeKey(i),encryptedMessage:this.serializeKey(c)}}async decryptMessage(e){const{cipherText:t,encryptedMessage:n}=e;let s;try{s=st.decapsulate(this.deserializeKey(t),this.privkey)}catch(c){return console.error("Wallet::decryptMessage() - Decapsulation failed",c),console.info("Wallet::decryptMessage() - my public key",this.pubkey),null}let r;try{r=this.deserializeKey(n)}catch(c){return console.warn("Wallet::decryptMessage() - Deserialization failed",c),console.info("Wallet::decryptMessage() - my public key",this.pubkey),console.info("Wallet::decryptMessage() - our shared secret",s),null}let i;try{i=await this.decryptWithSharedSecret(r,s)}catch(c){return console.warn("Wallet::decryptMessage() - Decryption failed",c),console.info("Wallet::decryptMessage() - my public key",this.pubkey),console.info("Wallet::decryptMessage() - our shared secret",s),console.info("Wallet::decryptMessage() - deserialized encrypted message",r),null}let a;try{a=new TextDecoder().decode(i)}catch(c){return console.warn("Wallet::decryptMessage() - Decoding failed",c),console.info("Wallet::decryptMessage() - my public key",this.pubkey),console.info("Wallet::decryptMessage() - our shared secret",s),console.info("Wallet::decryptMessage() - deserialized encrypted message",r),console.info("Wallet::decryptMessage() - decrypted Uint8Array",i),null}return JSON.parse(a)}async encryptWithSharedSecret(e,t){const n=crypto.getRandomValues(new Uint8Array(12)),s={name:"AES-GCM",iv:n},r=await crypto.subtle.importKey("raw",t,{name:"AES-GCM"},!1,["encrypt"]),i=await crypto.subtle.encrypt(s,r,e),a=new Uint8Array(n.length+i.byteLength);return a.set(n),a.set(new Uint8Array(i),n.length),a}async decryptWithSharedSecret(e,t){const s={name:"AES-GCM",iv:e.slice(0,12)},r=await crypto.subtle.importKey("raw",t,{name:"AES-GCM"},!1,["decrypt"]),i=await crypto.subtle.decrypt(s,r,e.slice(12));return new Uint8Array(i)}}class ge extends I{constructor(e="There is an atom without an index",t=null,n=null){super(e,t,n),this.name="AtomIndexException"}}class on extends I{constructor(e="The molecular hash does not match",t=null,n=null){super(e,t,n),this.name="MolecularHashMismatchException"}}class an extends I{constructor(e="The molecular hash is missing",t=null,n=null){super(e,t,n),this.name="MolecularHashMissingException"}}class lt extends I{constructor(e="",t=null,n=null){super(e,t,n),this.name="PolicyInvalidException"}}class wt extends I{constructor(e="OTS malformed",t=null,n=null){super(e,t,n),this.name="SignatureMalformedException"}}class ln extends I{constructor(e="One-time signature (OTS) does not match!",t=null,n=null){super(e,t,n),this.name="SignatureMismatchException"}}class G extends I{constructor(e="Insufficient balance to make transfer",t=null,n=null){super(e,t,n),this.name="TransferBalanceException"}}class be extends I{constructor(e="Token transfer atoms are malformed",t=null,n=null){super(e,t,n),this.name="TransferMalformedException"}}class ct extends I{constructor(e="Token slugs for wallets in transfer do not match!",t=null,n=null){super(e,t,n),this.name="TransferMismatchedException"}}class ut extends I{constructor(e="Invalid remainder provided",t=null,n=null){super(e,t,n),this.name="TransferRemainderException"}}class cn extends I{constructor(e="Sender and recipient(s) cannot be the same",t=null,n=null){super(e,t,n),this.name="TransferToSelfException"}}class ve extends I{constructor(e="Token transfer atoms are unbalanced",t=null,n=null){super(e,t,n),this.name="TransferUnbalancedException"}}class B extends I{constructor(e="Empty meta data.",t=null,n=null){super(e,t,n),this.name="MetaMissingException"}}class ne extends I{constructor(e="Wrong type of token for this isotope",t=null,n=null){super(e,t,n),this.name="WrongTokenTypeException"}}class Ie extends I{constructor(e="Incorrect BatchId",t=null,n=null){super(e,t,n),this.name="BatchIdException"}}class Rt{constructor({}){const e=arguments[0];for(const t in e)this[`__${t}`]=e[t]}static toObject(e){return new this(e)}toJSON(){const e={};for(const t of Object.keys(this))t.substring(0,2)==="__"&&(e[t.substring(2,t.length)]=this[t]);return e}}class je extends I{constructor(e="An incorrect argument!",t=null,n=null){super(e,t,n),this.name="RuleArgumentException"}}class ee extends I{constructor(e="Code exception",t=null,n=null){super(e,t,n),this.name="CodeException"}}class Me{constructor({action:e,metaType:t=null,metaId:n=null,meta:s=null,address:r=null,token:i=null,amount:a=null,comparison:c=null}){if(s&&(this.meta=s),!e)throw new je('Callback structure violated, missing mandatory "action" parameter.');this.__metaId=n,this.__metaType=t,this.__action=e,this.__address=r,this.__token=i,this.__amount=a,this.__comparison=c}set comparison(e){this.__comparison=e}set amount(e){if(!Qt(e))throw new ee("Parameter amount should be a string containing numbers");this.__amount=e}set token(e){this.__token=e}set address(e){this.__address=e}set meta(e){this.__meta=e instanceof Rt?e:Rt.toObject(e)}set metaType(e){this.__metaType=e}set metaId(e){this.__metaId=e}static toObject(e){const t=new Me({action:e.action});return e.metaType&&(t.metaType=e.metaType),e.metaId&&(t.metaId=e.metaId),e.meta&&(t.meta=e.meta),e.address&&(t.address=e.address),e.token&&(t.token=e.token),e.amount&&(t.amount=e.amount),e.comparison&&(t.comparison=e.comparison),t}toJSON(){const e={action:this.__action};return this.__metaType&&(e.metaType=this.__metaType),this.__metaId&&(e.metaId=this.__metaId),this.__meta&&(e.meta=this.__meta),this.__address&&(e.address=this.__address),this.__token&&(e.token=this.__token),this.__amount&&(e.amount=this.__amount),this.__comparison&&(e.comparison=this.__comparison),e}isReject(){return this._is("reject")}isMeta(){return ye(Object.keys(this.toJSON()),["action","metaId","metaType","meta"]).length===4&&this._is("meta")}isCollect(){return ye(Object.keys(this.toJSON()),["action","address","token","amount","comparison"]).length===5&&this._is("collect")}isBuffer(){return ye(Object.keys(this.toJSON()),["action","address","token","amount","comparison"]).length===5&&this._is("buffer")}isRemit(){return ye(Object.keys(this.toJSON()),["action","token","amount"]).length===3&&this._is("remit")}isBurn(){return ye(Object.keys(this.toJSON()),["action","token","amount","comparison"]).length===4&&this._is("burn")}_is(e){return this.__action.toLowerCase()===e.toLowerCase()}}class rt{constructor({key:e,value:t,comparison:n}){if([e,t,n].some(s=>!s))throw new je("Condition::constructor( { key, value, comparison } ) - not all class parameters are initialised!");this.__key=e,this.__value=t,this.__comparison=n}static toObject(e){return new this({key:e.key,value:e.value,comparison:e.comparison})}toJSON(){return{key:this.__key,value:this.__value,comparison:this.__comparison}}}class Ee{constructor({condition:e=[],callback:t=[]}){for(const n of e)if(!(n instanceof rt))throw new je;for(const n of t)if(!(n instanceof Me))throw new je;this.__condition=e,this.__callback=t}set comparison(e){this.__condition.push(e instanceof rt?e:rt.toObject(e))}set callback(e){this.__callback.push(e instanceof Me?e:Me.toObject(e))}static toObject(e){if(!e.condition)throw new B("Rule::toObject() - Incorrect rule format! There is no condition field.");if(!e.callback)throw new B("Rule::toObject() - Incorrect rule format! There is no callback field.");const t=new Ee({});for(const n of e.condition)t.comparison=n;for(const n of e.callback)t.callback=n;return t}toJSON(){return{condition:this.__condition,callback:this.__callback}}}class T{static __init(e,t){this.arr=String(t).split("."),this.key=this.arr.shift();const n=Number(this.key);Number.isInteger(n)&&(this.key=n),this.__nextKey=this.arr.length,this.__next=this.__tic(e)}static __tic(e){return!Array.isArray(e)&&!(e instanceof Object)?!1:typeof e[this.key]<"u"}static has(e,t){return this.__init(e,t),this.__next?this.__nextKey===0?!0:this.has(e[this.key],this.arr.join(".")):!1}static get(e,t,n=null){return this.__init(e,t),this.__next?this.__nextKey===0?e[this.key]:this.get(e[this.key],this.arr.join("."),n):n}static set(e,t,n){const s=t.split(".");let r=e;const i=s.length-1;for(let u=0;u<i;u++){const l=s[u],h=Number(l),p=Number.isInteger(h);(p?h:l in r)||(r[p?h:l]=s[u+1].match(/^\d+$/)?[]:{}),r=r[p?h:l]}const a=s[i],c=Number(a);return r[Number.isInteger(c)?c:a]=n,e}}class we{constructor(e){if(e.molecularHash===null)throw new an;if(!e.atoms.length)throw new se;for(const t of e.atoms)if(t.index===null)throw new ge;this.molecule=e}verify(e){return this.molecularHash()&&this.ots()&&this.batchId()&&this.continuId()&&this.isotopeM()&&this.isotopeT()&&this.isotopeC()&&this.isotopeU()&&this.isotopeI()&&this.isotopeR()&&this.isotopeP()&&this.isotopeA()&&this.isotopeB()&&this.isotopeF()&&this.isotopeV(e)}continuId(){if(this.molecule.atoms[0].token==="USER"&&this.molecule.getIsotopes("I").length<1)throw new se("Check::continuId() - Molecule is missing required ContinuID Atom!");return!0}batchId(){if(this.molecule.atoms.length>0){const e=this.molecule.atoms[0];if(e.isotope==="V"&&e.batchId!==null){const t=this.molecule.getIsotopes("V"),n=t[t.length-1];if(e.batchId!==n.batchId)throw new Ie;for(const s of t)if(s.batchId===null)throw new Ie}return!0}throw new Ie}isotopeI(){for(const e of this.molecule.getIsotopes("I")){if(e.token!=="USER")throw new ne(`Check::isotopeI() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(e.index===0)throw new ge(`Check::isotopeI() - Isotope "${e.isotope}" Atoms must have a non-zero index!`)}return!0}isotopeU(){for(const e of this.molecule.getIsotopes("U")){if(e.token!=="AUTH")throw new ne(`Check::isotopeU() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(e.index!==0)throw new ge(`Check::isotopeU() - Isotope "${e.isotope}" Atoms must have an index equal to 0!`)}return!0}isotopeM(){const e=["readPolicy","writePolicy"];for(const t of this.molecule.getIsotopes("M")){if(t.meta.length<1)throw new B;if(t.token!=="USER")throw new ne(`Check::isotopeM() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);const n=de.aggregateMeta(t.meta);for(const s of e){let r=n[s];if(r){r=JSON.parse(r);for(const[i,a]of Object.entries(r))if(!e.includes(i)){if(!Object.keys(n).includes(i))throw new lt(`${i} is missing from the meta.`);for(const c of a)if(!_.isBundleHash(c)&&!["all","self"].includes(c))throw new lt(`${c} does not correspond to the format of the policy.`)}}}}return!0}isotopeC(){for(const e of this.molecule.getIsotopes("C")){if(e.token!=="USER")throw new ne(`Check::isotopeC() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(e.index!==0)throw new ge(`Check::isotopeC() - Isotope "${e.isotope}" Atoms must have an index equal to 0!`)}return!0}isotopeT(){for(const e of this.molecule.getIsotopes("T")){const t=e.aggregatedMeta();if(String(e.metaType).toLowerCase()==="wallet"){for(const s of["position","bundle"])if(!Object.prototype.hasOwnProperty.call(t,s)||!t[s])throw new B(`Check::isotopeT() - Required meta field "${s}" is missing!`)}for(const s of["token"])if(!Object.prototype.hasOwnProperty.call(t,s)||!t[s])throw new B(`Check::isotopeT() - Required meta field "${s}" is missing!`);if(e.token!=="USER")throw new ne(`Check::isotopeT() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(e.index!==0)throw new ge(`Check::isotopeT() - Isotope "${e.isotope}" Atoms must have an index equal to 0!`)}return!0}isotopeR(){for(const e of this.molecule.getIsotopes("R")){const t=e.aggregatedMeta();if(t.policy){const n=JSON.parse(t.policy);if(!Object.keys(n).every(s=>["read","write"].includes(s)))throw new B("Check::isotopeR() - Mixing rules with politics!")}if(t.rule){const n=JSON.parse(t.rule);if(!Array.isArray(n))throw new B("Check::isotopeR() - Incorrect rule format!");for(const s of n)Ee.toObject(s);if(n.length<1)throw new B("Check::isotopeR() - No rules!")}}return!0}isotopeP(){for(const e of this.molecule.getIsotopes("P")){if(e.token!=="USER")throw new ne(`Check::isotopeP() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);const t=e.aggregatedMeta();if(!Object.prototype.hasOwnProperty.call(t,"peerHost")||!t.peerHost)throw new B('Check::isotopeP() - Required meta field "peerHost" is missing!')}return!0}isotopeA(){for(const e of this.molecule.getIsotopes("A")){if(e.token!=="USER")throw new ne(`Check::isotopeA() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(!e.metaType)throw new B('Check::isotopeA() - Required field "metaType" is missing!');if(!e.metaId)throw new B('Check::isotopeA() - Required field "metaId" is missing!');const t=e.aggregatedMeta();if(!Object.prototype.hasOwnProperty.call(t,"action")||!t.action)throw new B('Check::isotopeA() - Required meta field "action" is missing!')}return!0}isotopeB(){const e=this.molecule.getIsotopes("B");if(e.length===0)return!0;for(const n of e){if(!n.metaType||n.metaType!=="walletBundle")throw new B('Check::isotopeB() - B-isotope atoms must have metaType "walletBundle"!');if(!n.metaId)throw new B("Check::isotopeB() - B-isotope atoms must have a metaId!");const s=Number(n.value);if(Number.isNaN(s))throw new be("Check::isotopeB() - B-isotope atom value is not a valid number!")}const t=this.molecule.getIsotopes("V");if(t.length>0){let n=0;for(const s of[...t,...e]){const r=Number(s.value);Number.isNaN(r)||(n+=r)}if(n!==0)throw new ve("Check::isotopeB() - V+B atom values do not balance to zero!")}return!0}isotopeF(){const e=this.molecule.getIsotopes("F");if(e.length===0)return!0;for(const n of e){if(!n.metaType||n.metaType!=="walletBundle")throw new B('Check::isotopeF() - F-isotope atoms must have metaType "walletBundle"!');if(!n.metaId)throw new B("Check::isotopeF() - F-isotope atoms must have a metaId!");const s=Number(n.value);if(Number.isNaN(s))throw new be("Check::isotopeF() - F-isotope atom value is not a valid number!");if(s<0)throw new be("Check::isotopeF() - F-isotope atom value must not be negative!")}const t=this.molecule.getIsotopes("V");if(t.length>0){let n=0;for(const s of[...t,...e]){const r=Number(s.value);Number.isNaN(r)||(n+=r)}if(n!==0)throw new ve("Check::isotopeF() - V+F atom values do not balance to zero!")}return!0}isotopeV(e=null){const t=this.molecule.getIsotopes("V");if(t.length===0)return!0;const n=this.molecule.getIsotopes("B").length>0||this.molecule.getIsotopes("F").length>0,s=this.molecule.atoms[0];if(!n&&s.isotope==="V"&&t.length===2){const a=t[t.length-1];if(s.token!==a.token)throw new ct;if(a.value<0)throw new be;if(Number(s.value)+Number(a.value)!==0)throw new ve;return!0}let r=0,i=0;for(const a in this.molecule.atoms)if(Object.prototype.hasOwnProperty.call(this.molecule.atoms,a)){const c=this.molecule.atoms[a];if(c.isotope!=="V")continue;if(i=c.value*1,Number.isNaN(i))throw new TypeError('Invalid isotope "V" values');if(c.token!==s.token)throw new ct;if(a>0){if(i<0)throw new be;if(c.walletAddress===s.walletAddress)throw new cn}r+=i}if(!n&&r!==0)throw new ve;if(e){if(i=s.value*1,Number.isNaN(i))throw new TypeError('Invalid isotope "V" values');const a=Number(e.balance)+i;if(a<0)throw new G;if(!n&&a!==r)throw new ut}else if(i!==0)throw new ut;return!0}molecularHash(){if(this.molecule.molecularHash!==g.hashAtoms({atoms:this.molecule.atoms}))throw new on;return!0}ots(){const e=this.molecule.normalizedHash();let t=this.molecule.atoms.map(p=>p.otsFragment).reduce((p,d)=>p+d);if(t.length!==2048&&(t=Nt(t),t.length!==2048))throw new wt;const n=Te(t,128);let s="";for(const p in n){let d=n[p];for(let b=0,A=8+e[p];b<A;b++)d=new F("SHAKE256","TEXT").update(d).getHash("HEX",{outputLen:512});s+=d}const r=new F("SHAKE256","TEXT");r.update(s);const i=r.getHash("HEX",{outputLen:8192}),a=new F("SHAKE256","TEXT");a.update(i);const c=a.getHash("HEX",{outputLen:256}),u=this.molecule.atoms[0];let l=u.walletAddress;const h=T.get(u.aggregatedMeta(),"signingWallet");if(h&&(l=T.get(JSON.parse(h),"address")),c!==l)throw new ln;return!0}static fromServerData({molecularHash:e,bundleHash:t,cellSlug:n=null,status:s=null,createdAt:r=null,atoms:i=[]}){const a=i.map(c=>{let u=[];if(c.metasJson)try{const l=JSON.parse(c.metasJson);Array.isArray(l)?u=l:l&&typeof l=="object"&&(u=Object.entries(l).map(([h,p])=>({key:h,value:p})))}catch{u=[]}return{position:c.position||null,walletAddress:c.walletAddress||null,isotope:c.isotope||null,token:c.tokenSlug||c.token||null,value:c.value!=null?String(c.value):null,batchId:c.batchId||null,metaType:c.metaType||null,metaId:c.metaId||null,meta:u,index:c.index!=null?c.index:null,otsFragment:c.otsFragment||null,createdAt:c.createdAt||null}});return V.fromJSON({molecularHash:e,bundle:t,cellSlug:n,status:s,createdAt:r,atoms:a})}static verifyFromServerData(e){try{const t=we.fromServerData(e);return new we(t).verify(),{molecularHash:e.molecularHash,verified:!0,error:null}}catch(t){return{molecularHash:e.molecularHash||null,verified:!1,error:t.message||String(t)}}}}class ae extends I{constructor(e="Insufficient balance for requested transfer",t=null,n=null){super(e,t,n),this.name="BalanceInsufficientException"}}class Fe extends I{constructor(e="Amount cannot be negative!",t=null,n=null){super(e,t,n),this.name="NegativeAmountException"}}class V{constructor({secret:e=null,bundle:t=null,sourceWallet:n=null,remainderWallet:s=null,cellSlug:r=null,version:i=null,continuIdPosition:a=null}){this.status=null,this.molecularHash=null,this.createdAt=String(+new Date),this.cellSlugOrigin=this.cellSlug=r,this.secret=e,this.bundle=t,this.sourceWallet=n,this.continuIdPosition=a,this.atoms=[],this.parentHashes=[],i!==null&&Object.prototype.hasOwnProperty.call(Ne,i)&&(this.version=String(i)),(s||n)&&(this.remainderWallet=s||_.create({secret:e,bundle:t,token:n.token,batchId:n.batchId,characters:n.characters}))}withParentHashes(e){return this.parentHashes=Array.isArray(e)?[...e]:[],this}get cellSlugDelimiter(){return"."}static isotopeFilter(e,t){return Array.isArray(e)||(e=[e]),t.filter(n=>e.includes(n.isotope))}static generateNextAtomIndex(e){return e.length}static jsonToObject(e){const t=Object.assign(new V({}),JSON.parse(e)),n=Object.keys(new V({}));if(!Array.isArray(t.atoms))throw new se;for(const s in Object.keys(t.atoms)){t.atoms[s]=g.jsonToObject(JSON.stringify(t.atoms[s]));for(const r of["position","walletAddress","isotope"])if(t.atoms[s].isotope.toLowerCase()!=="r"&&(typeof t.atoms[s][r]>"u"||t.atoms[s][r]===null))throw new se("MolecularStructure::jsonToObject() - Required Atom properties are missing!")}for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&!n.includes(s)&&delete t[s];return t.atoms=g.sortAtoms(t.atoms),t}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},n=[],s=e.toLowerCase().split("");for(let r=0,i=s.length;r<i;++r){const a=s[r];typeof t[a]<"u"&&(n[r]=t[a])}return n}static normalize(e){let t=e.reduce((s,r)=>s+r);const n=t<0;for(;t<0||t>0;)for(const s of Object.keys(e))if((n?e[s]<8:e[s]>-8)&&(n?(++e[s],++t):(--e[s],--t),t===0))break;return e}getIsotopes(e){return V.isotopeFilter(e,this.atoms)}generateIndex(){return V.generateNextAtomIndex(this.atoms)}fill(e){for(const t in Object.keys(e))this[t]=e[t]}addAtom(e){return this.molecularHash=null,e.index=this.generateIndex(),e.version=this.version,this.atoms.push(e),this.atoms=g.sortAtoms(this.atoms),this}addContinuIdAtom(){(!this.remainderWallet||this.remainderWallet.token!=="USER")&&(this.remainderWallet=_.create({secret:this.secret,bundle:this.bundle}));const e={};return this.continuIdPosition?e.previousPosition=this.continuIdPosition:this.sourceWallet&&this.sourceWallet.position&&(e.previousPosition=this.sourceWallet.position),this.remainderWallet.pubkey&&(e.pubkey=this.remainderWallet.pubkey),this.remainderWallet.characters&&(e.characters=this.remainderWallet.characters),this.addAtom(g.create({isotope:"I",wallet:this.remainderWallet,metaType:"walletBundle",metaId:this.remainderWallet.bundle,meta:new U(e)})),this}addPolicyAtom({metaType:e,metaId:t,meta:n={},policy:s={}}){const r=new U(n);return r.addPolicy(s),this.addAtom(g.create({wallet:this.sourceWallet,isotope:"R",metaType:e,metaId:t,meta:r})),this}fuseToken(e,t){const n=e.length;if(this.sourceWallet.balance-n<0)throw new ae;return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-n})),this.addAtom(g.create({isotope:"F",wallet:t,value:1,metaType:"walletBundle",metaId:t.bundle})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-n,metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}burnToken({amount:e,walletBundle:t=null}){if(e<0)throw new Fe("Molecule::burnToken() - Amount to burn must be positive!");if(this.sourceWallet.balance-e<0)throw new ae;const n=new _({bundle:"0000000000000000000000000000000000000000000000000000000000000000",token:this.sourceWallet.token});return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-this.sourceWallet.balance})),this.addAtom(g.create({isotope:"V",wallet:n,value:e,metaType:"walletBundle",metaId:n.bundle})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-e,metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}replenishToken({amount:e,units:t=[]}){if(e<0)throw new Fe("Molecule::replenishToken() - Amount to replenish must be positive!");if(t.length){t=_.getTokenUnits(t),this.remainderWallet.tokenUnits=this.sourceWallet.tokenUnits;for(const n of t)this.remainderWallet.tokenUnits.push(n);this.remainderWallet.balance=String(this.remainderWallet.tokenUnits.length),this.sourceWallet.tokenUnits=t,this.sourceWallet.balance=String(this.sourceWallet.tokenUnits.length)}else this.remainderWallet.balance=String(Number(this.sourceWallet.balance)+e),this.sourceWallet.balance=String(e);return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:Number(this.sourceWallet.balance)})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:Number(this.remainderWallet.balance),metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}initValue({recipientWallet:e,amount:t}){if(this.sourceWallet.balance-t<0)throw new ae;return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-this.sourceWallet.balance})),this.addAtom(g.create({isotope:"V",wallet:e,value:t,metaType:"walletBundle",metaId:e.bundle})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-t,metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}addStackableTransfer({recipientWallet:e,amount:t}){if(t<=0)throw new Fe("Molecule::addStackableTransfer() - Amount must be positive!");if(this.sourceWallet.balance-t<0)throw new ae;const n=this.sourceWallet.batchId||ce({});return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-t,batchId:n})),this.addAtom(g.create({isotope:"V",wallet:e,value:t,metaType:"walletBundle",metaId:e.bundle,batchId:ce({})})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-t,metaType:"walletBundle",metaId:this.remainderWallet.bundle,batchId:n})),this}initDepositBuffer({amount:e,tradeRates:t}){if(this.sourceWallet.balance-e<0)throw new ae;const n=_.create({secret:this.secret,bundle:this.bundle,token:this.sourceWallet.token,batchId:this.sourceWallet.batchId});return n.tradeRates=t,this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-this.sourceWallet.balance})),this.addAtom(g.create({isotope:"B",wallet:n,value:e,metaType:"walletBundle",metaId:this.sourceWallet.bundle})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-e,metaType:"walletBundle",metaId:this.sourceWallet.bundle})),this}initWithdrawBuffer({recipients:e,signingWallet:t=null}){let n=0;for(const[r,i]of Object.entries(e||{}))n+=i;if(this.sourceWallet.balance-n<0)throw new ae;const s=new U;t&&s.setSigningWallet(t),this.addAtom(g.create({isotope:"B",wallet:this.sourceWallet,value:-this.sourceWallet.balance,meta:s,metaType:"walletBundle",metaId:this.sourceWallet.bundle}));for(const[r,i]of Object.entries(e||{}))this.addAtom(new g({isotope:"V",token:this.sourceWallet.token,value:i,batchId:this.sourceWallet.batchId?ce({}):null,metaType:"walletBundle",metaId:r}));return this.addAtom(g.create({isotope:"B",wallet:this.remainderWallet,value:this.sourceWallet.balance-n,metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}initTokenCreation({recipientWallet:e,amount:t,meta:n}){const s=new U(n);return s.setMetaWallet(e),this.addAtom(g.create({isotope:"C",wallet:this.sourceWallet,value:t,metaType:"token",metaId:e.token,meta:s,batchId:e.batchId})),this.addContinuIdAtom(),this}createRule({metaType:e,metaId:t,rule:n,policy:s={}}){const r=[];for(const a of n)r.push(a instanceof Ee?a:Ee.toObject(a));const i=new U({rule:JSON.stringify(r)});return i.addPolicy(s),this.addAtom(g.create({isotope:"R",wallet:this.sourceWallet,metaType:e,metaId:t,meta:i})),this.addContinuIdAtom(),this}initWalletCreation(e,t=null){t||(t=new U),t.setMetaWallet(e);const n=g.create({isotope:"C",wallet:this.sourceWallet,metaType:"wallet",metaId:e.address,meta:t,batchId:e.batchId});return this.addAtom(n),this.addContinuIdAtom(),this}initShadowWalletClaim(e){const t=new U().setShadowWalletClaim(!0);return this.initWalletCreation(e,t)}initIdentifierCreation({type:e,contact:t,code:n}){const s={code:n,hash:pe(t.trim(),"Molecule::initIdentifierCreation")};return this.addAtom(g.create({isotope:"C",wallet:this.sourceWallet,metaType:"identifier",metaId:e,meta:new U(s)})),this.addContinuIdAtom(),this}initMeta({meta:e,metaType:t,metaId:n,policy:s}){return this.addAtom(g.create({isotope:"M",wallet:this.sourceWallet,metaType:t,metaId:n,meta:new U(e)})),s&&Object.keys(s).length>0&&this.addPolicyAtom({metaType:t,metaId:n,meta:e,policy:s}),this.addContinuIdAtom(),this}initPeering({host:e}){return this.addAtom(g.create({isotope:"P",wallet:this.sourceWallet,metaType:"walletBundle",metaId:this.bundle,meta:new U({peerHost:e})})),this.addContinuIdAtom(),this}initAppendRequest({metaType:e,metaId:t,action:n,meta:s={}}){return this.addAtom(g.create({isotope:"A",wallet:this.sourceWallet,metaType:e,metaId:t,meta:new U({action:n,...s})})),this.addContinuIdAtom(),this}initTokenRequest({token:e,amount:t,metaType:n,metaId:s,meta:r={},batchId:i=null}){return r.token=e,r.amount=String(t),this.addAtom(g.create({isotope:"T",wallet:this.sourceWallet,value:t,metaType:n,metaId:s,meta:new U(r),batchId:i})),this.addContinuIdAtom(),this}initAuthorization({meta:e}){return this.addAtom(g.create({isotope:"U",wallet:this.sourceWallet,meta:new U(e)})),this.addContinuIdAtom(),this}sign({bundle:e=null,anonymous:t=!1,compressed:n=!0}){if(this.atoms.length===0||this.atoms.filter(d=>!(d instanceof g)).length!==0)throw new se;!t&&!this.bundle&&(this.bundle=e||pe(this.secret,"Molecule::sign")),this.molecularHash=g.hashAtoms({atoms:this.atoms});const s=this.atoms[0];let r=s.position;const i=T.get(s.aggregatedMeta(),"signingWallet");if(i&&(r=T.get(JSON.parse(i),"position")),!r)throw new wt("Signing wallet must have a position!");const a=_.generateKey({secret:this.secret,token:s.token,position:s.position}),c=Te(a,128),u=this.normalizedHash();let l="";for(const d in c){let b=c[d];for(let A=0,R=8-u[d];A<R;A++)b=new F("SHAKE256","TEXT").update(b).getHash("HEX",{outputLen:512});l+=b}n&&(l=Kt(l));const h=Te(l,Math.ceil(l.length/this.atoms.length));let p=null;for(let d=0,b=h.length;d<b;d++)this.atoms[d].otsFragment=h[d],p=this.atoms[d].position;return p}signSync(e={}){return this.sign(e)}cellSlugBase(){return(this.cellSlug||"").split(this.cellSlugDelimiter)[0]}toJSON(e={}){const{includeValidationContext:t=!1,includeOtsFragments:n=!0}=e;try{const s={status:this.status,molecularHash:this.molecularHash,createdAt:this.createdAt,cellSlug:this.cellSlug,bundle:this.bundle,atoms:this.atoms.map(r=>r.toJSON({includeOtsFragments:n}))};return this.parentHashes&&this.parentHashes.length>0&&(s.parentHashes=this.parentHashes),t&&(s.cellSlugOrigin=this.cellSlugOrigin,s.version=this.version,this.sourceWallet&&(s.sourceWallet={address:this.sourceWallet.address,position:this.sourceWallet.position,token:this.sourceWallet.token,balance:this.sourceWallet.balance||"0",bundle:this.sourceWallet.bundle,batchId:this.sourceWallet.batchId||null,characters:this.sourceWallet.characters||"BASE64",pubkey:this.sourceWallet.pubkey||null,tokenUnits:this.sourceWallet.tokenUnits||[],tradeRates:this.sourceWallet.tradeRates||{},molecules:this.sourceWallet.molecules||{}}),this.remainderWallet&&(s.remainderWallet={address:this.remainderWallet.address,position:this.remainderWallet.position,token:this.remainderWallet.token,balance:this.remainderWallet.balance||"0",bundle:this.remainderWallet.bundle,batchId:this.remainderWallet.batchId||null,characters:this.remainderWallet.characters||"BASE64",pubkey:this.remainderWallet.pubkey||null,tokenUnits:this.remainderWallet.tokenUnits||[],tradeRates:this.remainderWallet.tradeRates||{},molecules:this.remainderWallet.molecules||{}})),s}catch(s){throw new Error(`Molecule serialization failed: ${s.message}`)}}static fromJSON(e,t={}){const{includeValidationContext:n=!1,validateStructure:s=!0}=t;try{const r=typeof e=="string"?JSON.parse(e):e;if(s&&(!r.molecularHash||!Array.isArray(r.atoms)))throw new Error("Invalid molecule data: missing molecularHash or atoms array");const i=new V({secret:null,bundle:r.bundle||null,cellSlug:r.cellSlug||null,version:r.version||null});return i.status=r.status,i.molecularHash=r.molecularHash,i.createdAt=r.createdAt||String(+new Date),i.cellSlugOrigin=r.cellSlugOrigin,i.parentHashes=Array.isArray(r.parentHashes)?[...r.parentHashes]:[],Array.isArray(r.atoms)&&(i.atoms=r.atoms.map((a,c)=>{try{return g.fromJSON(a)}catch(u){throw new Error(`Failed to reconstruct atom ${c}: ${u.message}`)}})),n&&(r.sourceWallet&&(i.sourceWallet=new _({secret:null,token:r.sourceWallet.token,position:r.sourceWallet.position,bundle:r.sourceWallet.bundle,batchId:r.sourceWallet.batchId,characters:r.sourceWallet.characters}),i.sourceWallet.balance=String(r.sourceWallet.balance!=null?r.sourceWallet.balance:0),i.sourceWallet.address=r.sourceWallet.address,r.sourceWallet.pubkey&&(i.sourceWallet.pubkey=r.sourceWallet.pubkey),i.sourceWallet.tokenUnits=r.sourceWallet.tokenUnits||[],i.sourceWallet.tradeRates=r.sourceWallet.tradeRates||{},i.sourceWallet.molecules=r.sourceWallet.molecules||{}),r.remainderWallet&&(i.remainderWallet=new _({secret:null,token:r.remainderWallet.token,position:r.remainderWallet.position,bundle:r.remainderWallet.bundle,batchId:r.remainderWallet.batchId,characters:r.remainderWallet.characters}),i.remainderWallet.balance=String(r.remainderWallet.balance!=null?r.remainderWallet.balance:0),i.remainderWallet.address=r.remainderWallet.address,r.remainderWallet.pubkey&&(i.remainderWallet.pubkey=r.remainderWallet.pubkey),i.remainderWallet.tokenUnits=r.remainderWallet.tokenUnits||[],i.remainderWallet.tradeRates=r.remainderWallet.tradeRates||{},i.remainderWallet.molecules=r.remainderWallet.molecules||{})),i}catch(r){throw new Error(`Molecule deserialization failed: ${r.message}`)}}check(e=null){return new we(this).verify(e)}normalizedHash(){return V.normalize(V.enumerate(this.molecularHash))}}class ke{constructor({token:e,expiresAt:t,encrypt:n,pubkey:s}){this.$__token=e,this.$__expiresAt=t,this.$__pubkey=s,this.$__encrypt=n}static create(e,t){const n=new ke(e);return n.setWallet(t),n}static restore(e,t){const n=new _({secret:t,token:"AUTH",position:e.wallet.position,characters:e.wallet.characters});return ke.create({token:e.token,expiresAt:e.expiresAt,pubkey:e.pubkey,encrypt:e.encrypt},n)}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 this.$__expiresAt*1e3-Date.now()}isExpired(){return!this.$__expiresAt||this.getExpireInterval()<0}getAuthData(){return{token:this.getToken(),pubkey:this.getPubkey(),wallet:this.getWallet()}}}const it=10**18;class he{static val(e){return Math.abs(e*it)<1?0:e}static cmp(e,t,n=!1){const s=he.val(e)*it,r=he.val(t)*it;return Math.abs(s-r)<1?0:s>r?1:-1}static equal(e,t){return he.cmp(e,t)===0}}class te extends I{constructor(e="GraphQL did not provide a valid response.",t=null,n=null){super(e,t,n),this.name="InvalidResponseException"}}class Re extends I{constructor(e="Authorization token missing or invalid.",t=null,n=null){super(e,t,n),this.name="UnauthenticatedException"}}class C{constructor({query:e,json:t,dataKey:n=null}){if(this.dataKey=n,this.errorKey="exception",this.$__payload=null,this.$__query=e,this.$__originResponse=t,this.$__response=t,typeof this.$__response>"u"||this.$__response===null)throw new te;if(T.has(this.$__response,this.errorKey)){const s=T.get(this.$__response,this.errorKey);throw String(s).includes("Unauthenticated")?new Re:new te}if(this.$__response.errors&&Array.isArray(this.$__response.errors)&&this.$__response.errors.length>0){const s=this.$__response.errors[0].message||"Unknown GraphQL error";throw s.includes("Unauthenticated")?new Re:new te(`GraphQL Error: ${s}`)}this.init()}init(){}data(){if(!this.dataKey)return this.response();if(!this.response().data)throw new te("Response has no data field");if(!T.has(this.response(),this.dataKey))throw new te(`Missing expected field: ${this.dataKey}`);return T.get(this.response(),this.dataKey)}response(){return this.$__response}payload(){return null}query(){return this.$__query}status(){return null}success(){var e,t;return!((t=(e=this.$__response)==null?void 0:e.errors)!=null&&t.length)}error(){var e,t;return(t=(e=this.$__response)==null?void 0:e.errors)!=null&&t.length?this.$__response.errors[0].message||"Unknown error":null}reason(){return this.error()}toValidationResult(){var e;return this.success()&&this.payload()!==null?{success:!0,data:this.payload(),warnings:[]}:{success:!1,error:{message:this.reason()||"Unknown error",context:this.constructor.name,details:((e=this.$__response)==null?void 0:e.errors)||[]}}}onSuccess(e){if(this.success()&&this.payload()!==null)try{e(this.payload())}catch(t){console.warn("Response.onSuccess callback failed:",t)}return this}onFailure(e){if(!this.success())try{e(this.reason()||"Unknown error")}catch(t){console.warn("Response.onFailure callback failed:",t)}return this}debug(e=null){var n,s,r;const t=e?`[${e}]`:`[${this.constructor.name}]`;return this.success()?console.debug(`${t} Success:`,{payload:this.payload(),query:(s=(n=this.$__query)==null?void 0:n.constructor)==null?void 0:s.name,dataKey:this.dataKey}):console.debug(`${t} Failure:`,{error:this.reason(),errors:(r=this.$__response)==null?void 0:r.errors,rawData:this.$__response}),this}toPromise(){return this.success()&&this.payload()!==null?Promise.resolve(this.payload()):Promise.reject(new Error(this.reason()||"Unknown error"))}map(e){if(this.success()&&this.payload()!==null)try{const t=e(this.payload()),n=Object.create(Object.getPrototypeOf(this));return Object.assign(n,this),n.$__payload=t,n}catch(t){const n=Object.create(Object.getPrototypeOf(this));return Object.assign(n,this),n.$__response={errors:[{message:`Mapping failed: ${t.message}`}]},n}else return this}}class H{constructor(e,t){this.client=e,this.knishIOClient=t,this.$__variables=null,this.$__query=null,this.$__response=null,this.$__request=null}response(){return this.$__response}async createResponseRaw(e){return this.createResponse(e)}createResponse(e){return new C({query:this,json:e})}createQuery({variables:e=null}){if(this.$__variables=this.compiledVariables(e),!this.uri())throw new ee("Query::createQuery() - Node URI was not initialized for this client instance!");if(this.$__query===null)throw new ee("Query::createQuery() - GraphQL subscription was not initialized!");return{query:this.$__query,variables:this.variables()}}async execute({variables:e=null,context:t={}}){this.$__request=this.createQuery({variables:e});const n={...t,...this.createQueryContext()};try{const s=await this.client.query({...this.$__request,context:n});return this.$__response=await this.createResponseRaw(s),this.$__response}catch(s){if(s.name==="AbortError")return this.knishIOClient.log("warn","Query was cancelled"),new C({query:this,json:{data:null,errors:[{message:"Query was cancelled"}]}});throw s}}compiledVariables(e=null){return e||{}}uri(){return this.client.getUri()}variables(){return this.$__variables}createQueryContext(){return{}}}class un extends C{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 _({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=String(t.amount!=null?t.amount:0)),e}}class hn extends H{constructor(e,t){super(e,t),this.$__query=x.gql`query ($bundle: String!) {
|
|
4
|
+
${this.stack}`}}class se extends I{constructor(e="The molecule does not contain atoms",t=null,n=null){super(e,t,n),this.name="AtomsMissingException"}}class le{static create(e){const t={};for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return new this(t)}static structure(e){switch(Object.prototype.toString.call(e)){case"[object Array]":{const t=[];for(const n in e)t.push(le.isStructure(e[n])?le.structure(e[n]):e[n]);return t}case"[object Object]":{const t=[],n=Object.keys(e).sort((s,r)=>s===r?0:s<r?-1:1);for(const s of n)if(Object.prototype.hasOwnProperty.call(e,s)){const r={};r[s]=le.isStructure(e[s])?le.structure(e[s]):e[s],t.push(r)}if(t.length>0)return t;break}}return e}static isStructure(e){return["[object Object]","[object Array]"].includes(Object.prototype.toString.call(e))}view(){return le.structure(this)}}class fs extends le{constructor({position:e=null,walletAddress:t=null,isotope:n=null,token:s=null,value:r=null,batchId:i=null,metaType:a=null,metaId:c=null,meta:u=null,index:l=null,createdAt:h=null,version:p=null}){super(),this.position=e,this.walletAddress=t,this.isotope=n,this.token=s,this.value=r,this.batchId=i,this.metaType=a,this.metaId=c,this.meta=u,this.index=l,this.createdAt=h,this.version=p}}const Ne={4:fs};class g{constructor({position:e=null,walletAddress:t=null,isotope:n=null,token:s=null,value:r=null,batchId:i=null,metaType:a=null,metaId:c=null,meta:u=null,otsFragment:l=null,index:h=null,version:p=null}){this.position=e,this.walletAddress=t,this.isotope=n,this.token=s,this.value=r!==null?String(r):null,this.batchId=i,this.metaType=a,this.metaId=c,this.meta=u?de.normalizeMeta(u):[],this.index=h,this.otsFragment=l,this.createdAt=String(+new Date),p!==null&&Object.prototype.hasOwnProperty.call(Ne,p)&&(this.version=String(p))}static getHashableProps(){return["position","walletAddress","isotope","token","value","batchId","metaType","metaId","meta","createdAt"]}static getUnclaimedProps(){return["otsFragment"]}static create({isotope:e,wallet:t=null,value:n=null,metaType:s=null,metaId:r=null,meta:i=null,batchId:a=null}){return i||(i=new U),i instanceof U||(i=new U(i)),t&&(i.setAtomWallet(t),a||(a=t.batchId)),new g({position:t?t.position:null,walletAddress:t?t.address:null,isotope:e,token:t?t.token:null,value:n,batchId:a,metaType:s,metaId:r,meta:i.get()})}static jsonToObject(e){const t=Object.assign(new g({}),JSON.parse(e)),n=Object.keys(new g({}));for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&!n.includes(s)&&delete t[s];return t}toJSON(e={}){const{includeOtsFragments:t=!0,validateFields:n=!1}=e;try{if(n){const r=["position","walletAddress","isotope","token"];for(const i of r)if(!this[i])throw new Error(`Required field '${i}' is missing or empty`)}const s={position:this.position??"",walletAddress:this.walletAddress??"",isotope:this.isotope,token:this.token??"",value:this.value,batchId:this.batchId,metaType:this.metaType,metaId:this.metaId,meta:this.meta||[],index:this.index,createdAt:this.createdAt,version:this.version};return t&&this.otsFragment&&(s.otsFragment=this.otsFragment),s}catch(s){throw new Error(`Atom serialization failed: ${s.message}`)}}static fromJSON(e,t={}){const{validateStructure:n=!0,strictMode:s=!1}=t;try{const r=typeof e=="string"?JSON.parse(e):e;if(s||n){const a=["position","walletAddress","isotope","token"];for(const c of a)if(!r[c])throw new Error(`Required field '${c}' is missing or empty`)}const i=new g({position:r.position,walletAddress:r.walletAddress,isotope:r.isotope,token:r.token,value:r.value,batchId:r.batchId,metaType:r.metaType,metaId:r.metaId,meta:r.meta,index:r.index,version:r.version});return r.otsFragment&&(i.otsFragment=r.otsFragment),r.createdAt&&(i.createdAt=r.createdAt),i}catch(r){throw new Error(`Atom deserialization failed: ${r.message}`)}}static hashAtoms({atoms:e,output:t="base17"}){const n=new F("SHAKE256","TEXT"),s=g.sortAtoms(e);if(s.length===0)throw new se;if(s.map(r=>{if(!(r instanceof g))throw new se;return r}),s.every(r=>r.version&&Object.prototype.hasOwnProperty.call(Ne,r.version)))n.update(JSON.stringify(s.map(r=>Ne[r.version].create(r).view())));else{const r=String(e.length);let i=[];for(const a of s)i.push(r),i=i.concat(a.getHashableValues());for(const a of i)n.update(a)}switch(t){case"hex":return n.getHash("HEX",{outputLen:256});case"array":return n.getHash("ARRAYBUFFER",{outputLen:256});default:return Ut(n.getHash("HEX",{outputLen:256}),16,17,"0123456789abcdef","0123456789abcdefg").padStart(64,"0")}}static jsonSerialization(e,t){if(!g.getUnclaimedProps().includes(e))return t}static sortAtoms(e){const t=[...e];return t.sort((n,s)=>n.index<s.index?-1:1),t}aggregatedMeta(){return de.aggregateMeta(this.meta)}getHashableValues(){const e=[];for(const t of g.getHashableProps()){const n=this[t];if(!(n===null&&!["position","walletAddress"].includes(t)))if(t==="meta")for(const s of n)typeof s.value<"u"&&s.value!==null&&(e.push(String(s.key)),e.push(String(s.value)));else e.push(n===null?"":String(n))}return e}}function Le(o=null,e=2048){if(o){const t=new F("SHAKE256","TEXT");return t.update(o),t.getHash("HEX",{outputLen:e*4})}else return De(e)}function pe(o,e=null){const t=new F("SHAKE256","TEXT");return t.update(o),t.getHash("HEX",{outputLen:256})}function at(o,e){const t=new F("SHAKE256","TEXT");return t.update(o),t.getHash("HEX",{outputLen:e})}function ce({molecularHash:o=null,index:e=null}){return o!==null&&e!==null?pe(String(o)+String(e),"generateBatchId"):De(64)}class fe{constructor(e,t,n){this.id=e,this.name=t,this.metas=n||{}}static createFromGraphQL(e){let t=e.metas||{};return t.length&&(t=JSON.parse(t),t||(t={})),new fe(e.id,e.name,t)}static createFromDB(e){return new fe(e[0],e[1],e.length>2?e[2]:{})}getFragmentZone(){return this.metas.fragmentZone||null}getFusedTokenUnits(){return this.metas.fusedTokenUnits||null}toData(){return[this.id,this.name,this.metas]}toGraphQLResponse(){return{id:this.id,name:this.name,metas:JSON.stringify(this.metas)}}}class et extends I{constructor(e="Attempting to create a wallet with no credentials (secret or bundle hash)",t=null,n=null){super(e,t,n),this.name="WalletCredentialException"}}const Ue=BigInt(2**32-1),St=BigInt(32);function ms(o,e=!1){return e?{h:Number(o&Ue),l:Number(o>>St&Ue)}:{h:Number(o>>St&Ue)|0,l:Number(o&Ue)|0}}function ys(o,e=!1){const t=o.length;let n=new Uint32Array(t),s=new Uint32Array(t);for(let r=0;r<t;r++){const{h:i,l:a}=ms(o[r],e);[n[r],s[r]]=[i,a]}return[n,s]}const gs=(o,e,t)=>o<<t|e>>>32-t,bs=(o,e,t)=>e<<t|o>>>32-t,ws=(o,e,t)=>e<<t-32|o>>>64-t,ks=(o,e,t)=>o<<t-32|e>>>64-t;/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */function Ss(o){return o instanceof Uint8Array||ArrayBuffer.isView(o)&&o.constructor.name==="Uint8Array"}function _t(o,e=""){if(!Number.isSafeInteger(o)||o<0){const t=e&&`"${e}" `;throw new Error(`${t}expected integer >= 0, got ${o}`)}}function z(o,e,t=""){const n=Ss(o),s=o==null?void 0:o.length,r=e!==void 0;if(!n||r&&s!==e){const i=t&&`"${t}" `,a=r?` of length ${e}`:"",c=n?`length=${s}`:`type=${typeof o}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return o}function $t(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function _s(o,e){z(o,void 0,"digestInto() output");const t=e.outputLen;if(o.length<t)throw new Error('"digestInto() output" expected to be of length >='+t)}function Dt(o){return new Uint32Array(o.buffer,o.byteOffset,Math.floor(o.byteLength/4))}function Vt(...o){for(let e=0;e<o.length;e++)o[e].fill(0)}const $s=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function As(o){return o<<24&4278190080|o<<8&16711680|o>>>8&65280|o>>>24&255}function vs(o){for(let e=0;e<o.length;e++)o[e]=As(o[e]);return o}const At=$s?o=>o:vs;function zt(o,e={}){const t=(s,r)=>o(r).update(s).digest(),n=o(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=s=>o(s),Object.assign(t,e),Object.freeze(t)}function xs(o=32){const e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof(e==null?void 0:e.getRandomValues)!="function")throw new Error("crypto.getRandomValues must be defined");return e.getRandomValues(new Uint8Array(o))}const ze=o=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,o])}),Is=BigInt(0),_e=BigInt(1),Ms=BigInt(2),Ts=BigInt(7),Cs=BigInt(256),Rs=BigInt(113),Jt=[],Gt=[],Xt=[];for(let o=0,e=_e,t=1,n=0;o<24;o++){[t,n]=[n,(2*t+3*n)%5],Jt.push(2*(5*n+t)),Gt.push((o+1)*(o+2)/2%64);let s=Is;for(let r=0;r<7;r++)e=(e<<_e^(e>>Ts)*Rs)%Cs,e&Ms&&(s^=_e<<(_e<<BigInt(r))-_e);Xt.push(s)}const Zt=ys(Xt,!0),Es=Zt[0],qs=Zt[1],vt=(o,e,t)=>t>32?ws(o,e,t):gs(o,e,t),xt=(o,e,t)=>t>32?ks(o,e,t):bs(o,e,t);function Os(o,e=24){const t=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let i=0;i<10;i++)t[i]=o[i]^o[i+10]^o[i+20]^o[i+30]^o[i+40];for(let i=0;i<10;i+=2){const a=(i+8)%10,c=(i+2)%10,u=t[c],l=t[c+1],h=vt(u,l,1)^t[a],p=xt(u,l,1)^t[a+1];for(let d=0;d<50;d+=10)o[i+d]^=h,o[i+d+1]^=p}let s=o[2],r=o[3];for(let i=0;i<24;i++){const a=Gt[i],c=vt(s,r,a),u=xt(s,r,a),l=Jt[i];s=o[l],r=o[l+1],o[l]=c,o[l+1]=u}for(let i=0;i<50;i+=10){for(let a=0;a<10;a++)t[a]=o[i+a];for(let a=0;a<10;a++)o[i+a]^=~t[(a+2)%10]&t[(a+4)%10]}o[0]^=Es[n],o[1]^=qs[n]}Vt(t)}class Je{constructor(e,t,n,s=!1,r=24){j(this,"state");j(this,"pos",0);j(this,"posOut",0);j(this,"finished",!1);j(this,"state32");j(this,"destroyed",!1);j(this,"blockLen");j(this,"suffix");j(this,"outputLen");j(this,"enableXOF",!1);j(this,"rounds");if(this.blockLen=e,this.suffix=t,this.outputLen=n,this.enableXOF=s,this.rounds=r,_t(n,"outputLen"),!(0<e&&e<200))throw new Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=Dt(this.state)}clone(){return this._cloneInto()}keccak(){At(this.state32),Os(this.state32,this.rounds),At(this.state32),this.posOut=0,this.pos=0}update(e){$t(this),z(e);const{blockLen:t,state:n}=this,s=e.length;for(let r=0;r<s;){const i=Math.min(t-this.pos,s-r);for(let a=0;a<i;a++)n[this.pos++]^=e[r++];this.pos===t&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;const{state:e,suffix:t,pos:n,blockLen:s}=this;e[n]^=t,(t&128)!==0&&n===s-1&&this.keccak(),e[s-1]^=128,this.keccak()}writeInto(e){$t(this,!1),z(e),this.finish();const t=this.state,{blockLen:n}=this;for(let s=0,r=e.length;s<r;){this.posOut>=n&&this.keccak();const i=Math.min(n-this.posOut,r-s);e.set(t.subarray(this.posOut,this.posOut+i),s),this.posOut+=i,s+=i}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return _t(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(_s(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,Vt(this.state)}_cloneInto(e){const{blockLen:t,suffix:n,outputLen:s,rounds:r,enableXOF:i}=this;return e||(e=new Je(t,n,s,i,r)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=r,e.suffix=n,e.outputLen=s,e.enableXOF=i,e.destroyed=this.destroyed,e}}const Yt=(o,e,t,n={})=>zt(()=>new Je(e,o,t),n),Ws=Yt(6,136,32,ze(8)),Bs=Yt(6,72,64,ze(10)),en=(o,e,t,n={})=>zt((s={})=>new Je(e,o,s.dkLen===void 0?t:s.dkLen,!0),n),Us=en(31,168,16,ze(11)),tn=en(31,136,32,ze(12));function bt(o){if(!Number.isSafeInteger(o)||o<0||o>4294967295)throw new Error("wrong u32 integer:"+o);return o}function nn(o){return bt(o),(o&o-1)===0&&o!==0}function sn(o,e){bt(o);let t=0;for(let n=0;n<e;n++,o>>>=1)t=t<<1|o&1;return t}function rn(o){return bt(o),31-Math.clz32(o)}function It(o){const e=o.length;if(e<2||!nn(e))throw new Error("n must be a power of 2 and greater than 1. Got "+e);const t=rn(e);for(let n=0;n<e;n++){const s=sn(n,t);if(n<s){const r=o[n];o[n]=o[s],o[s]=r}}return o}const Mt=(o,e)=>{const{N:t,roots:n,dit:s,invertButterflies:r=!1,skipStages:i=0,brp:a=!0}=e,c=rn(t);if(!nn(t))throw new Error("FFT: Polynomial size should be power of two");const u=s!==r;return l=>{if(l.length!==t)throw new Error("FFT: wrong Polynomial length");s&&a&&It(l);for(let h=0,p=1;h<c-i;h++){const d=s?h+1+i:c-h,b=1<<d,A=b>>1,E=t>>d;for(let f=0;f<t;f+=b)for(let m=0,w=p++;m<A;m++){const R=r?s?t-w:w:m*E,k=f+m,$=f+m+A,v=n[R],M=l[$],S=l[k];if(u){const P=o.mul(M,v);l[k]=o.add(S,P),l[$]=o.sub(S,P)}else r?(l[k]=o.add(M,S),l[$]=o.mul(o.sub(M,S),v)):(l[k]=o.add(S,M),l[$]=o.mul(o.sub(S,M),v))}}return!s&&a&&It(l),l}};/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */const Tt=xs;function tt(o,e){if(o.length!==e.length)return!1;let t=0;for(let n=0;n<o.length;n++)t|=o[n]^e[n];return t===0}function Hs(o){return Uint8Array.from(o)}function Qe(o,...e){const t=s=>typeof s=="number"?s:s.bytesLen,n=e.reduce((s,r)=>s+t(r),0);return{bytesLen:n,encode:s=>{const r=new Uint8Array(n);for(let i=0,a=0;i<e.length;i++){const c=e[i],u=t(c),l=typeof c=="number"?s[i]:c.encode(s[i]);z(l,u,o),r.set(l,a),typeof c!="number"&&l.fill(0),a+=u}return r},decode:s=>{z(s,n,o);const r=[];for(const i of e){const a=t(i),c=s.subarray(0,a);r.push(typeof i=="number"?c:i.decode(c)),s=s.subarray(a)}return r}}}function nt(o,e){const t=e*o.bytesLen;return{bytesLen:t,encode:n=>{if(n.length!==e)throw new Error(`vecCoder.encode: wrong length=${n.length}. Expected: ${e}`);const s=new Uint8Array(t);for(let r=0,i=0;r<n.length;r++){const a=o.encode(n[r]);s.set(a,i),a.fill(0),i+=a.length}return s},decode:n=>{z(n,t);const s=[];for(let r=0;r<n.length;r+=o.bytesLen)s.push(o.decode(n.subarray(r,r+o.bytesLen)));return s}}}function X(...o){for(const e of o)if(Array.isArray(e))for(const t of e)t.fill(0);else e.fill(0)}function Ct(o){return(1<<o)-1}/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */const Ps=o=>{const{newPoly:e,N:t,Q:n,F:s,ROOT_OF_UNITY:r,brvBits:i}=o,a=(f,m=n)=>{const w=f%m|0;return(w>=0?w|0:m+w|0)|0},c=(f,m=n)=>{const w=a(f,m)|0;return(w>m>>1?w-m|0:w)|0};function u(){const f=e(t);for(let m=0;m<t;m++){const w=sn(m,i),R=BigInt(r)**BigInt(w)%BigInt(n);f[m]=Number(R)|0}return f}const l=u(),h={add:(f,m)=>a((f|0)+(m|0))|0,sub:(f,m)=>a((f|0)-(m|0))|0,mul:(f,m)=>a((f|0)*(m|0))|0,inv:f=>{throw new Error("not implemented")}},p={N:t,roots:l,invertButterflies:!0,skipStages:1,brp:!1},d=Mt(h,{dit:!1,...p}),b=Mt(h,{dit:!0,...p});return{mod:a,smod:c,nttZetas:l,NTT:{encode:f=>d(f),decode:f=>{b(f);for(let m=0;m<f.length;m++)f[m]=a(s*f[m]);return f}},bitsCoder:(f,m)=>{const w=Ct(f),R=f*(t/8);return{bytesLen:R,encode:k=>{const $=new Uint8Array(R);for(let v=0,M=0,S=0,P=0;v<k.length;v++)for(M|=(m.encode(k[v])&w)<<S,S+=f;S>=8;S-=8,M>>=8)$[P++]=M&Ct(S);return $},decode:k=>{const $=e(t);for(let v=0,M=0,S=0,P=0;v<k.length;v++)for(M|=k[v]<<S,S+=8;S>=f;S-=f,M>>=f)$[P++]=m.decode(M&w);return $}}}}},Ks=o=>(e,t)=>{t||(t=o.blockLen);const n=new Uint8Array(e.length+2);n.set(e);const s=e.length,r=new Uint8Array(t);let i=o.create({}),a=0,c=0;return{stats:()=>({calls:a,xofs:c}),get:(u,l)=>(n[s+0]=u,n[s+1]=l,i.destroy(),i=o.create({}).update(n),a++,()=>(c++,i.xofInto(r))),clean:()=>{i.destroy(),X(r,n)}}},Ns=Ks(Us);/*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */const Q=256,ue=3329,Qs=3303,Fs=17,{mod:Ce,nttZetas:Ls,NTT:re,bitsCoder:js}=Ps({N:Q,Q:ue,F:Qs,ROOT_OF_UNITY:Fs,newPoly:o=>new Uint16Array(o),brvBits:7}),Ds={768:{N:Q,Q:ue,K:3,ETA1:2,ETA2:2,du:10,dv:4,RBGstrength:192}},Vs=o=>{if(o>=12)return{encode:t=>t,decode:t=>t};const e=2**(o-1);return{encode:t=>((t<<o)+ue/2)/ue,decode:t=>t*ue+e>>>o}},$e=o=>js(o,Vs(o));function ie(o,e){for(let t=0;t<Q;t++)o[t]=Ce(o[t]+e[t])}function zs(o,e){for(let t=0;t<Q;t++)o[t]=Ce(o[t]-e[t])}function Js(o,e,t,n,s){const r=Ce(e*n*s+o*t),i=Ce(o*n+e*t);return{c0:r,c1:i}}function He(o,e){for(let t=0;t<Q/2;t++){let n=Ls[64+(t>>1)];t&1&&(n=-n);const{c0:s,c1:r}=Js(o[2*t+0],o[2*t+1],e[2*t+0],e[2*t+1],n);o[2*t+0]=s,o[2*t+1]=r}return o}function Rt(o){const e=new Uint16Array(Q);for(let t=0;t<Q;){const n=o();if(n.length%3)throw new Error("SampleNTT: unaligned block");for(let s=0;t<Q&&s+3<=n.length;s+=3){const r=(n[s+0]>>0|n[s+1]<<8)&4095,i=(n[s+1]>>4|n[s+2]<<4)&4095;r<ue&&(e[t++]=r),t<Q&&i<ue&&(e[t++]=i)}}return e}function Ae(o,e,t,n){const s=o(n*Q/4,e,t),r=new Uint16Array(Q),i=Dt(s);let a=0;for(let c=0,u=0,l=0,h=0;c<i.length;c++){let p=i[c];for(let d=0;d<32;d++)l+=p&1,p>>=1,a+=1,a===n?(h=l,l=0):a===2*n&&(r[u++]=Ce(h-l),l=0,a=0)}if(a)throw new Error(`sampleCBD: leftover bits: ${a}`);return r}const Gs=o=>{const{K:e,PRF:t,XOF:n,HASH512:s,ETA1:r,ETA2:i,du:a,dv:c}=o,u=$e(1),l=$e(c),h=$e(a),p=Qe("publicKey",nt($e(12),e),32),d=nt($e(12),e),b=Qe("ciphertext",nt(h,e),l),A=Qe("seed",32,32);return{secretCoder:d,lengths:{secretKey:d.bytesLen,publicKey:p.bytesLen,cipherText:b.bytesLen},keygen:E=>{z(E,32,"seed");const f=new Uint8Array(33);f.set(E),f[32]=e;const m=s(f),[w,R]=A.decode(m),k=[],$=[];for(let S=0;S<e;S++)k.push(re.encode(Ae(t,R,S,r)));const v=n(w);for(let S=0;S<e;S++){const P=re.encode(Ae(t,R,e+S,r));for(let q=0;q<e;q++){const me=Rt(v.get(q,S));ie(P,He(me,k[q]))}$.push(P)}v.clean();const M={publicKey:p.encode([$,w]),secretKey:d.encode(k)};return X(w,R,k,$,f,m),M},encrypt:(E,f,m)=>{const[w,R]=p.decode(E),k=[];for(let q=0;q<e;q++)k.push(re.encode(Ae(t,m,q,r)));const $=n(R),v=new Uint16Array(Q),M=[];for(let q=0;q<e;q++){const me=Ae(t,m,e+q,i),Ze=new Uint16Array(Q);for(let Be=0;Be<e;Be++){const us=Rt($.get(q,Be));ie(Ze,He(us,k[Be]))}ie(me,re.decode(Ze)),M.push(me),ie(v,He(w[q],k[q])),X(Ze)}$.clean();const S=Ae(t,m,2*e,i);ie(S,re.decode(v));const P=u.decode(f);return ie(P,S),X(w,k,v,S),b.encode([M,P])},decrypt:(E,f)=>{const[m,w]=b.decode(E),R=d.decode(f),k=new Uint16Array(Q);for(let $=0;$<e;$++)ie(k,He(R[$],re.encode(m[$])));return zs(w,re.decode(k)),X(k,R,m),u.encode(w)}}};function Xs(o){const e=Gs(o),{HASH256:t,HASH512:n,KDF:s}=o,{secretCoder:r,lengths:i}=e,a=Qe("secretKey",i.secretKey,i.publicKey,32,32),c=32,u=64;return{info:{type:"ml-kem"},lengths:{...i,seed:64,msg:c,msgRand:c,secretKey:a.bytesLen},keygen:(l=Tt(u))=>{z(l,u,"seed");const{publicKey:h,secretKey:p}=e.keygen(l.subarray(0,32)),d=t(h),b=a.encode([p,h,d,l.subarray(32)]);return X(p,d),{publicKey:h,secretKey:b}},getPublicKey:l=>{const[h,p]=a.decode(l);return Uint8Array.from(p)},encapsulate:(l,h=Tt(c))=>{z(l,i.publicKey,"publicKey"),z(h,c,"message");const p=l.subarray(0,384*o.K),d=r.encode(r.decode(Hs(p)));if(!tt(d,p))throw X(d),new Error("ML-KEM.encapsulate: wrong publicKey modulus");X(d);const b=n.create().update(h).update(t(l)).digest(),A=e.encrypt(l,h,b.subarray(32,64));return X(b.subarray(32)),{cipherText:A,sharedSecret:b.subarray(0,32)}},decapsulate:(l,h)=>{z(h,a.bytesLen,"secretKey"),z(l,i.cipherText,"cipherText");const p=a.bytesLen-96,d=p+32,b=t(h.subarray(p/2,d));if(!tt(b,h.subarray(d,d+32)))throw new Error("invalid secretKey: hash check failed");const[A,E,f,m]=a.decode(h),w=e.decrypt(l,A),R=n.create().update(w).update(f).digest(),k=R.subarray(0,32),$=e.encrypt(E,w,R.subarray(32,64)),v=tt(l,$),M=s.create({dkLen:32}).update(m).update(l).digest();return X(w,$,v?M:k),v?k:M}}}function Zs(o,e,t){return tn.create({dkLen:o}).update(e).update(new Uint8Array([t])).digest()}const Ys={HASH256:Ws,HASH512:Bs,KDF:tn,XOF:Ns,PRF:Zs},st=Xs({...Ys,...Ds[768]});class _{constructor({secret:e=null,bundle:t=null,token:n="USER",address:s=null,position:r=null,batchId:i=null,characters:a=null}){this.token=n,this.balance="0",this.molecules={},this.key=null,this.privkey=null,this.pubkey=null,this.tokenUnits=[],this.tradeRates={},this.address=s,this.position=r,this.bundle=t,this.batchId=i,this.characters=a,e&&(this.bundle=this.bundle||pe(e,"Wallet::constructor"),this.position=this.position||_.generatePosition(),this.key=_.generateKey({secret:e,token:this.token,position:this.position}),this.address=this.address||_.generateAddress(this.key),this.characters=this.characters||"BASE64",this.initializeMLKEM())}static create({secret:e=null,bundle:t=null,token:n,batchId:s=null,characters:r=null}){let i=null;if(!e&&!t)throw new et;return e&&!t&&(i=_.generatePosition(),t=pe(e,"Wallet::create")),new _({secret:e,bundle:t,token:n,position:i,batchId:s,characters:r})}static isBundleHash(e){return typeof e!="string"?!1:e.length===64&&Ke(e)}static getTokenUnits(e){const t=[];return e.forEach(n=>{t.push(fe.createFromDB(n))}),t}static generateKey({secret:e,token:t,position:n}){if(!e)throw new et("Wallet::generateKey() - Secret is required!");if(!n)throw new et("Wallet::generateKey() - Position is required!");const s=Ke(e)?e:at(e,1024),r=Ke(n)?n:at(n,256),a=BigInt(`0x${s}`)+BigInt(`0x${r}`),c=new F("SHAKE256","TEXT");c.update(a.toString(16)),t&&c.update(t);const u=new F("SHAKE256","TEXT");return u.update(c.getHash("HEX",{outputLen:8192})),u.getHash("HEX",{outputLen:8192})}static generateAddress(e){const t=Te(e,128),n=new F("SHAKE256","TEXT");for(const r in t){let i=t[r];for(let a=1;a<=16;a++){const c=new F("SHAKE256","TEXT");c.update(i),i=c.getHash("HEX",{outputLen:512})}n.update(i)}const s=new F("SHAKE256","TEXT");return s.update(n.getHash("HEX",{outputLen:8192})),s.getHash("HEX",{outputLen:256})}static generatePosition(e=64){return De(e,"abcdef0123456789")}initializeMLKEM(){const e=Le(this.key,128),t=new Uint8Array(64);for(let r=0;r<64;r++)t[r]=parseInt(e.substr(r*2,2),16);const{publicKey:n,secretKey:s}=st.keygen(t);this.pubkey=this.serializeKey(n),this.privkey=s}serializeKey(e){return btoa(String.fromCharCode.apply(null,e))}deserializeKey(e){const t=atob(e);return new Uint8Array(t.length).map((n,s)=>t.charCodeAt(s))}balanceAsNumber(){return Number(this.balance)}balanceAsBigInt(){const e=String(this.balance),t=e.includes(".")?e.split(".")[0]:e;return BigInt(t||"0")}setBalanceBigInt(e){this.balance=e.toString()}setBalanceNumber(e){this.balance=String(e)}getTokenUnitsData(){const e=[];return this.tokenUnits.forEach(t=>{e.push(t.toData())}),e}splitUnits(e,t,n=null){if(e.length===0)return;const s=[],r=[];this.tokenUnits.forEach(i=>{e.includes(i.id)?s.push(i):r.push(i)}),this.tokenUnits=s,n!==null&&(n.tokenUnits=s),t.tokenUnits=r}createRemainder(e){const t=_.create({secret:e,token:this.token,characters:this.characters});return t.initBatchId({sourceWallet:this,isRemainder:!0}),t}isShadow(){return(typeof this.position>"u"||this.position===null)&&(typeof this.address>"u"||this.address===null)}initBatchId({sourceWallet:e,isRemainder:t=!1}){e.batchId&&(this.batchId=t?e.batchId:ce({}))}async encryptMessage(e,t){const n=JSON.stringify(e),s=new TextEncoder().encode(n),r=this.deserializeKey(t),{cipherText:i,sharedSecret:a}=st.encapsulate(r),c=await this.encryptWithSharedSecret(s,a);return{cipherText:this.serializeKey(i),encryptedMessage:this.serializeKey(c)}}async decryptMessage(e){const{cipherText:t,encryptedMessage:n}=e;let s;try{s=st.decapsulate(this.deserializeKey(t),this.privkey)}catch(c){return console.error("Wallet::decryptMessage() - Decapsulation failed",c),console.info("Wallet::decryptMessage() - my public key",this.pubkey),null}let r;try{r=this.deserializeKey(n)}catch(c){return console.warn("Wallet::decryptMessage() - Deserialization failed",c),console.info("Wallet::decryptMessage() - my public key",this.pubkey),console.info("Wallet::decryptMessage() - our shared secret",s),null}let i;try{i=await this.decryptWithSharedSecret(r,s)}catch(c){return console.warn("Wallet::decryptMessage() - Decryption failed",c),console.info("Wallet::decryptMessage() - my public key",this.pubkey),console.info("Wallet::decryptMessage() - our shared secret",s),console.info("Wallet::decryptMessage() - deserialized encrypted message",r),null}let a;try{a=new TextDecoder().decode(i)}catch(c){return console.warn("Wallet::decryptMessage() - Decoding failed",c),console.info("Wallet::decryptMessage() - my public key",this.pubkey),console.info("Wallet::decryptMessage() - our shared secret",s),console.info("Wallet::decryptMessage() - deserialized encrypted message",r),console.info("Wallet::decryptMessage() - decrypted Uint8Array",i),null}return JSON.parse(a)}async encryptWithSharedSecret(e,t){const n=crypto.getRandomValues(new Uint8Array(12)),s={name:"AES-GCM",iv:n},r=await crypto.subtle.importKey("raw",t,{name:"AES-GCM"},!1,["encrypt"]),i=await crypto.subtle.encrypt(s,r,e),a=new Uint8Array(n.length+i.byteLength);return a.set(n),a.set(new Uint8Array(i),n.length),a}async decryptWithSharedSecret(e,t){const s={name:"AES-GCM",iv:e.slice(0,12)},r=await crypto.subtle.importKey("raw",t,{name:"AES-GCM"},!1,["decrypt"]),i=await crypto.subtle.decrypt(s,r,e.slice(12));return new Uint8Array(i)}}class ge extends I{constructor(e="There is an atom without an index",t=null,n=null){super(e,t,n),this.name="AtomIndexException"}}class on extends I{constructor(e="The molecular hash does not match",t=null,n=null){super(e,t,n),this.name="MolecularHashMismatchException"}}class an extends I{constructor(e="The molecular hash is missing",t=null,n=null){super(e,t,n),this.name="MolecularHashMissingException"}}class lt extends I{constructor(e="",t=null,n=null){super(e,t,n),this.name="PolicyInvalidException"}}class wt extends I{constructor(e="OTS malformed",t=null,n=null){super(e,t,n),this.name="SignatureMalformedException"}}class ln extends I{constructor(e="One-time signature (OTS) does not match!",t=null,n=null){super(e,t,n),this.name="SignatureMismatchException"}}class G extends I{constructor(e="Insufficient balance to make transfer",t=null,n=null){super(e,t,n),this.name="TransferBalanceException"}}class be extends I{constructor(e="Token transfer atoms are malformed",t=null,n=null){super(e,t,n),this.name="TransferMalformedException"}}class ct extends I{constructor(e="Token slugs for wallets in transfer do not match!",t=null,n=null){super(e,t,n),this.name="TransferMismatchedException"}}class ut extends I{constructor(e="Invalid remainder provided",t=null,n=null){super(e,t,n),this.name="TransferRemainderException"}}class cn extends I{constructor(e="Sender and recipient(s) cannot be the same",t=null,n=null){super(e,t,n),this.name="TransferToSelfException"}}class ve extends I{constructor(e="Token transfer atoms are unbalanced",t=null,n=null){super(e,t,n),this.name="TransferUnbalancedException"}}class B extends I{constructor(e="Empty meta data.",t=null,n=null){super(e,t,n),this.name="MetaMissingException"}}class ne extends I{constructor(e="Wrong type of token for this isotope",t=null,n=null){super(e,t,n),this.name="WrongTokenTypeException"}}class Ie extends I{constructor(e="Incorrect BatchId",t=null,n=null){super(e,t,n),this.name="BatchIdException"}}class Et{constructor(e={}){for(const t in e)this[`__${t}`]=e[t]}static toObject(e){return new this(e)}toJSON(){const e={};for(const t of Object.keys(this))t.substring(0,2)==="__"&&(e[t.substring(2,t.length)]=this[t]);return e}}class je extends I{constructor(e="An incorrect argument!",t=null,n=null){super(e,t,n),this.name="RuleArgumentException"}}class ee extends I{constructor(e="Code exception",t=null,n=null){super(e,t,n),this.name="CodeException"}}class Me{constructor({action:e,metaType:t=null,metaId:n=null,meta:s=null,address:r=null,token:i=null,amount:a=null,comparison:c=null}){if(s&&(this.meta=s),!e)throw new je('Callback structure violated, missing mandatory "action" parameter.');this.__metaId=n,this.__metaType=t,this.__action=e,this.__address=r,this.__token=i,this.__amount=a,this.__comparison=c}set comparison(e){this.__comparison=e}set amount(e){if(!Qt(e))throw new ee("Parameter amount should be a string containing numbers");this.__amount=e}set token(e){this.__token=e}set address(e){this.__address=e}set meta(e){this.__meta=e instanceof Et?e:Et.toObject(e)}set metaType(e){this.__metaType=e}set metaId(e){this.__metaId=e}static toObject(e){const t=new Me({action:e.action});return e.metaType&&(t.metaType=e.metaType),e.metaId&&(t.metaId=e.metaId),e.meta&&(t.meta=e.meta),e.address&&(t.address=e.address),e.token&&(t.token=e.token),e.amount&&(t.amount=e.amount),e.comparison&&(t.comparison=e.comparison),t}toJSON(){const e={action:this.__action};return this.__metaType&&(e.metaType=this.__metaType),this.__metaId&&(e.metaId=this.__metaId),this.__meta&&(e.meta=this.__meta),this.__address&&(e.address=this.__address),this.__token&&(e.token=this.__token),this.__amount&&(e.amount=this.__amount),this.__comparison&&(e.comparison=this.__comparison),e}isReject(){return this._is("reject")}isMeta(){return ye(Object.keys(this.toJSON()),["action","metaId","metaType","meta"]).length===4&&this._is("meta")}isCollect(){return ye(Object.keys(this.toJSON()),["action","address","token","amount","comparison"]).length===5&&this._is("collect")}isBuffer(){return ye(Object.keys(this.toJSON()),["action","address","token","amount","comparison"]).length===5&&this._is("buffer")}isRemit(){return ye(Object.keys(this.toJSON()),["action","token","amount"]).length===3&&this._is("remit")}isBurn(){return ye(Object.keys(this.toJSON()),["action","token","amount","comparison"]).length===4&&this._is("burn")}_is(e){return this.__action.toLowerCase()===e.toLowerCase()}}class rt{constructor({key:e,value:t,comparison:n}){if([e,t,n].some(s=>!s))throw new je("Condition::constructor( { key, value, comparison } ) - not all class parameters are initialised!");this.__key=e,this.__value=t,this.__comparison=n}static toObject(e){return new this({key:e.key,value:e.value,comparison:e.comparison})}toJSON(){return{key:this.__key,value:this.__value,comparison:this.__comparison}}}class Re{constructor({condition:e=[],callback:t=[]}){for(const n of e)if(!(n instanceof rt))throw new je;for(const n of t)if(!(n instanceof Me))throw new je;this.__condition=e,this.__callback=t}set comparison(e){this.__condition.push(e instanceof rt?e:rt.toObject(e))}set callback(e){this.__callback.push(e instanceof Me?e:Me.toObject(e))}static toObject(e){if(!e.condition)throw new B("Rule::toObject() - Incorrect rule format! There is no condition field.");if(!e.callback)throw new B("Rule::toObject() - Incorrect rule format! There is no callback field.");const t=new Re({});for(const n of e.condition)t.comparison=n;for(const n of e.callback)t.callback=n;return t}toJSON(){return{condition:this.__condition,callback:this.__callback}}}class T{static __init(e,t){this.arr=String(t).split("."),this.key=this.arr.shift();const n=Number(this.key);Number.isInteger(n)&&(this.key=n),this.__nextKey=this.arr.length,this.__next=this.__tic(e)}static __tic(e){return!Array.isArray(e)&&!(e instanceof Object)?!1:typeof e[this.key]<"u"}static has(e,t){return this.__init(e,t),this.__next?this.__nextKey===0?!0:this.has(e[this.key],this.arr.join(".")):!1}static get(e,t,n=null){return this.__init(e,t),this.__next?this.__nextKey===0?e[this.key]:this.get(e[this.key],this.arr.join("."),n):n}static set(e,t,n){const s=t.split(".");let r=e;const i=s.length-1;for(let u=0;u<i;u++){const l=s[u],h=Number(l),p=Number.isInteger(h);(p?h:l in r)||(r[p?h:l]=s[u+1].match(/^\d+$/)?[]:{}),r=r[p?h:l]}const a=s[i],c=Number(a);return r[Number.isInteger(c)?c:a]=n,e}}class we{constructor(e){if(e.molecularHash===null)throw new an;if(!e.atoms.length)throw new se;for(const t of e.atoms)if(t.index===null)throw new ge;this.molecule=e}verify(e){return this.molecularHash()&&this.ots()&&this.batchId()&&this.continuId()&&this.isotopeM()&&this.isotopeT()&&this.isotopeC()&&this.isotopeU()&&this.isotopeI()&&this.isotopeR()&&this.isotopeP()&&this.isotopeA()&&this.isotopeB()&&this.isotopeF()&&this.isotopeV(e)}continuId(){if(this.molecule.atoms[0].token==="USER"&&this.molecule.getIsotopes("I").length<1)throw new se("Check::continuId() - Molecule is missing required ContinuID Atom!");return!0}batchId(){if(this.molecule.atoms.length>0){const e=this.molecule.atoms[0];if(e.isotope==="V"&&e.batchId!==null){const t=this.molecule.getIsotopes("V"),n=t[t.length-1];if(e.batchId!==n.batchId)throw new Ie;for(const s of t)if(s.batchId===null)throw new Ie}return!0}throw new Ie}isotopeI(){for(const e of this.molecule.getIsotopes("I")){if(e.token!=="USER")throw new ne(`Check::isotopeI() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(e.index===0)throw new ge(`Check::isotopeI() - Isotope "${e.isotope}" Atoms must have a non-zero index!`)}return!0}isotopeU(){for(const e of this.molecule.getIsotopes("U")){if(e.token!=="AUTH")throw new ne(`Check::isotopeU() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(e.index!==0)throw new ge(`Check::isotopeU() - Isotope "${e.isotope}" Atoms must have an index equal to 0!`)}return!0}isotopeM(){const e=["readPolicy","writePolicy"];for(const t of this.molecule.getIsotopes("M")){if(t.meta.length<1)throw new B;if(t.token!=="USER")throw new ne(`Check::isotopeM() - "${t.token}" is not a valid Token slug for "${t.isotope}" isotope Atoms!`);const n=de.aggregateMeta(t.meta);for(const s of e){let r=n[s];if(r){r=JSON.parse(r);for(const[i,a]of Object.entries(r))if(!e.includes(i)){if(!Object.keys(n).includes(i))throw new lt(`${i} is missing from the meta.`);for(const c of a)if(!_.isBundleHash(c)&&!["all","self"].includes(c))throw new lt(`${c} does not correspond to the format of the policy.`)}}}}return!0}isotopeC(){for(const e of this.molecule.getIsotopes("C")){if(e.token!=="USER")throw new ne(`Check::isotopeC() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(e.index!==0)throw new ge(`Check::isotopeC() - Isotope "${e.isotope}" Atoms must have an index equal to 0!`)}return!0}isotopeT(){for(const e of this.molecule.getIsotopes("T")){const t=e.aggregatedMeta();if(String(e.metaType).toLowerCase()==="wallet"){for(const s of["position","bundle"])if(!Object.prototype.hasOwnProperty.call(t,s)||!t[s])throw new B(`Check::isotopeT() - Required meta field "${s}" is missing!`)}for(const s of["token"])if(!Object.prototype.hasOwnProperty.call(t,s)||!t[s])throw new B(`Check::isotopeT() - Required meta field "${s}" is missing!`);if(e.token!=="USER")throw new ne(`Check::isotopeT() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(e.index!==0)throw new ge(`Check::isotopeT() - Isotope "${e.isotope}" Atoms must have an index equal to 0!`)}return!0}isotopeR(){for(const e of this.molecule.getIsotopes("R")){const t=e.aggregatedMeta();if(t.policy){const n=JSON.parse(t.policy);if(!Object.keys(n).every(s=>["read","write"].includes(s)))throw new B("Check::isotopeR() - Mixing rules with politics!")}if(t.rule){const n=JSON.parse(t.rule);if(!Array.isArray(n))throw new B("Check::isotopeR() - Incorrect rule format!");for(const s of n)Re.toObject(s);if(n.length<1)throw new B("Check::isotopeR() - No rules!")}}return!0}isotopeP(){for(const e of this.molecule.getIsotopes("P")){if(e.token!=="USER")throw new ne(`Check::isotopeP() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);const t=e.aggregatedMeta();if(!Object.prototype.hasOwnProperty.call(t,"peerHost")||!t.peerHost)throw new B('Check::isotopeP() - Required meta field "peerHost" is missing!')}return!0}isotopeA(){for(const e of this.molecule.getIsotopes("A")){if(e.token!=="USER")throw new ne(`Check::isotopeA() - "${e.token}" is not a valid Token slug for "${e.isotope}" isotope Atoms!`);if(!e.metaType)throw new B('Check::isotopeA() - Required field "metaType" is missing!');if(!e.metaId)throw new B('Check::isotopeA() - Required field "metaId" is missing!');const t=e.aggregatedMeta();if(!Object.prototype.hasOwnProperty.call(t,"action")||!t.action)throw new B('Check::isotopeA() - Required meta field "action" is missing!')}return!0}isotopeB(){const e=this.molecule.getIsotopes("B");if(e.length===0)return!0;for(const n of e){if(!n.metaType||n.metaType!=="walletBundle")throw new B('Check::isotopeB() - B-isotope atoms must have metaType "walletBundle"!');if(!n.metaId)throw new B("Check::isotopeB() - B-isotope atoms must have a metaId!");const s=Number(n.value);if(Number.isNaN(s))throw new be("Check::isotopeB() - B-isotope atom value is not a valid number!")}const t=this.molecule.getIsotopes("V");if(t.length>0){let n=0;for(const s of[...t,...e]){const r=Number(s.value);Number.isNaN(r)||(n+=r)}if(n!==0)throw new ve("Check::isotopeB() - V+B atom values do not balance to zero!")}return!0}isotopeF(){const e=this.molecule.getIsotopes("F");if(e.length===0)return!0;for(const n of e){if(!n.metaType||n.metaType!=="walletBundle")throw new B('Check::isotopeF() - F-isotope atoms must have metaType "walletBundle"!');if(!n.metaId)throw new B("Check::isotopeF() - F-isotope atoms must have a metaId!");const s=Number(n.value);if(Number.isNaN(s))throw new be("Check::isotopeF() - F-isotope atom value is not a valid number!");if(s<0)throw new be("Check::isotopeF() - F-isotope atom value must not be negative!")}const t=this.molecule.getIsotopes("V");if(t.length>0){let n=0;for(const s of[...t,...e]){const r=Number(s.value);Number.isNaN(r)||(n+=r)}if(n!==0)throw new ve("Check::isotopeF() - V+F atom values do not balance to zero!")}return!0}isotopeV(e=null){const t=this.molecule.getIsotopes("V");if(t.length===0)return!0;const n=this.molecule.getIsotopes("B").length>0||this.molecule.getIsotopes("F").length>0,s=this.molecule.atoms[0];if(!n&&s.isotope==="V"&&t.length===2){const a=t[t.length-1];if(s.token!==a.token)throw new ct;if(a.value<0)throw new be;if(Number(s.value)+Number(a.value)!==0)throw new ve;return!0}let r=0,i=0;for(const a in this.molecule.atoms)if(Object.prototype.hasOwnProperty.call(this.molecule.atoms,a)){const c=this.molecule.atoms[a];if(c.isotope!=="V")continue;if(i=c.value*1,Number.isNaN(i))throw new TypeError('Invalid isotope "V" values');if(c.token!==s.token)throw new ct;if(a>0){if(i<0)throw new be;if(c.walletAddress===s.walletAddress)throw new cn}r+=i}if(!n&&r!==0)throw new ve;if(e){if(i=s.value*1,Number.isNaN(i))throw new TypeError('Invalid isotope "V" values');const a=Number(e.balance)+i;if(a<0)throw new G;if(!n&&a!==r)throw new ut}else if(i!==0)throw new ut;return!0}molecularHash(){if(this.molecule.molecularHash!==g.hashAtoms({atoms:this.molecule.atoms}))throw new on;return!0}ots(){const e=this.molecule.normalizedHash();let t=this.molecule.atoms.map(p=>p.otsFragment).reduce((p,d)=>p+d);if(t.length!==2048&&(t=Nt(t),t.length!==2048))throw new wt;const n=Te(t,128);let s="";for(const p in n){let d=n[p];for(let b=0,A=8+e[p];b<A;b++)d=new F("SHAKE256","TEXT").update(d).getHash("HEX",{outputLen:512});s+=d}const r=new F("SHAKE256","TEXT");r.update(s);const i=r.getHash("HEX",{outputLen:8192}),a=new F("SHAKE256","TEXT");a.update(i);const c=a.getHash("HEX",{outputLen:256}),u=this.molecule.atoms[0];let l=u.walletAddress;const h=T.get(u.aggregatedMeta(),"signingWallet");if(h&&(l=T.get(JSON.parse(h),"address")),c!==l)throw new ln;return!0}static fromServerData({molecularHash:e,bundleHash:t,cellSlug:n=null,status:s=null,createdAt:r=null,atoms:i=[]}){const a=i.map(c=>{let u=[];if(c.metasJson)try{const l=JSON.parse(c.metasJson);Array.isArray(l)?u=l:l&&typeof l=="object"&&(u=Object.entries(l).map(([h,p])=>({key:h,value:p})))}catch{u=[]}return{position:c.position||null,walletAddress:c.walletAddress||null,isotope:c.isotope||null,token:c.tokenSlug||c.token||null,value:c.value!=null?String(c.value):null,batchId:c.batchId||null,metaType:c.metaType||null,metaId:c.metaId||null,meta:u,index:c.index!=null?c.index:null,otsFragment:c.otsFragment||null,createdAt:c.createdAt||null}});return V.fromJSON({molecularHash:e,bundle:t,cellSlug:n,status:s,createdAt:r,atoms:a})}static verifyFromServerData(e){try{const t=we.fromServerData(e);return new we(t).verify(),{molecularHash:e.molecularHash,verified:!0,error:null}}catch(t){return{molecularHash:e.molecularHash||null,verified:!1,error:t.message||String(t)}}}}class ae extends I{constructor(e="Insufficient balance for requested transfer",t=null,n=null){super(e,t,n),this.name="BalanceInsufficientException"}}class Fe extends I{constructor(e="Amount cannot be negative!",t=null,n=null){super(e,t,n),this.name="NegativeAmountException"}}class V{constructor({secret:e=null,bundle:t=null,sourceWallet:n=null,remainderWallet:s=null,cellSlug:r=null,version:i=null,continuIdPosition:a=null}){this.status=null,this.molecularHash=null,this.createdAt=String(+new Date),this.cellSlugOrigin=this.cellSlug=r,this.secret=e,this.bundle=t,this.sourceWallet=n,this.continuIdPosition=a,this.atoms=[],this.parentHashes=[],i!==null&&Object.prototype.hasOwnProperty.call(Ne,i)&&(this.version=String(i)),(s||n)&&(this.remainderWallet=s||_.create({secret:e,bundle:t,token:n.token,batchId:n.batchId,characters:n.characters}))}withParentHashes(e){return this.parentHashes=Array.isArray(e)?[...e]:[],this}get cellSlugDelimiter(){return"."}static isotopeFilter(e,t){return Array.isArray(e)||(e=[e]),t.filter(n=>e.includes(n.isotope))}static generateNextAtomIndex(e){return e.length}static jsonToObject(e){const t=Object.assign(new V({}),JSON.parse(e)),n=Object.keys(new V({}));if(!Array.isArray(t.atoms))throw new se;for(const s in Object.keys(t.atoms)){t.atoms[s]=g.jsonToObject(JSON.stringify(t.atoms[s]));for(const r of["position","walletAddress","isotope"])if(t.atoms[s].isotope.toLowerCase()!=="r"&&(typeof t.atoms[s][r]>"u"||t.atoms[s][r]===null))throw new se("MolecularStructure::jsonToObject() - Required Atom properties are missing!")}for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&!n.includes(s)&&delete t[s];return t.atoms=g.sortAtoms(t.atoms),t}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},n=[],s=e.toLowerCase().split("");for(let r=0,i=s.length;r<i;++r){const a=s[r];typeof t[a]<"u"&&(n[r]=t[a])}return n}static normalize(e){let t=e.reduce((s,r)=>s+r);const n=t<0;for(;t<0||t>0;)for(const s of Object.keys(e))if((n?e[s]<8:e[s]>-8)&&(n?(++e[s],++t):(--e[s],--t),t===0))break;return e}getIsotopes(e){return V.isotopeFilter(e,this.atoms)}generateIndex(){return V.generateNextAtomIndex(this.atoms)}fill(e){for(const t in Object.keys(e))this[t]=e[t]}addAtom(e){return this.molecularHash=null,e.index=this.generateIndex(),e.version=this.version,this.atoms.push(e),this.atoms=g.sortAtoms(this.atoms),this}addContinuIdAtom(){(!this.remainderWallet||this.remainderWallet.token!=="USER")&&(this.remainderWallet=_.create({secret:this.secret,bundle:this.bundle}));const e={};return this.continuIdPosition?e.previousPosition=this.continuIdPosition:this.sourceWallet&&this.sourceWallet.position&&(e.previousPosition=this.sourceWallet.position),this.remainderWallet.pubkey&&(e.pubkey=this.remainderWallet.pubkey),this.remainderWallet.characters&&(e.characters=this.remainderWallet.characters),this.addAtom(g.create({isotope:"I",wallet:this.remainderWallet,metaType:"walletBundle",metaId:this.remainderWallet.bundle,meta:new U(e)})),this}addPolicyAtom({metaType:e,metaId:t,meta:n={},policy:s={}}){const r=new U(n);return r.addPolicy(s),this.addAtom(g.create({wallet:this.sourceWallet,isotope:"R",metaType:e,metaId:t,meta:r})),this}fuseToken(e,t){const n=e.length;if(this.sourceWallet.balance-n<0)throw new ae;return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-n})),this.addAtom(g.create({isotope:"F",wallet:t,value:1,metaType:"walletBundle",metaId:t.bundle})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-n,metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}burnToken({amount:e,walletBundle:t=null}){if(e<0)throw new Fe("Molecule::burnToken() - Amount to burn must be positive!");if(this.sourceWallet.balance-e<0)throw new ae;const n=new _({bundle:"0000000000000000000000000000000000000000000000000000000000000000",token:this.sourceWallet.token});return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-this.sourceWallet.balance})),this.addAtom(g.create({isotope:"V",wallet:n,value:e,metaType:"walletBundle",metaId:n.bundle})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-e,metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}replenishToken({amount:e,units:t=[]}){if(e<0)throw new Fe("Molecule::replenishToken() - Amount to replenish must be positive!");if(t.length){t=_.getTokenUnits(t),this.remainderWallet.tokenUnits=this.sourceWallet.tokenUnits;for(const n of t)this.remainderWallet.tokenUnits.push(n);this.remainderWallet.balance=String(this.remainderWallet.tokenUnits.length),this.sourceWallet.tokenUnits=t,this.sourceWallet.balance=String(this.sourceWallet.tokenUnits.length)}else this.remainderWallet.balance=String(Number(this.sourceWallet.balance)+e),this.sourceWallet.balance=String(e);return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:Number(this.sourceWallet.balance)})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:Number(this.remainderWallet.balance),metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}initValue({recipientWallet:e,amount:t}){if(this.sourceWallet.balance-t<0)throw new ae;return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-this.sourceWallet.balance})),this.addAtom(g.create({isotope:"V",wallet:e,value:t,metaType:"walletBundle",metaId:e.bundle})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-t,metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}addStackableTransfer({recipientWallet:e,amount:t}){if(t<=0)throw new Fe("Molecule::addStackableTransfer() - Amount must be positive!");if(this.sourceWallet.balance-t<0)throw new ae;const n=this.sourceWallet.batchId||ce({});return this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-t,batchId:n})),this.addAtom(g.create({isotope:"V",wallet:e,value:t,metaType:"walletBundle",metaId:e.bundle,batchId:ce({})})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-t,metaType:"walletBundle",metaId:this.remainderWallet.bundle,batchId:n})),this}initDepositBuffer({amount:e,tradeRates:t}){if(this.sourceWallet.balance-e<0)throw new ae;const n=_.create({secret:this.secret,bundle:this.bundle,token:this.sourceWallet.token,batchId:this.sourceWallet.batchId});return n.tradeRates=t,this.addAtom(g.create({isotope:"V",wallet:this.sourceWallet,value:-this.sourceWallet.balance})),this.addAtom(g.create({isotope:"B",wallet:n,value:e,metaType:"walletBundle",metaId:this.sourceWallet.bundle})),this.addAtom(g.create({isotope:"V",wallet:this.remainderWallet,value:this.sourceWallet.balance-e,metaType:"walletBundle",metaId:this.sourceWallet.bundle})),this}initWithdrawBuffer({recipients:e,signingWallet:t=null}){let n=0;for(const r of Object.values(e||{}))n+=r;if(this.sourceWallet.balance-n<0)throw new ae;const s=new U;t&&s.setSigningWallet(t),this.addAtom(g.create({isotope:"B",wallet:this.sourceWallet,value:-this.sourceWallet.balance,meta:s,metaType:"walletBundle",metaId:this.sourceWallet.bundle}));for(const[r,i]of Object.entries(e||{}))this.addAtom(new g({isotope:"V",token:this.sourceWallet.token,value:i,batchId:this.sourceWallet.batchId?ce({}):null,metaType:"walletBundle",metaId:r}));return this.addAtom(g.create({isotope:"B",wallet:this.remainderWallet,value:this.sourceWallet.balance-n,metaType:"walletBundle",metaId:this.remainderWallet.bundle})),this}initTokenCreation({recipientWallet:e,amount:t,meta:n}){const s=new U(n);return s.setMetaWallet(e),this.addAtom(g.create({isotope:"C",wallet:this.sourceWallet,value:t,metaType:"token",metaId:e.token,meta:s,batchId:e.batchId})),this.addContinuIdAtom(),this}createRule({metaType:e,metaId:t,rule:n,policy:s={}}){const r=[];for(const a of n)r.push(a instanceof Re?a:Re.toObject(a));const i=new U({rule:JSON.stringify(r)});return i.addPolicy(s),this.addAtom(g.create({isotope:"R",wallet:this.sourceWallet,metaType:e,metaId:t,meta:i})),this.addContinuIdAtom(),this}initWalletCreation(e,t=null){t||(t=new U),t.setMetaWallet(e);const n=g.create({isotope:"C",wallet:this.sourceWallet,metaType:"wallet",metaId:e.address,meta:t,batchId:e.batchId});return this.addAtom(n),this.addContinuIdAtom(),this}initShadowWalletClaim(e){const t=new U().setShadowWalletClaim(!0);return this.initWalletCreation(e,t)}initIdentifierCreation({type:e,contact:t,code:n}){const s={code:n,hash:pe(t.trim(),"Molecule::initIdentifierCreation")};return this.addAtom(g.create({isotope:"C",wallet:this.sourceWallet,metaType:"identifier",metaId:e,meta:new U(s)})),this.addContinuIdAtom(),this}initMeta({meta:e,metaType:t,metaId:n,policy:s}){return this.addAtom(g.create({isotope:"M",wallet:this.sourceWallet,metaType:t,metaId:n,meta:new U(e)})),s&&Object.keys(s).length>0&&this.addPolicyAtom({metaType:t,metaId:n,meta:e,policy:s}),this.addContinuIdAtom(),this}initPeering({host:e}){return this.addAtom(g.create({isotope:"P",wallet:this.sourceWallet,metaType:"walletBundle",metaId:this.bundle,meta:new U({peerHost:e})})),this.addContinuIdAtom(),this}initAppendRequest({metaType:e,metaId:t,action:n,meta:s={}}){return this.addAtom(g.create({isotope:"A",wallet:this.sourceWallet,metaType:e,metaId:t,meta:new U({action:n,...s})})),this.addContinuIdAtom(),this}initTokenRequest({token:e,amount:t,metaType:n,metaId:s,meta:r={},batchId:i=null}){return r.token=e,r.amount=String(t),this.addAtom(g.create({isotope:"T",wallet:this.sourceWallet,value:t,metaType:n,metaId:s,meta:new U(r),batchId:i})),this.addContinuIdAtom(),this}initAuthorization({meta:e}){return this.addAtom(g.create({isotope:"U",wallet:this.sourceWallet,meta:new U(e)})),this.addContinuIdAtom(),this}sign({bundle:e=null,anonymous:t=!1,compressed:n=!0}){if(this.atoms.length===0||this.atoms.filter(d=>!(d instanceof g)).length!==0)throw new se;!t&&!this.bundle&&(this.bundle=e||pe(this.secret,"Molecule::sign")),this.molecularHash=g.hashAtoms({atoms:this.atoms});const s=this.atoms[0];let r=s.position;const i=T.get(s.aggregatedMeta(),"signingWallet");if(i&&(r=T.get(JSON.parse(i),"position")),!r)throw new wt("Signing wallet must have a position!");const a=_.generateKey({secret:this.secret,token:s.token,position:s.position}),c=Te(a,128),u=this.normalizedHash();let l="";for(const d in c){let b=c[d];for(let A=0,E=8-u[d];A<E;A++)b=new F("SHAKE256","TEXT").update(b).getHash("HEX",{outputLen:512});l+=b}n&&(l=Kt(l));const h=Te(l,Math.ceil(l.length/this.atoms.length));let p=null;for(let d=0,b=h.length;d<b;d++)this.atoms[d].otsFragment=h[d],p=this.atoms[d].position;return p}signSync(e={}){return this.sign(e)}cellSlugBase(){return(this.cellSlug||"").split(this.cellSlugDelimiter)[0]}toJSON(e={}){const{includeValidationContext:t=!1,includeOtsFragments:n=!0}=e;try{const s={status:this.status,molecularHash:this.molecularHash,createdAt:this.createdAt,cellSlug:this.cellSlug,bundle:this.bundle,atoms:this.atoms.map(r=>r.toJSON({includeOtsFragments:n}))};return this.parentHashes&&this.parentHashes.length>0&&(s.parentHashes=this.parentHashes),t&&(s.cellSlugOrigin=this.cellSlugOrigin,s.version=this.version,this.sourceWallet&&(s.sourceWallet={address:this.sourceWallet.address,position:this.sourceWallet.position,token:this.sourceWallet.token,balance:this.sourceWallet.balance||"0",bundle:this.sourceWallet.bundle,batchId:this.sourceWallet.batchId||null,characters:this.sourceWallet.characters||"BASE64",pubkey:this.sourceWallet.pubkey||null,tokenUnits:this.sourceWallet.tokenUnits||[],tradeRates:this.sourceWallet.tradeRates||{},molecules:this.sourceWallet.molecules||{}}),this.remainderWallet&&(s.remainderWallet={address:this.remainderWallet.address,position:this.remainderWallet.position,token:this.remainderWallet.token,balance:this.remainderWallet.balance||"0",bundle:this.remainderWallet.bundle,batchId:this.remainderWallet.batchId||null,characters:this.remainderWallet.characters||"BASE64",pubkey:this.remainderWallet.pubkey||null,tokenUnits:this.remainderWallet.tokenUnits||[],tradeRates:this.remainderWallet.tradeRates||{},molecules:this.remainderWallet.molecules||{}})),s}catch(s){throw new Error(`Molecule serialization failed: ${s.message}`)}}static fromJSON(e,t={}){const{includeValidationContext:n=!1,validateStructure:s=!0}=t;try{const r=typeof e=="string"?JSON.parse(e):e;if(s&&(!r.molecularHash||!Array.isArray(r.atoms)))throw new Error("Invalid molecule data: missing molecularHash or atoms array");const i=new V({secret:null,bundle:r.bundle||null,cellSlug:r.cellSlug||null,version:r.version||null});return i.status=r.status,i.molecularHash=r.molecularHash,i.createdAt=r.createdAt||String(+new Date),i.cellSlugOrigin=r.cellSlugOrigin,i.parentHashes=Array.isArray(r.parentHashes)?[...r.parentHashes]:[],Array.isArray(r.atoms)&&(i.atoms=r.atoms.map((a,c)=>{try{return g.fromJSON(a)}catch(u){throw new Error(`Failed to reconstruct atom ${c}: ${u.message}`)}})),n&&(r.sourceWallet&&(i.sourceWallet=new _({secret:null,token:r.sourceWallet.token,position:r.sourceWallet.position,bundle:r.sourceWallet.bundle,batchId:r.sourceWallet.batchId,characters:r.sourceWallet.characters}),i.sourceWallet.balance=String(r.sourceWallet.balance!=null?r.sourceWallet.balance:0),i.sourceWallet.address=r.sourceWallet.address,r.sourceWallet.pubkey&&(i.sourceWallet.pubkey=r.sourceWallet.pubkey),i.sourceWallet.tokenUnits=r.sourceWallet.tokenUnits||[],i.sourceWallet.tradeRates=r.sourceWallet.tradeRates||{},i.sourceWallet.molecules=r.sourceWallet.molecules||{}),r.remainderWallet&&(i.remainderWallet=new _({secret:null,token:r.remainderWallet.token,position:r.remainderWallet.position,bundle:r.remainderWallet.bundle,batchId:r.remainderWallet.batchId,characters:r.remainderWallet.characters}),i.remainderWallet.balance=String(r.remainderWallet.balance!=null?r.remainderWallet.balance:0),i.remainderWallet.address=r.remainderWallet.address,r.remainderWallet.pubkey&&(i.remainderWallet.pubkey=r.remainderWallet.pubkey),i.remainderWallet.tokenUnits=r.remainderWallet.tokenUnits||[],i.remainderWallet.tradeRates=r.remainderWallet.tradeRates||{},i.remainderWallet.molecules=r.remainderWallet.molecules||{})),i}catch(r){throw new Error(`Molecule deserialization failed: ${r.message}`)}}check(e=null){return new we(this).verify(e)}normalizedHash(){return V.normalize(V.enumerate(this.molecularHash))}}class ke{constructor({token:e,expiresAt:t,encrypt:n,pubkey:s}){this.$__token=e,this.$__expiresAt=t,this.$__pubkey=s,this.$__encrypt=n}static create(e,t){const n=new ke(e);return n.setWallet(t),n}static restore(e,t){const n=new _({secret:t,token:"AUTH",position:e.wallet.position,characters:e.wallet.characters});return ke.create({token:e.token,expiresAt:e.expiresAt,pubkey:e.pubkey,encrypt:e.encrypt},n)}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 this.$__expiresAt*1e3-Date.now()}isExpired(){return!this.$__expiresAt||this.getExpireInterval()<0}getAuthData(){return{token:this.getToken(),pubkey:this.getPubkey(),wallet:this.getWallet()}}}const it=10**18;class he{static val(e){return Math.abs(e*it)<1?0:e}static cmp(e,t,n=!1){const s=he.val(e)*it,r=he.val(t)*it;return Math.abs(s-r)<1?0:s>r?1:-1}static equal(e,t){return he.cmp(e,t)===0}}class te extends I{constructor(e="GraphQL did not provide a valid response.",t=null,n=null){super(e,t,n),this.name="InvalidResponseException"}}class Ee extends I{constructor(e="Authorization token missing or invalid.",t=null,n=null){super(e,t,n),this.name="UnauthenticatedException"}}class C{constructor({query:e,json:t,dataKey:n=null}){if(this.dataKey=n,this.errorKey="exception",this.$__payload=null,this.$__query=e,this.$__originResponse=t,this.$__response=t,typeof this.$__response>"u"||this.$__response===null)throw new te;if(T.has(this.$__response,this.errorKey)){const s=T.get(this.$__response,this.errorKey);throw String(s).includes("Unauthenticated")?new Ee:new te}if(this.$__response.errors&&Array.isArray(this.$__response.errors)&&this.$__response.errors.length>0){const s=this.$__response.errors[0].message||"Unknown GraphQL error";throw s.includes("Unauthenticated")?new Ee:new te(`GraphQL Error: ${s}`)}this.init()}init(){}data(){if(!this.dataKey)return this.response();if(!this.response().data)throw new te("Response has no data field");if(!T.has(this.response(),this.dataKey))throw new te(`Missing expected field: ${this.dataKey}`);return T.get(this.response(),this.dataKey)}response(){return this.$__response}payload(){return null}query(){return this.$__query}status(){return null}success(){var e,t;return!((t=(e=this.$__response)==null?void 0:e.errors)!=null&&t.length)}error(){var e,t;return(t=(e=this.$__response)==null?void 0:e.errors)!=null&&t.length?this.$__response.errors[0].message||"Unknown error":null}reason(){return this.error()}toValidationResult(){var e;return this.success()&&this.payload()!==null?{success:!0,data:this.payload(),warnings:[]}:{success:!1,error:{message:this.reason()||"Unknown error",context:this.constructor.name,details:((e=this.$__response)==null?void 0:e.errors)||[]}}}onSuccess(e){if(this.success()&&this.payload()!==null)try{e(this.payload())}catch(t){console.warn("Response.onSuccess callback failed:",t)}return this}onFailure(e){if(!this.success())try{e(this.reason()||"Unknown error")}catch(t){console.warn("Response.onFailure callback failed:",t)}return this}debug(e=null){var n,s,r;const t=e?`[${e}]`:`[${this.constructor.name}]`;return this.success()?console.debug(`${t} Success:`,{payload:this.payload(),query:(s=(n=this.$__query)==null?void 0:n.constructor)==null?void 0:s.name,dataKey:this.dataKey}):console.debug(`${t} Failure:`,{error:this.reason(),errors:(r=this.$__response)==null?void 0:r.errors,rawData:this.$__response}),this}toPromise(){return this.success()&&this.payload()!==null?Promise.resolve(this.payload()):Promise.reject(new Error(this.reason()||"Unknown error"))}map(e){if(this.success()&&this.payload()!==null)try{const t=e(this.payload()),n=Object.create(Object.getPrototypeOf(this));return Object.assign(n,this),n.$__payload=t,n}catch(t){const n=Object.create(Object.getPrototypeOf(this));return Object.assign(n,this),n.$__response={errors:[{message:`Mapping failed: ${t.message}`}]},n}else return this}}class H{constructor(e,t){this.client=e,this.knishIOClient=t,this.$__variables=null,this.$__query=null,this.$__response=null,this.$__request=null}response(){return this.$__response}async createResponseRaw(e){return this.createResponse(e)}createResponse(e){return new C({query:this,json:e})}createQuery({variables:e=null}){if(this.$__variables=this.compiledVariables(e),!this.uri())throw new ee("Query::createQuery() - Node URI was not initialized for this client instance!");if(this.$__query===null)throw new ee("Query::createQuery() - GraphQL subscription was not initialized!");return{query:this.$__query,variables:this.variables()}}async execute({variables:e=null,context:t={}}){this.$__request=this.createQuery({variables:e});const n={...t,...this.createQueryContext()};try{const s=await this.client.query({...this.$__request,context:n});return this.$__response=await this.createResponseRaw(s),this.$__response}catch(s){if(s.name==="AbortError")return this.knishIOClient.log("warn","Query was cancelled"),new C({query:this,json:{data:null,errors:[{message:"Query was cancelled"}]}});throw s}}compiledVariables(e=null){return e||{}}uri(){return this.client.getUri()}variables(){return this.$__variables}createQueryContext(){return{}}}class un extends C{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 _({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=String(t.amount!=null?t.amount:0)),e}}class hn extends H{constructor(e,t){super(e,t),this.$__query=x.gql`query ($bundle: String!) {
|
|
5
5
|
ContinuId(bundle: $bundle) {
|
|
6
6
|
address,
|
|
7
7
|
bundleHash,
|
|
@@ -171,7 +171,7 @@ ${this.stack}`}}class se extends I{constructor(e="The molecule does not contain
|
|
|
171
171
|
processedAt,
|
|
172
172
|
broadcastedAt,
|
|
173
173
|
}
|
|
174
|
-
}`}compiledVariables(e){return{...super.compiledVariables(e),molecule:this.molecule()}}createResponse(e){return new L({query:this,json:e})}async execute({variables:e=null}){return e=e||{},e.molecule=this.molecule(),super.execute({variables:e})}remainderWallet(){return this.$__remainderWallet}molecule(){return this.$__molecule}}class wn extends L{payloadKey(e){if(!T.has(this.payload(),e))throw new te(`ResponseRequestAuthorization::payloadKey() - '${e}' key was not found in the payload!`);return T.get(this.payload(),e)}token(){return this.payloadKey("token")}time(){return this.payloadKey("time")}expiresAt(){try{const t=this.payloadKey("expiresAt");if(t)return Number(t)}catch{}const e=Number(this.time());return e>=1577836800?e:Math.floor(Date.now()/1e3)+Math.floor(e/1e3)}encrypt(){return this.payloadKey("encrypt")}pubKey(){return this.payloadKey("key")}}class kn extends W{fillMolecule({meta:e}){this.$__molecule.initAuthorization({meta:e}),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new wn({query:this,json:e})}}class Sn extends L{}class _n extends W{fillMolecule({recipientWallet:e,amount:t,meta:n=null}){this.$__molecule.initTokenCreation({recipientWallet:e,amount:t,meta:n||{}}),this.$__molecule.sign({bundle:e.bundle}),this.$__molecule.check()}createResponse(e){return new Sn({query:this,json:e})}}class $n extends L{}class An extends W{fillMolecule({token:e,amount:t,metaType:n,metaId:s,meta:r=null,batchId:i=null}){this.$__molecule.initTokenRequest({token:e,amount:t,metaType:n,metaId:s,meta:r||{},batchId:i}),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new $n({query:this,json:e})}}class vn extends L{payload(){const e={reason:null,status:null},t=this.data();return e.reason=typeof t.reason>"u"?"Invalid response from server":t.reason,e.status=typeof t.status>"u"?"rejected":t.status,e}}class xn extends W{fillMolecule({recipientWallet:e,amount:t}){this.$__molecule.initValue({recipientWallet:e,amount:t}),this.$__molecule.sign({}),this.$__molecule.check(this.$__molecule.sourceWallet)}createResponse(e){return new vn({query:this,json:e})}}class In extends L{}class Mn extends W{fillMolecule({type:e,contact:t,code:n}){this.$__molecule.initIdentifierCreation({type:e,contact:t,code:n}),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new In({query:this,json:e})}}class Tn extends L{}class Cn extends W{fillMolecule({token:e,batchId:t=null}){const n=_.create({secret:this.$__molecule.secret,bundle:this.$__molecule.bundle,token:e,batchId:t});this.$__molecule.initShadowWalletClaim(n),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new Tn({query:this,json:e})}}class
|
|
174
|
+
}`}compiledVariables(e){return{...super.compiledVariables(e),molecule:this.molecule()}}createResponse(e){return new L({query:this,json:e})}async execute({variables:e=null}){return e=e||{},e.molecule=this.molecule(),super.execute({variables:e})}remainderWallet(){return this.$__remainderWallet}molecule(){return this.$__molecule}}class wn extends L{payloadKey(e){if(!T.has(this.payload(),e))throw new te(`ResponseRequestAuthorization::payloadKey() - '${e}' key was not found in the payload!`);return T.get(this.payload(),e)}token(){return this.payloadKey("token")}time(){return this.payloadKey("time")}expiresAt(){try{const t=this.payloadKey("expiresAt");if(t)return Number(t)}catch{}const e=Number(this.time());return e>=1577836800?e:Math.floor(Date.now()/1e3)+Math.floor(e/1e3)}encrypt(){return this.payloadKey("encrypt")}pubKey(){return this.payloadKey("key")}}class kn extends W{fillMolecule({meta:e}){this.$__molecule.initAuthorization({meta:e}),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new wn({query:this,json:e})}}class Sn extends L{}class _n extends W{fillMolecule({recipientWallet:e,amount:t,meta:n=null}){this.$__molecule.initTokenCreation({recipientWallet:e,amount:t,meta:n||{}}),this.$__molecule.sign({bundle:e.bundle}),this.$__molecule.check()}createResponse(e){return new Sn({query:this,json:e})}}class $n extends L{}class An extends W{fillMolecule({token:e,amount:t,metaType:n,metaId:s,meta:r=null,batchId:i=null}){this.$__molecule.initTokenRequest({token:e,amount:t,metaType:n,metaId:s,meta:r||{},batchId:i}),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new $n({query:this,json:e})}}class vn extends L{payload(){const e={reason:null,status:null},t=this.data();return e.reason=typeof t.reason>"u"?"Invalid response from server":t.reason,e.status=typeof t.status>"u"?"rejected":t.status,e}}class xn extends W{fillMolecule({recipientWallet:e,amount:t}){this.$__molecule.initValue({recipientWallet:e,amount:t}),this.$__molecule.sign({}),this.$__molecule.check(this.$__molecule.sourceWallet)}createResponse(e){return new vn({query:this,json:e})}}class In extends L{}class Mn extends W{fillMolecule({type:e,contact:t,code:n}){this.$__molecule.initIdentifierCreation({type:e,contact:t,code:n}),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new In({query:this,json:e})}}class Tn extends L{}class Cn extends W{fillMolecule({token:e,batchId:t=null}){const n=_.create({secret:this.$__molecule.secret,bundle:this.$__molecule.bundle,token:e,batchId:t});this.$__molecule.initShadowWalletClaim(n),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new Tn({query:this,json:e})}}class Rn extends L{}class En extends W{fillMolecule({metaType:e,metaId:t,meta:n,policy:s}){this.$__molecule.initMeta({meta:n,metaType:e,metaId:t,policy:s}),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new Rn({query:this,json:e})}}class qn extends L{}class On extends W{fillMolecule({host:e}){this.$__molecule.initPeering({host:e}),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new qn({query:this,json:e})}}class Wn extends L{}class Bn extends W{fillMolecule({metaType:e,metaId:t,action:n,meta:s={}}){this.$__molecule.initAppendRequest({metaType:e,metaId:t,action:n,meta:s}),this.$__molecule.sign({}),this.$__molecule.check()}createResponse(e){return new Wn({query:this,json:e})}}class Un extends C{constructor({query:e,json:t}){super({query:e,json:t,dataKey:"data.LinkIdentifier"})}success(){return T.get(this.data(),"set")}message(){return T.get(this.data(),"message")}}class Hn extends We{constructor(e,t){super(e,t),this.$__query=x.gql`mutation( $bundle: String!, $type: String!, $content: String! ) {
|
|
175
175
|
LinkIdentifier( bundle: $bundle, type: $type, content: $content ) {
|
|
176
176
|
type,
|
|
177
177
|
bundle,
|
|
@@ -463,7 +463,7 @@ ${this.stack}`}}class se extends I{constructor(e="The molecule does not contain
|
|
|
463
463
|
total
|
|
464
464
|
}
|
|
465
465
|
}
|
|
466
|
-
}`}static createVariables({molecularHashes:e,molecularHash:t,bundleHashes:n,bundleHash:s,positions:r,position:i,walletAddresses:a,walletAddress:c,isotopes:u,isotope:l,tokenSlugs:h,tokenSlug:p,cellSlugs:d,cellSlug:b,batchIds:A,batchId:
|
|
466
|
+
}`}static createVariables({molecularHashes:e,molecularHash:t,bundleHashes:n,bundleHash:s,positions:r,position:i,walletAddresses:a,walletAddress:c,isotopes:u,isotope:l,tokenSlugs:h,tokenSlug:p,cellSlugs:d,cellSlug:b,batchIds:A,batchId:E,values:f,value:m,metaTypes:w,metaType:R,metaIds:k,metaId:$,indexes:v,index:M,filter:S,latest:P,queryArgs:q}){return t&&(e=e||[],e.push(t)),s&&(n=n||[],n.push(s)),i&&(r=r||[],r.push(i)),c&&(a=a||[],a.push(c)),l&&(u=u||[],u.push(l)),p&&(h=h||[],h.push(p)),b&&(d=d||[],d.push(b)),E&&(A=A||[],A.push(E)),m&&(f=f||[],f.push(m)),R&&(w=w||[],w.push(R)),$&&(k=k||[],k.push($)),M&&(v=v||[],v.push(M)),{molecularHashes:e,bundleHashes:n,positions:r,walletAddresses:a,isotopes:u,tokenSlugs:h,cellSlugs:d,batchIds:A,values:f,metaTypes:w,metaIds:k,indexes:v,filter:S,latest:P,queryArgs:q}}createResponse(e){return new Xn({query:this,json:e})}}class Zn extends C{constructor({query:e,json:t}){super({query:e,json:t}),this.dataKey="data.Policy",this.init()}payload(){const e=this.data();return e&&e.callback?JSON.parse(e.callback):null}}class Yn extends H{constructor(e,t){super(e,t),this.$__query=x.gql`query( $metaType: String, $metaId: String, ) {
|
|
467
467
|
Policy( metaType: $metaType, metaId: $metaId ) {
|
|
468
468
|
molecularHash,
|
|
469
469
|
position,
|
|
@@ -581,5 +581,5 @@ ${this.stack}`}}class se extends I{constructor(e="The molecule does not contain
|
|
|
581
581
|
void main() {
|
|
582
582
|
gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color
|
|
583
583
|
}
|
|
584
|
-
`,s=y.createShader(y.VERTEX_SHADER),r=y.createShader(y.FRAGMENT_SHADER);if(!s||!r)throw new Error("Failed to create shaders");if(y.shaderSource(s,t),y.shaderSource(r,n),y.compileShader(s),!y.getShaderParameter(s,y.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+y.getShaderInfoLog(s));if(y.compileShader(r),!y.getShaderParameter(r,y.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+y.getShaderInfoLog(r));var i=y.createProgram();if(!i)throw new Error("Failed to create shader program");if(y.attachShader(i,s),y.attachShader(i,r),y.linkProgram(i),!y.getProgramParameter(i,y.LINK_STATUS))throw new Error("Shader program linking failed: "+y.getProgramInfoLog(i));y.useProgram(i);for(var a=137,c=new Float32Array(4*a),u=2*Math.PI/a,l=0;l<a;l++){var h=l*u;c[4*l]=0,c[4*l+1]=0,c[4*l+2]=Math.cos(h)*(N.width/2),c[4*l+3]=Math.sin(h)*(N.height/2)}var p=y.createBuffer();y.bindBuffer(y.ARRAY_BUFFER,p),y.bufferData(y.ARRAY_BUFFER,c,y.STATIC_DRAW);var d=y.getAttribLocation(i,"position");y.enableVertexAttribArray(d),y.vertexAttribPointer(d,2,y.FLOAT,!1,0,0),y.viewport(0,0,N.width,N.height),y.clearColor(0,0,0,1),y.clear(y.COLOR_BUFFER_BIT),y.drawArrays(y.LINES,0,2*a);var b=new Uint8ClampedArray(N.width*N.height*4);return y.readPixels(0,0,N.width,N.height,y.RGBA,y.UNSIGNED_BYTE,b),new ImageData(b,N.width,N.height)}catch{return new ImageData(1,1)}finally{y&&(y.bindBuffer(y.ARRAY_BUFFER,null),y.useProgram(null),y.viewport(0,0,y.drawingBufferWidth,y.drawingBufferHeight),y.clearColor(0,0,0,0))}})()})),[2,{commonImageHash:kt(cs(o,N.width,N.height).data.toString()).toString()}]}catch{return[2,{webgl:"unsupported"}]}return[2]}))}))}));var oe=function(o,e,t,n){for(var s=(t-e)/n,r=0,i=0;i<n;i++)r+=o(e+(i+.5)*s);return r*s};J("math",(function(){return Z(void 0,void 0,void 0,(function(){return Y(this,(function(o){return[2,{acos:Math.acos(.5),asin:oe(Math.asin,-1,1,97),atan:oe(Math.atan,-1,1,97),cos:oe(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:oe(Math.sin,-Math.PI,Math.PI,97),sinh:oe(Math.sinh,-9/7,7/9,97),sqrt:Math.sqrt(2),tan:oe(Math.tan,0,2*Math.PI,97),tanh:oe(Math.tanh,-9/7,7/9,97)}]}))}))}));class _r{constructor({serverUri:e,socket:t=null,encrypt:n=!1}){this.$__client=this.createUrqlClient({serverUri:e,socket:t,encrypt:n}),this.$__authToken="",this.$__pubkey=null,this.$__wallet=null,this.serverUri=e,this.soketi=t,this.cipherLink=!!n,this.$__subscriptionManager=new Map}createUrqlClient({serverUri:e,socket:t,encrypt:n}){const s=[x.cacheExchange,x.fetchExchange];if(t&&t.socketUri){const r=ps.createClient({url:t.socketUri,connectionParams:()=>({authToken:this.$__authToken})});s.push(x.subscriptionExchange({forwardSubscription:i=>({subscribe:a=>({unsubscribe:r.subscribe(i,a)})})}))}return x.createClient({url:e,exchanges:s,fetchOptions:()=>({headers:{"X-Auth-Token":this.$__authToken},signal:AbortSignal.timeout(6e4)})})}setAuthData({token:e,pubkey:t,wallet:n}){this.$__authToken=e,this.$__pubkey=t,this.$__wallet=n,this.$__client=this.createUrqlClient({serverUri:this.serverUri,socket:this.soketi,encrypt:!!this.cipherLink})}async query(e){const{query:t,variables:n,context:s}=e,r=s&&s.requestPolicy?{requestPolicy:s.requestPolicy}:void 0,i=await this.$__client.query(t,n||{},r).toPromise();return this.formatResponse(i)}async mutate(e){const{mutation:t,variables:n,context:s}=e,r=s&&s.requestPolicy?{requestPolicy:s.requestPolicy}:void 0,i=await this.$__client.mutation(t,n||{},r).toPromise();return this.formatResponse(i)}subscribe(e,t){const{query:n,variables:s,operationName:r}=e,i=Ye.pipe(this.$__client.subscription(n,s),Ye.map(a=>{t(this.formatResponse(a))}),Ye.subscribe(()=>{}));return this.$__subscriptionManager.set(r,i),{unsubscribe:()=>this.unsubscribe(r)}}formatResponse(e){return{data:e.data,errors:e.error?[e.error]:void 0}}socketDisconnect(){this.soketi&&this.unsubscribeAll()}unsubscribe(e){const t=this.$__subscriptionManager.get(e);t&&(t.unsubscribe(),this.$__subscriptionManager.delete(e))}unsubscribeAll(){this.$__subscriptionManager.forEach((e,t)=>{this.unsubscribe(t)})}unsubscribeFromChannel(e){this.unsubscribe(e)}setEncryption(e=!1){this.cipherLink=e,this.$__client=this.createUrqlClient({serverUri:this.serverUri,socket:this.soketi,encrypt:e})}getAuthToken(){return this.$__authToken}getPubKey(){return this.$__pubkey}getWallet(){return this.$__wallet}getServerUri(){return this.serverUri}getSocketUri(){return this.soketi?this.soketi.socketUri:null}getUri(){return this.serverUri}setUri(e){this.serverUri=e,this.$__client=this.createUrqlClient({serverUri:e,socket:this.soketi,encrypt:!!this.cipherLink})}setSocketUri({socketUri:e,appKey:t}){this.soketi={socketUri:e,appKey:t},this.$__client=this.createUrqlClient({serverUri:this.serverUri,socket:this.soketi,encrypt:!!this.cipherLink})}}class $r{constructor({uri:e,cellSlug:t=null,client:n=null,socket:s=null,serverSdkVersion:r=3,logging:i=!1,defaultRequestPolicy:a=null}){this.initialize({uri:e,cellSlug:t,socket:s,client:n,serverSdkVersion:r,logging:i,defaultRequestPolicy:a})}initialize({uri:e,cellSlug:t=null,socket:n=null,client:s=null,serverSdkVersion:r=3,logging:i=!1,defaultRequestPolicy:a=null}){this.reset(),this.$__logging=i,this.$__defaultRequestPolicy=a,this.$__authTokenObjects={},this.$__authInProcess=!1,this.abortControllers=new Map,this.setUri(e),t&&this.setCellSlug(t);for(const c in this.$__uris){const u=this.$__uris[c];this.$__authTokenObjects[u]=null}this.log("info",`KnishIOClient::initialize() - Initializing new Knish.IO client session for SDK version ${r}...`),this.$__client=s||new _r({socket:{socketUri:null,appKey:"knishio",...n||{}},serverUri:this.getRandomUri()}),this.$__serverSdkVersion=r}getRandomUri(){const e=Math.floor(Math.random()*this.$__uris.length);return this.$__uris[e]}switchEncryption(e){return this.$__encrypt===e?!1:(this.log("info",`KnishIOClient::switchEncryption() - Forcing encryption ${e?"on":"off"} to match node...`),this.$__encrypt=e,this.$__client.setEncryption(e),!0)}deinitialize(){this.log("info","KnishIOClient::deinitialize() - Clearing the Knish.IO client session..."),this.reset()}subscribe(){if(!this.client().getSocketUri())throw new ee("KnishIOClient::subscribe() - Socket client not initialized!");return this.client()}getServerSdkVersion(){return this.$__serverSdkVersion}getDefaultRequestPolicy(){return this.$__defaultRequestPolicy||null}setDefaultRequestPolicy(e){this.$__defaultRequestPolicy=e}reset(){this.$__secret="",this.$__bundle="",this.remainderWallet=null,this.$__capabilityCache={},this.$__defaultRequestPolicy=null}getCellSlug(){return this.$__cellSlug||null}setCellSlug(e){this.$__cellSlug=e}setUri(e){if(this.$__uris=typeof e=="object"?e:[e],this.$__client){const t=this.getRandomUri();this.$__client.setUri(t)}}setSocketUri(e){this.$__client&&typeof this.$__client.setSocketUri=="function"&&this.$__client.setSocketUri({socketUri:e,appKey:"knishio"})}getUri(){return this.$__client.getUri()}client(){if(!this.$__authInProcess){const e=this.getRandomUri();this.$__client.setUri(e);const t=this.$__authTokenObjects[e];t?this.$__client.setAuthData(t.getAuthData()):this.requestAuthToken({secret:this.$__secret,cellSlug:this.$__cellSlug,encrypt:this.$__encrypt}).catch(n=>{this.log("warn",`KnishIOClient::client() - Background authorization failed: ${n.message}`)})}return this.$__client}hasSecret(){return!!this.$__secret}setSecret(e){this.$__secret=e,this.$__bundle=this.hashSecret(e,"setSecret")}hashSecret(e,t=null){return this.log("info",`KnishIOClient::hashSecret(${t?`source: ${t}`:""}) - Computing wallet bundle from secret...`),pe(e)}getSecret(){if(!this.hasSecret())throw new Re("KnishIOClient::getSecret() - Unable to find a stored secret! Have you set a secret?");return this.$__secret}hasBundle(){return!!this.$__bundle}getBundle(){if(!this.hasBundle())throw new Re("KnishIOClient::getBundle() - Unable to find a stored bundle! Have you set a secret?");return this.$__bundle}getFingerprint(){return ur()}getFingerprintData(){return as()}async getSourceWallet(){let e=(await this.queryContinuId({bundle:this.getBundle()})).payload();return e?e.key=_.generateKey({secret:this.getSecret(),token:e.token,position:e.position}):e=new _({secret:this.getSecret()}),e}getRemainderWallet(){return this.remainderWallet}async createMolecule({secret:e=null,bundle:t=null,sourceWallet:n=null,remainderWallet:s=null}){this.log("info","KnishIOClient::createMolecule() - Creating a new molecule..."),e=e||this.getSecret(),t=t||this.getBundle();let r=null;if(n&&n.token!=="USER")if(this.lastMoleculeQuery&&this.getRemainderWallet()&&this.getRemainderWallet().token==="USER"&&this.lastMoleculeQuery.response()&&this.lastMoleculeQuery.response().success())r=this.getRemainderWallet().position;else{const i=await this.getSourceWallet();r=i?i.position:null}return!n&&this.lastMoleculeQuery&&this.getRemainderWallet().token==="USER"&&this.lastMoleculeQuery.response()&&this.lastMoleculeQuery.response().success()&&(n=this.getRemainderWallet()),n===null&&(n=await this.getSourceWallet()),this.remainderWallet=s||_.create({secret:e,bundle:t,token:"USER",batchId:n.batchId,characters:n.characters}),new V({secret:e,sourceWallet:n,remainderWallet:this.getRemainderWallet(),cellSlug:this.getCellSlug(),version:this.getServerSdkVersion(),continuIdPosition:r})}createQuery(e){return new e(this.client(),this)}createSubscribe(e){return new e(this.subscribe())}async createMoleculeMutation({mutationClass:e,molecule:t=null}){this.log("info",`KnishIOClient::createMoleculeQuery() - Creating a new ${e.name} query...`);const n=t||await this.createMolecule({}),s=new e(this.client(),this,n);if(!(s instanceof W))throw new ee(`${this.constructor.name}::createMoleculeMutation() - This method only accepts MutationProposeMolecule!`);return this.lastMoleculeQuery=s,s}async executeQuery(e,t=null,n={}){this.$__authToken&&this.$__authToken.isExpired()&&!this.$__authInProcess&&(this.log("info","KnishIOClient::executeQuery() - Access token is expired. Getting new one..."),await this.requestAuthToken({secret:this.$__secret,cellSlug:this.$__cellSlug,encrypt:this.$__encrypt}));const s=new AbortController,r=JSON.stringify({query:e.$__query,variables:t});this.abortControllers.set(r,s);try{const i={...n};this.$__defaultRequestPolicy&&!i.requestPolicy&&(i.requestPolicy=this.$__defaultRequestPolicy);const a=await e.execute({variables:t,context:{fetchOptions:{signal:s.signal},...i}});return this.abortControllers.delete(r),a}catch(i){if(i.name==="AbortError")this.log("warn","Query was cancelled");else throw i}}cancelQuery(e,t=null){const n=JSON.stringify({query:e.$__query,variables:t}),s=this.abortControllers.get(n);s&&(s.abort(),this.abortControllers.delete(n))}cancelAllQueries(){for(const e of this.abortControllers.values())e.abort();this.abortControllers.clear()}async queryBalance({token:e,bundle:t=null,type:n="regular"}){const s=this.createQuery(yn);return this.executeQuery(s,{bundleHash:t||this.getBundle(),token:e,type:n})}async querySourceWallet({token:e,amount:t,type:n="regular"}){const s=(await this.queryBalance({token:e,type:n})).payload();if(s===null||he.cmp(s.balance,t)<0)throw new G;if(!s.position||!s.address)throw new G("Source wallet can not be a shadow wallet.");return s}async subscribeCreateMolecule({bundle:e,closure:t}){return await this.createSubscribe(er).execute({variables:{bundle:e||this.getBundle()},closure:t})}subscribeWalletStatus({bundle:e,token:t,closure:n}){if(!t)throw new ee(`${this.constructor.name}::subscribeWalletStatus() - Token parameter is required!`);return this.createSubscribe(tr).execute({variables:{bundle:e||this.getBundle(),token:t},closure:n})}subscribeActiveWallet({bundle:e,closure:t}){return this.createSubscribe(nr).execute({variables:{bundle:e||this.getBundle()},closure:t})}subscribeActiveSession({metaType:e,metaId:t,closure:n}){return this.createSubscribe(sr).execute({variables:{metaType:e,metaId:t},closure:n})}unsubscribe(e){this.subscribe().unsubscribe(e)}unsubscribeAll(){this.subscribe().unsubscribeAll()}queryMeta({metaType:e,metaId:t=null,key:n=null,value:s=null,latest:r=!0,fields:i=null,filter:a=null,queryArgs:c=null,count:u=null,countBy:l=null,throughAtom:h=!0,throughMolecule:p=!1,values:d=null,keys:b=null,atomValues:A=null,requestPolicy:R=null}){this.log("info",`KnishIOClient::queryMeta() - Querying metaType: ${e}, metaId: ${t}...`);let f,m;return p?(f=this.createQuery(yt),m=yt.createVariables({metaType:e,metaId:t,key:n,value:s,latest:r,filter:a,queryArgs:c,countBy:l,values:d,keys:b,atomValues:A,cellSlug:this.getCellSlug()})):h?(f=this.createQuery(mt),m=mt.createVariables({metaType:e,metaId:t,key:n,value:s,latest:r,filter:a,queryArgs:c,countBy:l,values:d,keys:b,atomValues:A,cellSlug:this.getCellSlug()})):(f=this.createQuery(ht),m=ht.createVariables({metaType:e,metaId:t,key:n,value:s,latest:r,filter:a,queryArgs:c,count:u,countBy:l,cellSlug:this.getCellSlug()})),this.executeQuery(f,m,R?{requestPolicy:R}:{})}async queryMetaVerified(e){const t=await this.queryMeta(e),n=t.payload();return n&&(n.integrity=t.verifyIntegrity()),t}async hasQueryField(e){var s,r,i;const n=`${this.getUri()}::${e}`;if(typeof this.$__capabilityCache[n]=="boolean")return this.$__capabilityCache[n];try{const a=await this.$__client.query({query:"{ __schema { queryType { fields { name } } } }",variables:{}}),u=(((i=(r=(s=a==null?void 0:a.data)==null?void 0:s.__schema)==null?void 0:r.queryType)==null?void 0:i.fields)||[]).some(l=>l.name===e);return this.$__capabilityCache[n]=u,u}catch(a){return this.log("warn",`KnishIOClient::hasQueryField() - Capability probe for '${e}' failed: ${a.message}`),this.$__capabilityCache[n]=!1,!1}}async queryEmbeddingStatus({metaType:e=null,metaId:t=null,instances:n=null}){if(this.log("info",`KnishIOClient::queryEmbeddingStatus() - Checking embedding status for metaType: ${e||"(bulk)"}...`),!await this.hasQueryField("embeddingStatus"))return this.log("warn","KnishIOClient::queryEmbeddingStatus() - Server does not support embeddingStatus query. Returning null."),null;const r=this.createQuery(gt),i=gt.createVariables({metaType:e,metaId:t,instances:n});return this.executeQuery(r,i)}async queryBatch({batchId:e}){this.log("info",`KnishIOClient::queryBatch() - Querying cascading meta instances for batchId: ${e}...`);const t=this.createQuery(Se);return await this.executeQuery(t,{batchId:e})}async queryBatchHistory({batchId:e}){this.log("info",`KnishIOClient::queryBatchHistory() - Querying cascading meta instances for batchId: ${e}...`);const t=this.createQuery(bn);return await this.executeQuery(t,{batchId:e})}async queryAtom({molecularHashes:e,molecularHash:t,bundleHashes:n,bundleHash:s,positions:r,position:i,walletAddresses:a,walletAddress:c,isotopes:u,isotope:l,tokenSlugs:h,tokenSlug:p,cellSlugs:d,cellSlug:b,batchIds:A,batchId:R,values:f,value:m,metaTypes:w,metaType:E,metaIds:k,metaId:$,indexes:v,index:M,filter:S,latest:P,queryArgs:q={limit:15,offset:1}}){this.log("info","KnishIOClient::queryAtom() - Querying atom instances");const me=this.createQuery(ft);return await this.executeQuery(me,ft.createVariables({molecularHashes:e,molecularHash:t,bundleHashes:n,bundleHash:s,positions:r,position:i,walletAddresses:a,walletAddress:c,isotopes:u,isotope:l,tokenSlugs:h,tokenSlug:p,cellSlugs:d,cellSlug:b,batchIds:A,batchId:R,values:f,value:m,metaTypes:w,metaType:E,metaIds:k,metaId:$,indexes:v,index:M,filter:S,latest:P,queryArgs:q}))}async createWallet({token:e}){const t=new _({secret:this.getSecret(),token:e}),n=await this.createMoleculeMutation({mutationClass:Kn});return n.fillMolecule(t),await this.executeQuery(n)}async queryActiveSession({bundleHash:e,metaType:t,metaId:n}){const s=this.createQuery(Vn);return await this.executeQuery(s,{bundleHash:e,metaType:t,metaId:n})}async queryUserActivity({bundleHash:e,metaType:t,metaId:n,ipAddress:s,browser:r,osCpu:i,resolution:a,timeZone:c,countBy:u,interval:l}){const h=this.createQuery(Jn);return await this.executeQuery(h,{bundleHash:e,metaType:t,metaId:n,ipAddress:s,browser:r,osCpu:i,resolution:a,timeZone:c,countBy:u,interval:l})}async activeSession({bundle:e,metaType:t,metaId:n,ipAddress:s,browser:r,osCpu:i,resolution:a,timeZone:c,json:u={}}){const l=this.createQuery(jn);return await this.executeQuery(l,{bundleHash:e,metaType:t,metaId:n,ipAddress:s,browser:r,osCpu:i,resolution:a,timeZone:c,json:JSON.stringify(u)})}async createToken({token:e,amount:t=null,meta:n=null,batchId:s=null,units:r=[]}){const i=T.get(n||{},"fungibility");if(i==="stackable"&&(n.batchId=s||ce({})),["nonfungible","stackable"].includes(i)&&r.length>0){if(T.get(n||{},"decimals")>0)throw new Fn;if(t>0)throw new xe;t=r.length,n.splittable=1,n.decimals=0,n.tokenUnits=JSON.stringify(r)}const a=new _({secret:this.getSecret(),bundle:this.getBundle(),token:e,batchId:s}),c=await this.createMoleculeMutation({mutationClass:_n});return c.fillMolecule({recipientWallet:a,amount:t,meta:n||{}}),await this.executeQuery(c)}async createRule({metaType:e,metaId:t,rule:n,policy:s={}}){const r=await this.createMoleculeMutation({mutationClass:ss,molecule:await this.createMolecule({secret:this.getSecret()})});return r.fillMolecule({metaType:e,metaId:t,rule:n,policy:s}),await this.executeQuery(r)}async createMeta({metaType:e,metaId:t,meta:n=null,policy:s={}}){const r=await this.createMoleculeMutation({mutationClass:Rn,molecule:await this.createMolecule({secret:this.getSecret()})}),i=n||{};return r.fillMolecule({metaType:e,metaId:t,meta:i,policy:s}),await this.executeQuery(r)}async registerPeer({host:e}){const t=await this.createMoleculeMutation({mutationClass:On,molecule:await this.createMolecule({secret:this.getSecret()})});return t.fillMolecule({host:e}),await this.executeQuery(t)}async appendRequest({metaType:e,metaId:t,action:n,meta:s={}}){const r=await this.createMoleculeMutation({mutationClass:Bn,molecule:await this.createMolecule({secret:this.getSecret()})});return r.fillMolecule({metaType:e,metaId:t,action:n,meta:s}),await this.executeQuery(r)}async createIdentifier({type:e,contact:t,code:n}){const s=await this.createMoleculeMutation({mutationClass:Mn});return s.fillMolecule({type:e,contact:t,code:n}),await this.executeQuery(s)}async linkIdentifier({type:e,contact:t}){const n=this.createQuery(Hn);return await this.executeQuery(n,{bundle:this.getBundle(),type:e,content:t})}async createPolicy({metaType:e,metaId:t,policy:n={}}){const s=await this.createMolecule({});s.addPolicyAtom({metaType:e,metaId:t,meta:{},policy:n}),s.addContinuIdAtom(),s.sign({bundle:this.getBundle()}),s.check();const r=await this.createMoleculeMutation({mutationClass:W,molecule:s});return await this.executeQuery(r)}async queryPolicy({metaType:e,metaId:t}){const n=this.createQuery(Yn);return await this.executeQuery(n,{metaType:e,metaId:t})}queryWallets({bundle:e=null,token:t=null,unspent:n=!0}){this.log("info",`KnishIOClient::queryWallets() - Querying wallets${e?` for ${e}`:""}...`);const s=this.createQuery(fn);return this.executeQuery(s,{bundleHash:e||this.getBundle(),token:t,unspent:n}).then(r=>r.payload())}queryBundle({bundle:e=null,fields:t=null,raw:n=!1}){this.log("info",`KnishIOClient::queryBundle() - Querying wallet bundle metadata${e?` for ${e}`:""}...`),e||(e=this.getBundle()),typeof e=="string"&&(e=[e]);const s=this.createQuery(pn);return this.executeQuery(s,{bundleHashes:e}).then(r=>n?r:r.payload())}async queryContinuId({bundle:e}){const t=this.createQuery(hn);return this.executeQuery(t,{bundle:e})}async requestTokens({token:e,to:t,amount:n=null,units:s=[],meta:r=null,batchId:i=null}){let a,c;r=r||{};const u=this.createQuery(Gn),l=await this.executeQuery(u,{slug:e}),h=T.get(l.data(),"0.fungibility")==="stackable";if(!h&&i!==null)throw new Ie("Expected Batch ID = null for non-stackable tokens.");if(h&&i===null&&(i=ce({})),s.length>0){if(n>0)throw new xe;n=s.length,r.tokenUnits=JSON.stringify(s)}t?(Object.prototype.toString.call(t)==="[object String]"&&(_.isBundleHash(t)?(a="walletBundle",c=t):t=_.create({secret:t,token:e})),t instanceof _&&(a="wallet",r.position=t.position,r.bundle=t.bundle,c=t.address)):(a="walletBundle",c=this.getBundle());const p=await this.createMoleculeMutation({mutationClass:An});return p.fillMolecule({token:e,amount:n,metaType:a,metaId:c,meta:r,batchId:i}),await this.executeQuery(p)}async claimShadowWallet({token:e,batchId:t=null,molecule:n=null}){const s=await this.createMoleculeMutation({mutationClass:Cn,molecule:n});return s.fillMolecule({token:e,batchId:t}),await this.executeQuery(s)}async claimShadowWallets({token:e}){const t=await this.queryWallets({token:e});if(!t||!Array.isArray(t))throw new dt;t.forEach(s=>{if(!s.isShadow())throw new dt});const n=[];for(const s of t)n.push(await this.claimShadowWallet({token:e,batchId:s.batchId}));return n}async transferToken({bundleHash:e,token:t,amount:n=null,units:s=[],batchId:r=null,sourceWallet:i=null}){if(s.length>0){if(n>0)throw new xe;n=s.length}if(i===null&&(i=await this.querySourceWallet({token:t,amount:n})),i===null||he.cmp(i.balance,n)<0)throw new G;const a=_.create({bundle:e,token:t});r!==null?a.batchId=r:a.initBatchId({sourceWallet:i});const c=i.createRemainder(this.getSecret());i.splitUnits(s,c,a);const u=await this.createMolecule({sourceWallet:i,remainderWallet:c}),l=await this.createMoleculeMutation({mutationClass:xn,molecule:u});return l.fillMolecule({recipientWallet:a,amount:n}),await this.executeQuery(l)}async depositBufferToken({tokenSlug:e,amount:t,tradeRates:n,sourceWallet:s=null}){s===null&&(s=await this.querySourceWallet({token:e,amount:t}));const r=s.createRemainder(this.getSecret()),i=await this.createMolecule({sourceWallet:s,remainderWallet:r}),a=await this.createMoleculeMutation({mutationClass:rs,molecule:i});return a.fillMolecule({amount:t,tradeRates:n}),await this.executeQuery(a)}async withdrawBufferToken({tokenSlug:e,amount:t,sourceWallet:n=null,signingWallet:s=null}){n===null&&(n=await this.querySourceWallet({token:e,amount:t,type:"buffer"}));const r=n,i=await this.createMolecule({sourceWallet:n,remainderWallet:r}),a=await this.createMoleculeMutation({mutationClass:is,molecule:i}),c={};return c[this.getBundle()]=t,a.fillMolecule({recipients:c,signingWallet:s}),await this.executeQuery(a)}async burnTokens({token:e,amount:t=null,units:n=[],sourceWallet:s=null}){s===null&&(s=await this.querySourceWallet({token:e,amount:t}));const r=s.createRemainder(this.getSecret());if(n.length>0){if(t>0)throw new xe;t=n.length,s.splitUnits(n,r)}const i=await this.createMolecule({sourceWallet:s,remainderWallet:r});i.burnToken({amount:t}),i.sign({bundle:this.getBundle()}),i.check(s);const a=await this.createMoleculeMutation({mutationClass:W,molecule:i});return this.executeQuery(a)}async replenishToken({token:e,amount:t=null,units:n=[],sourceWallet:s=null}){if(s===null&&(s=(await this.queryBalance({token:e})).payload()),!s)throw new G("Source wallet is missing or invalid.");const r=s.createRemainder(this.getSecret()),i=await this.createMolecule({sourceWallet:s,remainderWallet:r});i.replenishToken({amount:t,units:n}),i.sign({bundle:this.getBundle()}),i.check();const a=await this.createMoleculeMutation({mutationClass:W,molecule:i});return this.executeQuery(a)}async fuseToken({bundleHash:e,tokenSlug:t,newTokenUnit:n,fusedTokenUnitIds:s,sourceWallet:r=null}){if(r===null&&(r=(await this.queryBalance({token:t})).payload()),r===null)throw new G("Source wallet is missing or invalid.");if(!r.tokenUnits||!r.tokenUnits.length)throw new G("Source wallet does not have token units.");if(!s.length)throw new G("Fused token unit list is empty.");const i=[];r.tokenUnits.forEach(h=>{i.push(h.id)}),s.forEach(h=>{if(!i.includes(h))throw new G(`Fused token unit ID = ${h} does not found in the source wallet.`)});const a=_.create({bundle:e,token:t});a.initBatchId({sourceWallet:r});const c=r.createRemainder(this.getSecret());r.splitUnits(s,c),typeof n=="string"&&(n=new fe(n,n,{})),n.metas.fusedTokenUnits=r.getTokenUnitsData(),a.tokenUnits=[n];const u=await this.createMolecule({sourceWallet:r,remainderWallet:c});u.fuseToken(r.tokenUnits,a),u.sign({bundle:this.getBundle()}),u.check();const l=await this.createMoleculeMutation({mutationClass:W,molecule:u});return this.executeQuery(l)}async requestGuestAuthToken({cellSlug:e,encrypt:t}){this.setCellSlug(e);const n=new _({secret:Le(await this.getFingerprint()),token:"AUTH"}),s=await this.createQuery(Qn),r={cellSlug:e,pubkey:n.pubkey,encrypt:t},i=await s.execute({variables:r});if(i.success()){const a=ke.create({token:i.token(),expiresAt:i.expiresAt(),pubkey:i.pubKey(),encrypt:i.encrypt()},n);this.setAuthToken(a)}else throw new pt(`KnishIOClient::requestGuestAuthToken() - Authorization attempt rejected by ledger. Reason: ${i.reason()}`);return i}async requestProfileAuthToken({secret:e,encrypt:t}){this.setSecret(e);const n=new _({secret:e,token:"AUTH"}),s=await this.createMolecule({secret:e,sourceWallet:n}),r=await this.createMoleculeMutation({mutationClass:kn,molecule:s});r.fillMolecule({meta:{encrypt:t?"true":"false"}});const i=await r.execute({});if(i.success()){const a=ke.create({token:i.token(),expiresAt:i.expiresAt(),pubkey:i.pubKey(),encrypt:i.encrypt()},n);this.setAuthToken(a)}else throw new pt(`KnishIOClient::requestProfileAuthToken() - Authorization attempt rejected by ledger. Reason: ${i.reason()}`);return i}async requestAuthToken({secret:e=null,seed:t=null,cellSlug:n=null,encrypt:s=!1}){if(this.$__serverSdkVersion<3)return this.log("warn","KnishIOClient::authorize() - Server SDK version does not require an authorization..."),null;e===null&&t&&(e=Le(t)),n&&this.setCellSlug(n),this.$__authInProcess=!0;let r;return e?r=await this.requestProfileAuthToken({secret:e,encrypt:s}):r=await this.requestGuestAuthToken({cellSlug:n,encrypt:s}),this.log("info",`KnishIOClient::authorize() - Successfully retrieved auth token ${this.$__authToken.getToken()}...`),this.switchEncryption(s),this.$__authInProcess=!1,r}setAuthToken(e){if(!e){this.log("info","KnishIOClient::setAuthToken() - authToken object is empty.");return}this.$__authTokenObjects[this.getUri()]=e,this.client().setAuthData(e.getAuthData()),this.$__authToken=e}getAuthToken(){return this.$__authToken}log(e,t){if(this.$__logging)switch(e){case"info":console.info(t);break;case"warn":console.warn(t);break;case"error":console.error(t);break;default:console.log(t)}}}class Ar extends C{constructor({query:e,json:t}){super({query:e,json:t,dataKey:"data.AccessToken"})}reason(){return"Invalid response from server"}success(){return this.payload()!==null}payload(){return this.data()}payloadKey(e){if(!T.has(this.payload(),e))throw new te(`ResponseAuthorizationGuest::payloadKey() - '${e}' key is not found in the payload!`);return T.get(this.payload(),e)}token(){return this.payloadKey("token")}time(){return this.payloadKey("time")}}exports.Atom=g;exports.AtomIndexException=ge;exports.AtomMeta=U;exports.AtomsMissingException=se;exports.AuthToken=ke;exports.AuthorizationRejectedException=pt;exports.BalanceInsufficientException=ae;exports.BatchIdException=Ie;exports.CheckMolecule=we;exports.CodeException=ee;exports.Decimal=he;exports.Dot=T;exports.InvalidResponseException=te;exports.KnishIOClient=$r;exports.Meta=de;exports.MetaMissingException=B;exports.MolecularHashMismatchException=on;exports.MolecularHashMissingException=an;exports.Molecule=V;exports.Mutation=We;exports.MutationActiveSession=jn;exports.MutationAppendRequest=Bn;exports.MutationClaimShadowWallet=Cn;exports.MutationCreateIdentifier=Mn;exports.MutationCreateMeta=Rn;exports.MutationCreateRule=ss;exports.MutationCreateToken=_n;exports.MutationCreateWallet=Kn;exports.MutationDepositBufferToken=rs;exports.MutationLinkIdentifier=Hn;exports.MutationPeering=On;exports.MutationProposeMolecule=W;exports.MutationRequestAuthorization=kn;exports.MutationRequestAuthorizationGuest=Qn;exports.MutationRequestTokens=An;exports.MutationTransferTokens=xn;exports.MutationWithdrawBufferToken=is;exports.NegativeAmountException=Fe;exports.PolicyInvalidException=lt;exports.PolicyMeta=Ve;exports.Query=H;exports.QueryActiveSession=Vn;exports.QueryAtom=ft;exports.QueryBalance=yn;exports.QueryBatch=Se;exports.QueryBatchHistory=bn;exports.QueryContinuId=hn;exports.QueryEmbeddingStatus=gt;exports.QueryMetaType=ht;exports.QueryMetaTypeViaAtom=mt;exports.QueryMetaTypeViaMolecule=yt;exports.QueryPolicy=Yn;exports.QueryToken=Gn;exports.QueryUserActivity=Jn;exports.QueryWalletBundle=pn;exports.QueryWalletList=fn;exports.Response=C;exports.ResponseActiveSession=Ln;exports.ResponseAppendRequest=Wn;exports.ResponseAtom=Xn;exports.ResponseAuthorizationGuest=Ar;exports.ResponseBalance=mn;exports.ResponseClaimShadowWallet=Tn;exports.ResponseContinuId=un;exports.ResponseCreateIdentifier=In;exports.ResponseCreateMeta=En;exports.ResponseCreateRule=ns;exports.ResponseCreateToken=Sn;exports.ResponseCreateWallet=Pn;exports.ResponseEmbeddingStatus=ts;exports.ResponseLinkIdentifier=Un;exports.ResponseMetaType=gn;exports.ResponseMetaTypeViaAtom=es;exports.ResponseMetaTypeViaMolecule=Xe;exports.ResponsePeering=qn;exports.ResponsePolicy=Zn;exports.ResponseProposeMolecule=L;exports.ResponseQueryActiveSession=Dn;exports.ResponseQueryUserActivity=zn;exports.ResponseRequestAuthorization=wn;exports.ResponseRequestAuthorizationGuest=Nn;exports.ResponseRequestTokens=$n;exports.ResponseTransferTokens=vn;exports.ResponseWalletBundle=dn;exports.ResponseWalletList=Oe;exports.SignatureMalformedException=wt;exports.SignatureMismatchException=ln;exports.StackableUnitAmountException=xe;exports.StackableUnitDecimalsException=Fn;exports.TokenUnit=fe;exports.TransferBalanceException=G;exports.TransferMalformedException=be;exports.TransferMismatchedException=ct;exports.TransferRemainderException=ut;exports.TransferToSelfException=cn;exports.TransferUnbalancedException=ve;exports.UnauthenticatedException=Re;exports.Wallet=_;exports.WalletShadowException=dt;exports.WrongTokenTypeException=ne;exports.base64ToHex=Nt;exports.bufferToHexString=Ht;exports.charsetBaseConvert=Ut;exports.chunkArray=Ft;exports.chunkSubstr=Te;exports.deepCloning=Lt;exports.diff=jt;exports.generateBatchId=ce;exports.generateBundleHash=pe;exports.generateSecret=Le;exports.hexStringToBuffer=Pt;exports.hexToBase64=Kt;exports.intersect=ye;exports.isHex=Ke;exports.isNumeric=Qt;exports.randomString=De;exports.shake256=at;
|
|
584
|
+
`,s=y.createShader(y.VERTEX_SHADER),r=y.createShader(y.FRAGMENT_SHADER);if(!s||!r)throw new Error("Failed to create shaders");if(y.shaderSource(s,t),y.shaderSource(r,n),y.compileShader(s),!y.getShaderParameter(s,y.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+y.getShaderInfoLog(s));if(y.compileShader(r),!y.getShaderParameter(r,y.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+y.getShaderInfoLog(r));var i=y.createProgram();if(!i)throw new Error("Failed to create shader program");if(y.attachShader(i,s),y.attachShader(i,r),y.linkProgram(i),!y.getProgramParameter(i,y.LINK_STATUS))throw new Error("Shader program linking failed: "+y.getProgramInfoLog(i));y.useProgram(i);for(var a=137,c=new Float32Array(4*a),u=2*Math.PI/a,l=0;l<a;l++){var h=l*u;c[4*l]=0,c[4*l+1]=0,c[4*l+2]=Math.cos(h)*(N.width/2),c[4*l+3]=Math.sin(h)*(N.height/2)}var p=y.createBuffer();y.bindBuffer(y.ARRAY_BUFFER,p),y.bufferData(y.ARRAY_BUFFER,c,y.STATIC_DRAW);var d=y.getAttribLocation(i,"position");y.enableVertexAttribArray(d),y.vertexAttribPointer(d,2,y.FLOAT,!1,0,0),y.viewport(0,0,N.width,N.height),y.clearColor(0,0,0,1),y.clear(y.COLOR_BUFFER_BIT),y.drawArrays(y.LINES,0,2*a);var b=new Uint8ClampedArray(N.width*N.height*4);return y.readPixels(0,0,N.width,N.height,y.RGBA,y.UNSIGNED_BYTE,b),new ImageData(b,N.width,N.height)}catch{return new ImageData(1,1)}finally{y&&(y.bindBuffer(y.ARRAY_BUFFER,null),y.useProgram(null),y.viewport(0,0,y.drawingBufferWidth,y.drawingBufferHeight),y.clearColor(0,0,0,0))}})()})),[2,{commonImageHash:kt(cs(o,N.width,N.height).data.toString()).toString()}]}catch{return[2,{webgl:"unsupported"}]}return[2]}))}))}));var oe=function(o,e,t,n){for(var s=(t-e)/n,r=0,i=0;i<n;i++)r+=o(e+(i+.5)*s);return r*s};J("math",(function(){return Z(void 0,void 0,void 0,(function(){return Y(this,(function(o){return[2,{acos:Math.acos(.5),asin:oe(Math.asin,-1,1,97),atan:oe(Math.atan,-1,1,97),cos:oe(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:oe(Math.sin,-Math.PI,Math.PI,97),sinh:oe(Math.sinh,-9/7,7/9,97),sqrt:Math.sqrt(2),tan:oe(Math.tan,0,2*Math.PI,97),tanh:oe(Math.tanh,-9/7,7/9,97)}]}))}))}));class _r{constructor({serverUri:e,socket:t=null,encrypt:n=!1}){this.$__client=this.createUrqlClient({serverUri:e,socket:t,encrypt:n}),this.$__authToken="",this.$__pubkey=null,this.$__wallet=null,this.serverUri=e,this.soketi=t,this.cipherLink=!!n,this.$__subscriptionManager=new Map}createUrqlClient({serverUri:e,socket:t,encrypt:n}){const s=[x.cacheExchange,x.fetchExchange];if(t&&t.socketUri){const r=ps.createClient({url:t.socketUri,connectionParams:()=>({authToken:this.$__authToken})});s.push(x.subscriptionExchange({forwardSubscription:i=>({subscribe:a=>({unsubscribe:r.subscribe(i,a)})})}))}return x.createClient({url:e,exchanges:s,fetchOptions:()=>({headers:{"X-Auth-Token":this.$__authToken},signal:AbortSignal.timeout(6e4)})})}setAuthData({token:e,pubkey:t,wallet:n}){this.$__authToken=e,this.$__pubkey=t,this.$__wallet=n,this.$__client=this.createUrqlClient({serverUri:this.serverUri,socket:this.soketi,encrypt:!!this.cipherLink})}buildRequestOptions(e){if(!e)return;const t={};e.requestPolicy&&(t.requestPolicy=e.requestPolicy);const n=e.fetchOptions&&e.fetchOptions.signal;if(n){const s=typeof AbortSignal<"u"&&typeof AbortSignal.any=="function"?AbortSignal.any([n,AbortSignal.timeout(6e4)]):n;t.fetchOptions={headers:{"X-Auth-Token":this.$__authToken},signal:s}}return Object.keys(t).length?t:void 0}async query(e){const{query:t,variables:n,context:s}=e,r=this.buildRequestOptions(s),i=await this.$__client.query(t,n||{},r).toPromise();return this.formatResponse(i)}async mutate(e){const{mutation:t,variables:n,context:s}=e,r=this.buildRequestOptions(s),i=await this.$__client.mutation(t,n||{},r).toPromise();return this.formatResponse(i)}subscribe(e,t){const{query:n,variables:s,operationName:r}=e,i=Ye.pipe(this.$__client.subscription(n,s),Ye.map(a=>{t(this.formatResponse(a))}),Ye.subscribe(()=>{}));return this.$__subscriptionManager.set(r,i),{unsubscribe:()=>this.unsubscribe(r)}}formatResponse(e){return{data:e.data,errors:e.error?[e.error]:void 0}}socketDisconnect(){this.soketi&&this.unsubscribeAll()}unsubscribe(e){const t=this.$__subscriptionManager.get(e);t&&(t.unsubscribe(),this.$__subscriptionManager.delete(e))}unsubscribeAll(){this.$__subscriptionManager.forEach((e,t)=>{this.unsubscribe(t)})}unsubscribeFromChannel(e){this.unsubscribe(e)}setEncryption(e=!1){this.cipherLink=e,this.$__client=this.createUrqlClient({serverUri:this.serverUri,socket:this.soketi,encrypt:e})}getAuthToken(){return this.$__authToken}getPubKey(){return this.$__pubkey}getWallet(){return this.$__wallet}getServerUri(){return this.serverUri}getSocketUri(){return this.soketi?this.soketi.socketUri:null}getUri(){return this.serverUri}setUri(e){this.serverUri=e,this.$__client=this.createUrqlClient({serverUri:e,socket:this.soketi,encrypt:!!this.cipherLink})}setSocketUri({socketUri:e,appKey:t}){this.soketi={socketUri:e,appKey:t},this.$__client=this.createUrqlClient({serverUri:this.serverUri,socket:this.soketi,encrypt:!!this.cipherLink})}}class $r{constructor({uri:e,cellSlug:t=null,client:n=null,socket:s=null,serverSdkVersion:r=3,logging:i=!1,defaultRequestPolicy:a=null}){this.initialize({uri:e,cellSlug:t,socket:s,client:n,serverSdkVersion:r,logging:i,defaultRequestPolicy:a})}initialize({uri:e,cellSlug:t=null,socket:n=null,client:s=null,serverSdkVersion:r=3,logging:i=!1,defaultRequestPolicy:a=null}){this.reset(),this.$__logging=i,this.$__defaultRequestPolicy=a,this.$__authTokenObjects={},this.$__authInProcess=!1,this.abortControllers=new Map,this.setUri(e),t&&this.setCellSlug(t);for(const c in this.$__uris){const u=this.$__uris[c];this.$__authTokenObjects[u]=null}this.log("info",`KnishIOClient::initialize() - Initializing new Knish.IO client session for SDK version ${r}...`),this.$__client=s||new _r({socket:{socketUri:null,appKey:"knishio",...n||{}},serverUri:this.getRandomUri()}),this.$__serverSdkVersion=r}getRandomUri(){const e=Math.floor(Math.random()*this.$__uris.length);return this.$__uris[e]}switchEncryption(e){return this.$__encrypt===e?!1:(this.log("info",`KnishIOClient::switchEncryption() - Forcing encryption ${e?"on":"off"} to match node...`),this.$__encrypt=e,this.$__client.setEncryption(e),!0)}deinitialize(){this.log("info","KnishIOClient::deinitialize() - Clearing the Knish.IO client session..."),this.reset()}subscribe(){if(!this.client().getSocketUri())throw new ee("KnishIOClient::subscribe() - Socket client not initialized!");return this.client()}getServerSdkVersion(){return this.$__serverSdkVersion}getDefaultRequestPolicy(){return this.$__defaultRequestPolicy||null}setDefaultRequestPolicy(e){this.$__defaultRequestPolicy=e}reset(){this.$__secret="",this.$__bundle="",this.remainderWallet=null,this.$__capabilityCache={},this.$__defaultRequestPolicy=null}getCellSlug(){return this.$__cellSlug||null}setCellSlug(e){this.$__cellSlug=e}setUri(e){if(this.$__uris=typeof e=="object"?e:[e],this.$__client){const t=this.getRandomUri();this.$__client.setUri(t)}}setSocketUri(e){this.$__client&&typeof this.$__client.setSocketUri=="function"&&this.$__client.setSocketUri({socketUri:e,appKey:"knishio"})}getUri(){return this.$__client.getUri()}client(){if(!this.$__authInProcess){const e=this.getRandomUri();this.$__client.setUri(e);const t=this.$__authTokenObjects[e];t?this.$__client.setAuthData(t.getAuthData()):this.requestAuthToken({secret:this.$__secret,cellSlug:this.$__cellSlug,encrypt:this.$__encrypt}).catch(n=>{this.log("warn",`KnishIOClient::client() - Background authorization failed: ${n.message}`)})}return this.$__client}hasSecret(){return!!this.$__secret}setSecret(e){this.$__secret=e,this.$__bundle=this.hashSecret(e,"setSecret")}hashSecret(e,t=null){return this.log("info",`KnishIOClient::hashSecret(${t?`source: ${t}`:""}) - Computing wallet bundle from secret...`),pe(e)}getSecret(){if(!this.hasSecret())throw new Ee("KnishIOClient::getSecret() - Unable to find a stored secret! Have you set a secret?");return this.$__secret}hasBundle(){return!!this.$__bundle}getBundle(){if(!this.hasBundle())throw new Ee("KnishIOClient::getBundle() - Unable to find a stored bundle! Have you set a secret?");return this.$__bundle}getFingerprint(){return ur()}getFingerprintData(){return as()}async getSourceWallet(){let e=(await this.queryContinuId({bundle:this.getBundle()})).payload();return e?e.key=_.generateKey({secret:this.getSecret(),token:e.token,position:e.position}):e=new _({secret:this.getSecret()}),e}getRemainderWallet(){return this.remainderWallet}async createMolecule({secret:e=null,bundle:t=null,sourceWallet:n=null,remainderWallet:s=null}){this.log("info","KnishIOClient::createMolecule() - Creating a new molecule..."),e=e||this.getSecret(),t=t||this.getBundle();let r=null;if(n&&n.token!=="USER")if(this.lastMoleculeQuery&&this.getRemainderWallet()&&this.getRemainderWallet().token==="USER"&&this.lastMoleculeQuery.response()&&this.lastMoleculeQuery.response().success())r=this.getRemainderWallet().position;else{const i=await this.getSourceWallet();r=i?i.position:null}return!n&&this.lastMoleculeQuery&&this.getRemainderWallet().token==="USER"&&this.lastMoleculeQuery.response()&&this.lastMoleculeQuery.response().success()&&(n=this.getRemainderWallet()),n===null&&(n=await this.getSourceWallet()),this.remainderWallet=s||_.create({secret:e,bundle:t,token:"USER",batchId:n.batchId,characters:n.characters}),new V({secret:e,sourceWallet:n,remainderWallet:this.getRemainderWallet(),cellSlug:this.getCellSlug(),version:this.getServerSdkVersion(),continuIdPosition:r})}createQuery(e){return new e(this.client(),this)}createSubscribe(e){return new e(this.subscribe())}async createMoleculeMutation({mutationClass:e,molecule:t=null}){this.log("info",`KnishIOClient::createMoleculeQuery() - Creating a new ${e.name} query...`);const n=t||await this.createMolecule({}),s=new e(this.client(),this,n);if(!(s instanceof W))throw new ee(`${this.constructor.name}::createMoleculeMutation() - This method only accepts MutationProposeMolecule!`);return this.lastMoleculeQuery=s,s}async executeQuery(e,t=null,n={}){this.$__authToken&&this.$__authToken.isExpired()&&!this.$__authInProcess&&(this.log("info","KnishIOClient::executeQuery() - Access token is expired. Getting new one..."),await this.requestAuthToken({secret:this.$__secret,cellSlug:this.$__cellSlug,encrypt:this.$__encrypt}));const s=new AbortController,r=JSON.stringify({query:e.$__query,variables:t});this.abortControllers.set(r,s);try{const i={...n};this.$__defaultRequestPolicy&&!i.requestPolicy&&(i.requestPolicy=this.$__defaultRequestPolicy);const a=await e.execute({variables:t,context:{fetchOptions:{signal:s.signal},...i}});return this.abortControllers.delete(r),a}catch(i){if(i.name==="AbortError")this.log("warn","Query was cancelled");else throw i}}cancelQuery(e,t=null){const n=JSON.stringify({query:e.$__query,variables:t}),s=this.abortControllers.get(n);s&&(s.abort(),this.abortControllers.delete(n))}cancelAllQueries(){for(const e of this.abortControllers.values())e.abort();this.abortControllers.clear()}async queryBalance({token:e,bundle:t=null,type:n="regular"}){const s=this.createQuery(yn);return this.executeQuery(s,{bundleHash:t||this.getBundle(),token:e,type:n})}async querySourceWallet({token:e,amount:t,type:n="regular"}){const s=(await this.queryBalance({token:e,type:n})).payload();if(s===null||he.cmp(s.balance,t)<0)throw new G;if(!s.position||!s.address)throw new G("Source wallet can not be a shadow wallet.");return s}async subscribeCreateMolecule({bundle:e,closure:t}){return await this.createSubscribe(er).execute({variables:{bundle:e||this.getBundle()},closure:t})}subscribeWalletStatus({bundle:e,token:t,closure:n}){if(!t)throw new ee(`${this.constructor.name}::subscribeWalletStatus() - Token parameter is required!`);return this.createSubscribe(tr).execute({variables:{bundle:e||this.getBundle(),token:t},closure:n})}subscribeActiveWallet({bundle:e,closure:t}){return this.createSubscribe(nr).execute({variables:{bundle:e||this.getBundle()},closure:t})}subscribeActiveSession({metaType:e,metaId:t,closure:n}){return this.createSubscribe(sr).execute({variables:{metaType:e,metaId:t},closure:n})}unsubscribe(e){this.subscribe().unsubscribe(e)}unsubscribeAll(){this.subscribe().unsubscribeAll()}queryMeta({metaType:e,metaId:t=null,key:n=null,value:s=null,latest:r=!0,fields:i=null,filter:a=null,queryArgs:c=null,count:u=null,countBy:l=null,throughAtom:h=!0,throughMolecule:p=!1,values:d=null,keys:b=null,atomValues:A=null,requestPolicy:E=null}){this.log("info",`KnishIOClient::queryMeta() - Querying metaType: ${e}, metaId: ${t}...`);let f,m;return p?(f=this.createQuery(yt),m=yt.createVariables({metaType:e,metaId:t,key:n,value:s,latest:r,filter:a,queryArgs:c,countBy:l,values:d,keys:b,atomValues:A,cellSlug:this.getCellSlug()})):h?(f=this.createQuery(mt),m=mt.createVariables({metaType:e,metaId:t,key:n,value:s,latest:r,filter:a,queryArgs:c,countBy:l,values:d,keys:b,atomValues:A,cellSlug:this.getCellSlug()})):(f=this.createQuery(ht),m=ht.createVariables({metaType:e,metaId:t,key:n,value:s,latest:r,filter:a,queryArgs:c,count:u,countBy:l,cellSlug:this.getCellSlug()})),this.executeQuery(f,m,E?{requestPolicy:E}:{})}async queryMetaVerified(e){const t=await this.queryMeta(e),n=t.payload();return n&&(n.integrity=t.verifyIntegrity()),t}async hasQueryField(e){var s,r,i;const n=`${this.getUri()}::${e}`;if(typeof this.$__capabilityCache[n]=="boolean")return this.$__capabilityCache[n];try{const a=await this.$__client.query({query:"{ __schema { queryType { fields { name } } } }",variables:{}}),u=(((i=(r=(s=a==null?void 0:a.data)==null?void 0:s.__schema)==null?void 0:r.queryType)==null?void 0:i.fields)||[]).some(l=>l.name===e);return this.$__capabilityCache[n]=u,u}catch(a){return this.log("warn",`KnishIOClient::hasQueryField() - Capability probe for '${e}' failed: ${a.message}`),this.$__capabilityCache[n]=!1,!1}}async queryEmbeddingStatus({metaType:e=null,metaId:t=null,instances:n=null}){if(this.log("info",`KnishIOClient::queryEmbeddingStatus() - Checking embedding status for metaType: ${e||"(bulk)"}...`),!await this.hasQueryField("embeddingStatus"))return this.log("warn","KnishIOClient::queryEmbeddingStatus() - Server does not support embeddingStatus query. Returning null."),null;const r=this.createQuery(gt),i=gt.createVariables({metaType:e,metaId:t,instances:n});return this.executeQuery(r,i)}async queryBatch({batchId:e}){this.log("info",`KnishIOClient::queryBatch() - Querying cascading meta instances for batchId: ${e}...`);const t=this.createQuery(Se);return await this.executeQuery(t,{batchId:e})}async queryBatchHistory({batchId:e}){this.log("info",`KnishIOClient::queryBatchHistory() - Querying cascading meta instances for batchId: ${e}...`);const t=this.createQuery(bn);return await this.executeQuery(t,{batchId:e})}async queryAtom({molecularHashes:e,molecularHash:t,bundleHashes:n,bundleHash:s,positions:r,position:i,walletAddresses:a,walletAddress:c,isotopes:u,isotope:l,tokenSlugs:h,tokenSlug:p,cellSlugs:d,cellSlug:b,batchIds:A,batchId:E,values:f,value:m,metaTypes:w,metaType:R,metaIds:k,metaId:$,indexes:v,index:M,filter:S,latest:P,queryArgs:q={limit:15,offset:1}}){this.log("info","KnishIOClient::queryAtom() - Querying atom instances");const me=this.createQuery(ft);return await this.executeQuery(me,ft.createVariables({molecularHashes:e,molecularHash:t,bundleHashes:n,bundleHash:s,positions:r,position:i,walletAddresses:a,walletAddress:c,isotopes:u,isotope:l,tokenSlugs:h,tokenSlug:p,cellSlugs:d,cellSlug:b,batchIds:A,batchId:E,values:f,value:m,metaTypes:w,metaType:R,metaIds:k,metaId:$,indexes:v,index:M,filter:S,latest:P,queryArgs:q}))}async createWallet({token:e}){const t=new _({secret:this.getSecret(),token:e}),n=await this.createMoleculeMutation({mutationClass:Kn});return n.fillMolecule(t),await this.executeQuery(n)}async queryActiveSession({bundleHash:e,metaType:t,metaId:n}){const s=this.createQuery(Vn);return await this.executeQuery(s,{bundleHash:e,metaType:t,metaId:n})}async queryUserActivity({bundleHash:e,metaType:t,metaId:n,ipAddress:s,browser:r,osCpu:i,resolution:a,timeZone:c,countBy:u,interval:l}){const h=this.createQuery(Jn);return await this.executeQuery(h,{bundleHash:e,metaType:t,metaId:n,ipAddress:s,browser:r,osCpu:i,resolution:a,timeZone:c,countBy:u,interval:l})}async activeSession({bundle:e,metaType:t,metaId:n,ipAddress:s,browser:r,osCpu:i,resolution:a,timeZone:c,json:u={}}){const l=this.createQuery(jn);return await this.executeQuery(l,{bundleHash:e,metaType:t,metaId:n,ipAddress:s,browser:r,osCpu:i,resolution:a,timeZone:c,json:JSON.stringify(u)})}async createToken({token:e,amount:t=null,meta:n=null,batchId:s=null,units:r=[]}){const i=T.get(n||{},"fungibility");if(i==="stackable"&&(n.batchId=s||ce({})),["nonfungible","stackable"].includes(i)&&r.length>0){if(T.get(n||{},"decimals")>0)throw new Fn;if(t>0)throw new xe;t=r.length,n.splittable=1,n.decimals=0,n.tokenUnits=JSON.stringify(r)}const a=new _({secret:this.getSecret(),bundle:this.getBundle(),token:e,batchId:s}),c=await this.createMoleculeMutation({mutationClass:_n});return c.fillMolecule({recipientWallet:a,amount:t,meta:n||{}}),await this.executeQuery(c)}async createRule({metaType:e,metaId:t,rule:n,policy:s={}}){const r=await this.createMoleculeMutation({mutationClass:ss,molecule:await this.createMolecule({secret:this.getSecret()})});return r.fillMolecule({metaType:e,metaId:t,rule:n,policy:s}),await this.executeQuery(r)}async createMeta({metaType:e,metaId:t,meta:n=null,policy:s={}}){const r=await this.createMoleculeMutation({mutationClass:En,molecule:await this.createMolecule({secret:this.getSecret()})}),i=n||{};return r.fillMolecule({metaType:e,metaId:t,meta:i,policy:s}),await this.executeQuery(r)}async registerPeer({host:e}){const t=await this.createMoleculeMutation({mutationClass:On,molecule:await this.createMolecule({secret:this.getSecret()})});return t.fillMolecule({host:e}),await this.executeQuery(t)}async appendRequest({metaType:e,metaId:t,action:n,meta:s={}}){const r=await this.createMoleculeMutation({mutationClass:Bn,molecule:await this.createMolecule({secret:this.getSecret()})});return r.fillMolecule({metaType:e,metaId:t,action:n,meta:s}),await this.executeQuery(r)}async createIdentifier({type:e,contact:t,code:n}){const s=await this.createMoleculeMutation({mutationClass:Mn});return s.fillMolecule({type:e,contact:t,code:n}),await this.executeQuery(s)}async linkIdentifier({type:e,contact:t}){const n=this.createQuery(Hn);return await this.executeQuery(n,{bundle:this.getBundle(),type:e,content:t})}async createPolicy({metaType:e,metaId:t,policy:n={}}){const s=await this.createMolecule({});s.addPolicyAtom({metaType:e,metaId:t,meta:{},policy:n}),s.addContinuIdAtom(),s.sign({bundle:this.getBundle()}),s.check();const r=await this.createMoleculeMutation({mutationClass:W,molecule:s});return await this.executeQuery(r)}async queryPolicy({metaType:e,metaId:t}){const n=this.createQuery(Yn);return await this.executeQuery(n,{metaType:e,metaId:t})}queryWallets({bundle:e=null,token:t=null,unspent:n=!0}){this.log("info",`KnishIOClient::queryWallets() - Querying wallets${e?` for ${e}`:""}...`);const s=this.createQuery(fn);return this.executeQuery(s,{bundleHash:e||this.getBundle(),token:t,unspent:n}).then(r=>r.payload())}queryBundle({bundle:e=null,fields:t=null,raw:n=!1}){this.log("info",`KnishIOClient::queryBundle() - Querying wallet bundle metadata${e?` for ${e}`:""}...`),e||(e=this.getBundle()),typeof e=="string"&&(e=[e]);const s=this.createQuery(pn);return this.executeQuery(s,{bundleHashes:e}).then(r=>n?r:r.payload())}async queryContinuId({bundle:e}){const t=this.createQuery(hn);return this.executeQuery(t,{bundle:e})}async requestTokens({token:e,to:t,amount:n=null,units:s=[],meta:r=null,batchId:i=null}){let a,c;r=r||{};const u=this.createQuery(Gn),l=await this.executeQuery(u,{slug:e}),h=T.get(l.data(),"0.fungibility")==="stackable";if(!h&&i!==null)throw new Ie("Expected Batch ID = null for non-stackable tokens.");if(h&&i===null&&(i=ce({})),s.length>0){if(n>0)throw new xe;n=s.length,r.tokenUnits=JSON.stringify(s)}t?(Object.prototype.toString.call(t)==="[object String]"&&(_.isBundleHash(t)?(a="walletBundle",c=t):t=_.create({secret:t,token:e})),t instanceof _&&(a="wallet",r.position=t.position,r.bundle=t.bundle,c=t.address)):(a="walletBundle",c=this.getBundle());const p=await this.createMoleculeMutation({mutationClass:An});return p.fillMolecule({token:e,amount:n,metaType:a,metaId:c,meta:r,batchId:i}),await this.executeQuery(p)}async claimShadowWallet({token:e,batchId:t=null,molecule:n=null}){const s=await this.createMoleculeMutation({mutationClass:Cn,molecule:n});return s.fillMolecule({token:e,batchId:t}),await this.executeQuery(s)}async claimShadowWallets({token:e}){const t=await this.queryWallets({token:e});if(!t||!Array.isArray(t))throw new dt;t.forEach(s=>{if(!s.isShadow())throw new dt});const n=[];for(const s of t)n.push(await this.claimShadowWallet({token:e,batchId:s.batchId}));return n}async transferToken({bundleHash:e,token:t,amount:n=null,units:s=[],batchId:r=null,sourceWallet:i=null}){if(s.length>0){if(n>0)throw new xe;n=s.length}if(i===null&&(i=await this.querySourceWallet({token:t,amount:n})),i===null||he.cmp(i.balance,n)<0)throw new G;const a=_.create({bundle:e,token:t});r!==null?a.batchId=r:a.initBatchId({sourceWallet:i});const c=i.createRemainder(this.getSecret());i.splitUnits(s,c,a);const u=await this.createMolecule({sourceWallet:i,remainderWallet:c}),l=await this.createMoleculeMutation({mutationClass:xn,molecule:u});return l.fillMolecule({recipientWallet:a,amount:n}),await this.executeQuery(l)}async depositBufferToken({tokenSlug:e,amount:t,tradeRates:n,sourceWallet:s=null}){s===null&&(s=await this.querySourceWallet({token:e,amount:t}));const r=s.createRemainder(this.getSecret()),i=await this.createMolecule({sourceWallet:s,remainderWallet:r}),a=await this.createMoleculeMutation({mutationClass:rs,molecule:i});return a.fillMolecule({amount:t,tradeRates:n}),await this.executeQuery(a)}async withdrawBufferToken({tokenSlug:e,amount:t,sourceWallet:n=null,signingWallet:s=null}){n===null&&(n=await this.querySourceWallet({token:e,amount:t,type:"buffer"}));const r=n,i=await this.createMolecule({sourceWallet:n,remainderWallet:r}),a=await this.createMoleculeMutation({mutationClass:is,molecule:i}),c={};return c[this.getBundle()]=t,a.fillMolecule({recipients:c,signingWallet:s}),await this.executeQuery(a)}async burnTokens({token:e,amount:t=null,units:n=[],sourceWallet:s=null}){s===null&&(s=await this.querySourceWallet({token:e,amount:t}));const r=s.createRemainder(this.getSecret());if(n.length>0){if(t>0)throw new xe;t=n.length,s.splitUnits(n,r)}const i=await this.createMolecule({sourceWallet:s,remainderWallet:r});i.burnToken({amount:t}),i.sign({bundle:this.getBundle()}),i.check(s);const a=await this.createMoleculeMutation({mutationClass:W,molecule:i});return this.executeQuery(a)}async replenishToken({token:e,amount:t=null,units:n=[],sourceWallet:s=null}){if(s===null&&(s=(await this.queryBalance({token:e})).payload()),!s)throw new G("Source wallet is missing or invalid.");const r=s.createRemainder(this.getSecret()),i=await this.createMolecule({sourceWallet:s,remainderWallet:r});i.replenishToken({amount:t,units:n}),i.sign({bundle:this.getBundle()}),i.check();const a=await this.createMoleculeMutation({mutationClass:W,molecule:i});return this.executeQuery(a)}async fuseToken({bundleHash:e,tokenSlug:t,newTokenUnit:n,fusedTokenUnitIds:s,sourceWallet:r=null}){if(r===null&&(r=(await this.queryBalance({token:t})).payload()),r===null)throw new G("Source wallet is missing or invalid.");if(!r.tokenUnits||!r.tokenUnits.length)throw new G("Source wallet does not have token units.");if(!s.length)throw new G("Fused token unit list is empty.");const i=[];r.tokenUnits.forEach(h=>{i.push(h.id)}),s.forEach(h=>{if(!i.includes(h))throw new G(`Fused token unit ID = ${h} does not found in the source wallet.`)});const a=_.create({bundle:e,token:t});a.initBatchId({sourceWallet:r});const c=r.createRemainder(this.getSecret());r.splitUnits(s,c),typeof n=="string"&&(n=new fe(n,n,{})),n.metas.fusedTokenUnits=r.getTokenUnitsData(),a.tokenUnits=[n];const u=await this.createMolecule({sourceWallet:r,remainderWallet:c});u.fuseToken(r.tokenUnits,a),u.sign({bundle:this.getBundle()}),u.check();const l=await this.createMoleculeMutation({mutationClass:W,molecule:u});return this.executeQuery(l)}async requestGuestAuthToken({cellSlug:e,encrypt:t}){this.setCellSlug(e);const n=new _({secret:Le(await this.getFingerprint()),token:"AUTH"}),s=await this.createQuery(Qn),r={cellSlug:e,pubkey:n.pubkey,encrypt:t},i=await s.execute({variables:r});if(i.success()){const a=ke.create({token:i.token(),expiresAt:i.expiresAt(),pubkey:i.pubKey(),encrypt:i.encrypt()},n);this.setAuthToken(a)}else throw new pt(`KnishIOClient::requestGuestAuthToken() - Authorization attempt rejected by ledger. Reason: ${i.reason()}`);return i}async requestProfileAuthToken({secret:e,encrypt:t}){this.setSecret(e);const n=new _({secret:e,token:"AUTH"}),s=await this.createMolecule({secret:e,sourceWallet:n}),r=await this.createMoleculeMutation({mutationClass:kn,molecule:s});r.fillMolecule({meta:{encrypt:t?"true":"false"}});const i=await r.execute({});if(i.success()){const a=ke.create({token:i.token(),expiresAt:i.expiresAt(),pubkey:i.pubKey(),encrypt:i.encrypt()},n);this.setAuthToken(a)}else throw new pt(`KnishIOClient::requestProfileAuthToken() - Authorization attempt rejected by ledger. Reason: ${i.reason()}`);return i}async requestAuthToken({secret:e=null,seed:t=null,cellSlug:n=null,encrypt:s=!1}){if(this.$__serverSdkVersion<3)return this.log("warn","KnishIOClient::authorize() - Server SDK version does not require an authorization..."),null;e===null&&t&&(e=Le(t)),n&&this.setCellSlug(n),this.$__authInProcess=!0;let r;return e?r=await this.requestProfileAuthToken({secret:e,encrypt:s}):r=await this.requestGuestAuthToken({cellSlug:n,encrypt:s}),this.log("info",`KnishIOClient::authorize() - Successfully retrieved auth token ${this.$__authToken.getToken()}...`),this.switchEncryption(s),this.$__authInProcess=!1,r}setAuthToken(e){if(!e){this.log("info","KnishIOClient::setAuthToken() - authToken object is empty.");return}this.$__authTokenObjects[this.getUri()]=e,this.client().setAuthData(e.getAuthData()),this.$__authToken=e}getAuthToken(){return this.$__authToken}log(e,t){if(this.$__logging)switch(e){case"info":console.info(t);break;case"warn":console.warn(t);break;case"error":console.error(t);break;default:console.log(t)}}}class Ar extends C{constructor({query:e,json:t}){super({query:e,json:t,dataKey:"data.AccessToken"})}reason(){return"Invalid response from server"}success(){return this.payload()!==null}payload(){return this.data()}payloadKey(e){if(!T.has(this.payload(),e))throw new te(`ResponseAuthorizationGuest::payloadKey() - '${e}' key is not found in the payload!`);return T.get(this.payload(),e)}token(){return this.payloadKey("token")}time(){return this.payloadKey("time")}}exports.Atom=g;exports.AtomIndexException=ge;exports.AtomMeta=U;exports.AtomsMissingException=se;exports.AuthToken=ke;exports.AuthorizationRejectedException=pt;exports.BalanceInsufficientException=ae;exports.BatchIdException=Ie;exports.CheckMolecule=we;exports.CodeException=ee;exports.Decimal=he;exports.Dot=T;exports.InvalidResponseException=te;exports.KnishIOClient=$r;exports.Meta=de;exports.MetaMissingException=B;exports.MolecularHashMismatchException=on;exports.MolecularHashMissingException=an;exports.Molecule=V;exports.Mutation=We;exports.MutationActiveSession=jn;exports.MutationAppendRequest=Bn;exports.MutationClaimShadowWallet=Cn;exports.MutationCreateIdentifier=Mn;exports.MutationCreateMeta=En;exports.MutationCreateRule=ss;exports.MutationCreateToken=_n;exports.MutationCreateWallet=Kn;exports.MutationDepositBufferToken=rs;exports.MutationLinkIdentifier=Hn;exports.MutationPeering=On;exports.MutationProposeMolecule=W;exports.MutationRequestAuthorization=kn;exports.MutationRequestAuthorizationGuest=Qn;exports.MutationRequestTokens=An;exports.MutationTransferTokens=xn;exports.MutationWithdrawBufferToken=is;exports.NegativeAmountException=Fe;exports.PolicyInvalidException=lt;exports.PolicyMeta=Ve;exports.Query=H;exports.QueryActiveSession=Vn;exports.QueryAtom=ft;exports.QueryBalance=yn;exports.QueryBatch=Se;exports.QueryBatchHistory=bn;exports.QueryContinuId=hn;exports.QueryEmbeddingStatus=gt;exports.QueryMetaType=ht;exports.QueryMetaTypeViaAtom=mt;exports.QueryMetaTypeViaMolecule=yt;exports.QueryPolicy=Yn;exports.QueryToken=Gn;exports.QueryUserActivity=Jn;exports.QueryWalletBundle=pn;exports.QueryWalletList=fn;exports.Response=C;exports.ResponseActiveSession=Ln;exports.ResponseAppendRequest=Wn;exports.ResponseAtom=Xn;exports.ResponseAuthorizationGuest=Ar;exports.ResponseBalance=mn;exports.ResponseClaimShadowWallet=Tn;exports.ResponseContinuId=un;exports.ResponseCreateIdentifier=In;exports.ResponseCreateMeta=Rn;exports.ResponseCreateRule=ns;exports.ResponseCreateToken=Sn;exports.ResponseCreateWallet=Pn;exports.ResponseEmbeddingStatus=ts;exports.ResponseLinkIdentifier=Un;exports.ResponseMetaType=gn;exports.ResponseMetaTypeViaAtom=es;exports.ResponseMetaTypeViaMolecule=Xe;exports.ResponsePeering=qn;exports.ResponsePolicy=Zn;exports.ResponseProposeMolecule=L;exports.ResponseQueryActiveSession=Dn;exports.ResponseQueryUserActivity=zn;exports.ResponseRequestAuthorization=wn;exports.ResponseRequestAuthorizationGuest=Nn;exports.ResponseRequestTokens=$n;exports.ResponseTransferTokens=vn;exports.ResponseWalletBundle=dn;exports.ResponseWalletList=Oe;exports.SignatureMalformedException=wt;exports.SignatureMismatchException=ln;exports.StackableUnitAmountException=xe;exports.StackableUnitDecimalsException=Fn;exports.TokenUnit=fe;exports.TransferBalanceException=G;exports.TransferMalformedException=be;exports.TransferMismatchedException=ct;exports.TransferRemainderException=ut;exports.TransferToSelfException=cn;exports.TransferUnbalancedException=ve;exports.UnauthenticatedException=Ee;exports.Wallet=_;exports.WalletShadowException=dt;exports.WrongTokenTypeException=ne;exports.base64ToHex=Nt;exports.bufferToHexString=Ht;exports.charsetBaseConvert=Ut;exports.chunkArray=Ft;exports.chunkSubstr=Te;exports.deepCloning=Lt;exports.diff=jt;exports.generateBatchId=ce;exports.generateBundleHash=pe;exports.generateSecret=Le;exports.hexStringToBuffer=Pt;exports.hexToBase64=Kt;exports.intersect=ye;exports.isHex=Ke;exports.isNumeric=Qt;exports.randomString=De;exports.shake256=at;
|
|
585
585
|
//# sourceMappingURL=client.cjs.js.map
|