{"version":3,"sources":["../src/fusion-client.ts","../src/factory.ts"],"names":["OrderStatus","Web3ProviderConnector","FusionSDK","axios","NetworkEnum","PresetEnum","config"],"mappings":";;;;;;;;;;;AAgMO,IAAM,eAAA,GAAkB;AAAA,EAC7BA,qBAAA,CAAY,MAAA;AAAA,EACZA,qBAAA,CAAY,OAAA;AAAA,EACZA,qBAAA,CAAY,SAAA;AAAA,EACZA,qBAAA,CAAY,cAAA;AAAA,EACZA,qBAAA,CAAY;AACd;AA2BA,eAAsB,MAAM,EAAA,EAA2B;AACrD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAFsB,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AAoCf,IAAM,eAAN,MAAmB;AAAA,EArQ1B;AAqQ0B,IAAA,MAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BxB,YAAY,IAAA,EAaT;AACD,IAAA,MAAM,EAAE,SAAS,QAAA,EAAU,MAAA,EAAQ,SAAS,gBAAA,EAAkB,OAAA,EAAS,SAAQ,GAAI,IAAA;AAGnF,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,cAAA,CAAe,OAAO,CAAA;AAC5C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAEf,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,YAAA,GAAe,IAAIC,+BAAA,CAAsB,QAAQ,CAAA;AACtD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,gBAAA,GAAmB,gBAAA;AAExB,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG;AAAA,KACL;AAGA,IAAA,IAAA,CAAK,GAAA,GAAM,IAAIC,mBAAA,CAAU;AAAA,MACvB,GAAA,EAAK,GAAG,OAAO,CAAA,OAAA,CAAA;AAAA,MACf,SAAS,IAAA,CAAK,SAAA;AAAA,MACd,oBAAoB,IAAA,CAAK,YAAA;AAAA,MACzB,OAAA;AAAA;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,gCAAY,GAAA,KAAQ;AAClB,UAAA,MAAM,QAAA,GAAW,MAAMC,sBAAA,CAAM,GAAA,CAAI,GAAA,EAAK;AAAA,YACpC,SAAS,IAAA,CAAK;AAAA,WACf,CAAA;AACD,UAAA,OAAO,QAAA,CAAS,IAAA;AAAA,QAClB,CAAA,EALK,KAAA,CAAA;AAAA,QAML,IAAA,kBAAM,MAAA,CAAA,OAAO,GAAA,EAAK,IAAA,KAAS;AACzB,UAAA,MAAM,WAAW,MAAMA,sBAAA,CAAM,KAAK,GAAA,EAAK,IAAA,IAAQ,EAAC,EAAG;AAAA,YACjD,SAAS,IAAA,CAAK;AAAA,WACf,CAAA;AACD,UAAA,OAAO,QAAA,CAAS,IAAA;AAAA,QAClB,CAAA,EALM,MAAA;AAAA;AAMR,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,kBAAA,CAAmB,SAAA,EAAmB,OAAA,EAAiB,MAAA,EAAgB;AAC3E,IAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,WAAA,EAAc,KAAK,OAAO,CAAA,MAAA,CAAA;AACzD,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,MACjC,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,OAAA;AAAA,MACL;AAAA,KACD,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAChC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,OAAA,EAAS,IAAA,CAAK,SAAS,CAAA;AAC3D,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MAC1D;AACA,MAAA,MAAM,KAAA,GAAQ,SAAS,IAAA,EAAK;AAC5B,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,eAAA,CAAgB,OAAA,EAAiB,SAAA,EAAmB,SAAiB,MAAA,EAAgB;AAGzF,IAAA,MAAM,UAAU,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,WAAA,EAAc,KAAK,OAAO,CAAA,KAAA,CAAA;AACzD,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,MACjC,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,OAAA;AAAA,MACL,MAAA;AAAA,MACA,IAAA,EAAM,OAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACX,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAChC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,OAAA,EAAS,IAAA,CAAK,SAAS,CAAA;AAC3D,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MAC1D;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,IAAA,EAAK;AAErC,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,eAAA,CAAgB,QAAA,CAAS,EAAE,CAAA;AAE7C,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,IACjB;AAAA,EACF;AAAA,EAEQ,cAAc,KAAA,EAAe;AACnC,IAAA,OAAO,KAAA,KAAU,4CAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAuB,OAAA,EAAyB;AACtD,IAAA,QAAQ,OAAA;AAAS,MACf,KAAK,CAAA;AACH,QAAA,OAAO,4CAAA;AAAA;AAAA,MACT,KAAK,GAAA;AACH,QAAA,OAAO,4CAAA;AAAA;AAAA,MACT,KAAK,IAAA;AACH,QAAA,OAAO,4CAAA;AAAA;AAAA,MACT;AAEE,QAAA,OAAO,4CAAA;AAAA;AACX,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,MAAM,kBAAkB,MAAA,EAA6D;AACnF,IAAA,IAAI;AAGF,MAAA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,gBAAgB,CAAA,EAAG;AAC/C,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA;AAG7D,QAAA,IAAI,OAAO,cAAA,CAAe,WAAA,EAAY,KAAM,YAAA,CAAa,aAAY,EAAG;AACtE,UAAA,MAAM,IAAA,CAAK,eAAA;AAAA,YACT,MAAA,CAAO,aAAA;AAAA,YACP,MAAA,CAAO,gBAAA;AAAA,YACP,YAAA;AAAA,YACA,MAAA,CAAO;AAAA,WACT;AAEA,UAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,QAC1F;AAEA,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,qFAAqF,YAAY,CAAA;AAAA,SACnG;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAA2B;AAAA,QAC/B,kBAAkB,MAAA,CAAO,gBAAA;AAAA,QACzB,gBAAgB,MAAA,CAAO,cAAA;AAAA,QACvB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,eAAe,MAAA,CAAO,aAAA;AAAA,QACtB,UAAU,MAAA,CAAO,eAAA;AAAA,QACjB,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,MAAM;AAAA,OAC5C;AAGA,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,GAAA,CAAI,YAAY,WAAW,CAAA;AAExD,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,SAAA;AAAA,QACP,SAAS,SAAA,CAAU,OAAA;AAAA,QACnB,iBAAA,EAAmB,SAAA,CAAU,KAAA,CAAM,2BAAA,CAA4B,QAAA,EAAS;AAAA,QACxE,SAAA,EAAW,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,MAAA,EAAO;AAAA,QAC5C,WAAW,SAAA,CAAU;AAAA,OACvB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,KAAK,CAAA;AACnD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,+BAAA,EAAkC,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAe,CAAA;AAAA,OAC5F;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAM,mBAAmB,WAAA,EAAqD;AAC5E,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,CAAY,KAAA;AAE9B,MAAA,MAAM,IAAA,CAAK,gBAAA;AAAA,QACT,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,QAC1B,4CAAA;AAAA,QACA,KAAA,CAAM,aAAa,QAAA,EAAS;AAAA,QAC5B,IAAA,CAAK;AAAA,OACP;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,KAAK,CAAA;AACpD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,gCAAA,EAAmC,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAe,CAAA;AAAA,OAC7F;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAM,gBAAgB,WAAA,EAAsE;AAC1F,IAAA,IAAI;AACF,MAAA,MAAM,YAAY,MAAM,IAAA,CAAK,IAAI,SAAA,CAAU,WAAA,CAAY,MAAM,KAAK,CAAA;AAElE,MAAA,OAAO;AAAA,QACL,OAAO,WAAA,CAAY,KAAA;AAAA,QACnB,SAAA;AAAA,QACA,WAAW,WAAA,CAAY,SAAA;AAAA,QACvB,SAAS,WAAA,CAAY;AAAA,OACvB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,+BAA+B,KAAK,CAAA;AAClD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,6BAAA,EAAgC,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAe,CAAA;AAAA,OAC1F;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAM,kBAAkB,iBAAA,EAAgE;AACtF,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,WAAA;AAAA,QAC1B,kBAAkB,KAAA,CAAM,KAAA;AAAA,QACxB,iBAAA,CAAkB;AAAA,OACpB;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,kCAAkC,KAAK,CAAA;AACrD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,+BAAA,EAAkC,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAe,CAAA;AAAA,OAC5F;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,MAAM,2BAA2B,MAAA,EAA+C;AAC9E,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,iBAAA,CAAkB,MAAM,CAAA;AAGvD,IAAA,MAAM,IAAA,CAAK,mBAAmB,WAAW,CAAA;AAGzC,IAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAkB,WAAW,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,4BAA4B,MAAA,EAA+C;AAC/E,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,iBAAA,CAAkB,MAAM,CAAA;AACvD,IAAA,MAAM,IAAA,CAAK,mBAAmB,WAAW,CAAA;AAIzC,IAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAkB,WAAW,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,eAAe,IAAA,EAAgE;AACnF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,cAAA,CAAe,KAAK,SAAS,CAAA;AAEzD,QAAA,IAAI,eAAA,CAAgB,QAAA,CAAS,IAAA,CAAK,MAAyB,CAAA,EAAG;AAC5D,UAAA,OAAO,IAAA;AAAA,QACT;AAEA,QAAA,MAAM,MAAM,GAAM,CAAA;AAAA,MACpB,SAAS,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,IAAI,CAAC,CAAA;AACb,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,MAAA,EAAuB;AACrC,IAAA,MAAM,MAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,YAAA,EAAe,KAAK,OAAO,CAAA,OAAA,CAAA;AACtD,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,IAAA,MAAM,SAAA,GAAY,MAAA;AAClB,IAAA,SAAA,CAAU,QAAQ,CAAC,OAAA,KAAY,OAAO,MAAA,CAAO,WAAA,EAAa,OAAO,CAAC,CAAA;AAClE,IAAA,MAAM,UAAU,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAA;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,CAAK,SAAS,CAAA;AAC/D,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MAC1D;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,IAAA,EAAyC;AAC1D,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,kBAAA,CAAA;AAC3B,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AAEnC,IAAA,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,KAAK,CAAA;AACjC,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,UAAU,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAA;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,CAAK,SAAS,CAAA;AAC/D,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MAC1D;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,aAAA,EAAuB;AACtC,IAAA,MAAM,UAAA,GAAa,GAAG,IAAA,CAAK,OAAO,iBAAiB,IAAA,CAAK,OAAO,aAAa,aAAa,CAAA,CAAA;AACzF,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,UAAA,EAAY;AAAA,QACvC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,kBAAA;AAAA,UACR,cAAA,EAAgB,kBAAA;AAAA,UAChB,GAAG,IAAA,CAAK;AAAA;AACV,OACD,CAAA;AACD,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MAC1D;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,IAAI,CAAC,CAAA;AAChF,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,SAAA,CAAU,cAAc,CAAA;AACxD,MAAA,MAAM,cAAsD,EAAC;AAC7D,MAAA,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,YAAA,KAAiB;AAC9C,QAAA,MAAM,OAAA,GAAU,KAAK,YAAY,CAAA;AACjC,QAAA,WAAA,CAAY,YAAY,CAAA,GAAI,EAAE,GAAG,YAAA,CAAa,YAAY,GAAG,OAAA,EAAQ;AAAA,MACvE,CAAC,CAAA;AACD,MAAA,OAAO,WAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,CAAC,CAAA;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,eAAA,CAAgB,aAAA,EAAuB,cAAA,EAA0B;AACrE,IAAA,MAAM,UAAA,GAAa,GAAG,IAAA,CAAK,OAAO,iBAAiB,IAAA,CAAK,OAAO,aAAa,aAAa,CAAA,CAAA;AACzF,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAMA,sBAAA,CAAM,IAAA;AAAA,QAC3B,UAAA;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,SAAS,IAAA,CAAK;AAAA;AAChB,OACF;AAEA,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,CAAC,CAAA;AAC/C,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAM,SAAS,MAAA,EAA2B;AACxC,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,gBAAgB,CAAA,EAAG;AAC/C,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA;AAG7D,MAAA,IAAI,OAAO,cAAA,CAAe,WAAA,EAAY,KAAM,YAAA,CAAa,aAAY,EAAG;AACtE,QAAA,OAAO,MAAM,IAAA,CAAK,kBAAA,CAAmB,OAAO,gBAAA,EAAkB,YAAA,EAAc,OAAO,MAAM,CAAA;AAAA,MAC3F;AAEA,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,gFAAgF,YAAY,CAAA;AAAA,OAC9F;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAA2B;AAAA,QAC/B,kBAAkB,MAAA,CAAO,gBAAA;AAAA,QACzB,gBAAgB,MAAA,CAAO,cAAA;AAAA,QACvB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,eAAe,MAAA,CAAO,aAAA;AAAA,QACtB,cAAA,EAAgB,KAAA;AAAA,QAChB,MAAA,EAAQ;AAAA,OACV;AAEA,MAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA;AAAA,IAC5C,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,yBAAyB,KAAK,CAAA;AAC5C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,uBAAA,EAA0B,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAe,CAAA;AAAA,OACpF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,OAAA,EAA8B;AACnD,IAAA,QAAQ,OAAA;AAAS,MACf,KAAK,CAAA;AACH,QAAA,OAAOC,qBAAA,CAAY,QAAA;AAAA,MACrB,KAAK,EAAA;AACH,QAAA,OAAOA,qBAAA,CAAY,OAAA;AAAA,MACrB,KAAK,GAAA;AACH,QAAA,OAAOA,qBAAA,CAAY,OAAA;AAAA,MACrB,KAAK,KAAA;AACH,QAAA,OAAOA,qBAAA,CAAY,QAAA;AAAA,MACrB,KAAK,EAAA;AACH,QAAA,OAAOA,qBAAA,CAAY,QAAA;AAAA,MACrB,KAAK,IAAA;AACH,QAAA,OAAOA,qBAAA,CAAY,QAAA;AAAA,MACrB,KAAK,KAAA;AACH,QAAA,OAAOA,qBAAA,CAAY,SAAA;AAAA,MACrB,KAAK,GAAA;AACH,QAAA,OAAOA,qBAAA,CAAY,MAAA;AAAA,MACrB,KAAK,GAAA;AACH,QAAA,OAAOA,qBAAA,CAAY,MAAA;AAAA,MACrB;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,OAAO,CAAA,CAAE,CAAA;AAAA;AACtD,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,MAAA,EAA6B;AACnD,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,MAAA;AACH,QAAA,OAAOC,oBAAA,CAAW,IAAA;AAAA,MACpB,KAAK,QAAA;AACH,QAAA,OAAOA,oBAAA,CAAW,MAAA;AAAA,MACpB,KAAK,MAAA;AACH,QAAA,OAAOA,oBAAA,CAAW,IAAA;AAAA,MACpB,KAAK,QAAA;AACH,QAAA,OAAOA,oBAAA,CAAW,MAAA;AAAA,MACpB;AACE,QAAA,OAAOA,oBAAA,CAAW,MAAA;AAAA;AACtB,EACF;AACF;;;ACrwBO,SAAS,mBAAmB,MAAA,EAA0C;AAC3E,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAA,EAAK;AAAA;AAAA,MAEH,IAAA,gCAAaC,OAAAA,KAA8B;AACzC,QAAA,IAAI,CAACA,OAAAA,CAAO,MAAA,CAAO,UAAU,MAAM,IAAI,MAAM,wBAAwB,CAAA;AACrE,QAAA,OAAO,MAAMA,OAAAA,CAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK;AAAA,UACvC,IAAIA,OAAAA,CAAO,EAAA;AAAA,UACX,MAAMA,OAAAA,CAAO;AAAA,SACd,CAAA;AAAA,MACH,CAAA,EANM,MAAA;AAAA,KAOR;AAAA,IACA,MAAA,0BAAS,SAAA,KAAgD;AACvD,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,OAAA,IAAW,EAAC;AACtC,MAAA,MAAM,WAAW,EAAC;AAElB,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAA6B;AAC5C,QAAA,IAAI,MAAA,CAAO,SAAS,iBAAA,EAAmB;AAErC,UAAA,QAAA,CAAS,eAAA,GAAkB,OAAO,aAAA,EAAuB,eAAA,KAA4B;AACnF,YAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AAC5C,YAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAQ,GAAI,SAAA;AAGnC,YAAA,MAAM,UAAA,GAAa,EAAE,GAAG,KAAA,EAAM;AAC9B,YAAA,OAAO,UAAA,CAAW,YAAA;AAClB,YAAA,OAAO,MAAM,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,MAAA,EAAQ,YAAY,OAAO,CAAA;AAAA,UACtE,CAAA;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,OAAO,QAAA;AAAA,IACT,CAAA,EApBQ,QAAA;AAAA,GAqBV;AACA,EAAA,OAAO,IAAI,YAAA,CAAa;AAAA,IACtB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAA,EAAU,YAAA;AAAA,IACV,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAS,MAAA,CAAO,MAAA;AAAA,IAChB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,IACzB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,MAAA,CAAO;AAAA,GACjB,CAAA;AACH;AA3CgB,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA","file":"index.cjs","sourcesContent":["import {\n  FusionSDK,\n  NetworkEnum,\n  type OrderInfo,\n  type OrderParams,\n  OrderStatus,\n  type OrderStatusResponse,\n  type PreparedOrder,\n  PresetEnum,\n  type QuoteParams,\n  type Web3Like,\n  Web3ProviderConnector,\n} from '@1inch/fusion-sdk';\nimport axios from 'axios';\nimport type { Signer, TypedDataDomain, TypedDataField } from 'ethers';\n\n/**\n * Configuration for creating a 1inch Fusion order\n *\n * @interface FusionOrderConfig\n * @property {string} fromTokenAddress - Address of the token being sold (maker asset)\n * @property {string} toTokenAddress - Address of the token being bought (taker asset)\n * @property {string} amount - Amount of fromToken to sell (in wei/smallest unit)\n * @property {string} walletAddress - Wallet address creating the order\n * @property {string} [receiverAddress] - Optional receiver address (defaults to maker address)\n * @property {'fast' | 'medium' | 'slow' | 'custom'} [preset] - Preset type to use for the order\n * @property {Object} [customPreset] - Custom preset configuration (only used if preset is 'custom')\n * @property {number} customPreset.auctionDuration - Duration of the auction in seconds\n * @property {string} customPreset.auctionStartAmount - Starting amount for the auction\n * @property {string} customPreset.auctionEndAmount - Ending amount for the auction\n * @property {Array<{delay: number, coefficient: number}>} [customPreset.points] - Auction curve points\n * @property {boolean} [enableEstimate] - Enable price estimation\n * @property {number} [fee] - Fee in basis points (100 = 1%)\n * @property {boolean} [surplus] - Enable surplus fee\n */\nexport interface FusionOrderConfig {\n  /** Address of the token being sold (maker asset) */\n  fromTokenAddress: string;\n  /** Address of the token being bought (taker asset) */\n  toTokenAddress: string;\n  /** Amount of fromToken to sell (in wei/smallest unit) */\n  amount: string;\n  /** Wallet address creating the order */\n  walletAddress: string;\n  /** Optional receiver address (defaults to maker address) */\n  receiverAddress?: string;\n  /** Preset type to use for the order */\n  preset?: 'fast' | 'medium' | 'slow' | 'custom';\n  /** Custom preset configuration (only used if preset is 'custom') */\n  customPreset?: {\n    auctionDuration: number;\n    auctionStartAmount: string;\n    auctionEndAmount: string;\n    points?: Array<{ delay: number; coefficient: number }>;\n  };\n  /** Enable price estimation */\n  enableEstimate?: boolean;\n  /** Fee in basis points (100 = 1%) */\n  fee?: number;\n  /** Enable surplus fee */\n  surplus?: boolean;\n}\n\n/**\n * Interface for signing typed data (EIP-712)\n *\n * @interface TypedDataSigner\n * @method _signTypedData Signs typed data using EIP-712 standard\n * @param {TypedDataDomain} domain - The domain separator for the typed data\n * @param {Record<string, Array<TypedDataField>>} types - The type definitions\n * @param {Record<string, unknown>} value - The values to sign\n * @returns {Promise<string>} The signature as a hex string\n */\nexport interface TypedDataSigner {\n  _signTypedData(\n    domain: TypedDataDomain,\n    types: Record<string, Array<TypedDataField>>,\n    value: Record<string, unknown>\n  ): Promise<string>;\n}\n\n/**\n * Represents a tag associated with a token\n *\n * @interface Tag\n * @property {string} value - The tag value\n * @property {string} provider - The provider that assigned this tag\n */\nexport interface Tag {\n  value: string;\n  provider: string;\n}\n\n/**\n * Represents a token from the 1inch API\n *\n * @interface OneInchToken\n * @property {string} symbol - Token symbol (e.g., 'USDC')\n * @property {number} chainId - Blockchain chain ID\n * @property {string} name - Full token name\n * @property {string} address - Token contract address\n * @property {number} decimals - Number of decimal places\n * @property {string} [logoURI] - URL to token logo\n * @property {boolean} eip2612 - Whether token supports EIP-2612 (permit)\n * @property {boolean} isFoT - Whether token is fee-on-transfer\n * @property {string[]} providers - List of providers supporting this token\n * @property {string} rating - Token rating/score\n * @property {Tag[]} tags - Associated tags\n * @property {number} [marketCap] - Market capitalization (if available)\n */\nexport interface OneInchToken {\n  symbol: string;\n  chainId: number;\n  name: string;\n  address: string;\n  decimals: number;\n  logoURI?: string;\n  eip2612: boolean;\n  isFoT: boolean;\n  providers: string[];\n  rating: string;\n  tags: Tag[];\n  marketCap?: number;\n}\n\n/**\n * Type alias for an array of OneInchToken objects\n *\n * @typedef {OneInchToken[]} OneInchTokenSearchResult\n */\nexport type OneInchTokenSearchResult = Array<OneInchToken>;\n\n/**\n * Signer interface for signing orders (compatible with ethers v5/v6)\n *\n * @interface OrderSigner\n * @extends {TypedDataSigner}\n * @method getAddress Gets the signer's wallet address\n * @returns {Promise<string>} The wallet address\n */\nexport interface OrderSigner extends TypedDataSigner {\n  getAddress(): Promise<string>;\n}\n\n/**\n * Result of creating a fusion order\n *\n * @interface CreateFusionOrderResult\n * @property {PreparedOrder} order - The order structure ready for signing\n * @property {string} quoteId - Quote information used to create the order\n * @property {string} settlementAddress - Settlement contract address\n * @property {string} extension - Extension data for the order\n * @property {string} orderHash - Unique hash identifying this order\n */\nexport interface CreateFusionOrderResult {\n  /** The order structure */\n  order: PreparedOrder;\n  /** Quote information used to create the order */\n  quoteId: string;\n  /** Settlement contract address */\n  settlementAddress: string;\n  /** Extension data */\n  extension: string;\n  /** Order hash */\n  orderHash: string;\n}\n\n/**\n * Result of signing a fusion order\n *\n * @interface SignFusionOrderResult\n * @property {PreparedOrder} order - The signed order ready for submission\n * @property {string} signature - The EIP-712 signature\n * @property {string} orderHash - Unique hash identifying this order\n * @property {string} quoteId - Quote ID associated with this order\n */\nexport interface SignFusionOrderResult {\n  /** The signed order ready for submission */\n  order: PreparedOrder;\n  /** The signature */\n  signature: string;\n  /** Order hash */\n  orderHash: string;\n  /** Quote ID */\n  quoteId: string;\n}\n\n/**\n * Array of order statuses that indicate the order has completed (either successfully or with an error)\n *\n * @constant {readonly OrderStatus[]} exitOrderStatus\n */\nexport const exitOrderStatus = [\n  OrderStatus.Filled,\n  OrderStatus.Expired,\n  OrderStatus.Cancelled,\n  OrderStatus.FalsePredicate,\n  OrderStatus.NotEnoughBalanceOrAllowance,\n] as const;\n\n/**\n * Type representing order statuses that indicate completion\n *\n * @typedef {typeof exitOrderStatus[number]} ExitOrderStatus\n */\nexport type ExitOrderStatus = (typeof exitOrderStatus)[number];\n\n/**\n * Extended order status response that includes the specific exit status\n *\n * @interface OrderStatusResponseWithStatus\n * @extends {OrderStatusResponse}\n * @property {ExitOrderStatus} status - The specific exit status of the order\n */\nexport interface OrderStatusResponseWithStatus extends OrderStatusResponse {\n  status: ExitOrderStatus;\n}\n\n/**\n * Utility function to create a delay\n *\n * @function sleep\n * @param {number} ms - Number of milliseconds to wait\n * @returns {Promise<void>} Promise that resolves after the specified delay\n */\nexport async function sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Client for creating and signing 1inch Fusion orders using the official SDK\n *\n * The FusionClient provides a comprehensive interface for interacting with the 1inch Fusion\n * protocol, including order creation, approval, signing, and submission. It handles both\n * native token swaps and ERC-20 token fusion orders.\n *\n * @class FusionClient\n * @example\n * ```typescript\n * import { FusionClient } from '@leapwallet/rwa-swap-core';\n *\n * const client = new FusionClient({\n *   chainId: 1,\n *   provider: web3Provider,\n *   signer: ethersSigner,\n *   baseUrl: 'https://api.1inch.io',\n *   approveAllowance: async (contract, spender, amount, signer) => {\n *     // Your approval logic\n *   }\n * });\n *\n * // Create and submit a fusion order\n * const orderInfo = await client.createAndSubmitFusionOrder({\n *   fromTokenAddress: '0xA0b86a33E6441b8c4C8C0C4C8C0C4C8C0C4C8C0C4',\n *   toTokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n *   amount: '1000000000000000000', // 1 ETH in wei\n *   walletAddress: '0x...',\n *   preset: 'medium'\n * });\n * ```\n */\nexport class FusionClient {\n  private sdk: FusionSDK;\n  private networkId: NetworkEnum;\n  private baseUrl: string;\n  private chainId: number;\n  private web3Provider: Web3ProviderConnector;\n  private signer: Signer;\n  private headers?: Record<string, string>;\n  private approveAllowance: (\n    contractAddress: string,\n    spender: string,\n    quantity: string,\n    signer: Signer\n  ) => Promise<void>;\n\n  /**\n   * Creates a new FusionClient instance\n   *\n   * @constructor\n   * @param {Object} opts - Configuration options for the client\n   * @param {number} opts.chainId - The blockchain chain ID\n   * @param {Web3Like} opts.provider - Web3 provider instance\n   * @param {Signer} opts.signer - Ethers.js signer for wallet operations\n   * @param {string} opts.baseUrl - Base URL for the 1inch API\n   * @param {string} [opts.authKey] - Optional API key for enhanced rate limits\n   * @param {Record<string, string>} [opts.headers] - Optional custom HTTP headers\n   * @param {Function} opts.approveAllowance - Function to handle token approvals\n   */\n  constructor(opts: {\n    chainId: number;\n    provider: Web3Like;\n    signer: Signer;\n    baseUrl: string;\n    authKey?: string;\n    headers?: Record<string, string>;\n    approveAllowance: (\n      contractAddress: string,\n      spender: string,\n      quantity: string,\n      signer: Signer\n    ) => Promise<void>;\n  }) {\n    const { chainId, provider, signer, baseUrl, approveAllowance, authKey, headers } = opts;\n    // Map chainId to NetworkEnum\n\n    this.networkId = this.getNetworkEnum(chainId);\n    this.baseUrl = baseUrl;\n\n    this.chainId = chainId;\n    this.web3Provider = new Web3ProviderConnector(provider);\n    this.signer = signer;\n    this.approveAllowance = approveAllowance;\n\n    this.headers = {\n      'Content-Type': 'application/json',\n      ...headers,\n    };\n\n    // Initialize the Fusion SDK\n    this.sdk = new FusionSDK({\n      url: `${baseUrl}/fusion`,\n      network: this.networkId,\n      blockchainProvider: this.web3Provider,\n      authKey, // Optional API key for better rate limits\n      httpProvider: {\n        get: async (url) => {\n          const response = await axios.get(url, {\n            headers: this.headers,\n          });\n          return response.data;\n        },\n        post: async (url, data) => {\n          const response = await axios.post(url, data || {}, {\n            headers: this.headers,\n          });\n          return response.data;\n        },\n      },\n    });\n  }\n\n  async getNativeSwapQuote(fromToken: string, toToken: string, amount: string) {\n    const baseUrl = `${this.baseUrl}/swap/v6.1/${this.chainId}/quote`;\n    const params = new URLSearchParams({\n      src: fromToken,\n      dst: toToken,\n      amount,\n    });\n\n    const url = `${baseUrl}?${params}`;\n    try {\n      const response = await fetch(url, { headers: this.headers });\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n      const quote = response.json();\n      return quote;\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  async swapNativeToken(address: string, fromToken: string, toToken: string, amount: string) {\n    // const quote = await this.getNativeSwapQuote(fromToken, toToken, amount);\n\n    const baseUrl = `${this.baseUrl}/swap/v6.1/${this.chainId}/swap`;\n    const params = new URLSearchParams({\n      src: fromToken,\n      dst: toToken,\n      amount,\n      from: address,\n      origin: address,\n      slippage: '1',\n    });\n    const url = `${baseUrl}?${params}`;\n    try {\n      const response = await fetch(url, { headers: this.headers });\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n      const callData = await response.json();\n\n      await this.signer.sendTransaction(callData.tx);\n\n      return callData;\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  private isNativeToken(token: string) {\n    return token === '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';\n  }\n\n  /**\n   * Gets the wrapped token address for a given chain ID\n   */\n  private getWrappedTokenAddress(chainId: number): string {\n    switch (chainId) {\n      case 1: // Ethereum\n        return '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'; // WETH\n      case 137: // Polygon\n        return '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270'; // WMATIC\n      case 8453: // Base\n        return '0x4200000000000000000000000000000000000006'; // WETH\n      default:\n        // For now, return the same WETH address for all chains as requested\n        return '0x4200000000000000000000000000000000000006';\n    }\n  }\n\n  /**\n   * Creates a fusion order based on the provided configuration\n   *\n   * This method creates a new 1inch Fusion order using the official SDK. It handles\n   * native token detection and provides appropriate error messages for unsupported operations.\n   *\n   * @param {FusionOrderConfig} config - Configuration for the fusion order\n   * @returns {Promise<CreateFusionOrderResult>} The created order with metadata\n   * @throws {Error} When trying to create orders with native tokens or other invalid configurations\n   *\n   * @example\n   * ```typescript\n   * const orderResult = await client.createFusionOrder({\n   *   fromTokenAddress: '0xA0b86a33E6441b8c4C8C0C4C8C0C4C8C0C4C8C0C4',\n   *   toTokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n   *   amount: '1000000000000000000',\n   *   walletAddress: '0x...',\n   *   preset: 'medium'\n   * });\n   * ```\n   */\n  async createFusionOrder(config: FusionOrderConfig): Promise<CreateFusionOrderResult> {\n    try {\n      // const fromToken = config.fromTokenAddress;\n\n      if (this.isNativeToken(config.fromTokenAddress)) {\n        const wrappedToken = this.getWrappedTokenAddress(this.chainId);\n\n        // If user is trying to swap native token to wrapped token, use direct swap\n        if (config.toTokenAddress.toLowerCase() === wrappedToken.toLowerCase()) {\n          await this.swapNativeToken(\n            config.walletAddress,\n            config.fromTokenAddress,\n            wrappedToken,\n            config.amount\n          );\n          // Return early since this is a direct swap, not a fusion order\n          throw new Error('Direct native to wrapped token swap completed. No fusion order needed.');\n        }\n\n        throw new Error(\n          `Cannot create fusion order with native token. Please swap to wrapped token first: ${wrappedToken}`\n        );\n      }\n\n      const orderParams: OrderParams = {\n        fromTokenAddress: config.fromTokenAddress,\n        toTokenAddress: config.toTokenAddress,\n        amount: config.amount,\n        walletAddress: config.walletAddress,\n        receiver: config.receiverAddress,\n        preset: this.mapPresetToEnum(config.preset),\n      };\n\n      // Create the order using SDK\n      const orderData = await this.sdk.createOrder(orderParams);\n\n      return {\n        order: orderData,\n        quoteId: orderData.quoteId,\n        settlementAddress: orderData.order.settlementExtensionContract.toString(),\n        extension: orderData.order.extension.encode(),\n        orderHash: orderData.hash,\n      };\n    } catch (error) {\n      console.error('Error creating fusion order:', error);\n      throw new Error(\n        `Failed to create fusion order: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  /**\n   * Approves token allowance for 1inch settlement contract\n   *\n   * This method handles the token approval step required before signing a fusion order.\n   * It calls the provided approveAllowance function with the appropriate parameters.\n   *\n   * @param {CreateFusionOrderResult} orderResult - The result from createFusionOrder\n   * @returns {Promise<void>} Promise that resolves when approval is complete\n   * @throws {Error} When approval fails\n   *\n   * @example\n   * ```typescript\n   * const orderResult = await client.createFusionOrder(config);\n   * await client.approveFusionOrder(orderResult);\n   * ```\n   */\n  async approveFusionOrder(orderResult: CreateFusionOrderResult): Promise<void> {\n    try {\n      const { order } = orderResult.order;\n\n      await this.approveAllowance(\n        order.makerAsset.toString(),\n        '0x111111125421cA6dc452d289314280a0f8842A65',\n        order.makingAmount.toString(),\n        this.signer\n      );\n    } catch (error) {\n      console.error('Error approving fusion order:', error);\n      throw new Error(\n        `Failed to approve fusion order: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  /**\n   * Signs a fusion order using EIP-712 (approval must be done separately)\n   *\n   * This method signs the fusion order using the EIP-712 standard. The order must be\n   * approved before calling this method.\n   *\n   * @param {CreateFusionOrderResult} orderResult - The result from createFusionOrder\n   * @returns {Promise<SignFusionOrderResult>} The signed order with signature\n   * @throws {Error} When signing fails\n   *\n   * @example\n   * ```typescript\n   * const orderResult = await client.createFusionOrder(config);\n   * await client.approveFusionOrder(orderResult);\n   * const signedOrder = await client.signFusionOrder(orderResult);\n   * ```\n   */\n  async signFusionOrder(orderResult: CreateFusionOrderResult): Promise<SignFusionOrderResult> {\n    try {\n      const signature = await this.sdk.signOrder(orderResult.order.order);\n\n      return {\n        order: orderResult.order,\n        signature,\n        orderHash: orderResult.orderHash,\n        quoteId: orderResult.quoteId,\n      };\n    } catch (error) {\n      console.error('Error signing fusion order:', error);\n      throw new Error(\n        `Failed to sign fusion order: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  /**\n   * Submits a signed fusion order to the 1inch relayer\n   *\n   * This method submits the order to the 1inch relayer network for execution.\n   * The order must be created and approved before submission.\n   *\n   * @param {CreateFusionOrderResult} signedOrderResult - The result from createFusionOrder\n   * @returns {Promise<OrderInfo>} Information about the submitted order\n   * @throws {Error} When submission fails\n   *\n   * @example\n   * ```typescript\n   * const orderResult = await client.createFusionOrder(config);\n   * await client.approveFusionOrder(orderResult);\n   * const orderInfo = await client.submitFusionOrder(orderResult);\n   * ```\n   */\n  async submitFusionOrder(signedOrderResult: CreateFusionOrderResult): Promise<OrderInfo> {\n    try {\n      const info = await this.sdk.submitOrder(\n        signedOrderResult.order.order,\n        signedOrderResult.quoteId\n      );\n\n      return info;\n    } catch (error) {\n      console.error('Error submitting fusion order:', error);\n      throw new Error(\n        `Failed to submit fusion order: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  /**\n   * Creates, approves, signs, and submits a fusion order in one call\n   *\n   * This is a convenience method that combines all the steps needed to create and submit\n   * a fusion order. It handles the complete flow: create → approve → submit.\n   *\n   * @param {FusionOrderConfig} config - Configuration for the fusion order\n   * @returns {Promise<OrderInfo>} Information about the submitted order\n   * @throws {Error} When any step in the process fails\n   *\n   * @example\n   * ```typescript\n   * const orderInfo = await client.createAndSubmitFusionOrder({\n   *   fromTokenAddress: '0xA0b86a33E6441b8c4C8C0C4C8C0C4C8C0C4C8C0C4',\n   *   toTokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n   *   amount: '1000000000000000000',\n   *   walletAddress: '0x...',\n   *   preset: 'medium'\n   * });\n   * ```\n   */\n  async createAndSubmitFusionOrder(config: FusionOrderConfig): Promise<OrderInfo> {\n    const orderResult = await this.createFusionOrder(config);\n\n    // Approve token allowance first\n    await this.approveFusionOrder(orderResult);\n\n    //const signResult = await this.signFusionOrder(orderResult);\n    return await this.submitFusionOrder(orderResult);\n  }\n\n  /**\n   * Creates order, approves tokens, and submits with automatic signing\n   */\n  async approveAndSubmitFusionOrder(config: FusionOrderConfig): Promise<OrderInfo> {\n    const orderResult = await this.createFusionOrder(config);\n    await this.approveFusionOrder(orderResult);\n\n    // Sign and submit in one step to minimize wallet interactions\n\n    return await this.submitFusionOrder(orderResult);\n  }\n\n  async getOrderStatus(info: OrderInfo): Promise<OrderStatusResponseWithStatus | null> {\n    while (true) {\n      try {\n        const data = await this.sdk.getOrderStatus(info.orderHash);\n\n        if (exitOrderStatus.includes(data.status as ExitOrderStatus)) {\n          return data as OrderStatusResponseWithStatus;\n        }\n\n        await sleep(10_000);\n      } catch (e) {\n        console.log(e);\n        return null;\n      }\n    }\n  }\n\n  async getTokens(tokens: Array<string>) {\n    const url = `${this.baseUrl}/token/v1.2/${this.chainId}/custom`;\n    const params = new URLSearchParams();\n    const addresses = tokens;\n    addresses.forEach((address) => params.append('addresses', address));\n    const fullUrl = `${url}?${params.toString()}`;\n    try {\n      const response = await fetch(fullUrl, { headers: this.headers });\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n      const data = await response.json();\n      return data;\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  async searchTokens(opts: { query: string; limit?: number }) {\n    const url = `${this.baseUrl}/token/v1.4/search`;\n    const params = new URLSearchParams();\n\n    params.append('query', opts.query);\n    if (opts.limit) {\n      params.append('limit', opts.limit.toString());\n    }\n\n    const fullUrl = `${url}?${params.toString()}`;\n    try {\n      const response = await fetch(fullUrl, { headers: this.headers });\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n      const data = await response.json();\n      return data;\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  async getBalance(walletAddress: string) {\n    const balanceUrl = `${this.baseUrl}/balance/v1.2/${this.chainId}/balances/${walletAddress}`;\n    try {\n      const response = await fetch(balanceUrl, {\n        headers: {\n          accept: 'application/json',\n          'content-type': 'application/json',\n          ...this.headers,\n        },\n      });\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n      const data = await response.json();\n      const tokenAddresses = Object.keys(data).filter((key) => parseInt(data[key]) > 0);\n      const tokenDetails = await this.getTokens(tokenAddresses);\n      const balanceData: Record<string, Record<string, string>> = {};\n      Object.keys(tokenDetails).map((tokenAddress) => {\n        const balance = data[tokenAddress];\n        balanceData[tokenAddress] = { ...tokenDetails[tokenAddress], balance };\n      });\n      return balanceData;\n    } catch (e) {\n      console.error('Error fetching balances', e);\n      return null;\n    }\n  }\n\n  async getTokenBalance(walletAddress: string, tokenAddresses: string[]) {\n    const balanceUrl = `${this.baseUrl}/balance/v1.2/${this.chainId}/balances/${walletAddress}`;\n    try {\n      const response = await axios.post<Record<string, string>>(\n        balanceUrl,\n        {\n          tokens: tokenAddresses,\n        },\n        {\n          headers: this.headers,\n        }\n      );\n\n      return response.data;\n    } catch (e) {\n      console.error('Error fetching token balance', e);\n      return null;\n    }\n  }\n\n  /**\n   * Gets a quote from the 1inch quoter API\n   *\n   * This method fetches a quote for the specified token swap, providing price information\n   * and other details needed for order creation.\n   *\n   * @param {FusionOrderConfig} config - Configuration for the quote request\n   * @returns {Promise<any>} Quote information from the 1inch API\n   * @throws {Error} When quote request fails or native tokens are used\n   *\n   * @example\n   * ```typescript\n   * const quote = await client.getQuote({\n   *   fromTokenAddress: '0xA0b86a33E6441b8c4C8C0C4C8C0C4C8C0C4C8C0C4',\n   *   toTokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n   *   amount: '1000000000000000000',\n   *   walletAddress: '0x...'\n   * });\n   * ```\n   */\n  async getQuote(config: FusionOrderConfig) {\n    if (this.isNativeToken(config.fromTokenAddress)) {\n      const wrappedToken = this.getWrappedTokenAddress(this.chainId);\n\n      // If user is trying to get quote for native token to wrapped token, return direct swap quote\n      if (config.toTokenAddress.toLowerCase() === wrappedToken.toLowerCase()) {\n        return await this.getNativeSwapQuote(config.fromTokenAddress, wrappedToken, config.amount);\n      }\n\n      throw new Error(\n        `Cannot get fusion quote with native token. Please use wrapped token instead: ${wrappedToken}`\n      );\n    }\n\n    try {\n      const quoteParams: QuoteParams = {\n        fromTokenAddress: config.fromTokenAddress,\n        toTokenAddress: config.toTokenAddress,\n        amount: config.amount,\n        walletAddress: config.walletAddress,\n        enableEstimate: false,\n        source: '0xe26b9977',\n      };\n\n      return await this.sdk.getQuote(quoteParams);\n    } catch (error) {\n      console.error('Error fetching quote:', error);\n      throw new Error(\n        `Failed to fetch quote: ${error instanceof Error ? error.message : 'Unknown error'}`\n      );\n    }\n  }\n\n  /**\n   * Maps chain ID to NetworkEnum\n   */\n  private getNetworkEnum(chainId: number): NetworkEnum {\n    switch (chainId) {\n      case 1:\n        return NetworkEnum.ETHEREUM;\n      case 56:\n        return NetworkEnum.BINANCE;\n      case 137:\n        return NetworkEnum.POLYGON;\n      case 42161:\n        return NetworkEnum.ARBITRUM;\n      case 10:\n        return NetworkEnum.OPTIMISM;\n      case 8453:\n        return NetworkEnum.COINBASE;\n      case 43114:\n        return NetworkEnum.AVALANCHE;\n      case 250:\n        return NetworkEnum.FANTOM;\n      case 100:\n        return NetworkEnum.GNOSIS;\n      default:\n        throw new Error(`Unsupported chain ID: ${chainId}`);\n    }\n  }\n\n  /**\n   * Maps preset string to PresetEnum\n   */\n  private mapPresetToEnum(preset?: string): PresetEnum {\n    switch (preset) {\n      case 'fast':\n        return PresetEnum.fast;\n      case 'medium':\n        return PresetEnum.medium;\n      case 'slow':\n        return PresetEnum.slow;\n      case 'custom':\n        return PresetEnum.custom;\n      default:\n        return PresetEnum.medium;\n    }\n  }\n}\n","import type { Signer } from 'ethers';\n\nimport { FusionClient } from './fusion-client.js';\n\n/**\n * Configuration for creating a 1inch Fusion client\n *\n * @interface FusionClientConfig\n * @property {number} chainId - The blockchain chain ID (e.g., 1 for Ethereum, 137 for Polygon)\n * @property {string} apiUrl - The 1inch API base URL (e.g., 'https://api.1inch.io')\n * @property {Signer} signer - The ethers.js signer instance for wallet operations\n * @property {string} [authKey] - Optional API key for enhanced rate limits\n * @property {Record<string, string>} [headers] - Optional custom HTTP headers\n * @property {Function} approveAllowance - Function to approve token allowances for the settlement contract\n */\nexport interface FusionClientConfig {\n  chainId: number;\n  /** Custom API URLs (optional, will use defaults if not provided) */\n  apiUrl: string;\n  signer: Signer;\n  authKey?: string;\n  headers?: Record<string, string>;\n  approveAllowance: (\n    contractAddress: string,\n    spender: string,\n    quantity: string,\n    signer: Signer\n  ) => Promise<void>;\n}\n\n/**\n * Creates a new 1inch Fusion order client\n *\n * This factory function initializes a FusionClient with the provided configuration,\n * setting up the necessary Web3 provider and SDK connections for creating and managing\n * 1inch Fusion orders.\n *\n * @function createFusionClient\n * @param {FusionClientConfig} config - Configuration object for the Fusion client\n * @returns {FusionClient} A configured FusionClient instance ready for order operations\n *\n * @example\n * ```typescript\n * import { createFusionClient } from '@leapwallet/rwa-swap-core';\n * import { ethers } from 'ethers';\n *\n * const provider = new ethers.BrowserProvider(window.ethereum);\n * const signer = await provider.getSigner();\n *\n * const client = createFusionClient({\n *   chainId: 1,\n *   apiUrl: 'https://api.1inch.io',\n *   signer,\n *   approveAllowance: async (contract, spender, amount, signer) => {\n *     // Your approval logic here\n *   }\n * });\n * ```\n */\nexport function createFusionClient(config: FusionClientConfig): FusionClient {\n  const web3Provider = {\n    eth: {\n      //@ts-expect-error add call to ethers\n      call: async (config: TransactionConfig) => {\n        if (!config.signer.provider) throw new Error('Provider not available');\n        return await config.signer.provider.call({\n          to: config.to,\n          data: config.data,\n        });\n      },\n    },\n    extend: (extension: { methods?: { name: string }[] }) => {\n      const methods = extension.methods || [];\n      const extended = {};\n\n      methods.forEach((method: { name: string }) => {\n        if (method.name === 'signTypedDataV4') {\n          //@ts-expect-error add typedDataSigner to ethers\n          extended.signTypedDataV4 = async (walletAddress: string, typedDataString: string) => {\n            const typedData = JSON.parse(typedDataString);\n            const { domain, types, message } = typedData;\n\n            // Remove EIP712Domain from types\n            const cleanTypes = { ...types };\n            delete cleanTypes.EIP712Domain;\n            return await config.signer.signTypedData(domain, cleanTypes, message);\n          };\n        }\n      });\n\n      return extended;\n    },\n  };\n  return new FusionClient({\n    chainId: config.chainId,\n    provider: web3Provider,\n    signer: config.signer,\n    baseUrl: config.apiUrl,\n    approveAllowance: config.approveAllowance,\n    authKey: config.authKey,\n    headers: config.headers,\n  });\n}\n"]}