@dfinity/utils 2.11.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -36,6 +36,7 @@ npm i @dfinity/agent @dfinity/candid @dfinity/principal
36
36
  - [nonNullish](#gear-nonnullish)
37
37
  - [notEmptyString](#gear-notemptystring)
38
38
  - [isEmptyString](#gear-isemptystring)
39
+ - [queryAndUpdate](#gear-queryandupdate)
39
40
  - [defaultAgent](#gear-defaultagent)
40
41
  - [createAgent](#gear-createagent)
41
42
  - [createServices](#gear-createservices)
@@ -116,9 +117,9 @@ Parameters:
116
117
 
117
118
  Checks if a given value is not null, not undefined, and not an empty string.
118
119
 
119
- | Function | Type |
120
- | ---------------- | ------------------------------------------------- |
121
- | `notEmptyString` | `(value: string or null or undefined) => boolean` |
120
+ | Function | Type |
121
+ | ---------------- | --------------------------------------------------------- |
122
+ | `notEmptyString` | `(value: string or null or undefined) => value is string` |
122
123
 
123
124
  Parameters:
124
125
 
@@ -130,15 +131,53 @@ Parameters:
130
131
 
131
132
  Checks if a given value is null, undefined, or an empty string.
132
133
 
133
- | Function | Type |
134
- | --------------- | ------------------------------------------------- |
135
- | `isEmptyString` | `(value: string or null or undefined) => boolean` |
134
+ | Function | Type |
135
+ | --------------- | -------------------------------------------------------------------------- |
136
+ | `isEmptyString` | `(value: string or null or undefined) => value is "" or null or undefined` |
136
137
 
137
138
  Parameters:
138
139
 
139
140
  - `value`: - The value to check.
140
141
 
141
- [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/utils/nullish.utils.ts#L38)
142
+ [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/utils/nullish.utils.ts#L39)
143
+
144
+ #### :gear: queryAndUpdate
145
+
146
+ This service performs a query (not-certified) call and/or an update (certified) call, and handles the results.
147
+
148
+ It is useful because it can do both type of calls for security reasons.
149
+ For example, malicious nodes can forge transactions and balance when calling an Index canister, if no update is performed to certify the results.
150
+
151
+ Furthermore, it can handle the results of the calls in different ways:
152
+
153
+ - `query` only performs a query call.
154
+ - `update` only performs an update call.
155
+ - `query_and_update` performs both calls.
156
+
157
+ The resolution can be:
158
+
159
+ - `all_settled` waits for all calls to settle.
160
+ - `race` waits for the first call to settle (typically, `query` is the fastest one).
161
+
162
+ Once the call(s) are done, the response is handled by the `onLoad` callback.
163
+ However, if an error occurs, it is handled by the error callbacks, if provided: one for the query call and one for the update call.
164
+
165
+ | Function | Type |
166
+ | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
167
+ | `queryAndUpdate` | `<R, E = unknown>({ request, onLoad, onQueryError, onUpdateError, strategy, identity, resolution, }: QueryAndUpdateParams<R, E>) => Promise<void>` |
168
+
169
+ Parameters:
170
+
171
+ - `params`: The parameters to perform the request.
172
+ - `params.request`: The request to perform.
173
+ - `params.onLoad`: The callback to handle the response of the request.
174
+ - `params.onQueryError`: The callback to handle the error of the `query` request.
175
+ - `params.onUpdateError`: The callback to handle the error of the `update` request.
176
+ - `params.strategy`: The strategy to use. Default is `query_and_update`.
177
+ - `params.identity`: The identity to use for the request.
178
+ - `params.resolution`: The resolution to use. Default is `race`.
179
+
180
+ [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/services/query.ts#L36)
142
181
 
143
182
  #### :gear: defaultAgent
144
183
 
@@ -388,11 +427,22 @@ Parameters:
388
427
 
389
428
  #### :gear: debounce
390
429
 
430
+ Creates a debounced version of the provided function.
431
+
432
+ The debounced function postpones its execution until after a certain amount of time
433
+ has elapsed since the last time it was invoked. This is useful for limiting the rate
434
+ at which a function is called (e.g. in response to user input or events).
435
+
391
436
  | Function | Type |
392
437
  | ---------- | --------------------------------------------------------------------------------- |
393
438
  | `debounce` | `(func: Function, timeout?: number or undefined) => (...args: unknown[]) => void` |
394
439
 
395
- [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/utils/debounce.utils.ts#L2)
440
+ Parameters:
441
+
442
+ - `func`: - The function to debounce. It will only be called after no new calls happen within the specified timeout.
443
+ - `timeout`: - The debounce delay in milliseconds. Defaults to 300ms if not provided or invalid.
444
+
445
+ [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/utils/debounce.utils.ts#L13)
396
446
 
397
447
  #### :gear: toNullable
398
448
 
@@ -556,12 +606,11 @@ Represents an amount of tokens.
556
606
 
557
607
  [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/parser/token.ts#L130)
558
608
 
559
- #### Methods
609
+ #### Static Methods
560
610
 
561
611
  - [fromE8s](#gear-frome8s)
562
612
  - [fromString](#gear-fromstring)
563
613
  - [fromNumber](#gear-fromnumber)
564
- - [toE8s](#gear-toe8s)
565
614
 
566
615
  ##### :gear: fromE8s
567
616
 
@@ -614,6 +663,10 @@ Parameters:
614
663
 
615
664
  [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/parser/token.ts#L198)
616
665
 
666
+ #### Methods
667
+
668
+ - [toE8s](#gear-toe8s)
669
+
617
670
  ##### :gear: toE8s
618
671
 
619
672
  | Method | Type |
@@ -628,13 +681,11 @@ Represents an amount of tokens.
628
681
 
629
682
  [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/parser/token.ts#L236)
630
683
 
631
- #### Methods
684
+ #### Static Methods
632
685
 
633
686
  - [fromUlps](#gear-fromulps)
634
687
  - [fromString](#gear-fromstring)
635
688
  - [fromNumber](#gear-fromnumber)
636
- - [toUlps](#gear-toulps)
637
- - [toE8s](#gear-toe8s)
638
689
 
639
690
  ##### :gear: fromUlps
640
691
 
@@ -687,6 +738,11 @@ Parameters:
687
738
 
688
739
  [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/parser/token.ts#L294)
689
740
 
741
+ #### Methods
742
+
743
+ - [toUlps](#gear-toulps)
744
+ - [toE8s](#gear-toe8s)
745
+
690
746
  ##### :gear: toUlps
691
747
 
692
748
  | Method | Type |
@@ -716,11 +772,9 @@ Provides functionality to create new agents, retrieve cached agents, and clear t
716
772
 
717
773
  [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/utils/agent.utils.ts#L53)
718
774
 
719
- #### Methods
775
+ #### Static Methods
720
776
 
721
777
  - [create](#gear-create)
722
- - [getAgent](#gear-getagent)
723
- - [clearAgents](#gear-clearagents)
724
778
 
725
779
  ##### :gear: create
726
780
 
@@ -741,6 +795,11 @@ Parameters:
741
795
 
742
796
  [:link: Source](https://github.com/dfinity/ic-js/tree/main/packages/utils/src/utils/agent.utils.ts#L69)
743
797
 
798
+ #### Methods
799
+
800
+ - [getAgent](#gear-getagent)
801
+ - [clearAgents](#gear-clearagents)
802
+
744
803
  ##### :gear: getAgent
745
804
 
746
805
  Get or create an HTTP agent for a given identity.
@@ -1,2 +1,2 @@
1
- "use strict";var y=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var $=Object.prototype.hasOwnProperty;var j=(e,t)=>{for(var r in t)y(e,r,{get:t[r],enumerable:!0})},v=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of H(t))!$.call(e,i)&&i!==r&&y(e,i,{get:()=>t[i],enumerable:!(n=Y(t,i))||n.enumerable});return e};var q=e=>v(y({},"__esModule",{value:!0}),e);var kt={};j(kt,{AgentManager:()=>I,Canister:()=>N,FromStringToTokenError:()=>A,ICPToken:()=>Q,InvalidPercentageError:()=>l,NullishError:()=>p,TokenAmount:()=>T,TokenAmountV2:()=>h,arrayBufferToUint8Array:()=>nt,arrayOfNumberToUint8Array:()=>ot,asNonNullish:()=>X,asciiStringToByteArray:()=>at,assertNonNullish:()=>x,assertPercentageNumber:()=>Z,base64ToUint8Array:()=>ut,bigEndianCrc32:()=>mt,bigIntToUint8Array:()=>et,candidNumberArrayToBigInt:()=>xt,convertStringToE8s:()=>P,createAgent:()=>R,createServices:()=>W,debounce:()=>Nt,decodeBase32:()=>ft,defaultAgent:()=>U,encodeBase32:()=>dt,fromDefinedNullable:()=>Ut,fromNullable:()=>S,fromNullishNullable:()=>_t,hexStringToUint8Array:()=>ct,isEmptyString:()=>G,isNullish:()=>f,jsonReplacer:()=>St,jsonReviver:()=>wt,nonNullish:()=>c,notEmptyString:()=>D,nowInBigIntNanoSeconds:()=>Tt,numberToUint8Array:()=>rt,principalToSubAccount:()=>Bt,secondsToDuration:()=>yt,smallerVersion:()=>Et,toBigIntNanoSeconds:()=>ht,toNullable:()=>It,uint8ArrayToArrayOfNumber:()=>it,uint8ArrayToBase64:()=>bt,uint8ArrayToBigInt:()=>tt,uint8ArrayToHexString:()=>st});module.exports=q(kt);var A=(n=>(n[n.FractionalMoreThan8Decimals=0]="FractionalMoreThan8Decimals",n[n.InvalidFormat=1]="InvalidFormat",n[n.FractionalTooManyDecimals=2]="FractionalTooManyDecimals",n))(A||{});var O=BigInt(1e8);var J=8,P=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,i]=t.split("."),o=BigInt(0);if(n)try{o+=BigInt(n)*O}catch{return 1}if(i){if(i.length>8)return 0;try{o+=BigInt(i.padEnd(8,"0"))}catch{return 1}}return o},z=({amount:e,decimals:t})=>{e=e.trim().replace(/[,']/g,"");let r=e.match(/\d*(\.\d*)?/);if(!r||r[0]!==e)return 1;let[n,i]=e.split("."),o=0n,s=10n**BigInt(t);if(n)try{o+=BigInt(n)*s}catch{return 1}if(i){if(i.length>t)return 2;try{o+=BigInt(i.padEnd(t,"0"))}catch{return 1}}return o},Q={symbol:"ICP",name:"Internet Computer",decimals:8},T=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=P(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}},h=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=z({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(J,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 N=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 _=require("@dfinity/agent");var b=require("@dfinity/agent");var f=e=>e==null,c=e=>!f(e),D=e=>c(e)&&e!=="",G=e=>!D(e);var U=()=>b.HttpAgent.createSync({host:"https://icp-api.io",identity:new b.AnonymousIdentity}),R=async({identity:e,host:t,fetchRootKey:r=!1,verifyQuerySignatures:n=!1,retryTimes:i})=>await b.HttpAgent.create({identity:e,...c(t)&&{host:t},verifyQuerySignatures:n,...c(i)&&{retryTimes:i},shouldFetchRootKey:r}),I=class e{constructor(t){this.config=t;this.agents=void 0;this.getAgent=async({identity:t})=>{let r=t.getPrincipal().toText();if(f(this.agents)||f(this.agents[r])){let n=await R({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 W=({options:{canisterId:e,serviceOverride:t,certifiedServiceOverride:r,agent:n,callTransform:i,queryTransform:o},idlFactory:s,certifiedIdlFactory:a})=>{let g=n??U(),V=t??_.Actor.createActor(s,{agent:g,canisterId:e,callTransform:i,queryTransform:o}),K=r??_.Actor.createActor(a,{agent:g,canisterId:e,callTransform:i,queryTransform:o});return{service:V,certifiedService:K,agent:g,canisterId:e}};var l=class extends Error{},p=class extends Error{},x=(e,t)=>{if(e==null)throw new p(t)},X=(e,t)=>(x(e,t),e),Z=e=>{if(e<0||e>100)throw new l(`${e} is not a valid percentage number.`)};var tt=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}},et=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)),i=Number(e&BigInt(4294967295));r.setUint32(0,n),r.setUint32(4,i)}return new Uint8Array(t)},rt=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)},nt=e=>new Uint8Array(e),it=e=>Array.from(e),ot=e=>new Uint8Array(e),at=e=>Array.from(e).map(t=>t.charCodeAt(0)),ct=e=>{let t=e.match(/.{1,2}/g);return x(t,"Invalid hex string."),Uint8Array.from(t.map(r=>parseInt(r,16)))},st=e=>(e instanceof Uint8Array||(e=Uint8Array.from(e)),e.reduce((t,r)=>t+r.toString(16).padStart(2,"0"),"")),xt=e=>{let t=0n;for(let r=e.length-1;r>=0;r--)t=(t<<32n)+BigInt(e[r]);return t};var m="abcdefghijklmnopqrstuvwxyz234567",d=Object.create(null);for(let e=0;e<m.length;e++)d[m[e]]=e;d[0]=d.o;d[1]=d.i;var dt=e=>{let t=0,r=0,n="";function i(o){return t<0?r|=o>>-t:r=o<<t&248,t>3?(t-=8,1):(t<4&&(n+=m[r>>3],t+=5),0)}for(let o=0;o<e.length;)o+=i(e[o]);return n+(t<0?m[r>>3]:"")};function ft(e){let t=0,r=0,n=new Uint8Array(e.length*4/3|0),i=0;function o(s){let a=d[s.toLowerCase()];x(a,`Invalid character: ${JSON.stringify(s)}`),a<<=3,r|=a>>>t,t+=5,t>=8&&(n[i++]=r,t-=8,t>0?r=a<<5-t&255:r=0)}for(let s of e)o(s);return n.slice(0,i)}var bt=e=>btoa(String.fromCharCode(...new Uint8Array(e))),ut=e=>Uint8Array.from(atob(e),t=>t.charCodeAt(0));var lt=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]),pt=e=>{let t=-1;for(let r=0;r<e.length;r++){let i=(e[r]^t)&255;t=lt[i]^t>>>8}return(t^-1)>>>0},mt=e=>{let t=new ArrayBuffer(4);return new DataView(t).setUint32(0,pt(e),!1),new Uint8Array(t)};var gt={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"},yt=({seconds:e,i18n:t=gt})=>{let r=e/BigInt(60),n=r/BigInt(60);r-=n*BigInt(60);let i=n/BigInt(24);n-=i*BigInt(24);let o=At(i);return i-=C(o),[u("year",o),u("day",i),u("hour",n),u("minute",r),...e>BigInt(0)&&e<BigInt(60)?[u("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(", ")},At=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},u=(e,t)=>({labelKey:e,amount:Number(t)}),M=1000000n,Tt=()=>BigInt(Date.now())*M,ht=e=>BigInt(e.getTime())*M;var Nt=(e,t)=>{let r;return(...n)=>{let i=()=>e(...n);r&&clearTimeout(r),r=setTimeout(i,t!==void 0&&t>0?t:300)}};var It=e=>c(e)?[e]:[],S=e=>e==null?void 0:e[0],Ut=e=>{let t=S(e);return x(t),t},_t=e=>S(e??[]);var k=require("@dfinity/principal");var w="__bigint__",B="__principal__",E="__uint8array__",St=(e,t)=>typeof t=="bigint"?{[w]:`${t}`}:c(t)&&t instanceof k.Principal?{[B]:t.toText()}:c(t)&&t instanceof Uint8Array?{[E]:Array.from(t)}:t,wt=(e,t)=>{let r=n=>t[n];return c(t)&&typeof t=="object"&&w in t?BigInt(r(w)):c(t)&&typeof t=="object"&&B in t?k.Principal.fromText(r(B)):c(t)&&typeof t=="object"&&E in t?Uint8Array.from(r(E)):t};var Bt=e=>{let t=e.toUint8Array(),r=new Uint8Array(32);return r[0]=t.length,r.set(t,1),r};var L=(e,t)=>t>e.length?[...e,...[...Array(t-e.length).keys()].map(()=>0)]:e,F=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)},Et=({minVersion:e,currentVersion:t})=>{let r=L(e.split(".").map(F),3).join(".");return L(t.split(".").map(F),3).join(".").localeCompare(r,void 0,{numeric:!0,sensitivity:"base"})<0};0&&(module.exports={AgentManager,Canister,FromStringToTokenError,ICPToken,InvalidPercentageError,NullishError,TokenAmount,TokenAmountV2,arrayBufferToUint8Array,arrayOfNumberToUint8Array,asNonNullish,asciiStringToByteArray,assertNonNullish,assertPercentageNumber,base64ToUint8Array,bigEndianCrc32,bigIntToUint8Array,candidNumberArrayToBigInt,convertStringToE8s,createAgent,createServices,debounce,decodeBase32,defaultAgent,encodeBase32,fromDefinedNullable,fromNullable,fromNullishNullable,hexStringToUint8Array,isEmptyString,isNullish,jsonReplacer,jsonReviver,nonNullish,notEmptyString,nowInBigIntNanoSeconds,numberToUint8Array,principalToSubAccount,secondsToDuration,smallerVersion,toBigIntNanoSeconds,toNullable,uint8ArrayToArrayOfNumber,uint8ArrayToBase64,uint8ArrayToBigInt,uint8ArrayToHexString});
1
+ "use strict";var T=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var H=Object.prototype.hasOwnProperty;var $=(e,t)=>{for(var r in t)T(e,r,{get:t[r],enumerable:!0})},j=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of q(t))!H.call(e,i)&&i!==r&&T(e,i,{get:()=>t[i],enumerable:!(n=v(t,i))||n.enumerable});return e};var J=e=>j(T({},"__esModule",{value:!0}),e);var Pt={};$(Pt,{AgentManager:()=>S,Canister:()=>_,FromStringToTokenError:()=>N,ICPToken:()=>Q,InvalidPercentageError:()=>y,NullishError:()=>A,TokenAmount:()=>I,TokenAmountV2:()=>U,arrayBufferToUint8Array:()=>ot,arrayOfNumberToUint8Array:()=>ct,asNonNullish:()=>tt,asciiStringToByteArray:()=>st,assertNonNullish:()=>x,assertPercentageNumber:()=>et,base64ToUint8Array:()=>pt,bigEndianCrc32:()=>yt,bigIntToUint8Array:()=>nt,candidNumberArrayToBigInt:()=>ft,convertStringToE8s:()=>C,createAgent:()=>L,createServices:()=>Z,debounce:()=>Ut,decodeBase32:()=>ut,defaultAgent:()=>w,encodeBase32:()=>bt,fromDefinedNullable:()=>St,fromNullable:()=>E,fromNullishNullable:()=>wt,hexStringToUint8Array:()=>dt,isEmptyString:()=>W,isNullish:()=>b,jsonReplacer:()=>Bt,jsonReviver:()=>Et,nonNullish:()=>c,notEmptyString:()=>M,nowInBigIntNanoSeconds:()=>Nt,numberToUint8Array:()=>it,principalToSubAccount:()=>kt,queryAndUpdate:()=>X,secondsToDuration:()=>ht,smallerVersion:()=>Ot,toBigIntNanoSeconds:()=>It,toNullable:()=>_t,uint8ArrayToArrayOfNumber:()=>at,uint8ArrayToBase64:()=>lt,uint8ArrayToBigInt:()=>rt,uint8ArrayToHexString:()=>xt});module.exports=J(Pt);var N=(n=>(n[n.FractionalMoreThan8Decimals=0]="FractionalMoreThan8Decimals",n[n.InvalidFormat=1]="InvalidFormat",n[n.FractionalTooManyDecimals=2]="FractionalTooManyDecimals",n))(N||{});var D=BigInt(1e8);var z=8,C=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,i]=t.split("."),o=BigInt(0);if(n)try{o+=BigInt(n)*D}catch{return 1}if(i){if(i.length>8)return 0;try{o+=BigInt(i.padEnd(8,"0"))}catch{return 1}}return o},G=({amount:e,decimals:t})=>{e=e.trim().replace(/[,']/g,"");let r=e.match(/\d*(\.\d*)?/);if(!r||r[0]!==e)return 1;let[n,i]=e.split("."),o=0n,s=10n**BigInt(t);if(n)try{o+=BigInt(n)*s}catch{return 1}if(i){if(i.length>t)return 2;try{o+=BigInt(i.padEnd(t,"0"))}catch{return 1}}return o},Q={symbol:"ICP",name:"Internet Computer",decimals:8},I=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=C(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}},U=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=G({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(z,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 _=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,c=e=>!b(e),M=e=>c(e)&&e!=="",W=e=>!M(e);var X=async({request:e,onLoad:t,onQueryError:r,onUpdateError:n,strategy:i="query_and_update",identity:o,resolution:s="race"})=>{let a=!1,d=f=>e({certified:f,identity:o}).then(l=>{a||t({certified:f,response:l})}).catch(l=>{f||r==null||r({error:l,identity:o}),!a&&(b(n)||(console.error(l),f&&n({error:l,identity:o})))}).finally(()=>a=a||f),g=i==="query"?[d(!1)]:i==="update"?[d(!0)]:[d(!1),d(!0)];await(s==="all_settled"?Promise.allSettled(g):Promise.race(g))};var B=require("@dfinity/agent");var p=require("@dfinity/agent");var w=()=>p.HttpAgent.createSync({host:"https://icp-api.io",identity:new p.AnonymousIdentity}),L=async({identity:e,host:t,fetchRootKey:r=!1,verifyQuerySignatures:n=!1,retryTimes:i})=>await p.HttpAgent.create({identity:e,...c(t)&&{host:t},verifyQuerySignatures:n,...c(i)&&{retryTimes:i},shouldFetchRootKey:r}),S=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 L({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 Z=({options:{canisterId:e,serviceOverride:t,certifiedServiceOverride:r,agent:n,callTransform:i,queryTransform:o},idlFactory:s,certifiedIdlFactory:a})=>{let d=n??w(),g=t??B.Actor.createActor(s,{agent:d,canisterId:e,callTransform:i,queryTransform:o}),f=r??B.Actor.createActor(a,{agent:d,canisterId:e,callTransform:i,queryTransform:o});return{service:g,certifiedService:f,agent:d,canisterId:e}};var y=class extends Error{},A=class extends Error{},x=(e,t)=>{if(e==null)throw new A(t)},tt=(e,t)=>(x(e,t),e),et=e=>{if(e<0||e>100)throw new y(`${e} is not a valid percentage number.`)};var rt=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}},nt=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)),i=Number(e&BigInt(4294967295));r.setUint32(0,n),r.setUint32(4,i)}return new Uint8Array(t)},it=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)},ot=e=>new Uint8Array(e),at=e=>Array.from(e),ct=e=>new Uint8Array(e),st=e=>Array.from(e).map(t=>t.charCodeAt(0)),dt=e=>{let t=e.match(/.{1,2}/g);return x(t,"Invalid hex string."),Uint8Array.from(t.map(r=>parseInt(r,16)))},xt=e=>(e instanceof Uint8Array||(e=Uint8Array.from(e)),e.reduce((t,r)=>t+r.toString(16).padStart(2,"0"),"")),ft=e=>{let t=0n;for(let r=e.length-1;r>=0;r--)t=(t<<32n)+BigInt(e[r]);return t};var h="abcdefghijklmnopqrstuvwxyz234567",u=Object.create(null);for(let e=0;e<h.length;e++)u[h[e]]=e;u[0]=u.o;u[1]=u.i;var bt=e=>{let t=0,r=0,n="";function i(o){return t<0?r|=o>>-t:r=o<<t&248,t>3?(t-=8,1):(t<4&&(n+=h[r>>3],t+=5),0)}for(let o=0;o<e.length;)o+=i(e[o]);return n+(t<0?h[r>>3]:"")};function ut(e){let t=0,r=0,n=new Uint8Array(e.length*4/3|0),i=0;function o(s){let a=u[s.toLowerCase()];x(a,`Invalid character: ${JSON.stringify(s)}`),a<<=3,r|=a>>>t,t+=5,t>=8&&(n[i++]=r,t-=8,t>0?r=a<<5-t&255:r=0)}for(let s of e)o(s);return n.slice(0,i)}var lt=e=>btoa(String.fromCharCode(...new Uint8Array(e))),pt=e=>Uint8Array.from(atob(e),t=>t.charCodeAt(0));var mt=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]),gt=e=>{let t=-1;for(let r=0;r<e.length;r++){let i=(e[r]^t)&255;t=mt[i]^t>>>8}return(t^-1)>>>0},yt=e=>{let t=new ArrayBuffer(4);return new DataView(t).setUint32(0,gt(e),!1),new Uint8Array(t)};var At={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"},ht=({seconds:e,i18n:t=At})=>{let r=e/BigInt(60),n=r/BigInt(60);r-=n*BigInt(60);let i=n/BigInt(24);n-=i*BigInt(24);let o=Tt(i);return i-=F(o),[m("year",o),m("day",i),m("hour",n),m("minute",r),...e>BigInt(0)&&e<BigInt(60)?[m("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(", ")},Tt=e=>{let t=e/BigInt(365);for(;F(t)>e;)t--;return t},F=e=>{let t=e/BigInt(4);return e*BigInt(365)+t},m=(e,t)=>({labelKey:e,amount:Number(t)}),V=1000000n,Nt=()=>BigInt(Date.now())*V,It=e=>BigInt(e.getTime())*V;var Ut=(e,t)=>{let r;return(...n)=>{let i=()=>e(...n);r&&clearTimeout(r),r=setTimeout(i,t!==void 0&&t>0?t:300)}};var _t=e=>c(e)?[e]:[],E=e=>e==null?void 0:e[0],St=e=>{let t=E(e);return x(t),t},wt=e=>E(e??[]);var R=require("@dfinity/principal");var k="__bigint__",O="__principal__",P="__uint8array__",Bt=(e,t)=>typeof t=="bigint"?{[k]:`${t}`}:c(t)&&t instanceof R.Principal?{[O]:t.toText()}:c(t)&&t instanceof Uint8Array?{[P]:Array.from(t)}:t,Et=(e,t)=>{let r=n=>t[n];return c(t)&&typeof t=="object"&&k in t?BigInt(r(k)):c(t)&&typeof t=="object"&&O in t?R.Principal.fromText(r(O)):c(t)&&typeof t=="object"&&P in t?Uint8Array.from(r(P)):t};var kt=e=>{let t=e.toUint8Array(),r=new Uint8Array(32);return r[0]=t.length,r.set(t,1),r};var K=(e,t)=>t>e.length?[...e,...[...Array(t-e.length).keys()].map(()=>0)]:e,Y=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)},Ot=({minVersion:e,currentVersion:t})=>{let r=K(e.split(".").map(Y),3).join(".");return K(t.split(".").map(Y),3).join(".").localeCompare(r,void 0,{numeric:!0,sensitivity:"base"})<0};0&&(module.exports={AgentManager,Canister,FromStringToTokenError,ICPToken,InvalidPercentageError,NullishError,TokenAmount,TokenAmountV2,arrayBufferToUint8Array,arrayOfNumberToUint8Array,asNonNullish,asciiStringToByteArray,assertNonNullish,assertPercentageNumber,base64ToUint8Array,bigEndianCrc32,bigIntToUint8Array,candidNumberArrayToBigInt,convertStringToE8s,createAgent,createServices,debounce,decodeBase32,defaultAgent,encodeBase32,fromDefinedNullable,fromNullable,fromNullishNullable,hexStringToUint8Array,isEmptyString,isNullish,jsonReplacer,jsonReviver,nonNullish,notEmptyString,nowInBigIntNanoSeconds,numberToUint8Array,principalToSubAccount,queryAndUpdate,secondsToDuration,smallerVersion,toBigIntNanoSeconds,toNullable,uint8ArrayToArrayOfNumber,uint8ArrayToBase64,uint8ArrayToBigInt,uint8ArrayToHexString});
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/index.ts", "../../src/enums/token.enums.ts", "../../src/constants/constants.ts", "../../src/parser/token.ts", "../../src/services/canister.ts", "../../src/utils/actor.utils.ts", "../../src/utils/agent.utils.ts", "../../src/utils/nullish.utils.ts", "../../src/utils/asserts.utils.ts", "../../src/utils/arrays.utils.ts", "../../src/utils/base32.utils.ts", "../../src/utils/base64.utils.ts", "../../src/utils/crc.utils.ts", "../../src/utils/date.utils.ts", "../../src/utils/debounce.utils.ts", "../../src/utils/did.utils.ts", "../../src/utils/json.utils.ts", "../../src/utils/principal.utils.ts", "../../src/utils/version.utils.ts"],
4
- "sourcesContent": ["export * from \"./enums/token.enums\";\nexport * from \"./parser/token\";\nexport * from \"./services/canister\";\nexport * from \"./types/actor-type.utils\";\nexport type { CreateAgentParams } from \"./types/agent.utils\";\nexport type { CanisterOptions } from \"./types/canister.options\";\nexport type { QueryParams } from \"./types/query.params\";\nexport * from \"./utils/actor.utils\";\nexport * from \"./utils/agent.utils\";\nexport * from \"./utils/arrays.utils\";\nexport * from \"./utils/asserts.utils\";\nexport * from \"./utils/base32.utils\";\nexport * from \"./utils/base64.utils\";\nexport * from \"./utils/crc.utils\";\nexport * from \"./utils/date.utils\";\nexport * from \"./utils/debounce.utils\";\nexport * from \"./utils/did.utils\";\nexport * from \"./utils/json.utils\";\nexport * from \"./utils/nullish.utils\";\nexport * from \"./utils/principal.utils\";\nexport * from \"./utils/version.utils\";\n", "export enum FromStringToTokenError {\n FractionalMoreThan8Decimals,\n InvalidFormat,\n FractionalTooManyDecimals,\n}\n", "export const E8S_PER_TOKEN = BigInt(100000000);\n", "import { E8S_PER_TOKEN } from \"../constants/constants\";\nimport { FromStringToTokenError } from \"../enums/token.enums\";\n\nconst DECIMALS_CONVERSION_SUPPORTED = 8;\n\n/**\n * Receives a string representing a number and returns the big int or error.\n *\n * @param amount - in string format\n * @returns bigint | FromStringToTokenError\n */\nexport const convertStringToE8s = (\n value: string,\n): bigint | FromStringToTokenError => {\n // replace exponential format (1e-4) with plain (0.0001)\n // doesn't support decimals for values >= ~1e16\n let amount = value.includes(\"e\")\n ? Number(value).toLocaleString(\"en\", {\n useGrouping: false,\n maximumFractionDigits: 20,\n })\n : value;\n\n // Remove all instances of \",\" and \"'\".\n amount = amount.trim().replace(/[,']/g, \"\");\n\n // Verify that the string is of the format 1234.5678\n const regexMatch = amount.match(/\\d*(\\.\\d*)?/);\n if (!regexMatch || regexMatch[0] !== amount) {\n return FromStringToTokenError.InvalidFormat;\n }\n\n const [integral, fractional] = amount.split(\".\");\n\n let e8s = BigInt(0);\n\n if (integral) {\n try {\n e8s += BigInt(integral) * E8S_PER_TOKEN;\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n if (fractional) {\n if (fractional.length > 8) {\n return FromStringToTokenError.FractionalMoreThan8Decimals;\n }\n try {\n e8s += BigInt(fractional.padEnd(8, \"0\"));\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n return e8s;\n};\n\n/**\n * Receives a string representing a number and returns the big int or error.\n *\n * @param amount - in string format\n * @returns bigint | FromStringToTokenError\n */\nconst convertStringToUlps = ({\n amount,\n decimals,\n}: {\n amount: string;\n decimals: number;\n}): bigint | FromStringToTokenError => {\n // Remove all instances of \",\" and \"'\".\n amount = amount.trim().replace(/[,']/g, \"\");\n\n // Verify that the string is of the format 1234.5678\n const regexMatch = amount.match(/\\d*(\\.\\d*)?/);\n if (!regexMatch || regexMatch[0] !== amount) {\n return FromStringToTokenError.InvalidFormat;\n }\n\n const [integral, fractional] = amount.split(\".\");\n\n let ulps = 0n;\n const ulpsPerToken = 10n ** BigInt(decimals);\n\n if (integral) {\n try {\n ulps += BigInt(integral) * ulpsPerToken;\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n if (fractional) {\n if (fractional.length > decimals) {\n return FromStringToTokenError.FractionalTooManyDecimals;\n }\n try {\n ulps += BigInt(fractional.padEnd(decimals, \"0\"));\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n return ulps;\n};\n\nexport interface Token {\n symbol: string;\n name: string;\n decimals: number;\n logo?: string;\n}\n\n// TODO: Remove this token and use the value from ICP ledger\nexport const ICPToken: Token = {\n symbol: \"ICP\",\n name: \"Internet Computer\",\n decimals: 8,\n};\n\n/**\n * Deprecated. Use TokenAmountV2 instead which supports decimals !== 8.\n *\n * Represents an amount of tokens.\n *\n * @param e8s - The amount of tokens in bigint.\n * @param token - The token type.\n */\nexport class TokenAmount {\n private constructor(\n protected e8s: bigint,\n public token: Token,\n ) {\n if (token.decimals !== 8) {\n throw new Error(\"Use TokenAmountV2 for number of decimals other than 8\");\n }\n }\n\n /**\n * Initialize from a bigint. Bigint are considered e8s.\n *\n * @param {amount: bigint; token?: Token;} params\n * @param {bigint} params.amount The amount in bigint format.\n * @param {Token} params.token The token type.\n */\n public static fromE8s({\n amount,\n token,\n }: {\n amount: bigint;\n token: Token;\n }): TokenAmount {\n return new TokenAmount(amount, token);\n }\n\n /**\n * Initialize from a string. Accepted formats:\n *\n * 1234567.8901\n * 1'234'567.8901\n * 1,234,567.8901\n *\n * @param {amount: string; token?: Token;} params\n * @param {string} params.amount The amount in string format.\n * @param {Token} params.token The token type.\n */\n public static fromString({\n amount,\n token,\n }: {\n amount: string;\n token: Token;\n }): TokenAmount | FromStringToTokenError {\n // If parsing the number fails because of the number of decimals, we still\n // want the error to be about the number of decimals and not about the\n // parsing.\n if (token.decimals !== 8) {\n throw new Error(\"Use TokenAmountV2 for number of decimals other than 8\");\n }\n const e8s = convertStringToE8s(amount);\n\n if (typeof e8s === \"bigint\") {\n return new TokenAmount(e8s, token);\n }\n return e8s;\n }\n\n /**\n * Initialize from a number.\n *\n * 1 integer is considered E8S_PER_TOKEN\n *\n * @param {amount: number; token?: Token;} params\n * @param {string} params.amount The amount in number format.\n * @param {Token} params.token The token type.\n */\n public static fromNumber({\n amount,\n token,\n }: {\n amount: number;\n token: Token;\n }): TokenAmount {\n const tokenAmount = TokenAmount.fromString({\n amount: amount.toString(),\n token,\n });\n if (tokenAmount instanceof TokenAmount) {\n return tokenAmount;\n }\n if (tokenAmount === FromStringToTokenError.FractionalMoreThan8Decimals) {\n throw new Error(`Number ${amount} has more than 8 decimals`);\n }\n\n // This should never happen\n throw new Error(`Invalid number ${amount}`);\n }\n\n /**\n *\n * @returns The amount of e8s.\n */\n public toE8s(): bigint {\n return this.e8s;\n }\n}\n\n/**\n * Represents an amount of tokens.\n *\n * @param upls - The amount of tokens in units in the last place. If the token\n * supports N decimals, 10^N ulp = 1 token.\n * @param token - The token type.\n */\nexport class TokenAmountV2 {\n private constructor(\n protected ulps: bigint,\n public token: Token,\n ) {}\n\n /**\n * Initialize from a bigint. Bigint are considered ulps.\n *\n * @param {amount: bigint; token?: Token;} params\n * @param {bigint} params.amount The amount in bigint format.\n * @param {Token} params.token The token type.\n */\n public static fromUlps({\n amount,\n token,\n }: {\n amount: bigint;\n token: Token;\n }): TokenAmountV2 {\n return new TokenAmountV2(amount, token);\n }\n\n /**\n * Initialize from a string. Accepted formats:\n *\n * 1234567.8901\n * 1'234'567.8901\n * 1,234,567.8901\n *\n * @param {amount: string; token?: Token;} params\n * @param {string} params.amount The amount in string format.\n * @param {Token} params.token The token type.\n */\n public static fromString({\n amount,\n token,\n }: {\n amount: string;\n token: Token;\n }): TokenAmountV2 | FromStringToTokenError {\n const ulps = convertStringToUlps({ amount, decimals: token.decimals });\n\n if (typeof ulps === \"bigint\") {\n return new TokenAmountV2(ulps, token);\n }\n return ulps;\n }\n\n /**\n * Initialize from a number.\n *\n * 1 integer is considered 10^{token.decimals} ulps\n *\n * @param {amount: number; token?: Token;} params\n * @param {string} params.amount The amount in number format.\n * @param {Token} params.token The token type.\n */\n public static fromNumber({\n amount,\n token,\n }: {\n amount: number;\n token: Token;\n }): TokenAmountV2 {\n const tokenAmount = TokenAmountV2.fromString({\n amount: amount.toFixed(\n Math.min(DECIMALS_CONVERSION_SUPPORTED, token.decimals),\n ),\n token,\n });\n if (tokenAmount instanceof TokenAmountV2) {\n return tokenAmount;\n }\n if (tokenAmount === FromStringToTokenError.FractionalTooManyDecimals) {\n throw new Error(\n `Number ${amount} has more than ${token.decimals} decimals`,\n );\n }\n\n // This should never happen\n throw new Error(`Invalid number ${amount}`);\n }\n\n /**\n *\n * @returns The amount of ulps.\n */\n public toUlps(): bigint {\n return this.ulps;\n }\n\n /**\n *\n * @returns The amount of ulps in e8s precision\n */\n public toE8s(): bigint {\n if (this.token.decimals < 8) {\n return this.ulps * 10n ** BigInt(8 - this.token.decimals);\n } else if (this.token.decimals === 8) {\n return this.ulps;\n } else {\n return this.ulps / 10n ** BigInt(this.token.decimals - 8);\n }\n }\n}\n", "import type { Principal } from \"@dfinity/principal\";\nimport type { QueryParams } from \"../types/query.params\";\n\nexport abstract class Canister<T> {\n protected constructor(\n private readonly id: Principal,\n protected readonly service: T,\n protected readonly certifiedService: T,\n ) {}\n\n get canisterId(): Principal {\n return this.id;\n }\n\n protected caller = ({ certified = true }: QueryParams): T =>\n certified ? this.certifiedService : this.service;\n}\n", "import type { ActorConfig, ActorSubclass, Agent } from \"@dfinity/agent\";\nimport { Actor } from \"@dfinity/agent\";\nimport type { IDL } from \"@dfinity/candid\";\nimport type { Principal } from \"@dfinity/principal\";\nimport type { CanisterOptions } from \"../types/canister.options\";\nimport { defaultAgent } from \"./agent.utils\";\n\ntype RequiredCanisterOptions<T> = Required<\n Pick<CanisterOptions<T>, \"canisterId\">\n> &\n Omit<CanisterOptions<T>, \"canisterId\">;\n\nexport const createServices = <T>({\n options: {\n canisterId,\n serviceOverride,\n certifiedServiceOverride,\n agent: agentOption,\n callTransform,\n queryTransform,\n },\n idlFactory,\n certifiedIdlFactory,\n}: {\n options: RequiredCanisterOptions<T> &\n Pick<ActorConfig, \"queryTransform\" | \"callTransform\">;\n idlFactory: IDL.InterfaceFactory;\n certifiedIdlFactory: IDL.InterfaceFactory;\n}): {\n service: ActorSubclass<T>;\n certifiedService: ActorSubclass<T>;\n agent: Agent;\n canisterId: Principal;\n} => {\n const agent: Agent = agentOption ?? defaultAgent();\n\n const service: ActorSubclass<T> =\n serviceOverride ??\n Actor.createActor<T>(idlFactory, {\n agent,\n canisterId,\n callTransform,\n queryTransform,\n });\n\n const certifiedService: ActorSubclass<T> =\n certifiedServiceOverride ??\n Actor.createActor<T>(certifiedIdlFactory, {\n agent,\n canisterId,\n callTransform,\n queryTransform,\n });\n\n return { service, certifiedService, agent, canisterId };\n};\n", "import type { Agent, Identity } from \"@dfinity/agent\";\nimport { AnonymousIdentity, HttpAgent } from \"@dfinity/agent\";\nimport type { CreateAgentParams } from \"../types/agent.utils\";\nimport { isNullish, nonNullish } from \"./nullish.utils\";\n\n/**\n * Get a default agent that connects to mainnet with the anonymous identity.\n * @returns The default agent to use\n */\nexport const defaultAgent = (): Agent =>\n HttpAgent.createSync({\n host: \"https://icp-api.io\",\n identity: new AnonymousIdentity(),\n });\n\n/**\n * Create an agent for a given identity\n *\n * @param {CreateAgentParams} params The parameters to create a new HTTP agent\n * @param {Identity} params.identity A mandatory identity to use for the agent\n * @param {string} params.host An optional host to connect to, particularly useful for local development\n * @param {boolean} params.fetchRootKey Fetch root key for certificate validation during local development or on testnet\n * @param {boolean} params.verifyQuerySignatures Check for signatures in the state tree signed by the node that replies to queries - i.e. certify responses.\n * @param {number} params.retryTimes Set the number of retries the agent should perform before error.\n */\nexport const createAgent = async ({\n identity,\n host,\n fetchRootKey = false,\n verifyQuerySignatures = false,\n retryTimes,\n}: CreateAgentParams): Promise<HttpAgent> => {\n return await HttpAgent.create({\n identity,\n ...(nonNullish(host) && { host }),\n verifyQuerySignatures,\n ...(nonNullish(retryTimes) && { retryTimes }),\n shouldFetchRootKey: fetchRootKey,\n });\n};\n\nexport type AgentManagerConfig = Pick<\n CreateAgentParams,\n \"fetchRootKey\" | \"host\"\n>;\n\n/**\n * AgentManager class manages HttpAgent instances for different identities.\n *\n * It caches agents by identity to optimise resource usage and avoid unnecessary agent creation.\n * Provides functionality to create new agents, retrieve cached agents, and clear the cache when needed.\n */\nexport class AgentManager {\n private agents: Record<string, HttpAgent> | undefined | null = undefined;\n\n private constructor(private readonly config: AgentManagerConfig) {}\n\n /**\n * Static factory method to create a new AgentManager instance.\n *\n * This method serves as an alternative to directly using the private constructor,\n * making it more convenient to create instances of `AgentManager` using a simple and clear method.\n *\n * @param {AgentManagerConfig} config - Configuration options for the AgentManager instance.\n * @param {boolean} config.fetchRootKey - Whether to fetch the root key for certificate validation.\n * @param {string} config.host - The host to connect to.\n * @returns {AgentManager} A new instance of `AgentManager`.\n */\n public static create(config: AgentManagerConfig): AgentManager {\n return new AgentManager(config);\n }\n\n /**\n * Get or create an HTTP agent for a given identity.\n *\n * If the agent for the specified identity has been created and cached, it is retrieved from the cache.\n * If no agent exists for the identity, a new one is created, cached, and then returned.\n *\n * @param {Identity} identity - The identity to be used to create the agent.\n * @returns {Promise<HttpAgent>} The HttpAgent associated with the given identity.\n */\n public getAgent = async ({\n identity,\n }: {\n identity: Identity;\n }): Promise<HttpAgent> => {\n const key = identity.getPrincipal().toText();\n\n if (isNullish(this.agents) || isNullish(this.agents[key])) {\n const agent = await createAgent({\n identity,\n fetchRootKey: this.config.fetchRootKey,\n host: this.config.host,\n verifyQuerySignatures: true,\n });\n\n this.agents = {\n ...(this.agents ?? {}),\n [key]: agent,\n };\n\n return agent;\n }\n\n return this.agents[key];\n };\n\n /**\n * Clear the cache of HTTP agents.\n *\n * This method removes all cached agents, forcing new agent creation on the next request for any identity.\n * Useful when identities have changed or if you want to reset all active connections.\n */\n public clearAgents = (): void => {\n this.agents = null;\n };\n}\n", "/**\n * Checks if a given argument is null or undefined.\n *\n * @template T - The type of the argument.\n * @param {T | undefined | null} argument - The argument to check.\n * @returns {argument is undefined | null} `true` if the argument is null or undefined; otherwise, `false`.\n */\nexport const isNullish = <T>(\n argument: T | undefined | null,\n): argument is undefined | null => argument === null || argument === undefined;\n\n/**\n * Checks if a given argument is neither null nor undefined.\n *\n * @template T - The type of the argument.\n * @param {T | undefined | null} argument - The argument to check.\n * @returns {argument is NonNullable<T>} `true` if the argument is not null or undefined; otherwise, `false`.\n */\nexport const nonNullish = <T>(\n argument: T | undefined | null,\n): argument is NonNullable<T> => !isNullish(argument);\n\n/**\n * Checks if a given value is not null, not undefined, and not an empty string.\n *\n * @param {string | undefined | null} value - The value to check.\n * @returns {boolean} `true` if the value is not null, not undefined, and not an empty string; otherwise, `false`.\n */\nexport const notEmptyString = (value: string | undefined | null): boolean =>\n nonNullish(value) && value !== \"\";\n\n/**\n * Checks if a given value is null, undefined, or an empty string.\n *\n * @param {string | undefined | null} value - The value to check.\n * @returns {boolean} `true` if the value is null, undefined, or an empty string; otherwise, `false`.\n */\nexport const isEmptyString = (value: string | undefined | null): boolean =>\n !notEmptyString(value);\n", "export class InvalidPercentageError extends Error {}\nexport class NullishError extends Error {}\n\nexport const assertNonNullish: <T>(\n value: T,\n message?: string,\n) => asserts value is NonNullable<T> = <T>(\n value: T,\n message?: string,\n): void => {\n if (value === null || value === undefined) {\n throw new NullishError(message);\n }\n};\n\nexport const asNonNullish = <T>(value: T, message?: string): NonNullable<T> => {\n assertNonNullish(value, message);\n return value;\n};\n\nexport const assertPercentageNumber = (percentage: number) => {\n if (percentage < 0 || percentage > 100) {\n throw new InvalidPercentageError(\n `${percentage} is not a valid percentage number.`,\n );\n }\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\n\nexport const uint8ArrayToBigInt = (array: Uint8Array): bigint => {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n if (typeof view.getBigUint64 === \"function\") {\n return view.getBigUint64(0);\n } else {\n const high = BigInt(view.getUint32(0));\n const low = BigInt(view.getUint32(4));\n\n return (high << BigInt(32)) + low;\n }\n};\n\nexport const bigIntToUint8Array = (value: bigint): Uint8Array => {\n const buffer = new ArrayBuffer(8);\n const view = new DataView(buffer);\n if (typeof view.setBigUint64 === \"function\") {\n view.setBigUint64(0, value);\n } else {\n const high = Number(value >> BigInt(32));\n const low = Number(value & BigInt(0xffffffff));\n\n view.setUint32(0, high);\n view.setUint32(4, low);\n }\n\n return new Uint8Array(buffer);\n};\n\nexport const numberToUint8Array = (value: number): Uint8Array => {\n const view = new DataView(new ArrayBuffer(8));\n for (let index = 7; index >= 0; --index) {\n view.setUint8(index, value % 256);\n value = value >> 8;\n }\n return new Uint8Array(view.buffer);\n};\n\nexport const arrayBufferToUint8Array = (buffer: ArrayBuffer): Uint8Array =>\n new Uint8Array(buffer);\n\nexport const uint8ArrayToArrayOfNumber = (array: Uint8Array): Array<number> =>\n Array.from(array);\n\nexport const arrayOfNumberToUint8Array = (numbers: Array<number>): Uint8Array =>\n new Uint8Array(numbers);\n\nexport const asciiStringToByteArray = (text: string): Array<number> =>\n Array.from(text).map((c) => c.charCodeAt(0));\n\nexport const hexStringToUint8Array = (hexString: string): Uint8Array => {\n const matches = hexString.match(/.{1,2}/g);\n\n assertNonNullish(matches, \"Invalid hex string.\");\n\n return Uint8Array.from(matches.map((byte) => parseInt(byte, 16)));\n};\n\nexport const uint8ArrayToHexString = (bytes: Uint8Array | number[]) => {\n if (!(bytes instanceof Uint8Array)) {\n bytes = Uint8Array.from(bytes);\n }\n return bytes.reduce(\n (str, byte) => str + byte.toString(16).padStart(2, \"0\"),\n \"\",\n );\n};\n\nexport const candidNumberArrayToBigInt = (array: number[]): bigint => {\n let result = 0n;\n for (let i = array.length - 1; i >= 0; i--) {\n result = (result << 32n) + BigInt(array[i]);\n }\n return result;\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\n\nconst ALPHABET = \"abcdefghijklmnopqrstuvwxyz234567\";\n\n// Build a lookup table for decoding.\nconst LOOKUP_TABLE: Record<string, number> = Object.create(null);\nfor (let i = 0; i < ALPHABET.length; i++) {\n LOOKUP_TABLE[ALPHABET[i]] = i;\n}\n\n// Add aliases for rfc4648.\nLOOKUP_TABLE[\"0\"] = LOOKUP_TABLE.o;\nLOOKUP_TABLE[\"1\"] = LOOKUP_TABLE.i;\n\n/**\n * Encode an Uint8Array to a base32 string.\n *\n * @param input The input array to encode.\n * @returns A Base32 string encoding the input.\n */\nexport const encodeBase32 = (input: Uint8Array): string => {\n // How many bits will we skip from the first byte.\n let skip = 0;\n // 5 high bits, carry from one byte to the next.\n let bits = 0;\n\n // The output string in base32.\n let output = \"\";\n\n function encodeByte(byte: number): number {\n if (skip < 0) {\n // we have a carry from the previous byte\n bits |= byte >> -skip;\n } else {\n // no carry\n bits = (byte << skip) & 248;\n }\n\n if (skip > 3) {\n // Not enough data to produce a character, get us another one\n skip -= 8;\n return 1;\n }\n\n if (skip < 4) {\n // produce a character\n output += ALPHABET[bits >> 3];\n skip += 5;\n }\n\n return 0;\n }\n\n for (let i = 0; i < input.length; ) {\n i += encodeByte(input[i]);\n }\n\n return output + (skip < 0 ? ALPHABET[bits >> 3] : \"\");\n};\n\n/**\n * Decode a base32 string to Uint8Array.\n *\n * @param input The input string to decode.\n * @param input The base32 encoded string to decode.\n */\nexport function decodeBase32(input: string): Uint8Array {\n // how many bits we have from the previous character.\n let skip = 0;\n // current byte we're producing.\n let byte = 0;\n\n const output = new Uint8Array(((input.length * 4) / 3) | 0);\n let o = 0;\n\n function decodeChar(char: string) {\n // Consume a character from the stream, store\n // the output in this.output. As before, better\n // to use update().\n let val = LOOKUP_TABLE[char.toLowerCase()];\n assertNonNullish(val, `Invalid character: ${JSON.stringify(char)}`);\n\n // move to the high bits\n val <<= 3;\n byte |= val >>> skip;\n skip += 5;\n\n if (skip >= 8) {\n // We have enough bytes to produce an output\n output[o++] = byte;\n skip -= 8;\n\n if (skip > 0) {\n byte = (val << (5 - skip)) & 255;\n } else {\n byte = 0;\n }\n }\n }\n\n for (const c of input) {\n decodeChar(c);\n }\n\n return output.slice(0, o);\n}\n", "/**\n * Converts a Uint8Array (binary data) to a base64 encoded string.\n *\n * @param {Uint8Array} uint8Array - The Uint8Array containing binary data to be encoded.\n * @returns {string} - The base64 encoded string representation of the binary data.\n */\nexport const uint8ArrayToBase64 = (uint8Array: Uint8Array): string =>\n btoa(String.fromCharCode(...new Uint8Array(uint8Array)));\n\n/**\n * Converts a base64 encoded string to a Uint8Array (binary data).\n *\n * @param {string} base64String - The base64 encoded string to be decoded.\n * @returns {Uint8Array} - The Uint8Array representation of the decoded binary data.\n */\nexport const base64ToUint8Array = (base64String: string): Uint8Array =>\n Uint8Array.from(atob(base64String), (c) => c.charCodeAt(0));\n", "// This file is translated to JavaScript from\n// https://lxp32.github.io/docs/a-simple-example-crc32-calculation/\nconst lookUpTable: Uint32Array = new Uint32Array([\n 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,\n 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,\n 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,\n 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,\n 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,\n 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\n 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,\n 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\n 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,\n 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\n 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,\n 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\n 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,\n 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,\n 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,\n 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\n 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,\n 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\n 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,\n 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\n 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,\n 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,\n 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,\n 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,\n 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,\n 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,\n 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,\n 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,\n 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,\n 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\n 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,\n 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,\n 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,\n 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\n 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,\n 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,\n 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,\n 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\n 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,\n 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\n 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,\n]);\n\nconst crc32 = (bytes: Uint8Array): number => {\n let crc = -1;\n\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i];\n const t = (byte ^ crc) & 0xff;\n crc = lookUpTable[t] ^ (crc >>> 8);\n }\n\n return (crc ^ -1) >>> 0;\n};\n\nexport const bigEndianCrc32 = (bytes: Uint8Array): Uint8Array => {\n const checksumArrayBuf = new ArrayBuffer(4);\n const view = new DataView(checksumArrayBuf);\n view.setUint32(0, crc32(bytes), false);\n return new Uint8Array(checksumArrayBuf);\n};\n", "const SECONDS_IN_MINUTE = 60;\nconst MINUTES_IN_HOUR = 60;\nconst HOURS_IN_DAY = 24;\nconst DAYS_IN_NON_LEAP_YEAR = 365;\n\nexport interface I18nSecondsToDuration {\n year: string;\n year_plural: string;\n month: string;\n month_plural: string;\n day: string;\n day_plural: string;\n hour: string;\n hour_plural: string;\n minute: string;\n minute_plural: string;\n second: string;\n second_plural: string;\n}\n\nconst EN_TIME: I18nSecondsToDuration = {\n year: \"year\",\n year_plural: \"years\",\n month: \"month\",\n month_plural: \"months\",\n day: \"day\",\n day_plural: \"days\",\n hour: \"hour\",\n hour_plural: \"hours\",\n minute: \"minute\",\n minute_plural: \"minutes\",\n second: \"second\",\n second_plural: \"seconds\",\n};\n\n/**\n * Convert seconds to a human-readable duration, such as \"6 days, 10 hours.\"\n * @param {Object} options - The options object.\n * @param {bigint} options.seconds - The number of seconds to convert.\n * @param {I18nSecondsToDuration} [options.i18n] - The i18n object for customizing language and units. Defaults to English.\n * @returns {string} The human-readable duration string.\n */\nexport const secondsToDuration = ({\n seconds,\n i18n = EN_TIME,\n}: {\n seconds: bigint;\n i18n?: I18nSecondsToDuration;\n}): string => {\n let minutes = seconds / BigInt(SECONDS_IN_MINUTE);\n\n let hours = minutes / BigInt(MINUTES_IN_HOUR);\n minutes -= hours * BigInt(MINUTES_IN_HOUR);\n\n let days = hours / BigInt(HOURS_IN_DAY);\n hours -= days * BigInt(HOURS_IN_DAY);\n\n const years = fullYearsInDays(days);\n days -= daysInYears(years);\n\n const periods = [\n createLabel(\"year\", years),\n createLabel(\"day\", days),\n createLabel(\"hour\", hours),\n createLabel(\"minute\", minutes),\n ...(seconds > BigInt(0) && seconds < BigInt(60)\n ? [createLabel(\"second\", seconds)]\n : []),\n ];\n\n return periods\n .filter(({ amount }) => amount > 0)\n .slice(0, 2)\n .map(\n (labelInfo) =>\n `${labelInfo.amount} ${\n labelInfo.amount === 1\n ? i18n[labelInfo.labelKey]\n : i18n[`${labelInfo.labelKey}_plural`]\n }`,\n )\n .join(\", \");\n};\n\nconst fullYearsInDays = (days: bigint): bigint => {\n // Use integer division.\n let years = days / BigInt(DAYS_IN_NON_LEAP_YEAR);\n while (daysInYears(years) > days) {\n years--;\n }\n return years;\n};\n\nconst daysInYears = (years: bigint): bigint => {\n // Use integer division.\n const leapDays = years / BigInt(4);\n return years * BigInt(DAYS_IN_NON_LEAP_YEAR) + leapDays;\n};\n\ntype LabelKey = \"year\" | \"month\" | \"day\" | \"hour\" | \"minute\" | \"second\";\ntype LabelInfo = {\n labelKey: LabelKey;\n amount: number;\n};\nconst createLabel = (labelKey: LabelKey, amount: bigint): LabelInfo => ({\n labelKey,\n amount: Number(amount),\n});\n\nconst NANOSECONDS_PER_MILLISECOND = 1_000_000n;\n\n/**\n * Returns the current timestamp in nanoseconds as a `bigint`.\n *\n * @returns {bigint} The current timestamp in nanoseconds.\n */\nexport const nowInBigIntNanoSeconds = (): bigint =>\n BigInt(Date.now()) * NANOSECONDS_PER_MILLISECOND;\n\n/**\n * Converts a given `Date` object to a timestamp in nanoseconds as a `bigint`.\n *\n * @param {Date} date - The `Date` object to convert.\n * @returns {bigint} The timestamp in nanoseconds.\n */\nexport const toBigIntNanoSeconds = (date: Date): bigint =>\n BigInt(date.getTime()) * NANOSECONDS_PER_MILLISECOND;\n", "/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport const debounce = (func: Function, timeout?: number) => {\n let timer: NodeJS.Timer | undefined;\n\n return (...args: unknown[]) => {\n const next = () => func(...args);\n\n if (timer) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore TypeScript global and window confusion even if we are using @types/node\n clearTimeout(timer);\n }\n\n timer = setTimeout(\n next,\n timeout !== undefined && timeout > 0 ? timeout : 300,\n );\n };\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\nimport { nonNullish } from \"./nullish.utils\";\n\n/**\n * Converts a value into a Candid-style variant representation of an optional value.\n *\n * @template T The type of the value.\n * @param {T | null | undefined} value - The value to convert into a Candid-style variant.\n * @returns {[] | [T]} A Candid-style variant representation: an empty array for `null` and `undefined` or an array with the value.\n */\nexport const toNullable = <T>(value?: T | null): [] | [T] => {\n return nonNullish(value) ? [value] : [];\n};\n\n/**\n * Extracts the value from a Candid-style variant representation of an optional value.\n *\n * @template T The type of the value.\n * @param {[] | [T]} value - A Candid-style variant representing an optional value.\n * @returns {T | undefined} The extracted value, or `undefined` if the array is empty.\n */\nexport const fromNullable = <T>(value: [] | [T]): T | undefined => {\n return value?.[0];\n};\n\n/**\n * Extracts the value from a Candid-style variant representation of an optional value,\n * ensuring the value is defined. Throws an error if the array is empty or the value is nullish.\n *\n * @template T The type of the value.\n * @param {[] | [T]} value - A Candid-style variant representing an optional value.\n * @returns {T} The extracted value.\n * @throws {Error} If the array is empty or the value is nullish.\n */\nexport const fromDefinedNullable = <T>(value: [] | [T]): T => {\n const result = fromNullable(value);\n\n assertNonNullish(result);\n\n return result;\n};\n\n/**\n * Extracts the value from a nullish Candid-style variant representation.\n *\n * @template T The type of the value.\n * @param {([] | [T]) | undefined} value - A Candid-style variant or `undefined`.\n * @returns {T | undefined} The extracted value, or `undefined` if the input is nullish or the array is empty.\n */\nexport const fromNullishNullable = <T>(\n value: ([] | [T]) | undefined,\n): T | undefined => fromNullable(value ?? []);\n", "import { Principal } from \"@dfinity/principal\";\nimport { nonNullish } from \"./nullish.utils\";\n\nconst JSON_KEY_BIGINT = \"__bigint__\";\nconst JSON_KEY_PRINCIPAL = \"__principal__\";\nconst JSON_KEY_UINT8ARRAY = \"__uint8array__\";\n\n/**\n * A custom replacer for `JSON.stringify` that converts specific types not natively supported\n * by the API into JSON-compatible formats.\n *\n * Supported conversions:\n * - `BigInt` \u2192 `{ \"__bigint__\": string }`\n * - `Principal` \u2192 `{ \"__principal__\": string }`\n * - `Uint8Array` \u2192 `{ \"__uint8array__\": number[] }`\n *\n * @param {string} _key - Ignored. Only provided for API compatibility.\n * @param {unknown} value - The value to transform before stringification.\n * @returns {unknown} The transformed value if it matches a known type, otherwise the original value.\n */\nexport const jsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === \"bigint\") {\n return { [JSON_KEY_BIGINT]: `${value}` };\n }\n\n if (nonNullish(value) && value instanceof Principal) {\n return { [JSON_KEY_PRINCIPAL]: value.toText() };\n }\n\n if (nonNullish(value) && value instanceof Uint8Array) {\n return { [JSON_KEY_UINT8ARRAY]: Array.from(value) };\n }\n\n return value;\n};\n\n/**\n * A custom reviver for `JSON.parse` that reconstructs specific types from their JSON-encoded representations.\n *\n * This reverses the transformations applied by `jsonReplacer`, restoring the original types.\n *\n * Supported conversions:\n * - `{ \"__bigint__\": string }` \u2192 `BigInt`\n * - `{ \"__principal__\": string }` \u2192 `Principal`\n * - `{ \"__uint8array__\": number[] }` \u2192 `Uint8Array`\n *\n * @param {string} _key - Ignored but provided for API compatibility.\n * @param {unknown} value - The parsed value to transform.\n * @returns {unknown} The reconstructed value if it matches a known type, otherwise the original value.\n */\nexport const jsonReviver = (_key: string, value: unknown): unknown => {\n const mapValue = <T>(key: string): T => (value as Record<string, T>)[key];\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_BIGINT in value\n ) {\n return BigInt(mapValue(JSON_KEY_BIGINT));\n }\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_PRINCIPAL in value\n ) {\n return Principal.fromText(mapValue(JSON_KEY_PRINCIPAL));\n }\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_UINT8ARRAY in value\n ) {\n return Uint8Array.from(mapValue(JSON_KEY_UINT8ARRAY));\n }\n\n return value;\n};\n", "import type { Principal } from \"@dfinity/principal\";\n\n/**\n * Convert a principal to a Uint8Array 32 length.\n * e.g. Useful to convert a canister ID when topping up cycles with the Cmc canister\n * @param principal The principal that needs to be converted to Subaccount\n */\nexport const principalToSubAccount = (principal: Principal): Uint8Array => {\n const bytes: Uint8Array = principal.toUint8Array();\n const subAccount: Uint8Array = new Uint8Array(32);\n subAccount[0] = bytes.length;\n subAccount.set(bytes, 1);\n return subAccount;\n};\n", "const AMOUNT_VERSION_PARTS = 3;\nconst addZeros = (nums: number[], amountZeros: number): number[] =>\n amountZeros > nums.length\n ? [...nums, ...[...Array(amountZeros - nums.length).keys()].map(() => 0)]\n : nums;\n\nconst convertToNumber = (versionStringPart: string): number => {\n if (!Number.isNaN(Number(versionStringPart))) {\n return Number(versionStringPart);\n }\n const strippedVersion = versionStringPart.split(\"\").reduce((acc, char) => {\n if (Number.isNaN(Number(char))) {\n return acc;\n }\n return acc + char;\n }, \"\");\n return Number(strippedVersion);\n};\n/**\n * Returns true if the current version is smaller than the minVersion, false if equal or bigger.\n * Tags after patch version are ignored, e.g. 1.0.0-beta.1 is considered equal to 1.0.0.\n *\n * @param {Object} params\n * @param {string} params.minVersion Ex: \"1.0.0\"\n * @param {string} params.currentVersion Ex: \"2.0.0\"\n * @returns boolean\n */\nexport const smallerVersion = ({\n minVersion,\n currentVersion,\n}: {\n minVersion: string;\n currentVersion: string;\n}): boolean => {\n const minVersionStandarized = addZeros(\n minVersion.split(\".\").map(convertToNumber),\n AMOUNT_VERSION_PARTS,\n ).join(\".\");\n const currentVersionStandarized = addZeros(\n currentVersion.split(\".\").map(convertToNumber),\n AMOUNT_VERSION_PARTS,\n ).join(\".\");\n // Versions need to have the same number of parts to be comparable\n // Source: https://stackoverflow.com/a/65687141\n return (\n currentVersionStandarized.localeCompare(minVersionStandarized, undefined, {\n numeric: true,\n sensitivity: \"base\",\n }) < 0\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["index_exports", "__export", "AgentManager", "Canister", "FromStringToTokenError", "ICPToken", "InvalidPercentageError", "NullishError", "TokenAmount", "TokenAmountV2", "arrayBufferToUint8Array", "arrayOfNumberToUint8Array", "asNonNullish", "asciiStringToByteArray", "assertNonNullish", "assertPercentageNumber", "base64ToUint8Array", "bigEndianCrc32", "bigIntToUint8Array", "candidNumberArrayToBigInt", "convertStringToE8s", "createAgent", "createServices", "debounce", "decodeBase32", "defaultAgent", "encodeBase32", "fromDefinedNullable", "fromNullable", "fromNullishNullable", "hexStringToUint8Array", "isEmptyString", "isNullish", "jsonReplacer", "jsonReviver", "nonNullish", "notEmptyString", "nowInBigIntNanoSeconds", "numberToUint8Array", "principalToSubAccount", "secondsToDuration", "smallerVersion", "toBigIntNanoSeconds", "toNullable", "uint8ArrayToArrayOfNumber", "uint8ArrayToBase64", "uint8ArrayToBigInt", "uint8ArrayToHexString", "__toCommonJS", "FromStringToTokenError", "E8S_PER_TOKEN", "DECIMALS_CONVERSION_SUPPORTED", "convertStringToE8s", "value", "amount", "regexMatch", "integral", "fractional", "e8s", "E8S_PER_TOKEN", "convertStringToUlps", "decimals", "ulps", "ulpsPerToken", "ICPToken", "TokenAmount", "_TokenAmount", "token", "tokenAmount", "TokenAmountV2", "_TokenAmountV2", "Canister", "id", "service", "certifiedService", "certified", "import_agent", "import_agent", "isNullish", "argument", "nonNullish", "notEmptyString", "value", "isEmptyString", "defaultAgent", "createAgent", "identity", "host", "fetchRootKey", "verifyQuerySignatures", "retryTimes", "nonNullish", "AgentManager", "_AgentManager", "config", "key", "isNullish", "agent", "createServices", "canisterId", "serviceOverride", "certifiedServiceOverride", "agentOption", "callTransform", "queryTransform", "idlFactory", "certifiedIdlFactory", "agent", "defaultAgent", "service", "certifiedService", "InvalidPercentageError", "NullishError", "assertNonNullish", "value", "message", "asNonNullish", "assertPercentageNumber", "percentage", "uint8ArrayToBigInt", "array", "view", "high", "low", "bigIntToUint8Array", "value", "buffer", "numberToUint8Array", "index", "arrayBufferToUint8Array", "uint8ArrayToArrayOfNumber", "arrayOfNumberToUint8Array", "numbers", "asciiStringToByteArray", "text", "c", "hexStringToUint8Array", "hexString", "matches", "assertNonNullish", "byte", "uint8ArrayToHexString", "bytes", "str", "candidNumberArrayToBigInt", "result", "i", "ALPHABET", "LOOKUP_TABLE", "i", "encodeBase32", "input", "skip", "bits", "output", "encodeByte", "byte", "decodeBase32", "o", "decodeChar", "char", "val", "assertNonNullish", "c", "uint8ArrayToBase64", "uint8Array", "base64ToUint8Array", "base64String", "c", "lookUpTable", "crc32", "bytes", "crc", "i", "t", "bigEndianCrc32", "checksumArrayBuf", "EN_TIME", "secondsToDuration", "seconds", "i18n", "minutes", "hours", "days", "years", "fullYearsInDays", "daysInYears", "createLabel", "amount", "labelInfo", "leapDays", "labelKey", "NANOSECONDS_PER_MILLISECOND", "nowInBigIntNanoSeconds", "toBigIntNanoSeconds", "date", "debounce", "func", "timeout", "timer", "args", "next", "toNullable", "value", "nonNullish", "fromNullable", "fromDefinedNullable", "result", "assertNonNullish", "fromNullishNullable", "import_principal", "JSON_KEY_BIGINT", "JSON_KEY_PRINCIPAL", "JSON_KEY_UINT8ARRAY", "jsonReplacer", "_key", "value", "nonNullish", "jsonReviver", "mapValue", "key", "principalToSubAccount", "principal", "bytes", "subAccount", "addZeros", "nums", "amountZeros", "convertToNumber", "versionStringPart", "strippedVersion", "acc", "char", "smallerVersion", "minVersion", "currentVersion", "minVersionStandarized"]
3
+ "sources": ["../../src/index.ts", "../../src/enums/token.enums.ts", "../../src/constants/constants.ts", "../../src/parser/token.ts", "../../src/services/canister.ts", "../../src/utils/nullish.utils.ts", "../../src/services/query.ts", "../../src/utils/actor.utils.ts", "../../src/utils/agent.utils.ts", "../../src/utils/asserts.utils.ts", "../../src/utils/arrays.utils.ts", "../../src/utils/base32.utils.ts", "../../src/utils/base64.utils.ts", "../../src/utils/crc.utils.ts", "../../src/utils/date.utils.ts", "../../src/utils/debounce.utils.ts", "../../src/utils/did.utils.ts", "../../src/utils/json.utils.ts", "../../src/utils/principal.utils.ts", "../../src/utils/version.utils.ts"],
4
+ "sourcesContent": ["export * from \"./enums/token.enums\";\nexport * from \"./parser/token\";\nexport * from \"./services/canister\";\nexport * from \"./services/query\";\nexport * from \"./types/actor-type.utils\";\nexport type { CreateAgentParams } from \"./types/agent.utils\";\nexport type { CanisterOptions } from \"./types/canister.options\";\nexport * from \"./types/query-and-update.params\";\nexport type { QueryParams } from \"./types/query.params\";\nexport * from \"./utils/actor.utils\";\nexport * from \"./utils/agent.utils\";\nexport * from \"./utils/arrays.utils\";\nexport * from \"./utils/asserts.utils\";\nexport * from \"./utils/base32.utils\";\nexport * from \"./utils/base64.utils\";\nexport * from \"./utils/crc.utils\";\nexport * from \"./utils/date.utils\";\nexport * from \"./utils/debounce.utils\";\nexport * from \"./utils/did.utils\";\nexport * from \"./utils/json.utils\";\nexport * from \"./utils/nullish.utils\";\nexport * from \"./utils/principal.utils\";\nexport * from \"./utils/version.utils\";\n", "export enum FromStringToTokenError {\n FractionalMoreThan8Decimals,\n InvalidFormat,\n FractionalTooManyDecimals,\n}\n", "export const E8S_PER_TOKEN = BigInt(100000000);\n", "import { E8S_PER_TOKEN } from \"../constants/constants\";\nimport { FromStringToTokenError } from \"../enums/token.enums\";\n\nconst DECIMALS_CONVERSION_SUPPORTED = 8;\n\n/**\n * Receives a string representing a number and returns the big int or error.\n *\n * @param amount - in string format\n * @returns bigint | FromStringToTokenError\n */\nexport const convertStringToE8s = (\n value: string,\n): bigint | FromStringToTokenError => {\n // replace exponential format (1e-4) with plain (0.0001)\n // doesn't support decimals for values >= ~1e16\n let amount = value.includes(\"e\")\n ? Number(value).toLocaleString(\"en\", {\n useGrouping: false,\n maximumFractionDigits: 20,\n })\n : value;\n\n // Remove all instances of \",\" and \"'\".\n amount = amount.trim().replace(/[,']/g, \"\");\n\n // Verify that the string is of the format 1234.5678\n const regexMatch = amount.match(/\\d*(\\.\\d*)?/);\n if (!regexMatch || regexMatch[0] !== amount) {\n return FromStringToTokenError.InvalidFormat;\n }\n\n const [integral, fractional] = amount.split(\".\");\n\n let e8s = BigInt(0);\n\n if (integral) {\n try {\n e8s += BigInt(integral) * E8S_PER_TOKEN;\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n if (fractional) {\n if (fractional.length > 8) {\n return FromStringToTokenError.FractionalMoreThan8Decimals;\n }\n try {\n e8s += BigInt(fractional.padEnd(8, \"0\"));\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n return e8s;\n};\n\n/**\n * Receives a string representing a number and returns the big int or error.\n *\n * @param amount - in string format\n * @returns bigint | FromStringToTokenError\n */\nconst convertStringToUlps = ({\n amount,\n decimals,\n}: {\n amount: string;\n decimals: number;\n}): bigint | FromStringToTokenError => {\n // Remove all instances of \",\" and \"'\".\n amount = amount.trim().replace(/[,']/g, \"\");\n\n // Verify that the string is of the format 1234.5678\n const regexMatch = amount.match(/\\d*(\\.\\d*)?/);\n if (!regexMatch || regexMatch[0] !== amount) {\n return FromStringToTokenError.InvalidFormat;\n }\n\n const [integral, fractional] = amount.split(\".\");\n\n let ulps = 0n;\n const ulpsPerToken = 10n ** BigInt(decimals);\n\n if (integral) {\n try {\n ulps += BigInt(integral) * ulpsPerToken;\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n if (fractional) {\n if (fractional.length > decimals) {\n return FromStringToTokenError.FractionalTooManyDecimals;\n }\n try {\n ulps += BigInt(fractional.padEnd(decimals, \"0\"));\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n return ulps;\n};\n\nexport interface Token {\n symbol: string;\n name: string;\n decimals: number;\n logo?: string;\n}\n\n// TODO: Remove this token and use the value from ICP ledger\nexport const ICPToken: Token = {\n symbol: \"ICP\",\n name: \"Internet Computer\",\n decimals: 8,\n};\n\n/**\n * Deprecated. Use TokenAmountV2 instead which supports decimals !== 8.\n *\n * Represents an amount of tokens.\n *\n * @param e8s - The amount of tokens in bigint.\n * @param token - The token type.\n */\nexport class TokenAmount {\n private constructor(\n protected e8s: bigint,\n public token: Token,\n ) {\n if (token.decimals !== 8) {\n throw new Error(\"Use TokenAmountV2 for number of decimals other than 8\");\n }\n }\n\n /**\n * Initialize from a bigint. Bigint are considered e8s.\n *\n * @param {amount: bigint; token?: Token;} params\n * @param {bigint} params.amount The amount in bigint format.\n * @param {Token} params.token The token type.\n */\n public static fromE8s({\n amount,\n token,\n }: {\n amount: bigint;\n token: Token;\n }): TokenAmount {\n return new TokenAmount(amount, token);\n }\n\n /**\n * Initialize from a string. Accepted formats:\n *\n * 1234567.8901\n * 1'234'567.8901\n * 1,234,567.8901\n *\n * @param {amount: string; token?: Token;} params\n * @param {string} params.amount The amount in string format.\n * @param {Token} params.token The token type.\n */\n public static fromString({\n amount,\n token,\n }: {\n amount: string;\n token: Token;\n }): TokenAmount | FromStringToTokenError {\n // If parsing the number fails because of the number of decimals, we still\n // want the error to be about the number of decimals and not about the\n // parsing.\n if (token.decimals !== 8) {\n throw new Error(\"Use TokenAmountV2 for number of decimals other than 8\");\n }\n const e8s = convertStringToE8s(amount);\n\n if (typeof e8s === \"bigint\") {\n return new TokenAmount(e8s, token);\n }\n return e8s;\n }\n\n /**\n * Initialize from a number.\n *\n * 1 integer is considered E8S_PER_TOKEN\n *\n * @param {amount: number; token?: Token;} params\n * @param {string} params.amount The amount in number format.\n * @param {Token} params.token The token type.\n */\n public static fromNumber({\n amount,\n token,\n }: {\n amount: number;\n token: Token;\n }): TokenAmount {\n const tokenAmount = TokenAmount.fromString({\n amount: amount.toString(),\n token,\n });\n if (tokenAmount instanceof TokenAmount) {\n return tokenAmount;\n }\n if (tokenAmount === FromStringToTokenError.FractionalMoreThan8Decimals) {\n throw new Error(`Number ${amount} has more than 8 decimals`);\n }\n\n // This should never happen\n throw new Error(`Invalid number ${amount}`);\n }\n\n /**\n *\n * @returns The amount of e8s.\n */\n public toE8s(): bigint {\n return this.e8s;\n }\n}\n\n/**\n * Represents an amount of tokens.\n *\n * @param upls - The amount of tokens in units in the last place. If the token\n * supports N decimals, 10^N ulp = 1 token.\n * @param token - The token type.\n */\nexport class TokenAmountV2 {\n private constructor(\n protected ulps: bigint,\n public token: Token,\n ) {}\n\n /**\n * Initialize from a bigint. Bigint are considered ulps.\n *\n * @param {amount: bigint; token?: Token;} params\n * @param {bigint} params.amount The amount in bigint format.\n * @param {Token} params.token The token type.\n */\n public static fromUlps({\n amount,\n token,\n }: {\n amount: bigint;\n token: Token;\n }): TokenAmountV2 {\n return new TokenAmountV2(amount, token);\n }\n\n /**\n * Initialize from a string. Accepted formats:\n *\n * 1234567.8901\n * 1'234'567.8901\n * 1,234,567.8901\n *\n * @param {amount: string; token?: Token;} params\n * @param {string} params.amount The amount in string format.\n * @param {Token} params.token The token type.\n */\n public static fromString({\n amount,\n token,\n }: {\n amount: string;\n token: Token;\n }): TokenAmountV2 | FromStringToTokenError {\n const ulps = convertStringToUlps({ amount, decimals: token.decimals });\n\n if (typeof ulps === \"bigint\") {\n return new TokenAmountV2(ulps, token);\n }\n return ulps;\n }\n\n /**\n * Initialize from a number.\n *\n * 1 integer is considered 10^{token.decimals} ulps\n *\n * @param {amount: number; token?: Token;} params\n * @param {string} params.amount The amount in number format.\n * @param {Token} params.token The token type.\n */\n public static fromNumber({\n amount,\n token,\n }: {\n amount: number;\n token: Token;\n }): TokenAmountV2 {\n const tokenAmount = TokenAmountV2.fromString({\n amount: amount.toFixed(\n Math.min(DECIMALS_CONVERSION_SUPPORTED, token.decimals),\n ),\n token,\n });\n if (tokenAmount instanceof TokenAmountV2) {\n return tokenAmount;\n }\n if (tokenAmount === FromStringToTokenError.FractionalTooManyDecimals) {\n throw new Error(\n `Number ${amount} has more than ${token.decimals} decimals`,\n );\n }\n\n // This should never happen\n throw new Error(`Invalid number ${amount}`);\n }\n\n /**\n *\n * @returns The amount of ulps.\n */\n public toUlps(): bigint {\n return this.ulps;\n }\n\n /**\n *\n * @returns The amount of ulps in e8s precision\n */\n public toE8s(): bigint {\n if (this.token.decimals < 8) {\n return this.ulps * 10n ** BigInt(8 - this.token.decimals);\n } else if (this.token.decimals === 8) {\n return this.ulps;\n } else {\n return this.ulps / 10n ** BigInt(this.token.decimals - 8);\n }\n }\n}\n", "import type { Principal } from \"@dfinity/principal\";\nimport type { QueryParams } from \"../types/query.params\";\n\nexport abstract class Canister<T> {\n protected constructor(\n private readonly id: Principal,\n protected readonly service: T,\n protected readonly certifiedService: T,\n ) {}\n\n get canisterId(): Principal {\n return this.id;\n }\n\n protected caller = ({ certified = true }: QueryParams): T =>\n certified ? this.certifiedService : this.service;\n}\n", "/**\n * Checks if a given argument is null or undefined.\n *\n * @template T - The type of the argument.\n * @param {T | undefined | null} argument - The argument to check.\n * @returns {argument is undefined | null} `true` if the argument is null or undefined; otherwise, `false`.\n */\nexport const isNullish = <T>(\n argument: T | undefined | null,\n): argument is undefined | null => argument === null || argument === undefined;\n\n/**\n * Checks if a given argument is neither null nor undefined.\n *\n * @template T - The type of the argument.\n * @param {T | undefined | null} argument - The argument to check.\n * @returns {argument is NonNullable<T>} `true` if the argument is not null or undefined; otherwise, `false`.\n */\nexport const nonNullish = <T>(\n argument: T | undefined | null,\n): argument is NonNullable<T> => !isNullish(argument);\n\n/**\n * Checks if a given value is not null, not undefined, and not an empty string.\n *\n * @param {string | undefined | null} value - The value to check.\n * @returns {boolean} `true` if the value is not null, not undefined, and not an empty string; otherwise, `false`.\n */\nexport const notEmptyString = (\n value: string | undefined | null,\n): value is string => nonNullish(value) && value !== \"\";\n\n/**\n * Checks if a given value is null, undefined, or an empty string.\n *\n * @param {string | undefined | null} value - The value to check.\n * @returns {value is undefined | null | \"\"} Type predicate indicating if the value is null, undefined, or an empty string.\n */\nexport const isEmptyString = (\n value: string | undefined | null,\n): value is undefined | null | \"\" => !notEmptyString(value);\n", "import type { QueryAndUpdateParams } from \"../types/query-and-update.params\";\nimport { isNullish } from \"../utils/nullish.utils\";\n\n/**\n * This service performs a query (not-certified) call and/or an update (certified) call, and handles the results.\n *\n * It is useful because it can do both type of calls for security reasons.\n * For example, malicious nodes can forge transactions and balance when calling an Index canister, if no update is performed to certify the results.\n *\n * Furthermore, it can handle the results of the calls in different ways:\n * - `query` only performs a query call.\n * - `update` only performs an update call.\n * - `query_and_update` performs both calls.\n *\n * The resolution can be:\n * - `all_settled` waits for all calls to settle.\n * - `race` waits for the first call to settle (typically, `query` is the fastest one).\n *\n * Once the call(s) are done, the response is handled by the `onLoad` callback.\n * However, if an error occurs, it is handled by the error callbacks, if provided: one for the query call and one for the update call.\n *\n * @param {QueryAndUpdateParams<R, E>} params The parameters to perform the request.\n * @param {QueryAndUpdateRequest<R>} params.request The request to perform.\n * @param {QueryAndUpdateOnResponse<R>} params.onLoad The callback to handle the response of the request.\n * @param {QueryAndUpdateOnQueryError<E>} [params.onQueryError] The callback to handle the error of the `query` request.\n * @param {QueryAndUpdateOnUpdateError<E>} [params.onUpdateError] The callback to handle the error of the `update` request.\n * @param {QueryAndUpdateStrategy} [params.strategy=\"query_and_update\"] The strategy to use. Default is `query_and_update`.\n * @param {QueryAndUpdateIdentity} params.identity The identity to use for the request.\n * @param {QueryAndUpdatePromiseResolution} [params.resolution=\"race\"] The resolution to use. Default is `race`.\n *\n * @template R The type of the response.\n * @template E The type of the error.\n *\n * @returns A promise that resolves when the request is done.\n */\nexport const queryAndUpdate = async <R, E = unknown>({\n request,\n onLoad,\n onQueryError,\n onUpdateError,\n strategy = \"query_and_update\",\n identity,\n resolution = \"race\",\n}: QueryAndUpdateParams<R, E>): Promise<void> => {\n let certifiedDone = false;\n\n const queryOrUpdate = (certified: boolean) =>\n request({ certified, identity })\n .then((response) => {\n if (certifiedDone) {\n return;\n }\n\n onLoad({ certified, response });\n })\n .catch((error: E) => {\n if (!certified) {\n onQueryError?.({ error, identity });\n }\n\n if (certifiedDone) {\n return;\n }\n\n if (isNullish(onUpdateError)) {\n return;\n }\n\n console.error(error);\n\n if (!certified) {\n return;\n }\n\n onUpdateError({ error, identity });\n })\n .finally(() => (certifiedDone = certifiedDone || certified));\n\n const requests: Array<Promise<void>> =\n strategy === \"query\"\n ? [queryOrUpdate(false)]\n : strategy === \"update\"\n ? [queryOrUpdate(true)]\n : [queryOrUpdate(false), queryOrUpdate(true)];\n\n await (resolution === \"all_settled\"\n ? Promise.allSettled(requests)\n : Promise.race(requests));\n};\n", "import type { ActorConfig, ActorSubclass, Agent } from \"@dfinity/agent\";\nimport { Actor } from \"@dfinity/agent\";\nimport type { IDL } from \"@dfinity/candid\";\nimport type { Principal } from \"@dfinity/principal\";\nimport type { CanisterOptions } from \"../types/canister.options\";\nimport { defaultAgent } from \"./agent.utils\";\n\ntype RequiredCanisterOptions<T> = Required<\n Pick<CanisterOptions<T>, \"canisterId\">\n> &\n Omit<CanisterOptions<T>, \"canisterId\">;\n\nexport const createServices = <T>({\n options: {\n canisterId,\n serviceOverride,\n certifiedServiceOverride,\n agent: agentOption,\n callTransform,\n queryTransform,\n },\n idlFactory,\n certifiedIdlFactory,\n}: {\n options: RequiredCanisterOptions<T> &\n Pick<ActorConfig, \"queryTransform\" | \"callTransform\">;\n idlFactory: IDL.InterfaceFactory;\n certifiedIdlFactory: IDL.InterfaceFactory;\n}): {\n service: ActorSubclass<T>;\n certifiedService: ActorSubclass<T>;\n agent: Agent;\n canisterId: Principal;\n} => {\n const agent: Agent = agentOption ?? defaultAgent();\n\n const service: ActorSubclass<T> =\n serviceOverride ??\n Actor.createActor<T>(idlFactory, {\n agent,\n canisterId,\n callTransform,\n queryTransform,\n });\n\n const certifiedService: ActorSubclass<T> =\n certifiedServiceOverride ??\n Actor.createActor<T>(certifiedIdlFactory, {\n agent,\n canisterId,\n callTransform,\n queryTransform,\n });\n\n return { service, certifiedService, agent, canisterId };\n};\n", "import type { Agent, Identity } from \"@dfinity/agent\";\nimport { AnonymousIdentity, HttpAgent } from \"@dfinity/agent\";\nimport type { CreateAgentParams } from \"../types/agent.utils\";\nimport { isNullish, nonNullish } from \"./nullish.utils\";\n\n/**\n * Get a default agent that connects to mainnet with the anonymous identity.\n * @returns The default agent to use\n */\nexport const defaultAgent = (): Agent =>\n HttpAgent.createSync({\n host: \"https://icp-api.io\",\n identity: new AnonymousIdentity(),\n });\n\n/**\n * Create an agent for a given identity\n *\n * @param {CreateAgentParams} params The parameters to create a new HTTP agent\n * @param {Identity} params.identity A mandatory identity to use for the agent\n * @param {string} params.host An optional host to connect to, particularly useful for local development\n * @param {boolean} params.fetchRootKey Fetch root key for certificate validation during local development or on testnet\n * @param {boolean} params.verifyQuerySignatures Check for signatures in the state tree signed by the node that replies to queries - i.e. certify responses.\n * @param {number} params.retryTimes Set the number of retries the agent should perform before error.\n */\nexport const createAgent = async ({\n identity,\n host,\n fetchRootKey = false,\n verifyQuerySignatures = false,\n retryTimes,\n}: CreateAgentParams): Promise<HttpAgent> => {\n return await HttpAgent.create({\n identity,\n ...(nonNullish(host) && { host }),\n verifyQuerySignatures,\n ...(nonNullish(retryTimes) && { retryTimes }),\n shouldFetchRootKey: fetchRootKey,\n });\n};\n\nexport type AgentManagerConfig = Pick<\n CreateAgentParams,\n \"fetchRootKey\" | \"host\"\n>;\n\n/**\n * AgentManager class manages HttpAgent instances for different identities.\n *\n * It caches agents by identity to optimise resource usage and avoid unnecessary agent creation.\n * Provides functionality to create new agents, retrieve cached agents, and clear the cache when needed.\n */\nexport class AgentManager {\n private agents: Record<string, HttpAgent> | undefined | null = undefined;\n\n private constructor(private readonly config: AgentManagerConfig) {}\n\n /**\n * Static factory method to create a new AgentManager instance.\n *\n * This method serves as an alternative to directly using the private constructor,\n * making it more convenient to create instances of `AgentManager` using a simple and clear method.\n *\n * @param {AgentManagerConfig} config - Configuration options for the AgentManager instance.\n * @param {boolean} config.fetchRootKey - Whether to fetch the root key for certificate validation.\n * @param {string} config.host - The host to connect to.\n * @returns {AgentManager} A new instance of `AgentManager`.\n */\n public static create(config: AgentManagerConfig): AgentManager {\n return new AgentManager(config);\n }\n\n /**\n * Get or create an HTTP agent for a given identity.\n *\n * If the agent for the specified identity has been created and cached, it is retrieved from the cache.\n * If no agent exists for the identity, a new one is created, cached, and then returned.\n *\n * @param {Identity} identity - The identity to be used to create the agent.\n * @returns {Promise<HttpAgent>} The HttpAgent associated with the given identity.\n */\n public getAgent = async ({\n identity,\n }: {\n identity: Identity;\n }): Promise<HttpAgent> => {\n const key = identity.getPrincipal().toText();\n\n if (isNullish(this.agents) || isNullish(this.agents[key])) {\n const agent = await createAgent({\n identity,\n fetchRootKey: this.config.fetchRootKey,\n host: this.config.host,\n verifyQuerySignatures: true,\n });\n\n this.agents = {\n ...(this.agents ?? {}),\n [key]: agent,\n };\n\n return agent;\n }\n\n return this.agents[key];\n };\n\n /**\n * Clear the cache of HTTP agents.\n *\n * This method removes all cached agents, forcing new agent creation on the next request for any identity.\n * Useful when identities have changed or if you want to reset all active connections.\n */\n public clearAgents = (): void => {\n this.agents = null;\n };\n}\n", "export class InvalidPercentageError extends Error {}\nexport class NullishError extends Error {}\n\nexport const assertNonNullish: <T>(\n value: T,\n message?: string,\n) => asserts value is NonNullable<T> = <T>(\n value: T,\n message?: string,\n): void => {\n if (value === null || value === undefined) {\n throw new NullishError(message);\n }\n};\n\nexport const asNonNullish = <T>(value: T, message?: string): NonNullable<T> => {\n assertNonNullish(value, message);\n return value;\n};\n\nexport const assertPercentageNumber = (percentage: number) => {\n if (percentage < 0 || percentage > 100) {\n throw new InvalidPercentageError(\n `${percentage} is not a valid percentage number.`,\n );\n }\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\n\nexport const uint8ArrayToBigInt = (array: Uint8Array): bigint => {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n if (typeof view.getBigUint64 === \"function\") {\n return view.getBigUint64(0);\n } else {\n const high = BigInt(view.getUint32(0));\n const low = BigInt(view.getUint32(4));\n\n return (high << BigInt(32)) + low;\n }\n};\n\nexport const bigIntToUint8Array = (value: bigint): Uint8Array => {\n const buffer = new ArrayBuffer(8);\n const view = new DataView(buffer);\n if (typeof view.setBigUint64 === \"function\") {\n view.setBigUint64(0, value);\n } else {\n const high = Number(value >> BigInt(32));\n const low = Number(value & BigInt(0xffffffff));\n\n view.setUint32(0, high);\n view.setUint32(4, low);\n }\n\n return new Uint8Array(buffer);\n};\n\nexport const numberToUint8Array = (value: number): Uint8Array => {\n const view = new DataView(new ArrayBuffer(8));\n for (let index = 7; index >= 0; --index) {\n view.setUint8(index, value % 256);\n value = value >> 8;\n }\n return new Uint8Array(view.buffer);\n};\n\nexport const arrayBufferToUint8Array = (buffer: ArrayBuffer): Uint8Array =>\n new Uint8Array(buffer);\n\nexport const uint8ArrayToArrayOfNumber = (array: Uint8Array): Array<number> =>\n Array.from(array);\n\nexport const arrayOfNumberToUint8Array = (numbers: Array<number>): Uint8Array =>\n new Uint8Array(numbers);\n\nexport const asciiStringToByteArray = (text: string): Array<number> =>\n Array.from(text).map((c) => c.charCodeAt(0));\n\nexport const hexStringToUint8Array = (hexString: string): Uint8Array => {\n const matches = hexString.match(/.{1,2}/g);\n\n assertNonNullish(matches, \"Invalid hex string.\");\n\n return Uint8Array.from(matches.map((byte) => parseInt(byte, 16)));\n};\n\nexport const uint8ArrayToHexString = (bytes: Uint8Array | number[]) => {\n if (!(bytes instanceof Uint8Array)) {\n bytes = Uint8Array.from(bytes);\n }\n return bytes.reduce(\n (str, byte) => str + byte.toString(16).padStart(2, \"0\"),\n \"\",\n );\n};\n\nexport const candidNumberArrayToBigInt = (array: number[]): bigint => {\n let result = 0n;\n for (let i = array.length - 1; i >= 0; i--) {\n result = (result << 32n) + BigInt(array[i]);\n }\n return result;\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\n\nconst ALPHABET = \"abcdefghijklmnopqrstuvwxyz234567\";\n\n// Build a lookup table for decoding.\nconst LOOKUP_TABLE: Record<string, number> = Object.create(null);\nfor (let i = 0; i < ALPHABET.length; i++) {\n LOOKUP_TABLE[ALPHABET[i]] = i;\n}\n\n// Add aliases for rfc4648.\nLOOKUP_TABLE[\"0\"] = LOOKUP_TABLE.o;\nLOOKUP_TABLE[\"1\"] = LOOKUP_TABLE.i;\n\n/**\n * Encode an Uint8Array to a base32 string.\n *\n * @param input The input array to encode.\n * @returns A Base32 string encoding the input.\n */\nexport const encodeBase32 = (input: Uint8Array): string => {\n // How many bits will we skip from the first byte.\n let skip = 0;\n // 5 high bits, carry from one byte to the next.\n let bits = 0;\n\n // The output string in base32.\n let output = \"\";\n\n function encodeByte(byte: number): number {\n if (skip < 0) {\n // we have a carry from the previous byte\n bits |= byte >> -skip;\n } else {\n // no carry\n bits = (byte << skip) & 248;\n }\n\n if (skip > 3) {\n // Not enough data to produce a character, get us another one\n skip -= 8;\n return 1;\n }\n\n if (skip < 4) {\n // produce a character\n output += ALPHABET[bits >> 3];\n skip += 5;\n }\n\n return 0;\n }\n\n for (let i = 0; i < input.length; ) {\n i += encodeByte(input[i]);\n }\n\n return output + (skip < 0 ? ALPHABET[bits >> 3] : \"\");\n};\n\n/**\n * Decode a base32 string to Uint8Array.\n *\n * @param input The input string to decode.\n * @param input The base32 encoded string to decode.\n */\nexport function decodeBase32(input: string): Uint8Array {\n // how many bits we have from the previous character.\n let skip = 0;\n // current byte we're producing.\n let byte = 0;\n\n const output = new Uint8Array(((input.length * 4) / 3) | 0);\n let o = 0;\n\n function decodeChar(char: string) {\n // Consume a character from the stream, store\n // the output in this.output. As before, better\n // to use update().\n let val = LOOKUP_TABLE[char.toLowerCase()];\n assertNonNullish(val, `Invalid character: ${JSON.stringify(char)}`);\n\n // move to the high bits\n val <<= 3;\n byte |= val >>> skip;\n skip += 5;\n\n if (skip >= 8) {\n // We have enough bytes to produce an output\n output[o++] = byte;\n skip -= 8;\n\n if (skip > 0) {\n byte = (val << (5 - skip)) & 255;\n } else {\n byte = 0;\n }\n }\n }\n\n for (const c of input) {\n decodeChar(c);\n }\n\n return output.slice(0, o);\n}\n", "/**\n * Converts a Uint8Array (binary data) to a base64 encoded string.\n *\n * @param {Uint8Array} uint8Array - The Uint8Array containing binary data to be encoded.\n * @returns {string} - The base64 encoded string representation of the binary data.\n */\nexport const uint8ArrayToBase64 = (uint8Array: Uint8Array): string =>\n btoa(String.fromCharCode(...new Uint8Array(uint8Array)));\n\n/**\n * Converts a base64 encoded string to a Uint8Array (binary data).\n *\n * @param {string} base64String - The base64 encoded string to be decoded.\n * @returns {Uint8Array} - The Uint8Array representation of the decoded binary data.\n */\nexport const base64ToUint8Array = (base64String: string): Uint8Array =>\n Uint8Array.from(atob(base64String), (c) => c.charCodeAt(0));\n", "// This file is translated to JavaScript from\n// https://lxp32.github.io/docs/a-simple-example-crc32-calculation/\nconst lookUpTable: Uint32Array = new Uint32Array([\n 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,\n 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,\n 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,\n 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,\n 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,\n 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\n 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,\n 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\n 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,\n 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\n 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,\n 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\n 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,\n 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,\n 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,\n 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\n 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,\n 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\n 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,\n 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\n 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,\n 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,\n 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,\n 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,\n 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,\n 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,\n 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,\n 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,\n 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,\n 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\n 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,\n 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,\n 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,\n 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\n 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,\n 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,\n 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,\n 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\n 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,\n 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\n 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,\n]);\n\nconst crc32 = (bytes: Uint8Array): number => {\n let crc = -1;\n\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i];\n const t = (byte ^ crc) & 0xff;\n crc = lookUpTable[t] ^ (crc >>> 8);\n }\n\n return (crc ^ -1) >>> 0;\n};\n\nexport const bigEndianCrc32 = (bytes: Uint8Array): Uint8Array => {\n const checksumArrayBuf = new ArrayBuffer(4);\n const view = new DataView(checksumArrayBuf);\n view.setUint32(0, crc32(bytes), false);\n return new Uint8Array(checksumArrayBuf);\n};\n", "const SECONDS_IN_MINUTE = 60;\nconst MINUTES_IN_HOUR = 60;\nconst HOURS_IN_DAY = 24;\nconst DAYS_IN_NON_LEAP_YEAR = 365;\n\nexport interface I18nSecondsToDuration {\n year: string;\n year_plural: string;\n month: string;\n month_plural: string;\n day: string;\n day_plural: string;\n hour: string;\n hour_plural: string;\n minute: string;\n minute_plural: string;\n second: string;\n second_plural: string;\n}\n\nconst EN_TIME: I18nSecondsToDuration = {\n year: \"year\",\n year_plural: \"years\",\n month: \"month\",\n month_plural: \"months\",\n day: \"day\",\n day_plural: \"days\",\n hour: \"hour\",\n hour_plural: \"hours\",\n minute: \"minute\",\n minute_plural: \"minutes\",\n second: \"second\",\n second_plural: \"seconds\",\n};\n\n/**\n * Convert seconds to a human-readable duration, such as \"6 days, 10 hours.\"\n * @param {Object} options - The options object.\n * @param {bigint} options.seconds - The number of seconds to convert.\n * @param {I18nSecondsToDuration} [options.i18n] - The i18n object for customizing language and units. Defaults to English.\n * @returns {string} The human-readable duration string.\n */\nexport const secondsToDuration = ({\n seconds,\n i18n = EN_TIME,\n}: {\n seconds: bigint;\n i18n?: I18nSecondsToDuration;\n}): string => {\n let minutes = seconds / BigInt(SECONDS_IN_MINUTE);\n\n let hours = minutes / BigInt(MINUTES_IN_HOUR);\n minutes -= hours * BigInt(MINUTES_IN_HOUR);\n\n let days = hours / BigInt(HOURS_IN_DAY);\n hours -= days * BigInt(HOURS_IN_DAY);\n\n const years = fullYearsInDays(days);\n days -= daysInYears(years);\n\n const periods = [\n createLabel(\"year\", years),\n createLabel(\"day\", days),\n createLabel(\"hour\", hours),\n createLabel(\"minute\", minutes),\n ...(seconds > BigInt(0) && seconds < BigInt(60)\n ? [createLabel(\"second\", seconds)]\n : []),\n ];\n\n return periods\n .filter(({ amount }) => amount > 0)\n .slice(0, 2)\n .map(\n (labelInfo) =>\n `${labelInfo.amount} ${\n labelInfo.amount === 1\n ? i18n[labelInfo.labelKey]\n : i18n[`${labelInfo.labelKey}_plural`]\n }`,\n )\n .join(\", \");\n};\n\nconst fullYearsInDays = (days: bigint): bigint => {\n // Use integer division.\n let years = days / BigInt(DAYS_IN_NON_LEAP_YEAR);\n while (daysInYears(years) > days) {\n years--;\n }\n return years;\n};\n\nconst daysInYears = (years: bigint): bigint => {\n // Use integer division.\n const leapDays = years / BigInt(4);\n return years * BigInt(DAYS_IN_NON_LEAP_YEAR) + leapDays;\n};\n\ntype LabelKey = \"year\" | \"month\" | \"day\" | \"hour\" | \"minute\" | \"second\";\ntype LabelInfo = {\n labelKey: LabelKey;\n amount: number;\n};\nconst createLabel = (labelKey: LabelKey, amount: bigint): LabelInfo => ({\n labelKey,\n amount: Number(amount),\n});\n\nconst NANOSECONDS_PER_MILLISECOND = 1_000_000n;\n\n/**\n * Returns the current timestamp in nanoseconds as a `bigint`.\n *\n * @returns {bigint} The current timestamp in nanoseconds.\n */\nexport const nowInBigIntNanoSeconds = (): bigint =>\n BigInt(Date.now()) * NANOSECONDS_PER_MILLISECOND;\n\n/**\n * Converts a given `Date` object to a timestamp in nanoseconds as a `bigint`.\n *\n * @param {Date} date - The `Date` object to convert.\n * @returns {bigint} The timestamp in nanoseconds.\n */\nexport const toBigIntNanoSeconds = (date: Date): bigint =>\n BigInt(date.getTime()) * NANOSECONDS_PER_MILLISECOND;\n", "/**\n * Creates a debounced version of the provided function.\n *\n * The debounced function postpones its execution until after a certain amount of time\n * has elapsed since the last time it was invoked. This is useful for limiting the rate\n * at which a function is called (e.g. in response to user input or events).\n *\n * @param {Function} func - The function to debounce. It will only be called after no new calls happen within the specified timeout.\n * @param {number} [timeout=300] - The debounce delay in milliseconds. Defaults to 300ms if not provided or invalid.\n * @returns {(args: unknown[]) => void} A debounced version of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const debounce = (func: Function, timeout?: number) => {\n let timer: NodeJS.Timer | undefined;\n\n return (...args: unknown[]) => {\n const next = () => func(...args);\n\n if (timer) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore TypeScript global and window confusion even if we are using @types/node\n clearTimeout(timer);\n }\n\n timer = setTimeout(\n next,\n timeout !== undefined && timeout > 0 ? timeout : 300,\n );\n };\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\nimport { nonNullish } from \"./nullish.utils\";\n\n/**\n * Converts a value into a Candid-style variant representation of an optional value.\n *\n * @template T The type of the value.\n * @param {T | null | undefined} value - The value to convert into a Candid-style variant.\n * @returns {[] | [T]} A Candid-style variant representation: an empty array for `null` and `undefined` or an array with the value.\n */\nexport const toNullable = <T>(value?: T | null): [] | [T] => {\n return nonNullish(value) ? [value] : [];\n};\n\n/**\n * Extracts the value from a Candid-style variant representation of an optional value.\n *\n * @template T The type of the value.\n * @param {[] | [T]} value - A Candid-style variant representing an optional value.\n * @returns {T | undefined} The extracted value, or `undefined` if the array is empty.\n */\nexport const fromNullable = <T>(value: [] | [T]): T | undefined => {\n return value?.[0];\n};\n\n/**\n * Extracts the value from a Candid-style variant representation of an optional value,\n * ensuring the value is defined. Throws an error if the array is empty or the value is nullish.\n *\n * @template T The type of the value.\n * @param {[] | [T]} value - A Candid-style variant representing an optional value.\n * @returns {T} The extracted value.\n * @throws {Error} If the array is empty or the value is nullish.\n */\nexport const fromDefinedNullable = <T>(value: [] | [T]): T => {\n const result = fromNullable(value);\n\n assertNonNullish(result);\n\n return result;\n};\n\n/**\n * Extracts the value from a nullish Candid-style variant representation.\n *\n * @template T The type of the value.\n * @param {([] | [T]) | undefined} value - A Candid-style variant or `undefined`.\n * @returns {T | undefined} The extracted value, or `undefined` if the input is nullish or the array is empty.\n */\nexport const fromNullishNullable = <T>(\n value: ([] | [T]) | undefined,\n): T | undefined => fromNullable(value ?? []);\n", "import { Principal } from \"@dfinity/principal\";\nimport { nonNullish } from \"./nullish.utils\";\n\nconst JSON_KEY_BIGINT = \"__bigint__\";\nconst JSON_KEY_PRINCIPAL = \"__principal__\";\nconst JSON_KEY_UINT8ARRAY = \"__uint8array__\";\n\n/**\n * A custom replacer for `JSON.stringify` that converts specific types not natively supported\n * by the API into JSON-compatible formats.\n *\n * Supported conversions:\n * - `BigInt` \u2192 `{ \"__bigint__\": string }`\n * - `Principal` \u2192 `{ \"__principal__\": string }`\n * - `Uint8Array` \u2192 `{ \"__uint8array__\": number[] }`\n *\n * @param {string} _key - Ignored. Only provided for API compatibility.\n * @param {unknown} value - The value to transform before stringification.\n * @returns {unknown} The transformed value if it matches a known type, otherwise the original value.\n */\nexport const jsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === \"bigint\") {\n return { [JSON_KEY_BIGINT]: `${value}` };\n }\n\n if (nonNullish(value) && value instanceof Principal) {\n return { [JSON_KEY_PRINCIPAL]: value.toText() };\n }\n\n if (nonNullish(value) && value instanceof Uint8Array) {\n return { [JSON_KEY_UINT8ARRAY]: Array.from(value) };\n }\n\n return value;\n};\n\n/**\n * A custom reviver for `JSON.parse` that reconstructs specific types from their JSON-encoded representations.\n *\n * This reverses the transformations applied by `jsonReplacer`, restoring the original types.\n *\n * Supported conversions:\n * - `{ \"__bigint__\": string }` \u2192 `BigInt`\n * - `{ \"__principal__\": string }` \u2192 `Principal`\n * - `{ \"__uint8array__\": number[] }` \u2192 `Uint8Array`\n *\n * @param {string} _key - Ignored but provided for API compatibility.\n * @param {unknown} value - The parsed value to transform.\n * @returns {unknown} The reconstructed value if it matches a known type, otherwise the original value.\n */\nexport const jsonReviver = (_key: string, value: unknown): unknown => {\n const mapValue = <T>(key: string): T => (value as Record<string, T>)[key];\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_BIGINT in value\n ) {\n return BigInt(mapValue(JSON_KEY_BIGINT));\n }\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_PRINCIPAL in value\n ) {\n return Principal.fromText(mapValue(JSON_KEY_PRINCIPAL));\n }\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_UINT8ARRAY in value\n ) {\n return Uint8Array.from(mapValue(JSON_KEY_UINT8ARRAY));\n }\n\n return value;\n};\n", "import type { Principal } from \"@dfinity/principal\";\n\n/**\n * Convert a principal to a Uint8Array 32 length.\n * e.g. Useful to convert a canister ID when topping up cycles with the Cmc canister\n * @param principal The principal that needs to be converted to Subaccount\n */\nexport const principalToSubAccount = (principal: Principal): Uint8Array => {\n const bytes: Uint8Array = principal.toUint8Array();\n const subAccount: Uint8Array = new Uint8Array(32);\n subAccount[0] = bytes.length;\n subAccount.set(bytes, 1);\n return subAccount;\n};\n", "const AMOUNT_VERSION_PARTS = 3;\nconst addZeros = (nums: number[], amountZeros: number): number[] =>\n amountZeros > nums.length\n ? [...nums, ...[...Array(amountZeros - nums.length).keys()].map(() => 0)]\n : nums;\n\nconst convertToNumber = (versionStringPart: string): number => {\n if (!Number.isNaN(Number(versionStringPart))) {\n return Number(versionStringPart);\n }\n const strippedVersion = versionStringPart.split(\"\").reduce((acc, char) => {\n if (Number.isNaN(Number(char))) {\n return acc;\n }\n return acc + char;\n }, \"\");\n return Number(strippedVersion);\n};\n/**\n * Returns true if the current version is smaller than the minVersion, false if equal or bigger.\n * Tags after patch version are ignored, e.g. 1.0.0-beta.1 is considered equal to 1.0.0.\n *\n * @param {Object} params\n * @param {string} params.minVersion Ex: \"1.0.0\"\n * @param {string} params.currentVersion Ex: \"2.0.0\"\n * @returns boolean\n */\nexport const smallerVersion = ({\n minVersion,\n currentVersion,\n}: {\n minVersion: string;\n currentVersion: string;\n}): boolean => {\n const minVersionStandarized = addZeros(\n minVersion.split(\".\").map(convertToNumber),\n AMOUNT_VERSION_PARTS,\n ).join(\".\");\n const currentVersionStandarized = addZeros(\n currentVersion.split(\".\").map(convertToNumber),\n AMOUNT_VERSION_PARTS,\n ).join(\".\");\n // Versions need to have the same number of parts to be comparable\n // Source: https://stackoverflow.com/a/65687141\n return (\n currentVersionStandarized.localeCompare(minVersionStandarized, undefined, {\n numeric: true,\n sensitivity: \"base\",\n }) < 0\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["index_exports", "__export", "AgentManager", "Canister", "FromStringToTokenError", "ICPToken", "InvalidPercentageError", "NullishError", "TokenAmount", "TokenAmountV2", "arrayBufferToUint8Array", "arrayOfNumberToUint8Array", "asNonNullish", "asciiStringToByteArray", "assertNonNullish", "assertPercentageNumber", "base64ToUint8Array", "bigEndianCrc32", "bigIntToUint8Array", "candidNumberArrayToBigInt", "convertStringToE8s", "createAgent", "createServices", "debounce", "decodeBase32", "defaultAgent", "encodeBase32", "fromDefinedNullable", "fromNullable", "fromNullishNullable", "hexStringToUint8Array", "isEmptyString", "isNullish", "jsonReplacer", "jsonReviver", "nonNullish", "notEmptyString", "nowInBigIntNanoSeconds", "numberToUint8Array", "principalToSubAccount", "queryAndUpdate", "secondsToDuration", "smallerVersion", "toBigIntNanoSeconds", "toNullable", "uint8ArrayToArrayOfNumber", "uint8ArrayToBase64", "uint8ArrayToBigInt", "uint8ArrayToHexString", "__toCommonJS", "FromStringToTokenError", "E8S_PER_TOKEN", "DECIMALS_CONVERSION_SUPPORTED", "convertStringToE8s", "value", "amount", "regexMatch", "integral", "fractional", "e8s", "E8S_PER_TOKEN", "convertStringToUlps", "decimals", "ulps", "ulpsPerToken", "ICPToken", "TokenAmount", "_TokenAmount", "token", "tokenAmount", "TokenAmountV2", "_TokenAmountV2", "Canister", "id", "service", "certifiedService", "certified", "isNullish", "argument", "nonNullish", "notEmptyString", "value", "isEmptyString", "queryAndUpdate", "request", "onLoad", "onQueryError", "onUpdateError", "strategy", "identity", "resolution", "certifiedDone", "queryOrUpdate", "certified", "response", "error", "isNullish", "requests", "import_agent", "import_agent", "defaultAgent", "createAgent", "identity", "host", "fetchRootKey", "verifyQuerySignatures", "retryTimes", "nonNullish", "AgentManager", "_AgentManager", "config", "key", "isNullish", "agent", "createServices", "canisterId", "serviceOverride", "certifiedServiceOverride", "agentOption", "callTransform", "queryTransform", "idlFactory", "certifiedIdlFactory", "agent", "defaultAgent", "service", "certifiedService", "InvalidPercentageError", "NullishError", "assertNonNullish", "value", "message", "asNonNullish", "assertPercentageNumber", "percentage", "uint8ArrayToBigInt", "array", "view", "high", "low", "bigIntToUint8Array", "value", "buffer", "numberToUint8Array", "index", "arrayBufferToUint8Array", "uint8ArrayToArrayOfNumber", "arrayOfNumberToUint8Array", "numbers", "asciiStringToByteArray", "text", "c", "hexStringToUint8Array", "hexString", "matches", "assertNonNullish", "byte", "uint8ArrayToHexString", "bytes", "str", "candidNumberArrayToBigInt", "result", "i", "ALPHABET", "LOOKUP_TABLE", "i", "encodeBase32", "input", "skip", "bits", "output", "encodeByte", "byte", "decodeBase32", "o", "decodeChar", "char", "val", "assertNonNullish", "c", "uint8ArrayToBase64", "uint8Array", "base64ToUint8Array", "base64String", "c", "lookUpTable", "crc32", "bytes", "crc", "i", "t", "bigEndianCrc32", "checksumArrayBuf", "EN_TIME", "secondsToDuration", "seconds", "i18n", "minutes", "hours", "days", "years", "fullYearsInDays", "daysInYears", "createLabel", "amount", "labelInfo", "leapDays", "labelKey", "NANOSECONDS_PER_MILLISECOND", "nowInBigIntNanoSeconds", "toBigIntNanoSeconds", "date", "debounce", "func", "timeout", "timer", "args", "next", "toNullable", "value", "nonNullish", "fromNullable", "fromDefinedNullable", "result", "assertNonNullish", "fromNullishNullable", "import_principal", "JSON_KEY_BIGINT", "JSON_KEY_PRINCIPAL", "JSON_KEY_UINT8ARRAY", "jsonReplacer", "_key", "value", "nonNullish", "jsonReviver", "mapValue", "key", "principalToSubAccount", "principal", "bytes", "subAccount", "addZeros", "nums", "amountZeros", "convertToNumber", "versionStringPart", "strippedVersion", "acc", "char", "smallerVersion", "minVersion", "currentVersion", "minVersionStandarized"]
7
7
  }
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var T=(n=>(n[n.FractionalMoreThan8Decimals=0]="FractionalMoreThan8Decimals",n[n.InvalidFormat=1]="InvalidFormat",n[n.FractionalTooManyDecimals=2]="FractionalTooManyDecimals",n))(T||{});var h=BigInt(1e8);var L=8,F=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,i]=t.split("."),o=BigInt(0);if(n)try{o+=BigInt(n)*h}catch{return 1}if(i){if(i.length>8)return 0;try{o+=BigInt(i.padEnd(8,"0"))}catch{return 1}}return o},V=({amount:e,decimals:t})=>{e=e.trim().replace(/[,']/g,"");let r=e.match(/\d*(\.\d*)?/);if(!r||r[0]!==e)return 1;let[n,i]=e.split("."),o=0n,s=10n**BigInt(t);if(n)try{o+=BigInt(n)*s}catch{return 1}if(i){if(i.length>t)return 2;try{o+=BigInt(i.padEnd(t,"0"))}catch{return 1}}return o},W={symbol:"ICP",name:"Internet Computer",decimals:8},N=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=F(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}},I=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=V({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(L,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 U=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}};import{Actor as B}from"@dfinity/agent";import{AnonymousIdentity as Y,HttpAgent as S}from"@dfinity/agent";var b=e=>e==null,c=e=>!b(e),K=e=>c(e)&&e!=="",tt=e=>!K(e);var w=()=>S.createSync({host:"https://icp-api.io",identity:new Y}),v=async({identity:e,host:t,fetchRootKey:r=!1,verifyQuerySignatures:n=!1,retryTimes:i})=>await S.create({identity:e,...c(t)&&{host:t},verifyQuerySignatures:n,...c(i)&&{retryTimes:i},shouldFetchRootKey:r}),_=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 v({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 ct=({options:{canisterId:e,serviceOverride:t,certifiedServiceOverride:r,agent:n,callTransform:i,queryTransform:o},idlFactory:s,certifiedIdlFactory:a})=>{let l=n??w(),C=t??B.createActor(s,{agent:l,canisterId:e,callTransform:i,queryTransform:o}),M=r??B.createActor(a,{agent:l,canisterId:e,callTransform:i,queryTransform:o});return{service:C,certifiedService:M,agent:l,canisterId:e}};var p=class extends Error{},m=class extends Error{},x=(e,t)=>{if(e==null)throw new m(t)},xt=(e,t)=>(x(e,t),e),dt=e=>{if(e<0||e>100)throw new p(`${e} is not a valid percentage number.`)};var ut=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}},lt=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)),i=Number(e&BigInt(4294967295));r.setUint32(0,n),r.setUint32(4,i)}return new Uint8Array(t)},pt=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)},mt=e=>new Uint8Array(e),gt=e=>Array.from(e),yt=e=>new Uint8Array(e),At=e=>Array.from(e).map(t=>t.charCodeAt(0)),Tt=e=>{let t=e.match(/.{1,2}/g);return x(t,"Invalid hex string."),Uint8Array.from(t.map(r=>parseInt(r,16)))},ht=e=>(e instanceof Uint8Array||(e=Uint8Array.from(e)),e.reduce((t,r)=>t+r.toString(16).padStart(2,"0"),"")),Nt=e=>{let t=0n;for(let r=e.length-1;r>=0;r--)t=(t<<32n)+BigInt(e[r]);return t};var u="abcdefghijklmnopqrstuvwxyz234567",d=Object.create(null);for(let e=0;e<u.length;e++)d[u[e]]=e;d[0]=d.o;d[1]=d.i;var _t=e=>{let t=0,r=0,n="";function i(o){return t<0?r|=o>>-t:r=o<<t&248,t>3?(t-=8,1):(t<4&&(n+=u[r>>3],t+=5),0)}for(let o=0;o<e.length;)o+=i(e[o]);return n+(t<0?u[r>>3]:"")};function St(e){let t=0,r=0,n=new Uint8Array(e.length*4/3|0),i=0;function o(s){let a=d[s.toLowerCase()];x(a,`Invalid character: ${JSON.stringify(s)}`),a<<=3,r|=a>>>t,t+=5,t>=8&&(n[i++]=r,t-=8,t>0?r=a<<5-t&255:r=0)}for(let s of e)o(s);return n.slice(0,i)}var Bt=e=>btoa(String.fromCharCode(...new Uint8Array(e))),Et=e=>Uint8Array.from(atob(e),t=>t.charCodeAt(0));var H=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]),$=e=>{let t=-1;for(let r=0;r<e.length;r++){let i=(e[r]^t)&255;t=H[i]^t>>>8}return(t^-1)>>>0},Ot=e=>{let t=new ArrayBuffer(4);return new DataView(t).setUint32(0,$(e),!1),new Uint8Array(t)};var j={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"},Dt=({seconds:e,i18n:t=j})=>{let r=e/BigInt(60),n=r/BigInt(60);r-=n*BigInt(60);let i=n/BigInt(24);n-=i*BigInt(24);let o=q(i);return i-=E(o),[f("year",o),f("day",i),f("hour",n),f("minute",r),...e>BigInt(0)&&e<BigInt(60)?[f("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(", ")},q=e=>{let t=e/BigInt(365);for(;E(t)>e;)t--;return t},E=e=>{let t=e/BigInt(4);return e*BigInt(365)+t},f=(e,t)=>({labelKey:e,amount:Number(t)}),k=1000000n,Rt=()=>BigInt(Date.now())*k,Ct=e=>BigInt(e.getTime())*k;var Lt=(e,t)=>{let r;return(...n)=>{let i=()=>e(...n);r&&clearTimeout(r),r=setTimeout(i,t!==void 0&&t>0?t:300)}};var Yt=e=>c(e)?[e]:[],O=e=>e?.[0],vt=e=>{let t=O(e);return x(t),t},Ht=e=>O(e??[]);import{Principal as P}from"@dfinity/principal";var g="__bigint__",y="__principal__",A="__uint8array__",Jt=(e,t)=>typeof t=="bigint"?{[g]:`${t}`}:c(t)&&t instanceof P?{[y]:t.toText()}:c(t)&&t instanceof Uint8Array?{[A]:Array.from(t)}:t,zt=(e,t)=>{let r=n=>t[n];return c(t)&&typeof t=="object"&&g in t?BigInt(r(g)):c(t)&&typeof t=="object"&&y in t?P.fromText(r(y)):c(t)&&typeof t=="object"&&A in t?Uint8Array.from(r(A)):t};var Gt=e=>{let t=e.toUint8Array(),r=new Uint8Array(32);return r[0]=t.length,r.set(t,1),r};var D=(e,t)=>t>e.length?[...e,...[...Array(t-e.length).keys()].map(()=>0)]:e,R=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)},Xt=({minVersion:e,currentVersion:t})=>{let r=D(e.split(".").map(R),3).join(".");return D(t.split(".").map(R),3).join(".").localeCompare(r,void 0,{numeric:!0,sensitivity:"base"})<0};export{_ as AgentManager,U as Canister,T as FromStringToTokenError,W as ICPToken,p as InvalidPercentageError,m as NullishError,N as TokenAmount,I as TokenAmountV2,mt as arrayBufferToUint8Array,yt as arrayOfNumberToUint8Array,xt as asNonNullish,At as asciiStringToByteArray,x as assertNonNullish,dt as assertPercentageNumber,Et as base64ToUint8Array,Ot as bigEndianCrc32,lt as bigIntToUint8Array,Nt as candidNumberArrayToBigInt,F as convertStringToE8s,v as createAgent,ct as createServices,Lt as debounce,St as decodeBase32,w as defaultAgent,_t as encodeBase32,vt as fromDefinedNullable,O as fromNullable,Ht as fromNullishNullable,Tt as hexStringToUint8Array,tt as isEmptyString,b as isNullish,Jt as jsonReplacer,zt as jsonReviver,c as nonNullish,K as notEmptyString,Rt as nowInBigIntNanoSeconds,pt as numberToUint8Array,Gt as principalToSubAccount,Dt as secondsToDuration,Xt as smallerVersion,Ct as toBigIntNanoSeconds,Yt as toNullable,gt as uint8ArrayToArrayOfNumber,Bt as uint8ArrayToBase64,ut as uint8ArrayToBigInt,ht as uint8ArrayToHexString};
1
+ 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 F=8,V=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,i]=t.split("."),o=BigInt(0);if(n)try{o+=BigInt(n)*U}catch{return 1}if(i){if(i.length>8)return 0;try{o+=BigInt(i.padEnd(8,"0"))}catch{return 1}}return o},v=({amount:e,decimals:t})=>{e=e.trim().replace(/[,']/g,"");let r=e.match(/\d*(\.\d*)?/);if(!r||r[0]!==e)return 1;let[n,i]=e.split("."),o=0n,s=10n**BigInt(t);if(n)try{o+=BigInt(n)*s}catch{return 1}if(i){if(i.length>t)return 2;try{o+=BigInt(i.padEnd(t,"0"))}catch{return 1}}return o},X={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=V(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=v({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(F,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,c=e=>!b(e),K=e=>c(e)&&e!=="",et=e=>!K(e);var it=async({request:e,onLoad:t,onQueryError:r,onUpdateError:n,strategy:i="query_and_update",identity:o,resolution:s="race"})=>{let a=!1,d=x=>e({certified:x,identity:o}).then(l=>{a||t({certified:x,response:l})}).catch(l=>{x||r?.({error:l,identity:o}),!a&&(b(n)||(console.error(l),x&&n({error:l,identity:o})))}).finally(()=>a=a||x),m=i==="query"?[d(!1)]:i==="update"?[d(!0)]:[d(!1),d(!0)];await(s==="all_settled"?Promise.allSettled(m):Promise.race(m))};import{Actor as O}from"@dfinity/agent";import{AnonymousIdentity as Y,HttpAgent as B}from"@dfinity/agent";var k=()=>B.createSync({host:"https://icp-api.io",identity:new Y}),q=async({identity:e,host:t,fetchRootKey:r=!1,verifyQuerySignatures:n=!1,retryTimes:i})=>await B.create({identity:e,...c(t)&&{host:t},verifyQuerySignatures:n,...c(i)&&{retryTimes:i},shouldFetchRootKey:r}),E=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 ft=({options:{canisterId:e,serviceOverride:t,certifiedServiceOverride:r,agent:n,callTransform:i,queryTransform:o},idlFactory:s,certifiedIdlFactory:a})=>{let d=n??k(),m=t??O.createActor(s,{agent:d,canisterId:e,callTransform:i,queryTransform:o}),x=r??O.createActor(a,{agent:d,canisterId:e,callTransform:i,queryTransform:o});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)},ut=(e,t)=>(f(e,t),e),lt=e=>{if(e<0||e>100)throw new y(`${e} is not a valid percentage number.`)};var gt=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}},yt=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)),i=Number(e&BigInt(4294967295));r.setUint32(0,n),r.setUint32(4,i)}return new Uint8Array(t)},At=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)},ht=e=>new Uint8Array(e),Tt=e=>Array.from(e),Nt=e=>new Uint8Array(e),It=e=>Array.from(e).map(t=>t.charCodeAt(0)),Ut=e=>{let t=e.match(/.{1,2}/g);return f(t,"Invalid hex string."),Uint8Array.from(t.map(r=>parseInt(r,16)))},_t=e=>(e instanceof Uint8Array||(e=Uint8Array.from(e)),e.reduce((t,r)=>t+r.toString(16).padStart(2,"0"),"")),St=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 Bt=e=>{let t=0,r=0,n="";function i(o){return t<0?r|=o>>-t:r=o<<t&248,t>3?(t-=8,1):(t<4&&(n+=g[r>>3],t+=5),0)}for(let o=0;o<e.length;)o+=i(e[o]);return n+(t<0?g[r>>3]:"")};function kt(e){let t=0,r=0,n=new Uint8Array(e.length*4/3|0),i=0;function o(s){let a=u[s.toLowerCase()];f(a,`Invalid character: ${JSON.stringify(s)}`),a<<=3,r|=a>>>t,t+=5,t>=8&&(n[i++]=r,t-=8,t>0?r=a<<5-t&255:r=0)}for(let s of e)o(s);return n.slice(0,i)}var Pt=e=>btoa(String.fromCharCode(...new Uint8Array(e))),Rt=e=>Uint8Array.from(atob(e),t=>t.charCodeAt(0));var H=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]),$=e=>{let t=-1;for(let r=0;r<e.length;r++){let i=(e[r]^t)&255;t=H[i]^t>>>8}return(t^-1)>>>0},Ct=e=>{let t=new ArrayBuffer(4);return new DataView(t).setUint32(0,$(e),!1),new Uint8Array(t)};var j={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"},Lt=({seconds:e,i18n:t=j})=>{let r=e/BigInt(60),n=r/BigInt(60);r-=n*BigInt(60);let i=n/BigInt(24);n-=i*BigInt(24);let o=Q(i);return i-=P(o),[p("year",o),p("day",i),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(", ")},Q=e=>{let t=e/BigInt(365);for(;P(t)>e;)t--;return t},P=e=>{let t=e/BigInt(4);return e*BigInt(365)+t},p=(e,t)=>({labelKey:e,amount:Number(t)}),R=1000000n,Ft=()=>BigInt(Date.now())*R,Vt=e=>BigInt(e.getTime())*R;var Kt=(e,t)=>{let r;return(...n)=>{let i=()=>e(...n);r&&clearTimeout(r),r=setTimeout(i,t!==void 0&&t>0?t:300)}};var $t=e=>c(e)?[e]:[],D=e=>e?.[0],jt=e=>{let t=D(e);return f(t),t},Qt=e=>D(e??[]);import{Principal as C}from"@dfinity/principal";var h="__bigint__",T="__principal__",N="__uint8array__",Wt=(e,t)=>typeof t=="bigint"?{[h]:`${t}`}:c(t)&&t instanceof C?{[T]:t.toText()}:c(t)&&t instanceof Uint8Array?{[N]:Array.from(t)}:t,Xt=(e,t)=>{let r=n=>t[n];return c(t)&&typeof t=="object"&&h in t?BigInt(r(h)):c(t)&&typeof t=="object"&&T in t?C.fromText(r(T)):c(t)&&typeof t=="object"&&N in t?Uint8Array.from(r(N)):t};var te=e=>{let t=e.toUint8Array(),r=new Uint8Array(32);return r[0]=t.length,r.set(t,1),r};var M=(e,t)=>t>e.length?[...e,...[...Array(t-e.length).keys()].map(()=>0)]:e,L=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)},re=({minVersion:e,currentVersion:t})=>{let r=M(e.split(".").map(L),3).join(".");return M(t.split(".").map(L),3).join(".").localeCompare(r,void 0,{numeric:!0,sensitivity:"base"})<0};export{E as AgentManager,w as Canister,I as FromStringToTokenError,X as ICPToken,y as InvalidPercentageError,A as NullishError,_ as TokenAmount,S as TokenAmountV2,ht as arrayBufferToUint8Array,Nt as arrayOfNumberToUint8Array,ut as asNonNullish,It as asciiStringToByteArray,f as assertNonNullish,lt as assertPercentageNumber,Rt as base64ToUint8Array,Ct as bigEndianCrc32,yt as bigIntToUint8Array,St as candidNumberArrayToBigInt,V as convertStringToE8s,q as createAgent,ft as createServices,Kt as debounce,kt as decodeBase32,k as defaultAgent,Bt as encodeBase32,jt as fromDefinedNullable,D as fromNullable,Qt as fromNullishNullable,Ut as hexStringToUint8Array,et as isEmptyString,b as isNullish,Wt as jsonReplacer,Xt as jsonReviver,c as nonNullish,K as notEmptyString,Ft as nowInBigIntNanoSeconds,At as numberToUint8Array,te as principalToSubAccount,it as queryAndUpdate,Lt as secondsToDuration,re as smallerVersion,Vt as toBigIntNanoSeconds,$t as toNullable,Tt as uint8ArrayToArrayOfNumber,Pt as uint8ArrayToBase64,gt as uint8ArrayToBigInt,_t as uint8ArrayToHexString};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/enums/token.enums.ts", "../../src/constants/constants.ts", "../../src/parser/token.ts", "../../src/services/canister.ts", "../../src/utils/actor.utils.ts", "../../src/utils/agent.utils.ts", "../../src/utils/nullish.utils.ts", "../../src/utils/asserts.utils.ts", "../../src/utils/arrays.utils.ts", "../../src/utils/base32.utils.ts", "../../src/utils/base64.utils.ts", "../../src/utils/crc.utils.ts", "../../src/utils/date.utils.ts", "../../src/utils/debounce.utils.ts", "../../src/utils/did.utils.ts", "../../src/utils/json.utils.ts", "../../src/utils/principal.utils.ts", "../../src/utils/version.utils.ts"],
4
- "sourcesContent": ["export enum FromStringToTokenError {\n FractionalMoreThan8Decimals,\n InvalidFormat,\n FractionalTooManyDecimals,\n}\n", "export const E8S_PER_TOKEN = BigInt(100000000);\n", "import { E8S_PER_TOKEN } from \"../constants/constants\";\nimport { FromStringToTokenError } from \"../enums/token.enums\";\n\nconst DECIMALS_CONVERSION_SUPPORTED = 8;\n\n/**\n * Receives a string representing a number and returns the big int or error.\n *\n * @param amount - in string format\n * @returns bigint | FromStringToTokenError\n */\nexport const convertStringToE8s = (\n value: string,\n): bigint | FromStringToTokenError => {\n // replace exponential format (1e-4) with plain (0.0001)\n // doesn't support decimals for values >= ~1e16\n let amount = value.includes(\"e\")\n ? Number(value).toLocaleString(\"en\", {\n useGrouping: false,\n maximumFractionDigits: 20,\n })\n : value;\n\n // Remove all instances of \",\" and \"'\".\n amount = amount.trim().replace(/[,']/g, \"\");\n\n // Verify that the string is of the format 1234.5678\n const regexMatch = amount.match(/\\d*(\\.\\d*)?/);\n if (!regexMatch || regexMatch[0] !== amount) {\n return FromStringToTokenError.InvalidFormat;\n }\n\n const [integral, fractional] = amount.split(\".\");\n\n let e8s = BigInt(0);\n\n if (integral) {\n try {\n e8s += BigInt(integral) * E8S_PER_TOKEN;\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n if (fractional) {\n if (fractional.length > 8) {\n return FromStringToTokenError.FractionalMoreThan8Decimals;\n }\n try {\n e8s += BigInt(fractional.padEnd(8, \"0\"));\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n return e8s;\n};\n\n/**\n * Receives a string representing a number and returns the big int or error.\n *\n * @param amount - in string format\n * @returns bigint | FromStringToTokenError\n */\nconst convertStringToUlps = ({\n amount,\n decimals,\n}: {\n amount: string;\n decimals: number;\n}): bigint | FromStringToTokenError => {\n // Remove all instances of \",\" and \"'\".\n amount = amount.trim().replace(/[,']/g, \"\");\n\n // Verify that the string is of the format 1234.5678\n const regexMatch = amount.match(/\\d*(\\.\\d*)?/);\n if (!regexMatch || regexMatch[0] !== amount) {\n return FromStringToTokenError.InvalidFormat;\n }\n\n const [integral, fractional] = amount.split(\".\");\n\n let ulps = 0n;\n const ulpsPerToken = 10n ** BigInt(decimals);\n\n if (integral) {\n try {\n ulps += BigInt(integral) * ulpsPerToken;\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n if (fractional) {\n if (fractional.length > decimals) {\n return FromStringToTokenError.FractionalTooManyDecimals;\n }\n try {\n ulps += BigInt(fractional.padEnd(decimals, \"0\"));\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n return ulps;\n};\n\nexport interface Token {\n symbol: string;\n name: string;\n decimals: number;\n logo?: string;\n}\n\n// TODO: Remove this token and use the value from ICP ledger\nexport const ICPToken: Token = {\n symbol: \"ICP\",\n name: \"Internet Computer\",\n decimals: 8,\n};\n\n/**\n * Deprecated. Use TokenAmountV2 instead which supports decimals !== 8.\n *\n * Represents an amount of tokens.\n *\n * @param e8s - The amount of tokens in bigint.\n * @param token - The token type.\n */\nexport class TokenAmount {\n private constructor(\n protected e8s: bigint,\n public token: Token,\n ) {\n if (token.decimals !== 8) {\n throw new Error(\"Use TokenAmountV2 for number of decimals other than 8\");\n }\n }\n\n /**\n * Initialize from a bigint. Bigint are considered e8s.\n *\n * @param {amount: bigint; token?: Token;} params\n * @param {bigint} params.amount The amount in bigint format.\n * @param {Token} params.token The token type.\n */\n public static fromE8s({\n amount,\n token,\n }: {\n amount: bigint;\n token: Token;\n }): TokenAmount {\n return new TokenAmount(amount, token);\n }\n\n /**\n * Initialize from a string. Accepted formats:\n *\n * 1234567.8901\n * 1'234'567.8901\n * 1,234,567.8901\n *\n * @param {amount: string; token?: Token;} params\n * @param {string} params.amount The amount in string format.\n * @param {Token} params.token The token type.\n */\n public static fromString({\n amount,\n token,\n }: {\n amount: string;\n token: Token;\n }): TokenAmount | FromStringToTokenError {\n // If parsing the number fails because of the number of decimals, we still\n // want the error to be about the number of decimals and not about the\n // parsing.\n if (token.decimals !== 8) {\n throw new Error(\"Use TokenAmountV2 for number of decimals other than 8\");\n }\n const e8s = convertStringToE8s(amount);\n\n if (typeof e8s === \"bigint\") {\n return new TokenAmount(e8s, token);\n }\n return e8s;\n }\n\n /**\n * Initialize from a number.\n *\n * 1 integer is considered E8S_PER_TOKEN\n *\n * @param {amount: number; token?: Token;} params\n * @param {string} params.amount The amount in number format.\n * @param {Token} params.token The token type.\n */\n public static fromNumber({\n amount,\n token,\n }: {\n amount: number;\n token: Token;\n }): TokenAmount {\n const tokenAmount = TokenAmount.fromString({\n amount: amount.toString(),\n token,\n });\n if (tokenAmount instanceof TokenAmount) {\n return tokenAmount;\n }\n if (tokenAmount === FromStringToTokenError.FractionalMoreThan8Decimals) {\n throw new Error(`Number ${amount} has more than 8 decimals`);\n }\n\n // This should never happen\n throw new Error(`Invalid number ${amount}`);\n }\n\n /**\n *\n * @returns The amount of e8s.\n */\n public toE8s(): bigint {\n return this.e8s;\n }\n}\n\n/**\n * Represents an amount of tokens.\n *\n * @param upls - The amount of tokens in units in the last place. If the token\n * supports N decimals, 10^N ulp = 1 token.\n * @param token - The token type.\n */\nexport class TokenAmountV2 {\n private constructor(\n protected ulps: bigint,\n public token: Token,\n ) {}\n\n /**\n * Initialize from a bigint. Bigint are considered ulps.\n *\n * @param {amount: bigint; token?: Token;} params\n * @param {bigint} params.amount The amount in bigint format.\n * @param {Token} params.token The token type.\n */\n public static fromUlps({\n amount,\n token,\n }: {\n amount: bigint;\n token: Token;\n }): TokenAmountV2 {\n return new TokenAmountV2(amount, token);\n }\n\n /**\n * Initialize from a string. Accepted formats:\n *\n * 1234567.8901\n * 1'234'567.8901\n * 1,234,567.8901\n *\n * @param {amount: string; token?: Token;} params\n * @param {string} params.amount The amount in string format.\n * @param {Token} params.token The token type.\n */\n public static fromString({\n amount,\n token,\n }: {\n amount: string;\n token: Token;\n }): TokenAmountV2 | FromStringToTokenError {\n const ulps = convertStringToUlps({ amount, decimals: token.decimals });\n\n if (typeof ulps === \"bigint\") {\n return new TokenAmountV2(ulps, token);\n }\n return ulps;\n }\n\n /**\n * Initialize from a number.\n *\n * 1 integer is considered 10^{token.decimals} ulps\n *\n * @param {amount: number; token?: Token;} params\n * @param {string} params.amount The amount in number format.\n * @param {Token} params.token The token type.\n */\n public static fromNumber({\n amount,\n token,\n }: {\n amount: number;\n token: Token;\n }): TokenAmountV2 {\n const tokenAmount = TokenAmountV2.fromString({\n amount: amount.toFixed(\n Math.min(DECIMALS_CONVERSION_SUPPORTED, token.decimals),\n ),\n token,\n });\n if (tokenAmount instanceof TokenAmountV2) {\n return tokenAmount;\n }\n if (tokenAmount === FromStringToTokenError.FractionalTooManyDecimals) {\n throw new Error(\n `Number ${amount} has more than ${token.decimals} decimals`,\n );\n }\n\n // This should never happen\n throw new Error(`Invalid number ${amount}`);\n }\n\n /**\n *\n * @returns The amount of ulps.\n */\n public toUlps(): bigint {\n return this.ulps;\n }\n\n /**\n *\n * @returns The amount of ulps in e8s precision\n */\n public toE8s(): bigint {\n if (this.token.decimals < 8) {\n return this.ulps * 10n ** BigInt(8 - this.token.decimals);\n } else if (this.token.decimals === 8) {\n return this.ulps;\n } else {\n return this.ulps / 10n ** BigInt(this.token.decimals - 8);\n }\n }\n}\n", "import type { Principal } from \"@dfinity/principal\";\nimport type { QueryParams } from \"../types/query.params\";\n\nexport abstract class Canister<T> {\n protected constructor(\n private readonly id: Principal,\n protected readonly service: T,\n protected readonly certifiedService: T,\n ) {}\n\n get canisterId(): Principal {\n return this.id;\n }\n\n protected caller = ({ certified = true }: QueryParams): T =>\n certified ? this.certifiedService : this.service;\n}\n", "import type { ActorConfig, ActorSubclass, Agent } from \"@dfinity/agent\";\nimport { Actor } from \"@dfinity/agent\";\nimport type { IDL } from \"@dfinity/candid\";\nimport type { Principal } from \"@dfinity/principal\";\nimport type { CanisterOptions } from \"../types/canister.options\";\nimport { defaultAgent } from \"./agent.utils\";\n\ntype RequiredCanisterOptions<T> = Required<\n Pick<CanisterOptions<T>, \"canisterId\">\n> &\n Omit<CanisterOptions<T>, \"canisterId\">;\n\nexport const createServices = <T>({\n options: {\n canisterId,\n serviceOverride,\n certifiedServiceOverride,\n agent: agentOption,\n callTransform,\n queryTransform,\n },\n idlFactory,\n certifiedIdlFactory,\n}: {\n options: RequiredCanisterOptions<T> &\n Pick<ActorConfig, \"queryTransform\" | \"callTransform\">;\n idlFactory: IDL.InterfaceFactory;\n certifiedIdlFactory: IDL.InterfaceFactory;\n}): {\n service: ActorSubclass<T>;\n certifiedService: ActorSubclass<T>;\n agent: Agent;\n canisterId: Principal;\n} => {\n const agent: Agent = agentOption ?? defaultAgent();\n\n const service: ActorSubclass<T> =\n serviceOverride ??\n Actor.createActor<T>(idlFactory, {\n agent,\n canisterId,\n callTransform,\n queryTransform,\n });\n\n const certifiedService: ActorSubclass<T> =\n certifiedServiceOverride ??\n Actor.createActor<T>(certifiedIdlFactory, {\n agent,\n canisterId,\n callTransform,\n queryTransform,\n });\n\n return { service, certifiedService, agent, canisterId };\n};\n", "import type { Agent, Identity } from \"@dfinity/agent\";\nimport { AnonymousIdentity, HttpAgent } from \"@dfinity/agent\";\nimport type { CreateAgentParams } from \"../types/agent.utils\";\nimport { isNullish, nonNullish } from \"./nullish.utils\";\n\n/**\n * Get a default agent that connects to mainnet with the anonymous identity.\n * @returns The default agent to use\n */\nexport const defaultAgent = (): Agent =>\n HttpAgent.createSync({\n host: \"https://icp-api.io\",\n identity: new AnonymousIdentity(),\n });\n\n/**\n * Create an agent for a given identity\n *\n * @param {CreateAgentParams} params The parameters to create a new HTTP agent\n * @param {Identity} params.identity A mandatory identity to use for the agent\n * @param {string} params.host An optional host to connect to, particularly useful for local development\n * @param {boolean} params.fetchRootKey Fetch root key for certificate validation during local development or on testnet\n * @param {boolean} params.verifyQuerySignatures Check for signatures in the state tree signed by the node that replies to queries - i.e. certify responses.\n * @param {number} params.retryTimes Set the number of retries the agent should perform before error.\n */\nexport const createAgent = async ({\n identity,\n host,\n fetchRootKey = false,\n verifyQuerySignatures = false,\n retryTimes,\n}: CreateAgentParams): Promise<HttpAgent> => {\n return await HttpAgent.create({\n identity,\n ...(nonNullish(host) && { host }),\n verifyQuerySignatures,\n ...(nonNullish(retryTimes) && { retryTimes }),\n shouldFetchRootKey: fetchRootKey,\n });\n};\n\nexport type AgentManagerConfig = Pick<\n CreateAgentParams,\n \"fetchRootKey\" | \"host\"\n>;\n\n/**\n * AgentManager class manages HttpAgent instances for different identities.\n *\n * It caches agents by identity to optimise resource usage and avoid unnecessary agent creation.\n * Provides functionality to create new agents, retrieve cached agents, and clear the cache when needed.\n */\nexport class AgentManager {\n private agents: Record<string, HttpAgent> | undefined | null = undefined;\n\n private constructor(private readonly config: AgentManagerConfig) {}\n\n /**\n * Static factory method to create a new AgentManager instance.\n *\n * This method serves as an alternative to directly using the private constructor,\n * making it more convenient to create instances of `AgentManager` using a simple and clear method.\n *\n * @param {AgentManagerConfig} config - Configuration options for the AgentManager instance.\n * @param {boolean} config.fetchRootKey - Whether to fetch the root key for certificate validation.\n * @param {string} config.host - The host to connect to.\n * @returns {AgentManager} A new instance of `AgentManager`.\n */\n public static create(config: AgentManagerConfig): AgentManager {\n return new AgentManager(config);\n }\n\n /**\n * Get or create an HTTP agent for a given identity.\n *\n * If the agent for the specified identity has been created and cached, it is retrieved from the cache.\n * If no agent exists for the identity, a new one is created, cached, and then returned.\n *\n * @param {Identity} identity - The identity to be used to create the agent.\n * @returns {Promise<HttpAgent>} The HttpAgent associated with the given identity.\n */\n public getAgent = async ({\n identity,\n }: {\n identity: Identity;\n }): Promise<HttpAgent> => {\n const key = identity.getPrincipal().toText();\n\n if (isNullish(this.agents) || isNullish(this.agents[key])) {\n const agent = await createAgent({\n identity,\n fetchRootKey: this.config.fetchRootKey,\n host: this.config.host,\n verifyQuerySignatures: true,\n });\n\n this.agents = {\n ...(this.agents ?? {}),\n [key]: agent,\n };\n\n return agent;\n }\n\n return this.agents[key];\n };\n\n /**\n * Clear the cache of HTTP agents.\n *\n * This method removes all cached agents, forcing new agent creation on the next request for any identity.\n * Useful when identities have changed or if you want to reset all active connections.\n */\n public clearAgents = (): void => {\n this.agents = null;\n };\n}\n", "/**\n * Checks if a given argument is null or undefined.\n *\n * @template T - The type of the argument.\n * @param {T | undefined | null} argument - The argument to check.\n * @returns {argument is undefined | null} `true` if the argument is null or undefined; otherwise, `false`.\n */\nexport const isNullish = <T>(\n argument: T | undefined | null,\n): argument is undefined | null => argument === null || argument === undefined;\n\n/**\n * Checks if a given argument is neither null nor undefined.\n *\n * @template T - The type of the argument.\n * @param {T | undefined | null} argument - The argument to check.\n * @returns {argument is NonNullable<T>} `true` if the argument is not null or undefined; otherwise, `false`.\n */\nexport const nonNullish = <T>(\n argument: T | undefined | null,\n): argument is NonNullable<T> => !isNullish(argument);\n\n/**\n * Checks if a given value is not null, not undefined, and not an empty string.\n *\n * @param {string | undefined | null} value - The value to check.\n * @returns {boolean} `true` if the value is not null, not undefined, and not an empty string; otherwise, `false`.\n */\nexport const notEmptyString = (value: string | undefined | null): boolean =>\n nonNullish(value) && value !== \"\";\n\n/**\n * Checks if a given value is null, undefined, or an empty string.\n *\n * @param {string | undefined | null} value - The value to check.\n * @returns {boolean} `true` if the value is null, undefined, or an empty string; otherwise, `false`.\n */\nexport const isEmptyString = (value: string | undefined | null): boolean =>\n !notEmptyString(value);\n", "export class InvalidPercentageError extends Error {}\nexport class NullishError extends Error {}\n\nexport const assertNonNullish: <T>(\n value: T,\n message?: string,\n) => asserts value is NonNullable<T> = <T>(\n value: T,\n message?: string,\n): void => {\n if (value === null || value === undefined) {\n throw new NullishError(message);\n }\n};\n\nexport const asNonNullish = <T>(value: T, message?: string): NonNullable<T> => {\n assertNonNullish(value, message);\n return value;\n};\n\nexport const assertPercentageNumber = (percentage: number) => {\n if (percentage < 0 || percentage > 100) {\n throw new InvalidPercentageError(\n `${percentage} is not a valid percentage number.`,\n );\n }\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\n\nexport const uint8ArrayToBigInt = (array: Uint8Array): bigint => {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n if (typeof view.getBigUint64 === \"function\") {\n return view.getBigUint64(0);\n } else {\n const high = BigInt(view.getUint32(0));\n const low = BigInt(view.getUint32(4));\n\n return (high << BigInt(32)) + low;\n }\n};\n\nexport const bigIntToUint8Array = (value: bigint): Uint8Array => {\n const buffer = new ArrayBuffer(8);\n const view = new DataView(buffer);\n if (typeof view.setBigUint64 === \"function\") {\n view.setBigUint64(0, value);\n } else {\n const high = Number(value >> BigInt(32));\n const low = Number(value & BigInt(0xffffffff));\n\n view.setUint32(0, high);\n view.setUint32(4, low);\n }\n\n return new Uint8Array(buffer);\n};\n\nexport const numberToUint8Array = (value: number): Uint8Array => {\n const view = new DataView(new ArrayBuffer(8));\n for (let index = 7; index >= 0; --index) {\n view.setUint8(index, value % 256);\n value = value >> 8;\n }\n return new Uint8Array(view.buffer);\n};\n\nexport const arrayBufferToUint8Array = (buffer: ArrayBuffer): Uint8Array =>\n new Uint8Array(buffer);\n\nexport const uint8ArrayToArrayOfNumber = (array: Uint8Array): Array<number> =>\n Array.from(array);\n\nexport const arrayOfNumberToUint8Array = (numbers: Array<number>): Uint8Array =>\n new Uint8Array(numbers);\n\nexport const asciiStringToByteArray = (text: string): Array<number> =>\n Array.from(text).map((c) => c.charCodeAt(0));\n\nexport const hexStringToUint8Array = (hexString: string): Uint8Array => {\n const matches = hexString.match(/.{1,2}/g);\n\n assertNonNullish(matches, \"Invalid hex string.\");\n\n return Uint8Array.from(matches.map((byte) => parseInt(byte, 16)));\n};\n\nexport const uint8ArrayToHexString = (bytes: Uint8Array | number[]) => {\n if (!(bytes instanceof Uint8Array)) {\n bytes = Uint8Array.from(bytes);\n }\n return bytes.reduce(\n (str, byte) => str + byte.toString(16).padStart(2, \"0\"),\n \"\",\n );\n};\n\nexport const candidNumberArrayToBigInt = (array: number[]): bigint => {\n let result = 0n;\n for (let i = array.length - 1; i >= 0; i--) {\n result = (result << 32n) + BigInt(array[i]);\n }\n return result;\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\n\nconst ALPHABET = \"abcdefghijklmnopqrstuvwxyz234567\";\n\n// Build a lookup table for decoding.\nconst LOOKUP_TABLE: Record<string, number> = Object.create(null);\nfor (let i = 0; i < ALPHABET.length; i++) {\n LOOKUP_TABLE[ALPHABET[i]] = i;\n}\n\n// Add aliases for rfc4648.\nLOOKUP_TABLE[\"0\"] = LOOKUP_TABLE.o;\nLOOKUP_TABLE[\"1\"] = LOOKUP_TABLE.i;\n\n/**\n * Encode an Uint8Array to a base32 string.\n *\n * @param input The input array to encode.\n * @returns A Base32 string encoding the input.\n */\nexport const encodeBase32 = (input: Uint8Array): string => {\n // How many bits will we skip from the first byte.\n let skip = 0;\n // 5 high bits, carry from one byte to the next.\n let bits = 0;\n\n // The output string in base32.\n let output = \"\";\n\n function encodeByte(byte: number): number {\n if (skip < 0) {\n // we have a carry from the previous byte\n bits |= byte >> -skip;\n } else {\n // no carry\n bits = (byte << skip) & 248;\n }\n\n if (skip > 3) {\n // Not enough data to produce a character, get us another one\n skip -= 8;\n return 1;\n }\n\n if (skip < 4) {\n // produce a character\n output += ALPHABET[bits >> 3];\n skip += 5;\n }\n\n return 0;\n }\n\n for (let i = 0; i < input.length; ) {\n i += encodeByte(input[i]);\n }\n\n return output + (skip < 0 ? ALPHABET[bits >> 3] : \"\");\n};\n\n/**\n * Decode a base32 string to Uint8Array.\n *\n * @param input The input string to decode.\n * @param input The base32 encoded string to decode.\n */\nexport function decodeBase32(input: string): Uint8Array {\n // how many bits we have from the previous character.\n let skip = 0;\n // current byte we're producing.\n let byte = 0;\n\n const output = new Uint8Array(((input.length * 4) / 3) | 0);\n let o = 0;\n\n function decodeChar(char: string) {\n // Consume a character from the stream, store\n // the output in this.output. As before, better\n // to use update().\n let val = LOOKUP_TABLE[char.toLowerCase()];\n assertNonNullish(val, `Invalid character: ${JSON.stringify(char)}`);\n\n // move to the high bits\n val <<= 3;\n byte |= val >>> skip;\n skip += 5;\n\n if (skip >= 8) {\n // We have enough bytes to produce an output\n output[o++] = byte;\n skip -= 8;\n\n if (skip > 0) {\n byte = (val << (5 - skip)) & 255;\n } else {\n byte = 0;\n }\n }\n }\n\n for (const c of input) {\n decodeChar(c);\n }\n\n return output.slice(0, o);\n}\n", "/**\n * Converts a Uint8Array (binary data) to a base64 encoded string.\n *\n * @param {Uint8Array} uint8Array - The Uint8Array containing binary data to be encoded.\n * @returns {string} - The base64 encoded string representation of the binary data.\n */\nexport const uint8ArrayToBase64 = (uint8Array: Uint8Array): string =>\n btoa(String.fromCharCode(...new Uint8Array(uint8Array)));\n\n/**\n * Converts a base64 encoded string to a Uint8Array (binary data).\n *\n * @param {string} base64String - The base64 encoded string to be decoded.\n * @returns {Uint8Array} - The Uint8Array representation of the decoded binary data.\n */\nexport const base64ToUint8Array = (base64String: string): Uint8Array =>\n Uint8Array.from(atob(base64String), (c) => c.charCodeAt(0));\n", "// This file is translated to JavaScript from\n// https://lxp32.github.io/docs/a-simple-example-crc32-calculation/\nconst lookUpTable: Uint32Array = new Uint32Array([\n 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,\n 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,\n 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,\n 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,\n 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,\n 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\n 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,\n 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\n 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,\n 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\n 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,\n 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\n 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,\n 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,\n 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,\n 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\n 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,\n 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\n 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,\n 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\n 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,\n 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,\n 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,\n 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,\n 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,\n 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,\n 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,\n 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,\n 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,\n 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\n 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,\n 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,\n 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,\n 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\n 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,\n 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,\n 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,\n 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\n 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,\n 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\n 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,\n]);\n\nconst crc32 = (bytes: Uint8Array): number => {\n let crc = -1;\n\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i];\n const t = (byte ^ crc) & 0xff;\n crc = lookUpTable[t] ^ (crc >>> 8);\n }\n\n return (crc ^ -1) >>> 0;\n};\n\nexport const bigEndianCrc32 = (bytes: Uint8Array): Uint8Array => {\n const checksumArrayBuf = new ArrayBuffer(4);\n const view = new DataView(checksumArrayBuf);\n view.setUint32(0, crc32(bytes), false);\n return new Uint8Array(checksumArrayBuf);\n};\n", "const SECONDS_IN_MINUTE = 60;\nconst MINUTES_IN_HOUR = 60;\nconst HOURS_IN_DAY = 24;\nconst DAYS_IN_NON_LEAP_YEAR = 365;\n\nexport interface I18nSecondsToDuration {\n year: string;\n year_plural: string;\n month: string;\n month_plural: string;\n day: string;\n day_plural: string;\n hour: string;\n hour_plural: string;\n minute: string;\n minute_plural: string;\n second: string;\n second_plural: string;\n}\n\nconst EN_TIME: I18nSecondsToDuration = {\n year: \"year\",\n year_plural: \"years\",\n month: \"month\",\n month_plural: \"months\",\n day: \"day\",\n day_plural: \"days\",\n hour: \"hour\",\n hour_plural: \"hours\",\n minute: \"minute\",\n minute_plural: \"minutes\",\n second: \"second\",\n second_plural: \"seconds\",\n};\n\n/**\n * Convert seconds to a human-readable duration, such as \"6 days, 10 hours.\"\n * @param {Object} options - The options object.\n * @param {bigint} options.seconds - The number of seconds to convert.\n * @param {I18nSecondsToDuration} [options.i18n] - The i18n object for customizing language and units. Defaults to English.\n * @returns {string} The human-readable duration string.\n */\nexport const secondsToDuration = ({\n seconds,\n i18n = EN_TIME,\n}: {\n seconds: bigint;\n i18n?: I18nSecondsToDuration;\n}): string => {\n let minutes = seconds / BigInt(SECONDS_IN_MINUTE);\n\n let hours = minutes / BigInt(MINUTES_IN_HOUR);\n minutes -= hours * BigInt(MINUTES_IN_HOUR);\n\n let days = hours / BigInt(HOURS_IN_DAY);\n hours -= days * BigInt(HOURS_IN_DAY);\n\n const years = fullYearsInDays(days);\n days -= daysInYears(years);\n\n const periods = [\n createLabel(\"year\", years),\n createLabel(\"day\", days),\n createLabel(\"hour\", hours),\n createLabel(\"minute\", minutes),\n ...(seconds > BigInt(0) && seconds < BigInt(60)\n ? [createLabel(\"second\", seconds)]\n : []),\n ];\n\n return periods\n .filter(({ amount }) => amount > 0)\n .slice(0, 2)\n .map(\n (labelInfo) =>\n `${labelInfo.amount} ${\n labelInfo.amount === 1\n ? i18n[labelInfo.labelKey]\n : i18n[`${labelInfo.labelKey}_plural`]\n }`,\n )\n .join(\", \");\n};\n\nconst fullYearsInDays = (days: bigint): bigint => {\n // Use integer division.\n let years = days / BigInt(DAYS_IN_NON_LEAP_YEAR);\n while (daysInYears(years) > days) {\n years--;\n }\n return years;\n};\n\nconst daysInYears = (years: bigint): bigint => {\n // Use integer division.\n const leapDays = years / BigInt(4);\n return years * BigInt(DAYS_IN_NON_LEAP_YEAR) + leapDays;\n};\n\ntype LabelKey = \"year\" | \"month\" | \"day\" | \"hour\" | \"minute\" | \"second\";\ntype LabelInfo = {\n labelKey: LabelKey;\n amount: number;\n};\nconst createLabel = (labelKey: LabelKey, amount: bigint): LabelInfo => ({\n labelKey,\n amount: Number(amount),\n});\n\nconst NANOSECONDS_PER_MILLISECOND = 1_000_000n;\n\n/**\n * Returns the current timestamp in nanoseconds as a `bigint`.\n *\n * @returns {bigint} The current timestamp in nanoseconds.\n */\nexport const nowInBigIntNanoSeconds = (): bigint =>\n BigInt(Date.now()) * NANOSECONDS_PER_MILLISECOND;\n\n/**\n * Converts a given `Date` object to a timestamp in nanoseconds as a `bigint`.\n *\n * @param {Date} date - The `Date` object to convert.\n * @returns {bigint} The timestamp in nanoseconds.\n */\nexport const toBigIntNanoSeconds = (date: Date): bigint =>\n BigInt(date.getTime()) * NANOSECONDS_PER_MILLISECOND;\n", "/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport const debounce = (func: Function, timeout?: number) => {\n let timer: NodeJS.Timer | undefined;\n\n return (...args: unknown[]) => {\n const next = () => func(...args);\n\n if (timer) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore TypeScript global and window confusion even if we are using @types/node\n clearTimeout(timer);\n }\n\n timer = setTimeout(\n next,\n timeout !== undefined && timeout > 0 ? timeout : 300,\n );\n };\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\nimport { nonNullish } from \"./nullish.utils\";\n\n/**\n * Converts a value into a Candid-style variant representation of an optional value.\n *\n * @template T The type of the value.\n * @param {T | null | undefined} value - The value to convert into a Candid-style variant.\n * @returns {[] | [T]} A Candid-style variant representation: an empty array for `null` and `undefined` or an array with the value.\n */\nexport const toNullable = <T>(value?: T | null): [] | [T] => {\n return nonNullish(value) ? [value] : [];\n};\n\n/**\n * Extracts the value from a Candid-style variant representation of an optional value.\n *\n * @template T The type of the value.\n * @param {[] | [T]} value - A Candid-style variant representing an optional value.\n * @returns {T | undefined} The extracted value, or `undefined` if the array is empty.\n */\nexport const fromNullable = <T>(value: [] | [T]): T | undefined => {\n return value?.[0];\n};\n\n/**\n * Extracts the value from a Candid-style variant representation of an optional value,\n * ensuring the value is defined. Throws an error if the array is empty or the value is nullish.\n *\n * @template T The type of the value.\n * @param {[] | [T]} value - A Candid-style variant representing an optional value.\n * @returns {T} The extracted value.\n * @throws {Error} If the array is empty or the value is nullish.\n */\nexport const fromDefinedNullable = <T>(value: [] | [T]): T => {\n const result = fromNullable(value);\n\n assertNonNullish(result);\n\n return result;\n};\n\n/**\n * Extracts the value from a nullish Candid-style variant representation.\n *\n * @template T The type of the value.\n * @param {([] | [T]) | undefined} value - A Candid-style variant or `undefined`.\n * @returns {T | undefined} The extracted value, or `undefined` if the input is nullish or the array is empty.\n */\nexport const fromNullishNullable = <T>(\n value: ([] | [T]) | undefined,\n): T | undefined => fromNullable(value ?? []);\n", "import { Principal } from \"@dfinity/principal\";\nimport { nonNullish } from \"./nullish.utils\";\n\nconst JSON_KEY_BIGINT = \"__bigint__\";\nconst JSON_KEY_PRINCIPAL = \"__principal__\";\nconst JSON_KEY_UINT8ARRAY = \"__uint8array__\";\n\n/**\n * A custom replacer for `JSON.stringify` that converts specific types not natively supported\n * by the API into JSON-compatible formats.\n *\n * Supported conversions:\n * - `BigInt` \u2192 `{ \"__bigint__\": string }`\n * - `Principal` \u2192 `{ \"__principal__\": string }`\n * - `Uint8Array` \u2192 `{ \"__uint8array__\": number[] }`\n *\n * @param {string} _key - Ignored. Only provided for API compatibility.\n * @param {unknown} value - The value to transform before stringification.\n * @returns {unknown} The transformed value if it matches a known type, otherwise the original value.\n */\nexport const jsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === \"bigint\") {\n return { [JSON_KEY_BIGINT]: `${value}` };\n }\n\n if (nonNullish(value) && value instanceof Principal) {\n return { [JSON_KEY_PRINCIPAL]: value.toText() };\n }\n\n if (nonNullish(value) && value instanceof Uint8Array) {\n return { [JSON_KEY_UINT8ARRAY]: Array.from(value) };\n }\n\n return value;\n};\n\n/**\n * A custom reviver for `JSON.parse` that reconstructs specific types from their JSON-encoded representations.\n *\n * This reverses the transformations applied by `jsonReplacer`, restoring the original types.\n *\n * Supported conversions:\n * - `{ \"__bigint__\": string }` \u2192 `BigInt`\n * - `{ \"__principal__\": string }` \u2192 `Principal`\n * - `{ \"__uint8array__\": number[] }` \u2192 `Uint8Array`\n *\n * @param {string} _key - Ignored but provided for API compatibility.\n * @param {unknown} value - The parsed value to transform.\n * @returns {unknown} The reconstructed value if it matches a known type, otherwise the original value.\n */\nexport const jsonReviver = (_key: string, value: unknown): unknown => {\n const mapValue = <T>(key: string): T => (value as Record<string, T>)[key];\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_BIGINT in value\n ) {\n return BigInt(mapValue(JSON_KEY_BIGINT));\n }\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_PRINCIPAL in value\n ) {\n return Principal.fromText(mapValue(JSON_KEY_PRINCIPAL));\n }\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_UINT8ARRAY in value\n ) {\n return Uint8Array.from(mapValue(JSON_KEY_UINT8ARRAY));\n }\n\n return value;\n};\n", "import type { Principal } from \"@dfinity/principal\";\n\n/**\n * Convert a principal to a Uint8Array 32 length.\n * e.g. Useful to convert a canister ID when topping up cycles with the Cmc canister\n * @param principal The principal that needs to be converted to Subaccount\n */\nexport const principalToSubAccount = (principal: Principal): Uint8Array => {\n const bytes: Uint8Array = principal.toUint8Array();\n const subAccount: Uint8Array = new Uint8Array(32);\n subAccount[0] = bytes.length;\n subAccount.set(bytes, 1);\n return subAccount;\n};\n", "const AMOUNT_VERSION_PARTS = 3;\nconst addZeros = (nums: number[], amountZeros: number): number[] =>\n amountZeros > nums.length\n ? [...nums, ...[...Array(amountZeros - nums.length).keys()].map(() => 0)]\n : nums;\n\nconst convertToNumber = (versionStringPart: string): number => {\n if (!Number.isNaN(Number(versionStringPart))) {\n return Number(versionStringPart);\n }\n const strippedVersion = versionStringPart.split(\"\").reduce((acc, char) => {\n if (Number.isNaN(Number(char))) {\n return acc;\n }\n return acc + char;\n }, \"\");\n return Number(strippedVersion);\n};\n/**\n * Returns true if the current version is smaller than the minVersion, false if equal or bigger.\n * Tags after patch version are ignored, e.g. 1.0.0-beta.1 is considered equal to 1.0.0.\n *\n * @param {Object} params\n * @param {string} params.minVersion Ex: \"1.0.0\"\n * @param {string} params.currentVersion Ex: \"2.0.0\"\n * @returns boolean\n */\nexport const smallerVersion = ({\n minVersion,\n currentVersion,\n}: {\n minVersion: string;\n currentVersion: string;\n}): boolean => {\n const minVersionStandarized = addZeros(\n minVersion.split(\".\").map(convertToNumber),\n AMOUNT_VERSION_PARTS,\n ).join(\".\");\n const currentVersionStandarized = addZeros(\n currentVersion.split(\".\").map(convertToNumber),\n AMOUNT_VERSION_PARTS,\n ).join(\".\");\n // Versions need to have the same number of parts to be comparable\n // Source: https://stackoverflow.com/a/65687141\n return (\n currentVersionStandarized.localeCompare(minVersionStandarized, undefined, {\n numeric: true,\n sensitivity: \"base\",\n }) < 0\n );\n};\n"],
5
- "mappings": "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,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,SAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,SAAY,WAC5D,WAAY,WAAY,SAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,SAAY,WAAY,WAC5D,WAAY,SAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,SAAY,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",
6
- "names": ["FromStringToTokenError", "E8S_PER_TOKEN", "DECIMALS_CONVERSION_SUPPORTED", "convertStringToE8s", "value", "amount", "regexMatch", "integral", "fractional", "e8s", "E8S_PER_TOKEN", "convertStringToUlps", "decimals", "ulps", "ulpsPerToken", "ICPToken", "TokenAmount", "_TokenAmount", "token", "tokenAmount", "TokenAmountV2", "_TokenAmountV2", "Canister", "id", "service", "certifiedService", "certified", "Actor", "AnonymousIdentity", "HttpAgent", "isNullish", "argument", "nonNullish", "notEmptyString", "value", "isEmptyString", "defaultAgent", "HttpAgent", "AnonymousIdentity", "createAgent", "identity", "host", "fetchRootKey", "verifyQuerySignatures", "retryTimes", "nonNullish", "AgentManager", "_AgentManager", "config", "key", "isNullish", "agent", "createServices", "canisterId", "serviceOverride", "certifiedServiceOverride", "agentOption", "callTransform", "queryTransform", "idlFactory", "certifiedIdlFactory", "agent", "defaultAgent", "service", "Actor", "certifiedService", "InvalidPercentageError", "NullishError", "assertNonNullish", "value", "message", "asNonNullish", "assertPercentageNumber", "percentage", "uint8ArrayToBigInt", "array", "view", "high", "low", "bigIntToUint8Array", "value", "buffer", "numberToUint8Array", "index", "arrayBufferToUint8Array", "uint8ArrayToArrayOfNumber", "arrayOfNumberToUint8Array", "numbers", "asciiStringToByteArray", "text", "c", "hexStringToUint8Array", "hexString", "matches", "assertNonNullish", "byte", "uint8ArrayToHexString", "bytes", "str", "candidNumberArrayToBigInt", "result", "i", "ALPHABET", "LOOKUP_TABLE", "i", "encodeBase32", "input", "skip", "bits", "output", "encodeByte", "byte", "decodeBase32", "o", "decodeChar", "char", "val", "assertNonNullish", "c", "uint8ArrayToBase64", "uint8Array", "base64ToUint8Array", "base64String", "c", "lookUpTable", "crc32", "bytes", "crc", "i", "t", "bigEndianCrc32", "checksumArrayBuf", "EN_TIME", "secondsToDuration", "seconds", "i18n", "minutes", "hours", "days", "years", "fullYearsInDays", "daysInYears", "createLabel", "amount", "labelInfo", "leapDays", "labelKey", "NANOSECONDS_PER_MILLISECOND", "nowInBigIntNanoSeconds", "toBigIntNanoSeconds", "date", "debounce", "func", "timeout", "timer", "args", "next", "toNullable", "value", "nonNullish", "fromNullable", "fromDefinedNullable", "result", "assertNonNullish", "fromNullishNullable", "Principal", "JSON_KEY_BIGINT", "JSON_KEY_PRINCIPAL", "JSON_KEY_UINT8ARRAY", "jsonReplacer", "_key", "value", "nonNullish", "Principal", "jsonReviver", "mapValue", "key", "principalToSubAccount", "principal", "bytes", "subAccount", "addZeros", "nums", "amountZeros", "convertToNumber", "versionStringPart", "strippedVersion", "acc", "char", "smallerVersion", "minVersion", "currentVersion", "minVersionStandarized"]
3
+ "sources": ["../../src/enums/token.enums.ts", "../../src/constants/constants.ts", "../../src/parser/token.ts", "../../src/services/canister.ts", "../../src/utils/nullish.utils.ts", "../../src/services/query.ts", "../../src/utils/actor.utils.ts", "../../src/utils/agent.utils.ts", "../../src/utils/asserts.utils.ts", "../../src/utils/arrays.utils.ts", "../../src/utils/base32.utils.ts", "../../src/utils/base64.utils.ts", "../../src/utils/crc.utils.ts", "../../src/utils/date.utils.ts", "../../src/utils/debounce.utils.ts", "../../src/utils/did.utils.ts", "../../src/utils/json.utils.ts", "../../src/utils/principal.utils.ts", "../../src/utils/version.utils.ts"],
4
+ "sourcesContent": ["export enum FromStringToTokenError {\n FractionalMoreThan8Decimals,\n InvalidFormat,\n FractionalTooManyDecimals,\n}\n", "export const E8S_PER_TOKEN = BigInt(100000000);\n", "import { E8S_PER_TOKEN } from \"../constants/constants\";\nimport { FromStringToTokenError } from \"../enums/token.enums\";\n\nconst DECIMALS_CONVERSION_SUPPORTED = 8;\n\n/**\n * Receives a string representing a number and returns the big int or error.\n *\n * @param amount - in string format\n * @returns bigint | FromStringToTokenError\n */\nexport const convertStringToE8s = (\n value: string,\n): bigint | FromStringToTokenError => {\n // replace exponential format (1e-4) with plain (0.0001)\n // doesn't support decimals for values >= ~1e16\n let amount = value.includes(\"e\")\n ? Number(value).toLocaleString(\"en\", {\n useGrouping: false,\n maximumFractionDigits: 20,\n })\n : value;\n\n // Remove all instances of \",\" and \"'\".\n amount = amount.trim().replace(/[,']/g, \"\");\n\n // Verify that the string is of the format 1234.5678\n const regexMatch = amount.match(/\\d*(\\.\\d*)?/);\n if (!regexMatch || regexMatch[0] !== amount) {\n return FromStringToTokenError.InvalidFormat;\n }\n\n const [integral, fractional] = amount.split(\".\");\n\n let e8s = BigInt(0);\n\n if (integral) {\n try {\n e8s += BigInt(integral) * E8S_PER_TOKEN;\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n if (fractional) {\n if (fractional.length > 8) {\n return FromStringToTokenError.FractionalMoreThan8Decimals;\n }\n try {\n e8s += BigInt(fractional.padEnd(8, \"0\"));\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n return e8s;\n};\n\n/**\n * Receives a string representing a number and returns the big int or error.\n *\n * @param amount - in string format\n * @returns bigint | FromStringToTokenError\n */\nconst convertStringToUlps = ({\n amount,\n decimals,\n}: {\n amount: string;\n decimals: number;\n}): bigint | FromStringToTokenError => {\n // Remove all instances of \",\" and \"'\".\n amount = amount.trim().replace(/[,']/g, \"\");\n\n // Verify that the string is of the format 1234.5678\n const regexMatch = amount.match(/\\d*(\\.\\d*)?/);\n if (!regexMatch || regexMatch[0] !== amount) {\n return FromStringToTokenError.InvalidFormat;\n }\n\n const [integral, fractional] = amount.split(\".\");\n\n let ulps = 0n;\n const ulpsPerToken = 10n ** BigInt(decimals);\n\n if (integral) {\n try {\n ulps += BigInt(integral) * ulpsPerToken;\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n if (fractional) {\n if (fractional.length > decimals) {\n return FromStringToTokenError.FractionalTooManyDecimals;\n }\n try {\n ulps += BigInt(fractional.padEnd(decimals, \"0\"));\n } catch {\n return FromStringToTokenError.InvalidFormat;\n }\n }\n\n return ulps;\n};\n\nexport interface Token {\n symbol: string;\n name: string;\n decimals: number;\n logo?: string;\n}\n\n// TODO: Remove this token and use the value from ICP ledger\nexport const ICPToken: Token = {\n symbol: \"ICP\",\n name: \"Internet Computer\",\n decimals: 8,\n};\n\n/**\n * Deprecated. Use TokenAmountV2 instead which supports decimals !== 8.\n *\n * Represents an amount of tokens.\n *\n * @param e8s - The amount of tokens in bigint.\n * @param token - The token type.\n */\nexport class TokenAmount {\n private constructor(\n protected e8s: bigint,\n public token: Token,\n ) {\n if (token.decimals !== 8) {\n throw new Error(\"Use TokenAmountV2 for number of decimals other than 8\");\n }\n }\n\n /**\n * Initialize from a bigint. Bigint are considered e8s.\n *\n * @param {amount: bigint; token?: Token;} params\n * @param {bigint} params.amount The amount in bigint format.\n * @param {Token} params.token The token type.\n */\n public static fromE8s({\n amount,\n token,\n }: {\n amount: bigint;\n token: Token;\n }): TokenAmount {\n return new TokenAmount(amount, token);\n }\n\n /**\n * Initialize from a string. Accepted formats:\n *\n * 1234567.8901\n * 1'234'567.8901\n * 1,234,567.8901\n *\n * @param {amount: string; token?: Token;} params\n * @param {string} params.amount The amount in string format.\n * @param {Token} params.token The token type.\n */\n public static fromString({\n amount,\n token,\n }: {\n amount: string;\n token: Token;\n }): TokenAmount | FromStringToTokenError {\n // If parsing the number fails because of the number of decimals, we still\n // want the error to be about the number of decimals and not about the\n // parsing.\n if (token.decimals !== 8) {\n throw new Error(\"Use TokenAmountV2 for number of decimals other than 8\");\n }\n const e8s = convertStringToE8s(amount);\n\n if (typeof e8s === \"bigint\") {\n return new TokenAmount(e8s, token);\n }\n return e8s;\n }\n\n /**\n * Initialize from a number.\n *\n * 1 integer is considered E8S_PER_TOKEN\n *\n * @param {amount: number; token?: Token;} params\n * @param {string} params.amount The amount in number format.\n * @param {Token} params.token The token type.\n */\n public static fromNumber({\n amount,\n token,\n }: {\n amount: number;\n token: Token;\n }): TokenAmount {\n const tokenAmount = TokenAmount.fromString({\n amount: amount.toString(),\n token,\n });\n if (tokenAmount instanceof TokenAmount) {\n return tokenAmount;\n }\n if (tokenAmount === FromStringToTokenError.FractionalMoreThan8Decimals) {\n throw new Error(`Number ${amount} has more than 8 decimals`);\n }\n\n // This should never happen\n throw new Error(`Invalid number ${amount}`);\n }\n\n /**\n *\n * @returns The amount of e8s.\n */\n public toE8s(): bigint {\n return this.e8s;\n }\n}\n\n/**\n * Represents an amount of tokens.\n *\n * @param upls - The amount of tokens in units in the last place. If the token\n * supports N decimals, 10^N ulp = 1 token.\n * @param token - The token type.\n */\nexport class TokenAmountV2 {\n private constructor(\n protected ulps: bigint,\n public token: Token,\n ) {}\n\n /**\n * Initialize from a bigint. Bigint are considered ulps.\n *\n * @param {amount: bigint; token?: Token;} params\n * @param {bigint} params.amount The amount in bigint format.\n * @param {Token} params.token The token type.\n */\n public static fromUlps({\n amount,\n token,\n }: {\n amount: bigint;\n token: Token;\n }): TokenAmountV2 {\n return new TokenAmountV2(amount, token);\n }\n\n /**\n * Initialize from a string. Accepted formats:\n *\n * 1234567.8901\n * 1'234'567.8901\n * 1,234,567.8901\n *\n * @param {amount: string; token?: Token;} params\n * @param {string} params.amount The amount in string format.\n * @param {Token} params.token The token type.\n */\n public static fromString({\n amount,\n token,\n }: {\n amount: string;\n token: Token;\n }): TokenAmountV2 | FromStringToTokenError {\n const ulps = convertStringToUlps({ amount, decimals: token.decimals });\n\n if (typeof ulps === \"bigint\") {\n return new TokenAmountV2(ulps, token);\n }\n return ulps;\n }\n\n /**\n * Initialize from a number.\n *\n * 1 integer is considered 10^{token.decimals} ulps\n *\n * @param {amount: number; token?: Token;} params\n * @param {string} params.amount The amount in number format.\n * @param {Token} params.token The token type.\n */\n public static fromNumber({\n amount,\n token,\n }: {\n amount: number;\n token: Token;\n }): TokenAmountV2 {\n const tokenAmount = TokenAmountV2.fromString({\n amount: amount.toFixed(\n Math.min(DECIMALS_CONVERSION_SUPPORTED, token.decimals),\n ),\n token,\n });\n if (tokenAmount instanceof TokenAmountV2) {\n return tokenAmount;\n }\n if (tokenAmount === FromStringToTokenError.FractionalTooManyDecimals) {\n throw new Error(\n `Number ${amount} has more than ${token.decimals} decimals`,\n );\n }\n\n // This should never happen\n throw new Error(`Invalid number ${amount}`);\n }\n\n /**\n *\n * @returns The amount of ulps.\n */\n public toUlps(): bigint {\n return this.ulps;\n }\n\n /**\n *\n * @returns The amount of ulps in e8s precision\n */\n public toE8s(): bigint {\n if (this.token.decimals < 8) {\n return this.ulps * 10n ** BigInt(8 - this.token.decimals);\n } else if (this.token.decimals === 8) {\n return this.ulps;\n } else {\n return this.ulps / 10n ** BigInt(this.token.decimals - 8);\n }\n }\n}\n", "import type { Principal } from \"@dfinity/principal\";\nimport type { QueryParams } from \"../types/query.params\";\n\nexport abstract class Canister<T> {\n protected constructor(\n private readonly id: Principal,\n protected readonly service: T,\n protected readonly certifiedService: T,\n ) {}\n\n get canisterId(): Principal {\n return this.id;\n }\n\n protected caller = ({ certified = true }: QueryParams): T =>\n certified ? this.certifiedService : this.service;\n}\n", "/**\n * Checks if a given argument is null or undefined.\n *\n * @template T - The type of the argument.\n * @param {T | undefined | null} argument - The argument to check.\n * @returns {argument is undefined | null} `true` if the argument is null or undefined; otherwise, `false`.\n */\nexport const isNullish = <T>(\n argument: T | undefined | null,\n): argument is undefined | null => argument === null || argument === undefined;\n\n/**\n * Checks if a given argument is neither null nor undefined.\n *\n * @template T - The type of the argument.\n * @param {T | undefined | null} argument - The argument to check.\n * @returns {argument is NonNullable<T>} `true` if the argument is not null or undefined; otherwise, `false`.\n */\nexport const nonNullish = <T>(\n argument: T | undefined | null,\n): argument is NonNullable<T> => !isNullish(argument);\n\n/**\n * Checks if a given value is not null, not undefined, and not an empty string.\n *\n * @param {string | undefined | null} value - The value to check.\n * @returns {boolean} `true` if the value is not null, not undefined, and not an empty string; otherwise, `false`.\n */\nexport const notEmptyString = (\n value: string | undefined | null,\n): value is string => nonNullish(value) && value !== \"\";\n\n/**\n * Checks if a given value is null, undefined, or an empty string.\n *\n * @param {string | undefined | null} value - The value to check.\n * @returns {value is undefined | null | \"\"} Type predicate indicating if the value is null, undefined, or an empty string.\n */\nexport const isEmptyString = (\n value: string | undefined | null,\n): value is undefined | null | \"\" => !notEmptyString(value);\n", "import type { QueryAndUpdateParams } from \"../types/query-and-update.params\";\nimport { isNullish } from \"../utils/nullish.utils\";\n\n/**\n * This service performs a query (not-certified) call and/or an update (certified) call, and handles the results.\n *\n * It is useful because it can do both type of calls for security reasons.\n * For example, malicious nodes can forge transactions and balance when calling an Index canister, if no update is performed to certify the results.\n *\n * Furthermore, it can handle the results of the calls in different ways:\n * - `query` only performs a query call.\n * - `update` only performs an update call.\n * - `query_and_update` performs both calls.\n *\n * The resolution can be:\n * - `all_settled` waits for all calls to settle.\n * - `race` waits for the first call to settle (typically, `query` is the fastest one).\n *\n * Once the call(s) are done, the response is handled by the `onLoad` callback.\n * However, if an error occurs, it is handled by the error callbacks, if provided: one for the query call and one for the update call.\n *\n * @param {QueryAndUpdateParams<R, E>} params The parameters to perform the request.\n * @param {QueryAndUpdateRequest<R>} params.request The request to perform.\n * @param {QueryAndUpdateOnResponse<R>} params.onLoad The callback to handle the response of the request.\n * @param {QueryAndUpdateOnQueryError<E>} [params.onQueryError] The callback to handle the error of the `query` request.\n * @param {QueryAndUpdateOnUpdateError<E>} [params.onUpdateError] The callback to handle the error of the `update` request.\n * @param {QueryAndUpdateStrategy} [params.strategy=\"query_and_update\"] The strategy to use. Default is `query_and_update`.\n * @param {QueryAndUpdateIdentity} params.identity The identity to use for the request.\n * @param {QueryAndUpdatePromiseResolution} [params.resolution=\"race\"] The resolution to use. Default is `race`.\n *\n * @template R The type of the response.\n * @template E The type of the error.\n *\n * @returns A promise that resolves when the request is done.\n */\nexport const queryAndUpdate = async <R, E = unknown>({\n request,\n onLoad,\n onQueryError,\n onUpdateError,\n strategy = \"query_and_update\",\n identity,\n resolution = \"race\",\n}: QueryAndUpdateParams<R, E>): Promise<void> => {\n let certifiedDone = false;\n\n const queryOrUpdate = (certified: boolean) =>\n request({ certified, identity })\n .then((response) => {\n if (certifiedDone) {\n return;\n }\n\n onLoad({ certified, response });\n })\n .catch((error: E) => {\n if (!certified) {\n onQueryError?.({ error, identity });\n }\n\n if (certifiedDone) {\n return;\n }\n\n if (isNullish(onUpdateError)) {\n return;\n }\n\n console.error(error);\n\n if (!certified) {\n return;\n }\n\n onUpdateError({ error, identity });\n })\n .finally(() => (certifiedDone = certifiedDone || certified));\n\n const requests: Array<Promise<void>> =\n strategy === \"query\"\n ? [queryOrUpdate(false)]\n : strategy === \"update\"\n ? [queryOrUpdate(true)]\n : [queryOrUpdate(false), queryOrUpdate(true)];\n\n await (resolution === \"all_settled\"\n ? Promise.allSettled(requests)\n : Promise.race(requests));\n};\n", "import type { ActorConfig, ActorSubclass, Agent } from \"@dfinity/agent\";\nimport { Actor } from \"@dfinity/agent\";\nimport type { IDL } from \"@dfinity/candid\";\nimport type { Principal } from \"@dfinity/principal\";\nimport type { CanisterOptions } from \"../types/canister.options\";\nimport { defaultAgent } from \"./agent.utils\";\n\ntype RequiredCanisterOptions<T> = Required<\n Pick<CanisterOptions<T>, \"canisterId\">\n> &\n Omit<CanisterOptions<T>, \"canisterId\">;\n\nexport const createServices = <T>({\n options: {\n canisterId,\n serviceOverride,\n certifiedServiceOverride,\n agent: agentOption,\n callTransform,\n queryTransform,\n },\n idlFactory,\n certifiedIdlFactory,\n}: {\n options: RequiredCanisterOptions<T> &\n Pick<ActorConfig, \"queryTransform\" | \"callTransform\">;\n idlFactory: IDL.InterfaceFactory;\n certifiedIdlFactory: IDL.InterfaceFactory;\n}): {\n service: ActorSubclass<T>;\n certifiedService: ActorSubclass<T>;\n agent: Agent;\n canisterId: Principal;\n} => {\n const agent: Agent = agentOption ?? defaultAgent();\n\n const service: ActorSubclass<T> =\n serviceOverride ??\n Actor.createActor<T>(idlFactory, {\n agent,\n canisterId,\n callTransform,\n queryTransform,\n });\n\n const certifiedService: ActorSubclass<T> =\n certifiedServiceOverride ??\n Actor.createActor<T>(certifiedIdlFactory, {\n agent,\n canisterId,\n callTransform,\n queryTransform,\n });\n\n return { service, certifiedService, agent, canisterId };\n};\n", "import type { Agent, Identity } from \"@dfinity/agent\";\nimport { AnonymousIdentity, HttpAgent } from \"@dfinity/agent\";\nimport type { CreateAgentParams } from \"../types/agent.utils\";\nimport { isNullish, nonNullish } from \"./nullish.utils\";\n\n/**\n * Get a default agent that connects to mainnet with the anonymous identity.\n * @returns The default agent to use\n */\nexport const defaultAgent = (): Agent =>\n HttpAgent.createSync({\n host: \"https://icp-api.io\",\n identity: new AnonymousIdentity(),\n });\n\n/**\n * Create an agent for a given identity\n *\n * @param {CreateAgentParams} params The parameters to create a new HTTP agent\n * @param {Identity} params.identity A mandatory identity to use for the agent\n * @param {string} params.host An optional host to connect to, particularly useful for local development\n * @param {boolean} params.fetchRootKey Fetch root key for certificate validation during local development or on testnet\n * @param {boolean} params.verifyQuerySignatures Check for signatures in the state tree signed by the node that replies to queries - i.e. certify responses.\n * @param {number} params.retryTimes Set the number of retries the agent should perform before error.\n */\nexport const createAgent = async ({\n identity,\n host,\n fetchRootKey = false,\n verifyQuerySignatures = false,\n retryTimes,\n}: CreateAgentParams): Promise<HttpAgent> => {\n return await HttpAgent.create({\n identity,\n ...(nonNullish(host) && { host }),\n verifyQuerySignatures,\n ...(nonNullish(retryTimes) && { retryTimes }),\n shouldFetchRootKey: fetchRootKey,\n });\n};\n\nexport type AgentManagerConfig = Pick<\n CreateAgentParams,\n \"fetchRootKey\" | \"host\"\n>;\n\n/**\n * AgentManager class manages HttpAgent instances for different identities.\n *\n * It caches agents by identity to optimise resource usage and avoid unnecessary agent creation.\n * Provides functionality to create new agents, retrieve cached agents, and clear the cache when needed.\n */\nexport class AgentManager {\n private agents: Record<string, HttpAgent> | undefined | null = undefined;\n\n private constructor(private readonly config: AgentManagerConfig) {}\n\n /**\n * Static factory method to create a new AgentManager instance.\n *\n * This method serves as an alternative to directly using the private constructor,\n * making it more convenient to create instances of `AgentManager` using a simple and clear method.\n *\n * @param {AgentManagerConfig} config - Configuration options for the AgentManager instance.\n * @param {boolean} config.fetchRootKey - Whether to fetch the root key for certificate validation.\n * @param {string} config.host - The host to connect to.\n * @returns {AgentManager} A new instance of `AgentManager`.\n */\n public static create(config: AgentManagerConfig): AgentManager {\n return new AgentManager(config);\n }\n\n /**\n * Get or create an HTTP agent for a given identity.\n *\n * If the agent for the specified identity has been created and cached, it is retrieved from the cache.\n * If no agent exists for the identity, a new one is created, cached, and then returned.\n *\n * @param {Identity} identity - The identity to be used to create the agent.\n * @returns {Promise<HttpAgent>} The HttpAgent associated with the given identity.\n */\n public getAgent = async ({\n identity,\n }: {\n identity: Identity;\n }): Promise<HttpAgent> => {\n const key = identity.getPrincipal().toText();\n\n if (isNullish(this.agents) || isNullish(this.agents[key])) {\n const agent = await createAgent({\n identity,\n fetchRootKey: this.config.fetchRootKey,\n host: this.config.host,\n verifyQuerySignatures: true,\n });\n\n this.agents = {\n ...(this.agents ?? {}),\n [key]: agent,\n };\n\n return agent;\n }\n\n return this.agents[key];\n };\n\n /**\n * Clear the cache of HTTP agents.\n *\n * This method removes all cached agents, forcing new agent creation on the next request for any identity.\n * Useful when identities have changed or if you want to reset all active connections.\n */\n public clearAgents = (): void => {\n this.agents = null;\n };\n}\n", "export class InvalidPercentageError extends Error {}\nexport class NullishError extends Error {}\n\nexport const assertNonNullish: <T>(\n value: T,\n message?: string,\n) => asserts value is NonNullable<T> = <T>(\n value: T,\n message?: string,\n): void => {\n if (value === null || value === undefined) {\n throw new NullishError(message);\n }\n};\n\nexport const asNonNullish = <T>(value: T, message?: string): NonNullable<T> => {\n assertNonNullish(value, message);\n return value;\n};\n\nexport const assertPercentageNumber = (percentage: number) => {\n if (percentage < 0 || percentage > 100) {\n throw new InvalidPercentageError(\n `${percentage} is not a valid percentage number.`,\n );\n }\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\n\nexport const uint8ArrayToBigInt = (array: Uint8Array): bigint => {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n if (typeof view.getBigUint64 === \"function\") {\n return view.getBigUint64(0);\n } else {\n const high = BigInt(view.getUint32(0));\n const low = BigInt(view.getUint32(4));\n\n return (high << BigInt(32)) + low;\n }\n};\n\nexport const bigIntToUint8Array = (value: bigint): Uint8Array => {\n const buffer = new ArrayBuffer(8);\n const view = new DataView(buffer);\n if (typeof view.setBigUint64 === \"function\") {\n view.setBigUint64(0, value);\n } else {\n const high = Number(value >> BigInt(32));\n const low = Number(value & BigInt(0xffffffff));\n\n view.setUint32(0, high);\n view.setUint32(4, low);\n }\n\n return new Uint8Array(buffer);\n};\n\nexport const numberToUint8Array = (value: number): Uint8Array => {\n const view = new DataView(new ArrayBuffer(8));\n for (let index = 7; index >= 0; --index) {\n view.setUint8(index, value % 256);\n value = value >> 8;\n }\n return new Uint8Array(view.buffer);\n};\n\nexport const arrayBufferToUint8Array = (buffer: ArrayBuffer): Uint8Array =>\n new Uint8Array(buffer);\n\nexport const uint8ArrayToArrayOfNumber = (array: Uint8Array): Array<number> =>\n Array.from(array);\n\nexport const arrayOfNumberToUint8Array = (numbers: Array<number>): Uint8Array =>\n new Uint8Array(numbers);\n\nexport const asciiStringToByteArray = (text: string): Array<number> =>\n Array.from(text).map((c) => c.charCodeAt(0));\n\nexport const hexStringToUint8Array = (hexString: string): Uint8Array => {\n const matches = hexString.match(/.{1,2}/g);\n\n assertNonNullish(matches, \"Invalid hex string.\");\n\n return Uint8Array.from(matches.map((byte) => parseInt(byte, 16)));\n};\n\nexport const uint8ArrayToHexString = (bytes: Uint8Array | number[]) => {\n if (!(bytes instanceof Uint8Array)) {\n bytes = Uint8Array.from(bytes);\n }\n return bytes.reduce(\n (str, byte) => str + byte.toString(16).padStart(2, \"0\"),\n \"\",\n );\n};\n\nexport const candidNumberArrayToBigInt = (array: number[]): bigint => {\n let result = 0n;\n for (let i = array.length - 1; i >= 0; i--) {\n result = (result << 32n) + BigInt(array[i]);\n }\n return result;\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\n\nconst ALPHABET = \"abcdefghijklmnopqrstuvwxyz234567\";\n\n// Build a lookup table for decoding.\nconst LOOKUP_TABLE: Record<string, number> = Object.create(null);\nfor (let i = 0; i < ALPHABET.length; i++) {\n LOOKUP_TABLE[ALPHABET[i]] = i;\n}\n\n// Add aliases for rfc4648.\nLOOKUP_TABLE[\"0\"] = LOOKUP_TABLE.o;\nLOOKUP_TABLE[\"1\"] = LOOKUP_TABLE.i;\n\n/**\n * Encode an Uint8Array to a base32 string.\n *\n * @param input The input array to encode.\n * @returns A Base32 string encoding the input.\n */\nexport const encodeBase32 = (input: Uint8Array): string => {\n // How many bits will we skip from the first byte.\n let skip = 0;\n // 5 high bits, carry from one byte to the next.\n let bits = 0;\n\n // The output string in base32.\n let output = \"\";\n\n function encodeByte(byte: number): number {\n if (skip < 0) {\n // we have a carry from the previous byte\n bits |= byte >> -skip;\n } else {\n // no carry\n bits = (byte << skip) & 248;\n }\n\n if (skip > 3) {\n // Not enough data to produce a character, get us another one\n skip -= 8;\n return 1;\n }\n\n if (skip < 4) {\n // produce a character\n output += ALPHABET[bits >> 3];\n skip += 5;\n }\n\n return 0;\n }\n\n for (let i = 0; i < input.length; ) {\n i += encodeByte(input[i]);\n }\n\n return output + (skip < 0 ? ALPHABET[bits >> 3] : \"\");\n};\n\n/**\n * Decode a base32 string to Uint8Array.\n *\n * @param input The input string to decode.\n * @param input The base32 encoded string to decode.\n */\nexport function decodeBase32(input: string): Uint8Array {\n // how many bits we have from the previous character.\n let skip = 0;\n // current byte we're producing.\n let byte = 0;\n\n const output = new Uint8Array(((input.length * 4) / 3) | 0);\n let o = 0;\n\n function decodeChar(char: string) {\n // Consume a character from the stream, store\n // the output in this.output. As before, better\n // to use update().\n let val = LOOKUP_TABLE[char.toLowerCase()];\n assertNonNullish(val, `Invalid character: ${JSON.stringify(char)}`);\n\n // move to the high bits\n val <<= 3;\n byte |= val >>> skip;\n skip += 5;\n\n if (skip >= 8) {\n // We have enough bytes to produce an output\n output[o++] = byte;\n skip -= 8;\n\n if (skip > 0) {\n byte = (val << (5 - skip)) & 255;\n } else {\n byte = 0;\n }\n }\n }\n\n for (const c of input) {\n decodeChar(c);\n }\n\n return output.slice(0, o);\n}\n", "/**\n * Converts a Uint8Array (binary data) to a base64 encoded string.\n *\n * @param {Uint8Array} uint8Array - The Uint8Array containing binary data to be encoded.\n * @returns {string} - The base64 encoded string representation of the binary data.\n */\nexport const uint8ArrayToBase64 = (uint8Array: Uint8Array): string =>\n btoa(String.fromCharCode(...new Uint8Array(uint8Array)));\n\n/**\n * Converts a base64 encoded string to a Uint8Array (binary data).\n *\n * @param {string} base64String - The base64 encoded string to be decoded.\n * @returns {Uint8Array} - The Uint8Array representation of the decoded binary data.\n */\nexport const base64ToUint8Array = (base64String: string): Uint8Array =>\n Uint8Array.from(atob(base64String), (c) => c.charCodeAt(0));\n", "// This file is translated to JavaScript from\n// https://lxp32.github.io/docs/a-simple-example-crc32-calculation/\nconst lookUpTable: Uint32Array = new Uint32Array([\n 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,\n 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,\n 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,\n 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,\n 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,\n 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\n 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,\n 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\n 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,\n 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\n 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,\n 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\n 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,\n 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,\n 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,\n 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\n 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,\n 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\n 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,\n 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\n 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,\n 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,\n 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,\n 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,\n 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,\n 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,\n 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,\n 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,\n 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,\n 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\n 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,\n 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,\n 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,\n 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\n 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,\n 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,\n 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,\n 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\n 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,\n 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\n 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,\n]);\n\nconst crc32 = (bytes: Uint8Array): number => {\n let crc = -1;\n\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i];\n const t = (byte ^ crc) & 0xff;\n crc = lookUpTable[t] ^ (crc >>> 8);\n }\n\n return (crc ^ -1) >>> 0;\n};\n\nexport const bigEndianCrc32 = (bytes: Uint8Array): Uint8Array => {\n const checksumArrayBuf = new ArrayBuffer(4);\n const view = new DataView(checksumArrayBuf);\n view.setUint32(0, crc32(bytes), false);\n return new Uint8Array(checksumArrayBuf);\n};\n", "const SECONDS_IN_MINUTE = 60;\nconst MINUTES_IN_HOUR = 60;\nconst HOURS_IN_DAY = 24;\nconst DAYS_IN_NON_LEAP_YEAR = 365;\n\nexport interface I18nSecondsToDuration {\n year: string;\n year_plural: string;\n month: string;\n month_plural: string;\n day: string;\n day_plural: string;\n hour: string;\n hour_plural: string;\n minute: string;\n minute_plural: string;\n second: string;\n second_plural: string;\n}\n\nconst EN_TIME: I18nSecondsToDuration = {\n year: \"year\",\n year_plural: \"years\",\n month: \"month\",\n month_plural: \"months\",\n day: \"day\",\n day_plural: \"days\",\n hour: \"hour\",\n hour_plural: \"hours\",\n minute: \"minute\",\n minute_plural: \"minutes\",\n second: \"second\",\n second_plural: \"seconds\",\n};\n\n/**\n * Convert seconds to a human-readable duration, such as \"6 days, 10 hours.\"\n * @param {Object} options - The options object.\n * @param {bigint} options.seconds - The number of seconds to convert.\n * @param {I18nSecondsToDuration} [options.i18n] - The i18n object for customizing language and units. Defaults to English.\n * @returns {string} The human-readable duration string.\n */\nexport const secondsToDuration = ({\n seconds,\n i18n = EN_TIME,\n}: {\n seconds: bigint;\n i18n?: I18nSecondsToDuration;\n}): string => {\n let minutes = seconds / BigInt(SECONDS_IN_MINUTE);\n\n let hours = minutes / BigInt(MINUTES_IN_HOUR);\n minutes -= hours * BigInt(MINUTES_IN_HOUR);\n\n let days = hours / BigInt(HOURS_IN_DAY);\n hours -= days * BigInt(HOURS_IN_DAY);\n\n const years = fullYearsInDays(days);\n days -= daysInYears(years);\n\n const periods = [\n createLabel(\"year\", years),\n createLabel(\"day\", days),\n createLabel(\"hour\", hours),\n createLabel(\"minute\", minutes),\n ...(seconds > BigInt(0) && seconds < BigInt(60)\n ? [createLabel(\"second\", seconds)]\n : []),\n ];\n\n return periods\n .filter(({ amount }) => amount > 0)\n .slice(0, 2)\n .map(\n (labelInfo) =>\n `${labelInfo.amount} ${\n labelInfo.amount === 1\n ? i18n[labelInfo.labelKey]\n : i18n[`${labelInfo.labelKey}_plural`]\n }`,\n )\n .join(\", \");\n};\n\nconst fullYearsInDays = (days: bigint): bigint => {\n // Use integer division.\n let years = days / BigInt(DAYS_IN_NON_LEAP_YEAR);\n while (daysInYears(years) > days) {\n years--;\n }\n return years;\n};\n\nconst daysInYears = (years: bigint): bigint => {\n // Use integer division.\n const leapDays = years / BigInt(4);\n return years * BigInt(DAYS_IN_NON_LEAP_YEAR) + leapDays;\n};\n\ntype LabelKey = \"year\" | \"month\" | \"day\" | \"hour\" | \"minute\" | \"second\";\ntype LabelInfo = {\n labelKey: LabelKey;\n amount: number;\n};\nconst createLabel = (labelKey: LabelKey, amount: bigint): LabelInfo => ({\n labelKey,\n amount: Number(amount),\n});\n\nconst NANOSECONDS_PER_MILLISECOND = 1_000_000n;\n\n/**\n * Returns the current timestamp in nanoseconds as a `bigint`.\n *\n * @returns {bigint} The current timestamp in nanoseconds.\n */\nexport const nowInBigIntNanoSeconds = (): bigint =>\n BigInt(Date.now()) * NANOSECONDS_PER_MILLISECOND;\n\n/**\n * Converts a given `Date` object to a timestamp in nanoseconds as a `bigint`.\n *\n * @param {Date} date - The `Date` object to convert.\n * @returns {bigint} The timestamp in nanoseconds.\n */\nexport const toBigIntNanoSeconds = (date: Date): bigint =>\n BigInt(date.getTime()) * NANOSECONDS_PER_MILLISECOND;\n", "/**\n * Creates a debounced version of the provided function.\n *\n * The debounced function postpones its execution until after a certain amount of time\n * has elapsed since the last time it was invoked. This is useful for limiting the rate\n * at which a function is called (e.g. in response to user input or events).\n *\n * @param {Function} func - The function to debounce. It will only be called after no new calls happen within the specified timeout.\n * @param {number} [timeout=300] - The debounce delay in milliseconds. Defaults to 300ms if not provided or invalid.\n * @returns {(args: unknown[]) => void} A debounced version of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const debounce = (func: Function, timeout?: number) => {\n let timer: NodeJS.Timer | undefined;\n\n return (...args: unknown[]) => {\n const next = () => func(...args);\n\n if (timer) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore TypeScript global and window confusion even if we are using @types/node\n clearTimeout(timer);\n }\n\n timer = setTimeout(\n next,\n timeout !== undefined && timeout > 0 ? timeout : 300,\n );\n };\n};\n", "import { assertNonNullish } from \"./asserts.utils\";\nimport { nonNullish } from \"./nullish.utils\";\n\n/**\n * Converts a value into a Candid-style variant representation of an optional value.\n *\n * @template T The type of the value.\n * @param {T | null | undefined} value - The value to convert into a Candid-style variant.\n * @returns {[] | [T]} A Candid-style variant representation: an empty array for `null` and `undefined` or an array with the value.\n */\nexport const toNullable = <T>(value?: T | null): [] | [T] => {\n return nonNullish(value) ? [value] : [];\n};\n\n/**\n * Extracts the value from a Candid-style variant representation of an optional value.\n *\n * @template T The type of the value.\n * @param {[] | [T]} value - A Candid-style variant representing an optional value.\n * @returns {T | undefined} The extracted value, or `undefined` if the array is empty.\n */\nexport const fromNullable = <T>(value: [] | [T]): T | undefined => {\n return value?.[0];\n};\n\n/**\n * Extracts the value from a Candid-style variant representation of an optional value,\n * ensuring the value is defined. Throws an error if the array is empty or the value is nullish.\n *\n * @template T The type of the value.\n * @param {[] | [T]} value - A Candid-style variant representing an optional value.\n * @returns {T} The extracted value.\n * @throws {Error} If the array is empty or the value is nullish.\n */\nexport const fromDefinedNullable = <T>(value: [] | [T]): T => {\n const result = fromNullable(value);\n\n assertNonNullish(result);\n\n return result;\n};\n\n/**\n * Extracts the value from a nullish Candid-style variant representation.\n *\n * @template T The type of the value.\n * @param {([] | [T]) | undefined} value - A Candid-style variant or `undefined`.\n * @returns {T | undefined} The extracted value, or `undefined` if the input is nullish or the array is empty.\n */\nexport const fromNullishNullable = <T>(\n value: ([] | [T]) | undefined,\n): T | undefined => fromNullable(value ?? []);\n", "import { Principal } from \"@dfinity/principal\";\nimport { nonNullish } from \"./nullish.utils\";\n\nconst JSON_KEY_BIGINT = \"__bigint__\";\nconst JSON_KEY_PRINCIPAL = \"__principal__\";\nconst JSON_KEY_UINT8ARRAY = \"__uint8array__\";\n\n/**\n * A custom replacer for `JSON.stringify` that converts specific types not natively supported\n * by the API into JSON-compatible formats.\n *\n * Supported conversions:\n * - `BigInt` \u2192 `{ \"__bigint__\": string }`\n * - `Principal` \u2192 `{ \"__principal__\": string }`\n * - `Uint8Array` \u2192 `{ \"__uint8array__\": number[] }`\n *\n * @param {string} _key - Ignored. Only provided for API compatibility.\n * @param {unknown} value - The value to transform before stringification.\n * @returns {unknown} The transformed value if it matches a known type, otherwise the original value.\n */\nexport const jsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === \"bigint\") {\n return { [JSON_KEY_BIGINT]: `${value}` };\n }\n\n if (nonNullish(value) && value instanceof Principal) {\n return { [JSON_KEY_PRINCIPAL]: value.toText() };\n }\n\n if (nonNullish(value) && value instanceof Uint8Array) {\n return { [JSON_KEY_UINT8ARRAY]: Array.from(value) };\n }\n\n return value;\n};\n\n/**\n * A custom reviver for `JSON.parse` that reconstructs specific types from their JSON-encoded representations.\n *\n * This reverses the transformations applied by `jsonReplacer`, restoring the original types.\n *\n * Supported conversions:\n * - `{ \"__bigint__\": string }` \u2192 `BigInt`\n * - `{ \"__principal__\": string }` \u2192 `Principal`\n * - `{ \"__uint8array__\": number[] }` \u2192 `Uint8Array`\n *\n * @param {string} _key - Ignored but provided for API compatibility.\n * @param {unknown} value - The parsed value to transform.\n * @returns {unknown} The reconstructed value if it matches a known type, otherwise the original value.\n */\nexport const jsonReviver = (_key: string, value: unknown): unknown => {\n const mapValue = <T>(key: string): T => (value as Record<string, T>)[key];\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_BIGINT in value\n ) {\n return BigInt(mapValue(JSON_KEY_BIGINT));\n }\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_PRINCIPAL in value\n ) {\n return Principal.fromText(mapValue(JSON_KEY_PRINCIPAL));\n }\n\n if (\n nonNullish(value) &&\n typeof value === \"object\" &&\n JSON_KEY_UINT8ARRAY in value\n ) {\n return Uint8Array.from(mapValue(JSON_KEY_UINT8ARRAY));\n }\n\n return value;\n};\n", "import type { Principal } from \"@dfinity/principal\";\n\n/**\n * Convert a principal to a Uint8Array 32 length.\n * e.g. Useful to convert a canister ID when topping up cycles with the Cmc canister\n * @param principal The principal that needs to be converted to Subaccount\n */\nexport const principalToSubAccount = (principal: Principal): Uint8Array => {\n const bytes: Uint8Array = principal.toUint8Array();\n const subAccount: Uint8Array = new Uint8Array(32);\n subAccount[0] = bytes.length;\n subAccount.set(bytes, 1);\n return subAccount;\n};\n", "const AMOUNT_VERSION_PARTS = 3;\nconst addZeros = (nums: number[], amountZeros: number): number[] =>\n amountZeros > nums.length\n ? [...nums, ...[...Array(amountZeros - nums.length).keys()].map(() => 0)]\n : nums;\n\nconst convertToNumber = (versionStringPart: string): number => {\n if (!Number.isNaN(Number(versionStringPart))) {\n return Number(versionStringPart);\n }\n const strippedVersion = versionStringPart.split(\"\").reduce((acc, char) => {\n if (Number.isNaN(Number(char))) {\n return acc;\n }\n return acc + char;\n }, \"\");\n return Number(strippedVersion);\n};\n/**\n * Returns true if the current version is smaller than the minVersion, false if equal or bigger.\n * Tags after patch version are ignored, e.g. 1.0.0-beta.1 is considered equal to 1.0.0.\n *\n * @param {Object} params\n * @param {string} params.minVersion Ex: \"1.0.0\"\n * @param {string} params.currentVersion Ex: \"2.0.0\"\n * @returns boolean\n */\nexport const smallerVersion = ({\n minVersion,\n currentVersion,\n}: {\n minVersion: string;\n currentVersion: string;\n}): boolean => {\n const minVersionStandarized = addZeros(\n minVersion.split(\".\").map(convertToNumber),\n AMOUNT_VERSION_PARTS,\n ).join(\".\");\n const currentVersionStandarized = addZeros(\n currentVersion.split(\".\").map(convertToNumber),\n AMOUNT_VERSION_PARTS,\n ).join(\".\");\n // Versions need to have the same number of parts to be comparable\n // Source: https://stackoverflow.com/a/65687141\n return (\n currentVersionStandarized.localeCompare(minVersionStandarized, undefined, {\n numeric: true,\n sensitivity: \"base\",\n }) < 0\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["FromStringToTokenError", "E8S_PER_TOKEN", "DECIMALS_CONVERSION_SUPPORTED", "convertStringToE8s", "value", "amount", "regexMatch", "integral", "fractional", "e8s", "E8S_PER_TOKEN", "convertStringToUlps", "decimals", "ulps", "ulpsPerToken", "ICPToken", "TokenAmount", "_TokenAmount", "token", "tokenAmount", "TokenAmountV2", "_TokenAmountV2", "Canister", "id", "service", "certifiedService", "certified", "isNullish", "argument", "nonNullish", "notEmptyString", "value", "isEmptyString", "queryAndUpdate", "request", "onLoad", "onQueryError", "onUpdateError", "strategy", "identity", "resolution", "certifiedDone", "queryOrUpdate", "certified", "response", "error", "isNullish", "requests", "Actor", "AnonymousIdentity", "HttpAgent", "defaultAgent", "HttpAgent", "AnonymousIdentity", "createAgent", "identity", "host", "fetchRootKey", "verifyQuerySignatures", "retryTimes", "nonNullish", "AgentManager", "_AgentManager", "config", "key", "isNullish", "agent", "createServices", "canisterId", "serviceOverride", "certifiedServiceOverride", "agentOption", "callTransform", "queryTransform", "idlFactory", "certifiedIdlFactory", "agent", "defaultAgent", "service", "Actor", "certifiedService", "InvalidPercentageError", "NullishError", "assertNonNullish", "value", "message", "asNonNullish", "assertPercentageNumber", "percentage", "uint8ArrayToBigInt", "array", "view", "high", "low", "bigIntToUint8Array", "value", "buffer", "numberToUint8Array", "index", "arrayBufferToUint8Array", "uint8ArrayToArrayOfNumber", "arrayOfNumberToUint8Array", "numbers", "asciiStringToByteArray", "text", "c", "hexStringToUint8Array", "hexString", "matches", "assertNonNullish", "byte", "uint8ArrayToHexString", "bytes", "str", "candidNumberArrayToBigInt", "result", "i", "ALPHABET", "LOOKUP_TABLE", "i", "encodeBase32", "input", "skip", "bits", "output", "encodeByte", "byte", "decodeBase32", "o", "decodeChar", "char", "val", "assertNonNullish", "c", "uint8ArrayToBase64", "uint8Array", "base64ToUint8Array", "base64String", "c", "lookUpTable", "crc32", "bytes", "crc", "i", "t", "bigEndianCrc32", "checksumArrayBuf", "EN_TIME", "secondsToDuration", "seconds", "i18n", "minutes", "hours", "days", "years", "fullYearsInDays", "daysInYears", "createLabel", "amount", "labelInfo", "leapDays", "labelKey", "NANOSECONDS_PER_MILLISECOND", "nowInBigIntNanoSeconds", "toBigIntNanoSeconds", "date", "debounce", "func", "timeout", "timer", "args", "next", "toNullable", "value", "nonNullish", "fromNullable", "fromDefinedNullable", "result", "assertNonNullish", "fromNullishNullable", "Principal", "JSON_KEY_BIGINT", "JSON_KEY_PRINCIPAL", "JSON_KEY_UINT8ARRAY", "jsonReplacer", "_key", "value", "nonNullish", "Principal", "jsonReviver", "mapValue", "key", "principalToSubAccount", "principal", "bytes", "subAccount", "addZeros", "nums", "amountZeros", "convertToNumber", "versionStringPart", "strippedVersion", "acc", "char", "smallerVersion", "minVersion", "currentVersion", "minVersionStandarized"]
7
7
  }
@@ -1,9 +1,11 @@
1
1
  export * from "./enums/token.enums";
2
2
  export * from "./parser/token";
3
3
  export * from "./services/canister";
4
+ export * from "./services/query";
4
5
  export * from "./types/actor-type.utils";
5
6
  export type { CreateAgentParams } from "./types/agent.utils";
6
7
  export type { CanisterOptions } from "./types/canister.options";
8
+ export * from "./types/query-and-update.params";
7
9
  export type { QueryParams } from "./types/query.params";
8
10
  export * from "./utils/actor.utils";
9
11
  export * from "./utils/agent.utils";
@@ -0,0 +1,34 @@
1
+ import type { QueryAndUpdateParams } from "../types/query-and-update.params";
2
+ /**
3
+ * This service performs a query (not-certified) call and/or an update (certified) call, and handles the results.
4
+ *
5
+ * It is useful because it can do both type of calls for security reasons.
6
+ * For example, malicious nodes can forge transactions and balance when calling an Index canister, if no update is performed to certify the results.
7
+ *
8
+ * Furthermore, it can handle the results of the calls in different ways:
9
+ * - `query` only performs a query call.
10
+ * - `update` only performs an update call.
11
+ * - `query_and_update` performs both calls.
12
+ *
13
+ * The resolution can be:
14
+ * - `all_settled` waits for all calls to settle.
15
+ * - `race` waits for the first call to settle (typically, `query` is the fastest one).
16
+ *
17
+ * Once the call(s) are done, the response is handled by the `onLoad` callback.
18
+ * However, if an error occurs, it is handled by the error callbacks, if provided: one for the query call and one for the update call.
19
+ *
20
+ * @param {QueryAndUpdateParams<R, E>} params The parameters to perform the request.
21
+ * @param {QueryAndUpdateRequest<R>} params.request The request to perform.
22
+ * @param {QueryAndUpdateOnResponse<R>} params.onLoad The callback to handle the response of the request.
23
+ * @param {QueryAndUpdateOnQueryError<E>} [params.onQueryError] The callback to handle the error of the `query` request.
24
+ * @param {QueryAndUpdateOnUpdateError<E>} [params.onUpdateError] The callback to handle the error of the `update` request.
25
+ * @param {QueryAndUpdateStrategy} [params.strategy="query_and_update"] The strategy to use. Default is `query_and_update`.
26
+ * @param {QueryAndUpdateIdentity} params.identity The identity to use for the request.
27
+ * @param {QueryAndUpdatePromiseResolution} [params.resolution="race"] The resolution to use. Default is `race`.
28
+ *
29
+ * @template R The type of the response.
30
+ * @template E The type of the error.
31
+ *
32
+ * @returns A promise that resolves when the request is done.
33
+ */
34
+ export declare const queryAndUpdate: <R, E = unknown>({ request, onLoad, onQueryError, onUpdateError, strategy, identity, resolution, }: QueryAndUpdateParams<R, E>) => Promise<void>;
@@ -0,0 +1,30 @@
1
+ import type { Identity } from "@dfinity/agent";
2
+ export type QueryAndUpdateIdentity = Identity | undefined | null;
3
+ export interface QueryAndUpdateRequestParams {
4
+ certified: boolean;
5
+ identity: QueryAndUpdateIdentity;
6
+ }
7
+ export type QueryAndUpdateRequest<R> = (options: QueryAndUpdateRequestParams) => Promise<R>;
8
+ export type QueryAndUpdateOnResponse<R> = (options: {
9
+ certified: boolean;
10
+ response: R;
11
+ }) => void;
12
+ export interface QueryAndUpdateOnErrorOptions<E = unknown> {
13
+ error: E;
14
+ identity: QueryAndUpdateIdentity;
15
+ }
16
+ type QueryAndUpdateOnError<E = unknown> = (options: QueryAndUpdateOnErrorOptions<E>) => void;
17
+ export type QueryAndUpdateOnQueryError<E = unknown> = QueryAndUpdateOnError<E>;
18
+ export type QueryAndUpdateOnUpdateError<E = unknown> = QueryAndUpdateOnError<E>;
19
+ export type QueryAndUpdateStrategy = "query_and_update" | "query" | "update";
20
+ export type QueryAndUpdatePromiseResolution = "all_settled" | "race";
21
+ export interface QueryAndUpdateParams<R, E = unknown> {
22
+ request: QueryAndUpdateRequest<R>;
23
+ onLoad: QueryAndUpdateOnResponse<R>;
24
+ onQueryError?: QueryAndUpdateOnQueryError<E>;
25
+ onUpdateError?: QueryAndUpdateOnUpdateError<E>;
26
+ strategy?: QueryAndUpdateStrategy;
27
+ identity: QueryAndUpdateIdentity;
28
+ resolution?: QueryAndUpdatePromiseResolution;
29
+ }
30
+ export {};
@@ -1 +1,12 @@
1
+ /**
2
+ * Creates a debounced version of the provided function.
3
+ *
4
+ * The debounced function postpones its execution until after a certain amount of time
5
+ * has elapsed since the last time it was invoked. This is useful for limiting the rate
6
+ * at which a function is called (e.g. in response to user input or events).
7
+ *
8
+ * @param {Function} func - The function to debounce. It will only be called after no new calls happen within the specified timeout.
9
+ * @param {number} [timeout=300] - The debounce delay in milliseconds. Defaults to 300ms if not provided or invalid.
10
+ * @returns {(args: unknown[]) => void} A debounced version of the original function.
11
+ */
1
12
  export declare const debounce: (func: Function, timeout?: number) => (...args: unknown[]) => void;
@@ -20,11 +20,11 @@ export declare const nonNullish: <T>(argument: T | undefined | null) => argument
20
20
  * @param {string | undefined | null} value - The value to check.
21
21
  * @returns {boolean} `true` if the value is not null, not undefined, and not an empty string; otherwise, `false`.
22
22
  */
23
- export declare const notEmptyString: (value: string | undefined | null) => boolean;
23
+ export declare const notEmptyString: (value: string | undefined | null) => value is string;
24
24
  /**
25
25
  * Checks if a given value is null, undefined, or an empty string.
26
26
  *
27
27
  * @param {string | undefined | null} value - The value to check.
28
- * @returns {boolean} `true` if the value is null, undefined, or an empty string; otherwise, `false`.
28
+ * @returns {value is undefined | null | ""} Type predicate indicating if the value is null, undefined, or an empty string.
29
29
  */
30
- export declare const isEmptyString: (value: string | undefined | null) => boolean;
30
+ export declare const isEmptyString: (value: string | undefined | null) => value is "" | null | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dfinity/utils",
3
- "version": "2.11.0",
3
+ "version": "2.12.0",
4
4
  "description": "A collection of utilities and constants for NNS/SNS projects.",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/cjs/index.cjs.js",