@avalanche-sdk/client
Version:
A TypeScript SDK for interacting with the Avalanche network through JSON-RPC APIs. This SDK provides a comprehensive set of tools to interact with all Avalanche chains (P-Chain, X-Chain, C-Chain) and various APIs, including wallet functionality for transa
2 lines (1 loc) • 20 kB
JavaScript
;var e=require("node:net"),r=require("node:path"),t=require("node:url"),o="undefined"!=typeof document?document.currentScript:null;const s=(e,r,t)=>JSON.stringify(e,(e,r)=>"bigint"==typeof r?r.toString():r,t),n="2.38.2";let a=({docsBaseUrl:e,docsPath:r="",docsSlug:t})=>r?`${e??"https://viem.sh"}${r}${t?`#${t}`:""}`:void 0,c=`viem@${n}`;class i extends Error{constructor(e,r={}){const t=r.cause instanceof i?r.cause.details:r.cause?.message?r.cause.message:r.details,o=r.cause instanceof i&&r.cause.docsPath||r.docsPath,s=a?.({...r,docsPath:o});super([e||"An error occurred.","",...r.metaMessages?[...r.metaMessages,""]:[],...s?[`Docs: ${s}`]:[],...t?[`Details: ${t}`]:[],...c?[`Version: ${c}`]:[]].join("\n"),r.cause?{cause:r.cause}:void 0),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BaseError"}),this.details=t,this.docsPath=o,this.metaMessages=r.metaMessages,this.name=r.name??this.name,this.shortMessage=e,this.version=n}walk(e){return u(this,e)}}function u(e,r){return r?.(e)?e:e&&"object"==typeof e&&"cause"in e&&void 0!==e.cause?u(e.cause,r):r?null:e}class d extends i{constructor({body:e,cause:r,details:t,headers:o,status:n,url:a}){super("HTTP request failed.",{cause:r,details:t,metaMessages:[n&&`Status: ${n}`,`URL: ${a}`,e&&`Request body: ${s(e)}`].filter(Boolean),name:"HttpRequestError"}),Object.defineProperty(this,"body",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"headers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"status",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"url",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.body=e,this.headers=o,this.status=n,this.url=a}}class l extends i{constructor({body:e,cause:r,details:t,url:o}){super("WebSocket request failed.",{cause:r,details:t,metaMessages:[`URL: ${o}`,e&&`Request body: ${s(e)}`].filter(Boolean),name:"WebSocketRequestError"})}}class h extends i{constructor({body:e,error:r,url:t}){super("RPC Request failed.",{cause:r,details:r.message,metaMessages:[`URL: ${t}`,`Request body: ${s(e)}`],name:"RpcRequestError"}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.code=r.code,this.data=r.data}}class b extends i{constructor({url:e}={}){super("The socket has been closed.",{metaMessages:[e&&`URL: ${e}`].filter(Boolean),name:"SocketClosedError"})}}class p extends i{constructor({body:e,url:r}){super("The request took too long to respond.",{details:"The request timed out.",metaMessages:[`URL: ${r}`,`Request body: ${s(e)}`],name:"TimeoutError"})}}function f(e){return function(e,{strict:r=!0}={}){return!!e&&"string"==typeof e&&(r?/^0x[0-9a-fA-F]*$/.test(e):e.startsWith("0x"))}(e,{strict:!1})?Math.ceil((e.length-2)/2):e.length}class m extends i{constructor({size:e,targetSize:r,type:t}){super(`${t.charAt(0).toUpperCase()}${t.slice(1).toLowerCase()} size (${e}) exceeds padding size (${r}).`,{name:"SizeExceedsPaddingSizeError"})}}function y(e,{dir:r,size:t=32}={}){return"string"==typeof e?function(e,{dir:r,size:t=32}={}){if(null===t)return e;const o=e.replace("0x","");if(o.length>2*t)throw new m({size:Math.ceil(o.length/2),targetSize:t,type:"hex"});return`0x${o["right"===r?"padEnd":"padStart"](2*t,"0")}`}(e,{dir:r,size:t}):function(e,{dir:r,size:t=32}={}){if(null===t)return e;if(e.length>t)throw new m({size:e.length,targetSize:t,type:"bytes"});const o=new Uint8Array(t);for(let s=0;s<t;s++){const n="right"===r;o[n?s:t-s-1]=e[n?s:e.length-s-1]}return o}(e,{dir:r,size:t})}class w extends i{constructor({givenSize:e,maxSize:r}){super(`Size cannot exceed ${r} bytes. Given size: ${e} bytes.`,{name:"SizeOverflowError"})}}const g=Array.from({length:256},(e,r)=>r.toString(16).padStart(2,"0"));function v(e,r={}){let t="";for(let r=0;r<e.length;r++)t+=g[e[r]];const o=`0x${t}`;return"number"==typeof r.size?(function(e,{size:r}){if(f(e)>r)throw new w({givenSize:f(e),maxSize:r})}(o,{size:r.size}),y(o,{dir:"right",size:r.size})):o}const P=new TextEncoder;class R extends Map{constructor(e){super(),Object.defineProperty(this,"maxSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSize=e}get(e){const r=super.get(e);return super.has(e)&&void 0!==r&&(this.delete(e),super.set(e,r)),r}set(e,r){if(super.set(e,r),this.maxSize&&this.size>this.maxSize){const e=this.keys().next().value;e&&this.delete(e)}return this}}class x extends i{constructor(e,{code:r,docsPath:t,metaMessages:o,name:s,shortMessage:n}){super(n,{cause:e,docsPath:t,metaMessages:o||e?.metaMessages,name:s||"RpcError"}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name=s||e.name,this.code=e instanceof h?e.code:r??-1}}class j extends x{constructor(e,r){super(e,r),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.data=r.data}}class E extends x{constructor(e){super(e,{code:E.code,name:"ParseRpcError",shortMessage:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."})}}Object.defineProperty(E,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32700});class M extends x{constructor(e){super(e,{code:M.code,name:"InvalidRequestRpcError",shortMessage:"JSON is not a valid request object."})}}Object.defineProperty(M,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32600});class O extends x{constructor(e,{method:r}={}){super(e,{code:O.code,name:"MethodNotFoundRpcError",shortMessage:`The method${r?` "${r}"`:""} does not exist / is not available.`})}}Object.defineProperty(O,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32601});class S extends x{constructor(e){super(e,{code:S.code,name:"InvalidParamsRpcError",shortMessage:["Invalid parameters were provided to the RPC method.","Double check you have provided the correct parameters."].join("\n")})}}Object.defineProperty(S,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32602});class q extends x{constructor(e){super(e,{code:q.code,name:"InternalRpcError",shortMessage:"An internal error was received."})}}Object.defineProperty(q,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32603});class z extends x{constructor(e){super(e,{code:z.code,name:"InvalidInputRpcError",shortMessage:["Missing or invalid parameters.","Double check you have provided the correct parameters."].join("\n")})}}Object.defineProperty(z,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32e3});class $ extends x{constructor(e){super(e,{code:$.code,name:"ResourceNotFoundRpcError",shortMessage:"Requested resource not found."}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"ResourceNotFoundRpcError"})}}Object.defineProperty($,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32001});class T extends x{constructor(e){super(e,{code:T.code,name:"ResourceUnavailableRpcError",shortMessage:"Requested resource not available."})}}Object.defineProperty(T,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32002});class C extends x{constructor(e){super(e,{code:C.code,name:"TransactionRejectedRpcError",shortMessage:"Transaction creation failed."})}}Object.defineProperty(C,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32003});class k extends x{constructor(e,{method:r}={}){super(e,{code:k.code,name:"MethodNotSupportedRpcError",shortMessage:`Method${r?` "${r}"`:""} is not supported.`})}}Object.defineProperty(k,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32004});class U extends x{constructor(e){super(e,{code:U.code,name:"LimitExceededRpcError",shortMessage:"Request exceeds defined limit."})}}Object.defineProperty(U,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32005});class A extends x{constructor(e){super(e,{code:A.code,name:"JsonRpcVersionUnsupportedError",shortMessage:"Version of JSON-RPC protocol is not supported."})}}Object.defineProperty(A,"code",{enumerable:!0,configurable:!0,writable:!0,value:-32006});class I extends j{constructor(e){super(e,{code:I.code,name:"UserRejectedRequestError",shortMessage:"User rejected the request."})}}Object.defineProperty(I,"code",{enumerable:!0,configurable:!0,writable:!0,value:4001});class N extends j{constructor(e){super(e,{code:N.code,name:"UnauthorizedProviderError",shortMessage:"The requested method and/or account has not been authorized by the user."})}}Object.defineProperty(N,"code",{enumerable:!0,configurable:!0,writable:!0,value:4100});class D extends j{constructor(e,{method:r}={}){super(e,{code:D.code,name:"UnsupportedProviderMethodError",shortMessage:`The Provider does not support the requested method${r?` " ${r}"`:""}.`})}}Object.defineProperty(D,"code",{enumerable:!0,configurable:!0,writable:!0,value:4200});class B extends j{constructor(e){super(e,{code:B.code,name:"ProviderDisconnectedError",shortMessage:"The Provider is disconnected from all chains."})}}Object.defineProperty(B,"code",{enumerable:!0,configurable:!0,writable:!0,value:4900});class L extends j{constructor(e){super(e,{code:L.code,name:"ChainDisconnectedError",shortMessage:"The Provider is not connected to the requested chain."})}}Object.defineProperty(L,"code",{enumerable:!0,configurable:!0,writable:!0,value:4901});class J extends j{constructor(e){super(e,{code:J.code,name:"SwitchChainError",shortMessage:"An error occurred when attempting to switch chain."})}}Object.defineProperty(J,"code",{enumerable:!0,configurable:!0,writable:!0,value:4902});class W extends j{constructor(e){super(e,{code:W.code,name:"UnsupportedNonOptionalCapabilityError",shortMessage:"This Wallet does not support a capability that was not marked as optional."})}}Object.defineProperty(W,"code",{enumerable:!0,configurable:!0,writable:!0,value:5700});class _ extends j{constructor(e){super(e,{code:_.code,name:"UnsupportedChainIdError",shortMessage:"This Wallet does not support the requested chain ID."})}}Object.defineProperty(_,"code",{enumerable:!0,configurable:!0,writable:!0,value:5710});class F extends j{constructor(e){super(e,{code:F.code,name:"DuplicateIdError",shortMessage:"There is already a bundle submitted with this ID."})}}Object.defineProperty(F,"code",{enumerable:!0,configurable:!0,writable:!0,value:5720});class V extends j{constructor(e){super(e,{code:V.code,name:"UnknownBundleIdError",shortMessage:"This bundle id is unknown / has not been submitted"})}}Object.defineProperty(V,"code",{enumerable:!0,configurable:!0,writable:!0,value:5730});class H extends j{constructor(e){super(e,{code:H.code,name:"BundleTooLargeError",shortMessage:"The call bundle is too large for the Wallet to process."})}}Object.defineProperty(H,"code",{enumerable:!0,configurable:!0,writable:!0,value:5740});class G extends j{constructor(e){super(e,{code:G.code,name:"AtomicReadyWalletRejectedUpgradeError",shortMessage:"The Wallet can support atomicity after an upgrade, but the user rejected the upgrade."})}}Object.defineProperty(G,"code",{enumerable:!0,configurable:!0,writable:!0,value:5750});class K extends j{constructor(e){super(e,{code:K.code,name:"AtomicityNotSupportedError",shortMessage:"The wallet does not support atomic execution but the request requires it."})}}Object.defineProperty(K,"code",{enumerable:!0,configurable:!0,writable:!0,value:5760});class Q extends x{constructor(e){super(e,{name:"UnknownRpcError",shortMessage:"An unknown RPC error occurred."})}}const X=new Map;function Y({fn:e,id:r,shouldSplitBatch:t,wait:o=0,sort:s}){const n=async()=>{const r=c();a();const t=r.map(({args:e})=>e);0!==t.length&&e(t).then(e=>{s&&Array.isArray(e)&&e.sort(s);for(let t=0;t<r.length;t++){const{resolve:o}=r[t];o?.([e[t],e])}}).catch(e=>{for(let t=0;t<r.length;t++){const{reject:o}=r[t];o?.(e)}})},a=()=>X.delete(r),c=()=>X.get(r)||[],i=e=>X.set(r,[...c(),e]);return{flush:a,async schedule(e){const{promise:r,resolve:s,reject:a}=function(){let e=()=>{},r=()=>{};return{promise:new Promise((t,o)=>{e=t,r=o}),resolve:e,reject:r}}(),u=t?.([...c().map(({args:e})=>e),e]);u&&n();return c().length>0?(i({args:e,resolve:s,reject:a}),r):(i({args:e,resolve:s,reject:a}),setTimeout(n,o),r)}}}function Z(e,{delay:r=100,retryCount:t=2,shouldRetry:o=()=>!0}={}){return new Promise((s,n)=>{const a=async({count:c=0}={})=>{const i=async({error:e})=>{const t="function"==typeof r?r({count:c,error:e}):r;t&&await async function(e){return new Promise(r=>setTimeout(r,e))}(t),a({count:c+1})};try{const r=await e();s(r)}catch(e){if(c<t&&await o({count:c,error:e}))return i({error:e});n(e)}};a()})}let ee,re=256;const te=new R(8192);function oe(e,r={}){return async(t,o={})=>{const{dedupe:n=!1,methods:a,retryDelay:c=150,retryCount:u=3,uid:l}={...r,...o},{method:h}=t;if(a?.exclude?.includes(h))throw new k(new Error("method not supported"),{method:h});if(a?.include&&!a.include.includes(h))throw new k(new Error("method not supported"),{method:h});return function(e,{enabled:r=!0,id:t}){if(!r||!t)return e();if(te.get(t))return te.get(t);const o=e().finally(()=>te.delete(t));return te.set(t,o),o}(()=>Z(async()=>{try{return await e(t)}catch(e){const r=e;switch(r.code){case E.code:throw new E(r);case M.code:throw new M(r);case O.code:throw new O(r,{method:t.method});case S.code:throw new S(r);case q.code:throw new q(r);case z.code:throw new z(r);case $.code:throw new $(r);case T.code:throw new T(r);case C.code:throw new C(r);case k.code:throw new k(r,{method:t.method});case U.code:throw new U(r);case A.code:throw new A(r);case I.code:throw new I(r);case N.code:throw new N(r);case D.code:throw new D(r);case B.code:throw new B(r);case L.code:throw new L(r);case J.code:throw new J(r);case W.code:throw new W(r);case _.code:throw new _(r);case F.code:throw new F(r);case V.code:throw new V(r);case H.code:throw new H(r);case G.code:throw new G(r);case K.code:throw new K(r);case 5e3:throw new I(r);default:if(e instanceof i)throw e;throw new Q(r)}}},{delay:({count:e,error:r})=>{if(r&&r instanceof d){const e=r?.headers?.get("Retry-After");if(e?.match(/\d/))return 1e3*Number.parseInt(e,10)}return(1<<e)*c},retryCount:u,shouldRetry:({error:e})=>function(e){if("code"in e&&"number"==typeof e.code)return-1===e.code||(e.code===U.code||e.code===q.code);if(e instanceof d&&e.status)return 403===e.status||(408===e.status||(413===e.status||(429===e.status||(500===e.status||(502===e.status||(503===e.status||504===e.status))))));return!0}(e)}),{enabled:n,id:n?function(e,r={}){return v(P.encode(e),r)}(`${l}.${s(t)}`):void 0})}}function se(){return{current:0,take(){return this.current++},reset(){this.current=0}}}const ne=se(),ae=new Map;async function ce(e){const{getSocket:r,keepAlive:t=!0,key:o="socket",reconnect:s=!0,url:n}=e,{interval:a=3e4}="object"==typeof t?t:{},{attempts:c=5,delay:i=2e3}="object"==typeof s?s:{},u=JSON.stringify({keepAlive:t,key:o,url:n,reconnect:s});let d=ae.get(u);if(d)return d;let l=0;const{schedule:h}=Y({id:u,fn:async()=>{const e=new Map,o=new Map;let h,f,m,y=!1;function w(){if(s&&l<c){if(y)return;y=!0,l++,f?.close(),setTimeout(async()=>{await g().catch(console.error),y=!1},i)}else e.clear(),o.clear()}async function g(){const c=await r({onClose(){for(const r of e.values())r.onError?.(new b({url:n}));for(const e of o.values())e.onError?.(new b({url:n}));w()},onError(r){h=r;for(const r of e.values())r.onError?.(h);for(const e of o.values())e.onError?.(h);w()},onOpen(){h=void 0,l=0},onResponse(r){const t="eth_subscription"===r.method,s=t?r.params.subscription:r.id,n=t?o:e,a=n.get(s);a&&a.onResponse(r),t||n.delete(s)}});if(f=c,t&&(m&&clearInterval(m),m=setInterval(()=>f.ping?.(),a)),s&&o.size>0){const e=o.entries();for(const[r,{onResponse:t,body:s,onError:n}]of e)s&&(o.delete(r),d?.request({body:s,onResponse:t,onError:n}))}return c}return await g(),h=void 0,d={close(){m&&clearInterval(m),f.close(),ae.delete(u)},get socket(){return f},request({body:r,onError:t,onResponse:s}){h&&t&&t(h);const n=r.id??ne.take(),a=e=>{"number"==typeof e.id&&n!==e.id||("eth_subscribe"===r.method&&"string"==typeof e.result&&o.set(e.result,{onResponse:a,onError:t,body:r}),"eth_unsubscribe"===r.method&&o.delete(r.params?.[0]),s(e))};e.set(n,{onResponse:a,onError:t});try{f.request({body:{jsonrpc:"2.0",id:n,...r}})}catch(e){t?.(e)}},requestAsync({body:e,timeout:r=1e4}){return function(e,{errorInstance:r=new Error("timed out"),timeout:t,signal:o}){return new Promise((s,n)=>{(async()=>{let a;try{const c=new AbortController;t>0&&(a=setTimeout(()=>{o?c.abort():n(r)},t)),s(await e({signal:c?.signal||null}))}catch(e){"AbortError"===e?.name&&n(r),n(e)}finally{clearTimeout(a)}})()})}(()=>new Promise((r,t)=>this.request({body:e,onError:t,onResponse:r})),{errorInstance:new p({body:e,url:n}),timeout:r})},requests:e,subscriptions:o,url:n},ae.set(u,d),[d]}}),[f,[m]]=await h();return m}function ie({key:e,methods:r,name:t,request:o,retryCount:s=3,retryDelay:n=150,timeout:a,type:c},i){return{config:{key:e,methods:r,name:t,request:o,retryCount:s,retryDelay:n,timeout:a,type:c},request:oe(o,{methods:r,retryCount:s,retryDelay:n,uid:function(e=11){if(!ee||re+e>512){ee="",re=0;for(let e=0;e<256;e++)ee+=(256+256*Math.random()|0).toString(16).substring(1)}return ee.substring(re,re+++e)}()}),value:i}}const ue="{".charCodeAt(0),de="}".charCodeAt(0);async function le(r,t={}){const{reconnect:o}=t;return ce({async getSocket({onError:t,onOpen:o,onResponse:s}){const n=e.connect(r);let a=Buffer.alloc(0);function c(e){const[r,t]=function(e){const r=[];let t=0,o=0;for(let s=0;s<e.length;s++)if(e[s]===ue&&o++,e[s]===de&&o--,0===o){const o=e.subarray(t,s+1);o[0]===ue&&o[o.length-1]===de&&r.push(o),t=s+1}return[r,e.subarray(t)]}(Buffer.concat([Uint8Array.from(a),Uint8Array.from(e)]));for(const e of r){const r=JSON.parse(Buffer.from(e).toString());s(r)}a=t}return n.on("close",function e(){n.off("close",e),n.off("message",c),n.off("error",t),n.off("connect",o)}),n.on("data",c),n.on("error",t),n.on("connect",o),await new Promise((e,r)=>{n.on("ready",()=>{e(),n.off("error",r)}),n.on("error",r)}),Object.assign(n,{close(){n.destroy(),n.end()},request({body:e}){if("open"!==n.readyState)throw new l({body:e,url:r,details:"Socket is closed."});return n.write(JSON.stringify(e))}})},reconnect:o,url:r})}const he=t.fileURLToPath("undefined"==typeof document?require("url").pathToFileURL(__filename).href:o&&"SCRIPT"===o.tagName.toUpperCase()&&o.src||new URL("index.js",document.baseURI).href),be=r.dirname(he),pe=r.resolve(be,"../trusted-setups/mainnet.json");exports.getIpcRpcClient=le,exports.ipc=function(e,r={}){const{key:t="ipc",methods:o,name:s="IPC JSON-RPC",reconnect:n,retryDelay:a}=r;return({retryCount:c,timeout:i})=>{const u=r.retryCount??c,d=i??r.timeout??1e4;return ie({key:t,methods:o,name:s,async request({method:r,params:t}){const o={method:r,params:t},s=await le(e,{reconnect:n}),{error:a,result:c}=await s.requestAsync({body:o,timeout:d});if(a)throw new h({body:o,error:a,url:e});return c},retryCount:u,retryDelay:a,timeout:d,type:"ipc"},{getRpcClient:()=>le(e),async subscribe({params:r,onData:t,onError:o}){const s=await le(e),{result:n}=await new Promise((e,n)=>s.request({body:{method:"eth_subscribe",params:r},onResponse(r){if(r.error)return n(r.error),void o?.(r.error);"number"!=typeof r.id?"eth_subscription"===r.method&&t(r.params):e(r)}}));return{subscriptionId:n,unsubscribe:async()=>new Promise(e=>s.request({body:{method:"eth_unsubscribe",params:[n]},onResponse:e}))}}})}},exports.mainnetTrustedSetupPath=pe;