@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) • 5.05 kB
JavaScript
const e="2.38.2";let t=({docsBaseUrl:e,docsPath:t="",docsSlug:s})=>t?`${e??"https://viem.sh"}${t}${s?`#${s}`:""}`:void 0,s=`viem@${e}`;class n extends Error{constructor(i,r={}){const a=r.cause instanceof n?r.cause.details:r.cause?.message?r.cause.message:r.details,c=r.cause instanceof n&&r.cause.docsPath||r.docsPath,o=t?.({...r,docsPath:c});super([i||"An error occurred.","",...r.metaMessages?[...r.metaMessages,""]:[],...o?[`Docs: ${o}`]:[],...a?[`Details: ${a}`]:[],...s?[`Version: ${s}`]:[]].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=a,this.docsPath=c,this.metaMessages=r.metaMessages,this.name=r.name??this.name,this.shortMessage=i,this.version=e}walk(e){return i(this,e)}}function i(e,t){return t?.(e)?e:e&&"object"==typeof e&&"cause"in e&&void 0!==e.cause?i(e.cause,t):t?null:e}class r extends n{constructor({max:e,min:t,signed:s,size:n,value:i}){super(`Number "${i}" is not in safe ${n?`${8*n}-bit ${s?"signed":"unsigned"} `:""}integer range ${e?`(${t} to ${e})`:`(above ${t})`}`,{name:"IntegerOutOfRangeError"})}}class a extends n{constructor({givenSize:e,maxSize:t}){super(`Size cannot exceed ${t} bytes. Given size: ${e} bytes.`,{name:"SizeOverflowError"})}}function c(e){return function(e,{strict:t=!0}={}){return!!e&&"string"==typeof e&&(t?/^0x[0-9a-fA-F]*$/.test(e):e.startsWith("0x"))}(e,{strict:!1})?Math.ceil((e.length-2)/2):e.length}class o extends n{constructor({size:e,targetSize:t,type:s}){super(`${s.charAt(0).toUpperCase()}${s.slice(1).toLowerCase()} size (${e}) exceeds padding size (${t}).`,{name:"SizeExceedsPaddingSizeError"})}}function d(e,{dir:t,size:s=32}={}){return"string"==typeof e?function(e,{dir:t,size:s=32}={}){if(null===s)return e;const n=e.replace("0x","");if(n.length>2*s)throw new o({size:Math.ceil(n.length/2),targetSize:s,type:"hex"});return`0x${n["right"===t?"padEnd":"padStart"](2*s,"0")}`}(e,{dir:t,size:s}):function(e,{dir:t,size:s=32}={}){if(null===s)return e;if(e.length>s)throw new o({size:e.length,targetSize:s,type:"bytes"});const n=new Uint8Array(s);for(let i=0;i<s;i++){const r="right"===t;n[r?i:s-i-1]=e[r?i:e.length-i-1]}return n}(e,{dir:t,size:s})}function u(e,t={}){const{signed:s,size:n}=t,i=BigInt(e);let a;n?a=s?(1n<<8n*BigInt(n)-1n)-1n:2n**(8n*BigInt(n))-1n:"number"==typeof e&&(a=BigInt(Number.MAX_SAFE_INTEGER));const c="bigint"==typeof a&&s?-a-1n:0;if(a&&i>a||i<c){const t="bigint"==typeof e?"n":"";throw new r({max:a?`${a}${t}`:void 0,min:`${c}${t}`,signed:s,size:n,value:`${e}${t}`})}const o=`0x${(s&&i<0?(1n<<BigInt(8*n))+BigInt(i):i).toString(16)}`;return n?d(o,{size:n}):o}function l(e,{size:t}){if(c(e)>t)throw new a({givenSize:c(e),maxSize:t})}function g(e,t={}){return Number(function(e,t={}){const{signed:s}=t;t.size&&l(e,{size:t.size});const n=BigInt(e);if(!s)return n;const i=(e.length-2)/2;return n<=(1n<<8n*BigInt(i)-1n)-1n?n:n-BigInt(`0x${"f".padStart(2*i,"f")}`)-1n}(e,t))}class h extends Map{constructor(e){super(),Object.defineProperty(this,"maxSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSize=e}get(e){const t=super.get(e);return super.has(e)&&void 0!==t&&(this.delete(e),super.set(e,t)),t}set(e,t){if(super.set(e,t),this.maxSize&&this.size>this.maxSize){const e=this.keys().next().value;e&&this.delete(e)}return this}}function f(e){const{source:t}=e,s=new Map,n=new h(8192),i=new Map,r=({address:e,chainId:t})=>`${e}.${t}`;return{async consume({address:e,chainId:s,client:i}){const a=r({address:e,chainId:s}),c=this.get({address:e,chainId:s,client:i});this.increment({address:e,chainId:s});const o=await c;return await t.set({address:e,chainId:s},o),n.set(a,o),o},async increment({address:e,chainId:t}){const n=r({address:e,chainId:t}),i=s.get(n)??0;s.set(n,i+1)},async get({address:e,chainId:a,client:c}){const o=r({address:e,chainId:a});let d=i.get(o);d||(d=(async()=>{try{const s=await t.get({address:e,chainId:a,client:c}),i=n.get(o)??0;return i>0&&s<=i?i+1:(n.delete(o),s)}finally{this.reset({address:e,chainId:a})}})(),i.set(o,d));return(s.get(o)??0)+await d},reset({address:e,chainId:t}){const n=r({address:e,chainId:t});s.delete(n),i.delete(n)}}}function b(){return{async get(e){const{address:t,client:s}=e;return async function(e,{address:t,blockTag:s="latest",blockNumber:n}){return g(await e.request({method:"eth_getTransactionCount",params:[t,"bigint"==typeof n?u(n):s]},{dedupe:Boolean(n)}))}(s,{address:t,blockTag:"pending"})},set(){}}}const m=f({source:b()});export{f as createNonceManager,b as jsonRpc,m as nonceManager};