@zerochain/sdk
Version:
The Züs JS SDK is a JavaScript client library that provides a convenient interface for interacting with the Züs Network. It allows developers to perform various operations such as creating and managing allocations, uploading and downloading files, executi
2 lines (1 loc) • 12 kB
JavaScript
var G=Object.defineProperty;var oe=(r,e)=>{for(var t in e)G(r,t,{get:e[t],enumerable:!0})};var b=r=>{if(!r)return new Uint8Array;let e=[];for(let t=0,s=r.length;t<s;t+=2)e.push(parseInt(r.substring(t,t+2),16));return new Uint8Array(e)},m=(r=1e3)=>new Promise(e=>{requestAnimationFrame(e),setTimeout(e,r)}),C=async()=>{let r=window.bls;return r?.mod?.calledRun||await r?.init(r.BN254),r};async function v(r,e){let t=l();if(!t.jsProxy||!t.jsProxy.secretKey){let c="Error: bls.secretKey is not initialized";throw console.warn(c),new Error(c)}let s=b(r),o=t.jsProxy.bls.deserializeHexStrToSecretKey(e).sign(s);if(!o){let c="Error: WASM blsSign function failed to sign transaction";throw console.warn(c),new Error(c)}return o.serializeToHexStr()}async function K(r,e){let t=l();if(!t.jsProxy||!t.jsProxy.publicKey){let o="Error: bls.publicKey is not initialized";throw console.warn(o),new Error(o)}let s=b(e),i=t.jsProxy.bls.deserializeHexStrToSignature(r);return t.jsProxy.publicKey.verify(i,s)}async function O(r,e,t){let s=l(),i=s.jsProxy.bls.deserializeHexStrToPublicKey(r),o=b(t),c=s.jsProxy.bls.deserializeHexStrToSignature(e);return i.verify(c,o)}async function D(r,e,t){let s=l();if(!s.jsProxy){let a="Error: bls.secretKey is not initialized";throw console.warn(a),new Error(a)}let i=s.jsProxy.bls.deserializeHexStrToSecretKey(r),o=s.jsProxy.bls.deserializeHexStrToSignature(e);var c=i.sign(b(t));if(!c){let a="Error: WASM blsAddSignature function failed to sign transaction";throw console.warn(a),new Error(a)}return o.add(c),o.serializeToHexStr()}async function L(r,e){var t=new Blob([r],{type:e});return URL.createObjectURL(t)}var z=()=>({secretKey:null,publicKey:null,sign:v,verify:K,verifyWith:O,addSignature:D,createObjectURL:L,sleep:m});var R={wasmBaseUrl:"",useCachedWasm:!1,isWasmGzipped:!0},u=()=>l().__config__||R,j=()=>_()?"/enterprise-zcn.wasm":"/zcn.wasm",F=()=>{let r=u(),e="mainnet",s=_()?"enterprise-zcn.wasm":"zcn.wasm";if(r.wasmBaseUrl)return{defaultUrl:`${r.wasmBaseUrl}/${s}`,suffix:e};let i=window?.location?.hostname,o=a=>i?.includes(a);return o("localhost")||o("mob")?e="mob":o("dev")||o("mob.desktop")?e="dev":o("demo")?e="demo":o("staging")?e="staging":o("test")&&(e="test"),r.zus?.cdnUrl?{defaultUrl:`${r.zus.cdnUrl}/${e}/${s}`,suffix:e}:{defaultUrl:null,suffix:e}},N=()=>{let r=u();if(!r.useCachedWasm)return{url:null,version:null,type:null};let e=_(),t=e?r.cacheConfig.enterpriseGosdkVersion:r.cacheConfig.standardGosdkVersion,s=e?"enterprise":"normal",i=e?r.cacheConfig.enterpriseWasmUrl:r.cacheConfig.standardWasmUrl;return i?{url:i,version:t,type:s}:r.zus?.cdnUrl?{url:`${r.zus.cdnUrl}/wasm/zcn-${t}-${s}.wasm`,version:t,type:s}:{url:null,version:null,type:null}},_=()=>localStorage.getItem("enterpriseAlloc")==="enabled",V=()=>{let r=j(),{defaultUrl:e,suffix:t}=F();if(u().useCachedWasm){let s=N(),i=s.version?s.url:e;return{suffix:t,wasmUrl:i,wasmPath:r,defaultUrl:e}}else return{suffix:t,wasmUrl:e,wasmPath:r,defaultUrl:e}},H=async({wasmCache:r,wasmPath:e})=>{if(!r||!e)return null;let t=u();if(!t.useCachedWasm)return null;let s=_()?t.cacheConfig.enterpriseGosdkVersion:t.cacheConfig.standardGosdkVersion;return localStorage.getItem(e)===s?r.match(e):null},$=async({wasmUrl:r,wasmPath:e,defaultUrl:t})=>{let i=await("caches"in window?window.caches:null)?.open("wasm-cache"),o=await H({wasmCache:i,wasmPath:e}),c=!1;if(o?.ok)console.log("Using cached WASM.");else{let a={"Content-Type":"application/wasm"},n=u();if(n.isWasmGzipped&&(a["Content-Encoding"]="gzip"),r&&(o=await fetch(r,{headers:a}).catch(d=>(console.error("Failed to fetch from CDN, trying CDN fallback:",d),null)),o?.ok&&(c=!0)),!o?.ok&&r!==t&&t&&(o=await fetch(t,{headers:a}).catch(d=>(console.error("Failed to fetch from CDN fallback, trying local:",d),null))),o?.ok||(r=e,o=await fetch(r,{headers:a})),!o?.ok)throw new Error("Failed to fetch WASM");if(c&&(await i?.put(e,o.clone()),n.useCachedWasm)){let d=_()?n.cacheConfig.enterpriseGosdkVersion:n.cacheConfig.standardGosdkVersion;localStorage.setItem(e,d)}}return{source:o,isVersioned:c}},J=1e4;async function T(r,e){WebAssembly?.instantiateStreaming||(WebAssembly.instantiateStreaming=async(d,f)=>{let y=await(await d).arrayBuffer();return await WebAssembly.instantiate(y,f)});let{suffix:t,wasmUrl:s,wasmPath:i,defaultUrl:o}=V(),{source:c}=await $({wasmUrl:s,wasmPath:i,defaultUrl:o});r.env={SUFFIX:t};let a=await WebAssembly.instantiateStreaming(c,r.importObject);setTimeout(()=>{l()?.__wasm_initialized__!==!0&&console.warn("wasm window.__zcn_wasm__ (zcn.__wasm_initialized__) still not true after max time")},J),r.run(a.instance);let n=!1;for(;!n;)await m(300),l()?.__wasm_initialized__===!0&&(n=!0,e(!0))}var Z=async r=>{let e=u().md5WorkerUrl;if(!e)throw new Error("md5WorkerUrl is undefined");return new Promise((s,i)=>{let o=new Worker(e);o.postMessage(r),o.onmessage=c=>{s(c.data),o.terminate()},o.onerror=i})},Y=(r,e,t)=>new Promise((s,i)=>{let o=new FileReader,c=t.slice(r,e+r);o.onload=a=>{let n=a.target;if(n===null){i("err: fileReader onload target is null");return}if(n.error==null){let d=n.result;s({size:d.byteLength,buffer:new Uint8Array(d)})}else i(n.error)},o.readAsArrayBuffer(c)}),U=r=>{let e=r.__proxy__;if(!e)throw new Error("The Bridge proxy (__proxy__) is not initialized. Make sure to call createWasm first.");return e};async function B(r){let e=x(),t=l(),s=t.glob.index,i=r.map(n=>{let d=t.glob.index;t.glob.index++;let f="__zcn_upload_reader_"+d.toString(),y="__zcn_upload_callback_"+d.toString(),h="";if(e[f]=async(p,w)=>(console.log("bulk_upload: read chunk remotePath:"+n.remotePath+" offset:"+p+" chunkSize:"+w),(await Y(p,w,n.file)).buffer),n.file.size>25*1024*1024){h="__zcn_md5_hash_"+d.toString();let p=Z(n.file);e[h]=async()=>await p}return n.callback&&(e[y]=async(p,w,A)=>n.callback(p,w,A)),{allocationId:n.allocationId,remotePath:n.remotePath,fileSize:n.file.size,encrypt:n.encrypt,isUpdate:n.isUpdate,isRepair:n.isRepair,numBlocks:n.numBlocks,webstreaming:n.webstreaming,thumbnailBytes:Array.from(n?.thumbnailBytes||[]).toString(),readChunkFuncName:f,callbackFuncName:y,md5HashFuncName:h}}),o=t.glob.index,a=await U(t).sdk.bulkUpload(JSON.stringify(i));for(let n=s;n<o;n++)e["__zcn_upload_reader_"+n.toString()]=null,e["__zcn_upload_callback_"+n.toString()]=null;return a}async function I(r,e,t,s,i,o,c,a){if(!r)throw new Error("bls is undefined");if(!i)throw new Error("secret key is undefined");if(!o)throw new Error("public key is undefined");if(a&&!t)throw new Error("clientKey is undefined");let n=l();if(n.walletId!=e||n.jsProxy.pubkeyStr!=o||n.jsProxy.isSplit!=a){n.jsProxy.bls=r,n.jsProxy.secretKey=r.deserializeHexStrToSecretKey(i),n.jsProxy.publicKey=r.deserializeHexStrToPublicKey(o),n.jsProxy.pubkeyStr=o,n.jsProxy.isSplit=a;let d=U(n);if(!d?.sdk?.setWallet)throw new Error("proxy.sdk.setWallet is not defined");await d.sdk.setWallet(e,t,s,o,i,c,a),n.walletId=e,n.secretKey=i,n.peerPublicKey=s}}var x=()=>{if(typeof window<"u")return window||globalThis||self;throw new Error("Window object not available")},l=()=>{let r=x(),e=r.__zcn_wasm__;if(e)return e;let t={glob:{index:0},jsProxy:z(),sdk:{}};return r.__zcn_wasm__=t,t};var X=r=>{let e=l();return new Proxy({},{get:(s,i)=>(...o)=>new Promise(async(c,a)=>{if(!r||r.exited)return a(new Error("The Go instance is not active."));for(;e.__wasm_initialized__!==!0;)await m(1e3);if(typeof e.sdk[i]!="function"){c(e.sdk[i]),o.length!==0&&a(new Error("Retrieved value from WASM returned function type, however called with arguments."));return}try{let n=e.sdk[i].apply(void 0,o);n&&typeof n.then=="function"&&(n=await Promise.race([n])),n&&n.error?a(n.error):c(n)}catch(n){a(n)}})})},q=()=>{let r=l();return new Proxy({},{get:(t,s)=>r.jsProxy[s],set:(t,s,i)=>(r.jsProxy[s]=i,!0)})},W=r=>{let e=X(r),t=q(),s=l();return{bulkUpload:B,setWallet:I,getWalletId:()=>s.walletId,getPrivateKey:()=>s.secretKey,getPeerPublicKey:()=>s.peerPublicKey,sdk:e,jsProxy:t}};async function P(r,e){let t=l();if(t.__config__=r,t.__proxy__)return t.__proxy__;let s=x(),i=new s.Go;T(i,e);let o=W(i);return t.__proxy__=o,s.goWasm=o,o}import Q from"lodash.debounce";var ee=500,M=3,Ge=({onLog:r,debounceTimeout:e=ee,setIsWasmLoaded:t=()=>{},getRetries:s,incrementRetries:i,resetRetries:o})=>{let c=Q(async(a,n=!1)=>{if(!a){r?.("error",{message:"Unable to initialize WASM. Invalid config.",code:"INVALID_WASM_CONFIG",data:a});return}if(t(!1),await te()){r?.("debug",{message:"Wasm already initialized.",code:"WASM_LOADED",data:{isSwitchingWasm:n}}),t(!0);return}if(r?.("info",{message:"Initializing WASM...",code:"WASM_LOADING",data:{isSwitchingWasm:n}}),P(a,t),await S(),!E()){if(s()>=M){o();let f="Wasm type mismatch: Unable to reset. Exiting.";console.warn(f),r?.("debug",{message:f,code:"WASM_TYPE_MISMATCH"});let y=re();r?.("error",{message:`Unable to switch to ${y} mode. Please reload.`,code:"WASM_TYPE_MISMATCH"}),t(!0);return}i();let d=`Wasm type mismatch: ${window.__zcn_wasm__?.wasmType}. Resetting ${s()}/${M}`;console.warn(d),r?.("error",{message:d,code:"WASM_TYPE_MISMATCH_RETRY"}),c(a)}},e);return c},ve=r=>{k(),r==="enterprise"?localStorage.setItem("enterpriseAlloc","enabled"):localStorage.removeItem("enterpriseAlloc")},re=()=>localStorage.getItem("enterpriseAlloc")==="enabled"?"enterprise":"normal",E=r=>{let e=localStorage.getItem("enterpriseAlloc")==="enabled",t=window.__zcn_wasm__?.wasmType;return t===void 0?(r?.("debug",{message:"Wasm type: undefined",code:"OUTDATED_WASM_VERSION"}),!0):e?t==="enterprise":t==="normal"},S=async r=>{for(;!window.__zcn_wasm__?.__wasm_initialized__;)r?.("debug",{message:"Wasm: Waiting...",code:"WASM_LOADING"}),await m(500);r?.("info",{message:`Wasm: Loaded. Type: ${window.__zcn_wasm__.wasmType}`,code:"WASM_LOADED"}),await m(1e3)},te=async()=>window.__zcn_wasm__?.__wasm_initialized__?(await m(300),E()?!0:(k(),!1)):!1;var g={chainId:"0afc093ffb509f059c55478bc1a60351cef7b4e9c008a53a6cc8241ca8617dfe",signatureScheme:"bls0chain",minConfirmation:10,minSubmit:20,confirmationChainLength:3},Oe=r=>({faucetSCAddress:"6dba10422e368813802877a85039d3985d96760ed844092319743fb3a76712d3",storageSCAddress:"6dba10422e368813802877a85039d3985d96760ed844092319743fb3a76712d7",minerSCAddress:"6dba10422e368813802877a85039d3985d96760ed844092319743fb3a76712d9",interestPoolSCAddress:"cf8d0df9bd8cc637a4ff4e792ffe3686da6220c45f0e1103baa609f3f1751ef4",dexMintAddress:"6dba10422e368813802877a85039d3985d96760ed844092319743fb3a76712e0",teamWallet:r==="mainnet.zus.network"?"a4e6999add55dd7ac050904d2af2d248dd3329cdde953021bfa9ed9ef677f942":"65b32a635cffb6b6f3c73f09da617c29569a5f690662b5be57ed0d994f234335"});var k=()=>{window.__zcn_wasm__=void 0,window.newGoWasm=void 0,window.createWasmPromise=void 0},Fe=async({domain:r,wallet:e,zboxAppType:t,networkConfig:s})=>{if(window.newGoWasm||(window.createWasmPromise||(window.createWasmPromise=ne(r,t,s)),window.newGoWasm=await window.createWasmPromise),e?.peer_public_key&&e?.is_split&&e?.zauth_host&&await window.newGoWasm.sdk.registerZauthServer(e?.zauth_host),e)if(e.keys){let{privateKey:i,publicKey:o,walletMnemonic:c}=e.keys,a=e?.mnemonic!==""&&e?.mnemonic?.split(" ")?.length===24?e.mnemonic:c,n=await C();if(!a&&!e?.is_split)return window.newGoWasm;await window.newGoWasm.setWallet(n,e.id||e.temp_id,e.client_key||o,e.peer_public_key,i,o,a,!!e?.is_split&&!!e?.peer_public_key||!1)}else await window.newGoWasm.sdk.setWalletMode(!!e?.is_split&&!!e?.peer_public_key||!1);return window.newGoWasm},ne=async(r,e,t)=>{if(r.startsWith("http"))throw new Error("domain should not start with http");let s=`https://${r}/dns`,i=[t?.chainId||g.chainId,t?.blockWorker||s,t?.signatureScheme||g.signatureScheme,t?.minConfirmation||g.minConfirmation,t?.minSubmit||g.minSubmit,t?.confirmationChainLength||g.confirmationChainLength,t?.zboxHost||`https://0box.${r}`,e||"",t?.sharderConsensus||3];return await S(),await window.goWasm.sdk.init(...i),window.newGoWasm=window.goWasm,window.newGoWasm};export{oe as a,b,C as c,Y as d,x as e,l as f,P as g,Oe as h,k as i,Fe as j,Ge as k,ve as l,re as m,E as n,S as o,te as p};