UNPKG

@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) 10.6 kB
"use strict";var O=Object.create;var x=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var N=(e,r)=>{for(var t in r)x(e,t,{get:r[t],enumerable:!0})},A=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of D(r))!F.call(e,i)&&i!==t&&x(e,i,{get:()=>r[i],enumerable:!(s=R(r,i))||s.enumerable});return e};var V=(e,r,t)=>(t=e!=null?O(j(e)):{},A(r||!e||!e.__esModule?x(t,"default",{value:e,enumerable:!0}):t,e)),H=e=>A(x({},"__esModule",{value:!0}),e);var ue={};N(ue,{useWasmLoader:()=>L});module.exports=H(ue);var h=require("react");var w=e=>{if(!e)return new Uint8Array;let r=[];for(let t=0,s=e.length;t<s;t+=2)r.push(parseInt(e.substring(t,t+2),16));return new Uint8Array(r)},m=(e=1e3)=>new Promise(r=>{requestAnimationFrame(r),setTimeout(r,e)});async function $(e,r){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=w(e),o=t.jsProxy.bls.deserializeHexStrToSecretKey(r).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 J(e,r){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=w(r),i=t.jsProxy.bls.deserializeHexStrToSignature(e);return t.jsProxy.publicKey.verify(i,s)}async function Z(e,r,t){let s=l(),i=s.jsProxy.bls.deserializeHexStrToPublicKey(e),o=w(t),c=s.jsProxy.bls.deserializeHexStrToSignature(r);return i.verify(c,o)}async function Y(e,r,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(e),o=s.jsProxy.bls.deserializeHexStrToSignature(r);var c=i.sign(w(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 X(e,r){var t=new Blob([e],{type:r});return URL.createObjectURL(t)}var C=()=>({secretKey:null,publicKey:null,sign:$,verify:J,verifyWith:Z,addSignature:Y,createObjectURL:X,sleep:m});var q={wasmBaseUrl:"",useCachedWasm:!1,isWasmGzipped:!0},u=()=>l().__config__||q,Q=()=>b()?"/enterprise-zcn.wasm":"/zcn.wasm",ee=()=>{let e=u(),r="mainnet",s=b()?"enterprise-zcn.wasm":"zcn.wasm";if(e.wasmBaseUrl)return{defaultUrl:`${e.wasmBaseUrl}/${s}`,suffix:r};let i=window?.location?.hostname,o=a=>i?.includes(a);return o("localhost")||o("mob")?r="mob":o("dev")||o("mob.desktop")?r="dev":o("demo")?r="demo":o("staging")?r="staging":o("test")&&(r="test"),e.zus?.cdnUrl?{defaultUrl:`${e.zus.cdnUrl}/${r}/${s}`,suffix:r}:{defaultUrl:null,suffix:r}},re=()=>{let e=u();if(!e.useCachedWasm)return{url:null,version:null,type:null};let r=b(),t=r?e.cacheConfig.enterpriseGosdkVersion:e.cacheConfig.standardGosdkVersion,s=r?"enterprise":"normal",i=r?e.cacheConfig.enterpriseWasmUrl:e.cacheConfig.standardWasmUrl;return i?{url:i,version:t,type:s}:e.zus?.cdnUrl?{url:`${e.zus.cdnUrl}/wasm/zcn-${t}-${s}.wasm`,version:t,type:s}:{url:null,version:null,type:null}},b=()=>localStorage.getItem("enterpriseAlloc")==="enabled",te=()=>{let e=Q(),{defaultUrl:r,suffix:t}=ee();if(u().useCachedWasm){let s=re(),i=s.version?s.url:r;return{suffix:t,wasmUrl:i,wasmPath:e,defaultUrl:r}}else return{suffix:t,wasmUrl:r,wasmPath:e,defaultUrl:r}},ne=async({wasmCache:e,wasmPath:r})=>{if(!e||!r)return null;let t=u();if(!t.useCachedWasm)return null;let s=b()?t.cacheConfig.enterpriseGosdkVersion:t.cacheConfig.standardGosdkVersion;return localStorage.getItem(r)===s?e.match(r):null},oe=async({wasmUrl:e,wasmPath:r,defaultUrl:t})=>{let i=await("caches"in window?window.caches:null)?.open("wasm-cache"),o=await ne({wasmCache:i,wasmPath:r}),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"),e&&(o=await fetch(e,{headers:a}).catch(d=>(console.error("Failed to fetch from CDN, trying CDN fallback:",d),null)),o?.ok&&(c=!0)),!o?.ok&&e!==t&&t&&(o=await fetch(t,{headers:a}).catch(d=>(console.error("Failed to fetch from CDN fallback, trying local:",d),null))),o?.ok||(e=r,o=await fetch(e,{headers:a})),!o?.ok)throw new Error("Failed to fetch WASM");if(c&&(await i?.put(r,o.clone()),n.useCachedWasm)){let d=b()?n.cacheConfig.enterpriseGosdkVersion:n.cacheConfig.standardGosdkVersion;localStorage.setItem(r,d)}}return{source:o,isVersioned:c}},se=1e4;async function z(e,r){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}=te(),{source:c}=await oe({wasmUrl:s,wasmPath:i,defaultUrl:o});e.env={SUFFIX:t};let a=await WebAssembly.instantiateStreaming(c,e.importObject);setTimeout(()=>{l()?.__wasm_initialized__!==!0&&console.warn("wasm window.__zcn_wasm__ (zcn.__wasm_initialized__) still not true after max time")},se),e.run(a.instance);let n=!1;for(;!n;)await m(300),l()?.__wasm_initialized__===!0&&(n=!0,r(!0))}var ie=async e=>{let r=u().md5WorkerUrl;if(!r)throw new Error("md5WorkerUrl is undefined");return new Promise((s,i)=>{let o=new Worker(r);o.postMessage(e),o.onmessage=c=>{s(c.data),o.terminate()},o.onerror=i})},ae=(e,r,t)=>new Promise((s,i)=>{let o=new FileReader,c=t.slice(e,r+e);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)}),T=e=>{let r=e.__proxy__;if(!r)throw new Error("The Bridge proxy (__proxy__) is not initialized. Make sure to call createWasm first.");return r};async function U(e){let r=_(),t=l(),s=t.glob.index,i=e.map(n=>{let d=t.glob.index;t.glob.index++;let f="__zcn_upload_reader_"+d.toString(),y="__zcn_upload_callback_"+d.toString(),W="";if(r[f]=async(p,g)=>(console.log("bulk_upload: read chunk remotePath:"+n.remotePath+" offset:"+p+" chunkSize:"+g),(await ae(p,g,n.file)).buffer),n.file.size>25*1024*1024){W="__zcn_md5_hash_"+d.toString();let p=ie(n.file);r[W]=async()=>await p}return n.callback&&(r[y]=async(p,g,S)=>n.callback(p,g,S)),{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:W}}),o=t.glob.index,a=await T(t).sdk.bulkUpload(JSON.stringify(i));for(let n=s;n<o;n++)r["__zcn_upload_reader_"+n.toString()]=null,r["__zcn_upload_callback_"+n.toString()]=null;return a}async function B(e,r,t,s,i,o,c,a){if(!e)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!=r||n.jsProxy.pubkeyStr!=o||n.jsProxy.isSplit!=a){n.jsProxy.bls=e,n.jsProxy.secretKey=e.deserializeHexStrToSecretKey(i),n.jsProxy.publicKey=e.deserializeHexStrToPublicKey(o),n.jsProxy.pubkeyStr=o,n.jsProxy.isSplit=a;let d=T(n);if(!d?.sdk?.setWallet)throw new Error("proxy.sdk.setWallet is not defined");await d.sdk.setWallet(r,t,s,o,i,c,a),n.walletId=r,n.secretKey=i,n.peerPublicKey=s}}var _=()=>{if(typeof window<"u")return window||globalThis||self;throw new Error("Window object not available")},l=()=>{let e=_(),r=e.__zcn_wasm__;if(r)return r;let t={glob:{index:0},jsProxy:C(),sdk:{}};return e.__zcn_wasm__=t,t};var ce=e=>{let r=l();return new Proxy({},{get:(s,i)=>(...o)=>new Promise(async(c,a)=>{if(!e||e.exited)return a(new Error("The Go instance is not active."));for(;r.__wasm_initialized__!==!0;)await m(1e3);if(typeof r.sdk[i]!="function"){c(r.sdk[i]),o.length!==0&&a(new Error("Retrieved value from WASM returned function type, however called with arguments."));return}try{let n=r.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)}})})},de=()=>{let e=l();return new Proxy({},{get:(t,s)=>e.jsProxy[s],set:(t,s,i)=>(e.jsProxy[s]=i,!0)})},P=e=>{let r=ce(e),t=de(),s=l();return{bulkUpload:U,setWallet:B,getWalletId:()=>s.walletId,getPrivateKey:()=>s.secretKey,getPeerPublicKey:()=>s.peerPublicKey,sdk:r,jsProxy:t}};async function k(e,r){let t=l();if(t.__config__=e,t.__proxy__)return t.__proxy__;let s=_(),i=new s.Go;z(i,r);let o=P(i);return t.__proxy__=o,s.goWasm=o,o}var G=V(require("lodash.debounce"));var I=()=>{window.__zcn_wasm__=void 0,window.newGoWasm=void 0,window.createWasmPromise=void 0};var le=500,E=3,v=({onLog:e,debounceTimeout:r=le,setIsWasmLoaded:t=()=>{},getRetries:s,incrementRetries:i,resetRetries:o})=>{let c=(0,G.default)(async(a,n=!1)=>{if(!a){e?.("error",{message:"Unable to initialize WASM. Invalid config.",code:"INVALID_WASM_CONFIG",data:a});return}if(t(!1),await fe()){e?.("debug",{message:"Wasm already initialized.",code:"WASM_LOADED",data:{isSwitchingWasm:n}}),t(!0);return}if(e?.("info",{message:"Initializing WASM...",code:"WASM_LOADING",data:{isSwitchingWasm:n}}),k(a,t),await M(),!K()){if(s()>=E){o();let f="Wasm type mismatch: Unable to reset. Exiting.";console.warn(f),e?.("debug",{message:f,code:"WASM_TYPE_MISMATCH"});let y=me();e?.("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()}/${E}`;console.warn(d),e?.("error",{message:d,code:"WASM_TYPE_MISMATCH_RETRY"}),c(a)}},r);return c};var me=()=>localStorage.getItem("enterpriseAlloc")==="enabled"?"enterprise":"normal",K=e=>{let r=localStorage.getItem("enterpriseAlloc")==="enabled",t=window.__zcn_wasm__?.wasmType;return t===void 0?(e?.("debug",{message:"Wasm type: undefined",code:"OUTDATED_WASM_VERSION"}),!0):r?t==="enterprise":t==="normal"},M=async e=>{for(;!window.__zcn_wasm__?.__wasm_initialized__;)e?.("debug",{message:"Wasm: Waiting...",code:"WASM_LOADING"}),await m(500);e?.("info",{message:`Wasm: Loaded. Type: ${window.__zcn_wasm__.wasmType}`,code:"WASM_LOADED"}),await m(1e3)},fe=async()=>window.__zcn_wasm__?.__wasm_initialized__?(await m(300),K()?!0:(I(),!1)):!1;var L=({onLog:e,debounceTimeout:r,setIsWasmLoaded:t})=>{let s=(0,h.useRef)(0);return(0,h.useCallback)(v({onLog:e,debounceTimeout:r,setIsWasmLoaded:t,getRetries:()=>s.current,incrementRetries:()=>s.current++,resetRetries:()=>s.current=0}),[e,r,t])};0&&(module.exports={useWasmLoader});