{"version":3,"file":"codefi-v2.cjs","sourceRoot":"","sources":["../../src/token-prices-service/codefi-v2.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iEAOoC;AAGpC,2CAKyB;AAYzB;;;;GAIG;AACU,QAAA,6BAA6B,GAAG;IAC3C,UAAU;IACV,KAAK;IACL,QAAQ;IACR,KAAK;IACL,WAAW;IACX,KAAK;IACL,eAAe;IACf,KAAK;IACL,eAAe;IACf,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,SAAS;IACT,KAAK;IACL,YAAY;IACZ,MAAM;IACN,WAAW;IACX,KAAK;IACL,gBAAgB;IAChB,KAAK;IACL,YAAY;IACZ,KAAK;IACL,8BAA8B;IAC9B,KAAK;IACL,iBAAiB;IACjB,KAAK;IACL,oBAAoB;IACpB,KAAK;IACL,mBAAmB;IACnB,KAAK;IACL,iBAAiB;IACjB,KAAK;IACL,mBAAmB;IACnB,KAAK;IACL,cAAc;IACd,KAAK;IACL,kBAAkB;IAClB,KAAK;IACL,cAAc;IACd,KAAK;IACL,eAAe;IACf,KAAK;IACL,eAAe;IACf,KAAK;IACL,eAAe;IACf,KAAK;IACL,eAAe;IACf,KAAK;IACL,OAAO;IACP,KAAK;IACL,yBAAyB;IACzB,KAAK;IACL,gBAAgB;IAChB,KAAK;IACL,mBAAmB;IACnB,KAAK;IACL,mBAAmB;IACnB,KAAK;IACL,oBAAoB;IACpB,KAAK;IACL,qBAAqB;IACrB,KAAK;IACL,eAAe;IACf,KAAK;IACL,eAAe;IACf,KAAK;IACL,mBAAmB;IACnB,KAAK;IACL,gBAAgB;IAChB,KAAK;IACL,mBAAmB;IACnB,KAAK;IACL,eAAe;IACf,KAAK;IACL,eAAe;IACf,KAAK;IACL,oBAAoB;IACpB,KAAK;IACL,QAAQ;IACR,KAAK;IACL,iBAAiB;IACjB,KAAK;IACL,kBAAkB;IAClB,KAAK;IACL,qBAAqB;IACrB,KAAK;IACL,kBAAkB;IAClB,KAAK;IACL,kBAAkB;IAClB,KAAK;IACL,eAAe;IACf,KAAK;IACL,gBAAgB;IAChB,KAAK;IACL,cAAc;IACd,KAAK;IACL,gBAAgB;IAChB,KAAK;IACL,mBAAmB;IACnB,KAAK;IACL,YAAY;IACZ,KAAK;IACL,eAAe;IACf,KAAK;IACL,oBAAoB;IACpB,KAAK;IACL,oBAAoB;IACpB,KAAK;IACL,4BAA4B;IAC5B,KAAK;IACL,kBAAkB;IAClB,KAAK;IACL,qBAAqB;IACrB,KAAK;IACL,6BAA6B;IAC7B,KAAK;IACL,sBAAsB;IACtB,KAAK;IACL,oBAAoB;IACpB,KAAK;IACL,OAAO;IACP,MAAM;IACN,UAAU;IACV,MAAM;IACN,iBAAiB;IACjB,KAAK;IACL,kBAAkB;IAClB,KAAK;IACL,eAAe;IACf,KAAK;IACL,iBAAiB;IACjB,KAAK;IACL,oBAAoB;IACpB,KAAK;IACL,mBAAmB;IACnB,KAAK;IACL,iBAAiB;IACjB,KAAK;IACL,mBAAmB;IACnB,KAAK;IACL,sCAAsC;IACtC,KAAK;IACL,eAAe;IACf,KAAK;IACL,qBAAqB;IACrB,KAAK;IACL,iBAAiB;IACjB,KAAK;IACL,gBAAgB;IAChB,KAAK;IACL,SAAS;IACT,KAAK;IACL,MAAM;IACN,KAAK;IACL,QAAQ;IACR,OAAO;IACP,OAAO;IACP,KAAK;IACL,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,UAAU;IACV,KAAK;IACL,SAAS;IACT,KAAK;IACL,QAAQ;IACR,KAAK;IACL,YAAY;IACZ,MAAM;IACN,WAAW;IACX,KAAK;CACG,CAAC;AAEX;;;GAGG;AACU,QAAA,oBAAoB,GAAG,qCAA6B,CAAC;AAElE;;;;;GAKG;AACU,QAAA,YAAY,GACvB,4CAAqD,CAAC;AAExD;;;GAGG;AACH,MAAM,2BAA2B,GAAqB;IACpD,MAAM,EAAE,4CAA4C,EAAE,UAAU;IAChE,OAAO,EAAE,4CAA4C,EAAE,kBAAkB;IACzE,QAAQ,EAAE,4CAA4C,EAAE,SAAS;IACjE,MAAM,EAAE,4CAA4C,EAAE,SAAS;IAC/D,MAAM,EAAE,4CAA4C,EAAE,0CAA0C;IAChG,OAAO,EAAE,4CAA4C,EAAE,gCAAgC;IACvF,QAAQ,EAAE,4CAA4C,EAAE,gDAAgD;IACxG,QAAQ,EAAE,4CAA4C,EAAE,yDAAyD;CAClH,CAAC;AAEF;;;;;;;GAOG;AACI,MAAM,qBAAqB,GAAG,CAAC,OAAY,EAAO,EAAE,CACzD,2BAA2B,CAAC,OAAO,CAAC,IAAI,oBAAY,CAAC;AAD1C,QAAA,qBAAqB,yBACqB;AAEvD,yGAAyG;AACzG,4FAA4F;AAC/E,QAAA,wBAAwB,GAAG;IACtC,KAAK,EAAE,oBAAoB,EAAE,wCAAwC;IACrE,KAAK,EAAE,qBAAqB,EAAE,kCAAkC;IAChE,MAAM,EAAE,sBAAsB,EAAE,sCAAsC;IACtE,MAAM,EAAE,sBAAsB,EAAE,0CAA0C;IAC1E,MAAM,EAAE,4DAA4D,EAAE,6BAA6B;IACnG,MAAM,EAAE,4DAA4D,EAAE,mCAAmC;IACzG,MAAM,EAAE,sBAAsB,EAAE,+CAA+C;IAC/E,MAAM,EAAE,qBAAqB,EAAE,uCAAuC;IACtE,MAAM,EAAE,wBAAwB,EAAE,qCAAqC;IACvE,MAAM,EAAE,sBAAsB,EAAE,kCAAkC;IAClE,MAAM,EAAE,uBAAuB,EAAE,qDAAqD;IACtF,MAAM,EAAE,2BAA2B,EAAE,yCAAyC;IAC9E,MAAM,EAAE,6DAA6D,EAAE,qCAAqC;IAC5G,MAAM,EAAE,wBAAwB,EAAE,8CAA8C;IAChF,MAAM,EAAE,uBAAuB,EAAE,uCAAuC;IACxE,MAAM,EAAE,6BAA6B,EAAE,qCAAqC;IAC5E,MAAM,EAAE,yBAAyB,EAAE,mCAAmC;IACtE,MAAM,EAAE,6DAA6D,EAAE,uCAAuC;IAC9G,MAAM,EAAE,6DAA6D,EAAE,oCAAoC;IAC3G,MAAM,EAAE,wBAAwB,EAAE,oCAAoC;IACtE,MAAM,EAAE,6DAA6D,EAAE,gCAAgC;IACvG,SAAS,EAAE,+DAA+D,EAAE,kCAAkC;IAC9G,OAAO,EAAE,sBAAsB,EAAE,kDAAkD;IACnF,OAAO,EAAE,uBAAuB,EAAE,mCAAmC;IACrE,OAAO,EAAE,sBAAsB,EAAE,wDAAwD;IACzF,OAAO,EAAE,uBAAuB,EAAE,8BAA8B;IAChE,OAAO,EAAE,uBAAuB,EAAE,uCAAuC;IACzE,OAAO,EAAE,uBAAuB,EAAE,iCAAiC;IACnE,OAAO,EAAE,wBAAwB,EAAE,iCAAiC;IACpE,OAAO,EAAE,8DAA8D,EAAE,+DAA+D;IACxI,OAAO,EAAE,uBAAuB,EAAE,6CAA6C;IAC/E,OAAO,EAAE,yBAAyB,EAAE,iCAAiC;IACrE,OAAO,EAAE,yBAAyB,EAAE,kCAAkC;IACtE,OAAO,EAAE,6BAA6B,EAAE,mCAAmC;IAC3E,OAAO,EAAE,8DAA8D,EAAE,+BAA+B;IACxG,QAAQ,EAAE,+DAA+D,EAAE,4CAA4C;IACvH,OAAO,EAAE,8DAA8D,EAAE,gCAAgC;IACzG,QAAQ,EAAE,8DAA8D,EAAE,gDAAgD;IAC1H,QAAQ,EAAE,8DAA8D,EAAE,uCAAuC;IACjH,QAAQ,EAAE,8DAA8D,EAAE,8BAA8B;IACxG,QAAQ,EAAE,uBAAuB,EAAE,4BAA4B;IAC/D,QAAQ,EAAE,8DAA8D,EAAE,sCAAsC;IAChH,QAAQ,EAAE,yBAAyB,EAAE,0CAA0C;IAC/E,QAAQ,EAAE,+DAA+D,EAAE,wCAAwC;IACnH,QAAQ,EAAE,+DAA+D,EAAE,iCAAiC;IAC5G,QAAQ,EAAE,wBAAwB,EAAE,oCAAoC;IACxE,QAAQ,EAAE,2BAA2B,EAAE,qCAAqC;IAC5E,QAAQ,EAAE,yBAAyB,EAAE,sCAAsC;IAC3E,QAAQ,EAAE,+DAA+D,EAAE,4BAA4B;IACvG,QAAQ,EAAE,0BAA0B,EAAE,0CAA0C;IAChF,QAAQ,EAAE,+DAA+D,EAAE,yDAAyD;IACpI,QAAQ,EAAE,wBAAwB,EAAE,qCAAqC;IACzE,QAAQ,EAAE,+DAA+D,EAAE,2BAA2B;IACtG,SAAS,EAAE,+DAA+D,EAAE,oCAAoC;IAChH,SAAS,EAAE,wBAAwB,EAAE,qCAAqC;IAC1E,SAAS,EAAE,+DAA+D,EAAE,oCAAoC;IAChH,SAAS,EAAE,+DAA+D,EAAE,+CAA+C;IAC3H,SAAS,EAAE,+DAA+D,EAAE,uCAAuC;IACnH,SAAS,EAAE,yBAAyB,EAAE,qCAAqC;IAC3E,SAAS,EAAE,2BAA2B,EAAE,uCAAuC;IAC/E,SAAS,EAAE,yBAAyB,EAAE,sCAAsC;IAC5E,SAAS,EAAE,gEAAgE,EAAE,8BAA8B;IAC3G,UAAU,EAAE,iEAAiE,EAAE,gCAAgC;IAC/G,YAAY,EAAE,6BAA6B,EAAE,4DAA4D;IACzG,YAAY,EAAE,+BAA+B,EAAE,+CAA+C;IAC9F,QAAQ,EAAE,wBAAwB,EAAE,mCAAmC;IACvE,OAAO,EAAE,6DAA6D,EAAE,gCAAgC;CAChG,CAAC;AAgBX;;;;;;GAMG;AACU,QAAA,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAC5C,gCAAwB,CACoB,CAAC;AAS/C,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAE1D,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAE1D,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAa1D;;GAEG;AACH,IAAI,4BAA4B,GAAqC,IAAI,CAAC;AAE1E;;GAEG;AACH,IAAI,+BAA+B,GACjC,IAAI,CAAC;AAEP;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAA,mBAAW,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,6BAA6B;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,WAAW,oBAAoB,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAW,EAAC,GAAG,EAAE;YACtC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE;SACzC,CAAC,CAAC;QAEH,IACE,QAAQ;YACR,OAAO,QAAQ,KAAK,QAAQ;YAC5B,aAAa,IAAI,QAAQ;YACzB,gBAAgB,IAAI,QAAQ,EAC5B,CAAC;YACD,4BAA4B,GAAG,QAAqC,CAAC;YACrE,OAAO,4BAA4B,CAAC;QACtC,CAAC;QAED,uDAAuD;QACvD,OAAO,4BAA4B,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;QAChD,OAAO,4BAA4B,EAAE,CAAC;IACxC,CAAC;YAAS,CAAC;QACT,yDAAyD;QACzD,+BAA+B,GAAG,IAAI,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,sBAAsB;IAC1C,6DAA6D;IAC7D,IAAI,+BAA+B,EAAE,CAAC;QACpC,OAAO,+BAA+B,CAAC;IACzC,CAAC;IAED,0CAA0C;IAC1C,+BAA+B,GAAG,6BAA6B,EAAE,CAAC;IAElE,OAAO,+BAA+B,CAAC;AACzC,CAAC;AAVD,wDAUC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB;IAClC,IAAI,4BAA4B,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,4BAA4B,CAAC;IACtC,CAAC;IACD,OAAO,4BAA4B,EAAE,CAAC;AACxC,CAAC;AALD,oDAKC;AAED;;;;GAIG;AACH,SAAS,4BAA4B;IACnC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,gCAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC5E,IAAA,qBAAa,EACX,0BAAkB,CAAC,MAAM,EACzB,IAAA,mBAAW,EAAC,UAAiB,CAAC,CAAC,QAAQ,EAAE,CAC1C,CACF,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,oCAAoC;QAC5E,cAAc,EAAE;YACd,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,YAAY;SAC3B;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,2BAA2B;IACzC,4BAA4B,GAAG,IAAI,CAAC;IACpC,+BAA+B,GAAG,IAAI,CAAC;AACzC,CAAC;AAHD,kEAGC;AAED;;;;GAIG;AACH,SAAS,2BAA2B;IAClC,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IACjD,MAAM,WAAW,GAAG;QAClB,GAAG,iBAAiB,CAAC,WAAW;QAChC,GAAG,iBAAiB,CAAC,cAAc,CAAC,YAAY;KACjD,CAAC;IAEF,OAAO,WAAW;SACf,GAAG,CAAC,gBAAgB,CAAC;SACrB,MAAM,CAAC,CAAC,UAAU,EAAqB,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,IAAI,qBAAqB,GAAoB,IAAI,CAAC;AAElD;;;;;GAKG;AACI,KAAK,UAAU,wBAAwB;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,WAAW,wBAAwB,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAW,EAAC,GAAG,EAAE;YACtC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE;SACzC,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAgB,EAAE,EAAE,CACnD,QAAQ,CAAC,WAAW,EAAE,CACvB,CAAC;YACF,qBAAqB,GAAG,UAAU,CAAC;YACnC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,uDAAuD;QACvD,OAAO,CAAC,GAAG,qCAA6B,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;QAChD,OAAO,CAAC,GAAG,qCAA6B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AArBD,4DAqBC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB;IACpC,IAAI,qBAAqB,KAAK,IAAI,EAAE,CAAC;QACnC,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,OAAO,qCAA6B,CAAC;AACvC,CAAC;AALD,wDAKC;AAED;;;GAGG;AACH,SAAgB,6BAA6B;IAC3C,qBAAqB,GAAG,IAAI,CAAC;AAC/B,CAAC;AAFD,sEAEC;AAED;;;GAGG;AACH,MAAa,0BAA0B;IA6DrC,YAAY,EACV,iBAAiB,GAAG,6CAA0B,EAC9C,OAAO,GAAG,sCAAmB,EAC7B,0BAA0B,GAAG,mDAAgC,EAC7D,OAAO,EACP,UAAU,EACV,oBAAoB,GAAG,iDAA8B,MAQnD,EAAE;QAvEG,qDAAuB;QAEhC;;;WAGG;QACH,6DAAqD,EAAE,EAAC;QAkEtD,uBAAA,IAAI,sCAAW,IAAA,sCAAmB,EAAC;YACjC,UAAU,EAAE,OAAO;YACnB,sBAAsB,EAAE,0BAA0B;YAClD,oBAAoB;YACpB,iBAAiB;SAClB,CAAC,MAAA,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,uBAAA,IAAI,0CAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,uBAAA,IAAI,0CAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CACL,GAAG,IAA0C;QAE7C,OAAO,uBAAA,IAAI,0CAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CACR,GAAG,IAA6C;QAEhD,OAAO,uBAAA,IAAI,0CAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,yBAAyB,CACvB,sBAAiD;QAEjD,uBAAA,IAAI,sDAA2B,sBAAsB,MAAA,CAAC;IACxD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,uBAAuB;QAC3B,OAAO,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,gBAAgB,CAAC,EACrB,MAAM,EACN,QAAQ,GAIT;QACC,0DAA0D;QAC1D,0DAA0D;QAC1D,6EAA6E;QAC7E,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAClC,mEAAmE;YACnE,sBAAsB,EAAE,CAAC;QAC3B,CAAC;QAED,qDAAqD;QACrD,MAAM,mBAAmB,GAAG,2BAA2B,EAAE,CAAC;QAE1D,MAAM,aAAa,GAAuC,MAAM;YAC9D,mEAAmE;aAClE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aAC9D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,WAAW,GAAG,IAAA,qBAAa,EAC/B,0BAAkB,CAAC,MAAM,EACzB,IAAA,mBAAW,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CACtC,CAAC;YAEF,MAAM,aAAa,GAAG,IAAA,6BAAqB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,aAAa,GACjB,aAAa,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAEnE,IAAI,OAA2B,CAAC;YAChC,IAAI,aAAa,EAAE,CAAC;gBAClB,0EAA0E;gBAC1E,oFAAoF;gBACpF,OAAO;oBACL,gCAAwB,CAAC,KAAK,CAAC,OAAO,CAAC;wBACvC,uBAAA,IAAI,0DAAwB,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,yDAAyD;gBACzD,OAAO,GAAG,GAAG,WAAW,UAAU,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;YACvE,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,OAAwB;aAClC,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CACL,CAAC,KAAK,EAA6C,EAAE,CACnD,KAAK,KAAK,SAAS,CACtB,CAAC;QAEJ,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,cAAc,CAAC,CAAC;QAClD,GAAG,CAAC,YAAY,CAAC,MAAM,CACrB,UAAU,EACV,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACtD,CAAC;QACF,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAChD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAErD,MAAM,oBAAoB,GAKtB,MAAM,uBAAA,IAAI,0CAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAClC,IAAA,8BAAW,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,CAAC,CAC/D,CAAC;QAEF,OAAO,aAAa;aACjB,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;YACnB,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAE7D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO;gBACL,GAAG,UAAU;gBACb,GAAG,WAAW;gBACd,QAAQ;aACT,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAAsC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,kBAAkB,CAAC,EACvB,YAAY,EACZ,cAAc,EACd,gBAAgB,GAKjB;QACC,4DAA4D;QAC5D,0DAA0D;QAC1D,+EAA+E;QAC/E,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,mEAAmE;YACnE,wBAAwB,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,iBAAiB,CAAC,CAAC;QACrD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,iBAAiB,CAAC,CAAC;QACxD,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAElD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GACjD,MAAM,OAAO,CAAC,UAAU,CAAC;YACvB,uBAAA,IAAI,0CAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CACxB,IAAA,8BAAW,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,CAAC,CAC/D;YACD,GAAG,CAAC,cAAc,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,KAAK;gBACxD,CAAC,CAAC;oBACE,uBAAA,IAAI,0CAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CACxB,IAAA,8BAAW,EAAC,MAAM,EAAE;wBAClB,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE;qBACzC,CAAC,CACH;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QAEL,2BAA2B;QAC3B,MAAM,aAAa,GACjB,mBAAmB,CAAC,MAAM,KAAK,WAAW;YACxC,CAAC,CAAC,mBAAmB,CAAC,KAAK;YAC3B,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,gBAAgB,GACpB,sBAAsB,EAAE,MAAM,KAAK,WAAW;YAC5C,CAAC,CAAC,sBAAsB,CAAC,KAAK;YAC9B,CAAC,CAAC,EAAE,CAAC;QAET,IAAI,mBAAmB,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACjE,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,EAAuB,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,GAAG,CAAC,WAAW,EAAuB,CAAC;oBACzC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAuB,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAgD,CAAC,CAAC;QAErD,IAAI,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACpE,IAAI,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAuB,CAAC,EAAE,CAAC;gBAC7D,GAAG,CAAC,GAAG,CAAC,WAAW,EAAuB,CAAC;oBACzC,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAuB,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAgD,CAAC,CAAC;QAErD,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjD,qBAAqB,CAAC,GAAwB,CAAC,GAAG;oBAChD,GAAG,qBAAqB,CAAC,GAAwB,CAAC;oBAClD,GAAG,EAAE,qBAAqB,CAAC,GAAwB,CAAC,EAAE,KAAK;iBAC5D,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACpE,GAAG,CAAC,GAAwB,CAAC,GAAG;gBAC9B,GAAG,qBAAqB,CAAC,GAAwB,CAAC;gBAClD,GAAG,CAAC,wBAAwB,CAAC,GAAwB,CAAC,EAAE,KAAK;oBAC3D,CAAC,CAAC,EAAE,GAAG,EAAE,wBAAwB,CAAC,GAAwB,CAAC,EAAE,KAAK,EAAE;oBACpE,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YACF,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAgD,CAAC,CAAC;QAErD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,wBAAwB,CAAC,OAAgB;QACvC,6CAA6C;QAC7C,MAAM,iBAAiB,GAAG,2BAA2B,EAAE,CAAC;QACxD,uEAAuE;QACvE,MAAM,oBAAoB,GAAsB;YAC9C,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,EAAE,GAAG,2BAAmB,CAAC,CAAC;SAC3D,CAAC;QACF,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ,IAAI,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,CACtE,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,yBAAyB,CAAC,QAAiB;QACzC,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;QACrD,OAAO,CACL,OAAO,QAAQ,KAAK,QAAQ;YAC5B,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CACrD,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,yBAAyB;QAC7B,OAAO,wBAAwB,EAAE,CAAC;IACpC,CAAC;CACF;AA3YD,gEA2YC","sourcesContent":["import {\n  createServicePolicy,\n  DEFAULT_CIRCUIT_BREAK_DURATION,\n  DEFAULT_DEGRADED_THRESHOLD,\n  DEFAULT_MAX_CONSECUTIVE_FAILURES,\n  DEFAULT_MAX_RETRIES,\n  handleFetch,\n} from '@metamask/controller-utils';\nimport type { ServicePolicy } from '@metamask/controller-utils';\nimport type { CaipAssetType, Hex } from '@metamask/utils';\nimport {\n  hexToNumber,\n  KnownCaipNamespace,\n  numberToHex,\n  toCaipChainId,\n} from '@metamask/utils';\n\nimport type { MarketDataDetails } from '../TokenRatesController';\nimport type {\n  AbstractTokenPricesService,\n  EvmAssetAddressWithChain,\n  EvmAssetWithId,\n  EvmAssetWithMarketData,\n  ExchangeRatesByCurrency,\n  NativeAssetIdentifiersMap,\n} from './abstract-token-prices-service';\n\n/**\n * The list of currencies that can be supplied as the `vsCurrency` parameter to\n * the `/spot-prices` endpoint, in lowercase form.\n * This is the fallback list used when the API is unavailable.\n */\nexport const SUPPORTED_CURRENCIES_FALLBACK = [\n  // Bitcoin\n  'btc',\n  // Ether\n  'eth',\n  // Litecoin\n  'ltc',\n  // Bitcoin Cash\n  'bch',\n  // Binance Coin\n  'bnb',\n  // EOS\n  'eos',\n  // XRP\n  'xrp',\n  // Lumens\n  'xlm',\n  // Chainlink\n  'link',\n  // Polkadot\n  'dot',\n  // Yearn.finance\n  'yfi',\n  // US Dollar\n  'usd',\n  // United Arab Emirates Dirham\n  'aed',\n  // Argentine Peso\n  'ars',\n  // Australian Dollar\n  'aud',\n  // Bangladeshi Taka\n  'bdt',\n  // Bahraini Dinar\n  'bhd',\n  // Bermudian Dollar\n  'bmd',\n  // Brazil Real\n  'brl',\n  // Canadian Dollar\n  'cad',\n  // Swiss Franc\n  'chf',\n  // Chilean Peso\n  'clp',\n  // Chinese Yuan\n  'cny',\n  // Czech Koruna\n  'czk',\n  // Danish Krone\n  'dkk',\n  // Euro\n  'eur',\n  // British Pound Sterling\n  'gbp',\n  // Georgian Lari\n  'gel',\n  // Hong Kong Dollar\n  'hkd',\n  // Hungarian Forint\n  'huf',\n  // Indonesian Rupiah\n  'idr',\n  // Israeli New Shekel\n  'ils',\n  // Indian Rupee\n  'inr',\n  // Japanese Yen\n  'jpy',\n  // South Korean Won\n  'krw',\n  // Kuwaiti Dinar\n  'kwd',\n  // Sri Lankan Rupee\n  'lkr',\n  // Burmese Kyat\n  'mmk',\n  // Mexican Peso\n  'mxn',\n  // Malaysian Ringgit\n  'myr',\n  // Monad\n  'mon',\n  // Nigerian Naira\n  'ngn',\n  // Norwegian Krone\n  'nok',\n  // New Zealand Dollar\n  'nzd',\n  // Philippine Peso\n  'php',\n  // Pakistani Rupee\n  'pkr',\n  // Polish Zloty\n  'pln',\n  // Russian Ruble\n  'rub',\n  // Saudi Riyal\n  'sar',\n  // Swedish Krona\n  'sek',\n  // Singapore Dollar\n  'sgd',\n  // Thai Baht\n  'thb',\n  // Turkish Lira\n  'try',\n  // New Taiwan Dollar\n  'twd',\n  // Ukrainian hryvnia\n  'uah',\n  // Venezuelan bolívar fuerte\n  'vef',\n  // Vietnamese đồng\n  'vnd',\n  // South African Rand\n  'zar',\n  // IMF Special Drawing Rights\n  'xdr',\n  // Silver - Troy Ounce\n  'xag',\n  // Gold - Troy Ounce\n  'xau',\n  // Bits\n  'bits',\n  // Satoshi\n  'sats',\n  // Colombian Peso\n  'cop',\n  // Kenyan Shilling\n  'kes',\n  // Romanian Leu\n  'ron',\n  // Dominican Peso\n  'dop',\n  // Costa Rican Colón\n  'crc',\n  // Honduran Lempira\n  'hnl',\n  // Zambian Kwacha\n  'zmw',\n  // Salvadoran Colón\n  'svc',\n  // Bosnia-Herzegovina Convertible Mark\n  'bam',\n  // Peruvian Sol\n  'pen',\n  // Guatemalan Quetzal\n  'gtq',\n  // Lebanese Pound\n  'lbp',\n  // Armenian Dram\n  'amd',\n  // Solana\n  'sol',\n  // Sei\n  'sei',\n  // Sonic\n  'sonic',\n  // Tron\n  'trx',\n  // Taiko\n  'taiko',\n  // Pepu\n  'pepu',\n  // Polygon\n  'pol',\n  // Mantle\n  'mnt',\n  // Onomy\n  'nom',\n  // Avalanche\n  'avax',\n  // Apechain\n  'ape',\n] as const;\n\n/**\n * @deprecated Use `getSupportedCurrencies()` or `fetchSupportedCurrencies()` instead.\n * This is an alias for backward compatibility.\n */\nexport const SUPPORTED_CURRENCIES = SUPPORTED_CURRENCIES_FALLBACK;\n\n/**\n * Represents the zero address, commonly used as a placeholder in blockchain transactions.\n * In the context of fetching market data, the zero address is utilized to retrieve information\n * specifically for native currencies. This allows for a standardized approach to query market\n * data for blockchain-native assets without a specific contract address.\n */\nexport const ZERO_ADDRESS: Hex =\n  '0x0000000000000000000000000000000000000000' as const;\n\n/**\n * A mapping from chain id to the address of the chain's native token.\n * Only for chains whose native tokens have a specific address.\n */\nconst chainIdToNativeTokenAddress: Record<Hex, Hex> = {\n  '0x89': '0x0000000000000000000000000000000000001010', // Polygon\n  '0x440': '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // Metis Andromeda\n  '0x1388': '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // Mantle\n  '0x64': '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d', // Gnosis\n  '0x1e': '0x542fda317318ebf1d3deaf76e0b632741a7e677d', // Rootstock Mainnet - Native symbol: RBTC\n  '0x3dc': '0x779ded0c9e1022225f8e0630b35a9b54be713736', // Stable - Native symbol: USDT0\n  '0x1079': '0x20c0000000000000000000000000000000000000', // Tempo Mainnet - Pseudo-Native symbol: pathUSD\n  '0xa5bf': '0x20c0000000000000000000000000000000000000', // Tempo Moderato Testnet - Pseudo-Native symbol: pathUSD\n};\n\n/**\n * Returns the address that should be used to query the price api for the\n * chain's native token. On most chains, this is signified by the zero address.\n * But on some chains, the native token has a specific address.\n *\n * @param chainId - The hexadecimal chain id.\n * @returns The address of the chain's native token.\n */\nexport const getNativeTokenAddress = (chainId: Hex): Hex =>\n  chainIdToNativeTokenAddress[chainId] ?? ZERO_ADDRESS;\n\n// Source: https://github.com/consensys-vertical-apps/va-mmcx-price-api/blob/main/src/constants/slip44.ts\n// We can only support PricesAPI V3 for EVM chains that have a CAIP-19 native asset mapping.\nexport const SPOT_PRICES_SUPPORT_INFO = {\n  '0x1': 'eip155:1/slip44:60', // Ethereum Mainnet - Native symbol: ETH\n  '0xa': 'eip155:10/slip44:60', // OP Mainnet - Native symbol: ETH\n  '0x19': 'eip155:25/slip44:394', // Cronos Mainnet - Native symbol: CRO\n  '0x1e': 'eip155:30/slip44:137', // Rootstock Mainnet - Native symbol: RBTC\n  '0x2a': 'eip155:42/erc20:0x0000000000000000000000000000000000000000', // Lukso - native symbol: LYX\n  '0x32': 'eip155:50/erc20:0x0000000000000000000000000000000000000000', // xdc-network - native symbol: XDC\n  '0x38': 'eip155:56/slip44:714', // BNB Smart Chain Mainnet - Native symbol: BNB\n  '0x39': 'eip155:57/slip44:57', // Syscoin Mainnet - Native symbol: SYS\n  '0x52': 'eip155:82/slip44:18000', // Meter Mainnet - Native symbol: MTR\n  '0x58': 'eip155:88/slip44:889', // TomoChain - Native symbol: TOMO\n  '0x64': 'eip155:100/slip44:700', // Gnosis (formerly xDAI Chain) - Native symbol: xDAI\n  '0x6a': 'eip155:106/slip44:5655640', // Velas EVM Mainnet - Native symbol: VLX\n  '0x7a': 'eip155:122/erc20:0x0000000000000000000000000000000000000000', // Fuse Mainnet - Native symbol: FUSE\n  '0x80': 'eip155:128/slip44:1010', // Huobi ECO Chain Mainnet - Native symbol: HT\n  '0x89': 'eip155:137/slip44:966', // Polygon Mainnet - Native symbol: POL\n  '0x8f': 'eip155:143/slip44:268435779', // Monad Mainnet - Native symbol: MON\n  '0x92': 'eip155:146/slip44:10007', // Sonic Mainnet - Native symbol: S\n  '0xc4': 'eip155:196/erc20:0x0000000000000000000000000000000000000000', // X Layer Mainnet - Native symbol: OKB\n  '0xe8': 'eip155:232/erc20:0x0000000000000000000000000000000000000000', // Lens Mainnet - Native symbol: GHO\n  '0xfa': 'eip155:250/slip44:1007', // Fantom Opera - Native symbol: FTM\n  '0xfc': 'eip155:252/erc20:0x0000000000000000000000000000000000000000', // Fraxtal - native symbol: FRAX\n  '0x10b3e': 'eip155:68414/erc20:0x0000000000000000000000000000000000000000', // MapleStory Universe - no slip44\n  '0x120': 'eip155:288/slip44:60', // Boba Network (Ethereum L2) - Native symbol: ETH\n  '0x141': 'eip155:321/slip44:641', // KCC Mainnet - Native symbol: KCS\n  '0x144': 'eip155:324/slip44:60', // zkSync Era Mainnet (Ethereum L2) - Native symbol: ETH\n  '0x150': 'eip155:336/slip44:809', // Shiden - Native symbol: SDN\n  '0x169': 'eip155:361/slip44:589', // Theta Mainnet - Native symbol: TFUEL\n  '0x2eb': 'eip155:747/slip44:539', // Flow evm - Native symbol: Flow\n  '0x3e7': 'eip155:999/slip44:2457', // HyperEVM - Native symbol: HYPE\n  '0x440': 'eip155:1088/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // Metis Andromeda Mainnet (Ethereum L2) - Native symbol: METIS\n  '0x44d': 'eip155:1101/slip44:60', // Polygon zkEVM mainnet - Native symbol: ETH\n  '0x504': 'eip155:1284/slip44:1284', // Moonbeam - Native symbol: GLMR\n  '0x505': 'eip155:1285/slip44:1285', // Moonriver - Native symbol: MOVR\n  '0x531': 'eip155:1329/slip44:19000118', // Sei Mainnet - Native symbol: SEI\n  '0x74c': 'eip155:1868/erc20:0x0000000000000000000000000000000000000000', // Soneium - Native symbol: ETH\n  '0xa729': 'eip155:42793/erc20:0x0000000000000000000000000000000000000000', // Etherlink - Native symbol: XTZ (Tezos L2)\n  '0xab5': 'eip155:2741/erc20:0x0000000000000000000000000000000000000000', // Abstract - Native symbol: ETH\n  '0x1079': 'eip155:4217/erc20:0x20c0000000000000000000000000000000000000', // Tempo Mainnet - Pseudo-Native symbol: pathUSD\n  '0x10e6': 'eip155:4326/erc20:0x0000000000000000000000000000000000000000', // MegaETH Mainnet - Native symbol: ETH\n  '0x1388': 'eip155:5000/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // Mantle - Native symbol: MNT\n  '0x2105': 'eip155:8453/slip44:60', // Base - Native symbol: ETH\n  '0x2611': 'eip155:9745/erc20:0x0000000000000000000000000000000000000000', // Plasma mainnet - native symbol: XPL\n  '0x2710': 'eip155:10000/slip44:145', // Smart Bitcoin Cash - Native symbol: BCH\n  '0x8173': 'eip155:33139/erc20:0x0000000000000000000000000000000000000000', // Apechain Mainnet - Native symbol: APE\n  '0xa3c3': 'eip155:41923/erc20:0x0000000000000000000000000000000000000000', // EDU Chain - Native symbol: EDU\n  '0xa4b1': 'eip155:42161/slip44:60', // Arbitrum One - Native symbol: ETH\n  '0xa4ec': 'eip155:42220/slip44:52752', // Celo Mainnet - Native symbol: CELO\n  '0xa516': 'eip155:42262/slip44:474', // Oasis Emerald - Native symbol: ROSE\n  '0xa867': 'eip155:43111/erc20:0x0000000000000000000000000000000000000000', // Hemi - Native symbol: ETH\n  '0xa86a': 'eip155:43114/slip44:9005', // Avalanche C-Chain - Native symbol: AVAX\n  '0xa5bf': 'eip155:42431/erc20:0x20c0000000000000000000000000000000000000', // Tempo Testnet Moderato - Pseudo-Native symbol: pathUSD\n  '0xe708': 'eip155:59144/slip44:60', // Linea Mainnet - Native symbol: ETH\n  '0xed88': 'eip155:60808/erc20:0x0000000000000000000000000000000000000000', // BOB - Native symbol: ETH\n  '0x138de': 'eip155:80094/erc20:0x0000000000000000000000000000000000000000', // Berachain - Native symbol: Bera',\n  '0x13c31': 'eip155:81457/slip44:60', // Blast Mainnet - Native symbol: ETH\n  '0x15b38': 'eip155:88888/erc20:0x0000000000000000000000000000000000000000', // Chiliz Chain - Native symbol: CHZ\n  '0x17dcd': 'eip155:97741/erc20:0x0000000000000000000000000000000000000000', // Pepe Unchained Mainnet - Native symbol: PEPU\n  '0x18232': 'eip155:98866/erc20:0x0000000000000000000000000000000000000000', // Plume Mainnet - Narive symbol: Plume\n  '0x28c58': 'eip155:167000/slip44:60', // Taiko Mainnet - Native symbol: ETH\n  '0x518af': 'eip155:333999/slip44:1997', // Polis Mainnet - Native symbol: POLIS\n  '0x82750': 'eip155:534352/slip44:60', // Scroll Mainnet - Native symbol: ETH\n  '0xb67d2': 'eip155:747474/erc20:0x0000000000000000000000000000000000000000', // katana - Native symbol: ETH\n  '0x15f900': 'eip155:1440000/erc20:0x0000000000000000000000000000000000000000', // xrpl-evm - native symbol: XRP\n  '0x4e454152': 'eip155:1313161554/slip44:60', // Aurora Mainnet (Ethereum L2 on NEAR) - Native symbol: ETH\n  '0x63564c40': 'eip155:1666600000/slip44:1023', // Harmony Mainnet Shard 0 - Native symbol: ONE\n  '0xdef1': 'eip155:57073/slip44:60', // Ink Mainnet - Native symbol: ETH\n  '0x3dc': 'eip155:988/erc20:0x779ded0c9e1022225f8e0630b35a9b54be713736', // Stable - Native symbol: USDT0\n} as const;\n\n// MISSING CHAINS WITH NO NATIVE ASSET PRICES\n// '0x42': 'eip155:66/slip44:996', // OKXChain Mainnet - Native symbol: OKT\n// '0x46': 'eip155:70/slip44:1170', // Hoo Smart Chain - Native symbol: HOO\n// '0x926': 'eip155:2342/erc20:0x0000000000000000000000000000000000000000', // Omnia Chain - Native symbol: OMNIA\n// '0x407b': 'eip155:16507/erc20:0x0000000000000000000000000000000000000000', // Genesys Mainnet - Native symbol: GSYS\n\n/**\n * A currency that can be supplied as the `vsCurrency` parameter to\n * the `/spot-prices` endpoint. Covers both uppercase and lowercase versions.\n */\ntype SupportedCurrency =\n  | (typeof SUPPORTED_CURRENCIES_FALLBACK)[number]\n  | Uppercase<(typeof SUPPORTED_CURRENCIES_FALLBACK)[number]>;\n\n/**\n * The list of chain IDs that can be supplied in the URL for the `/spot-prices`\n * endpoint, but in hexadecimal form (for consistency with how we represent\n * chain IDs in other places).\n *\n * @see Used by {@link CodefiTokenPricesServiceV2} to validate that a given chain ID is supported by V2 of the Codefi Price API.\n */\nexport const SUPPORTED_CHAIN_IDS = Object.keys(\n  SPOT_PRICES_SUPPORT_INFO,\n) as (keyof typeof SPOT_PRICES_SUPPORT_INFO)[];\n\n/**\n * A chain ID that can be supplied in the URL for the `/spot-prices` endpoint,\n * but in hexadecimal form (for consistency with how we represent chain IDs in\n * other places).\n */\ntype SupportedChainId = (typeof SUPPORTED_CHAIN_IDS)[number];\n\nconst BASE_URL_V1 = 'https://price.api.cx.metamask.io/v1';\n\nconst BASE_URL_V2 = 'https://price.api.cx.metamask.io/v2';\n\nconst BASE_URL_V3 = 'https://price.api.cx.metamask.io/v3';\n\n/**\n * Response type for the /v2/supportedNetworks endpoint.\n */\ntype SupportedNetworksResponse = {\n  fullSupport: string[];\n  partialSupport: {\n    spotPricesV2: string[];\n    spotPricesV3: string[];\n  };\n};\n\n/**\n * In-memory store for the last successfully fetched supported networks.\n */\nlet lastFetchedSupportedNetworks: SupportedNetworksResponse | null = null;\n\n/**\n * In-flight promise to prevent concurrent requests to the supported networks endpoint.\n */\nlet runningSupportedNetworksRequest: Promise<SupportedNetworksResponse> | null =\n  null;\n\n/**\n * Converts a CAIP-2 chain ID (e.g., 'eip155:1') to a hex chain ID (e.g., '0x1').\n *\n * @param caipChainId - The CAIP-2 chain ID string.\n * @returns The hex chain ID or null if not an EIP-155 chain.\n */\nfunction caipChainIdToHex(caipChainId: string): Hex | null {\n  const match = caipChainId.match(/^eip155:(\\d+)$/u);\n  if (!match) {\n    return null;\n  }\n  return numberToHex(parseInt(match[1], 10));\n}\n\n/**\n * Executes the actual fetch to the supported networks endpoint.\n * Handles errors internally by falling back to the hardcoded list,\n * and clears the in-flight promise when done.\n *\n * @returns The supported networks response.\n */\nasync function executeSupportedNetworksFetch(): Promise<SupportedNetworksResponse> {\n  try {\n    const url = `${BASE_URL_V2}/supportedNetworks`;\n    const response = await handleFetch(url, {\n      headers: { 'Cache-Control': 'no-cache' },\n    });\n\n    if (\n      response &&\n      typeof response === 'object' &&\n      'fullSupport' in response &&\n      'partialSupport' in response\n    ) {\n      lastFetchedSupportedNetworks = response as SupportedNetworksResponse;\n      return lastFetchedSupportedNetworks;\n    }\n\n    // Invalid response format, fall back to hardcoded list\n    return getSupportedNetworksFallback();\n  } catch {\n    // On any error, fall back to the hardcoded list\n    return getSupportedNetworksFallback();\n  } finally {\n    // Clear the in-flight promise once the request completes\n    runningSupportedNetworksRequest = null;\n  }\n}\n\n/**\n * Fetches the list of supported networks from the API.\n * Falls back to the hardcoded list if the fetch fails.\n * Deduplicates concurrent requests by returning the same promise if a fetch is already in progress.\n *\n * @returns The supported networks response.\n */\nexport async function fetchSupportedNetworks(): Promise<SupportedNetworksResponse> {\n  // If a fetch is already in progress, return the same promise\n  if (runningSupportedNetworksRequest) {\n    return runningSupportedNetworksRequest;\n  }\n\n  // Start a new fetch and cache the promise\n  runningSupportedNetworksRequest = executeSupportedNetworksFetch();\n\n  return runningSupportedNetworksRequest;\n}\n\n/**\n * Synchronously gets the list of supported networks.\n * Returns the last fetched value if available, otherwise returns the fallback list.\n *\n * @returns The supported networks response.\n */\nexport function getSupportedNetworks(): SupportedNetworksResponse {\n  if (lastFetchedSupportedNetworks !== null) {\n    return lastFetchedSupportedNetworks;\n  }\n  return getSupportedNetworksFallback();\n}\n\n/**\n * Generates a fallback supported networks response from the hardcoded SPOT_PRICES_SUPPORT_INFO.\n *\n * @returns A SupportedNetworksResponse derived from hardcoded data.\n */\nfunction getSupportedNetworksFallback(): SupportedNetworksResponse {\n  const caipChainIds = Object.keys(SPOT_PRICES_SUPPORT_INFO).map((hexChainId) =>\n    toCaipChainId(\n      KnownCaipNamespace.Eip155,\n      hexToNumber(hexChainId as Hex).toString(),\n    ),\n  );\n\n  return {\n    fullSupport: caipChainIds.slice(0, 11), // First 11 chains as \"full support\"\n    partialSupport: {\n      spotPricesV2: caipChainIds,\n      spotPricesV3: caipChainIds,\n    },\n  };\n}\n\n/**\n * Resets the supported networks cache.\n * This is primarily intended for testing purposes.\n */\nexport function resetSupportedNetworksCache(): void {\n  lastFetchedSupportedNetworks = null;\n  runningSupportedNetworksRequest = null;\n}\n\n/**\n * Gets the list of supported chain IDs for spot prices v3 as hex values.\n *\n * @returns Array of hex chain IDs supported by spot prices v3.\n */\nfunction getSupportedChainIdsV3AsHex(): Hex[] {\n  const supportedNetworks = getSupportedNetworks();\n  const allV3Chains = [\n    ...supportedNetworks.fullSupport,\n    ...supportedNetworks.partialSupport.spotPricesV3,\n  ];\n\n  return allV3Chains\n    .map(caipChainIdToHex)\n    .filter((hexChainId): hexChainId is Hex => hexChainId !== null);\n}\n\n/**\n * In-memory store for the last successfully fetched supported currencies.\n */\nlet lastFetchedCurrencies: string[] | null = null;\n\n/**\n * Fetches the list of supported currencies from the API.\n * Falls back to the hardcoded list if the fetch fails.\n *\n * @returns The list of supported currencies in lowercase.\n */\nexport async function fetchSupportedCurrencies(): Promise<string[]> {\n  try {\n    const url = `${BASE_URL_V1}/supportedVsCurrencies`;\n    const response = await handleFetch(url, {\n      headers: { 'Cache-Control': 'no-cache' },\n    });\n\n    if (Array.isArray(response)) {\n      const currencies = response.map((currency: string) =>\n        currency.toLowerCase(),\n      );\n      lastFetchedCurrencies = currencies;\n      return currencies;\n    }\n\n    // Invalid response format, fall back to hardcoded list\n    return [...SUPPORTED_CURRENCIES_FALLBACK];\n  } catch {\n    // On any error, fall back to the hardcoded list\n    return [...SUPPORTED_CURRENCIES_FALLBACK];\n  }\n}\n\n/**\n * Synchronously gets the list of supported currencies.\n * Returns the last fetched value if available, otherwise returns the fallback list.\n *\n * @returns The list of supported currencies in lowercase.\n */\nexport function getSupportedCurrencies(): readonly string[] {\n  if (lastFetchedCurrencies !== null) {\n    return lastFetchedCurrencies;\n  }\n  return SUPPORTED_CURRENCIES_FALLBACK;\n}\n\n/**\n * Resets the supported currencies cache.\n * This is primarily intended for testing purposes.\n */\nexport function resetSupportedCurrenciesCache(): void {\n  lastFetchedCurrencies = null;\n}\n\n/**\n * This version of the token prices service uses V2 of the Codefi Price API to\n * fetch token prices.\n */\nexport class CodefiTokenPricesServiceV2 implements AbstractTokenPricesService<\n  SupportedChainId,\n  SupportedCurrency\n> {\n  readonly #policy: ServicePolicy;\n\n  /**\n   * Map of CAIP-2 chain IDs to their native asset identifiers.\n   * Updated via setNativeAssetIdentifiers().\n   */\n  #nativeAssetIdentifiers: NativeAssetIdentifiersMap = {};\n\n  /**\n   * Construct a Codefi Token Price Service.\n   *\n   * @param args - The arguments.\n   * @param args.degradedThreshold - The length of time (in milliseconds)\n   * that governs when the service is regarded as degraded (affecting when\n   * `onDegraded` is called). Defaults to 5 seconds.\n   * @param args.retries - Number of retry attempts for each fetch request.\n   * @param args.maximumConsecutiveFailures - The maximum number of consecutive\n   * failures allowed before breaking the circuit and pausing further updates.\n   * @param args.circuitBreakDuration - The amount of time to wait when the\n   * circuit breaks from too many consecutive failures.\n   */\n  constructor(args?: {\n    degradedThreshold?: number;\n    retries?: number;\n    maximumConsecutiveFailures?: number;\n    circuitBreakDuration?: number;\n  });\n\n  /**\n   * Construct a Codefi Token Price Service.\n   *\n   * @deprecated This signature is deprecated; please use the `onBreak` and\n   * `onDegraded` methods instead.\n   * @param args - The arguments.\n   * @param args.degradedThreshold - The length of time (in milliseconds)\n   * that governs when the service is regarded as degraded (affecting when\n   * `onDegraded` is called). Defaults to 5 seconds.\n   * @param args.retries - Number of retry attempts for each fetch request.\n   * @param args.maximumConsecutiveFailures - The maximum number of consecutive\n   * failures allowed before breaking the circuit and pausing further updates.\n   * @param args.onBreak - Callback for when the circuit breaks, useful\n   * for capturing metrics about network failures.\n   * @param args.onDegraded - Callback for when the API responds successfully\n   * but takes too long to respond (5 seconds or more).\n   * @param args.circuitBreakDuration - The amount of time to wait when the\n   * circuit breaks from too many consecutive failures.\n   */\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  constructor(args?: {\n    degradedThreshold?: number;\n    retries?: number;\n    maximumConsecutiveFailures?: number;\n    onBreak?: () => void;\n    onDegraded?: () => void;\n    circuitBreakDuration?: number;\n  });\n\n  constructor({\n    degradedThreshold = DEFAULT_DEGRADED_THRESHOLD,\n    retries = DEFAULT_MAX_RETRIES,\n    maximumConsecutiveFailures = DEFAULT_MAX_CONSECUTIVE_FAILURES,\n    onBreak,\n    onDegraded,\n    circuitBreakDuration = DEFAULT_CIRCUIT_BREAK_DURATION,\n  }: {\n    degradedThreshold?: number;\n    retries?: number;\n    maximumConsecutiveFailures?: number;\n    onBreak?: () => void;\n    onDegraded?: () => void;\n    circuitBreakDuration?: number;\n  } = {}) {\n    this.#policy = createServicePolicy({\n      maxRetries: retries,\n      maxConsecutiveFailures: maximumConsecutiveFailures,\n      circuitBreakDuration,\n      degradedThreshold,\n    });\n    if (onBreak) {\n      this.#policy.onBreak(onBreak);\n    }\n    if (onDegraded) {\n      this.#policy.onDegraded(onDegraded);\n    }\n  }\n\n  /**\n   * Listens for when the request to the API fails too many times in a row.\n   *\n   * @param args - The same arguments that {@link ServicePolicy.onBreak}\n   * takes.\n   * @returns What {@link ServicePolicy.onBreak} returns.\n   */\n  onBreak(\n    ...args: Parameters<ServicePolicy['onBreak']>\n  ): ReturnType<ServicePolicy['onBreak']> {\n    return this.#policy.onBreak(...args);\n  }\n\n  /**\n   * Listens for when the API is degraded.\n   *\n   * @param args - The same arguments that {@link ServicePolicy.onDegraded}\n   * takes.\n   * @returns What {@link ServicePolicy.onDegraded} returns.\n   */\n  onDegraded(\n    ...args: Parameters<ServicePolicy['onDegraded']>\n  ): ReturnType<ServicePolicy['onDegraded']> {\n    return this.#policy.onDegraded(...args);\n  }\n\n  /**\n   * Sets the native asset identifiers map for resolving native token CAIP-19 IDs.\n   * This should be called with data from NetworkEnablementController.state.nativeAssetIdentifiers.\n   *\n   * @param nativeAssetIdentifiers - Map of CAIP-2 chain IDs to native asset identifiers.\n   */\n  setNativeAssetIdentifiers(\n    nativeAssetIdentifiers: NativeAssetIdentifiersMap,\n  ): void {\n    this.#nativeAssetIdentifiers = nativeAssetIdentifiers;\n  }\n\n  /**\n   * Updates the supported networks cache by fetching from the API.\n   * This should be called periodically to keep the supported networks list fresh.\n   *\n   * @returns The updated supported networks response.\n   */\n  async updateSupportedNetworks(): Promise<SupportedNetworksResponse> {\n    return fetchSupportedNetworks();\n  }\n\n  /**\n   * Retrieves prices in the given currency for the tokens identified by the\n   * given addresses which are expected to live on the given chain.\n   *\n   * @param args - The arguments to function.\n   * @param args.assets - The assets to get prices for.\n   * @param args.currency - The desired currency of the token prices.\n   * @returns The prices for the requested tokens.\n   */\n  async fetchTokenPrices({\n    assets,\n    currency,\n  }: {\n    assets: EvmAssetAddressWithChain<SupportedChainId>[];\n    currency: SupportedCurrency;\n  }): Promise<EvmAssetWithMarketData<SupportedChainId, SupportedCurrency>[]> {\n    // Refresh supported networks in background (non-blocking)\n    // This ensures the list stays fresh during normal polling\n    // Note: fetchSupportedNetworks handles errors internally and always resolves\n    if (!lastFetchedSupportedNetworks) {\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      fetchSupportedNetworks();\n    }\n\n    // Get dynamically fetched supported chain IDs for V3\n    const supportedChainIdsV3 = getSupportedChainIdsV3AsHex();\n\n    const assetsWithIds: EvmAssetWithId<SupportedChainId>[] = assets\n      // Filter out assets that are not supported by V3 of the Price API.\n      .filter((asset) => supportedChainIdsV3.includes(asset.chainId))\n      .map((asset) => {\n        const caipChainId = toCaipChainId(\n          KnownCaipNamespace.Eip155,\n          hexToNumber(asset.chainId).toString(),\n        );\n\n        const nativeAddress = getNativeTokenAddress(asset.chainId);\n        const isNativeToken =\n          nativeAddress.toLowerCase() === asset.tokenAddress.toLowerCase();\n\n        let assetId: string | undefined;\n        if (isNativeToken) {\n          // For native tokens, use hardcoded SPOT_PRICES_SUPPORT_INFO when defined,\n          // otherwise use nativeAssetIdentifiers from NetworkEnablementController by default.\n          assetId =\n            SPOT_PRICES_SUPPORT_INFO[asset.chainId] ??\n            this.#nativeAssetIdentifiers[caipChainId];\n        } else {\n          // For ERC20 tokens, construct the CAIP-19 ID dynamically\n          assetId = `${caipChainId}/erc20:${asset.tokenAddress.toLowerCase()}`;\n        }\n\n        if (!assetId) {\n          return undefined;\n        }\n\n        return {\n          ...asset,\n          assetId: assetId as CaipAssetType,\n        };\n      })\n      .filter(\n        (asset): asset is EvmAssetWithId<SupportedChainId> =>\n          asset !== undefined,\n      );\n\n    if (assetsWithIds.length === 0) {\n      return [];\n    }\n\n    const url = new URL(`${BASE_URL_V3}/spot-prices`);\n    url.searchParams.append(\n      'assetIds',\n      assetsWithIds.map((asset) => asset.assetId).join(','),\n    );\n    url.searchParams.append('vsCurrency', currency);\n    url.searchParams.append('includeMarketData', 'true');\n\n    const addressCryptoDataMap: {\n      [assetId: CaipAssetType]: Omit<\n        MarketDataDetails,\n        'currency' | 'tokenAddress'\n      >;\n    } = await this.#policy.execute(() =>\n      handleFetch(url, { headers: { 'Cache-Control': 'no-cache' } }),\n    );\n\n    return assetsWithIds\n      .map((assetWithId) => {\n        const marketData = addressCryptoDataMap[assetWithId.assetId];\n\n        if (!marketData) {\n          return undefined;\n        }\n\n        return {\n          ...marketData,\n          ...assetWithId,\n          currency,\n        };\n      })\n      .filter((entry): entry is NonNullable<typeof entry> => Boolean(entry));\n  }\n\n  /**\n   * Retrieves exchange rates in the given base currency.\n   *\n   * @param args - The arguments to this function.\n   * @param args.baseCurrency - The desired base currency of the exchange rates.\n   * @param args.includeUsdRate - Whether to include the USD rate in the response.\n   * @param args.cryptocurrencies - The cryptocurrencies to get exchange rates for.\n   * @returns The exchange rates for the requested base currency.\n   */\n  async fetchExchangeRates({\n    baseCurrency,\n    includeUsdRate,\n    cryptocurrencies,\n  }: {\n    baseCurrency: SupportedCurrency;\n    includeUsdRate: boolean;\n    cryptocurrencies: string[];\n  }): Promise<ExchangeRatesByCurrency<SupportedCurrency>> {\n    // Refresh supported currencies in background (non-blocking)\n    // This ensures the list stays fresh during normal polling\n    // Note: fetchSupportedCurrencies handles errors internally and always resolves\n    if (!lastFetchedCurrencies) {\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      fetchSupportedCurrencies();\n    }\n\n    const url = new URL(`${BASE_URL_V1}/exchange-rates`);\n    url.searchParams.append('baseCurrency', baseCurrency);\n\n    const urlUsd = new URL(`${BASE_URL_V1}/exchange-rates`);\n    urlUsd.searchParams.append('baseCurrency', 'usd');\n\n    const [exchangeRatesResult, exchangeRatesResultUsd] =\n      await Promise.allSettled([\n        this.#policy.execute(() =>\n          handleFetch(url, { headers: { 'Cache-Control': 'no-cache' } }),\n        ),\n        ...(includeUsdRate && baseCurrency.toLowerCase() !== 'usd'\n          ? [\n              this.#policy.execute(() =>\n                handleFetch(urlUsd, {\n                  headers: { 'Cache-Control': 'no-cache' },\n                }),\n              ),\n            ]\n          : []),\n      ]);\n\n    // Handle resolved/rejected\n    const exchangeRates =\n      exchangeRatesResult.status === 'fulfilled'\n        ? exchangeRatesResult.value\n        : {};\n    const exchangeRatesUsd =\n      exchangeRatesResultUsd?.status === 'fulfilled'\n        ? exchangeRatesResultUsd.value\n        : {};\n\n    if (exchangeRatesResult.status === 'rejected') {\n      throw new Error('Failed to fetch');\n    }\n\n    const filteredExchangeRates = cryptocurrencies.reduce((acc, key) => {\n      if (exchangeRates[key.toLowerCase() as SupportedCurrency]) {\n        acc[key.toLowerCase() as SupportedCurrency] =\n          exchangeRates[key.toLowerCase() as SupportedCurrency];\n      }\n      return acc;\n    }, {} as ExchangeRatesByCurrency<SupportedCurrency>);\n\n    if (Object.keys(filteredExchangeRates).length === 0) {\n      throw new Error(\n        'None of the cryptocurrencies are supported by price api',\n      );\n    }\n\n    const filteredUsdExchangeRates = cryptocurrencies.reduce((acc, key) => {\n      if (exchangeRatesUsd[key.toLowerCase() as SupportedCurrency]) {\n        acc[key.toLowerCase() as SupportedCurrency] =\n          exchangeRatesUsd[key.toLowerCase() as SupportedCurrency];\n      }\n      return acc;\n    }, {} as ExchangeRatesByCurrency<SupportedCurrency>);\n\n    if (baseCurrency.toLowerCase() === 'usd') {\n      Object.keys(filteredExchangeRates).forEach((key) => {\n        filteredExchangeRates[key as SupportedCurrency] = {\n          ...filteredExchangeRates[key as SupportedCurrency],\n          usd: filteredExchangeRates[key as SupportedCurrency]?.value,\n        };\n      });\n      return filteredExchangeRates;\n    }\n    if (!includeUsdRate) {\n      return filteredExchangeRates;\n    }\n\n    const merged = Object.keys(filteredExchangeRates).reduce((acc, key) => {\n      acc[key as SupportedCurrency] = {\n        ...filteredExchangeRates[key as SupportedCurrency],\n        ...(filteredUsdExchangeRates[key as SupportedCurrency]?.value\n          ? { usd: filteredUsdExchangeRates[key as SupportedCurrency]?.value }\n          : {}),\n      };\n      return acc;\n    }, {} as ExchangeRatesByCurrency<SupportedCurrency>);\n\n    return merged;\n  }\n\n  /**\n   * Type guard for whether the API can return token prices for the given chain\n   * ID.\n   *\n   * @param chainId - The chain ID to check.\n   * @returns True if the API supports the chain ID, false otherwise.\n   */\n  validateChainIdSupported(chainId: unknown): chainId is SupportedChainId {\n    // Use dynamically fetched supported networks\n    const supportedChainIds = getSupportedChainIdsV3AsHex();\n    // Also include the hardcoded fallback list for backwards compatibility\n    const allSupportedChainIds: readonly string[] = [\n      ...new Set([...supportedChainIds, ...SUPPORTED_CHAIN_IDS]),\n    ];\n    return (\n      typeof chainId === 'string' && allSupportedChainIds.includes(chainId)\n    );\n  }\n\n  /**\n   * Type guard for whether the API can return token prices in the given\n   * currency.\n   *\n   * @param currency - The currency to check. If a string, can be either\n   * lowercase or uppercase.\n   * @returns True if the API supports the currency, false otherwise.\n   */\n  validateCurrencySupported(currency: unknown): currency is SupportedCurrency {\n    const supportedCurrencies = getSupportedCurrencies();\n    return (\n      typeof currency === 'string' &&\n      supportedCurrencies.includes(currency.toLowerCase())\n    );\n  }\n\n  /**\n   * Fetches the list of supported currencies from the API.\n   *\n   * @returns The list of supported currencies.\n   */\n  async updateSupportedCurrencies(): Promise<string[]> {\n    return fetchSupportedCurrencies();\n  }\n}\n"]}