@steerprotocol/sdk 1.30.2 → 1.30.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"VaultClient.js","sourceRoot":"","sources":["../../../src/base/VaultClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAKzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,cAAc,+BAA+B,CAAC;AAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,2CAA2C,CAAC;AAEnE,kCAAkC;AAClC,MAAM,oBAAoB,GAAG;IAC3B;QACE,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,yBAAyB;QACjC,QAAQ,EAAE;YACR;gBACE,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,SAAS;gBACjB,cAAc,EAAE,SAAS;aAC1B;SACF;QACD,SAAS,EAAE;YACT;gBACE,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS;gBACjB,cAAc,EAAE,SAAS;aAC1B;YACD;gBACE,MAAM,EAAE,cAAc;gBACtB,MAAM,EAAE,SAAS;gBACjB,cAAc,EAAE,SAAS;aAC1B;SACF;QACD,iBAAiB,EAAE,MAAM;KAC1B;IACD;QACE,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,kBAAkB;QAC1B,SAAS,EAAE;YACT;gBACE,cAAc,EAAE,SAAS;gBACzB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,cAAc,EAAE,SAAS;gBACzB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,SAAS;aAClB;SACF;QACD,iBAAiB,EAAE,YAAY;QAC/B,MAAM,EAAE,UAAU;KACnB;CAEO,CAAC;AAqOX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,MAAM,OAAO,WAAY,SAAQ,cAAc;IAU7C;;;;;;;OAOG;IACH,YACE,YAA0B,EAC1B,YAA0B,EAC1B,WAAyC,EACzC,UAAgB,IAAI,EACpB,iBAA0B;QAE1B,MAAM,cAAc,GAAG,YAA2C,CAAC;QACnE,KAAK,CAAC,cAAc,CAAC,CAAC;QAEtB,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACxE,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC1E,IAAI,CAAC,wBAAwB,GAAG,IAAI,wBAAwB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACzF,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACrD,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,EAAE,CAAC;IACnD,CAAC;IAEO,sBAAsB,CAAC,KAAa;QAC1C,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAEO,mBAAmB,CAAC,QAAiB;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAClD,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,KAAK,kBAAkB,CACnF,CAAC;QAEF,OAAO,eAAe,IAAI,IAAI,CAAC;IACjC,CAAC;IAEO,sBAAsB,CAAC,QAAiB;QAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,cAAc,EAAE,cAAc,EAAE,CAAC;YACnC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,cAAc,EAAE,0BAA0B,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,gBAAgB,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC5C,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,WAAW,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;QAC9D,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,4BAA4B,CAAC,QAAiB;QACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC9E,OAAO,cAAc,EAAE,cAAc,IAAI,IAAI,CAAC;IAChD,CAAC;IAEO,mBAAmB,CAAC,MAAoB;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QACrC,MAAM,SAAS,GAAmB,EAAE,GAAG,IAAI,EAAE,CAAC;QAE9C,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC;YACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;YACtE,IAAI,iBAAiB,EAAE,CAAC;gBACtB,SAAS,CAAC,UAAU,GAAG,iBAAiB,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,0BAA0B,CAChC,KAAgB,EAChB,cAAsB,EACtB,gBAAiC;QAEjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;QACrE,MAAM,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3E,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAExE,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,IAAI,EAAE,CAAC,CAAC;QAC/F,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACvD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,gBAAgB,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,cAAc,GAAG,gBAAgB;YACrC,CAAC,CAAC,uBAAuB,CAAC,gBAAgB,CAAC;YAC3C,CAAC,CAAC,cAAc,CAAC;QACnB,MAAM,wBAAwB,GAAG,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAE7E,OAAO,wBAAwB,CAAC,MAAM,GAAG,CAAC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IACxG,CAAC;IAEO,mBAAmB,CAAC,gBAAkC,EAAE,QAAiB;QAC/E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACzD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CACvE,CAAC;QAEF,OAAO;YACL,GAAG,gBAAgB;YACnB,KAAK,EAAE,aAAa;SACrB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACI,KAAK,CAAC,SAAS,CACpB,MAAoB,EACpB,QAAgB,EAAE,EAClB,KAAqB;QAErB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAEnD,iFAAiF;QACjF,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YAC3D,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;YACnC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SACrI,CAAC,CAAC;QAEH,6BAA6B;QAC7B,MAAM,SAAS,GAAgB,SAAS,CAAC,MAAM,KAAK,WAAW,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI;YAChH,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI;YACtB,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,cAAc,GAAgB,cAAc,CAAC,MAAM,KAAK,WAAW,IAAI,cAAc,CAAC,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI;YACpI,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI;YAC3B,CAAC,CAAC,EAAE,CAAC;QAEP,+BAA+B;QAC/B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3E,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1F,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,sCAAsC,QAAQ,EAAE,OAAO,IAAI,eAAe,eAAe,aAAa,EAAE,OAAO,IAAI,eAAe,EAAE;aAC5I,CAAC;QACJ,CAAC;QAED,4DAA4D;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAEvE,0CAA0C;QAC1C,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAChD,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAC5H,CAAC;QAEF,+DAA+D;QAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAE1E,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,mBAAmB,CAC/B,SAA0B;QAE1B,IAAI,CAAC;YACH,MAAM,SAAS,GAAgB,EAAE,CAAC;YAClC,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,MAAM,GAAkB,IAAI,CAAC;YACjC,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,0BAA0B;YAEjD,OAAO,WAAW,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAE3E,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACxC,sEAAsE;oBACtE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzB,MAAM;oBACR,CAAC;oBACD,OAAO;wBACL,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,iCAAiC;qBAC3D,CAAC;gBACJ,CAAC;gBAED,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACjD,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5C,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC5D,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qCAAqC;aACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,gBAAgB,CAC5B,SAA0B,EAC1B,QAAgB,EAAE,EAClB,KAAqB;QAErB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC3C,MAAM,EAAE,SAAS;gBACjB,KAAK;gBACL,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC3B,OAAO;oBACL,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,2BAA2B;iBACnC,CAAC;YACJ,CAAC;YAED,gDAAgD;YAChD,MAAM,eAAe,GAAqB;gBACxC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC7C,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,IAAI,EAAE;wBACJ,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;wBAChB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;wBAC1B,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;wBACpC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;wBAC5B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;wBAChC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB;wBAC5C,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;wBAC1B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS;wBACrC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS;wBAC7C,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS;wBACzC,IAAI,EAAE;4BACJ,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE;4BAC5B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE;4BAC9C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE;4BACtC,IAAI,EAAE,SAAS,EAAE,gCAAgC;4BACjD,SAAS,EAAE,SAAS,EAAE,gCAAgC;4BACtD,SAAS,EAAE,SAAS,EAAE,gCAAgC;4BACtD,mBAAmB,EAAE,SAAS,CAAC,gCAAgC;yBAChE;wBACD,MAAM,EAAE;4BACN,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;4BAC9B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;4BACtC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;4BAClC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC;4BACzC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE;4BACxC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;yBACxC;wBACD,MAAM,EAAE;4BACN,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;4BAC9B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;4BACtC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;4BAClC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC;4BACzC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE;4BACxC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;yBACxC;qBACF;iBACF,CAAC,CAAC;gBACH,QAAQ,EAAE;oBACR,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW;oBACtD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI;iBAC3D;gBACD,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;aAC5C,CAAC;YAEF,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;aACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,iBAAiB,CAAC,SAAsB,EAAE,cAA2B;QAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;QAE9C,4CAA4C;QAC5C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACjD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,kDAAkD;QAClD,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,uEAAuE;gBACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;gBACpC,MAAM,MAAM,GAAc;oBACxB,GAAG,QAAQ;oBACX,IAAI,EAAE;wBACJ,GAAG,QAAQ,CAAC,IAAI;wBAChB,iFAAiF;wBACjF,IAAI,EAAE;4BACJ,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;4BAC9C,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;4BACzE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;4BAC7D,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;4BACpD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;4BACnE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;4BACnE,mBAAmB,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB;yBAClG;wBACD,+DAA+D;wBAC/D,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;wBAChD,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;wBAC5D,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;wBACtD,iEAAiE;wBACjE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS;wBACzD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS;wBACzD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;qBAC3C;iBACF,CAAC;gBACF,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,oEAAoE;QACpE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACvC,GAAG,IAAI;YACP,MAAM,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE;SACvF,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,MAAmB,EAAE,KAAa,EAAE,KAAqB;QAC9E,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,oDAAoD;QACpD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;YACpE,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvB,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QACvD,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtG,OAAO;YACL,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE;gBACR,WAAW;gBACX,SAAS;aACV;YACD,UAAU,EAAE,MAAM,CAAC,MAAM;SAC1B,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,wBAAwB,CACpC,MAAoB;QAEpB,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YAED,8BAA8B;YAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAErC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,kCAAkC;YAClC,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAElE,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;YAED,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpF,iCAAiC;YACjC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC;gBAC7E,WAAW;gBACX,OAAO;gBACP,cAAc,EAAE,KAAK;gBACrB,mBAAmB,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBACjD,WAAW,EAAE,iBAAiB;aAC/B,CAAC,CAAC;YAEH,6CAA6C;YAC7C,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEnF,+CAA+C;YAC/C,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CACpD,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAChD,OAAO,CAAC,IAAI,CAAC,oCAAoC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;gBACrE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACxC,CAAC,CAAC,CACH,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAElD,wDAAwD;YACxD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;YACzC,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC3C,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;oBACxC,SAAS,EAAE,IAAI,EAAE,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;wBAClE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACpE,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,6CAA6C;YAC7C,MAAM,UAAU,GAAgB,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAClE,yCAAyC;gBACzC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC7C,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;oBAClC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;oBAClC,cAAc,EAAE,GAAG,CAAC,cAAc;iBACnC,CAAC,CAAC,CAAC;gBAEJ,oCAAoC;gBACpC,IAAI,SAAqE,CAAC;gBAC1E,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACnD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACnD,SAAS,GAAG;wBACV,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;wBACrC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;qBACtC,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,MAAM,EAAE,YAAY,OAAO,IAAI,KAAK,EAAE;oBACtC,IAAI,EAAE;wBACJ,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,OAAO,EAAE,OAAO;wBAChB,YAAY,EAAE,KAAK,CAAC,EAAE;wBACtB,QAAQ,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;wBAChC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;wBAClC,gBAAgB,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;wBACxC,IAAI,EAAE,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,EAAE;wBACnD,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;wBAC1C,UAAU,EAAE,SAAS;wBACrB,QAAQ,EAAE,SAAS;wBACnB,SAAS;wBACT,SAAS;wBACT,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;4BACjC,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,KAAK,EAAE,KAAK,CAAC,KAAK;yBACnB,CAAC,CAAC,CAAC,SAAS;wBACb,IAAI,EAAE;4BACJ,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;4BACpB,WAAW,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;4BAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;4BAC5B,IAAI,EAAE,SAAS;4BACf,SAAS,EAAE,SAAS;4BACpB,SAAS,EAAE,SAAS;4BACpB,mBAAmB,EAAE,SAAS;yBAC/B;wBACD,MAAM,EAAE;4BACN,EAAE,EAAE,KAAK,CAAC,MAAM;4BAChB,MAAM,EAAE,KAAK,CAAC,YAAY;4BAC1B,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,yDAAyD;4BACnF,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE;4BAC9C,OAAO,EAAE,KAAK,CAAC,MAAM;4BACrB,OAAO,EAAE,OAAO;yBACjB;wBACD,MAAM,EAAE;4BACN,EAAE,EAAE,KAAK,CAAC,MAAM;4BAChB,MAAM,EAAE,KAAK,CAAC,YAAY;4BAC1B,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,yDAAyD;4BACnF,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE;4BAC9C,OAAO,EAAE,KAAK,CAAC,MAAM;4BACrB,OAAO,EAAE,OAAO;yBACjB;qBACF;iBACF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sCAAsC;aACvF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,qBAAqB,CACjC,MAAoB,EACpB,QAAgB,EAAE,EAClB,KAAqB;QAErB,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;YAED,8BAA8B;YAE9B,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAErC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,kCAAkC;YAClC,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAElE,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;YAED,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpF,iCAAiC;YACjC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC;gBAC7E,WAAW;gBACX,OAAO;gBACP,cAAc,EAAE,KAAK;gBACrB,mBAAmB,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBACjD,WAAW,EAAE,iBAAiB;aAC/B,CAAC,CAAC;YAEH,6CAA6C;YAC7C,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEnF,+CAA+C;YAC/C,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CACpD,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAChD,OAAO,CAAC,IAAI,CAAC,oCAAoC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;gBACrE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACxC,CAAC,CAAC,CACH,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAElD,wDAAwD;YACxD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;YACzC,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC3C,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;oBACxC,SAAS,EAAE,IAAI,EAAE,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;wBAClE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACpE,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,6EAA6E;YAC7E,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,CAC3E,cAAc,EACd,OAAO,EACP,KAAK,EACL,MAAM,EACN,KAAK,CACN,CAAC;YAEF,0CAA0C;YAC1C,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC3B,gBAAgB,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC3D,GAAG,IAAI;oBACP,IAAI,EAAE;wBACJ,GAAG,IAAI,CAAC,IAAI;wBACZ,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;qBAC7E;iBACF,CAAC,CAAC,CAAC;YACN,CAAC;YAED,MAAM,wBAAwB,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAE9F,OAAO;gBACL,IAAI,EAAE,wBAAwB;gBAC9B,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACI,KAAK,CAAC,SAAS,CACpB,MAAoB,EACpB,QAAgB,EAAE,EAClB,KAAqB;QAErB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC3C,MAAM;gBACN,KAAK;gBACL,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC3B,OAAO;oBACL,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,gDAAgD;YAChD,MAAM,eAAe,GAAqB;gBACxC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC7C,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,IAAI,EAAE;wBACJ,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;wBAChB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;wBACxB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;wBACpB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;wBAC5B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;wBAC1B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;qBAC3B;iBACF,CAAC,CAAC;gBACH,QAAQ,EAAE;oBACR,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW;oBACtD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI;iBAC3D;gBACD,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;aAC5C,CAAC;YAEF,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,mDAAmD;aAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACI,KAAK,CAAC,QAAQ,CACnB,MAAmB,EACnB,QAAgB,EAAE,EAClB,KAAqB;QAErB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC1C,MAAM;gBACN,KAAK;gBACL,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;gBAC1B,OAAO;oBACL,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,gDAAgD;YAChD,MAAM,eAAe,GAAoB;gBACvC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC5C,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,IAAI,EAAE;wBACJ,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;wBAChB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;wBAC1B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;wBAC1B,MAAM,EAAE;4BACN,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;4BAC9B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;4BACtC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;4BAClC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC;4BACzC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE;4BACxC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;yBACxC;wBACD,MAAM,EAAE;4BACN,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;4BAC9B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;4BACtC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;4BAClC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC;4BACzC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE;4BACxC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;yBACxC;qBACF;iBACF,CAAC,CAAC;gBACH,QAAQ,EAAE;oBACR,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;oBACrD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI;iBAC1D;gBACD,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;aAC3C,CAAC;YAEF,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kDAAkD;aAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACI,KAAK,CAAC,YAAY,CACvB,MAAoB,EACpB,YAAoB,GAAG;QAEvB,IAAI,CAAC;YACH,MAAM,SAAS,GAAgB,EAAE,CAAC;YAClC,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,MAAM,GAAkB,IAAI,CAAC;YAEjC,OAAO,WAAW,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAEjE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACxC,OAAO;wBACL,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,wBAAwB;qBAClD,CAAC;gBACJ,CAAC;gBAED,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9D,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACjD,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5C,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,YAAY,CACvB,MAAoB,EACpB,YAAoB,GAAG;QAEvB,IAAI,CAAC;YACH,MAAM,SAAS,GAAgB,EAAE,CAAC;YAClC,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,MAAM,GAAkB,IAAI,CAAC;YAEjC,OAAO,WAAW,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAEjE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACxC,OAAO;wBACL,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,wBAAwB;qBAClD,CAAC;gBACJ,CAAC;gBAED,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9D,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACjD,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5C,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CACtB,MAAmB,EACnB,YAAoB,GAAG;QAEvB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAe,EAAE,CAAC;YAChC,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,MAAM,GAAkB,IAAI,CAAC;YAEjC,OAAO,WAAW,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAEhE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACxC,OAAO;wBACL,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,uBAAuB;qBACjD,CAAC;gBACJ,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7D,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACjD,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5C,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,qDAAqD;aAC7D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACI,KAAK,CAAC,OAAO,CAAC,MAAiB;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YAErC,oBAAoB;YACpB,MAAM,MAAM,GAAG,6CAA6C,OAAO,YAAY,QAAQ,EAAE,CAAC;YAE1F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;gBACnC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;oBACL,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,uBAAuB,QAAQ,CAAC,UAAU,EAAE;iBACpD,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAgB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEhD,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,IAAI;aACd,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,iDAAiD;aACzD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACI,KAAK,CAAC,oBAAoB,CAAC,MAAkC;QAClE,IAAI,CAAC;YACH,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAEzC,oBAAoB;YACpB,MAAM,MAAM,GAAG,iEAAiE,YAAY,YAAY,OAAO,EAAE,CAAC;YAElH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;gBACnC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;oBACL,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,uBAAuB,QAAQ,CAAC,UAAU,EAAE;iBACpD,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAiC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEjE,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,IAAI;aACd,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uCAAuC;aACxF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,eAAe;QAC1B,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;KAwBb,CAAC;QAEF,OAAO,IAAI,CAAC,oBAAoB,CAAI,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,OAAO,CAAC,MAA0B;QAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB,CAAC,MAA0B;QAoBtD,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,eAAe,CAAC,YAAqB,EAAE,UAAmB;QACrE,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACzF,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,6BAA6B,CAAC,CAAC;YACxE,CAAC;YAED,OAAO;gBACL,IAAI,EAAE;oBACJ,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,YAAY;oBACxC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK;iBAChC;gBACD,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ,CAAC,MAA2B;QAC/C,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,iBAAiB,CAAC,MAA2B;QAqBxD,OAAO,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAC1B,YAAqB,EACrB,OAAe;QAEf,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,OAAO,CAAC,MAA0B;QAC7C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAErD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;gBAC3D,OAAO,EAAE,MAAM,CAAC,YAAY;gBAC5B,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;gBACrC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;aACpB,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAE5D,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAS,CAAC,MAA4B;QACjD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBACrD,OAAO,EAAE,MAAM,CAAC,YAAY;gBAC5B,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;aACrC,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAS,CAAC,MAA0B;QAC/C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBACnD,OAAO,EAAE,MAAM,CAAC,YAAY;gBAC5B,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;aACvB,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,WAAW,CAAC,YAAqB;QAC5C,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBACvD,OAAO,EAAE,YAAY;gBACrB,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,aAAa;aAC5B,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ,CAAC,YAAqB;QACzC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBACpD,OAAO,EAAE,YAAY;gBACrB,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,UAAU;aACzB,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAM,CAAC,YAAqB;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBAClD,OAAO,EAAE,YAAY;gBACrB,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,QAAQ;aACvB,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,IAAI,CAAC,YAAqB;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBAClD,OAAO,EAAE,YAAY;gBACrB,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,MAAM;aACrB,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,YAAqB;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBAChD,OAAO,EAAE,YAAY;gBACrB,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,MAAM;aACrB,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,eAAe,CAAC,MAA0B;QACrD,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,2BAA2B,CACtC,YAAqB,EACrB,MAAc,EACd,UAAmB;QAEnB,OAAO,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1F,CAAC;IAED,+BAA+B;IAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,KAAK,CAAC,yBAAyB,CACpC,MAAgC,EAChC,WAAoB;QAEpB,OAAO,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACI,KAAK,CAAC,kBAAkB,CAAC,MAAgC;QAC9D,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,2BAA2B,CAAC,MAAgC;QACvE,OAAO,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAED;;;;;OAKG;IACI,gCAAgC,CAAC,MAAgC;QACtE,OAAO,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAED,4BAA4B;IAE5B;;;;;;;;;;;;;;;;;;;OAmBG;IACI,KAAK,CAAC,uBAAuB,CAAC,MAA4B;QAC/D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBAClD,OAAO,EAAE,MAAM,CAAC,YAAY;gBAC5B,GAAG,EAAE,oBAAoB;gBACzB,YAAY,EAAE,yBAAyB;gBACvC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;aACpB,CAAqB,CAAC;YAEvB,OAAO;gBACL,IAAI,EAAE;oBACJ,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;oBAClB,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;iBACxB;gBACD,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+DAA+D;YAC/D,OAAO,CAAC,IAAI,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAC;YAC9E,OAAO;gBACL,IAAI,EAAE;oBACJ,OAAO,EAAE,EAAE;oBACX,YAAY,EAAE,EAAE;iBACjB;gBACD,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,KAAK,CAAC,4BAA4B,CAAC,MAA0B;QAClE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAErD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;gBAC3D,OAAO,EAAE,MAAM,CAAC,YAAY;gBAC5B,GAAG,EAAE,oBAAoB;gBACzB,YAAY,EAAE,kBAAkB;gBAChC,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;aACpB,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAE5D,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;YACpE,2FAA2F;YAC3F,OAAO,CAAC,IAAI,CAAC,6DAA6D,EAAE,KAAK,CAAC,CAAC;YACnF,OAAO;gBACL,IAAI,EAAE;oBACJ,OAAO,EAAE,EAAE;oBACX,YAAY,EAAE,EAAE;iBACjB;gBACD,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CAEF","sourcesContent":["import { createClient } from '@steerprotocol/api-sdk';\nimport { Pool as PoolV3 } from \"@uniswap/v3-sdk\";\nimport type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { chainIdToName, getBeaconNameByProtocol, getProtocolTypeByBeacon } from '../const';\nimport { getAmmConfig } from '../const/amm/configs/ammConfig.js';\nimport { getProtocolsForChainId } from '../const/amm/utils/protocol';\nimport { ChainId, MultiPositionManagers, Protocol } from '../const/chain';\nimport { steerSubgraphConfig } from '../const/subgraph';\nimport { SubgraphVaultClient } from '../utils/SubgraphVaultClient';\nimport { getApiUrl } from '../const/api.js';\nimport { abis } from '../const/deployments/abis.js';\nimport { SteerResponse, VaultDetailsResponse } from '../types.js';\nimport { SubgraphClient } from './SubgraphClient.js';\nimport { VaultDepositClient } from './vault/deposit/index.js';\nimport { PoolInstanceParams, VaultDepositParams } from './vault/deposit/types.js';\nimport { SingleAssetDepositClient } from './vault/single-asset/index.js';\nimport type {\n SingleAssetDepositParams,\n SingleAssetDepositPreview\n} from './vault/single-asset/types.js';\nimport { VaultWithdrawClient } from './vault/withdraw/index.js';\nimport { TokensFromLpResponse, VaultWithdrawParams } from './vault/withdraw/types.js';\nexport * from \"./vault/single-asset/index.js\";\n\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\n\n// Custom ABI for reward functions\nconst REWARD_FUNCTIONS_ABI = [\n {\n \"type\": \"function\",\n \"name\": \"calculatePendingRewards\",\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"rewards\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"extraRewards\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimUserRewards\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n \n] as const;\n\nexport interface VaultApproveParams {\n vaultAddress: Address;\n spender: Address;\n amount: bigint;\n}\n\nexport interface VaultAllowanceParams {\n vaultAddress: Address;\n owner: Address;\n spender: Address;\n}\n\nexport interface VaultBalanceParams {\n vaultAddress: Address;\n account: Address;\n}\n\n// Pagination interfaces matching API SDK types\nexport interface ApiPageInfo {\n hasNextPage: boolean;\n endCursor: string | null;\n}\n\nexport interface VaultNode {\n id: string;\n chainId: number;\n vaultAddress: string;\n protocol: string;\n beaconName: string;\n protocolBaseType: string;\n name: string;\n feeApr?: number;\n stakingApr?: number;\n merklApr?: number;\n /** Raw positions from the subgraph. Only available when sourced from subgraph. */\n positions?: {\n id: string;\n upperTick: number;\n lowerTick: number;\n relativeWeight: string;\n }[];\n /** Computed tick range across all current positions (min lower / max upper). Only available when sourced from subgraph. */\n tickRange?: {\n minLowerTick: number;\n maxUpperTick: number;\n };\n /** Cumulative fees collected by the vault. Only available when sourced from subgraph. */\n fees?: {\n fees0: string;\n fees1: string;\n };\n pool: {\n poolAddress: string;\n id: string;\n feeTier: string;\n tick?: string;\n liquidity?: string;\n volumeUSD?: string;\n totalValueLockedUSD?: string;\n };\n token0: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n token1: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n}\n\nexport interface VaultEdge {\n cursor: string;\n node: VaultNode;\n}\n\nexport interface VaultsConnection {\n edges: readonly VaultEdge[];\n pageInfo: ApiPageInfo;\n totalCount: number;\n}\n\nexport interface TokenNode {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n chainId: number;\n address: string;\n}\n\nexport interface TokenEdge {\n cursor: string;\n node: TokenNode;\n}\n\nexport interface TokensConnection {\n edges: readonly TokenEdge[];\n pageInfo: ApiPageInfo;\n totalCount: number;\n}\n\nexport interface PoolNode {\n id: string;\n chainId: number;\n feeTier: string;\n token0: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n token1: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n}\n\nexport interface PoolEdge {\n cursor: string;\n node: PoolNode;\n}\n\nexport interface PoolsConnection {\n edges: readonly PoolEdge[];\n pageInfo: ApiPageInfo;\n totalCount: number;\n}\n\nexport interface VaultFilter {\n chainId?: number;\n protocol?: string;\n isActive?: boolean;\n beaconName?: string;\n}\n\n// API-specific filter that excludes protocol field\nexport interface ApiVaultFilter {\n chainId?: number;\n isActive?: boolean;\n beaconName?: string;\n}\n\nexport interface TokenFilter {\n chainId?: number;\n symbol?: string;\n}\n\nexport interface PoolFilter {\n chainId?: number;\n protocol?: string;\n minLiquidity?: string;\n}\n\nexport interface VaultApr {\n apr: {\n apr: number;\n message: string;\n };\n beaconName: string;\n vaultAddress: string;\n}\n\nexport interface AprResponse {\n vaults: VaultApr[];\n}\n\nexport interface AprFilter {\n chainId: number;\n protocol: string;\n}\n\nexport interface PendingRewardsParams {\n vaultAddress: Address;\n user: Address;\n}\n\nexport interface PendingRewardsResponse {\n rewards: bigint;\n extraRewards: bigint;\n}\n\nexport interface ClaimRewardsParams {\n vaultAddress: Address;\n}\n\nexport interface BlackholeAprDetailedParams {\n vaultAddress: Address;\n chainId: number;\n}\n\nexport interface BlackholeSnapshotAnalysis {\n period: number;\n fromTimestamp: number;\n toTimestamp: number;\n fromDate: string;\n toDate: string;\n durationSeconds: number;\n durationHours: number;\n tvlUSD: number;\n feesUSD: number;\n apr: number;\n}\n\nexport interface BlackholeAprDetailedResponse {\n vaultAddress: string;\n beaconName: string;\n apr: {\n apr: number;\n message: string;\n };\n snapshotAnalysis: BlackholeSnapshotAnalysis[];\n}\n\n/**\n * Client for interacting with Steer Protocol's Vault system.\n * This client provides functionality for vault operations, deposit/withdraw, and comprehensive data fetching.\n * \n * **Features:**\n * - Vault data includes associated pool information (pool address, fee tier) along with token details\n * - Full pagination support for all data fetching methods\n * - API client integration for efficient data retrieval\n * - Backward compatibility with subgraph queries\n * \n * **Available API Client Methods:**\n * - `getVaults()` - Get vaults with pagination and filtering\n * - `getTokens()` - Get tokens with pagination and filtering\n * - `getPools()` - Get pools with pagination and filtering\n * - `getAllVaults()` - Get all vaults (auto-pagination)\n * - `getAllTokens()` - Get all tokens (auto-pagination)\n * - `getAllPools()` - Get all pools (auto-pagination)\n * \n * @example\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { VaultClient } from '@steerprotocol/sdk';\n * \n * // Create viem clients\n * const publicClient = createPublicClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * const walletClient = createWalletClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * // Initialize the Vault client\n * const vaultClient = new VaultClient(publicClient, walletClient, 'production');\n * \n * // Get vaults with pagination - includes pool information\n * const vaults = await vaultClient.getVaults({ chainId: 1 }, 10, null);\n * \n * if (vaults.success && vaults.data) {\n * vaults.data.edges.forEach((edge) => {\n * const vault = edge.node;\n * console.log(`${vault.token0.symbol}/${vault.token1.symbol} vault`);\n * console.log(`Pool: ${vault.pool.id} (${vault.pool.feeTier} fee tier)`);\n * console.log(`Protocol: ${vault.protocol} (${vault.beaconName})`);\n * });\n * }\n * \n * // Get all tokens for a chain\n * const allTokens = await vaultClient.getAllTokens({ chainId: 1 });\n * \n * // Get pools with specific filters\n * const pools = await vaultClient.getPools({ \n * chainId: 1, \n * protocol: 'uniswap-v3' \n * });\n * \n * // Traditional vault operations\n * const depositTx = await vaultClient.deposit(depositParams);\n * const withdrawTx = await vaultClient.withdraw(withdrawParams);\n * ```\n * \n * @group Client\n */\nexport class VaultClient extends SubgraphClient {\n protected readonly apiClient: ReturnType<typeof createClient>;\n protected readonly publicClient: PublicClient;\n protected readonly walletClient: WalletClient;\n private readonly depositClient: VaultDepositClient;\n private readonly withdrawClient: VaultWithdrawClient;\n public readonly singleAssetDepositClient: SingleAssetDepositClient;\n private readonly subgraphVaultClient: SubgraphVaultClient;\n private readonly subgraphStudioKey: string;\n\n /**\n * Creates a new instance of VaultClient\n * @param publicClient - The public client for reading from the blockchain\n * @param walletClient - The wallet client for writing to the blockchain\n * @param environment - The environment to use ('production' or 'development')\n * @param version - Optional API version to use (defaults to 'v1')\n * @param subgraphStudioKey - Optional subgraph studio key for protocol data fetching\n */\n constructor(\n publicClient: PublicClient, \n walletClient: WalletClient,\n environment: 'production' | 'development',\n version: 'v1' = 'v1',\n subgraphStudioKey?: string\n ) {\n const combinedClient = publicClient as PublicClient & WalletClient;\n super(combinedClient);\n \n const apiUrl = getApiUrl(environment, version);\n this.apiClient = createClient(apiUrl);\n this.publicClient = publicClient;\n this.walletClient = walletClient;\n this.depositClient = new VaultDepositClient(publicClient, walletClient);\n this.withdrawClient = new VaultWithdrawClient(publicClient, walletClient);\n this.singleAssetDepositClient = new SingleAssetDepositClient(publicClient, walletClient);\n this.subgraphVaultClient = new SubgraphVaultClient();\n this.subgraphStudioKey = subgraphStudioKey || '';\n }\n\n private normalizeProtocolValue(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n }\n\n private resolveProtocolEnum(protocol?: string): Protocol | null {\n if (!protocol) {\n return null;\n }\n\n const normalizedProtocol = this.normalizeProtocolValue(protocol);\n const matchedProtocol = Object.values(Protocol).find(\n protocolValue => this.normalizeProtocolValue(protocolValue) === normalizedProtocol\n );\n\n return matchedProtocol || null;\n }\n\n private getProtocolBeaconNames(protocol?: string): string[] {\n const resolvedProtocol = this.resolveProtocolEnum(protocol);\n if (!resolvedProtocol) {\n return [];\n }\n\n const protocolConfig = getAmmConfig(this.subgraphStudioKey)[resolvedProtocol];\n const beaconNames: string[] = [];\n\n if (protocolConfig?.beaconContract) {\n beaconNames.push(protocolConfig.beaconContract);\n }\n\n if (protocolConfig?.beaconContractSushiManaged) {\n beaconNames.push(protocolConfig.beaconContractSushiManaged);\n }\n\n if (resolvedProtocol === Protocol.Blackhole) {\n beaconNames.push(MultiPositionManagers.MultiPositionBlackholeOld);\n }\n\n const beaconAlias = getBeaconNameByProtocol(resolvedProtocol);\n if (beaconAlias) {\n beaconNames.push(beaconAlias);\n }\n\n return [...new Set(beaconNames.filter(name => name.length > 0))];\n }\n\n private getPrimaryProtocolBeaconName(protocol?: string): string | null {\n const resolvedProtocol = this.resolveProtocolEnum(protocol);\n if (!resolvedProtocol) {\n return null;\n }\n\n const protocolConfig = getAmmConfig(this.subgraphStudioKey)[resolvedProtocol];\n return protocolConfig?.beaconContract || null;\n }\n\n private buildApiVaultFilter(filter?: VaultFilter): ApiVaultFilter | undefined {\n if (!filter) {\n return undefined;\n }\n\n const { protocol, ...rest } = filter;\n const apiFilter: ApiVaultFilter = { ...rest };\n\n if (!apiFilter.beaconName && protocol) {\n const primaryBeaconName = this.getPrimaryProtocolBeaconName(protocol);\n if (primaryBeaconName) {\n apiFilter.beaconName = primaryBeaconName;\n }\n }\n\n return apiFilter;\n }\n\n private vaultMatchesProtocolFilter(\n vault: VaultNode,\n protocolFilter: string,\n resolvedProtocol: Protocol | null\n ): boolean {\n const normalizedFilter = this.normalizeProtocolValue(protocolFilter);\n const normalizedBeaconName = this.normalizeProtocolValue(vault.beaconName);\n const resolvedVaultProtocol = getProtocolTypeByBeacon(vault.beaconName);\n\n const directCandidates = [vault.protocol, vault.protocolBaseType, resolvedVaultProtocol || ''];\n const hasDirectMatch = directCandidates.some(candidate => {\n if (!candidate) {\n return false;\n }\n return this.normalizeProtocolValue(candidate) === normalizedFilter;\n });\n\n if (hasDirectMatch) {\n return true;\n }\n\n const expectedBeacon = resolvedProtocol\n ? getBeaconNameByProtocol(resolvedProtocol)\n : protocolFilter;\n const normalizedExpectedBeacon = this.normalizeProtocolValue(expectedBeacon);\n\n return normalizedExpectedBeacon.length > 0 && normalizedBeaconName.includes(normalizedExpectedBeacon);\n }\n\n private applyProtocolFilter(vaultsConnection: VaultsConnection, protocol?: string): VaultsConnection {\n if (!protocol) {\n return vaultsConnection;\n }\n\n const resolvedProtocol = this.resolveProtocolEnum(protocol);\n const filteredEdges = vaultsConnection.edges.filter(edge =>\n this.vaultMatchesProtocolFilter(edge.node, protocol, resolvedProtocol)\n );\n\n return {\n ...vaultsConnection,\n edges: filteredEdges\n };\n }\n\n /**\n * Gets vaults with pagination support\n * Fetches ALL data from both API (database) and subgraph in parallel, merges without duplicates, then paginates\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated vaults data\n * \n * @example\n * ```typescript\n * // Get first 20 vaults for Ethereum\n * const vaults = await vaultClient.getVaults({ chainId: 1 }, 20);\n * \n * if (vaults.success && vaults.data) {\n * vaults.data.edges.forEach((edge) => {\n * const vault = edge.node;\n * console.log(`Vault: ${vault.name}`);\n * console.log(`Pool: ${vault.pool.id}`);\n * console.log(`Pool Fee Tier: ${vault.pool.feeTier}`);\n * console.log(`Tokens: ${vault.token0.symbol}/${vault.token1.symbol}`);\n * });\n * }\n * \n * // Get next page using cursor\n * if (vaults.data?.pageInfo.hasNextPage) {\n * const nextPage = await vaultClient.getVaults(\n * { chainId: 1 }, \n * 20, \n * vaults.data.pageInfo.endCursor\n * );\n * }\n * \n * // For additional pool details (liquidity, volume, etc.), use the PoolClient:\n * // const poolDetails = await poolClient.getPoolById(vault.pool.id, protocol, chainId);\n * ```\n */\n public async getVaults(\n filter?: VaultFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<VaultsConnection>> {\n const apiFilter = this.buildApiVaultFilter(filter);\n\n // Fetch ALL vaults from both sources in parallel (no pagination at source level)\n const [apiResult, subgraphResult] = await Promise.allSettled([\n this.getAllVaultsFromApi(apiFilter),\n filter?.chainId !== ChainId.Avalanche ? this.getAllVaultsFromSubgraph(filter) : Promise.reject(new Error('Avalanche not supported'))\n ]);\n\n // Extract successful results\n const apiVaults: VaultEdge[] = apiResult.status === 'fulfilled' && apiResult.value.success && apiResult.value.data \n ? apiResult.value.data\n : [];\n \n const subgraphVaults: VaultEdge[] = subgraphResult.status === 'fulfilled' && subgraphResult.value.success && subgraphResult.value.data \n ? subgraphResult.value.data\n : [];\n\n // If both failed, return error\n if (apiVaults.length === 0 && subgraphVaults.length === 0) {\n const apiError = apiResult.status === 'rejected' ? apiResult.reason : null;\n const subgraphError = subgraphResult.status === 'rejected' ? subgraphResult.reason : null;\n \n return {\n data: null,\n status: 500,\n success: false,\n error: `Both API and subgraph failed. API: ${apiError?.message || 'Unknown error'}. Subgraph: ${subgraphError?.message || 'Unknown error'}`\n };\n }\n\n // Merge results and remove duplicates based on vaultAddress\n const mergedVaults = this.mergeVaultResults(apiVaults, subgraphVaults);\n\n // Apply protocol filter to merged results\n const filteredVaults = mergedVaults.filter(edge => \n !filter?.protocol || this.vaultMatchesProtocolFilter(edge.node, filter.protocol, this.resolveProtocolEnum(filter.protocol))\n );\n\n // Apply pagination to the complete merged and filtered dataset\n const paginatedVaults = this.paginateVaults(filteredVaults, first, after);\n\n return {\n data: paginatedVaults,\n status: 200,\n success: true\n };\n }\n\n /**\n * Fetches ALL vaults from API (database) by auto-paginating\n * @private\n */\n private async getAllVaultsFromApi(\n apiFilter?: ApiVaultFilter\n ): Promise<SteerResponse<VaultEdge[]>> {\n try {\n const allVaults: VaultEdge[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n const batchSize = 100; // Fetch in batches of 100\n\n while (hasNextPage) {\n const response = await this.getVaultsFromApi(apiFilter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n // If we already have some vaults, return them; otherwise return error\n if (allVaults.length > 0) {\n break;\n }\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch vaults from API'\n };\n }\n\n allVaults.push(...response.data.edges);\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allVaults,\n status: 200,\n success: true\n };\n } catch (error) {\n console.warn('Failed to fetch all vaults from API:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch all vaults from API'\n };\n }\n }\n\n /**\n * Fetches vaults from API (database) with pagination\n * @private\n */\n private async getVaultsFromApi(\n apiFilter?: ApiVaultFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<VaultsConnection>> {\n try {\n const response = await this.apiClient.vaults({\n filter: apiFilter,\n first,\n after\n });\n\n if (!response.data?.vaults) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: 'No data returned from API'\n };\n }\n\n // Transform the response to match our interface\n const transformedData: VaultsConnection = {\n edges: response.data.vaults.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n id: edge.node.id,\n chainId: edge.node.chainId,\n vaultAddress: edge.node.vaultAddress,\n protocol: edge.node.protocol,\n beaconName: edge.node.beaconName,\n protocolBaseType: edge.node.protocolBaseType,\n name: edge.node.name || '',\n feeApr: edge.node.feeApr || undefined,\n stakingApr: edge.node.stakingApr || undefined,\n merklApr: edge.node.merklApr || undefined,\n pool: {\n id: edge.node.pool?.id || '',\n poolAddress: edge.node.pool?.poolAddress || '',\n feeTier: edge.node.pool?.feeTier || '',\n tick: undefined, // Not available in API response\n liquidity: undefined, // Not available in API response\n volumeUSD: undefined, // Not available in API response\n totalValueLockedUSD: undefined // Not available in API response\n },\n token0: {\n id: edge.node.token0?.id || '',\n symbol: edge.node.token0?.symbol || '',\n name: edge.node.token0?.name || '',\n decimals: edge.node.token0?.decimals || 0,\n address: edge.node.token0?.address || '',\n chainId: edge.node.token0?.chainId || 0\n },\n token1: {\n id: edge.node.token1?.id || '',\n symbol: edge.node.token1?.symbol || '',\n name: edge.node.token1?.name || '',\n decimals: edge.node.token1?.decimals || 0,\n address: edge.node.token1?.address || '',\n chainId: edge.node.token1?.chainId || 0\n }\n }\n })),\n pageInfo: {\n hasNextPage: response.data.vaults.pageInfo.hasNextPage,\n endCursor: response.data.vaults.pageInfo.endCursor ?? null\n },\n totalCount: response.data.vaults.totalCount\n };\n\n return {\n data: transformedData,\n status: response.status,\n success: true\n };\n } catch (error) {\n console.warn('API client failed:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'API request failed'\n };\n }\n }\n\n /**\n * Merges vault results from API and subgraph, removing duplicates\n * Prioritizes API data when duplicates are found\n * Generates consistent cursors for the merged dataset\n * @private\n */\n private mergeVaultResults(apiVaults: VaultEdge[], subgraphVaults: VaultEdge[]): VaultEdge[] {\n const vaultMap = new Map<string, VaultEdge>();\n\n // Add API vaults first (they take priority)\n apiVaults.forEach(edge => {\n const key = edge.node.vaultAddress.toLowerCase();\n vaultMap.set(key, edge);\n });\n\n // Add subgraph vaults only if not already present\n subgraphVaults.forEach(edge => {\n const key = edge.node.vaultAddress.toLowerCase();\n if (!vaultMap.has(key)) {\n vaultMap.set(key, edge);\n } else {\n // Merge additional data from subgraph if available (like pool details)\n const existing = vaultMap.get(key)!;\n const merged: VaultEdge = {\n ...existing,\n node: {\n ...existing.node,\n // Merge pool data - prefer subgraph data for pool details if API doesn't have it\n pool: {\n id: existing.node.pool.id || edge.node.pool.id,\n poolAddress: existing.node.pool.poolAddress || edge.node.pool.poolAddress,\n feeTier: existing.node.pool.feeTier || edge.node.pool.feeTier,\n tick: existing.node.pool.tick || edge.node.pool.tick,\n liquidity: existing.node.pool.liquidity || edge.node.pool.liquidity,\n volumeUSD: existing.node.pool.volumeUSD || edge.node.pool.volumeUSD,\n totalValueLockedUSD: existing.node.pool.totalValueLockedUSD || edge.node.pool.totalValueLockedUSD\n },\n // Prefer API APR data, but use subgraph if API doesn't have it\n feeApr: existing.node.feeApr ?? edge.node.feeApr,\n stakingApr: existing.node.stakingApr ?? edge.node.stakingApr,\n merklApr: existing.node.merklApr ?? edge.node.merklApr,\n // Subgraph-only fields: always take from subgraph when available\n positions: existing.node.positions ?? edge.node.positions,\n tickRange: existing.node.tickRange ?? edge.node.tickRange,\n fees: existing.node.fees ?? edge.node.fees,\n }\n };\n vaultMap.set(key, merged);\n }\n });\n\n // Convert to array and regenerate cursors for consistent pagination\n const mergedArray = Array.from(vaultMap.values());\n return mergedArray.map((edge, index) => ({\n ...edge,\n cursor: `merged_${edge.node.chainId}_${index}_${edge.node.vaultAddress.toLowerCase()}`\n }));\n }\n\n /**\n * Applies pagination to vault results\n * @private\n */\n private paginateVaults(vaults: VaultEdge[], first: number, after?: string | null): VaultsConnection {\n let startIndex = 0;\n\n // If cursor is provided, find the starting position\n if (after) {\n const cursorIndex = vaults.findIndex(edge => edge.cursor === after);\n if (cursorIndex !== -1) {\n startIndex = cursorIndex + 1;\n }\n }\n\n // Get the slice of vaults for this page\n const paginatedEdges = vaults.slice(startIndex, startIndex + first);\n const hasNextPage = startIndex + first < vaults.length;\n const endCursor = paginatedEdges.length > 0 ? paginatedEdges[paginatedEdges.length - 1].cursor : null;\n\n return {\n edges: paginatedEdges,\n pageInfo: {\n hasNextPage,\n endCursor\n },\n totalCount: vaults.length\n };\n }\n\n /**\n * Fetches ALL vaults from subgraph (no pagination)\n * @param filter - Optional filter criteria\n * @returns Promise resolving to all vaults data from subgraph\n * @private\n */\n private async getAllVaultsFromSubgraph(\n filter?: VaultFilter\n ): Promise<SteerResponse<VaultEdge[]>> {\n try {\n // Extract chainId from filter\n const chainId = filter?.chainId;\n if (!chainId) {\n throw new Error('ChainId is required for subgraph');\n }\n\n // Get chain enum from chainId\n const chain = chainIdToName(chainId);\n \n if (!chain) { \n throw new Error(`Unsupported chainId: ${chainId}`);\n }\n\n // Get subgraph URL for this chain\n const subgraphUrl = steerSubgraphConfig[chain];\n if (!subgraphUrl) {\n throw new Error(`No subgraph configured for chain: ${chain}`);\n }\n\n const beaconNames = this.getProtocolBeaconNames(filter?.protocol);\n\n if (filter?.beaconName) {\n beaconNames.push(filter.beaconName);\n }\n\n const uniqueBeaconNames = [...new Set(beaconNames.filter(name => name.length > 0))];\n\n // Fetch all vaults from subgraph\n const subgraphVaults = await this.subgraphVaultClient.getAllVaultsFromSubgraph({\n subgraphUrl,\n chainId,\n showDeprecated: false,\n showCurrentProtocol: uniqueBeaconNames.length > 0,\n beaconNames: uniqueBeaconNames\n });\n\n // Get all supported protocols for this chain\n const supportedProtocols = getProtocolsForChainId(chainId, this.subgraphStudioKey);\n \n // Fetch APR data for all protocols in parallel\n const aprPromises = supportedProtocols.map(protocol => \n this.getAprs({ chainId, protocol }).catch(error => {\n console.warn(`Failed to fetch APR for protocol ${protocol}:`, error);\n return { success: false, data: null };\n })\n );\n\n const aprResults = await Promise.all(aprPromises);\n \n // Create a map of vault address to APR for quick lookup\n const aprMap = new Map<string, number>();\n aprResults && aprResults.forEach(aprResult => {\n if (aprResult.success && aprResult.data) {\n aprResult?.data?.vaults && aprResult.data.vaults.forEach(vaultApr => {\n aprMap.set(vaultApr.vaultAddress.toLowerCase(), vaultApr.apr.apr);\n });\n }\n });\n\n // Transform to VaultEdge array with APR data\n const vaultEdges: VaultEdge[] = subgraphVaults.map((vault, index) => {\n // Parse positions and compute tick range\n const positions = vault.positions?.map(pos => ({\n id: pos.id,\n upperTick: parseInt(pos.upperTick),\n lowerTick: parseInt(pos.lowerTick),\n relativeWeight: pos.relativeWeight\n }));\n\n // Compute tick range from positions\n let tickRange: { minLowerTick: number; maxUpperTick: number } | undefined;\n if (positions && positions.length > 0) {\n const lowerTicks = positions.map(p => p.lowerTick);\n const upperTicks = positions.map(p => p.upperTick);\n tickRange = {\n minLowerTick: Math.min(...lowerTicks),\n maxUpperTick: Math.max(...upperTicks)\n };\n }\n\n return {\n cursor: `subgraph_${chainId}_${index}`,\n node: {\n id: vault.id,\n chainId: chainId,\n vaultAddress: vault.id,\n protocol: vault.beaconName || '',\n beaconName: vault.beaconName || '',\n protocolBaseType: vault.beaconName || '',\n name: `${vault.token0Symbol}/${vault.token1Symbol}`,\n feeApr: aprMap.get(vault.id.toLowerCase()),\n stakingApr: undefined,\n merklApr: undefined,\n positions,\n tickRange,\n fees: vault.fees0 && vault.fees1 ? {\n fees0: vault.fees0,\n fees1: vault.fees1\n } : undefined,\n pool: {\n id: vault.pool || '',\n poolAddress: vault.pool || '',\n feeTier: vault.feeTier || '',\n tick: undefined,\n liquidity: undefined,\n volumeUSD: undefined,\n totalValueLockedUSD: undefined\n },\n token0: {\n id: vault.token0,\n symbol: vault.token0Symbol,\n name: vault.token0Symbol, // Use symbol as name since subgraph doesn't provide name\n decimals: parseInt(vault.token0Decimals) || 18,\n address: vault.token0,\n chainId: chainId\n },\n token1: {\n id: vault.token1,\n symbol: vault.token1Symbol,\n name: vault.token1Symbol, // Use symbol as name since subgraph doesn't provide name\n decimals: parseInt(vault.token1Decimals) || 18,\n address: vault.token1,\n chainId: chainId\n }\n }\n };\n });\n\n return {\n data: vaultEdges,\n status: 200,\n success: true\n };\n\n } catch (error) {\n console.error('Subgraph vault fetch failed:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch vaults from subgraph'\n };\n }\n }\n\n /**\n * Fallback method to fetch vaults from subgraph with pagination\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated vaults data from subgraph\n * @private\n */\n private async getVaultsFromSubgraph(\n filter?: VaultFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<VaultsConnection>> {\n try {\n // Extract chainId from filter\n const chainId = filter?.chainId;\n if (!chainId) {\n throw new Error('ChainId is required for subgraph fallback');\n }\n\n // Get chain enum from chainId\n\n const chain = chainIdToName(chainId);\n \n if (!chain) { \n throw new Error(`Unsupported chainId: ${chainId}`);\n }\n\n // Get subgraph URL for this chain\n const subgraphUrl = steerSubgraphConfig[chain];\n if (!subgraphUrl) {\n throw new Error(`No subgraph configured for chain: ${chain}`);\n }\n\n const beaconNames = this.getProtocolBeaconNames(filter?.protocol);\n\n if (filter?.beaconName) {\n beaconNames.push(filter.beaconName);\n }\n\n const uniqueBeaconNames = [...new Set(beaconNames.filter(name => name.length > 0))];\n\n // Fetch all vaults from subgraph\n const subgraphVaults = await this.subgraphVaultClient.getAllVaultsFromSubgraph({\n subgraphUrl,\n chainId,\n showDeprecated: false,\n showCurrentProtocol: uniqueBeaconNames.length > 0,\n beaconNames: uniqueBeaconNames\n });\n\n // Get all supported protocols for this chain\n const supportedProtocols = getProtocolsForChainId(chainId, this.subgraphStudioKey);\n \n // Fetch APR data for all protocols in parallel\n const aprPromises = supportedProtocols.map(protocol => \n this.getAprs({ chainId, protocol }).catch(error => {\n console.warn(`Failed to fetch APR for protocol ${protocol}:`, error);\n return { success: false, data: null };\n })\n );\n\n const aprResults = await Promise.all(aprPromises);\n \n // Create a map of vault address to APR for quick lookup\n const aprMap = new Map<string, number>();\n aprResults && aprResults.forEach(aprResult => {\n if (aprResult.success && aprResult.data) {\n aprResult?.data?.vaults && aprResult.data.vaults.forEach(vaultApr => {\n aprMap.set(vaultApr.vaultAddress.toLowerCase(), vaultApr.apr.apr);\n });\n }\n });\n\n // Transform to VaultsConnection format with pagination and populate APR data\n const vaultsConnection = this.subgraphVaultClient.transformToVaultsConnection(\n subgraphVaults,\n chainId,\n first,\n aprMap,\n after\n );\n\n // Enhance vault data with APR information\n if (vaultsConnection.edges) {\n vaultsConnection.edges = vaultsConnection.edges.map(edge => ({\n ...edge,\n node: {\n ...edge.node,\n feeApr: aprMap.get(edge.node.vaultAddress.toLowerCase()) || edge.node.feeApr\n }\n }));\n }\n\n const filteredVaultsConnection = this.applyProtocolFilter(vaultsConnection, filter?.protocol);\n\n return {\n data: filteredVaultsConnection,\n status: 200,\n success: true\n };\n\n } catch (error) {\n console.error('Subgraph vault fetch failed:', error);\n throw error;\n }\n }\n\n /**\n * Gets tokens with pagination support\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated tokens data\n * \n * @example\n * ```typescript\n * // Get first 100 tokens\n * const tokens = await vaultClient.getTokens({ chainId: 1 }, 100);\n * \n * // Filter by symbol\n * const usdcTokens = await vaultClient.getTokens({ symbol: 'USDC' });\n * ```\n */\n public async getTokens(\n filter?: TokenFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<TokensConnection>> {\n try {\n const response = await this.apiClient.tokens({\n filter,\n first,\n after\n });\n\n if (!response.data?.tokens) {\n return {\n data: null,\n status: response.status,\n success: true\n };\n }\n\n // Transform the response to match our interface\n const transformedData: TokensConnection = {\n edges: response.data.tokens.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n id: edge.node.id,\n symbol: edge.node.symbol,\n name: edge.node.name,\n decimals: edge.node.decimals,\n chainId: edge.node.chainId,\n address: edge.node.address\n }\n })),\n pageInfo: {\n hasNextPage: response.data.tokens.pageInfo.hasNextPage,\n endCursor: response.data.tokens.pageInfo.endCursor ?? null\n },\n totalCount: response.data.tokens.totalCount\n };\n\n return {\n data: transformedData,\n status: response.status,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getTokens is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets pools with pagination support\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated pools data\n * \n * @example\n * ```typescript\n * // Get first 50 pools for Ethereum\n * const pools = await vaultClient.getPools({ chainId: 1 }, 50);\n * \n * // Filter by minimum liquidity\n * const liquidPools = await vaultClient.getPools({ \n * chainId: 1, \n * minLiquidity: '1000000' \n * });\n * ```\n */\n public async getPools(\n filter?: PoolFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<PoolsConnection>> {\n try {\n const response = await this.apiClient.pools({\n filter,\n first,\n after\n });\n\n if (!response.data?.pools) {\n return {\n data: null,\n status: response.status,\n success: true\n };\n }\n\n // Transform the response to match our interface\n const transformedData: PoolsConnection = {\n edges: response.data.pools.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n id: edge.node.id,\n chainId: edge.node.chainId,\n feeTier: edge.node.feeTier,\n token0: {\n id: edge.node.token0?.id || '',\n symbol: edge.node.token0?.symbol || '',\n name: edge.node.token0?.name || '',\n decimals: edge.node.token0?.decimals || 0,\n address: edge.node.token0?.address || '',\n chainId: edge.node.token0?.chainId || 0\n },\n token1: {\n id: edge.node.token1?.id || '',\n symbol: edge.node.token1?.symbol || '',\n name: edge.node.token1?.name || '',\n decimals: edge.node.token1?.decimals || 0,\n address: edge.node.token1?.address || '',\n chainId: edge.node.token1?.chainId || 0\n }\n }\n })),\n pageInfo: {\n hasNextPage: response.data.pools.pageInfo.hasNextPage,\n endCursor: response.data.pools.pageInfo.endCursor ?? null\n },\n totalCount: response.data.pools.totalCount\n };\n\n return {\n data: transformedData,\n status: response.status,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getPools is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets all vaults by fetching all pages automatically\n * @param filter - Optional filter criteria\n * @param batchSize - Number of items to fetch per batch (default: 100)\n * @returns Promise resolving to all vaults data (includes pool information)\n * \n * @example\n * ```typescript\n * // Get all vaults for a specific chain\n * const allVaults = await vaultClient.getAllVaults({ chainId: 1 });\n * console.log(`Found ${allVaults.data?.length} vaults`);\n * \n * // Access pool information for each vault\n * allVaults.data?.forEach(vault => {\n * console.log(`Vault ${vault.name}: Pool ${vault.pool.id} (${vault.pool.feeTier} fee)`);\n * });\n * ```\n */\n public async getAllVaults(\n filter?: VaultFilter,\n batchSize: number = 100\n ): Promise<SteerResponse<VaultNode[]>> {\n try {\n const allVaults: VaultNode[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n\n while (hasNextPage) {\n const response = await this.getVaults(filter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch vaults'\n };\n }\n\n allVaults.push(...response.data.edges.map(edge => edge.node));\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allVaults,\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n\n /**\n * Gets all tokens by fetching all pages automatically\n * @param filter - Optional filter criteria\n * @param batchSize - Number of items to fetch per batch (default: 100)\n * @returns Promise resolving to all tokens data\n */\n public async getAllTokens(\n filter?: TokenFilter,\n batchSize: number = 100\n ): Promise<SteerResponse<TokenNode[]>> {\n try {\n const allTokens: TokenNode[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n\n while (hasNextPage) {\n const response = await this.getTokens(filter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch tokens'\n };\n }\n\n allTokens.push(...response.data.edges.map(edge => edge.node));\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allTokens,\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n\n /**\n * Gets all pools by fetching all pages automatically\n * @param filter - Optional filter criteria\n * @param batchSize - Number of items to fetch per batch (default: 100)\n * @returns Promise resolving to all pools data\n */\n public async getAllPools(\n filter?: PoolFilter,\n batchSize: number = 100\n ): Promise<SteerResponse<PoolNode[]>> {\n try {\n const allPools: PoolNode[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n\n while (hasNextPage) {\n const response = await this.getPools(filter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch pools'\n };\n }\n\n allPools.push(...response.data.edges.map(edge => edge.node));\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allPools,\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getAllPools is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets APR data for vaults from the Steer Finance API\n * @param filter - Filter containing chainId and protocol\n * @returns Promise resolving to APR data for vaults\n * \n * @example\n * ```typescript\n * // Get APRs for Uniswap vaults on Nibiru (chainId: 6900)\n * const aprs = await vaultClient.getAprs({ chainId: 6900, protocol: 'Uniswap' });\n * \n * if (aprs.success && aprs.data) {\n * aprs.data.vaults.forEach(vault => {\n * console.log(`Vault: ${vault.vaultAddress}`);\n * console.log(`APR: ${vault.apr.apr}% (${vault.apr.message})`);\n * console.log(`Beacon: ${vault.beaconName}`);\n * });\n * }\n * ```\n */\n public async getAprs(filter: AprFilter): Promise<SteerResponse<AprResponse>> {\n try {\n const { chainId, protocol } = filter;\n \n // Build the API URL\n const apiUrl = `https://api.steer.finance/getAprs?chainId=${chainId}&dexName=${protocol}`;\n \n const response = await fetch(apiUrl, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: `API request failed: ${response.statusText}`\n };\n }\n\n const data: AprResponse = await response.json();\n\n return {\n data,\n status: response.status,\n success: true\n };\n\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getAprs is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets detailed APR data for a specific Blackhole vault from the Steer Finance API\n * This includes snapshot analysis with historical APR data over different time periods\n * \n * @param params - Parameters containing vault address and chain ID\n * @returns Promise resolving to detailed APR data including snapshot analysis\n * \n * @example\n * ```typescript\n * // Get detailed APR for a Blackhole vault on Avalanche\n * const aprDetails = await vaultClient.getBlackholeAprDetailed({\n * vaultAddress: '0x5c1d454f08975c554f6b70a84fd8859fbdfcc069',\n * chainId: 43114\n * });\n * \n * if (aprDetails.success && aprDetails.data) {\n * console.log(`Vault: ${aprDetails.data.vaultAddress}`);\n * console.log(`Beacon: ${aprDetails.data.beaconName}`);\n * console.log(`Current APR: ${aprDetails.data.apr.apr}% (${aprDetails.data.apr.message})`);\n * \n * // Access snapshot analysis\n * aprDetails.data.snapshotAnalysis.forEach(snapshot => {\n * console.log(`Period ${snapshot.period}:`);\n * console.log(` Duration: ${snapshot.durationHours} hours`);\n * console.log(` TVL: $${snapshot.tvlUSD}`);\n * console.log(` Fees: $${snapshot.feesUSD}`);\n * console.log(` APR: ${snapshot.apr}%`);\n * });\n * }\n * ```\n */\n public async getBlackholeVaultApr(params: BlackholeAprDetailedParams): Promise<SteerResponse<BlackholeAprDetailedResponse>> {\n try {\n const { vaultAddress, chainId } = params;\n \n // Build the API URL\n const apiUrl = `https://api.steer.finance/blackhole/apr-detailed?vaultAddress=${vaultAddress}&chainId=${chainId}`;\n \n const response = await fetch(apiUrl, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: `API request failed: ${response.statusText}`\n };\n }\n\n const data: BlackholeAprDetailedResponse = await response.json();\n\n return {\n data,\n status: response.status,\n success: true\n };\n\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch Blackhole APR details'\n };\n }\n }\n\n /**\n * Gets the latest vaults from the subgraph\n */\n public async getLatestVaults<T>(): Promise<SteerResponse<T>> {\n const query = ` \n query latestVaults{\n vaults(first: 250, skip: 0, orderBy: createdAt, orderDirection: desc, where: {\n gasUsed_gt: 0\n } ) {\n id\n beaconName\n createdAt\n gasUsed\n token1Symbol\n token0Symbol\n token0\n token1\n token0Name\n token1Name\n strategyToken {\n id\n name\n creator {\n id\n }\n }\n }\n }\n `;\n\n return this.executeSubgraphQuery<T>(query);\n }\n\n /**\n * Deposits tokens into a vault\n * @param params The deposit parameters\n */\n public async deposit(params: VaultDepositParams): Promise<SteerResponse<Hash>> {\n return this.depositClient.deposit(params);\n }\n\n /**\n * Prepares the transaction data for depositing tokens into a vault without executing it\n * @param params The deposit parameters\n */\n public async prepareDepositTx(params: VaultDepositParams): Promise<SteerResponse<{\n address: Address;\n abi: {\n type: string;\n inputs: {\n name: string;\n internalType: string;\n type: string;\n }[];\n name: string;\n outputs: {\n internalType: string;\n name: string;\n type: string;\n }[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [Address, bigint, bigint, bigint, bigint, Address] | readonly [bigint, bigint, bigint, bigint, Address];\n }>> {\n return this.depositClient.prepareDepositTx(params);\n }\n\n /**\n * Gets the deposit ratio for a vault\n * @param vaultAddress The vault address\n */\n public async getDepositRatio(vaultAddress: Address, zeroForOne: boolean): Promise<SteerResponse<VaultDetailsResponse>> {\n try {\n const ratioResponse = await this.depositClient.getDepositRatio(vaultAddress, zeroForOne);\n if (!ratioResponse.success || !ratioResponse.data) {\n throw new Error(ratioResponse.error || 'Failed to get deposit ratio');\n }\n\n return {\n data: {\n details: ratioResponse.data.vaultDetails,\n ratio: ratioResponse.data.ratio,\n },\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n\n /**\n * Withdraws tokens from a vault\n * @param params The withdrawal parameters\n */\n public async withdraw(params: VaultWithdrawParams): Promise<SteerResponse<Hash>> {\n return this.withdrawClient.withdraw(params);\n }\n\n /**\n * Prepares the transaction data for withdrawing tokens from a vault without executing it\n * @param params The withdrawal parameters\n */\n public async prepareWithdrawTx(params: VaultWithdrawParams): Promise<SteerResponse<{\n address: Address;\n abi: {\n type: string;\n inputs: {\n name: string;\n internalType: string;\n type: string;\n }[];\n name: string;\n outputs: never[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [\n bigint,\n bigint,\n bigint,\n Address\n ];\n }>> {\n return this.withdrawClient.prepareWithdrawTx(params);\n }\n\n /**\n * Calculates the amount of tokens that would be received for a given amount of LP tokens\n * @param vaultAddress The vault address\n * @param lpToken The amount of LP tokens to calculate for\n */\n public async getTokensFromLp(\n vaultAddress: Address,\n lpToken: bigint\n ): Promise<SteerResponse<TokensFromLpResponse>> {\n return this.withdrawClient.getTokensFromLp(vaultAddress, lpToken);\n }\n\n /**\n * Approves spending of tokens for a vault\n * @param params The approval parameters\n */\n public async approve(params: VaultApproveParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'approve',\n args: [params.spender, params.amount],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\n\n return {\n data: hash,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the allowance for a vault token\n * @param params The allowance parameters\n */\n public async allowance(params: VaultAllowanceParams): Promise<SteerResponse<bigint>> {\n try {\n const allowance = await this.publicClient.readContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'allowance',\n args: [params.owner, params.spender],\n });\n\n return {\n data: allowance,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the balance of a vault token for an account\n * @param params The balance parameters\n */\n public async balanceOf(params: VaultBalanceParams): Promise<SteerResponse<bigint>> {\n try {\n const balance = await this.publicClient.readContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'balanceOf',\n args: [params.account],\n });\n\n return {\n data: balance,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the total supply of a vault token\n * @param vaultAddress The vault address\n */\n public async totalSupply(vaultAddress: Address): Promise<SteerResponse<bigint>> {\n try {\n const totalSupply = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'totalSupply',\n });\n\n return {\n data: totalSupply,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the decimals of a vault token\n * @param vaultAddress The vault address\n */\n public async decimals(vaultAddress: Address): Promise<SteerResponse<number>> {\n try {\n const decimals = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'decimals',\n });\n\n return {\n data: decimals,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the symbol of a vault token\n * @param vaultAddress The vault address\n */\n public async symbol(vaultAddress: Address): Promise<SteerResponse<string>> {\n try {\n const result = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'symbol',\n });\n\n return {\n data: result,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the name of a vault token\n * @param vaultAddress The vault address\n */\n public async name(vaultAddress: Address): Promise<SteerResponse<string>> {\n try {\n const result = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'name',\n });\n\n return {\n data: result,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n public async pool(vaultAddress: Address): Promise<SteerResponse<Address>> {\n try {\n const pool = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'pool',\n });\n\n return {\n data: pool,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets a pool instance for a vault\n * @param params The pool instance parameters\n */\n public async getPoolInstance(params: PoolInstanceParams): Promise<SteerResponse<PoolV3>> {\n return this.depositClient.getPoolInstance(params);\n }\n\n /**\n * Gets the corresponding token amount based on the provided token amount and ratio\n * @param vaultAddress The vault address\n * @param amount The amount of token to calculate the corresponding amount for\n * @param zeroForOne If true, calculates token1 amount for given token0, if false calculates token0 amount for given token1\n */\n public async getCorrespondingTokenAmount(\n vaultAddress: Address,\n amount: bigint,\n zeroForOne: boolean\n ): Promise<SteerResponse<bigint>> {\n return this.depositClient.getCorrespondingTokenAmount(vaultAddress, amount, zeroForOne);\n }\n\n // Single-Asset Deposit Methods\n\n /**\n * Previews a single-asset deposit by running all simulation steps\n * This allows users to see the expected outcome before executing the transaction\n * \n * @param params - Single-asset deposit parameters\n * @param poolAddress - Address of the pool (must be provided separately)\n * @returns Promise resolving to the complete deposit preview\n * \n * @example\n * ```typescript\n * const preview = await vaultClient.previewSingleAssetDeposit({\n * assets: parseEther('100'),\n * receiver: userAddress,\n * vault: vaultAddress,\n * isToken0: true,\n * depositSlippagePercent: 5n,\n * swapSlippageBP: 500,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * }, poolAddress);\n * \n * if (preview.success) {\n * console.log('Expected LP tokens:', preview.data.lpEstimation.lpTokens);\n * console.log('Swap amount:', preview.data.swapAmount);\n * }\n * ```\n */\n public async previewSingleAssetDeposit(\n params: SingleAssetDepositParams,\n poolAddress: Address\n ): Promise<SteerResponse<SingleAssetDepositPreview>> {\n return this.singleAssetDepositClient.previewDeposit(params, poolAddress);\n }\n\n /**\n * Executes a single-asset deposit transaction\n * \n * @param params - Single-asset deposit parameters\n * @returns Promise resolving to the transaction hash\n * \n * @example\n * ```typescript\n * const result = await vaultClient.singleAssetDeposit({\n * assets: parseEther('100'),\n * receiver: userAddress,\n * vault: vaultAddress,\n * isToken0: true,\n * depositSlippagePercent: 5n,\n * swapSlippageBP: 500,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * });\n * \n * if (result.success) {\n * console.log('Transaction hash:', result.data);\n * }\n * ```\n */\n public async singleAssetDeposit(params: SingleAssetDepositParams): Promise<SteerResponse<Hash>> {\n return this.singleAssetDepositClient.deposit(params);\n }\n\n /**\n * Prepares a single-asset deposit transaction without executing it\n * Useful for batching transactions or custom execution logic\n * \n * @param params - Single-asset deposit parameters\n * @returns Promise resolving to the prepared transaction data\n */\n public async prepareSingleAssetDepositTx(params: SingleAssetDepositParams) {\n return this.singleAssetDepositClient.prepareDepositTx(params);\n }\n\n /**\n * Validates single-asset deposit parameters\n * \n * @param params - Parameters to validate\n * @throws Error if parameters are invalid\n */\n public validateSingleAssetDepositParams(params: SingleAssetDepositParams): void {\n return this.singleAssetDepositClient.validateDepositParams(params);\n }\n\n // Reward Management Methods\n\n /**\n * Calculates pending rewards for a user from a vault\n * This is a view function that doesn't modify state\n * \n * @param params - Parameters containing vault address and user address\n * @returns Promise resolving to pending rewards data or zero values if function reverts\n * \n * @example\n * ```typescript\n * const pendingRewards = await vaultClient.calculatePendingRewards({\n * vaultAddress: '0x123...',\n * user: '0xabc...'\n * });\n * \n * if (pendingRewards.success && pendingRewards.data) {\n * console.log('Rewards:', pendingRewards.data.rewards);\n * console.log('Extra Rewards:', pendingRewards.data.extraRewards);\n * }\n * ```\n */\n public async calculatePendingRewards(params: PendingRewardsParams): Promise<SteerResponse<PendingRewardsResponse>> {\n try {\n const result = await this.publicClient.readContract({\n address: params.vaultAddress,\n abi: REWARD_FUNCTIONS_ABI,\n functionName: 'calculatePendingRewards',\n args: [params.user],\n }) as [bigint, bigint];\n\n return {\n data: {\n rewards: result[0],\n extraRewards: result[1]\n },\n status: 200,\n success: true,\n };\n } catch (error) {\n // If the function reverts or doesn't exist, return zero values\n console.warn('calculatePendingRewards failed, returning zero values:', error);\n return {\n data: {\n rewards: 0n,\n extraRewards: 0n\n },\n status: 200,\n success: true,\n };\n }\n }\n\n /**\n * Claims pending rewards from a vault using the claimBlackHolePendingRewards function\n * \n * @param params - Parameters containing vault address\n * @returns Promise resolving to transaction hash or zero values if function reverts\n * \n * @example\n * ```typescript\n * const claimResult = await vaultClient.claimPendingRewards({\n * vaultAddress: '0x123...'\n * });\n * \n * if (claimResult.success && claimResult.data) {\n * console.log('Claim transaction hash:', claimResult.data);\n * }\n * ```\n */\n public async claimBlackholePendingRewards(params: ClaimRewardsParams): Promise<SteerResponse<Hash | PendingRewardsResponse>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.vaultAddress,\n abi: REWARD_FUNCTIONS_ABI,\n functionName: 'claimUserRewards',\n args: [],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\n\n return {\n data: hash,\n status: 200,\n success: true,\n };\n } catch (error) {\n console.error('claimBlackHolePendingRewards failed, error:', error);\n // If the function reverts or doesn't exist, return zero values instead of transaction hash\n console.warn('claimBlackHolePendingRewards failed, returning zero values:', error);\n return {\n data: {\n rewards: 0n,\n extraRewards: 0n\n },\n status: 200,\n success: true,\n };\n }\n }\n\n} \n"]}
1
+ {"version":3,"file":"VaultClient.js","sourceRoot":"","sources":["../../../src/base/VaultClient.ts"],"names":[],"mappings":"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","sourcesContent":["import { createClient } from '@steerprotocol/api-sdk';\nimport { Pool as PoolV3 } from \"@uniswap/v3-sdk\";\nimport type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { chainIdToName, getBeaconNameByProtocol, getProtocolTypeByBeacon } from '../const/index.js';\nimport { getAmmConfig } from '../const/amm/configs/ammConfig.js';\nimport { getProtocolsForChainId } from '../const/amm/utils/protocol.js';\nimport { ChainId, MultiPositionManagers, Protocol } from '../const/chain.js';\nimport { steerSubgraphConfig } from '../const/subgraph.js';\nimport { SubgraphVaultClient } from '../utils/SubgraphVaultClient.js';\nimport { getApiUrl } from '../const/api.js';\nimport { abis } from '../const/deployments/abis.js';\nimport { SteerResponse, VaultDetailsResponse } from '../types.js';\nimport { SubgraphClient } from './SubgraphClient.js';\nimport { VaultDepositClient } from './vault/deposit/index.js';\nimport { PoolInstanceParams, VaultDepositParams } from './vault/deposit/types.js';\nimport { SingleAssetDepositClient } from './vault/single-asset/index.js';\nimport type {\n SingleAssetDepositParams,\n SingleAssetDepositPreview\n} from './vault/single-asset/types.js';\nimport { VaultWithdrawClient } from './vault/withdraw/index.js';\nimport { TokensFromLpResponse, VaultWithdrawParams } from './vault/withdraw/types.js';\nexport * from \"./vault/single-asset/index.js\";\n\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\n\n// Custom ABI for reward functions\nconst REWARD_FUNCTIONS_ABI = [\n {\n \"type\": \"function\",\n \"name\": \"calculatePendingRewards\",\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"rewards\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"extraRewards\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimUserRewards\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n \n] as const;\n\nexport interface VaultApproveParams {\n vaultAddress: Address;\n spender: Address;\n amount: bigint;\n}\n\nexport interface VaultAllowanceParams {\n vaultAddress: Address;\n owner: Address;\n spender: Address;\n}\n\nexport interface VaultBalanceParams {\n vaultAddress: Address;\n account: Address;\n}\n\n// Pagination interfaces matching API SDK types\nexport interface ApiPageInfo {\n hasNextPage: boolean;\n endCursor: string | null;\n}\n\nexport interface VaultNode {\n id: string;\n chainId: number;\n vaultAddress: string;\n protocol: string;\n beaconName: string;\n protocolBaseType: string;\n name: string;\n feeApr?: number;\n stakingApr?: number;\n merklApr?: number;\n /** Raw positions from the subgraph. Only available when sourced from subgraph. */\n positions?: {\n id: string;\n upperTick: number;\n lowerTick: number;\n relativeWeight: string;\n }[];\n /** Computed tick range across all current positions (min lower / max upper). Only available when sourced from subgraph. */\n tickRange?: {\n minLowerTick: number;\n maxUpperTick: number;\n };\n /** Cumulative fees collected by the vault. Only available when sourced from subgraph. */\n fees?: {\n fees0: string;\n fees1: string;\n };\n pool: {\n poolAddress: string;\n id: string;\n feeTier: string;\n tick?: string;\n liquidity?: string;\n volumeUSD?: string;\n totalValueLockedUSD?: string;\n };\n token0: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n token1: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n}\n\nexport interface VaultEdge {\n cursor: string;\n node: VaultNode;\n}\n\nexport interface VaultsConnection {\n edges: readonly VaultEdge[];\n pageInfo: ApiPageInfo;\n totalCount: number;\n}\n\nexport interface TokenNode {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n chainId: number;\n address: string;\n}\n\nexport interface TokenEdge {\n cursor: string;\n node: TokenNode;\n}\n\nexport interface TokensConnection {\n edges: readonly TokenEdge[];\n pageInfo: ApiPageInfo;\n totalCount: number;\n}\n\nexport interface PoolNode {\n id: string;\n chainId: number;\n feeTier: string;\n token0: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n token1: {\n id: string;\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n };\n}\n\nexport interface PoolEdge {\n cursor: string;\n node: PoolNode;\n}\n\nexport interface PoolsConnection {\n edges: readonly PoolEdge[];\n pageInfo: ApiPageInfo;\n totalCount: number;\n}\n\nexport interface VaultFilter {\n chainId?: number;\n protocol?: string;\n isActive?: boolean;\n beaconName?: string;\n}\n\n// API-specific filter that excludes protocol field\nexport interface ApiVaultFilter {\n chainId?: number;\n isActive?: boolean;\n beaconName?: string;\n}\n\nexport interface TokenFilter {\n chainId?: number;\n symbol?: string;\n}\n\nexport interface PoolFilter {\n chainId?: number;\n protocol?: string;\n minLiquidity?: string;\n}\n\nexport interface VaultApr {\n apr: {\n apr: number;\n message: string;\n };\n beaconName: string;\n vaultAddress: string;\n}\n\nexport interface AprResponse {\n vaults: VaultApr[];\n}\n\nexport interface AprFilter {\n chainId: number;\n protocol: string;\n}\n\nexport interface PendingRewardsParams {\n vaultAddress: Address;\n user: Address;\n}\n\nexport interface PendingRewardsResponse {\n rewards: bigint;\n extraRewards: bigint;\n}\n\nexport interface ClaimRewardsParams {\n vaultAddress: Address;\n}\n\nexport interface BlackholeAprDetailedParams {\n vaultAddress: Address;\n chainId: number;\n}\n\nexport interface BlackholeSnapshotAnalysis {\n period: number;\n fromTimestamp: number;\n toTimestamp: number;\n fromDate: string;\n toDate: string;\n durationSeconds: number;\n durationHours: number;\n tvlUSD: number;\n feesUSD: number;\n apr: number;\n}\n\nexport interface BlackholeAprDetailedResponse {\n vaultAddress: string;\n beaconName: string;\n apr: {\n apr: number;\n message: string;\n };\n snapshotAnalysis: BlackholeSnapshotAnalysis[];\n}\n\n/**\n * Client for interacting with Steer Protocol's Vault system.\n * This client provides functionality for vault operations, deposit/withdraw, and comprehensive data fetching.\n * \n * **Features:**\n * - Vault data includes associated pool information (pool address, fee tier) along with token details\n * - Full pagination support for all data fetching methods\n * - API client integration for efficient data retrieval\n * - Backward compatibility with subgraph queries\n * \n * **Available API Client Methods:**\n * - `getVaults()` - Get vaults with pagination and filtering\n * - `getTokens()` - Get tokens with pagination and filtering\n * - `getPools()` - Get pools with pagination and filtering\n * - `getAllVaults()` - Get all vaults (auto-pagination)\n * - `getAllTokens()` - Get all tokens (auto-pagination)\n * - `getAllPools()` - Get all pools (auto-pagination)\n * \n * @example\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { VaultClient } from '@steerprotocol/sdk';\n * \n * // Create viem clients\n * const publicClient = createPublicClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * const walletClient = createWalletClient({\n * chain: mainnet,\n * transport: http()\n * });\n * \n * // Initialize the Vault client\n * const vaultClient = new VaultClient(publicClient, walletClient, 'production');\n * \n * // Get vaults with pagination - includes pool information\n * const vaults = await vaultClient.getVaults({ chainId: 1 }, 10, null);\n * \n * if (vaults.success && vaults.data) {\n * vaults.data.edges.forEach((edge) => {\n * const vault = edge.node;\n * console.log(`${vault.token0.symbol}/${vault.token1.symbol} vault`);\n * console.log(`Pool: ${vault.pool.id} (${vault.pool.feeTier} fee tier)`);\n * console.log(`Protocol: ${vault.protocol} (${vault.beaconName})`);\n * });\n * }\n * \n * // Get all tokens for a chain\n * const allTokens = await vaultClient.getAllTokens({ chainId: 1 });\n * \n * // Get pools with specific filters\n * const pools = await vaultClient.getPools({ \n * chainId: 1, \n * protocol: 'uniswap-v3' \n * });\n * \n * // Traditional vault operations\n * const depositTx = await vaultClient.deposit(depositParams);\n * const withdrawTx = await vaultClient.withdraw(withdrawParams);\n * ```\n * \n * @group Client\n */\nexport class VaultClient extends SubgraphClient {\n protected readonly apiClient: ReturnType<typeof createClient>;\n protected readonly publicClient: PublicClient;\n protected readonly walletClient: WalletClient;\n private readonly depositClient: VaultDepositClient;\n private readonly withdrawClient: VaultWithdrawClient;\n public readonly singleAssetDepositClient: SingleAssetDepositClient;\n private readonly subgraphVaultClient: SubgraphVaultClient;\n private readonly subgraphStudioKey: string;\n\n /**\n * Creates a new instance of VaultClient\n * @param publicClient - The public client for reading from the blockchain\n * @param walletClient - The wallet client for writing to the blockchain\n * @param environment - The environment to use ('production' or 'development')\n * @param version - Optional API version to use (defaults to 'v1')\n * @param subgraphStudioKey - Optional subgraph studio key for protocol data fetching\n */\n constructor(\n publicClient: PublicClient, \n walletClient: WalletClient,\n environment: 'production' | 'development',\n version: 'v1' = 'v1',\n subgraphStudioKey?: string\n ) {\n const combinedClient = publicClient as PublicClient & WalletClient;\n super(combinedClient);\n \n const apiUrl = getApiUrl(environment, version);\n this.apiClient = createClient(apiUrl);\n this.publicClient = publicClient;\n this.walletClient = walletClient;\n this.depositClient = new VaultDepositClient(publicClient, walletClient);\n this.withdrawClient = new VaultWithdrawClient(publicClient, walletClient);\n this.singleAssetDepositClient = new SingleAssetDepositClient(publicClient, walletClient);\n this.subgraphVaultClient = new SubgraphVaultClient();\n this.subgraphStudioKey = subgraphStudioKey || '';\n }\n\n private normalizeProtocolValue(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n }\n\n private resolveProtocolEnum(protocol?: string): Protocol | null {\n if (!protocol) {\n return null;\n }\n\n const normalizedProtocol = this.normalizeProtocolValue(protocol);\n const matchedProtocol = Object.values(Protocol).find(\n protocolValue => this.normalizeProtocolValue(protocolValue) === normalizedProtocol\n );\n\n return matchedProtocol || null;\n }\n\n private getProtocolBeaconNames(protocol?: string): string[] {\n const resolvedProtocol = this.resolveProtocolEnum(protocol);\n if (!resolvedProtocol) {\n return [];\n }\n\n const protocolConfig = getAmmConfig(this.subgraphStudioKey)[resolvedProtocol];\n const beaconNames: string[] = [];\n\n if (protocolConfig?.beaconContract) {\n beaconNames.push(protocolConfig.beaconContract);\n }\n\n if (protocolConfig?.beaconContractSushiManaged) {\n beaconNames.push(protocolConfig.beaconContractSushiManaged);\n }\n\n if (resolvedProtocol === Protocol.Blackhole) {\n beaconNames.push(MultiPositionManagers.MultiPositionBlackholeOld);\n }\n\n const beaconAlias = getBeaconNameByProtocol(resolvedProtocol);\n if (beaconAlias) {\n beaconNames.push(beaconAlias);\n }\n\n return [...new Set(beaconNames.filter(name => name.length > 0))];\n }\n\n private getPrimaryProtocolBeaconName(protocol?: string): string | null {\n const resolvedProtocol = this.resolveProtocolEnum(protocol);\n if (!resolvedProtocol) {\n return null;\n }\n\n const protocolConfig = getAmmConfig(this.subgraphStudioKey)[resolvedProtocol];\n return protocolConfig?.beaconContract || null;\n }\n\n private buildApiVaultFilter(filter?: VaultFilter): ApiVaultFilter | undefined {\n if (!filter) {\n return undefined;\n }\n\n const { protocol, ...rest } = filter;\n const apiFilter: ApiVaultFilter = { ...rest };\n\n if (!apiFilter.beaconName && protocol) {\n const primaryBeaconName = this.getPrimaryProtocolBeaconName(protocol);\n if (primaryBeaconName) {\n apiFilter.beaconName = primaryBeaconName;\n }\n }\n\n return apiFilter;\n }\n\n private vaultMatchesProtocolFilter(\n vault: VaultNode,\n protocolFilter: string,\n resolvedProtocol: Protocol | null\n ): boolean {\n const normalizedFilter = this.normalizeProtocolValue(protocolFilter);\n const normalizedBeaconName = this.normalizeProtocolValue(vault.beaconName);\n const resolvedVaultProtocol = getProtocolTypeByBeacon(vault.beaconName);\n\n const directCandidates = [vault.protocol, vault.protocolBaseType, resolvedVaultProtocol || ''];\n const hasDirectMatch = directCandidates.some(candidate => {\n if (!candidate) {\n return false;\n }\n return this.normalizeProtocolValue(candidate) === normalizedFilter;\n });\n\n if (hasDirectMatch) {\n return true;\n }\n\n const expectedBeacon = resolvedProtocol\n ? getBeaconNameByProtocol(resolvedProtocol)\n : protocolFilter;\n const normalizedExpectedBeacon = this.normalizeProtocolValue(expectedBeacon);\n\n return normalizedExpectedBeacon.length > 0 && normalizedBeaconName.includes(normalizedExpectedBeacon);\n }\n\n private applyProtocolFilter(vaultsConnection: VaultsConnection, protocol?: string): VaultsConnection {\n if (!protocol) {\n return vaultsConnection;\n }\n\n const resolvedProtocol = this.resolveProtocolEnum(protocol);\n const filteredEdges = vaultsConnection.edges.filter(edge =>\n this.vaultMatchesProtocolFilter(edge.node, protocol, resolvedProtocol)\n );\n\n return {\n ...vaultsConnection,\n edges: filteredEdges\n };\n }\n\n /**\n * Gets vaults with pagination support\n * Fetches ALL data from both API (database) and subgraph in parallel, merges without duplicates, then paginates\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated vaults data\n * \n * @example\n * ```typescript\n * // Get first 20 vaults for Ethereum\n * const vaults = await vaultClient.getVaults({ chainId: 1 }, 20);\n * \n * if (vaults.success && vaults.data) {\n * vaults.data.edges.forEach((edge) => {\n * const vault = edge.node;\n * console.log(`Vault: ${vault.name}`);\n * console.log(`Pool: ${vault.pool.id}`);\n * console.log(`Pool Fee Tier: ${vault.pool.feeTier}`);\n * console.log(`Tokens: ${vault.token0.symbol}/${vault.token1.symbol}`);\n * });\n * }\n * \n * // Get next page using cursor\n * if (vaults.data?.pageInfo.hasNextPage) {\n * const nextPage = await vaultClient.getVaults(\n * { chainId: 1 }, \n * 20, \n * vaults.data.pageInfo.endCursor\n * );\n * }\n * \n * // For additional pool details (liquidity, volume, etc.), use the PoolClient:\n * // const poolDetails = await poolClient.getPoolById(vault.pool.id, protocol, chainId);\n * ```\n */\n public async getVaults(\n filter?: VaultFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<VaultsConnection>> {\n const apiFilter = this.buildApiVaultFilter(filter);\n\n // Fetch ALL vaults from both sources in parallel (no pagination at source level)\n const [apiResult, subgraphResult] = await Promise.allSettled([\n this.getAllVaultsFromApi(apiFilter),\n filter?.chainId !== ChainId.Avalanche ? this.getAllVaultsFromSubgraph(filter) : Promise.reject(new Error('Avalanche not supported'))\n ]);\n\n // Extract successful results\n const apiVaults: VaultEdge[] = apiResult.status === 'fulfilled' && apiResult.value.success && apiResult.value.data \n ? apiResult.value.data\n : [];\n \n const subgraphVaults: VaultEdge[] = subgraphResult.status === 'fulfilled' && subgraphResult.value.success && subgraphResult.value.data \n ? subgraphResult.value.data\n : [];\n\n // If both failed, return error\n if (apiVaults.length === 0 && subgraphVaults.length === 0) {\n const apiError = apiResult.status === 'rejected' ? apiResult.reason : null;\n const subgraphError = subgraphResult.status === 'rejected' ? subgraphResult.reason : null;\n \n return {\n data: null,\n status: 500,\n success: false,\n error: `Both API and subgraph failed. API: ${apiError?.message || 'Unknown error'}. Subgraph: ${subgraphError?.message || 'Unknown error'}`\n };\n }\n\n // Merge results and remove duplicates based on vaultAddress\n const mergedVaults = this.mergeVaultResults(apiVaults, subgraphVaults);\n\n // Apply protocol filter to merged results\n const filteredVaults = mergedVaults.filter(edge => \n !filter?.protocol || this.vaultMatchesProtocolFilter(edge.node, filter.protocol, this.resolveProtocolEnum(filter.protocol))\n );\n\n // Apply pagination to the complete merged and filtered dataset\n const paginatedVaults = this.paginateVaults(filteredVaults, first, after);\n\n return {\n data: paginatedVaults,\n status: 200,\n success: true\n };\n }\n\n /**\n * Fetches ALL vaults from API (database) by auto-paginating\n * @private\n */\n private async getAllVaultsFromApi(\n apiFilter?: ApiVaultFilter\n ): Promise<SteerResponse<VaultEdge[]>> {\n try {\n const allVaults: VaultEdge[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n const batchSize = 100; // Fetch in batches of 100\n\n while (hasNextPage) {\n const response = await this.getVaultsFromApi(apiFilter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n // If we already have some vaults, return them; otherwise return error\n if (allVaults.length > 0) {\n break;\n }\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch vaults from API'\n };\n }\n\n allVaults.push(...response.data.edges);\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allVaults,\n status: 200,\n success: true\n };\n } catch (error) {\n console.warn('Failed to fetch all vaults from API:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch all vaults from API'\n };\n }\n }\n\n /**\n * Fetches vaults from API (database) with pagination\n * @private\n */\n private async getVaultsFromApi(\n apiFilter?: ApiVaultFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<VaultsConnection>> {\n try {\n const response = await this.apiClient.vaults({\n filter: apiFilter,\n first,\n after\n });\n\n if (!response.data?.vaults) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: 'No data returned from API'\n };\n }\n\n // Transform the response to match our interface\n const transformedData: VaultsConnection = {\n edges: response.data.vaults.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n id: edge.node.id,\n chainId: edge.node.chainId,\n vaultAddress: edge.node.vaultAddress,\n protocol: edge.node.protocol,\n beaconName: edge.node.beaconName,\n protocolBaseType: edge.node.protocolBaseType,\n name: edge.node.name || '',\n feeApr: edge.node.feeApr || undefined,\n stakingApr: edge.node.stakingApr || undefined,\n merklApr: edge.node.merklApr || undefined,\n pool: {\n id: edge.node.pool?.id || '',\n poolAddress: edge.node.pool?.poolAddress || '',\n feeTier: edge.node.pool?.feeTier || '',\n tick: undefined, // Not available in API response\n liquidity: undefined, // Not available in API response\n volumeUSD: undefined, // Not available in API response\n totalValueLockedUSD: undefined // Not available in API response\n },\n token0: {\n id: edge.node.token0?.id || '',\n symbol: edge.node.token0?.symbol || '',\n name: edge.node.token0?.name || '',\n decimals: edge.node.token0?.decimals || 0,\n address: edge.node.token0?.address || '',\n chainId: edge.node.token0?.chainId || 0\n },\n token1: {\n id: edge.node.token1?.id || '',\n symbol: edge.node.token1?.symbol || '',\n name: edge.node.token1?.name || '',\n decimals: edge.node.token1?.decimals || 0,\n address: edge.node.token1?.address || '',\n chainId: edge.node.token1?.chainId || 0\n }\n }\n })),\n pageInfo: {\n hasNextPage: response.data.vaults.pageInfo.hasNextPage,\n endCursor: response.data.vaults.pageInfo.endCursor ?? null\n },\n totalCount: response.data.vaults.totalCount\n };\n\n return {\n data: transformedData,\n status: response.status,\n success: true\n };\n } catch (error) {\n console.warn('API client failed:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'API request failed'\n };\n }\n }\n\n /**\n * Merges vault results from API and subgraph, removing duplicates\n * Prioritizes API data when duplicates are found\n * Generates consistent cursors for the merged dataset\n * @private\n */\n private mergeVaultResults(apiVaults: VaultEdge[], subgraphVaults: VaultEdge[]): VaultEdge[] {\n const vaultMap = new Map<string, VaultEdge>();\n\n // Add API vaults first (they take priority)\n apiVaults.forEach(edge => {\n const key = edge.node.vaultAddress.toLowerCase();\n vaultMap.set(key, edge);\n });\n\n // Add subgraph vaults only if not already present\n subgraphVaults.forEach(edge => {\n const key = edge.node.vaultAddress.toLowerCase();\n if (!vaultMap.has(key)) {\n vaultMap.set(key, edge);\n } else {\n // Merge additional data from subgraph if available (like pool details)\n const existing = vaultMap.get(key)!;\n const merged: VaultEdge = {\n ...existing,\n node: {\n ...existing.node,\n // Merge pool data - prefer subgraph data for pool details if API doesn't have it\n pool: {\n id: existing.node.pool.id || edge.node.pool.id,\n poolAddress: existing.node.pool.poolAddress || edge.node.pool.poolAddress,\n feeTier: existing.node.pool.feeTier || edge.node.pool.feeTier,\n tick: existing.node.pool.tick || edge.node.pool.tick,\n liquidity: existing.node.pool.liquidity || edge.node.pool.liquidity,\n volumeUSD: existing.node.pool.volumeUSD || edge.node.pool.volumeUSD,\n totalValueLockedUSD: existing.node.pool.totalValueLockedUSD || edge.node.pool.totalValueLockedUSD\n },\n // Prefer API APR data, but use subgraph if API doesn't have it\n feeApr: existing.node.feeApr ?? edge.node.feeApr,\n stakingApr: existing.node.stakingApr ?? edge.node.stakingApr,\n merklApr: existing.node.merklApr ?? edge.node.merklApr,\n // Subgraph-only fields: always take from subgraph when available\n positions: existing.node.positions ?? edge.node.positions,\n tickRange: existing.node.tickRange ?? edge.node.tickRange,\n fees: existing.node.fees ?? edge.node.fees,\n }\n };\n vaultMap.set(key, merged);\n }\n });\n\n // Convert to array and regenerate cursors for consistent pagination\n const mergedArray = Array.from(vaultMap.values());\n return mergedArray.map((edge, index) => ({\n ...edge,\n cursor: `merged_${edge.node.chainId}_${index}_${edge.node.vaultAddress.toLowerCase()}`\n }));\n }\n\n /**\n * Applies pagination to vault results\n * @private\n */\n private paginateVaults(vaults: VaultEdge[], first: number, after?: string | null): VaultsConnection {\n let startIndex = 0;\n\n // If cursor is provided, find the starting position\n if (after) {\n const cursorIndex = vaults.findIndex(edge => edge.cursor === after);\n if (cursorIndex !== -1) {\n startIndex = cursorIndex + 1;\n }\n }\n\n // Get the slice of vaults for this page\n const paginatedEdges = vaults.slice(startIndex, startIndex + first);\n const hasNextPage = startIndex + first < vaults.length;\n const endCursor = paginatedEdges.length > 0 ? paginatedEdges[paginatedEdges.length - 1].cursor : null;\n\n return {\n edges: paginatedEdges,\n pageInfo: {\n hasNextPage,\n endCursor\n },\n totalCount: vaults.length\n };\n }\n\n /**\n * Fetches ALL vaults from subgraph (no pagination)\n * @param filter - Optional filter criteria\n * @returns Promise resolving to all vaults data from subgraph\n * @private\n */\n private async getAllVaultsFromSubgraph(\n filter?: VaultFilter\n ): Promise<SteerResponse<VaultEdge[]>> {\n try {\n // Extract chainId from filter\n const chainId = filter?.chainId;\n if (!chainId) {\n throw new Error('ChainId is required for subgraph');\n }\n\n // Get chain enum from chainId\n const chain = chainIdToName(chainId);\n \n if (!chain) { \n throw new Error(`Unsupported chainId: ${chainId}`);\n }\n\n // Get subgraph URL for this chain\n const subgraphUrl = steerSubgraphConfig[chain];\n if (!subgraphUrl) {\n throw new Error(`No subgraph configured for chain: ${chain}`);\n }\n\n const beaconNames = this.getProtocolBeaconNames(filter?.protocol);\n\n if (filter?.beaconName) {\n beaconNames.push(filter.beaconName);\n }\n\n const uniqueBeaconNames = [...new Set(beaconNames.filter(name => name.length > 0))];\n\n // Fetch all vaults from subgraph\n const subgraphVaults = await this.subgraphVaultClient.getAllVaultsFromSubgraph({\n subgraphUrl,\n chainId,\n showDeprecated: false,\n showCurrentProtocol: uniqueBeaconNames.length > 0,\n beaconNames: uniqueBeaconNames\n });\n\n // Get all supported protocols for this chain\n const supportedProtocols = getProtocolsForChainId(chainId, this.subgraphStudioKey);\n \n // Fetch APR data for all protocols in parallel\n const aprPromises = supportedProtocols.map(protocol => \n this.getAprs({ chainId, protocol }).catch(error => {\n console.warn(`Failed to fetch APR for protocol ${protocol}:`, error);\n return { success: false, data: null };\n })\n );\n\n const aprResults = await Promise.all(aprPromises);\n \n // Create a map of vault address to APR for quick lookup\n const aprMap = new Map<string, number>();\n aprResults && aprResults.forEach(aprResult => {\n if (aprResult.success && aprResult.data) {\n aprResult?.data?.vaults && aprResult.data.vaults.forEach(vaultApr => {\n aprMap.set(vaultApr.vaultAddress.toLowerCase(), vaultApr.apr.apr);\n });\n }\n });\n\n // Transform to VaultEdge array with APR data\n const vaultEdges: VaultEdge[] = subgraphVaults.map((vault, index) => {\n // Parse positions and compute tick range\n const positions = vault.positions?.map(pos => ({\n id: pos.id,\n upperTick: parseInt(pos.upperTick),\n lowerTick: parseInt(pos.lowerTick),\n relativeWeight: pos.relativeWeight\n }));\n\n // Compute tick range from positions\n let tickRange: { minLowerTick: number; maxUpperTick: number } | undefined;\n if (positions && positions.length > 0) {\n const lowerTicks = positions.map(p => p.lowerTick);\n const upperTicks = positions.map(p => p.upperTick);\n tickRange = {\n minLowerTick: Math.min(...lowerTicks),\n maxUpperTick: Math.max(...upperTicks)\n };\n }\n\n return {\n cursor: `subgraph_${chainId}_${index}`,\n node: {\n id: vault.id,\n chainId: chainId,\n vaultAddress: vault.id,\n protocol: vault.beaconName || '',\n beaconName: vault.beaconName || '',\n protocolBaseType: vault.beaconName || '',\n name: `${vault.token0Symbol}/${vault.token1Symbol}`,\n feeApr: aprMap.get(vault.id.toLowerCase()),\n stakingApr: undefined,\n merklApr: undefined,\n positions,\n tickRange,\n fees: vault.fees0 && vault.fees1 ? {\n fees0: vault.fees0,\n fees1: vault.fees1\n } : undefined,\n pool: {\n id: vault.pool || '',\n poolAddress: vault.pool || '',\n feeTier: vault.feeTier || '',\n tick: undefined,\n liquidity: undefined,\n volumeUSD: undefined,\n totalValueLockedUSD: undefined\n },\n token0: {\n id: vault.token0,\n symbol: vault.token0Symbol,\n name: vault.token0Symbol, // Use symbol as name since subgraph doesn't provide name\n decimals: parseInt(vault.token0Decimals) || 18,\n address: vault.token0,\n chainId: chainId\n },\n token1: {\n id: vault.token1,\n symbol: vault.token1Symbol,\n name: vault.token1Symbol, // Use symbol as name since subgraph doesn't provide name\n decimals: parseInt(vault.token1Decimals) || 18,\n address: vault.token1,\n chainId: chainId\n }\n }\n };\n });\n\n return {\n data: vaultEdges,\n status: 200,\n success: true\n };\n\n } catch (error) {\n console.error('Subgraph vault fetch failed:', error);\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch vaults from subgraph'\n };\n }\n }\n\n /**\n * Fallback method to fetch vaults from subgraph with pagination\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated vaults data from subgraph\n * @private\n */\n private async getVaultsFromSubgraph(\n filter?: VaultFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<VaultsConnection>> {\n try {\n // Extract chainId from filter\n const chainId = filter?.chainId;\n if (!chainId) {\n throw new Error('ChainId is required for subgraph fallback');\n }\n\n // Get chain enum from chainId\n\n const chain = chainIdToName(chainId);\n \n if (!chain) { \n throw new Error(`Unsupported chainId: ${chainId}`);\n }\n\n // Get subgraph URL for this chain\n const subgraphUrl = steerSubgraphConfig[chain];\n if (!subgraphUrl) {\n throw new Error(`No subgraph configured for chain: ${chain}`);\n }\n\n const beaconNames = this.getProtocolBeaconNames(filter?.protocol);\n\n if (filter?.beaconName) {\n beaconNames.push(filter.beaconName);\n }\n\n const uniqueBeaconNames = [...new Set(beaconNames.filter(name => name.length > 0))];\n\n // Fetch all vaults from subgraph\n const subgraphVaults = await this.subgraphVaultClient.getAllVaultsFromSubgraph({\n subgraphUrl,\n chainId,\n showDeprecated: false,\n showCurrentProtocol: uniqueBeaconNames.length > 0,\n beaconNames: uniqueBeaconNames\n });\n\n // Get all supported protocols for this chain\n const supportedProtocols = getProtocolsForChainId(chainId, this.subgraphStudioKey);\n \n // Fetch APR data for all protocols in parallel\n const aprPromises = supportedProtocols.map(protocol => \n this.getAprs({ chainId, protocol }).catch(error => {\n console.warn(`Failed to fetch APR for protocol ${protocol}:`, error);\n return { success: false, data: null };\n })\n );\n\n const aprResults = await Promise.all(aprPromises);\n \n // Create a map of vault address to APR for quick lookup\n const aprMap = new Map<string, number>();\n aprResults && aprResults.forEach(aprResult => {\n if (aprResult.success && aprResult.data) {\n aprResult?.data?.vaults && aprResult.data.vaults.forEach(vaultApr => {\n aprMap.set(vaultApr.vaultAddress.toLowerCase(), vaultApr.apr.apr);\n });\n }\n });\n\n // Transform to VaultsConnection format with pagination and populate APR data\n const vaultsConnection = this.subgraphVaultClient.transformToVaultsConnection(\n subgraphVaults,\n chainId,\n first,\n aprMap,\n after\n );\n\n // Enhance vault data with APR information\n if (vaultsConnection.edges) {\n vaultsConnection.edges = vaultsConnection.edges.map(edge => ({\n ...edge,\n node: {\n ...edge.node,\n feeApr: aprMap.get(edge.node.vaultAddress.toLowerCase()) || edge.node.feeApr\n }\n }));\n }\n\n const filteredVaultsConnection = this.applyProtocolFilter(vaultsConnection, filter?.protocol);\n\n return {\n data: filteredVaultsConnection,\n status: 200,\n success: true\n };\n\n } catch (error) {\n console.error('Subgraph vault fetch failed:', error);\n throw error;\n }\n }\n\n /**\n * Gets tokens with pagination support\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated tokens data\n * \n * @example\n * ```typescript\n * // Get first 100 tokens\n * const tokens = await vaultClient.getTokens({ chainId: 1 }, 100);\n * \n * // Filter by symbol\n * const usdcTokens = await vaultClient.getTokens({ symbol: 'USDC' });\n * ```\n */\n public async getTokens(\n filter?: TokenFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<TokensConnection>> {\n try {\n const response = await this.apiClient.tokens({\n filter,\n first,\n after\n });\n\n if (!response.data?.tokens) {\n return {\n data: null,\n status: response.status,\n success: true\n };\n }\n\n // Transform the response to match our interface\n const transformedData: TokensConnection = {\n edges: response.data.tokens.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n id: edge.node.id,\n symbol: edge.node.symbol,\n name: edge.node.name,\n decimals: edge.node.decimals,\n chainId: edge.node.chainId,\n address: edge.node.address\n }\n })),\n pageInfo: {\n hasNextPage: response.data.tokens.pageInfo.hasNextPage,\n endCursor: response.data.tokens.pageInfo.endCursor ?? null\n },\n totalCount: response.data.tokens.totalCount\n };\n\n return {\n data: transformedData,\n status: response.status,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getTokens is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets pools with pagination support\n * @param filter - Optional filter criteria\n * @param first - Number of items to fetch (default: 50)\n * @param after - Cursor for pagination (null for first page)\n * @returns Promise resolving to paginated pools data\n * \n * @example\n * ```typescript\n * // Get first 50 pools for Ethereum\n * const pools = await vaultClient.getPools({ chainId: 1 }, 50);\n * \n * // Filter by minimum liquidity\n * const liquidPools = await vaultClient.getPools({ \n * chainId: 1, \n * minLiquidity: '1000000' \n * });\n * ```\n */\n public async getPools(\n filter?: PoolFilter,\n first: number = 50,\n after?: string | null\n ): Promise<SteerResponse<PoolsConnection>> {\n try {\n const response = await this.apiClient.pools({\n filter,\n first,\n after\n });\n\n if (!response.data?.pools) {\n return {\n data: null,\n status: response.status,\n success: true\n };\n }\n\n // Transform the response to match our interface\n const transformedData: PoolsConnection = {\n edges: response.data.pools.edges.map(edge => ({\n cursor: edge.cursor,\n node: {\n id: edge.node.id,\n chainId: edge.node.chainId,\n feeTier: edge.node.feeTier,\n token0: {\n id: edge.node.token0?.id || '',\n symbol: edge.node.token0?.symbol || '',\n name: edge.node.token0?.name || '',\n decimals: edge.node.token0?.decimals || 0,\n address: edge.node.token0?.address || '',\n chainId: edge.node.token0?.chainId || 0\n },\n token1: {\n id: edge.node.token1?.id || '',\n symbol: edge.node.token1?.symbol || '',\n name: edge.node.token1?.name || '',\n decimals: edge.node.token1?.decimals || 0,\n address: edge.node.token1?.address || '',\n chainId: edge.node.token1?.chainId || 0\n }\n }\n })),\n pageInfo: {\n hasNextPage: response.data.pools.pageInfo.hasNextPage,\n endCursor: response.data.pools.pageInfo.endCursor ?? null\n },\n totalCount: response.data.pools.totalCount\n };\n\n return {\n data: transformedData,\n status: response.status,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getPools is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets all vaults by fetching all pages automatically\n * @param filter - Optional filter criteria\n * @param batchSize - Number of items to fetch per batch (default: 100)\n * @returns Promise resolving to all vaults data (includes pool information)\n * \n * @example\n * ```typescript\n * // Get all vaults for a specific chain\n * const allVaults = await vaultClient.getAllVaults({ chainId: 1 });\n * console.log(`Found ${allVaults.data?.length} vaults`);\n * \n * // Access pool information for each vault\n * allVaults.data?.forEach(vault => {\n * console.log(`Vault ${vault.name}: Pool ${vault.pool.id} (${vault.pool.feeTier} fee)`);\n * });\n * ```\n */\n public async getAllVaults(\n filter?: VaultFilter,\n batchSize: number = 100\n ): Promise<SteerResponse<VaultNode[]>> {\n try {\n const allVaults: VaultNode[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n\n while (hasNextPage) {\n const response = await this.getVaults(filter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch vaults'\n };\n }\n\n allVaults.push(...response.data.edges.map(edge => edge.node));\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allVaults,\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n\n /**\n * Gets all tokens by fetching all pages automatically\n * @param filter - Optional filter criteria\n * @param batchSize - Number of items to fetch per batch (default: 100)\n * @returns Promise resolving to all tokens data\n */\n public async getAllTokens(\n filter?: TokenFilter,\n batchSize: number = 100\n ): Promise<SteerResponse<TokenNode[]>> {\n try {\n const allTokens: TokenNode[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n\n while (hasNextPage) {\n const response = await this.getTokens(filter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch tokens'\n };\n }\n\n allTokens.push(...response.data.edges.map(edge => edge.node));\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allTokens,\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n\n /**\n * Gets all pools by fetching all pages automatically\n * @param filter - Optional filter criteria\n * @param batchSize - Number of items to fetch per batch (default: 100)\n * @returns Promise resolving to all pools data\n */\n public async getAllPools(\n filter?: PoolFilter,\n batchSize: number = 100\n ): Promise<SteerResponse<PoolNode[]>> {\n try {\n const allPools: PoolNode[] = [];\n let hasNextPage = true;\n let cursor: string | null = null;\n\n while (hasNextPage) {\n const response = await this.getPools(filter, batchSize, cursor);\n \n if (!response.success || !response.data) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: response.error || 'Failed to fetch pools'\n };\n }\n\n allPools.push(...response.data.edges.map(edge => edge.node));\n hasNextPage = response.data.pageInfo.hasNextPage;\n cursor = response.data.pageInfo.endCursor;\n }\n\n return {\n data: allPools,\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getAllPools is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets APR data for vaults from the Steer Finance API\n * @param filter - Filter containing chainId and protocol\n * @returns Promise resolving to APR data for vaults\n * \n * @example\n * ```typescript\n * // Get APRs for Uniswap vaults on Nibiru (chainId: 6900)\n * const aprs = await vaultClient.getAprs({ chainId: 6900, protocol: 'Uniswap' });\n * \n * if (aprs.success && aprs.data) {\n * aprs.data.vaults.forEach(vault => {\n * console.log(`Vault: ${vault.vaultAddress}`);\n * console.log(`APR: ${vault.apr.apr}% (${vault.apr.message})`);\n * console.log(`Beacon: ${vault.beaconName}`);\n * });\n * }\n * ```\n */\n public async getAprs(filter: AprFilter): Promise<SteerResponse<AprResponse>> {\n try {\n const { chainId, protocol } = filter;\n \n // Build the API URL\n const apiUrl = `https://api.steer.finance/getAprs?chainId=${chainId}&dexName=${protocol}`;\n \n const response = await fetch(apiUrl, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: `API request failed: ${response.statusText}`\n };\n }\n\n const data: AprResponse = await response.json();\n\n return {\n data,\n status: response.status,\n success: true\n };\n\n } catch (error) {\n return {\n data: null,\n status: 501,\n success: false,\n error: 'getAprs is not supported for this configuration'\n };\n }\n }\n\n /**\n * Gets detailed APR data for a specific Blackhole vault from the Steer Finance API\n * This includes snapshot analysis with historical APR data over different time periods\n * \n * @param params - Parameters containing vault address and chain ID\n * @returns Promise resolving to detailed APR data including snapshot analysis\n * \n * @example\n * ```typescript\n * // Get detailed APR for a Blackhole vault on Avalanche\n * const aprDetails = await vaultClient.getBlackholeAprDetailed({\n * vaultAddress: '0x5c1d454f08975c554f6b70a84fd8859fbdfcc069',\n * chainId: 43114\n * });\n * \n * if (aprDetails.success && aprDetails.data) {\n * console.log(`Vault: ${aprDetails.data.vaultAddress}`);\n * console.log(`Beacon: ${aprDetails.data.beaconName}`);\n * console.log(`Current APR: ${aprDetails.data.apr.apr}% (${aprDetails.data.apr.message})`);\n * \n * // Access snapshot analysis\n * aprDetails.data.snapshotAnalysis.forEach(snapshot => {\n * console.log(`Period ${snapshot.period}:`);\n * console.log(` Duration: ${snapshot.durationHours} hours`);\n * console.log(` TVL: $${snapshot.tvlUSD}`);\n * console.log(` Fees: $${snapshot.feesUSD}`);\n * console.log(` APR: ${snapshot.apr}%`);\n * });\n * }\n * ```\n */\n public async getBlackholeVaultApr(params: BlackholeAprDetailedParams): Promise<SteerResponse<BlackholeAprDetailedResponse>> {\n try {\n const { vaultAddress, chainId } = params;\n \n // Build the API URL\n const apiUrl = `https://api.steer.finance/blackhole/apr-detailed?vaultAddress=${vaultAddress}&chainId=${chainId}`;\n \n const response = await fetch(apiUrl, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n return {\n data: null,\n status: response.status,\n success: false,\n error: `API request failed: ${response.statusText}`\n };\n }\n\n const data: BlackholeAprDetailedResponse = await response.json();\n\n return {\n data,\n status: response.status,\n success: true\n };\n\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch Blackhole APR details'\n };\n }\n }\n\n /**\n * Gets the latest vaults from the subgraph\n */\n public async getLatestVaults<T>(): Promise<SteerResponse<T>> {\n const query = ` \n query latestVaults{\n vaults(first: 250, skip: 0, orderBy: createdAt, orderDirection: desc, where: {\n gasUsed_gt: 0\n } ) {\n id\n beaconName\n createdAt\n gasUsed\n token1Symbol\n token0Symbol\n token0\n token1\n token0Name\n token1Name\n strategyToken {\n id\n name\n creator {\n id\n }\n }\n }\n }\n `;\n\n return this.executeSubgraphQuery<T>(query);\n }\n\n /**\n * Deposits tokens into a vault\n * @param params The deposit parameters\n */\n public async deposit(params: VaultDepositParams): Promise<SteerResponse<Hash>> {\n return this.depositClient.deposit(params);\n }\n\n /**\n * Prepares the transaction data for depositing tokens into a vault without executing it\n * @param params The deposit parameters\n */\n public async prepareDepositTx(params: VaultDepositParams): Promise<SteerResponse<{\n address: Address;\n abi: {\n type: string;\n inputs: {\n name: string;\n internalType: string;\n type: string;\n }[];\n name: string;\n outputs: {\n internalType: string;\n name: string;\n type: string;\n }[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [Address, bigint, bigint, bigint, bigint, Address] | readonly [bigint, bigint, bigint, bigint, Address];\n }>> {\n return this.depositClient.prepareDepositTx(params);\n }\n\n /**\n * Gets the deposit ratio for a vault\n * @param vaultAddress The vault address\n */\n public async getDepositRatio(vaultAddress: Address, zeroForOne: boolean): Promise<SteerResponse<VaultDetailsResponse>> {\n try {\n const ratioResponse = await this.depositClient.getDepositRatio(vaultAddress, zeroForOne);\n if (!ratioResponse.success || !ratioResponse.data) {\n throw new Error(ratioResponse.error || 'Failed to get deposit ratio');\n }\n\n return {\n data: {\n details: ratioResponse.data.vaultDetails,\n ratio: ratioResponse.data.ratio,\n },\n status: 200,\n success: true\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n }\n\n /**\n * Withdraws tokens from a vault\n * @param params The withdrawal parameters\n */\n public async withdraw(params: VaultWithdrawParams): Promise<SteerResponse<Hash>> {\n return this.withdrawClient.withdraw(params);\n }\n\n /**\n * Prepares the transaction data for withdrawing tokens from a vault without executing it\n * @param params The withdrawal parameters\n */\n public async prepareWithdrawTx(params: VaultWithdrawParams): Promise<SteerResponse<{\n address: Address;\n abi: {\n type: string;\n inputs: {\n name: string;\n internalType: string;\n type: string;\n }[];\n name: string;\n outputs: never[];\n stateMutability: string;\n }[];\n functionName: string;\n args: readonly [\n bigint,\n bigint,\n bigint,\n Address\n ];\n }>> {\n return this.withdrawClient.prepareWithdrawTx(params);\n }\n\n /**\n * Calculates the amount of tokens that would be received for a given amount of LP tokens\n * @param vaultAddress The vault address\n * @param lpToken The amount of LP tokens to calculate for\n */\n public async getTokensFromLp(\n vaultAddress: Address,\n lpToken: bigint\n ): Promise<SteerResponse<TokensFromLpResponse>> {\n return this.withdrawClient.getTokensFromLp(vaultAddress, lpToken);\n }\n\n /**\n * Approves spending of tokens for a vault\n * @param params The approval parameters\n */\n public async approve(params: VaultApproveParams): Promise<SteerResponse<Hash>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'approve',\n args: [params.spender, params.amount],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\n\n return {\n data: hash,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the allowance for a vault token\n * @param params The allowance parameters\n */\n public async allowance(params: VaultAllowanceParams): Promise<SteerResponse<bigint>> {\n try {\n const allowance = await this.publicClient.readContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'allowance',\n args: [params.owner, params.spender],\n });\n\n return {\n data: allowance,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the balance of a vault token for an account\n * @param params The balance parameters\n */\n public async balanceOf(params: VaultBalanceParams): Promise<SteerResponse<bigint>> {\n try {\n const balance = await this.publicClient.readContract({\n address: params.vaultAddress,\n abi: VAULT_ABI,\n functionName: 'balanceOf',\n args: [params.account],\n });\n\n return {\n data: balance,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the total supply of a vault token\n * @param vaultAddress The vault address\n */\n public async totalSupply(vaultAddress: Address): Promise<SteerResponse<bigint>> {\n try {\n const totalSupply = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'totalSupply',\n });\n\n return {\n data: totalSupply,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the decimals of a vault token\n * @param vaultAddress The vault address\n */\n public async decimals(vaultAddress: Address): Promise<SteerResponse<number>> {\n try {\n const decimals = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'decimals',\n });\n\n return {\n data: decimals,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the symbol of a vault token\n * @param vaultAddress The vault address\n */\n public async symbol(vaultAddress: Address): Promise<SteerResponse<string>> {\n try {\n const result = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'symbol',\n });\n\n return {\n data: result,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets the name of a vault token\n * @param vaultAddress The vault address\n */\n public async name(vaultAddress: Address): Promise<SteerResponse<string>> {\n try {\n const result = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'name',\n });\n\n return {\n data: result,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n public async pool(vaultAddress: Address): Promise<SteerResponse<Address>> {\n try {\n const pool = await this.publicClient.readContract({\n address: vaultAddress,\n abi: VAULT_ABI,\n functionName: 'pool',\n });\n\n return {\n data: pool,\n status: 200,\n success: true,\n };\n } catch (error) {\n return {\n data: null,\n status: 500,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n /**\n * Gets a pool instance for a vault\n * @param params The pool instance parameters\n */\n public async getPoolInstance(params: PoolInstanceParams): Promise<SteerResponse<PoolV3>> {\n return this.depositClient.getPoolInstance(params);\n }\n\n /**\n * Gets the corresponding token amount based on the provided token amount and ratio\n * @param vaultAddress The vault address\n * @param amount The amount of token to calculate the corresponding amount for\n * @param zeroForOne If true, calculates token1 amount for given token0, if false calculates token0 amount for given token1\n */\n public async getCorrespondingTokenAmount(\n vaultAddress: Address,\n amount: bigint,\n zeroForOne: boolean\n ): Promise<SteerResponse<bigint>> {\n return this.depositClient.getCorrespondingTokenAmount(vaultAddress, amount, zeroForOne);\n }\n\n // Single-Asset Deposit Methods\n\n /**\n * Previews a single-asset deposit by running all simulation steps\n * This allows users to see the expected outcome before executing the transaction\n * \n * @param params - Single-asset deposit parameters\n * @param poolAddress - Address of the pool (must be provided separately)\n * @returns Promise resolving to the complete deposit preview\n * \n * @example\n * ```typescript\n * const preview = await vaultClient.previewSingleAssetDeposit({\n * assets: parseEther('100'),\n * receiver: userAddress,\n * vault: vaultAddress,\n * isToken0: true,\n * depositSlippagePercent: 5n,\n * swapSlippageBP: 500,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * }, poolAddress);\n * \n * if (preview.success) {\n * console.log('Expected LP tokens:', preview.data.lpEstimation.lpTokens);\n * console.log('Swap amount:', preview.data.swapAmount);\n * }\n * ```\n */\n public async previewSingleAssetDeposit(\n params: SingleAssetDepositParams,\n poolAddress: Address\n ): Promise<SteerResponse<SingleAssetDepositPreview>> {\n return this.singleAssetDepositClient.previewDeposit(params, poolAddress);\n }\n\n /**\n * Executes a single-asset deposit transaction\n * \n * @param params - Single-asset deposit parameters\n * @returns Promise resolving to the transaction hash\n * \n * @example\n * ```typescript\n * const result = await vaultClient.singleAssetDeposit({\n * assets: parseEther('100'),\n * receiver: userAddress,\n * vault: vaultAddress,\n * isToken0: true,\n * depositSlippagePercent: 5n,\n * swapSlippageBP: 500,\n * ammType: AMMType.UniswapV3,\n * singleAssetDepositContract: contractAddress\n * });\n * \n * if (result.success) {\n * console.log('Transaction hash:', result.data);\n * }\n * ```\n */\n public async singleAssetDeposit(params: SingleAssetDepositParams): Promise<SteerResponse<Hash>> {\n return this.singleAssetDepositClient.deposit(params);\n }\n\n /**\n * Prepares a single-asset deposit transaction without executing it\n * Useful for batching transactions or custom execution logic\n * \n * @param params - Single-asset deposit parameters\n * @returns Promise resolving to the prepared transaction data\n */\n public async prepareSingleAssetDepositTx(params: SingleAssetDepositParams) {\n return this.singleAssetDepositClient.prepareDepositTx(params);\n }\n\n /**\n * Validates single-asset deposit parameters\n * \n * @param params - Parameters to validate\n * @throws Error if parameters are invalid\n */\n public validateSingleAssetDepositParams(params: SingleAssetDepositParams): void {\n return this.singleAssetDepositClient.validateDepositParams(params);\n }\n\n // Reward Management Methods\n\n /**\n * Calculates pending rewards for a user from a vault\n * This is a view function that doesn't modify state\n * \n * @param params - Parameters containing vault address and user address\n * @returns Promise resolving to pending rewards data or zero values if function reverts\n * \n * @example\n * ```typescript\n * const pendingRewards = await vaultClient.calculatePendingRewards({\n * vaultAddress: '0x123...',\n * user: '0xabc...'\n * });\n * \n * if (pendingRewards.success && pendingRewards.data) {\n * console.log('Rewards:', pendingRewards.data.rewards);\n * console.log('Extra Rewards:', pendingRewards.data.extraRewards);\n * }\n * ```\n */\n public async calculatePendingRewards(params: PendingRewardsParams): Promise<SteerResponse<PendingRewardsResponse>> {\n try {\n const result = await this.publicClient.readContract({\n address: params.vaultAddress,\n abi: REWARD_FUNCTIONS_ABI,\n functionName: 'calculatePendingRewards',\n args: [params.user],\n }) as [bigint, bigint];\n\n return {\n data: {\n rewards: result[0],\n extraRewards: result[1]\n },\n status: 200,\n success: true,\n };\n } catch (error) {\n // If the function reverts or doesn't exist, return zero values\n console.warn('calculatePendingRewards failed, returning zero values:', error);\n return {\n data: {\n rewards: 0n,\n extraRewards: 0n\n },\n status: 200,\n success: true,\n };\n }\n }\n\n /**\n * Claims pending rewards from a vault using the claimBlackHolePendingRewards function\n * \n * @param params - Parameters containing vault address\n * @returns Promise resolving to transaction hash or zero values if function reverts\n * \n * @example\n * ```typescript\n * const claimResult = await vaultClient.claimPendingRewards({\n * vaultAddress: '0x123...'\n * });\n * \n * if (claimResult.success && claimResult.data) {\n * console.log('Claim transaction hash:', claimResult.data);\n * }\n * ```\n */\n public async claimBlackholePendingRewards(params: ClaimRewardsParams): Promise<SteerResponse<Hash | PendingRewardsResponse>> {\n try {\n const account = await this.walletClient.getAddresses();\n if (!account[0]) throw new Error('No account found');\n\n const { request } = await this.publicClient.simulateContract({\n address: params.vaultAddress,\n abi: REWARD_FUNCTIONS_ABI,\n functionName: 'claimUserRewards',\n args: [],\n account: account[0],\n });\n\n const hash = await this.walletClient.writeContract(request);\n\n return {\n data: hash,\n status: 200,\n success: true,\n };\n } catch (error) {\n console.error('claimBlackHolePendingRewards failed, error:', error);\n // If the function reverts or doesn't exist, return zero values instead of transaction hash\n console.warn('claimBlackHolePendingRewards failed, returning zero values:', error);\n return {\n data: {\n rewards: 0n,\n extraRewards: 0n\n },\n status: 200,\n success: true,\n };\n }\n }\n\n} \n"]}
@@ -1,4 +1,4 @@
1
- import { Chain } from '../chain';
1
+ import { Chain } from '../chain.js';
2
2
  export const stabilityVaultsConfig = {
3
3
  beaconContract: 'TestStabilityVault',
4
4
  beaconContractSaga: 'StabilityTest',
@@ -1 +1 @@
1
- {"version":3,"file":"stabilityVaultsConfig.js","sourceRoot":"","sources":["../../../../src/const/stabilityVaults/stabilityVaultsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAUjC,MAAM,CAAC,MAAM,qBAAqB,GAAuB;IACvD,cAAc,EAAE,oBAAoB;IACpC,kBAAkB,EAAE,eAAe;IACnC,gBAAgB,EAAE;QAChB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,4CAA4C;QAC9D,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,4CAA4C;KAC3D;IACD,WAAW,EAAE;QACX,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,gIAAgI;QAClJ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,0HAA0H;KACzI;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,kCAAkC,CAAC,KAAY;IAC7D,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAY;IACxD,OAAO,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import { Chain } from '../chain';\n\nexport interface StabilityVaultInfo {\n beaconContract: string;\n peripheryAddress: Partial<{ [chain in Chain]: string }>;\n subgraphUrl: Partial<{ [chain in Chain]: string }>;\n beaconContractSaga?: string;\n}\n\n\nexport const stabilityVaultsConfig: StabilityVaultInfo = {\n beaconContract: 'TestStabilityVault',\n beaconContractSaga: 'StabilityTest',\n peripheryAddress: {\n [Chain.Arbitrum]: '0xAc9d57AdaDC3593A8BB66729C7d2436dA8A13E7d',\n [Chain.Saga]: '0x2292d6ad79e932ae80ee6e03607341301705742d',\n },\n subgraphUrl: {\n [Chain.Arbitrum]: 'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-arbitrum/preprod/gn',\n [Chain.Saga]: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-saga-evm-stability/prod/gn',\n },\n};\n\n/**\n * Get the periphery address for a specific chain\n * @param chainId - The chain ID to lookup\n * @returns The periphery address for the chain, or undefined if not configured\n */\nexport function getStabilityVaultsPeripheryAddress(chain: Chain): string | undefined {\n return stabilityVaultsConfig.peripheryAddress[chain];\n}\n\n/**\n * Get the subgraph URL for a specific chain\n * @param chainId - The chain ID to lookup\n * @returns The subgraph URL for the chain, or undefined if not configured\n */\nexport function getStabilityVaultsSubgraphUrl(chain: Chain): string | undefined {\n return stabilityVaultsConfig.subgraphUrl[chain];\n}\n\n"]}
1
+ {"version":3,"file":"stabilityVaultsConfig.js","sourceRoot":"","sources":["../../../../src/const/stabilityVaults/stabilityVaultsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAUpC,MAAM,CAAC,MAAM,qBAAqB,GAAuB;IACvD,cAAc,EAAE,oBAAoB;IACpC,kBAAkB,EAAE,eAAe;IACnC,gBAAgB,EAAE;QAChB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,4CAA4C;QAC9D,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,4CAA4C;KAC3D;IACD,WAAW,EAAE;QACX,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,gIAAgI;QAClJ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,0HAA0H;KACzI;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,kCAAkC,CAAC,KAAY;IAC7D,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAY;IACxD,OAAO,qBAAqB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import { Chain } from '../chain.js';\n\nexport interface StabilityVaultInfo {\n beaconContract: string;\n peripheryAddress: Partial<{ [chain in Chain]: string }>;\n subgraphUrl: Partial<{ [chain in Chain]: string }>;\n beaconContractSaga?: string;\n}\n\n\nexport const stabilityVaultsConfig: StabilityVaultInfo = {\n beaconContract: 'TestStabilityVault',\n beaconContractSaga: 'StabilityTest',\n peripheryAddress: {\n [Chain.Arbitrum]: '0xAc9d57AdaDC3593A8BB66729C7d2436dA8A13E7d',\n [Chain.Saga]: '0x2292d6ad79e932ae80ee6e03607341301705742d',\n },\n subgraphUrl: {\n [Chain.Arbitrum]: 'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-arbitrum/preprod/gn',\n [Chain.Saga]: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-saga-evm-stability/prod/gn',\n },\n};\n\n/**\n * Get the periphery address for a specific chain\n * @param chainId - The chain ID to lookup\n * @returns The periphery address for the chain, or undefined if not configured\n */\nexport function getStabilityVaultsPeripheryAddress(chain: Chain): string | undefined {\n return stabilityVaultsConfig.peripheryAddress[chain];\n}\n\n/**\n * Get the subgraph URL for a specific chain\n * @param chainId - The chain ID to lookup\n * @returns The subgraph URL for the chain, or undefined if not configured\n */\nexport function getStabilityVaultsSubgraphUrl(chain: Chain): string | undefined {\n return stabilityVaultsConfig.subgraphUrl[chain];\n}\n\n"]}
@@ -1,5 +1,5 @@
1
- import { getProtocolTypeByBeacon } from '../const';
2
- import { Protocol } from '../const/chain';
1
+ import { getProtocolTypeByBeacon } from '../const/index.js';
2
+ import { Protocol } from '../const/chain.js';
3
3
  /**
4
4
  * GraphQL queries for fetching vault data from Steer subgraphs
5
5
  */