@dfinity/utils
Version:
A collection of utilities and constants for NNS/SNS projects.
3 lines (2 loc) • 12 kB
JavaScript
var I=(n=>(n[n.FractionalMoreThan8Decimals=0]="FractionalMoreThan8Decimals",n[n.InvalidFormat=1]="InvalidFormat",n[n.FractionalTooManyDecimals=2]="FractionalTooManyDecimals",n))(I||{});var U=BigInt(1e8);var v=8,K=e=>{let t=e.includes("e")?Number(e).toLocaleString("en",{useGrouping:!1,maximumFractionDigits:20}):e;t=t.trim().replace(/[,']/g,"");let r=t.match(/\d*(\.\d*)?/);if(!r||r[0]!==t)return 1;let[n,o]=t.split("."),i=BigInt(0);if(n)try{i+=BigInt(n)*U}catch{return 1}if(o){if(o.length>8)return 0;try{i+=BigInt(o.padEnd(8,"0"))}catch{return 1}}return i},Y=({amount:e,decimals:t})=>{e=e.trim().replace(/[,']/g,"");let r=e.match(/\d*(\.\d*)?/);if(!r||r[0]!==e)return 1;let[n,o]=e.split("."),i=0n,c=10n**BigInt(t);if(n)try{i+=BigInt(n)*c}catch{return 1}if(o){if(o.length>t)return 2;try{i+=BigInt(o.padEnd(t,"0"))}catch{return 1}}return i},et={symbol:"ICP",name:"Internet Computer",decimals:8},_=class e{constructor(t,r){this.e8s=t;this.token=r;if(r.decimals!==8)throw new Error("Use TokenAmountV2 for number of decimals other than 8")}static fromE8s({amount:t,token:r}){return new e(t,r)}static fromString({amount:t,token:r}){if(r.decimals!==8)throw new Error("Use TokenAmountV2 for number of decimals other than 8");let n=K(t);return typeof n=="bigint"?new e(n,r):n}static fromNumber({amount:t,token:r}){let n=e.fromString({amount:t.toString(),token:r});if(n instanceof e)return n;throw n===0?new Error(`Number ${t} has more than 8 decimals`):new Error(`Invalid number ${t}`)}toE8s(){return this.e8s}},S=class e{constructor(t,r){this.ulps=t;this.token=r}static fromUlps({amount:t,token:r}){return new e(t,r)}static fromString({amount:t,token:r}){let n=Y({amount:t,decimals:r.decimals});return typeof n=="bigint"?new e(n,r):n}static fromNumber({amount:t,token:r}){let n=e.fromString({amount:t.toFixed(Math.min(v,r.decimals)),token:r});if(n instanceof e)return n;throw n===2?new Error(`Number ${t} has more than ${r.decimals} decimals`):new Error(`Invalid number ${t}`)}toUlps(){return this.ulps}toE8s(){return this.token.decimals<8?this.ulps*10n**BigInt(8-this.token.decimals):this.token.decimals===8?this.ulps:this.ulps/10n**BigInt(this.token.decimals-8)}};var w=class{constructor(t,r,n){this.id=t;this.service=r;this.certifiedService=n;this.caller=({certified:t=!0})=>t?this.certifiedService:this.service}get canisterId(){return this.id}};var b=e=>e==null,s=e=>!b(e),j=e=>s(e)&&e!=="",ot=e=>!j(e);var st=async({request:e,onLoad:t,onQueryError:r,onUpdateError:n,strategy:o="query_and_update",identity:i,resolution:c="race"})=>{let a=!1,d=x=>e({certified:x,identity:i}).then(l=>{a||t({certified:x,response:l})}).catch(l=>{x||r?.({error:l,identity:i}),!a&&(b(n)||(console.error(l),x&&n({error:l,identity:i})))}).finally(()=>a=a||x),m=o==="query"?[d(!1)]:o==="update"?[d(!0)]:[d(!1),d(!0)];await(c==="all_settled"?Promise.allSettled(m):Promise.race(m))};import{Actor as P}from"@dfinity/agent";import{AnonymousIdentity as H,HttpAgent as E}from"@dfinity/agent";var O=()=>E.createSync({host:"https://icp-api.io",identity:new H}),q=async({identity:e,host:t,fetchRootKey:r=!1,verifyQuerySignatures:n=!1,retryTimes:o})=>await E.create({identity:e,...s(t)&&{host:t},verifyQuerySignatures:n,...s(o)&&{retryTimes:o},shouldFetchRootKey:r}),B=class e{constructor(t){this.config=t;this.agents=void 0;this.getAgent=async({identity:t})=>{let r=t.getPrincipal().toText();if(b(this.agents)||b(this.agents[r])){let n=await q({identity:t,fetchRootKey:this.config.fetchRootKey,host:this.config.host,verifyQuerySignatures:!0});return this.agents={...this.agents??{},[r]:n},n}return this.agents[r]};this.clearAgents=()=>{this.agents=null}}static create(t){return new e(t)}};var lt=({options:{canisterId:e,serviceOverride:t,certifiedServiceOverride:r,agent:n,callTransform:o,queryTransform:i},idlFactory:c,certifiedIdlFactory:a})=>{let d=n??O(),m=t??P.createActor(c,{agent:d,canisterId:e,callTransform:o,queryTransform:i}),x=r??P.createActor(a,{agent:d,canisterId:e,callTransform:o,queryTransform:i});return{service:m,certifiedService:x,agent:d,canisterId:e}};var y=class extends Error{},A=class extends Error{},f=(e,t)=>{if(e==null)throw new A(t)},mt=(e,t)=>(f(e,t),e),gt=e=>{if(e<0||e>100)throw new y(`${e} is not a valid percentage number.`)};var ht=e=>{let t=new DataView(e.buffer,e.byteOffset,e.byteLength);if(typeof t.getBigUint64=="function")return t.getBigUint64(0);{let r=BigInt(t.getUint32(0)),n=BigInt(t.getUint32(4));return(r<<BigInt(32))+n}},Tt=e=>{let t=new ArrayBuffer(8),r=new DataView(t);if(typeof r.setBigUint64=="function")r.setBigUint64(0,e);else{let n=Number(e>>BigInt(32)),o=Number(e&BigInt(4294967295));r.setUint32(0,n),r.setUint32(4,o)}return new Uint8Array(t)},Nt=e=>{let t=new DataView(new ArrayBuffer(8));for(let r=7;r>=0;--r)t.setUint8(r,e%256),e=e>>8;return new Uint8Array(t.buffer)},It=e=>new Uint8Array(e),Ut=e=>Array.from(e),_t=e=>new Uint8Array(e),St=e=>Array.from(e).map(t=>t.charCodeAt(0)),wt=e=>{let t=e.match(/.{1,2}/g);return f(t,"Invalid hex string."),Uint8Array.from(t.map(r=>parseInt(r,16)))},k=e=>(e instanceof Uint8Array||(e=Uint8Array.from(e)),e.reduce((t,r)=>t+r.toString(16).padStart(2,"0"),"")),Bt=e=>{let t=0n;for(let r=e.length-1;r>=0;r--)t=(t<<32n)+BigInt(e[r]);return t};var g="abcdefghijklmnopqrstuvwxyz234567",u=Object.create(null);for(let e=0;e<g.length;e++)u[g[e]]=e;u[0]=u.o;u[1]=u.i;var Pt=e=>{let t=0,r=0,n="";function o(i){return t<0?r|=i>>-t:r=i<<t&248,t>3?(t-=8,1):(t<4&&(n+=g[r>>3],t+=5),0)}for(let i=0;i<e.length;)i+=o(e[i]);return n+(t<0?g[r>>3]:"")};function kt(e){let t=0,r=0,n=new Uint8Array(e.length*4/3|0),o=0;function i(c){let a=u[c.toLowerCase()];f(a,`Invalid character: ${JSON.stringify(c)}`),a<<=3,r|=a>>>t,t+=5,t>=8&&(n[o++]=r,t-=8,t>0?r=a<<5-t&255:r=0)}for(let c of e)i(c);return n.slice(0,o)}var Dt=e=>btoa(String.fromCharCode(...new Uint8Array(e))),Ct=e=>Uint8Array.from(atob(e),t=>t.charCodeAt(0));var $=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]),J=e=>{let t=-1;for(let r=0;r<e.length;r++){let o=(e[r]^t)&255;t=$[o]^t>>>8}return(t^-1)>>>0},Lt=e=>{let t=new ArrayBuffer(4);return new DataView(t).setUint32(0,J(e),!1),new Uint8Array(t)};import{Principal as R}from"@dfinity/principal";var h="__bigint__",T="__principal__",N="__uint8array__",D=(e,t)=>typeof t=="bigint"?{[h]:`${t}`}:s(t)&&t instanceof R?{[T]:t.toText()}:s(t)&&t instanceof Uint8Array?{[N]:Array.from(t)}:t,Kt=(e,t)=>{let r=n=>t[n];return s(t)&&typeof t=="object"&&h in t?BigInt(r(h)):s(t)&&typeof t=="object"&&T in t?R.fromText(r(T)):s(t)&&typeof t=="object"&&N in t?Uint8Array.from(r(N)):t};var qt=async e=>{let t=JSON.stringify(e,D);return await Q(t)},Q=async e=>{let t=new TextEncoder().encode(e),r=await crypto.subtle.digest("SHA-256",t);return k(new Uint8Array(r))};var z={year:"year",year_plural:"years",month:"month",month_plural:"months",day:"day",day_plural:"days",hour:"hour",hour_plural:"hours",minute:"minute",minute_plural:"minutes",second:"second",second_plural:"seconds"},Jt=({seconds:e,i18n:t=z})=>{let r=e/BigInt(60),n=r/BigInt(60);r-=n*BigInt(60);let o=n/BigInt(24);n-=o*BigInt(24);let i=G(o);return o-=C(i),[p("year",i),p("day",o),p("hour",n),p("minute",r),...e>BigInt(0)&&e<BigInt(60)?[p("second",e)]:[]].filter(({amount:a})=>a>0).slice(0,2).map(a=>`${a.amount} ${a.amount===1?t[a.labelKey]:t[`${a.labelKey}_plural`]}`).join(", ")},G=e=>{let t=e/BigInt(365);for(;C(t)>e;)t--;return t},C=e=>{let t=e/BigInt(4);return e*BigInt(365)+t},p=(e,t)=>({labelKey:e,amount:Number(t)}),M=1000000n,Qt=()=>BigInt(Date.now())*M,zt=e=>BigInt(e.getTime())*M;var Wt=(e,t)=>{let r;return(...n)=>{let o=()=>e(...n);r&&clearTimeout(r),r=setTimeout(o,t!==void 0&&t>0?t:300)}};var ee=e=>s(e)?[e]:[],L=e=>e?.[0],re=e=>{let t=L(e);return f(t),t},ne=e=>L(e??[]);var ie=e=>{let t=e.toUint8Array(),r=new Uint8Array(32);return r[0]=t.length,r.set(t,1),r};var F=(e,t)=>t>e.length?[...e,...[...Array(t-e.length).keys()].map(()=>0)]:e,V=e=>{if(!Number.isNaN(Number(e)))return Number(e);let t=e.split("").reduce((r,n)=>Number.isNaN(Number(n))?r:r+n,"");return Number(t)},se=({minVersion:e,currentVersion:t})=>{let r=F(e.split(".").map(V),3).join(".");return F(t.split(".").map(V),3).join(".").localeCompare(r,void 0,{numeric:!0,sensitivity:"base"})<0};export{B as AgentManager,w as Canister,I as FromStringToTokenError,et as ICPToken,y as InvalidPercentageError,A as NullishError,_ as TokenAmount,S as TokenAmountV2,It as arrayBufferToUint8Array,_t as arrayOfNumberToUint8Array,mt as asNonNullish,St as asciiStringToByteArray,f as assertNonNullish,gt as assertPercentageNumber,Ct as base64ToUint8Array,Lt as bigEndianCrc32,Tt as bigIntToUint8Array,Bt as candidNumberArrayToBigInt,K as convertStringToE8s,q as createAgent,lt as createServices,Wt as debounce,kt as decodeBase32,O as defaultAgent,Pt as encodeBase32,re as fromDefinedNullable,L as fromNullable,ne as fromNullishNullable,qt as hashObject,Q as hashText,wt as hexStringToUint8Array,ot as isEmptyString,b as isNullish,D as jsonReplacer,Kt as jsonReviver,s as nonNullish,j as notEmptyString,Qt as nowInBigIntNanoSeconds,Nt as numberToUint8Array,ie as principalToSubAccount,st as queryAndUpdate,Jt as secondsToDuration,se as smallerVersion,zt as toBigIntNanoSeconds,ee as toNullable,Ut as uint8ArrayToArrayOfNumber,Dt as uint8ArrayToBase64,ht as uint8ArrayToBigInt,k as uint8ArrayToHexString};
//# sourceMappingURL=index.js.map