@masterunoco/casinowebengine-api 0.1.3 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +190 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +120 -3
- package/dist/index.d.ts +120 -3
- package/dist/index.js +190 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http/client.ts","../src/localStorage.ts","../src/apis/geo.ts","../src/auth/jwtAuth.ts","../src/apis/affiliate.ts","../src/apis/content.ts","../src/apis/deposit.ts","../src/apis/games.ts","../src/apis/luckyWheel.ts","../src/apis/media.ts","../src/apis/player.ts","../src/apis/promotions.ts","../src/apis/raffle.ts","../src/apis/region.ts","../src/apis/settings.ts","../src/apis/sport.ts","../src/apis/voucher.ts","../src/apis/withdraw.ts","../src/sdk.ts","../src/types/auth.ts"],"names":[],"mappings":";;;AAWO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAWlC,YAAY,MAAA,EAOT;AACD,IAAA,KAAA,CAAM,OAAO,OAAO,CAAA;AACpB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,MAAM,MAAA,CAAO,GAAA;AAClB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,SAAA,IAAa,IAAA;AAAA,EACvC;AACF;AAGO,SAAS,WAAW,GAAA,EAA+B;AACxD,EAAA,OAAO,CAAC,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAa,IAAY,IAAA,KAAS,UAAA;AACnE;;;AC9BO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAE1C,gBAAgB,IAAA,EAA0C;AACxD,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAA,CAAK,KAAK,IAAA,GAAO,IAAA;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,CACJ,IAAA,EACA,OAAoB,EAAC,EACrB,aAAyB,UAAA,EACb;AACZ,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,SAAS,IAAI,CAAA;AAC3C,IAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,MAAA,IAAU,KAAA,EAAO,WAAA,EAAY;AAClD,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM,UAAA,CAAW,OAAM,EAAG,IAAA,CAAK,IAAA,CAAK,SAAA,IAAa,IAAK,CAAA;AAE/E,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,IAAI,OAAA,CAAQ,KAAK,IAAA,CAAK,cAAA,IAAkB,EAAE,CAAA;AAE1D,MAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,YAAW,IAAK,IAAA;AAC9C,QAAA,IAAI,OAAO,OAAA,CAAQ,GAAA,CAAI,eAAA,EAAiB,CAAA,IAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AACtD,QAAA,IAAI,UAAA,KAAe,UAAA,IAAc,CAAC,KAAA,EAAO;AACvC,UAAA,MAAM,IAAI,QAAA,CAAS;AAAA,YACjB,MAAA,EAAQ,GAAA;AAAA,YACR,GAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA,EAAS,yBAAA;AAAA,YACT,OAAA,EAAS,EAAE,IAAA,EAAM,eAAA;AAAgB,WAClC,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,kBAAkB,CAAA;AAG7F,MAAA,MAAM,MAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,IAAW,OAAO,GAAA,EAAK;AAAA,QAClD,GAAG,IAAA;AAAA,QACH,OAAA,EAAS,EAAE,GAAG,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,OAAA,EAAS,CAAA,EAAG,GAAI,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG;AAAA,QAC7E,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,KAAK,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,IAAK,IAAA;AACxF,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AACvD,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA;AAEtD,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,GAAA,EAAK,MAAM,CAAA;AAC1C,QAAA,MAAM,OAAA,GACH,UAAU,OAAO,OAAA,KAAY,YAAY,OAAA,KAAY,SAAA,IAAa,WAAW,OAAA,IAAW,OAAA,CAAA,GACrF,OAAQ,OAAA,CAAyB,OAAA,IAAY,QAAyB,KAAK,CAAA,GAC3E,IAAI,UAAA,IAAc,CAAA,KAAA,EAAQ,IAAI,MAAM,CAAA,CAAA;AAE1C,QAAA,MAAM,IAAI,QAAA,CAAS;AAAA,UACjB,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ,GAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA;AAAA,UACA,OAAA,EAAA,CAAU,MAAA,GAAU,OAAA,GAA2B,OAAA,KAAY,IAAA;AAAA,UAC3D,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH;AAGA,MAAA,IAAI,MAAA,EAAQ,OAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAEnC,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,OAAQ,OAAQ,IAAA,GAAyB,IAAA;AAAA,IAC3C,SAAS,GAAA,EAAU;AACjB,MAAA,IAAI,GAAA,EAAK,SAAS,YAAA,EAAc;AAC9B,QAAA,MAAM,IAAI,QAAA,CAAS;AAAA,UACjB,MAAA,EAAQ,GAAA;AAAA,UACR,GAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA,EAAS,iBAAA;AAAA,UACT,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA;AAAU,SAC5B,CAAA;AAAA,MACH;AACA,MAAA,IAAI,GAAA,YAAe,UAAU,MAAM,GAAA;AAGnC,MAAA,MAAM,IAAI,QAAA,CAAS;AAAA,QACjB,MAAA,EAAQ,CAAA;AAAA,QACR,GAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA,EAAS,KAAK,OAAA,IAAW,eAAA;AAAA,QACzB,OAAA,EAAS,EAAE,IAAA,EAAM,eAAA;AAAgB,OAClC,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,GAAA,CAAO,MAAc,UAAA,EAAyB;AAC5C,IAAA,OAAO,KAAK,OAAA,CAAW,IAAA,EAAM,EAAE,MAAA,EAAQ,KAAA,IAAS,UAAU,CAAA;AAAA,EAC5D;AAAA,EACA,IAAA,CAAQ,IAAA,EAAc,IAAA,EAAgB,UAAA,EAAyB;AAC7D,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,IAAA;AAAA,MACA,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,IAAA,KAAS,SAAY,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,IAAA,EAAK;AAAA,MACzE;AAAA,KACF;AAAA,EACF;AAAA,EACA,KAAA,CAAS,IAAA,EAAc,IAAA,EAAgB,UAAA,EAAyB;AAC9D,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,IAAA;AAAA,MACA,EAAE,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,IAAA,KAAS,SAAY,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,IAAA,EAAK;AAAA,MAC1E;AAAA,KACF;AAAA,EACF;AAAA,EACA,MAAA,CAAU,MAAc,UAAA,EAAyB;AAC/C,IAAA,OAAO,KAAK,OAAA,CAAW,IAAA,EAAM,EAAE,MAAA,EAAQ,QAAA,IAAY,UAAU,CAAA;AAAA,EAC/D;AACF,CAAA;AAEA,SAAS,OAAA,CAAQ,MAAc,IAAA,EAAc;AAC3C,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,EAAA,GAAK,GAAG,GAAG,IAAI,CAAA,CAAA;AAC7E;AAEA,eAAe,QAAA,CAAS,KAAe,MAAA,EAAwD;AAC7F,EAAA,IAAI;AACF,IAAA,OAAO,SAAW,MAAM,GAAA,CAAI,MAAK,GAAsB,MAAM,IAAI,IAAA,EAAK;AAAA,EACxE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AC1IO,IAAM,eAAN,MAAmB;AAAA,EAAnB,WAAA,GAAA;AACL,IAAA,IAAA,CAAU,QAAA,GAAW,UAAA;AACrB,IAAA,IAAA,CAAU,WAAA,GAAc,aAAA;AACxB,IAAA,IAAA,CAAU,SAAA,GAAY,WAAA;AACtB,IAAA,IAAA,CAAU,cAAA,GAAiB,gBAAA;AAC3B,IAAA,IAAA,CAAU,MAAA,GAAS,QAAA;AACnB,IAAA,IAAA,CAAU,WAAA,GAAc,aAAA;AACxB,IAAA,IAAA,CAAU,kBAAA,GAAqB,oBAAA;AAAA,EAAA;AAAA,EAEvB,uBAAA,GAAmC;AACzC,IAAA,OAAO,OAAO,YAAA,KAAiB,WAAA;AAAA,EACjC;AAAA,EAEA,SAAS,KAAA,EAAe;AACtB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,KAAK,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,QAAA,GAA0B;AACxB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAQ,IAAA,EAAY;AAClB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,QAAQ,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,OAAA,GAAuB;AACrB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA;AAClD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI;AACF,UAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,QACxB,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,SAAA,EAAmB;AAC3B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,SAAA,EAAW,SAAS,CAAA;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,SAAA,GAA2B;AACzB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,eAAe,KAAA,EAAe;AAC5B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,cAAA,EAAgB,KAAK,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,cAAA,GAAgC;AAC9B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,GAAA,EAAa;AAClB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAA,GAAwB;AACtB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAY,KAAA,EAAe;AACzB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,WAAA,EAAa,KAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,WAAA,GAA6B;AAC3B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,eAAe,IAAA,EAAW;AACxB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,IAAA,CAAK,SAAA,GAAY,KAAK,GAAA,EAAI;AAC1B,MAAA,YAAA,CAAa,QAAQ,IAAA,CAAK,kBAAA,EAAoB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,cAAA,GAA6B;AAC3B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,kBAAkB,CAAA;AACzD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI;AACF,UAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAClC,UAAA,IAAI,WAAW,SAAA,EAAW;AACxB,YAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,YAAA,MAAM,GAAA,GAAM,MAAM,UAAA,CAAW,SAAA;AAC7B,YAAA,MAAM,SAAA,GAAY,KAAK,EAAA,GAAK,GAAA;AAC5B,YAAA,IAAI,MAAM,SAAA,EAAW;AACnB,cAAA,OAAO,IAAA;AAAA,YACT;AAAA,UACF;AACA,UAAA,OAAO,UAAA;AAAA,QACT,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAQ;AACN,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,QAAQ,CAAA;AACrC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,WAAW,CAAA;AACxC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,SAAS,CAAA;AACtC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,cAAc,CAAA;AAC3C,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,MAAM,CAAA;AACnC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,WAAW,CAAA;AACxC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,kBAAkB,CAAA;AAAA,IACjD;AAAA,EACF;AACF,CAAA;AAEO,IAAM,OAAA,GAAU,IAAI,YAAA,EAAa;;;AC5IjC,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACpB,IAAA,IAAA,CAAQ,OAAA,GAAU;AAAA,MAChB,EAAA,EAAI,SAAA;AAAA,MACJ,WAAA,EAAa,WAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,eAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA,EAPuC;AAAA,EAQvC,MAAM,qBAAA,GAA2D;AAC/D,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAkB,iBAAiB,MAAM,CAAA;AACrE,MAAA,IAAI,GAAA,CAAI,SAAA,IAAa,GAAA,CAAI,SAAA,EAAW;AAClC,QAAA,OAAO,GAAA,CAAI,SAAA;AACX,QAAA,OAAO,GAAA,CAAI,SAAA;AACX,QAAA,OAAA,CAAQ,eAAe,GAAG,CAAA;AAC1B,QAAA,OAAO,GAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EACA,MAAM,cAAA,GAAkD;AACtD,IAAA,MAAM,OAAA,GAAU,QAAQ,cAAA,EAAe;AACvC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC9B,QAAA,IAAI,GAAA,IAAO,IAAI,SAAA,EAAW;AACxB,UAAA,OAAO,GAAA,CAAI,SAAA;AACX,UAAA,OAAO,GAAA,CAAI,SAAA;AACX,UAAA,OAAO,GAAA;AAAA,QACT,CAAA,MAAO;AACL,UAAA,OAAO,IAAA,CAAK,OAAA;AAAA,QACd;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACd;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,MAAM,IAAA,CAAK,qBAAA,EAAsB,IAAK,IAAA,CAAK,OAAA;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,GAA0C;AAC9C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,cAAA,EAAe;AACtC,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,WAAA,IAAe,GAAA,CAAI,gBAAgB,WAAA,EAAa;AAC7D,MAAA,OAAO,GAAA,CAAI,WAAA;AAAA,IACb,CAAA,MAAO;AACL,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACF,CAAA;;;ACrCO,IAAM,UAAN,MAAc;AAAA,EAInB,YACU,MAAA,EACR;AADQ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAJV,IAAA,IAAA,CAAQ,KAAA,GAAuB,IAAA;AAC/B,IAAA,IAAA,CAAQ,IAAA,GAAoC,IAAA;AAKxC,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,QAAA,EAAS;AAC9B,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,OAAA,EAAQ;AAAA,EAChC;AAAA,EAEA,SAAS,KAAA,EAAsB;AAC7B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAA,CAAQ,SAAS,KAAK,CAAA;AACtB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB;AAAA,EACF;AAAA,EACA,OAAA,CAAQ,MAA4B,KAAA,EAAe;AACjD,IAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACpB,IAAA,OAAA,CAAQ,SAAS,KAAK,CAAA;AACtB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,MAAM,KAAA,CAAM,QAAA,EAAkB,QAAA,EAAkB,cAAA,EAA+C;AAC7F,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,EAAE,QAAA,EAAU,QAAA,EAAU,cAAA,EAAe;AACrD,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,OAAO,IAAA,CAAmB,aAAA,EAAe,SAAS,UAAU,CAAA;AAEnF,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,KAAK,CAAA;AAChC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,IAAA,EAAiD;AACjE,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,cAAA,EAAe;AACzC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,GAAA,GAAM,OAAA;AAAA,IACb;AACA,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,OAAO,IAAA,CAAmB,qBAAA,EAAuB,MAAM,UAAU,CAAA;AAExF,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,KAAK,CAAA;AAChC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAe,KAAA,EAA8B;AACjD,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAW,yBAAyB,EAAE,KAAA,IAAS,UAAU,CAAA;AAAA,EAC7E;AAAA,EAEA,MAAM,QAAA,CAAS,IAAA,EAAyB,KAAA,EAAwE;AAC9G,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,cAAA,EAAe;AACzC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,GAAA,GAAM,OAAA;AAAA,IACb;AACA,IAAA,IAAI,SAAA,GAAY,cAAA;AAChB,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,SAAA,IAAa,QAAQ,KAAK,CAAA,CAAA;AAAA,IAC9B;AACA,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,eAAe,MAAM,IAAA,CAAK,OAAO,IAAA,CAAqB,SAAA,EAAW,MAAM,UAAU,CAAA;AACvF,IAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,cAAc,CAAA;AACpF,MAAA,OAAO;AAAA,QACL,GAAG,YAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO;AAAA,QACL,GAAG;AAAA,OACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,CAAW,IAAA,EAA2B,KAAA,EAAwE;AAClH,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,cAAA,EAAe;AACzC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,GAAA,GAAM,OAAA;AAAA,IACb;AACA,IAAA,IAAI,SAAA,GAAY,gBAAA;AAChB,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,SAAA,IAAa,QAAQ,KAAK,CAAA,CAAA;AAAA,IAC9B;AACA,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,eAAgB,MAAM,IAAA,CAAK,OAAO,IAAA,CAAqB,SAAA,EAAW,MAAM,UAAU,CAAA;AACxF,IAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,cAAc,CAAA;AACpF,MAAA,OAAO;AAAA,QACL,GAAG,YAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO;AAAA,QACL,GAAG;AAAA,OACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,IAAA,EAAoE;AAC3F,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,OAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAA+B,wCAAA,EAA0C,MAAM,UAAU,CAAA;AAAA,EACrH;AAAA,EAEA,KAAA,GAAQ;AACN,IAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,MAAA,GAAwB;AAC5B,IAAA,MAAM,UAAA,GAAyB,UAAA;AAC/B,IAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAW,cAAA,EAAgB,IAAI,UAAU,CAAA;AAC3D,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACb;AAAA,EACA,MAAM,QAAQ,GAAA,EAAuC;AACnD,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO,IAAA,CAAsB,iBAAiB,EAAE,GAAA,IAAO,UAAU,CAAA;AAAA,EACrF;AAAA,EACA,MAAM,SAAS,KAAA,EAA8C;AAC3D,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO,IAAA,CAA2B,uBAAuB,EAAE,KAAA,IAAS,UAAU,CAAA;AAAA,EAClG;AAAA,EAEC,QAAA,GAA0B;AACzB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,QAAA,EAAS;AAAA,IAChC;AACA,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAA,GAAuC;AACrC,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,OAAA,EAAQ;AAAA,IAC9B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACb;AAAA,EACA,eAAA,GAA2B;AAC1B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,QAAA,EAAS;AAC1C,IAAA,OAAO,CAAC,CAAC,KAAA;AAAA,EACV;AACH;;;AC3JO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEvC,MAAM,qBAAqB,WAAA,EAAmE;AAC5F,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,KAA0C,CAAA,kBAAA,CAAA,EAAsB,EAAC,aAAY,CAAA;AAAA,EACtG;AAAA,EAEA,MAAM,eAAA,GAA2D;AAC/D,IAAA,OAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAoC,CAAA,aAAA,CAAe,CAAA;AAAA,EAC7E;AAAA,EAEA,MAAM,gBAAA,GAAoC;AACxC,IAAA,OAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAY,CAAA,mBAAA,CAAqB,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAM,iBAAA,GAA4D;AAChE,IAAA,OAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAmC,CAAA,gBAAA,CAAkB,CAAA;AAAA,EAC/E;AAAA,EAEA,MAAM,kBAAA,CAAmB,IAAA,EAAc,KAAA,EAAwD;AAC7F,IAAA,OAAO,MAAM,KAAK,IAAA,CAAK,GAAA,CAAoC,0BAA0B,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,EAC5G;AAAA,EAEA,MAAM,cAAA,CAAe,IAAA,EAAc,GAAA,EAAkD;AACnF,IAAA,OAAO,MAAM,KAAK,IAAA,CAAK,GAAA,CAAgC,8BAA8B,IAAI,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAAA;AAAA,EACxG;AAAA,EAEA,MAAM,UAAA,GAA8C;AAClD,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,CAAA,iBAAA,CAAmB,CAAA;AAAA,EACxE;AAAA,EAEA,MAAM,kBAAA,GAA8D;AAClE,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAoC,CAAA,0BAAA,CAA4B,CAAA;AAAA,EACzF;AAAA;AAAA,EAGA,MAAM,UAAU,MAAA,EAA4E;AAC1F,IAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,MAAA,IAAI,MAAA,CAAO,GAA6B,CAAA,KAAM,MAAA,EAAW;AACvD,QAAA,WAAA,CAAY,OAAO,GAAA,EAAK,MAAA,CAAO,MAAA,CAAO,GAA6B,CAAC,CAAC,CAAA;AAAA,MACvE;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,YAAY,QAAA,EAAS;AACnC,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAE,CAAA;AAAA,EAClF;AAAA;AAAA,EAGA,MAAM,QAAQ,IAAA,EAAiE;AAC7E,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAwB,qBAAqB,IAAI,CAAA;AAAA,EAC1E;AAAA,EAEA,MAAM,UAAA,GAA8C;AAClD,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,iBAAA,CAAmB,CAAA;AAAA,EAChD;AACF,CAAA;;;ACpDO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EACvC,IAAA,GAAO;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAmB,gBAAA,EAAkB,MAAM,CAAA;AAAA,EAAG;AAAA,EACxE,IAAI,IAAA,EAAc;AAAE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAiB,CAAA,eAAA,EAAkB,IAAI,IAAI,MAAM,CAAA;AAAA,EAAG;AAC3F;;;ACTO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EACA,OAAO,IAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAe,iBAAA,EAAmB,MAAM,UAAU,CAAA;AAAA,EACrE;AAAA,EAEA,iBAAA,GAAkD;AAChD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA2B,kBAAA,EAAoB,UAAU,CAAA;AAAA,EAC5E;AAAA,EAEA,YAAY,MAAA,GAAS,SAAA,EAAW,IAAA,GAAO,CAAA,EAAG,QAAQ,EAAA,EAA0B;AAC1E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAiB,CAAA,SAAA,EAAY,MAAM,SAAS,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,EAAI,UAAU,CAAA;AAAA,EAChG;AACF,CAAA;;;ACLO,IAAM,WAAN,MAAe;AAAA,EACpB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA;AAAA,EAGA,OAAO,OAAA,EAAsD;AAC3D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAA0B,eAAA,EAAiB,SAAS,MAAM,CAAA;AAAA,EAC7E;AAAA,EAEA,aAAA,GAAiD;AAC/C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,mBAAA,EAAqB,MAAM,CAAA;AAAA,EAC1E;AAAA;AAAA,EAGA,QAAQ,MAAA,EAAgB;AACtB,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAuB,kBAAkB,EAAC,MAAA,IAAS,UAAU,CAAA;AAAA,EAChF;AAAA;AAAA,EAGA,YAAY,MAAA,EAAgB;AAC1B,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAuB,sBAAsB,EAAC,MAAA,IAAS,MAAM,CAAA;AAAA,EAChF;AAAA,EAEA,WAAA,CAAY,QAAgB,UAAA,EAAwD;AAClF,IAAA,OAAO,IAAA,CAAK,KAAK,IAAA,CAA+B,kBAAA,EAAoB,EAAC,MAAA,EAAQ,UAAA,IAAa,UAAU,CAAA;AAAA,EACtG;AAAA,EACA,WAAA,GAAgD;AAC9C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA6B,yBAAA,EAA2B,UAAU,CAAA;AAAA,EACrF;AAAA,EACA,iBAAiB,QAAA,EAAoD;AACnE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAA6B,CAAA,gCAAA,EAAmC,QAAQ,IAAI,MAAM,CAAA;AAAA,EACrG;AAAA,EACA,SAAA,CAAU,IAAA,GAAK,CAAA,EAAG,KAAA,GAAM,EAAA,EAAkC;AACxD,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAyB,sBAAsB,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,EACvF;AAAA,EAEA,kBAAA,GAA+C;AAC7C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAqB,yBAAA,EAA2B,MAAM,CAAA;AAAA,EACzE;AAAA,EACA,WAAA,GAA+C;AAC7C,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACxC,IAAA,MAAM,WAAA,GAAc,IAAI,cAAA,EAAe;AACvC,IAAA,IAAI,GAAA,GAAM,kBAAA;AACV,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,GAAA,IAAO,WAAW,WAAW,CAAA,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,GAAA,EAAK,MAAM,CAAA;AAAA,EAC5D;AAAA,EACA,YAAA,GAAmC;AACjC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAe,kBAAA,EAAoB,MAAM,CAAA;AAAA,EAC5D;AAAA,EACA,QAAA,GAA6B;AAC3B,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACxC,IAAA,MAAM,WAAA,GAAc,IAAI,cAAA,EAAe;AACvC,IAAA,IAAI,GAAA,GAAM,cAAA;AACV,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,GAAA,IAAO,WAAW,WAAW,CAAA,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AAAA,EAC3C;AAEF;;;ACtEO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEvC,aAAA,GAA+D;AAC7D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0C,yBAAA,EAA2B,UAAU,CAAA;AAAA,EAClG;AAAA,EACA,UAAA,GAA0D;AACxD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAyC,6CAAA,EAA+C,MAAM,CAAA;AAAA,EACjH;AAAA,EACA,SAAA,GAAsD;AACpD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAuC,yBAAyB,CAAA;AAAA,EACnF;AAAA,EACA,SAAA,GAAqD;AACnD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAsC,qBAAqB,CAAA;AAAA,EAC9E;AAAA,EACA,KAAK,IAAA,EAAkH;AACrH,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAgF,mBAAA,EAAqB,IAAI,CAAA;AAAA,EAC5H;AAAA,EACA,QAAQ,IAAA,EAAyE;AAC/E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAwC,sBAAA,EAAwB,IAAI,CAAA;AAAA,EACvF;AAEF,CAAA;;;ACtBO,IAAM,WAAN,MAAe;AAAA,EACpB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EACvC,OAAO,IAAA,EAAgD;AACrD,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,IAAI,CAAA;AAC5B,IAAA,QAAA,CAAS,MAAA,CAAO,iBAAiB,MAAM,CAAA;AACvC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAgC,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,EACpF;AAAA,EACA,WAAW,QAAA,EAAmC;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAY,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAE,CAAA;AAAA,EACzE;AAEF,CAAA;;;ACVO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EACA,eAAe,IAAA,EAAoE;AACjF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,yBAAA,EAA2B,IAAI,CAAA;AAAA,EAC3E;AAAA,EACA,kBAAkB,IAAA,EAAiF;AACjG,IAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW,WAAA,CAAY,OAAO,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA;AAC/E,IAAA,IAAI,KAAK,SAAA,KAAc,MAAA,cAAuB,MAAA,CAAO,WAAA,EAAa,KAAK,SAAS,CAAA;AAChF,IAAA,IAAI,KAAK,OAAA,KAAY,MAAA,cAAuB,MAAA,CAAO,SAAA,EAAW,KAAK,OAAO,CAAA;AAC1E,IAAA,MAAM,WAAA,GAAc,YAAY,QAAA,EAAS,GAAI,IAAI,WAAA,CAAY,QAAA,EAAU,CAAA,CAAA,GAAK,EAAA;AAC5E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAkC,CAAA,uBAAA,EAA0B,WAAW,CAAA,CAAE,CAAA;AAAA,EAC5F;AAAA,EACA,eAAe,IAAA,EAAkE;AAC/E,IAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW,WAAA,CAAY,OAAO,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA;AAC/E,IAAA,IAAI,KAAK,SAAA,KAAc,MAAA,cAAuB,MAAA,CAAO,WAAA,EAAa,KAAK,SAAS,CAAA;AAChF,IAAA,IAAI,KAAK,OAAA,KAAY,MAAA,cAAuB,MAAA,CAAO,SAAA,EAAW,KAAK,OAAO,CAAA;AAC1E,IAAA,MAAM,WAAA,GAAc,YAAY,QAAA,EAAS,GAAI,IAAI,WAAA,CAAY,QAAA,EAAU,CAAA,CAAA,GAAK,EAAA;AAC5E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAmB,CAAA,wBAAA,EAA2B,WAAW,CAAA,CAAE,CAAA;AAAA,EAC9E;AAAA,EACA,YAAY,IAAA,EAAkE;AAC5E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,oBAAA,EAAsB,IAAI,CAAA;AAAA,EACtE;AAAA,EACA,gBAAgB,IAAA,EAAkE;AAChF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,uBAAA,EAAyB,IAAI,CAAA;AAAA,EACzE;AAAA,EACA,YAAY,IAAA,EAAkE;AAC5E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,oBAAA,EAAsB,IAAI,CAAA;AAAA,EACtE;AAAA,EACA,gBAAgB,IAAA,EAAkE;AAChF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,uBAAA,EAAyB,IAAI,CAAA;AAAA,EACzE;AAAA,EACA,qBAAA,GAAmE;AACjE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAsC,6BAA6B,CAAA;AAAA,EACtF;AAAA,EACA,UAAA,GAA4C;AAC1C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0B,cAAc,CAAA;AAAA,EAC3D;AAAA,EACA,aAAa,IAAA,EAA0E;AACrF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAsD,cAAA,EAAgB,IAAI,CAAA;AAAA,EAC7F;AAAA,EACA,qBAAA,GAA4D;AAC1D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA+B,uBAAuB,CAAA;AAAA,EACzE;AAAA,EACA,wBAAwB,IAAA,EAAkD;AACxE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAA8B,uBAAA,EAAyB,IAAI,CAAA;AAAA,EAC9E;AAAA,EACA,iBAAiB,IAAA,EAAoE;AACnF,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,cAAA,EAAgB,WAAW,CAAA;AAAA,EACvE;AAAA,EACA,cAAc,IAAA,EAAuE;AACnF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAA+B,iBAAA,EAAmB,IAAI,CAAA;AAAA,EACzE;AAEF,CAAA;;;AC5DO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EACvC,SAAA,GAAkD;AAChD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAiC,oBAAoB,CAAA;AAAA,EACxE;AAAA,EACA,SAAA,GAAkD;AAChD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAiC,oBAAA,EAAsB,MAAM,CAAA;AAAA,EAChF;AAAA,EACA,aAAa,EAAA,EAA+C;AAC1D,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAA+B,CAAA,YAAA,EAAe,EAAE,IAAI,MAAM,CAAA;AAAA,EAC7E;AAAA,EACA,WAAA,GAAiD;AAC/C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,sBAAsB,CAAA;AAAA,EACvE;AAAA,EACA,cAAc,EAAA,EAAqD;AACjE,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAsC,mBAAmB,EAAE,CAAA,CAAA,EAAI,EAAG,CAAA;AAAA,EACrF;AAAA,EACA,YAAY,EAAA,EAAqD;AAC/D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAwC,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAE,CAAA;AAAA,EAChF;AACF;;;ACpBO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EAEA,UAAA,GAA8D;AAC5D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4C,iBAAiB,CAAA;AAAA,EAChF;AAAA,EAEA,SAAA,GAAgD;AAC9C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA+B,gBAAgB,CAAA;AAAA,EAClE;AAAA,EAEA,UAAA,GAA+D;AAC7D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA6C,iBAAiB,CAAA;AAAA,EACjF;AAAA,EAEA,eAAA,GAA8D;AAC5D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAuC,iBAAiB,CAAA;AAAA,EAC3E;AAAA,EAEA,gBAAgB,IAAA,EAAuF;AACrG,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAiC,kBAAA,EAAoB,IAAI,CAAA;AAAA,EAC5E;AACF,CAAA;;;ACvBO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EAEA,iBAAA,GAAmD;AACjD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0B,kBAAkB,CAAA;AAAA,EAC/D;AAAA,EAEA,kBAAA,GAAoD;AAClD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0B,mBAAmB,CAAA;AAAA,EAChE;AAAA,EAEA,UAAA,GAA4C;AAC1C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0B,UAAA,EAAY,MAAM,CAAA;AAAA,EAC/D;AAAA,EAEA,mBAAA,GAA6D;AAC3D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAkC,4BAAA,EAA8B,MAAM,CAAA;AAAA,EACzF;AACF,CAAA;;;ACnBO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EAEA,WAAA,GAA+C;AAC7C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,kBAAA,EAAoB,MAAM,CAAA;AAAA,EACzE;AAAA,EACA,UAAU,IAAA,EAA6C;AACrD,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAA0B,CAAA,aAAA,EAAgB,IAAI,IAAI,MAAM,CAAA;AAAA,EAC3E;AAAA,EACA,UAAA,GAA+C;AAC7C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA6B,gBAAA,EAAkB,MAAM,CAAA;AAAA,EACxE;AAAA,EACA,cAAA,CAAe,MAAa,IAAA,EAA6C;AACvE,IAAA,OAAO,IAAA,CAAK,KAAK,GAAA,CAA2B,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAA,EAAI,IAAI,IAAI,MAAM,CAAA;AAAA,EACtF;AAAA,EACA,SAAA,GAA6C;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,cAAA,EAAgB,MAAM,CAAA;AAAA,EACrE;AAAA,EACA,cAAA,GAAqD;AACnD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA+B,qBAAqB,CAAA;AAAA,EACvE;AAAA,EACA,kBAAkB,IAAA,EAA8E;AAC9F,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAiC,qBAAA,EAAuB,IAAI,CAAA;AAAA,EAC/E;AAAA,EACA,aAAA,GAAmD;AACjD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,iBAAA,EAAmB,MAAM,CAAA;AAAA,EAC1E;AAAA,EACA,cAAc,IAAA,EAAmD;AAC/D,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,+KAA+K,MAAM,CAAA;AAAA,EAC1Q;AAAA,EACA,uBAAuB,IAAA,EAAmD;AACxE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,2BAA2B,MAAM,CAAA;AAAA,EACtH;AAAA,EACA,gBAAA,GAAwD;AACtD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,uCAAA,CAAA,EAA2C,MAAM,CAAA;AAAA,EACpG;AAAA,EACA,2BAA2B,IAAA,EAAmD;AAC5E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,yBAAyB,MAAM,CAAA;AAAA,EACpH;AAAA,EACA,yBAAyB,IAAA,EAAmD;AAC1E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,uBAAuB,MAAM,CAAA;AAAA,EAClH;AAAA,EACA,+BAA+B,IAAA,EAAmD;AAChF,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,8BAA8B,MAAM,CAAA;AAAA,EACzH;AAAA,EACA,6BAA6B,IAAA,EAAmD;AAC9E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,0BAA0B,MAAM,CAAA;AAAA,EACrH;AAAA,EACA,6BAA6B,IAAA,EAAmD;AAC9E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,0BAA0B,MAAM,CAAA;AAAA,EACrH;AAAA,EACA,kCAAkC,IAAA,EAAkD;AAClF,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,+BAA+B,MAAM,CAAA;AAAA,EAC1H;AAAA,EACA,4BAA4B,IAAA,EAAmD;AAC7E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,4BAA4B,MAAM,CAAA;AAAA,EACvH;AAAA,EACA,gBAAgB,IAAA,EAAmD;AACjE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,uBAAuB,MAAM,CAAA;AAAA,EAClH;AACF,CAAA;;;AC7DO,IAAM,WAAN,MAAe;AAAA,EACpB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EACA,SAAA,GAA6C;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,yBAAyB,CAAA;AAAA,EACxE;AACF,CAAA;;;ACNO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEvC,cAAc,IAAA,EAAoD;AAChE,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAkC,kBAAA,EAAoB,EAAE,MAAM,CAAA;AAAA,EACjF;AAAA,EACA,aAAa,IAAA,EAAmD;AAC9D,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,gBAAA,EAAmB,IAAI,IAAI,MAAM,CAAA;AAAA,EACpF;AACF,CAAA;;;ACRO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EAEA,aAAa,MAAA,EAAoD;AAC/D,IAAA,MAAM,WAAA,GAAc,MAAA,GAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,GAAK,EAAA;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,CAAA,SAAA,EAAY,WAAW,CAAA,CAAE,CAAA;AAAA,EAC1E;AAAA,EAEA,kBAAA,GAA8D;AAC5D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAoC,mBAAA,EAAqB,MAAM,CAAA;AAAA,EAClF;AAAA,EAEA,SAAS,IAAA,EAA0E;AACjF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAoC,WAAA,EAAa,IAAI,CAAA;AAAA,EACxE;AAAA,EAEA,eAAe,UAAA,EAAmE;AAChF,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAA0C,CAAA,gBAAA,CAAA,EAAoB,EAAC,YAAW,CAAA;AAAA,EAC7F;AAAA,EAEA,yBAAyB,IAAA,EAA4C;AACnE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAS,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAE,CAAA;AAAA,EAC1D;AAAA,EAEA,kBAAkB,QAAA,EAAuD;AACvE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,8BAAA,EAAiC,QAAQ,CAAA,CAAE,CAAA;AAAA,EAC9F;AACF,CAAA;;;ACRO,IAAM,UAAN,MAAc;AAAA,EAoBnB,YAAY,GAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW;AAAA,MACzB,OAAA,EAAS,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,MACvC,MAAM,EAAE,QAAA,EAAU,MAAM,IAAA,CAAK,IAAA,CAAK,UAAS,EAAE;AAAA;AAAA,MAC7C,SAAA,EAAW,IAAI,SAAA,IAAa;AAAA,KAC7B,CAAA;AAED,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACjC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACnC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAAA,EAC3C;AACF;AAEO,IAAM,aAAA,GAAgB,CAAC,GAAA,KAAmB,IAAI,QAAQ,GAAG;;;ACFzD,IAAM,cAAA,GAAiB","file":"index.cjs","sourcesContent":["// src/errors.ts\r\n\r\n/** Common shape we expect from the API when an error happens */\r\nexport type ErrorPayload = {\r\n error?: string; // \"Invalid credentials\"\r\n message?: string; // Human-readable details\r\n code?: string | number; // Optional machine code\r\n details?: unknown; // Optional extra data (validation errors, etc.)\r\n [k: string]: unknown;\r\n};\r\n\r\nexport class ApiError extends Error {\r\n /** HTTP status (e.g., 400/401/429/500) or 0 if network failure */\r\n readonly status: number;\r\n /** Requested method+url to aid debugging */\r\n readonly url: string;\r\n readonly method: string;\r\n /** Raw payload (JSON if available; else text) */\r\n readonly payload?: ErrorPayload | string | null | undefined;\r\n /** Useful server-provided correlator (if any) */\r\n readonly requestId?: string | null;\r\n\r\n constructor(params: {\r\n status: number;\r\n url: string;\r\n method: string;\r\n message: string;\r\n payload?: ErrorPayload | string | null;\r\n requestId?: string | null;\r\n }) {\r\n super(params.message);\r\n this.name = 'ApiError';\r\n this.status = params.status;\r\n this.url = params.url;\r\n this.method = params.method;\r\n this.payload = params.payload;\r\n this.requestId = params.requestId ?? null;\r\n }\r\n}\r\n\r\n/** TS type guard */\r\nexport function isApiError(err: unknown): err is ApiError {\r\n return !!err && typeof err === 'object' && (err as any).name === 'ApiError';\r\n}\r\n","// src/http/client.ts\r\nimport { ApiError, type ErrorPayload } from '../errors';\r\n\r\nexport type AuthPolicy = 'required' | 'optional' | 'none';\r\n\r\nexport interface ClientOptions {\r\n baseUrl: string;\r\n auth?: { getToken: () => string | null };\r\n defaultHeaders?: Record<string, string>;\r\n fetchFn?: typeof fetch;\r\n timeoutMs?: number;\r\n}\r\n\r\nexport class HttpClient {\r\n constructor(private opts: ClientOptions) {}\r\n\r\n setAuthProvider(auth?: { getToken: () => string | null }) {\r\n if (auth) {\r\n this.opts.auth = auth;\r\n }\r\n }\r\n\r\n async request<T>(\r\n path: string,\r\n init: RequestInit = {},\r\n authPolicy: AuthPolicy = 'optional'\r\n ): Promise<T> {\r\n const url = joinUrl(this.opts.baseUrl, path);\r\n const method = (init.method || 'GET').toUpperCase();\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.opts.timeoutMs ?? 15000);\r\n\r\n try {\r\n const headers = new Headers(this.opts.defaultHeaders || {});\r\n // attach JWT if needed\r\n if (authPolicy !== 'none') {\r\n const token = this.opts.auth?.getToken?.() ?? null;\r\n if (token) headers.set('Authorization', `JWT ${token}`);\r\n if (authPolicy === 'required' && !token) {\r\n throw new ApiError({\r\n status: 401,\r\n url,\r\n method,\r\n message: 'Authentication required',\r\n payload: { code: 'AUTH_REQUIRED' },\r\n });\r\n }\r\n }\r\n if (init.body && !headers.has('Content-Type')) headers.set('Content-Type', 'application/json');\r\n\r\n // Merge headers last to allow per-request overrides\r\n const res = await (this.opts.fetchFn ?? fetch)(url, {\r\n ...init,\r\n headers: { ...Object.fromEntries(headers.entries()), ...(init.headers || {}) },\r\n signal: controller.signal,\r\n });\r\n\r\n const reqId = res.headers.get('x-request-id') || res.headers.get('x-correlation-id') || null;\r\n const contentType = res.headers.get('content-type') || '';\r\n const isJson = contentType.includes('application/json');\r\n\r\n if (!res.ok) {\r\n const payload = await readBody(res, isJson);\r\n const message =\r\n (isJson && typeof payload === 'object' && payload && ('message' in payload || 'error' in payload))\r\n ? String((payload as ErrorPayload).message ?? (payload as ErrorPayload).error)\r\n : res.statusText || `HTTP ${res.status}`;\r\n\r\n throw new ApiError({\r\n status: res.status,\r\n url,\r\n method,\r\n message,\r\n payload: (isJson ? (payload as ErrorPayload) : payload) ?? null,\r\n requestId: reqId,\r\n });\r\n }\r\n\r\n // success\r\n if (isJson) return (await res.json()) as T;\r\n // no body / text fallback\r\n const text = await res.text();\r\n return (text ? (text as unknown as T) : (null as unknown as T));\r\n } catch (err: any) {\r\n if (err?.name === 'AbortError') {\r\n throw new ApiError({\r\n status: 408,\r\n url,\r\n method,\r\n message: 'Request timeout',\r\n payload: { code: 'TIMEOUT' },\r\n });\r\n }\r\n if (err instanceof ApiError) throw err;\r\n\r\n // network error / CORS / DNS, etc.\r\n throw new ApiError({\r\n status: 0,\r\n url,\r\n method,\r\n message: err?.message || 'Network error',\r\n payload: { code: 'NETWORK_ERROR' },\r\n });\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n\r\n get<T>(path: string, authPolicy?: AuthPolicy) {\r\n return this.request<T>(path, { method: 'GET' }, authPolicy);\r\n }\r\n post<T>(path: string, body?: unknown, authPolicy?: AuthPolicy) {\r\n return this.request<T>(\r\n path,\r\n { method: 'POST', body: body !== undefined ? JSON.stringify(body) : null },\r\n authPolicy\r\n );\r\n }\r\n patch<T>(path: string, body?: unknown, authPolicy?: AuthPolicy) {\r\n return this.request<T>(\r\n path,\r\n { method: 'PATCH', body: body !== undefined ? JSON.stringify(body) : null },\r\n authPolicy\r\n );\r\n }\r\n delete<T>(path: string, authPolicy?: AuthPolicy) {\r\n return this.request<T>(path, { method: 'DELETE' }, authPolicy);\r\n }\r\n}\r\n\r\nfunction joinUrl(base: string, path: string) {\r\n return `${base.replace(/\\/+$/, '')}${path.startsWith('/') ? '' : '/'}${path}`;\r\n}\r\n\r\nasync function readBody(res: Response, isJson: boolean): Promise<ErrorPayload | string | null> {\r\n try {\r\n return isJson ? ((await res.json()) as ErrorPayload) : await res.text();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","import type {User} from \"./types/auth\";\r\n\r\nexport class LocalStorage {\r\n protected tokenKey = 'gs.token';\r\n protected userDataKey = 'gs.userData';\r\n protected avatarKey = 'gs.avatar';\r\n protected socketTokenKey = 'gs.socketToken';\r\n protected pinKey = 'gs.pin';\r\n protected pinTokenKey = 'gs.pinToken';\r\n protected geoLocalStorageKey = 'gs.visitorLocation';\r\n\r\n private isLocalStorageAvailable(): boolean {\r\n return typeof localStorage !== 'undefined';\r\n }\r\n\r\n setToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.tokenKey, token);\r\n }\r\n }\r\n\r\n getToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.tokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setUser(data: User) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.userDataKey, JSON.stringify(data));\r\n }\r\n }\r\n\r\n getUser(): User | null {\r\n if (this.isLocalStorageAvailable()) {\r\n const data = localStorage.getItem(this.userDataKey);\r\n if (data) {\r\n try {\r\n return JSON.parse(data) as User;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n setAvatar(avatarUrl: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.avatarKey, avatarUrl);\r\n }\r\n }\r\n\r\n getAvatar(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.avatarKey);\r\n }\r\n return null;\r\n }\r\n\r\n setSocketToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.socketTokenKey, token);\r\n }\r\n }\r\n\r\n getSocketToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.socketTokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setPin(pin: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.pinKey, pin);\r\n }\r\n }\r\n\r\n getPin(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.pinKey);\r\n }\r\n return null;\r\n }\r\n\r\n setPinToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.pinTokenKey, token);\r\n }\r\n }\r\n\r\n getPinToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.pinTokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setGeolocation(data: any) {\r\n if (this.isLocalStorageAvailable()) {\r\n data.timestamp = Date.now();\r\n localStorage.setItem(this.geoLocalStorageKey, JSON.stringify(data));\r\n }\r\n }\r\n\r\n getGeolocation(): any | null {\r\n if (this.isLocalStorageAvailable()) {\r\n const data = localStorage.getItem(this.geoLocalStorageKey);\r\n if (data) {\r\n try {\r\n const parsedData = JSON.parse(data);\r\n if (parsedData.timestamp) {\r\n const now = Date.now();\r\n const age = now - parsedData.timestamp;\r\n const cacheTime = 10 * 60 * 1000; // 10 minutes\r\n if (age > cacheTime) {\r\n return null;\r\n }\r\n }\r\n return parsedData;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n clear() {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.removeItem(this.tokenKey);\r\n localStorage.removeItem(this.userDataKey);\r\n localStorage.removeItem(this.avatarKey);\r\n localStorage.removeItem(this.socketTokenKey);\r\n localStorage.removeItem(this.pinKey);\r\n localStorage.removeItem(this.pinTokenKey);\r\n localStorage.removeItem(this.geoLocalStorageKey);\r\n }\r\n }\r\n}\r\n\r\nexport const storage = new LocalStorage();\r\n","import { storage } from '../localStorage';\r\nimport type { HttpClient } from '../http/client';\r\nimport type { FreeIpApiGeo, FailObj } from '../types/geo';\r\nexport class GeolocationAPI {\r\n constructor(private http: HttpClient) {}\r\n private failObj = {\r\n ip: \"0.0.0.0\",\r\n countryCode: \"undefined\",\r\n status: \"fail\",\r\n message: \"invalid query\",\r\n query: \"undefined\"\r\n };\r\n async getGeolocationFromAPI(): Promise<FreeIpApiGeo | undefined> {\r\n try {\r\n const geo = await this.http.get<FreeIpApiGeo>('/geo/location', 'none');\r\n if (geo.ipAddress && geo.ipVersion) {\r\n delete geo.ipVersion;\r\n delete geo.ipAddress;\r\n storage.setGeolocation(geo);\r\n return geo;\r\n }\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n async getGeolocation(): Promise<FreeIpApiGeo | FailObj> {\r\n const geoData = storage.getGeolocation();\r\n if (geoData) {\r\n try {\r\n const geo = JSON.parse(geoData);\r\n if (geo && geo.ipVersion) {\r\n delete geo.ipVersion;\r\n delete geo.ipAddress;\r\n return geo;\r\n } else {\r\n return this.failObj;\r\n }\r\n } catch {\r\n return this.failObj;\r\n }\r\n } else {\r\n return await this.getGeolocationFromAPI() || this.failObj;\r\n }\r\n }\r\n\r\n async getCountryCode(): Promise<string | false> {\r\n const geo = await this.getGeolocation();\r\n if (geo && geo.countryCode && geo.countryCode === 'undefined') {\r\n return geo.countryCode;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","// src/auth/jwtAuth.ts\r\nimport type {\r\n AuthResponse,\r\n pinCodeResponse,\r\n pinCodeCheckResponse,\r\n CreatePlayerInput,\r\n CreatePlayerV2Input,\r\n CreatePlayerV2Step2Input,\r\n GoogleLoginRequest,\r\n SignupResponse, SignupV2ValidateResponse,\r\n RegisterResponse\r\n} from '../types/auth';\r\nimport type {AuthPolicy, HttpClient} from '../http/client';\r\nimport {GeolocationAPI} from \"../apis/geo\";\r\nimport {storage} from '../localStorage';\r\n\r\nexport class JwtAuth {\r\n private token: string | null = null;\r\n private user: AuthResponse['user'] | null = null;\r\n\r\n constructor(\r\n private client: HttpClient,\r\n ) {\r\n this.token = storage.getToken();\r\n this.user = storage.getUser();\r\n }\r\n\r\n setToken(token: string | null) {\r\n if (token) {\r\n storage.setToken(token);\r\n this.token = token;\r\n } else {\r\n storage.clear();\r\n }\r\n }\r\n setUser(user: AuthResponse['user'], token: string) {\r\n storage.setUser(user);\r\n storage.setToken(token);\r\n this.user = user;\r\n this.token = token;\r\n }\r\n\r\n async login(username: string, password: string, recaptchaToken: string): Promise<AuthResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n const payload = { username, password, recaptchaToken };\r\n const res = await this.client.post<AuthResponse>('/auth/login', payload, authPolicy);\r\n\r\n this.setUser(res.user, res.token);\r\n return res;\r\n }\r\n\r\n async GoogleLogin(data: GoogleLoginRequest): Promise<AuthResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const res = await this.client.post<AuthResponse>('/auth/google/signin', data, authPolicy);\r\n\r\n this.setUser(res.user, res.token);\r\n return res;\r\n }\r\n\r\n async forgetPassword(email: string): Promise<void> {\r\n const authPolicy: AuthPolicy = 'none';\r\n await this.client.post<void>('/auth/forgot-password', { email }, authPolicy);\r\n }\r\n\r\n async register(data: CreatePlayerInput, param?: string | undefined): Promise<RegisterResponse | SignupResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n let apiRouter = '/auth/signup';\r\n if (param) {\r\n apiRouter += `?ref=${param}`\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const registerData = await this.client.post<SignupResponse>(apiRouter, data, authPolicy);\r\n if (registerData.player) {\r\n const loginData = await this.login(data.username, data.password, data.recaptchaToken);\r\n return {\r\n ...registerData,\r\n ...loginData,\r\n };\r\n } else {\r\n return {\r\n ...registerData,\r\n }\r\n }\r\n }\r\n\r\n async registerV2(data: CreatePlayerV2Input, param?: string | undefined): Promise<RegisterResponse | SignupResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n let apiRouter = '/auth/signupv2';\r\n if (param) {\r\n apiRouter += `?ref=${param}`\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const registerData = await this.client.post<SignupResponse>(apiRouter, data, authPolicy);\r\n if (registerData.player) {\r\n const loginData = await this.login(data.username, data.password, data.recaptchaToken);\r\n return {\r\n ...registerData,\r\n ...loginData,\r\n };\r\n } else {\r\n return {\r\n ...registerData\r\n }\r\n }\r\n }\r\n\r\n async registerV2Validate(data: CreatePlayerV2Step2Input ): Promise<SignupV2ValidateResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<SignupV2ValidateResponse>('/auth/signupv2/validate-username-email', data, authPolicy);\r\n }\r\n\r\n clear() {\r\n this.setToken(null);\r\n this.user = null;\r\n }\r\n\r\n async logout(): Promise<void> {\r\n const authPolicy: AuthPolicy = 'required';\r\n await this.client.post<void>('/auth/logout', {}, authPolicy);\r\n this.clear();\r\n }\r\n async pinCode(pin: string): Promise<pinCodeResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<pinCodeResponse>('/auth/website', { pin }, authPolicy);\r\n }\r\n async pinCheck(token: string): Promise<pinCodeCheckResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<pinCodeCheckResponse>('/auth/website/check', { token }, authPolicy);\r\n }\r\n\r\n getToken(): string | null {\r\n if (!this.token) {\r\n this.token = storage.getToken();\r\n }\r\n return this.token;\r\n }\r\n\r\n getUser(): AuthResponse['user'] | null {\r\n if (!this.user) {\r\n this.user = storage.getUser();\r\n }\r\n return this.user;\r\n }\r\n isAuthenticated(): boolean {\r\n const Token = this.token || this.getToken();\r\n return !!Token;\r\n }\r\n}\r\n","// src/apis/affiliate.ts\r\nimport {HttpClient} from '../http/client';\r\nimport * as AffiliateTypes from '../types/affiliate';\r\nimport {GetPrizes, GetPrizesRequest, GetPrizesResult, Rewards, Summery} from \"../types/affiliate\";\r\n\r\nexport class AffiliateAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n async generateReferralCode(description: string): Promise<AffiliateTypes.GenerateReferralCode> {\r\n return await this.http.post<AffiliateTypes.GenerateReferralCode>(`/referral/generate`, {description});\r\n }\r\n\r\n async getReferralCode(): Promise<AffiliateTypes.GetReferralCode> {\r\n return await this.http.get<AffiliateTypes.GetReferralCode>(`/referral/get`);\r\n }\r\n\r\n async getReferralCount(): Promise<number> {\r\n return await this.http.get<number>(`/referral/max-codes`);\r\n }\r\n\r\n async getReferralStatus(): Promise<AffiliateTypes.ReferralStatus> {\r\n return await this.http.get<AffiliateTypes.ReferralStatus>(`/referral/status`);\r\n }\r\n\r\n async getReferralFriends(page: number, limit: number): Promise<AffiliateTypes.ReferralFriends> {\r\n return await this.http.get<AffiliateTypes.ReferralFriends>(`/referral/friends?page=${page}&limit=${limit}`);\r\n }\r\n\r\n async getBannerImage(lang: string, key: string): Promise<AffiliateTypes.BannerImage> {\r\n return await this.http.get<AffiliateTypes.BannerImage>(`/website-settings?language=${lang}&key=${key}`);\r\n }\r\n\r\n async getRewards(): Promise<AffiliateTypes.Rewards> {\r\n return await this.http.get<AffiliateTypes.Rewards>(`/referral/rewards`);\r\n }\r\n\r\n async getAvailablePrizes(): Promise<AffiliateTypes.AvailablePrizes> {\r\n return await this.http.get<AffiliateTypes.AvailablePrizes>(`/referral/available-prizes`);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async getPrizes(params: AffiliateTypes.GetPrizesRequest): Promise<AffiliateTypes.GetPrizes> {\r\n const queryParams = new URLSearchParams();\r\n for (const key in params) {\r\n if (params[key as keyof GetPrizesRequest] !== undefined) {\r\n queryParams.append(key, String(params[key as keyof GetPrizesRequest]));\r\n }\r\n }\r\n const query = queryParams.toString();\r\n return await this.http.get<AffiliateTypes.GetPrizes>(`/referral/prizes?${query}`);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async convert(data: AffiliateTypes.ConvertRequest): Promise<{message: string}> {\r\n return await this.http.post<{message: string}>(`/referral/convert`, data);\r\n }\r\n\r\n async getSummary(): Promise<AffiliateTypes.Summery> {\r\n return await this.http.get(`/referral/summary`);\r\n }\r\n}\r\n","// src/apis/content.ts (public: no auth)\r\nimport { HttpClient } from '../http/client';\r\n\r\nexport interface ContentPage {\r\n id: number; slug: string; title: string; body: string;\r\n createdAt: string; updatedAt: string;\r\n}\r\n\r\nexport class ContentAPI {\r\n constructor(private http: HttpClient) {}\r\n list() { return this.http.get<ContentPage[]>('/content-pages', 'none'); }\r\n get(slug: string) { return this.http.get<ContentPage>(`/content-pages/${slug}`, 'none'); }\r\n}\r\n","// src/apis/deposit.ts\r\nimport {HttpClient} from '../http/client';\r\nimport { ChargeData, PaymentMethodSchema, GetDeposits } from '../types/deposit';\r\nexport class DepositAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n charge(data: ChargeData) {\r\n return this.http.post< string >('/deposit/charge', data, 'required');\r\n }\r\n\r\n getPaymentMethods():Promise<PaymentMethodSchema[]>{\r\n return this.http.get<PaymentMethodSchema[]>('/payment-methods', 'required');\r\n }\r\n\r\n getDeposits(status = 'pending', page = 1, limit = 20): Promise<GetDeposits> {\r\n return this.http.get<GetDeposits>(`/payment/${status}?page=${page}&limit=${limit}`, 'required');\r\n }\r\n}\r\n","import { HttpClient } from '../http/client';\r\nimport {\r\n GameCategoriesResponse,\r\n SearchRequest,\r\n GameSearchResponse, GamesSearchResponse, SetFavoriteGamesResponse,\r\n FavoriteGamesResponse, recentBigWinsResponse, GlobalFavorites, Providers,\r\n TopRated, Lobby\r\n} from '../types/game';\r\nimport {GeolocationAPI} from \"./geo\";\r\n\r\nexport interface GameLinkResponse { message: string; gameLink: string; isFavorite?: boolean; }\r\n\r\nexport class GamesAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n /** Public: search games */\r\n search(request: SearchRequest): Promise<GamesSearchResponse> {\r\n return this.http.post<GamesSearchResponse>('/games/search', request, 'none');\r\n }\r\n\r\n getCategories(): Promise<GameCategoriesResponse> {\r\n return this.http.get<GameCategoriesResponse>('/games/categories', 'none');\r\n }\r\n\r\n /** Requires auth: player link */\r\n getLink(gameId: string) {\r\n return this.http.post<GameLinkResponse>(`/games/getLink`, {gameId}, 'required');\r\n }\r\n\r\n /** Public: demo link */\r\n getDemoLink(gameId: number) {\r\n return this.http.post<GameLinkResponse>('/games/getDemoLink', {gameId}, 'none');\r\n }\r\n\r\n setFavorite(gameId: number, isFavorite: boolean): Promise<SetFavoriteGamesResponse> {\r\n return this.http.post<SetFavoriteGamesResponse>('/games/favorites', {gameId, isFavorite}, 'required');\r\n }\r\n getFavorite(): Promise<FavoriteGamesResponse[]> {\r\n return this.http.get<FavoriteGamesResponse[]>('/games/player-favorites', 'required');\r\n }\r\n getRecentBigWins(category: string): Promise<recentBigWinsResponse[]> {\r\n return this.http.get<recentBigWinsResponse[]>(`/games/recent-big-wins?category=${category}`, 'none');\r\n }\r\n getRecent(page=1, limit=10): Promise<GamesSearchResponse> {\r\n return this.http.get<GamesSearchResponse>(`/games/recent?page=${page}&limit=${limit}`);\r\n }\r\n\r\n getGlobalFavorites(): Promise<GlobalFavorites> {\r\n return this.http.get<GlobalFavorites>('/games/global-favorites', 'none');\r\n }\r\n getTopRated():Promise<{ topRated :TopRated[] }>{\r\n const geo = new GeolocationAPI(this.http);\r\n const countryCode = geo.getCountryCode();\r\n let url = '/games/top-rated';\r\n if (countryCode) {\r\n url += `?region=${countryCode}`;\r\n }\r\n return this.http.get<{ topRated :TopRated[] }>(url, 'none');\r\n }\r\n getProviders(): Promise<Providers> {\r\n return this.http.get<Providers>('/games/providers', 'none');\r\n }\r\n getLobby(): Promise<Lobby[]> {\r\n const geo = new GeolocationAPI(this.http);\r\n const countryCode = geo.getCountryCode();\r\n let url = '/games/lobby';\r\n if (countryCode) {\r\n url += `?region=${countryCode}`;\r\n }\r\n return this.http.get<Lobby[]>(url, 'none');\r\n }\r\n\r\n}\r\n","// src/apis/lucky.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as LuckyWheelTypes from '../types/luckyWheel';\r\nexport class LuckyWheelAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n getStatistics(): Promise<LuckyWheelTypes.LuckyWheelStatistics> {\r\n return this.http.get<LuckyWheelTypes.LuckyWheelStatistics>('/lucky-wheel/statistics', 'required');\r\n }\r\n getWinners():Promise<LuckyWheelTypes.LuckyWheelWinners[]> {\r\n return this.http.get<LuckyWheelTypes.LuckyWheelWinners[]>('/lucky-wheel/get-winners?offset=1&limit=100', 'none');\r\n }\r\n getPrizes():Promise<LuckyWheelTypes.LuckyWheelPrize[]>{\r\n return this.http.get<LuckyWheelTypes.LuckyWheelPrize[]>('/lucky-wheel/get-prizes');\r\n }\r\n getStatus():Promise<LuckyWheelTypes.LuckyWheelStatus>{\r\n return this.http.get<LuckyWheelTypes.LuckyWheelStatus>('/lucky-wheel/status');\r\n }\r\n play(data: { luckyWheelId: number }):Promise<LuckyWheelTypes.LuckyWheelSpinPlay | LuckyWheelTypes.LuckyWheelSpinPlayNA>{\r\n return this.http.post<LuckyWheelTypes.LuckyWheelSpinPlay | LuckyWheelTypes.LuckyWheelSpinPlayNA>('/lucky-wheel/play', data);\r\n }\r\n collect(data: { collectHash: string }):Promise<LuckyWheelTypes.LuckyWheelCollect>{\r\n return this.http.post<LuckyWheelTypes.LuckyWheelCollect>('/lucky-wheel/collect', data);\r\n }\r\n\r\n}\r\n","// src/apis/media.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as MediaTypes from '../types/media';\r\nexport class MediaAPI {\r\n constructor(private http: HttpClient) {}\r\n upload(file: File): Promise<MediaTypes.uploadResponse> {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n formData.append('upload_preset', 'demo');\r\n return this.http.post<MediaTypes.uploadResponse>('/media/upload', formData, 'none');\r\n }\r\n getFileUrl(filePath: string): Promise<string> {\r\n return this.http.get<string>(`/media/get-file-url?filePath=${filePath}`)\r\n }\r\n\r\n}\r\n","// src/apis/player.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as PlayerTypes from '../types/player';\r\nimport {BalanceHistory, GameHistory} from \"../types/player\";\r\n\r\nexport class PlayerAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n changePassword(data: PlayerTypes.ChangePasswordData): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/player/change-password', data);\r\n }\r\n getBalanceHistory(data: PlayerTypes.GetBalanceHistoryQuery): Promise<PlayerTypes.BalanceHistory[]> {\r\n const queryParams = new URLSearchParams();\r\n if (data.limit !== undefined) queryParams.append('limit', data.limit.toString());\r\n if (data.startDate !== undefined) queryParams.append('startDate', data.startDate);\r\n if (data.endDate !== undefined) queryParams.append('endDate', data.endDate);\r\n const queryString = queryParams.toString() ? `?${queryParams.toString()}` : '';\r\n return this.http.get<PlayerTypes.BalanceHistory[]>(`/player/balance-history${queryString}`);\r\n }\r\n getGameHistory(data: PlayerTypes.GetBalanceHistoryQuery): Promise<GameHistory[]> {\r\n const queryParams = new URLSearchParams();\r\n if (data.limit !== undefined) queryParams.append('limit', data.limit.toString());\r\n if (data.startDate !== undefined) queryParams.append('startDate', data.startDate);\r\n if (data.endDate !== undefined) queryParams.append('endDate', data.endDate);\r\n const queryString = queryParams.toString() ? `?${queryParams.toString()}` : '';\r\n return this.http.get<GameHistory[]>(`/player/game-transaction${queryString}`);\r\n }\r\n verifyEmail(data: PlayerTypes.EmailVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/email/send', data);\r\n }\r\n verifyEmailCode(data: { verificationCode: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/email/confirm', data);\r\n }\r\n verifyPhone(data: PlayerTypes.PhoneVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/send', data);\r\n }\r\n verifyPhoneCode(data: { verificationCode: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/confirm', data);\r\n }\r\n getVerificationStatus(): Promise<PlayerTypes.VerificationStatus[]> {\r\n return this.http.get<PlayerTypes.VerificationStatus[]>('/player/verification-status');\r\n }\r\n getAvatars(): Promise<PlayerTypes.Avatar[]> {\r\n return this.http.get<PlayerTypes.Avatar[]>('/avatars/get');\r\n }\r\n changeAvatar(data: FormData): Promise<{ message: string, avatar: PlayerTypes.Avatar }> {\r\n return this.http.post<{ message: string, avatar: PlayerTypes.Avatar }>('/avatars/set', data);\r\n }\r\n getPlayerKycDocuments(): Promise<PlayerTypes.KycDocument[]> {\r\n return this.http.get<PlayerTypes.KycDocument[]>('/player/kyc-documents');\r\n }\r\n createPlayerKycDocument(data: FormData): Promise<PlayerTypes.KycDocument> {\r\n return this.http.post<PlayerTypes.KycDocument>('/player/kyc-documents', data);\r\n }\r\n createPlayerTags(data: {key: string, value: string}[]): Promise<{ message: string }> {\r\n const requestData = {\r\n tags: data\r\n };\r\n return this.http.post<{ message: string}>('/player/tags', requestData);\r\n }\r\n updateProfile(data: PlayerTypes.UpdateProfileData): Promise<PlayerTypes.ProfileData> {\r\n return this.http.patch<PlayerTypes.ProfileData>('/player/profile', data);\r\n }\r\n\r\n}\r\n","// src/apis/promotions.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as PromotionsTypes from '../types/promotions';\r\nimport {Promotion} from \"../types/promotions\";\r\nexport class PromotionsAPI {\r\n constructor(private http: HttpClient) {}\r\n getActive(): Promise<PromotionsTypes.Promotion[]> {\r\n return this.http.get<PromotionsTypes.Promotion[]>('/promotions/active');\r\n }\r\n getPublic(): Promise<PromotionsTypes.Promotion[]> {\r\n return this.http.get<PromotionsTypes.Promotion[]>('/promotions/public', 'none');\r\n }\r\n getPromotion(id:string): Promise<PromotionsTypes.Promotion> {\r\n return this.http.get<PromotionsTypes.Promotion>(`/promotions/${id}`, 'none');\r\n }\r\n getProgress(): Promise<PromotionsTypes.Progress> {\r\n return this.http.get<PromotionsTypes.Progress>('/promotions/progress');\r\n }\r\n activateBonus(id:string): Promise<{message:string; error?:string}> {\r\n return this.http.post<{message:string; error?:string}>(`/bonus/activate/${id}`, { });\r\n }\r\n cancelBonus(id:string): Promise<{message:string; error?:string}> {\r\n return this.http.delete<{message:string; error?:string}>(`/bonus/cancel/${id}`);\r\n }\r\n}\r\n","// src/apis/raffle.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as RaffleTypes from '../types/raffle';\r\n\r\nexport class RaffleAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getTickets(): Promise<RaffleTypes.GetRaffleTicketsResponse[]> {\r\n return this.http.get<RaffleTypes.GetRaffleTicketsResponse[]>('/raffle/tickets');\r\n }\r\n\r\n getPrizes(): Promise<RaffleTypes.RafflePrize[]> {\r\n return this.http.get<RaffleTypes.RafflePrize[]>('/raffle/prizes');\r\n }\r\n\r\n getHistory(): Promise<RaffleTypes.RafflePrizesHistoryResponse> {\r\n return this.http.get<RaffleTypes.RafflePrizesHistoryResponse>('/raffle/history');\r\n }\r\n\r\n getActiveRaffle(): Promise<RaffleTypes.ActiveRaffle[] | null> {\r\n return this.http.get<RaffleTypes.ActiveRaffle[] | null>('/raffle/current');\r\n }\r\n\r\n purchaseTickets(data: { raffleId: number; ticketAmount: number }): Promise<RaffleTypes.PurchaseTicket> {\r\n return this.http.post<RaffleTypes.PurchaseTicket>('/raffle/purchase', data);\r\n }\r\n}\r\n","// src/apis/region.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as RegionTypes from '../types/region';\r\n\r\nexport class RegionAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getDepositRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions/deposit');\r\n }\r\n\r\n getWithdrawRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions/withdraw');\r\n }\r\n\r\n getRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions', 'none');\r\n }\r\n\r\n getBlockedCountries(): Promise<RegionTypes.BlockedCountry[]> {\r\n return this.http.get<RegionTypes.BlockedCountry[]>('/regions/blocked-countries', 'none');\r\n }\r\n}\r\n","// src/apis/settings.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as SettingsTypes from '../types/settings';\r\n\r\nexport class SettingsAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getSettings(): Promise<SettingsTypes.Settings> {\r\n return this.http.get<SettingsTypes.Settings>('/api/v1/settings', 'none');\r\n }\r\n getBanner(lang: string): Promise<SettingsTypes.Banner> {\r\n return this.http.get<SettingsTypes.Banner>(`/banners/get/${lang}`, 'none');\r\n }\r\n getContent(): Promise<SettingsTypes.Content[]> {\r\n return this.http.get<SettingsTypes.Content[]>('/content-pages', 'none');\r\n }\r\n getContentItem(type:string, lang:string): Promise<SettingsTypes.Content> {\r\n return this.http.get<SettingsTypes.Content>(`/content-pages/${type}/${lang}`, 'none');\r\n }\r\n getAvatar(): Promise<SettingsTypes.Avatar[]> {\r\n return this.http.get<SettingsTypes.Avatar[]>('/avatars/get', 'none');\r\n }\r\n getPreferences(): Promise<SettingsTypes.Preferences> {\r\n return this.http.get<SettingsTypes.Preferences>('/player/preferences');\r\n }\r\n updatePreferences(data: Partial<SettingsTypes.Preferences>): Promise<SettingsTypes.Preferences> {\r\n return this.http.patch<SettingsTypes.Preferences>('/player/preferences', data);\r\n }\r\n getCurrencies(): Promise<SettingsTypes.Currency[]> {\r\n return this.http.get<SettingsTypes.Currency[]>('/currencies/get', 'none');\r\n }\r\n getWebSetting(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=footerCasinoItems&key[]=footerSportsItems&key[]=footerSocialMedia&key[]=footerPromoItems&key[]=footerSupportLegalItems&key[]=footerAboutUsItems&key[]=footerAppLinks`, 'none');\r\n }\r\n getWebSettingProviders(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=sectionProviders`, 'none');\r\n }\r\n getWebSettingPin(): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?key[]=isCodeProtected`, 'none');\r\n }\r\n getWebSettingReferralRules(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_rules`, 'none');\r\n }\r\n getWebSettingReferralFaq(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_faq`, 'none');\r\n }\r\n getWebSettingReferralLearnMore(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_learn_more`, 'none');\r\n }\r\n getWebSettingReferralBanners(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_assets`, 'none');\r\n }\r\n getWebSettingSlotsCategories(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=slotsCategories`, 'none');\r\n }\r\n getWebSettingLiveCasinoCategories(lang: string): Promise<SettingsTypes.WebSetting[]>{\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=liveCasinoCategories`, 'none');\r\n }\r\n getWebsiteAllowedPlayerTags(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=allowedPlayerTags`, 'none');\r\n }\r\n getSupportEmail(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=supportEmail`, 'none');\r\n }\r\n}\r\n","// src/apis/sport.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as SportTypes from '../types/sport';\r\n\r\nexport class SportAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n getConfig(): Promise<SportTypes.SportConfig> {\r\n return this.http.get<SportTypes.SportConfig>('/sport/get-sport-config');\r\n }\r\n}\r\n","// src/apis/voucher.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as VoucherTypes from '../types/voucher';\r\n\r\nexport class VoucherAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n redeemVoucher(code: string): Promise<VoucherTypes.RedeemResponse> {\r\n return this.http.post<VoucherTypes.RedeemResponse>('/vouchers/redeem', { code });\r\n }\r\n checkVoucher(code: string): Promise<VoucherTypes.CheckResponse> {\r\n return this.http.get<VoucherTypes.CheckResponse>(`/vouchers/check/${code}`, 'none');\r\n }\r\n}\r\n","// src/apis/withdraw.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as WithdrawTypes from '../types/withdraw';\r\nimport {WithdrawData, WithdrawRequest} from \"../types/withdraw\";\r\n\r\nexport class WithdrawAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getWithdraws(status?: string): Promise<WithdrawTypes.Withdraw[]> {\r\n const statusQuery = status ? `/${status}` : '';\r\n return this.http.get<WithdrawTypes.Withdraw[]>(`/withdraw${statusQuery}`);\r\n }\r\n\r\n getWithdrawMethods(): Promise<WithdrawTypes.WithdrawMethod[]> {\r\n return this.http.get<WithdrawTypes.WithdrawMethod[]>('/withdraw/methods', 'none');\r\n }\r\n\r\n withdraw(data: WithdrawTypes.WithdrawData): Promise<WithdrawTypes.WithdrawRequest> {\r\n return this.http.post<WithdrawTypes.WithdrawRequest>('/withdraw', data);\r\n }\r\n\r\n rejectWithdraw(withdrawId: number): Promise<{ message?: string, error?: string }> {\r\n return this.http.post<{ message: string, error?: string }>(`/withdraw/cancel`, {withdrawId});\r\n }\r\n\r\n getTrinkparaWithdrawInfo(info: WithdrawTypes.infoType): Promise<any> {\r\n return this.http.get<any>(`/trinkpara/info?info=${info}`);\r\n }\r\n\r\n getAnindaBankList(methodId: number): Promise<WithdrawTypes.AnindaBank[]> {\r\n return this.http.get<WithdrawTypes.AnindaBank[]>(`/aninda/banks?paymentMethodId=${methodId}`);\r\n }\r\n}\r\n","// src/sdk.ts\r\nimport { HttpClient } from './http/client';\r\nimport { JwtAuth } from './auth/jwtAuth';\r\nimport { ApiError, isApiError } from './errors';\r\nimport { AffiliateAPI } from \"./apis/affiliate\";\r\nimport { ContentAPI } from './apis/content';\r\nimport { DepositAPI } from \"./apis/deposit\";\r\nimport { GamesAPI } from './apis/games';\r\nimport { GeolocationAPI } from \"./apis/geo\";\r\nimport { LuckyWheelAPI } from './apis/luckyWheel';\r\nimport { MediaAPI } from \"./apis/media\";\r\nimport { PlayerAPI } from \"./apis/player\";\r\nimport { PromotionsAPI } from './apis/promotions';\r\nimport { RaffleAPI } from \"./apis/raffle\";\r\nimport { RegionAPI } from \"./apis/region\";\r\nimport { SettingsAPI } from \"./apis/settings\";\r\nimport { SportAPI } from \"./apis/sport\";\r\nimport { VoucherAPI } from \"./apis/voucher\";\r\nimport { WithdrawAPI} from \"./apis/withdraw\";\r\n\r\nexport interface SDKConfig {\r\n baseUrl: string;\r\n timeoutMs?: number;\r\n}\r\n\r\nexport class GameSDK {\r\n readonly http: HttpClient;\r\n readonly auth: JwtAuth;\r\n\r\n readonly affiliate: AffiliateAPI;\r\n readonly content: ContentAPI;\r\n readonly deposit: DepositAPI\r\n readonly games: GamesAPI;\r\n readonly geolocation: GeolocationAPI;\r\n readonly luckyWheel: LuckyWheelAPI;\r\n readonly media: MediaAPI;\r\n readonly player: PlayerAPI\r\n readonly promotions: PromotionsAPI;\r\n readonly raffle: RaffleAPI;\r\n readonly region: RegionAPI;\r\n readonly settings: SettingsAPI;\r\n readonly sport: SportAPI;\r\n readonly voucher: VoucherAPI;\r\n readonly withdraw: WithdrawAPI;\r\n\r\n constructor(cfg: SDKConfig) {\r\n this.http = new HttpClient({\r\n baseUrl: cfg.baseUrl.replace(/\\/+$/, ''),\r\n auth: { getToken: () => this.auth.getToken() }, // <-- uses this.auth (defined below)\r\n timeoutMs: cfg.timeoutMs ?? 15000,\r\n });\r\n // pass http to JwtAuth so login can call /auth/login\r\n this.auth = new JwtAuth(this.http);\r\n this.affiliate = new AffiliateAPI(this.http);\r\n this.content = new ContentAPI(this.http);\r\n this.deposit = new DepositAPI(this.http);\r\n this.games = new GamesAPI(this.http);\r\n this.geolocation = new GeolocationAPI(this.http);\r\n this.luckyWheel = new LuckyWheelAPI(this.http);\r\n this.media = new MediaAPI(this.http);\r\n this.player = new PlayerAPI(this.http);\r\n this.promotions = new PromotionsAPI(this.http);\r\n this.raffle = new RaffleAPI(this.http);\r\n this.region = new RegionAPI(this.http);\r\n this.settings = new SettingsAPI(this.http);\r\n this.sport = new SportAPI(this.http);\r\n this.voucher = new VoucherAPI(this.http);\r\n this.withdraw = new WithdrawAPI(this.http);\r\n }\r\n}\r\n\r\nexport const createGameSDK = (cfg: SDKConfig) => new GameSDK(cfg);\r\nexport { JwtAuth, ApiError, isApiError };\r\n","// src/types/auth.ts\r\nimport type {GeoLocation } from './geo';\r\n/** Geo info as returned in `user.geo` (values may be \"undefined\" strings from the IP service) */\r\nexport interface GeoInfo {\r\n ip: string | null | 'undefined';\r\n countryCode: string | null | 'undefined';\r\n status: string; // e.g., \"fail\" | \"success\"\r\n message?: string | null; // e.g., \"invalid query\"\r\n query?: string | null; // e.g., \"undefined\"\r\n}\r\n\r\nexport interface Wallet {\r\n createdAt: string; // ISO date\r\n updatedAt: string; // ISO date\r\n id: number;\r\n name: string; // e.g., \"Main Wallet\"\r\n type: number; // 0 = main, etc.\r\n balance: number;\r\n playerId: number;\r\n}\r\n\r\nexport interface User {\r\n createdAt: string; // ISO date\r\n updatedAt: string; // ISO date\r\n id: number;\r\n username: string;\r\n name: string;\r\n lastname: string;\r\n phone: string | null; // example shows string, keep nullable for safety\r\n email: string;\r\n currencyId: string; // e.g., \"USD\"\r\n status: string; // e.g., \"active\"\r\n referralMax: number;\r\n geo?: GeoLocation; // present in example\r\n googleId: string | null; // can be null\r\n country?: string | null;\r\n city?: string | null;\r\n zipCode?: string | null;\r\n address?: string | null;\r\n dob?: string | null; // ISO date or null\r\n isOnline: boolean;\r\n avatar: number | null; // example shows number; allow null for safety\r\n parentId: number | null; // example shows 1\r\n class: number | null; // class id\r\n wallets: Wallet[]; // at least one wallet in example\r\n}\r\n\r\n/**\r\n * Response of POST /auth/login\r\n * Matches your sample: includes `token`, `socketToken`, and `user`.\r\n */\r\nexport interface AuthResponse {\r\n token: string;\r\n socketToken: string;\r\n user: User;\r\n}\r\n\r\nexport interface pinCodeResponse {\r\n message: string;\r\n token: string;\r\n}\r\nexport interface pinCodeCheckResponse {\r\n message: string;\r\n}\r\n\r\n/** ISO date string, e.g., \"2025-08-26T10:52:58.000Z\" or \"2000-09-11\" */\r\nexport type ISODateString = string;\r\n\r\n/** Same regex as backend: letters, numbers, underscore, hyphen */\r\nexport const USERNAME_REGEX = /^[a-zA-Z0-9_-]+$/;\r\n\r\n/**\r\n * createPlayerValidator\r\n * Backend: geo is a string, class defaults to 1 on server.\r\n */\r\nexport interface CreatePlayerInput {\r\n username: string; // min 4, USERNAME_REGEX\r\n name: string; // max 255\r\n lastname: string; // max 255\r\n email: string; // email, max 255\r\n password: string; // min 4\r\n currencyId: string; // min 2, max 6\r\n geo?: GeoLocation; // optional (string in V1)\r\n class?: number; // optional; server defaults to 1\r\n country?: string; // optional\r\n phone?: string; // optional\r\n zipCode?: string; // optional\r\n address?: string; // optional\r\n dob?: ISODateString; // optional\r\n recaptchaToken: string;\r\n}\r\n\r\n/**\r\n * createPlayerV2Validator\r\n * Note: promo fields can be null; geo is object; country/address/city required.\r\n * \"refferer\" is intentionally spelled to match backend.\r\n */\r\nexport interface CreatePlayerV2Input {\r\n promotionId?: number | null;\r\n promoCode?: string | null;\r\n email: string; // email, max 255\r\n username: string; // min 4, USERNAME_REGEX\r\n password: string; // min 4\r\n name: string; // max 255\r\n lastname: string; // max 255\r\n gender: string; // required (string)\r\n currencyId: string; // min 2, max 6\r\n dob: ISODateString; // required\r\n phone?: string; // optional\r\n country: string; // required\r\n refferer?: number | null; // optional, allow null (spelling matches backend)\r\n address: string; // required\r\n city: string; // required, max 100\r\n zipCode?: string; // optional\r\n geo?: GeoLocation; // optional object\r\n class?: number; // optional; server defaults to 1\r\n recaptchaToken: string;\r\n}\r\n\r\n/**\r\n * createPlayerV2Step2Validator\r\n * Minimal step: email + username + password\r\n */\r\nexport interface CreatePlayerV2Step2Input {\r\n email: string; // email, max 255\r\n username: string; // min 4, USERNAME_REGEX\r\n password: string; // min 4\r\n}\r\n\r\n/**\r\n * Signup response\r\n */\r\nexport interface SignupResponse {\r\n message: string; // e.g., \"Player created successfully\"\r\n player: User;\r\n}\r\n\r\nexport interface RegisterResponse extends SignupResponse, AuthResponse {}\r\nexport interface SignupV2ValidateResponse {\r\n message: string; // e.g., \"Player created successfully\"\r\n}\r\n\r\nexport interface GoogleProfile {\r\n id: string;\r\n email: string;\r\n verified_email: boolean;\r\n name: string;\r\n given_name: string;\r\n family_name: string;\r\n picture: string;\r\n}\r\n\r\nexport interface GoogleLoginRequest {\r\n token: string;\r\n profile: GoogleProfile;\r\n geo?: object;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http/client.ts","../src/localStorage.ts","../src/apis/geo.ts","../src/auth/jwtAuth.ts","../src/apis/affiliate.ts","../src/apis/content.ts","../src/apis/deposit.ts","../src/apis/games.ts","../src/apis/luckyWheel.ts","../src/apis/media.ts","../src/apis/player.ts","../src/apis/promotions.ts","../src/apis/raffle.ts","../src/apis/region.ts","../src/apis/settings.ts","../src/apis/sport.ts","../src/apis/voucher.ts","../src/apis/withdraw.ts","../src/ws/socketClient.ts","../src/sdk.ts","../src/types/auth.ts"],"names":[],"mappings":";;;AAWO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAWlC,YAAY,MAAA,EAOT;AACD,IAAA,KAAA,CAAM,OAAO,OAAO,CAAA;AACpB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,MAAM,MAAA,CAAO,GAAA;AAClB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,SAAA,IAAa,IAAA;AAAA,EACvC;AACF;AAGO,SAAS,WAAW,GAAA,EAA+B;AACxD,EAAA,OAAO,CAAC,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAa,IAAY,IAAA,KAAS,UAAA;AACnE;;;AC9BO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAE1C,gBAAgB,IAAA,EAA0C;AACxD,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAA,CAAK,KAAK,IAAA,GAAO,IAAA;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,CACJ,IAAA,EACA,OAAoB,EAAC,EACrB,aAAyB,UAAA,EACb;AACZ,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,SAAS,IAAI,CAAA;AAC3C,IAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,MAAA,IAAU,KAAA,EAAO,WAAA,EAAY;AAClD,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM,UAAA,CAAW,OAAM,EAAG,IAAA,CAAK,IAAA,CAAK,SAAA,IAAa,IAAK,CAAA;AAE/E,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,IAAI,OAAA,CAAQ,KAAK,IAAA,CAAK,cAAA,IAAkB,EAAE,CAAA;AAE1D,MAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,YAAW,IAAK,IAAA;AAC9C,QAAA,IAAI,OAAO,OAAA,CAAQ,GAAA,CAAI,eAAA,EAAiB,CAAA,IAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AACtD,QAAA,IAAI,UAAA,KAAe,UAAA,IAAc,CAAC,KAAA,EAAO;AACvC,UAAA,MAAM,IAAI,QAAA,CAAS;AAAA,YACjB,MAAA,EAAQ,GAAA;AAAA,YACR,GAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA,EAAS,yBAAA;AAAA,YACT,OAAA,EAAS,EAAE,IAAA,EAAM,eAAA;AAAgB,WAClC,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,kBAAkB,CAAA;AAG7F,MAAA,MAAM,MAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,IAAW,OAAO,GAAA,EAAK;AAAA,QAClD,GAAG,IAAA;AAAA,QACH,OAAA,EAAS,EAAE,GAAG,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,OAAA,EAAS,CAAA,EAAG,GAAI,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG;AAAA,QAC7E,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,KAAK,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,IAAK,IAAA;AACxF,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AACvD,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA;AAEtD,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,GAAA,EAAK,MAAM,CAAA;AAC1C,QAAA,MAAM,OAAA,GACH,UAAU,OAAO,OAAA,KAAY,YAAY,OAAA,KAAY,SAAA,IAAa,WAAW,OAAA,IAAW,OAAA,CAAA,GACrF,OAAQ,OAAA,CAAyB,OAAA,IAAY,QAAyB,KAAK,CAAA,GAC3E,IAAI,UAAA,IAAc,CAAA,KAAA,EAAQ,IAAI,MAAM,CAAA,CAAA;AAE1C,QAAA,MAAM,IAAI,QAAA,CAAS;AAAA,UACjB,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ,GAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA;AAAA,UACA,OAAA,EAAA,CAAU,MAAA,GAAU,OAAA,GAA2B,OAAA,KAAY,IAAA;AAAA,UAC3D,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH;AAGA,MAAA,IAAI,MAAA,EAAQ,OAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAEnC,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,OAAQ,OAAQ,IAAA,GAAyB,IAAA;AAAA,IAC3C,SAAS,GAAA,EAAU;AACjB,MAAA,IAAI,GAAA,EAAK,SAAS,YAAA,EAAc;AAC9B,QAAA,MAAM,IAAI,QAAA,CAAS;AAAA,UACjB,MAAA,EAAQ,GAAA;AAAA,UACR,GAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA,EAAS,iBAAA;AAAA,UACT,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA;AAAU,SAC5B,CAAA;AAAA,MACH;AACA,MAAA,IAAI,GAAA,YAAe,UAAU,MAAM,GAAA;AAGnC,MAAA,MAAM,IAAI,QAAA,CAAS;AAAA,QACjB,MAAA,EAAQ,CAAA;AAAA,QACR,GAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA,EAAS,KAAK,OAAA,IAAW,eAAA;AAAA,QACzB,OAAA,EAAS,EAAE,IAAA,EAAM,eAAA;AAAgB,OAClC,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,GAAA,CAAO,MAAc,UAAA,EAAyB;AAC5C,IAAA,OAAO,KAAK,OAAA,CAAW,IAAA,EAAM,EAAE,MAAA,EAAQ,KAAA,IAAS,UAAU,CAAA;AAAA,EAC5D;AAAA,EACA,IAAA,CAAQ,IAAA,EAAc,IAAA,EAAgB,UAAA,EAAyB;AAC7D,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,IAAA;AAAA,MACA,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,IAAA,KAAS,SAAY,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,IAAA,EAAK;AAAA,MACzE;AAAA,KACF;AAAA,EACF;AAAA,EACA,KAAA,CAAS,IAAA,EAAc,IAAA,EAAgB,UAAA,EAAyB;AAC9D,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,IAAA;AAAA,MACA,EAAE,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,IAAA,KAAS,SAAY,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,IAAA,EAAK;AAAA,MAC1E;AAAA,KACF;AAAA,EACF;AAAA,EACA,MAAA,CAAU,MAAc,UAAA,EAAyB;AAC/C,IAAA,OAAO,KAAK,OAAA,CAAW,IAAA,EAAM,EAAE,MAAA,EAAQ,QAAA,IAAY,UAAU,CAAA;AAAA,EAC/D;AACF,CAAA;AAEA,SAAS,OAAA,CAAQ,MAAc,IAAA,EAAc;AAC3C,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,EAAG,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,EAAA,GAAK,GAAG,GAAG,IAAI,CAAA,CAAA;AAC7E;AAEA,eAAe,QAAA,CAAS,KAAe,MAAA,EAAwD;AAC7F,EAAA,IAAI;AACF,IAAA,OAAO,SAAW,MAAM,GAAA,CAAI,MAAK,GAAsB,MAAM,IAAI,IAAA,EAAK;AAAA,EACxE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AC1IO,IAAM,eAAN,MAAmB;AAAA,EAAnB,WAAA,GAAA;AACL,IAAA,IAAA,CAAU,QAAA,GAAW,UAAA;AACrB,IAAA,IAAA,CAAU,WAAA,GAAc,aAAA;AACxB,IAAA,IAAA,CAAU,SAAA,GAAY,WAAA;AACtB,IAAA,IAAA,CAAU,cAAA,GAAiB,gBAAA;AAC3B,IAAA,IAAA,CAAU,MAAA,GAAS,QAAA;AACnB,IAAA,IAAA,CAAU,WAAA,GAAc,aAAA;AACxB,IAAA,IAAA,CAAU,kBAAA,GAAqB,oBAAA;AAAA,EAAA;AAAA,EAEvB,uBAAA,GAAmC;AACzC,IAAA,OAAO,OAAO,YAAA,KAAiB,WAAA;AAAA,EACjC;AAAA,EAEA,SAAS,KAAA,EAAe;AACtB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,KAAK,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,QAAA,GAA0B;AACxB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAQ,IAAA,EAAY;AAClB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,QAAQ,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,OAAA,GAAuB;AACrB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA;AAClD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI;AACF,UAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,QACxB,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,SAAA,EAAmB;AAC3B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,SAAA,EAAW,SAAS,CAAA;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,SAAA,GAA2B;AACzB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,eAAe,KAAA,EAAe;AAC5B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,cAAA,EAAgB,KAAK,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,cAAA,GAAgC;AAC9B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,GAAA,EAAa;AAClB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAA,GAAwB;AACtB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAY,KAAA,EAAe;AACzB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,WAAA,EAAa,KAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,WAAA,GAA6B;AAC3B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,eAAe,IAAA,EAAW;AACxB,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,IAAA,CAAK,SAAA,GAAY,KAAK,GAAA,EAAI;AAC1B,MAAA,YAAA,CAAa,QAAQ,IAAA,CAAK,kBAAA,EAAoB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,cAAA,GAA6B;AAC3B,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,kBAAkB,CAAA;AACzD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI;AACF,UAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAClC,UAAA,IAAI,WAAW,SAAA,EAAW;AACxB,YAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,YAAA,MAAM,GAAA,GAAM,MAAM,UAAA,CAAW,SAAA;AAC7B,YAAA,MAAM,SAAA,GAAY,KAAK,EAAA,GAAK,GAAA;AAC5B,YAAA,IAAI,MAAM,SAAA,EAAW;AACnB,cAAA,OAAO,IAAA;AAAA,YACT;AAAA,UACF;AACA,UAAA,OAAO,UAAA;AAAA,QACT,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAQ;AACN,IAAA,IAAI,IAAA,CAAK,yBAAwB,EAAG;AAClC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,QAAQ,CAAA;AACrC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,WAAW,CAAA;AACxC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,SAAS,CAAA;AACtC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,cAAc,CAAA;AAC3C,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,MAAM,CAAA;AACnC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,WAAW,CAAA;AACxC,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,kBAAkB,CAAA;AAAA,IACjD;AAAA,EACF;AACF,CAAA;AAEO,IAAM,OAAA,GAAU,IAAI,YAAA,EAAa;;;AC5IjC,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACpB,IAAA,IAAA,CAAQ,OAAA,GAAU;AAAA,MAChB,EAAA,EAAI,SAAA;AAAA,MACJ,WAAA,EAAa,WAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,eAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA,EAPuC;AAAA,EAQvC,MAAM,qBAAA,GAA2D;AAC/D,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAkB,iBAAiB,MAAM,CAAA;AACrE,MAAA,IAAI,GAAA,CAAI,SAAA,IAAa,GAAA,CAAI,SAAA,EAAW;AAClC,QAAA,OAAO,GAAA,CAAI,SAAA;AACX,QAAA,OAAO,GAAA,CAAI,SAAA;AACX,QAAA,OAAA,CAAQ,eAAe,GAAG,CAAA;AAC1B,QAAA,OAAO,GAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EACA,MAAM,cAAA,GAAkD;AACtD,IAAA,MAAM,OAAA,GAAU,QAAQ,cAAA,EAAe;AACvC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC9B,QAAA,IAAI,GAAA,IAAO,IAAI,SAAA,EAAW;AACxB,UAAA,OAAO,GAAA,CAAI,SAAA;AACX,UAAA,OAAO,GAAA,CAAI,SAAA;AACX,UAAA,OAAO,GAAA;AAAA,QACT,CAAA,MAAO;AACL,UAAA,OAAO,IAAA,CAAK,OAAA;AAAA,QACd;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACd;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,MAAM,IAAA,CAAK,qBAAA,EAAsB,IAAK,IAAA,CAAK,OAAA;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,GAA0C;AAC9C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,cAAA,EAAe;AACtC,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,WAAA,IAAe,GAAA,CAAI,gBAAgB,WAAA,EAAa;AAC7D,MAAA,OAAO,GAAA,CAAI,WAAA;AAAA,IACb,CAAA,MAAO;AACL,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACF,CAAA;;;ACrCO,IAAM,UAAN,MAAc;AAAA,EAInB,YACU,MAAA,EACR;AADQ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAJV,IAAA,IAAA,CAAQ,KAAA,GAAuB,IAAA;AAC/B,IAAA,IAAA,CAAQ,IAAA,GAAoC,IAAA;AAKxC,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,QAAA,EAAS;AAC9B,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,OAAA,EAAQ;AAAA,EAChC;AAAA,EAEA,SAAS,KAAA,EAAsB;AAC7B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAA,CAAQ,SAAS,KAAK,CAAA;AACtB,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB;AAAA,EACF;AAAA,EACA,OAAA,CAAQ,MAA4B,KAAA,EAAe;AACjD,IAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACpB,IAAA,OAAA,CAAQ,SAAS,KAAK,CAAA;AACtB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,MAAM,KAAA,CAAM,QAAA,EAAkB,QAAA,EAAkB,cAAA,EAA+C;AAC7F,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,EAAE,QAAA,EAAU,QAAA,EAAU,cAAA,EAAe;AACrD,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,OAAO,IAAA,CAAmB,aAAA,EAAe,SAAS,UAAU,CAAA;AACnF,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,KAAK,CAAA;AAChC,IAAA,OAAA,CAAQ,cAAA,CAAe,IAAI,WAAW,CAAA;AACtC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,IAAA,EAAiD;AACjE,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,cAAA,EAAe;AACzC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,GAAA,GAAM,OAAA;AAAA,IACb;AACA,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,OAAO,IAAA,CAAmB,qBAAA,EAAuB,MAAM,UAAU,CAAA;AAExF,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,KAAK,CAAA;AAChC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAe,KAAA,EAA8B;AACjD,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAW,yBAAyB,EAAE,KAAA,IAAS,UAAU,CAAA;AAAA,EAC7E;AAAA,EAEA,MAAM,QAAA,CAAS,IAAA,EAAyB,KAAA,EAAwE;AAC9G,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,cAAA,EAAe;AACzC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,GAAA,GAAM,OAAA;AAAA,IACb;AACA,IAAA,IAAI,SAAA,GAAY,cAAA;AAChB,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,SAAA,IAAa,QAAQ,KAAK,CAAA,CAAA;AAAA,IAC9B;AACA,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,eAAe,MAAM,IAAA,CAAK,OAAO,IAAA,CAAqB,SAAA,EAAW,MAAM,UAAU,CAAA;AACvF,IAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,cAAc,CAAA;AACpF,MAAA,OAAO;AAAA,QACL,GAAG,YAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO;AAAA,QACL,GAAG;AAAA,OACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,CAAW,IAAA,EAA2B,KAAA,EAAwE;AAClH,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,cAAA,EAAe;AACzC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,GAAA,GAAM,OAAA;AAAA,IACb;AACA,IAAA,IAAI,SAAA,GAAY,gBAAA;AAChB,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,SAAA,IAAa,QAAQ,KAAK,CAAA,CAAA;AAAA,IAC9B;AACA,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,MAAM,eAAgB,MAAM,IAAA,CAAK,OAAO,IAAA,CAAqB,SAAA,EAAW,MAAM,UAAU,CAAA;AACxF,IAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,cAAc,CAAA;AACpF,MAAA,OAAO;AAAA,QACL,GAAG,YAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO;AAAA,QACL,GAAG;AAAA,OACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,IAAA,EAAoE;AAC3F,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,OAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAA+B,wCAAA,EAA0C,MAAM,UAAU,CAAA;AAAA,EACrH;AAAA,EAEA,KAAA,GAAQ;AACN,IAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,MAAA,GAAwB;AAC5B,IAAA,MAAM,UAAA,GAAyB,UAAA;AAC/B,IAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAW,cAAA,EAAgB,IAAI,UAAU,CAAA;AAC3D,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACb;AAAA,EACA,MAAM,QAAQ,GAAA,EAAuC;AACnD,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO,IAAA,CAAsB,iBAAiB,EAAE,GAAA,IAAO,UAAU,CAAA;AAAA,EACrF;AAAA,EACA,MAAM,SAAS,KAAA,EAA8C;AAC3D,IAAA,MAAM,UAAA,GAAyB,MAAA;AAC/B,IAAA,OAAO,MAAM,KAAK,MAAA,CAAO,IAAA,CAA2B,uBAAuB,EAAE,KAAA,IAAS,UAAU,CAAA;AAAA,EAClG;AAAA,EAEC,QAAA,GAA0B;AACzB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,QAAA,EAAS;AAAA,IAChC;AACA,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAA,GAAuC;AACrC,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,OAAA,EAAQ;AAAA,IAC9B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACb;AAAA,EACA,eAAA,GAA2B;AAC1B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,QAAA,EAAS;AAC1C,IAAA,OAAO,CAAC,CAAC,KAAA;AAAA,EACV;AACH;;;AC3JO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEvC,MAAM,qBAAqB,WAAA,EAAmE;AAC5F,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,KAA0C,CAAA,kBAAA,CAAA,EAAsB,EAAC,aAAY,CAAA;AAAA,EACtG;AAAA,EAEA,MAAM,eAAA,GAA2D;AAC/D,IAAA,OAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAoC,CAAA,aAAA,CAAe,CAAA;AAAA,EAC7E;AAAA,EAEA,MAAM,gBAAA,GAAoC;AACxC,IAAA,OAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAY,CAAA,mBAAA,CAAqB,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAM,iBAAA,GAA4D;AAChE,IAAA,OAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAmC,CAAA,gBAAA,CAAkB,CAAA;AAAA,EAC/E;AAAA,EAEA,MAAM,kBAAA,CAAmB,IAAA,EAAc,KAAA,EAAwD;AAC7F,IAAA,OAAO,MAAM,KAAK,IAAA,CAAK,GAAA,CAAoC,0BAA0B,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,EAC5G;AAAA,EAEA,MAAM,cAAA,CAAe,IAAA,EAAc,GAAA,EAAkD;AACnF,IAAA,OAAO,MAAM,KAAK,IAAA,CAAK,GAAA,CAAgC,8BAA8B,IAAI,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAAA;AAAA,EACxG;AAAA,EAEA,MAAM,UAAA,GAA8C;AAClD,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,CAAA,iBAAA,CAAmB,CAAA;AAAA,EACxE;AAAA,EAEA,MAAM,kBAAA,GAA8D;AAClE,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAoC,CAAA,0BAAA,CAA4B,CAAA;AAAA,EACzF;AAAA;AAAA,EAGA,MAAM,UAAU,MAAA,EAA4E;AAC1F,IAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,MAAA,IAAI,MAAA,CAAO,GAA6B,CAAA,KAAM,MAAA,EAAW;AACvD,QAAA,WAAA,CAAY,OAAO,GAAA,EAAK,MAAA,CAAO,MAAA,CAAO,GAA6B,CAAC,CAAC,CAAA;AAAA,MACvE;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,YAAY,QAAA,EAAS;AACnC,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAE,CAAA;AAAA,EAClF;AAAA;AAAA,EAGA,MAAM,QAAQ,IAAA,EAAiE;AAC7E,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAwB,qBAAqB,IAAI,CAAA;AAAA,EAC1E;AAAA,EAEA,MAAM,UAAA,GAA8C;AAClD,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,iBAAA,CAAmB,CAAA;AAAA,EAChD;AACF,CAAA;;;ACxDO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EACvC,IAAA,GAAO;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAgC,gBAAA,EAAkB,MAAM,CAAA;AAAA,EAAG;AAAA,EACrF,IAAI,IAAA,EAAc;AAAE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAA8B,CAAA,eAAA,EAAkB,IAAI,IAAI,MAAM,CAAA;AAAA,EAAG;AAAA,EACtG,gBAAA,GAAmB;AAAE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAwC,gBAAA,EAAkB,MAAM,CAAA;AAAA,EAAG;AAC3G;;;ACNO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EACA,OAAO,IAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAe,iBAAA,EAAmB,MAAM,UAAU,CAAA;AAAA,EACrE;AAAA,EAEA,iBAAA,GAAkD;AAChD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA2B,kBAAA,EAAoB,UAAU,CAAA;AAAA,EAC5E;AAAA,EAEA,YAAY,MAAA,GAAS,SAAA,EAAW,IAAA,GAAO,CAAA,EAAG,QAAQ,EAAA,EAA0B;AAC1E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAiB,CAAA,SAAA,EAAY,MAAM,SAAS,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,EAAI,UAAU,CAAA;AAAA,EAChG;AACF,CAAA;;;ACLO,IAAM,WAAN,MAAe;AAAA,EACpB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA;AAAA,EAGA,OAAO,OAAA,EAAsD;AAC3D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAyB,CAAA,cAAA,EAAiB,IAAI,eAAA,CAAgB,OAAc,CAAA,CAAE,QAAA,EAAU,CAAA,CAAA,EAAI,MAAM,CAAA;AAAA,EACrH;AAAA,EAEA,aAAA,GAAiD;AAC/C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,mBAAA,EAAqB,MAAM,CAAA;AAAA,EAC1E;AAAA;AAAA,EAGA,QAAQ,MAAA,EAAgB;AACtB,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAuB,kBAAkB,EAAC,MAAA,IAAS,UAAU,CAAA;AAAA,EAChF;AAAA;AAAA,EAGA,YAAY,cAAA,EAAwB;AAClC,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAuB,sBAAsB,EAAC,cAAA,IAAiB,MAAM,CAAA;AAAA,EACxF;AAAA,EAEA,WAAA,CAAY,QAAgB,UAAA,EAAwD;AAClF,IAAA,OAAO,IAAA,CAAK,KAAK,IAAA,CAA+B,kBAAA,EAAoB,EAAC,MAAA,EAAQ,UAAA,IAAa,UAAU,CAAA;AAAA,EACtG;AAAA,EACA,WAAA,GAAgD;AAC9C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA6B,yBAAA,EAA2B,UAAU,CAAA;AAAA,EACrF;AAAA,EACA,iBAAiB,QAAA,EAAoD;AACnE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAA6B,CAAA,gCAAA,EAAmC,QAAQ,IAAI,MAAM,CAAA;AAAA,EACrG;AAAA,EACA,SAAA,CAAU,IAAA,GAAK,CAAA,EAAG,KAAA,GAAM,EAAA,EAAkC;AACxD,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAyB,sBAAsB,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,EACvF;AAAA,EAEA,kBAAA,GAA+C;AAC7C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAqB,yBAAA,EAA2B,MAAM,CAAA;AAAA,EACzE;AAAA,EACA,WAAA,GAA+C;AAC7C,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACxC,IAAA,MAAM,WAAA,GAAc,IAAI,cAAA,EAAe;AACvC,IAAA,IAAI,GAAA,GAAM,kBAAA;AACV,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,GAAA,IAAO,WAAW,WAAW,CAAA,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,GAAA,EAAK,MAAM,CAAA;AAAA,EAC5D;AAAA,EACA,YAAA,GAAmC;AACjC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAe,kBAAA,EAAoB,MAAM,CAAA;AAAA,EAC5D;AAAA,EACA,sBAAA,GAA4E;AAC1E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8C,6BAAA,EAA+B,MAAM,CAAA;AAAA,EACtG;AAAA,EACA,QAAA,GAA6B;AAC3B,IAAA,MAAM,GAAA,GAAM,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACxC,IAAA,MAAM,WAAA,GAAc,IAAI,cAAA,EAAe;AACvC,IAAA,IAAI,GAAA,GAAM,cAAA;AACV,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,GAAA,IAAO,WAAW,WAAW,CAAA,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AAAA,EAC3C;AAEF;;;ACzEO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEvC,aAAA,GAA+D;AAC7D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0C,yBAAA,EAA2B,UAAU,CAAA;AAAA,EAClG;AAAA,EACA,UAAA,GAA0D;AACxD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAyC,6CAAA,EAA+C,MAAM,CAAA;AAAA,EACjH;AAAA,EACA,SAAA,GAAsD;AACpD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAuC,yBAAyB,CAAA;AAAA,EACnF;AAAA,EACA,SAAA,GAAqD;AACnD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAsC,qBAAqB,CAAA;AAAA,EAC9E;AAAA,EACA,KAAK,IAAA,EAAkH;AACrH,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAgF,mBAAA,EAAqB,IAAI,CAAA;AAAA,EAC5H;AAAA,EACA,QAAQ,IAAA,EAAyE;AAC/E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAwC,sBAAA,EAAwB,IAAI,CAAA;AAAA,EACvF;AAEF,CAAA;;;ACtBO,IAAM,WAAN,MAAe;AAAA,EACpB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EACvC,OAAO,IAAA,EAAgD;AACrD,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,IAAI,CAAA;AAC5B,IAAA,QAAA,CAAS,MAAA,CAAO,iBAAiB,MAAM,CAAA;AACvC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAgC,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,EACpF;AAAA,EACA,WAAW,QAAA,EAAmC;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAY,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAE,CAAA;AAAA,EACzE;AAEF,CAAA;;;ACVO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EACA,eAAe,IAAA,EAAoE;AACjF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,yBAAA,EAA2B,IAAI,CAAA;AAAA,EAC3E;AAAA,EACA,kBAAkB,IAAA,EAAiF;AACjG,IAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW,WAAA,CAAY,OAAO,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA;AAC/E,IAAA,IAAI,KAAK,SAAA,KAAc,MAAA,cAAuB,MAAA,CAAO,WAAA,EAAa,KAAK,SAAS,CAAA;AAChF,IAAA,IAAI,KAAK,OAAA,KAAY,MAAA,cAAuB,MAAA,CAAO,SAAA,EAAW,KAAK,OAAO,CAAA;AAC1E,IAAA,MAAM,WAAA,GAAc,YAAY,QAAA,EAAS,GAAI,IAAI,WAAA,CAAY,QAAA,EAAU,CAAA,CAAA,GAAK,EAAA;AAC5E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAkC,CAAA,uBAAA,EAA0B,WAAW,CAAA,CAAE,CAAA;AAAA,EAC5F;AAAA,EACA,eAAe,IAAA,EAAkE;AAC/E,IAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW,WAAA,CAAY,OAAO,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA;AAC/E,IAAA,IAAI,KAAK,SAAA,KAAc,MAAA,cAAuB,MAAA,CAAO,WAAA,EAAa,KAAK,SAAS,CAAA;AAChF,IAAA,IAAI,KAAK,OAAA,KAAY,MAAA,cAAuB,MAAA,CAAO,SAAA,EAAW,KAAK,OAAO,CAAA;AAC1E,IAAA,MAAM,WAAA,GAAc,YAAY,QAAA,EAAS,GAAI,IAAI,WAAA,CAAY,QAAA,EAAU,CAAA,CAAA,GAAK,EAAA;AAC5E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAmB,CAAA,wBAAA,EAA2B,WAAW,CAAA,CAAE,CAAA;AAAA,EAC9E;AAAA,EACA,YAAY,IAAA,EAAkE;AAC5E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,oBAAA,EAAsB,IAAI,CAAA;AAAA,EACtE;AAAA,EACA,gBAAgB,IAAA,EAAkE;AAChF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,uBAAA,EAAyB,IAAI,CAAA;AAAA,EACzE;AAAA,EACA,YAAY,IAAA,EAAkE;AAC5E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,oBAAA,EAAsB,IAAI,CAAA;AAAA,EACtE;AAAA,EACA,gBAAgB,IAAA,EAAkE;AAChF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,uBAAA,EAAyB,IAAI,CAAA;AAAA,EACzE;AAAA,EACA,kBAAkB,IAAA,EAAkE;AAClF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,oBAAA,EAAsB,IAAI,CAAA;AAAA,EACtE;AAAA,EACA,sBAAsB,IAAA,EAA6F;AACjH,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,uBAAA,EAAyB,IAAI,CAAA;AAAA,EACzE;AAAA,EACA,qBAAA,GAAmE;AACjE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAsC,6BAA6B,CAAA;AAAA,EACtF;AAAA,EACA,UAAA,GAA4C;AAC1C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0B,cAAc,CAAA;AAAA,EAC3D;AAAA,EACA,aAAa,IAAA,EAAqF;AAChG,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAsD,cAAA,EAAgB,IAAI,CAAA;AAAA,EAC7F;AAAA,EACA,qBAAA,GAA4D;AAC1D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA+B,uBAAuB,CAAA;AAAA,EACzE;AAAA,EACA,wBAAwB,IAAA,EAAkD;AACxE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAA8B,uBAAA,EAAyB,IAAI,CAAA;AAAA,EAC9E;AAAA,EACA,iBAAiB,IAAA,EAAoE;AACnF,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAyB,cAAA,EAAgB,WAAW,CAAA;AAAA,EACvE;AAAA,EACA,cAAc,IAAA,EAAuE;AACnF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAA+B,iBAAA,EAAmB,IAAI,CAAA;AAAA,EACzE;AAEF,CAAA;;;AClEO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EACvC,SAAA,GAAkD;AAChD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAiC,oBAAoB,CAAA;AAAA,EACxE;AAAA,EACA,SAAA,GAAkD;AAChD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAiC,oBAAA,EAAsB,MAAM,CAAA;AAAA,EAChF;AAAA,EACA,aAAa,EAAA,EAA+C;AAC1D,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAA+B,CAAA,YAAA,EAAe,EAAE,IAAI,MAAM,CAAA;AAAA,EAC7E;AAAA,EACA,WAAA,GAAiD;AAC/C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,sBAAsB,CAAA;AAAA,EACvE;AAAA,EACA,cAAc,EAAA,EAAqD;AACjE,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAsC,mBAAmB,EAAE,CAAA,CAAA,EAAI,EAAG,CAAA;AAAA,EACrF;AAAA,EACA,YAAY,EAAA,EAAqD;AAC/D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAwC,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAE,CAAA;AAAA,EAChF;AACF;;;ACpBO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EAEA,UAAA,GAA8D;AAC5D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4C,iBAAiB,CAAA;AAAA,EAChF;AAAA,EAEA,SAAA,GAAgD;AAC9C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA+B,gBAAgB,CAAA;AAAA,EAClE;AAAA,EAEA,UAAA,GAA+D;AAC7D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA6C,iBAAiB,CAAA;AAAA,EACjF;AAAA,EAEA,eAAA,GAA8D;AAC5D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAuC,iBAAiB,CAAA;AAAA,EAC3E;AAAA,EAEA,gBAAgB,IAAA,EAAuF;AACrG,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAiC,kBAAA,EAAoB,IAAI,CAAA;AAAA,EAC5E;AACF,CAAA;;;ACvBO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EAEA,iBAAA,GAAmD;AACjD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0B,kBAAkB,CAAA;AAAA,EAC/D;AAAA,EAEA,kBAAA,GAAoD;AAClD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0B,mBAAmB,CAAA;AAAA,EAChE;AAAA,EAEA,UAAA,GAA4C;AAC1C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA0B,UAAA,EAAY,MAAM,CAAA;AAAA,EAC/D;AAAA,EAEA,mBAAA,GAA6D;AAC3D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAkC,4BAAA,EAA8B,MAAM,CAAA;AAAA,EACzF;AACF,CAAA;;;AClBO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EAEA,WAAA,GAA+C;AAC7C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,kBAAA,EAAoB,MAAM,CAAA;AAAA,EACzE;AAAA,EACA,UAAU,IAAA,EAA6C;AACrD,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAA0B,CAAA,aAAA,EAAgB,IAAI,IAAI,MAAM,CAAA;AAAA,EAC3E;AAAA,EACA,UAAA,GAA+C;AAC7C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA6B,gBAAA,EAAkB,MAAM,CAAA;AAAA,EACxE;AAAA,EACA,cAAA,CAAe,MAAa,IAAA,EAA6C;AACvE,IAAA,OAAO,IAAA,CAAK,KAAK,GAAA,CAA2B,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAA,EAAI,IAAI,IAAI,MAAM,CAAA;AAAA,EACtF;AAAA,EACA,SAAA,GAA6C;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,cAAA,EAAgB,MAAM,CAAA;AAAA,EACrE;AAAA,EACA,cAAA,GAAqD;AACnD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA+B,qBAAqB,CAAA;AAAA,EACvE;AAAA,EACA,kBAAkB,IAAA,EAA8E;AAC9F,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAiC,qBAAA,EAAuB,IAAI,CAAA;AAAA,EAC/E;AAAA,EACA,aAAA,GAAmD;AACjD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,iBAAA,EAAmB,MAAM,CAAA;AAAA,EAC1E;AAAA,EACA,kBAAA,GAA2D;AACzD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAiC,mBAAA,EAAqB,MAAM,CAAA;AAAA,EAC/E;AAAA,EACA,cAAc,IAAA,EAAmD;AAC/D,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,+KAA+K,MAAM,CAAA;AAAA,EAC1Q;AAAA,EACA,uBAAuB,IAAA,EAAmD;AACxE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,2BAA2B,MAAM,CAAA;AAAA,EACtH;AAAA,EACA,gBAAA,GAAwD;AACtD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,uCAAA,CAAA,EAA2C,MAAM,CAAA;AAAA,EACpG;AAAA,EACA,2BAA2B,IAAA,EAAmD;AAC5E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,yBAAyB,MAAM,CAAA;AAAA,EACpH;AAAA,EACA,yBAAyB,IAAA,EAAmD;AAC1E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,uBAAuB,MAAM,CAAA;AAAA,EAClH;AAAA,EACA,+BAA+B,IAAA,EAAmD;AAChF,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,8BAA8B,MAAM,CAAA;AAAA,EACzH;AAAA,EACA,6BAA6B,IAAA,EAAmD;AAC9E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,0BAA0B,MAAM,CAAA;AAAA,EACrH;AAAA,EACA,6BAA6B,IAAA,EAAmD;AAC9E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,0BAA0B,MAAM,CAAA;AAAA,EACrH;AAAA,EACA,kCAAkC,IAAA,EAAkD;AAClF,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,+BAA+B,MAAM,CAAA;AAAA,EAC1H;AAAA,EACA,4BAA4B,IAAA,EAAmD;AAC7E,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,4BAA4B,MAAM,CAAA;AAAA,EACvH;AAAA,EACA,gBAAgB,IAAA,EAAmD;AACjE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,2BAAA,EAA8B,IAAI,uBAAuB,MAAM,CAAA;AAAA,EAClH;AACF,CAAA;;;ACjEO,IAAM,WAAN,MAAe;AAAA,EACpB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EACA,SAAA,GAA6C;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA4B,yBAAyB,CAAA;AAAA,EACxE;AACF,CAAA;;;ACNO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEvC,cAAc,IAAA,EAAoD;AAChE,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAkC,kBAAA,EAAoB,EAAE,MAAM,CAAA;AAAA,EACjF;AAAA,EACA,aAAa,IAAA,EAAmD;AAC9D,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,gBAAA,EAAmB,IAAI,IAAI,MAAM,CAAA;AAAA,EACpF;AACF,CAAA;;;ACRO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAAoB,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EACpB;AAAA,EAEA,aAAa,MAAA,EAAoD;AAC/D,IAAA,MAAM,WAAA,GAAc,MAAA,GAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,GAAK,EAAA;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAA8B,CAAA,SAAA,EAAY,WAAW,CAAA,CAAE,CAAA;AAAA,EAC1E;AAAA,EAEA,kBAAA,GAA8D;AAC5D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAoC,mBAAA,EAAqB,MAAM,CAAA;AAAA,EAClF;AAAA,EAEA,SAAS,IAAA,EAA0E;AACjF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAoC,WAAA,EAAa,IAAI,CAAA;AAAA,EACxE;AAAA,EAEA,eAAe,UAAA,EAAmE;AAChF,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAA0C,CAAA,gBAAA,CAAA,EAAoB,EAAC,YAAW,CAAA;AAAA,EAC7F;AAAA,EAEA,yBAAyB,IAAA,EAA4C;AACnE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAS,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAE,CAAA;AAAA,EAC1D;AAAA,EAEA,kBAAkB,QAAA,EAAuD;AACvE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAgC,CAAA,8BAAA,EAAiC,QAAQ,CAAA,CAAE,CAAA;AAAA,EAC9F;AACF,CAAA;;;AC5BO,IAAM,eAAN,MAAmB;AAAA,EAaxB,YAAoB,IAAA,EAA2B;AAA3B,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAZpB,IAAA,IAAA,CAAQ,EAAA,GAAuB,IAAA;AAC/B,IAAA,IAAA,CAAQ,MAAA,GAAuB,MAAA;AAE/B,IAAA,IAAA,CAAQ,SAAA,GAAmD,IAAA;AAC3D,IAAA,IAAA,CAAQ,cAAA,GAAuD,IAAA;AAE/D,IAAA,IAAA,CAAQ,gBAAA,GAAmB,CAAA;AAC3B,IAAA,IAAA,CAAQ,WAAA,GAAc,KAAA;AACtB,IAAA,IAAA,CAAQ,mBAAA,GAAsB,KAAA;AAE9B,IAAA,IAAA,CAAQ,QAAA,uBAAe,GAAA,EAA6B;AAAA,EAEJ;AAAA;AAAA,EAGhD,SAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA,EAGA,SAAA,GAA8B;AAC5B,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA;AAAA,EAGA,OAAA,GAAgB;AACd,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,IAAA,CAAK,EAAA,CAAG,UAAA,KAAe,SAAA,CAAU,IAAA,IAAQ,IAAA,CAAK,EAAA,CAAG,UAAA,KAAe,SAAA,CAAU,UAAA,CAAA,EAAa;AACrG,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AACnB,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,gBAAA,GAAmB,CAAA,GAAI,iBAAiB,YAAY,CAAA;AAExE,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,SAAA,CAAU,IAAA,CAAK,KAAK,GAAG,CAAA;AAErC,IAAA,IAAA,CAAK,EAAA,CAAG,SAAS,MAAM;AACrB,MAAA,IAAA,CAAK,gBAAA,GAAmB,CAAA;AACxB,MAAA,IAAA,CAAK,UAAU,WAAW,CAAA;AAG1B,MAAA,IAAA,CAAK,OAAA,CAAQ;AAAA,QACX,IAAA,EAAM,YAAA;AAAA,QACN,SAAS,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,cAAc,SAAA;AAAU,OACpD,CAAA;AAGD,MAAA,IAAA,CAAK,SAAA,EAAU;AAGf,MAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,IACzB,CAAA;AAEA,IAAA,IAAA,CAAK,EAAA,CAAG,SAAA,GAAY,CAAC,KAAA,KAAU;AAC7B,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,MAChC,CAAA,CAAA,MAAQ;AAEN,QAAA,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAA,EAAa,EAAE,MAAM,GAAA,EAAK,OAAA,EAAS,KAAA,CAAM,IAAA,EAAM,CAAA;AACpE,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,IAAW,MAAA;AACjD,MAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AACnC,MAAA,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,IAAA,EAAM,MAAM,CAAA;AAAA,IAC7B,CAAA;AAEA,IAAA,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM;AAEtB,MAAA,IAAA,CAAK,KAAK,OAAA,EAAS,IAAA,EAAM,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA,IAC5C,CAAA;AAEA,IAAA,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM;AACtB,MAAA,IAAA,CAAK,QAAA,EAAS;AACd,MAAA,IAAA,CAAK,UAAU,cAAc,CAAA;AAE7B,MAAA,IAAI,CAAC,IAAA,CAAK,WAAA,KAAgB,IAAA,CAAK,IAAA,CAAK,iBAAiB,IAAA,CAAA,EAAO;AAC1D,QAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,MACzB;AAAA,IACF,CAAA;AAAA,EACF;AAAA;AAAA,EAGA,UAAA,CAAW,IAAA,GAAO,GAAA,EAAM,MAAA,GAAS,mBAAA,EAA2B;AAC1D,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,IAAA,CAAK,cAAA,EAAe;AAEpB,IAAA,IAAI,KAAK,EAAA,EAAI;AACX,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,MAAM,CAAA;AAAA,MAC5B,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,IAAA,IAAA,CAAK,UAAU,cAAc,CAAA;AAAA,EAC/B;AAAA;AAAA,EAGA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,mBAAA,GAAsB,KAAA;AAC3B,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA;AAAA,EAGA,QAAA,GAAiB;AACf,IAAA,IAAA,CAAK,mBAAA,GAAsB,KAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,EAAA,CAAY,MAAc,OAAA,EAA4C;AACpE,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,IAAI,IAAI,CAAA,wBAAS,GAAA,EAAI;AAC/C,IAAA,GAAA,CAAI,IAAI,OAAqB,CAAA;AAC7B,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAG3B,IAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AAAA,EACrC;AAAA,EAEA,GAAA,CAAa,MAAc,OAAA,EAAsC;AAC/D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAClC,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,OAAO,OAAqB,CAAA;AAChC,IAAA,IAAI,IAAI,IAAA,KAAS,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,EAC/C;AAAA;AAAA,EAGA,IAAA,CAAK,MAAc,OAAA,EAAqB;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,EAChC;AAAA;AAAA,EAIQ,IAAA,CAAK,IAAA,EAAc,IAAA,EAAW,GAAA,EAA0B;AAC9D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAClC,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,IAAI;AACF,QAAA,EAAA,CAAG,MAAM,GAAG,CAAA;AAAA,MACd,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,QAAQ,GAAA,EAA0B;AACxC,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,KAAK,EAAA,CAAG,UAAA,KAAe,UAAU,IAAA,EAAM;AACvD,IAAA,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,EAClC;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,IAAI,KAAK,mBAAA,EAAqB;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,KAAK,EAAA,CAAG,UAAA,KAAe,UAAU,IAAA,EAAM;AAEvD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,OAAA,IAAU,IAAK,IAAA;AACtC,IAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AAEf,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,cAAA,IAAiB,IAAK,EAAA;AACpD,IAAA,IAAI,CAAC,WAAA,EAAa;AAGlB,IAAA,IAAA,CAAK,OAAA,CAAQ;AAAA,MACX,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,KAAK,IAAA,IAAQ,SAAA;AAAA,QACnB,UAAU,IAAA,CAAK,EAAA;AAAA,QACf;AAAA;AACF,KACD,CAAA;AAED,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA;AAAA,EAC7B;AAAA,EAEQ,SAAA,GAAkB;AACxB,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,cAAA,IAAkB,GAAA;AAE1C,IAAA,IAAA,CAAK,SAAA,GAAY,YAAY,MAAM;AACjC,MAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,KAAK,EAAA,CAAG,UAAA,KAAe,UAAU,IAAA,EAAM;AACvD,MAAA,IAAA,CAAK,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,EAAE,IAAA,EAAM,CAAA,EAAE,EAAG,CAAA;AAAA,IACrD,GAAG,KAAK,CAAA;AAAA,EACV;AAAA,EAEQ,QAAA,GAAiB;AACvB,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,aAAA,CAAc,IAAA,CAAK,SAAS,CAAA;AAChD,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,EACnB;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,cAAA,EAAe;AAEpB,IAAA,IAAA,CAAK,gBAAA,IAAoB,CAAA;AACzB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAA,GAAO,CAAA,KAAM,IAAA,CAAK,gBAAA,GAAmB,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,mBAAA,IAAuB,GAAK,CAAA;AACrG,IAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,GAAG,CAAA;AAE7C,IAAA,IAAA,CAAK,cAAA,GAAiB,WAAW,MAAM;AACrC,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf,CAAA,EAAG,OAAO,MAAM,CAAA;AAAA,EAClB;AAAA,EAEQ,cAAA,GAAuB;AAC7B,IAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,YAAA,CAAa,IAAA,CAAK,cAAc,CAAA;AACzD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,EACxB;AAAA,EAEQ,UAAU,CAAA,EAAuB;AACvC,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,IAAA,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG,EAAE,MAAM,QAAA,EAAU,OAAA,EAAS,GAAG,CAAA;AAAA,EACvD;AACF,CAAA;;;AC5LO,IAAM,UAAN,MAAc;AAAA,EAoBnB,YAAY,GAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW;AAAA,MACzB,OAAA,EAAS,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,MACvC,MAAM,EAAE,QAAA,EAAU,MAAM,IAAA,CAAK,IAAA,CAAK,UAAS,EAAE;AAAA;AAAA,MAC7C,SAAA,EAAW,IAAI,SAAA,IAAa;AAAA,KAC7B,CAAA;AACD,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,YAAA,CAAa;AAAA,MACzB,GAAA,EAAK,IAAI,SAAA,IAAa,EAAA;AAAA,MACtB,UAAA,EAAY,SAAA;AAAA,MACZ,cAAA,EAAgB,GAAA,CAAI,cAAA,KAAmB,MAAM,QAAQ,cAAA,EAAe,CAAA;AAAA,MACpE,SAAS,MAAM,IAAA,CAAK,KAAK,OAAA,EAAQ,GAAI,EAAE,EAAA,EAAI,IAAA,CAAK,KAAK,OAAA,EAAQ,CAAG,IAAI,IAAA,EAAM,IAAA,CAAK,KAAK,OAAA,EAAQ,CAAG,MAAK,GAAI;AAAA,KACzG,CAAA;AAED,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACjC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACnC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAAA,EAC3C;AACF;AAEO,IAAM,aAAA,GAAgB,CAAC,GAAA,KAAmB,IAAI,QAAQ,GAAG;;;ACZzD,IAAM,cAAA,GAAiB","file":"index.cjs","sourcesContent":["// src/errors.ts\r\n\r\n/** Common shape we expect from the API when an error happens */\r\nexport type ErrorPayload = {\r\n error?: string; // \"Invalid credentials\"\r\n message?: string; // Human-readable details\r\n code?: string | number; // Optional machine code\r\n details?: unknown; // Optional extra data (validation errors, etc.)\r\n [k: string]: unknown;\r\n};\r\n\r\nexport class ApiError extends Error {\r\n /** HTTP status (e.g., 400/401/429/500) or 0 if network failure */\r\n readonly status: number;\r\n /** Requested method+url to aid debugging */\r\n readonly url: string;\r\n readonly method: string;\r\n /** Raw payload (JSON if available; else text) */\r\n readonly payload?: ErrorPayload | string | null | undefined;\r\n /** Useful server-provided correlator (if any) */\r\n readonly requestId?: string | null;\r\n\r\n constructor(params: {\r\n status: number;\r\n url: string;\r\n method: string;\r\n message: string;\r\n payload?: ErrorPayload | string | null;\r\n requestId?: string | null;\r\n }) {\r\n super(params.message);\r\n this.name = 'ApiError';\r\n this.status = params.status;\r\n this.url = params.url;\r\n this.method = params.method;\r\n this.payload = params.payload;\r\n this.requestId = params.requestId ?? null;\r\n }\r\n}\r\n\r\n/** TS type guard */\r\nexport function isApiError(err: unknown): err is ApiError {\r\n return !!err && typeof err === 'object' && (err as any).name === 'ApiError';\r\n}\r\n","// src/http/client.ts\r\nimport { ApiError, type ErrorPayload } from '../errors';\r\n\r\nexport type AuthPolicy = 'required' | 'optional' | 'none';\r\n\r\nexport interface ClientOptions {\r\n baseUrl: string;\r\n auth?: { getToken: () => string | null };\r\n defaultHeaders?: Record<string, string>;\r\n fetchFn?: typeof fetch;\r\n timeoutMs?: number;\r\n}\r\n\r\nexport class HttpClient {\r\n constructor(private opts: ClientOptions) {}\r\n\r\n setAuthProvider(auth?: { getToken: () => string | null }) {\r\n if (auth) {\r\n this.opts.auth = auth;\r\n }\r\n }\r\n\r\n async request<T>(\r\n path: string,\r\n init: RequestInit = {},\r\n authPolicy: AuthPolicy = 'optional'\r\n ): Promise<T> {\r\n const url = joinUrl(this.opts.baseUrl, path);\r\n const method = (init.method || 'GET').toUpperCase();\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.opts.timeoutMs ?? 15000);\r\n\r\n try {\r\n const headers = new Headers(this.opts.defaultHeaders || {});\r\n // attach JWT if needed\r\n if (authPolicy !== 'none') {\r\n const token = this.opts.auth?.getToken?.() ?? null;\r\n if (token) headers.set('Authorization', `JWT ${token}`);\r\n if (authPolicy === 'required' && !token) {\r\n throw new ApiError({\r\n status: 401,\r\n url,\r\n method,\r\n message: 'Authentication required',\r\n payload: { code: 'AUTH_REQUIRED' },\r\n });\r\n }\r\n }\r\n if (init.body && !headers.has('Content-Type')) headers.set('Content-Type', 'application/json');\r\n\r\n // Merge headers last to allow per-request overrides\r\n const res = await (this.opts.fetchFn ?? fetch)(url, {\r\n ...init,\r\n headers: { ...Object.fromEntries(headers.entries()), ...(init.headers || {}) },\r\n signal: controller.signal,\r\n });\r\n\r\n const reqId = res.headers.get('x-request-id') || res.headers.get('x-correlation-id') || null;\r\n const contentType = res.headers.get('content-type') || '';\r\n const isJson = contentType.includes('application/json');\r\n\r\n if (!res.ok) {\r\n const payload = await readBody(res, isJson);\r\n const message =\r\n (isJson && typeof payload === 'object' && payload && ('message' in payload || 'error' in payload))\r\n ? String((payload as ErrorPayload).message ?? (payload as ErrorPayload).error)\r\n : res.statusText || `HTTP ${res.status}`;\r\n\r\n throw new ApiError({\r\n status: res.status,\r\n url,\r\n method,\r\n message,\r\n payload: (isJson ? (payload as ErrorPayload) : payload) ?? null,\r\n requestId: reqId,\r\n });\r\n }\r\n\r\n // success\r\n if (isJson) return (await res.json()) as T;\r\n // no body / text fallback\r\n const text = await res.text();\r\n return (text ? (text as unknown as T) : (null as unknown as T));\r\n } catch (err: any) {\r\n if (err?.name === 'AbortError') {\r\n throw new ApiError({\r\n status: 408,\r\n url,\r\n method,\r\n message: 'Request timeout',\r\n payload: { code: 'TIMEOUT' },\r\n });\r\n }\r\n if (err instanceof ApiError) throw err;\r\n\r\n // network error / CORS / DNS, etc.\r\n throw new ApiError({\r\n status: 0,\r\n url,\r\n method,\r\n message: err?.message || 'Network error',\r\n payload: { code: 'NETWORK_ERROR' },\r\n });\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n\r\n get<T>(path: string, authPolicy?: AuthPolicy) {\r\n return this.request<T>(path, { method: 'GET' }, authPolicy);\r\n }\r\n post<T>(path: string, body?: unknown, authPolicy?: AuthPolicy) {\r\n return this.request<T>(\r\n path,\r\n { method: 'POST', body: body !== undefined ? JSON.stringify(body) : null },\r\n authPolicy\r\n );\r\n }\r\n patch<T>(path: string, body?: unknown, authPolicy?: AuthPolicy) {\r\n return this.request<T>(\r\n path,\r\n { method: 'PATCH', body: body !== undefined ? JSON.stringify(body) : null },\r\n authPolicy\r\n );\r\n }\r\n delete<T>(path: string, authPolicy?: AuthPolicy) {\r\n return this.request<T>(path, { method: 'DELETE' }, authPolicy);\r\n }\r\n}\r\n\r\nfunction joinUrl(base: string, path: string) {\r\n return `${base.replace(/\\/+$/, '')}${path.startsWith('/') ? '' : '/'}${path}`;\r\n}\r\n\r\nasync function readBody(res: Response, isJson: boolean): Promise<ErrorPayload | string | null> {\r\n try {\r\n return isJson ? ((await res.json()) as ErrorPayload) : await res.text();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","import type {User} from \"./types/auth\";\r\n\r\nexport class LocalStorage {\r\n protected tokenKey = 'gs.token';\r\n protected userDataKey = 'gs.userData';\r\n protected avatarKey = 'gs.avatar';\r\n protected socketTokenKey = 'gs.socketToken';\r\n protected pinKey = 'gs.pin';\r\n protected pinTokenKey = 'gs.pinToken';\r\n protected geoLocalStorageKey = 'gs.visitorLocation';\r\n\r\n private isLocalStorageAvailable(): boolean {\r\n return typeof localStorage !== 'undefined';\r\n }\r\n\r\n setToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.tokenKey, token);\r\n }\r\n }\r\n\r\n getToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.tokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setUser(data: User) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.userDataKey, JSON.stringify(data));\r\n }\r\n }\r\n\r\n getUser(): User | null {\r\n if (this.isLocalStorageAvailable()) {\r\n const data = localStorage.getItem(this.userDataKey);\r\n if (data) {\r\n try {\r\n return JSON.parse(data) as User;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n setAvatar(avatarUrl: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.avatarKey, avatarUrl);\r\n }\r\n }\r\n\r\n getAvatar(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.avatarKey);\r\n }\r\n return null;\r\n }\r\n\r\n setSocketToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.socketTokenKey, token);\r\n }\r\n }\r\n\r\n getSocketToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.socketTokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setPin(pin: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.pinKey, pin);\r\n }\r\n }\r\n\r\n getPin(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.pinKey);\r\n }\r\n return null;\r\n }\r\n\r\n setPinToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.pinTokenKey, token);\r\n }\r\n }\r\n\r\n getPinToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.pinTokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setGeolocation(data: any) {\r\n if (this.isLocalStorageAvailable()) {\r\n data.timestamp = Date.now();\r\n localStorage.setItem(this.geoLocalStorageKey, JSON.stringify(data));\r\n }\r\n }\r\n\r\n getGeolocation(): any | null {\r\n if (this.isLocalStorageAvailable()) {\r\n const data = localStorage.getItem(this.geoLocalStorageKey);\r\n if (data) {\r\n try {\r\n const parsedData = JSON.parse(data);\r\n if (parsedData.timestamp) {\r\n const now = Date.now();\r\n const age = now - parsedData.timestamp;\r\n const cacheTime = 10 * 60 * 1000; // 10 minutes\r\n if (age > cacheTime) {\r\n return null;\r\n }\r\n }\r\n return parsedData;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n clear() {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.removeItem(this.tokenKey);\r\n localStorage.removeItem(this.userDataKey);\r\n localStorage.removeItem(this.avatarKey);\r\n localStorage.removeItem(this.socketTokenKey);\r\n localStorage.removeItem(this.pinKey);\r\n localStorage.removeItem(this.pinTokenKey);\r\n localStorage.removeItem(this.geoLocalStorageKey);\r\n }\r\n }\r\n}\r\n\r\nexport const storage = new LocalStorage();\r\n","import { storage } from '../localStorage';\r\nimport type { HttpClient } from '../http/client';\r\nimport type { FreeIpApiGeo, FailObj } from '../types/geo';\r\nexport class GeolocationAPI {\r\n constructor(private http: HttpClient) {}\r\n private failObj = {\r\n ip: \"0.0.0.0\",\r\n countryCode: \"undefined\",\r\n status: \"fail\",\r\n message: \"invalid query\",\r\n query: \"undefined\"\r\n };\r\n async getGeolocationFromAPI(): Promise<FreeIpApiGeo | undefined> {\r\n try {\r\n const geo = await this.http.get<FreeIpApiGeo>('/geo/location', 'none');\r\n if (geo.ipAddress && geo.ipVersion) {\r\n delete geo.ipVersion;\r\n delete geo.ipAddress;\r\n storage.setGeolocation(geo);\r\n return geo;\r\n }\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n async getGeolocation(): Promise<FreeIpApiGeo | FailObj> {\r\n const geoData = storage.getGeolocation();\r\n if (geoData) {\r\n try {\r\n const geo = JSON.parse(geoData);\r\n if (geo && geo.ipVersion) {\r\n delete geo.ipVersion;\r\n delete geo.ipAddress;\r\n return geo;\r\n } else {\r\n return this.failObj;\r\n }\r\n } catch {\r\n return this.failObj;\r\n }\r\n } else {\r\n return await this.getGeolocationFromAPI() || this.failObj;\r\n }\r\n }\r\n\r\n async getCountryCode(): Promise<string | false> {\r\n const geo = await this.getGeolocation();\r\n if (geo && geo.countryCode && geo.countryCode === 'undefined') {\r\n return geo.countryCode;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","// src/auth/jwtAuth.ts\r\nimport type {\r\n AuthResponse,\r\n pinCodeResponse,\r\n pinCodeCheckResponse,\r\n CreatePlayerInput,\r\n CreatePlayerV2Input,\r\n CreatePlayerV2Step2Input,\r\n GoogleLoginRequest,\r\n SignupResponse, SignupV2ValidateResponse,\r\n RegisterResponse\r\n} from '../types/auth';\r\nimport type {AuthPolicy, HttpClient} from '../http/client';\r\nimport {GeolocationAPI} from \"../apis/geo\";\r\nimport {storage} from '../localStorage';\r\n\r\nexport class JwtAuth {\r\n private token: string | null = null;\r\n private user: AuthResponse['user'] | null = null;\r\n\r\n constructor(\r\n private client: HttpClient,\r\n ) {\r\n this.token = storage.getToken();\r\n this.user = storage.getUser();\r\n }\r\n\r\n setToken(token: string | null) {\r\n if (token) {\r\n storage.setToken(token);\r\n this.token = token;\r\n } else {\r\n storage.clear();\r\n }\r\n }\r\n setUser(user: AuthResponse['user'], token: string) {\r\n storage.setUser(user);\r\n storage.setToken(token);\r\n this.user = user;\r\n this.token = token;\r\n }\r\n\r\n async login(username: string, password: string, recaptchaToken: string): Promise<AuthResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n const payload = { username, password, recaptchaToken };\r\n const res = await this.client.post<AuthResponse>('/auth/login', payload, authPolicy);\r\n this.setUser(res.user, res.token);\r\n storage.setSocketToken(res.socketToken);\r\n return res;\r\n }\r\n\r\n async GoogleLogin(data: GoogleLoginRequest): Promise<AuthResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const res = await this.client.post<AuthResponse>('/auth/google/signin', data, authPolicy);\r\n\r\n this.setUser(res.user, res.token);\r\n return res;\r\n }\r\n\r\n async forgetPassword(email: string): Promise<void> {\r\n const authPolicy: AuthPolicy = 'none';\r\n await this.client.post<void>('/auth/forgot-password', { email }, authPolicy);\r\n }\r\n\r\n async register(data: CreatePlayerInput, param?: string | undefined): Promise<RegisterResponse | SignupResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n let apiRouter = '/auth/signup';\r\n if (param) {\r\n apiRouter += `?ref=${param}`\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const registerData = await this.client.post<SignupResponse>(apiRouter, data, authPolicy);\r\n if (registerData.player) {\r\n const loginData = await this.login(data.username, data.password, data.recaptchaToken);\r\n return {\r\n ...registerData,\r\n ...loginData,\r\n };\r\n } else {\r\n return {\r\n ...registerData,\r\n }\r\n }\r\n }\r\n\r\n async registerV2(data: CreatePlayerV2Input, param?: string | undefined): Promise<RegisterResponse | SignupResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n let apiRouter = '/auth/signupv2';\r\n if (param) {\r\n apiRouter += `?ref=${param}`\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const registerData = await this.client.post<SignupResponse>(apiRouter, data, authPolicy);\r\n if (registerData.player) {\r\n const loginData = await this.login(data.username, data.password, data.recaptchaToken);\r\n return {\r\n ...registerData,\r\n ...loginData,\r\n };\r\n } else {\r\n return {\r\n ...registerData\r\n }\r\n }\r\n }\r\n\r\n async registerV2Validate(data: CreatePlayerV2Step2Input ): Promise<SignupV2ValidateResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<SignupV2ValidateResponse>('/auth/signupv2/validate-username-email', data, authPolicy);\r\n }\r\n\r\n clear() {\r\n this.setToken(null);\r\n this.user = null;\r\n }\r\n\r\n async logout(): Promise<void> {\r\n const authPolicy: AuthPolicy = 'required';\r\n await this.client.post<void>('/auth/logout', {}, authPolicy);\r\n this.clear();\r\n }\r\n async pinCode(pin: string): Promise<pinCodeResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<pinCodeResponse>('/auth/website', { pin }, authPolicy);\r\n }\r\n async pinCheck(token: string): Promise<pinCodeCheckResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<pinCodeCheckResponse>('/auth/website/check', { token }, authPolicy);\r\n }\r\n\r\n getToken(): string | null {\r\n if (!this.token) {\r\n this.token = storage.getToken();\r\n }\r\n return this.token;\r\n }\r\n\r\n getUser(): AuthResponse['user'] | null {\r\n if (!this.user) {\r\n this.user = storage.getUser();\r\n }\r\n return this.user;\r\n }\r\n isAuthenticated(): boolean {\r\n const Token = this.token || this.getToken();\r\n return !!Token;\r\n }\r\n}\r\n","// src/apis/affiliate.ts\r\nimport {HttpClient} from '../http/client';\r\nimport * as AffiliateTypes from '../types/affiliate';\r\nimport {GetPrizes, GetPrizesRequest, GetPrizesResult, Rewards, Summery} from \"../types/affiliate\";\r\n\r\nexport class AffiliateAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n async generateReferralCode(description: string): Promise<AffiliateTypes.GenerateReferralCode> {\r\n return await this.http.post<AffiliateTypes.GenerateReferralCode>(`/referral/generate`, {description});\r\n }\r\n\r\n async getReferralCode(): Promise<AffiliateTypes.GetReferralCode> {\r\n return await this.http.get<AffiliateTypes.GetReferralCode>(`/referral/get`);\r\n }\r\n\r\n async getReferralCount(): Promise<number> {\r\n return await this.http.get<number>(`/referral/max-codes`);\r\n }\r\n\r\n async getReferralStatus(): Promise<AffiliateTypes.ReferralStatus> {\r\n return await this.http.get<AffiliateTypes.ReferralStatus>(`/referral/status`);\r\n }\r\n\r\n async getReferralFriends(page: number, limit: number): Promise<AffiliateTypes.ReferralFriends> {\r\n return await this.http.get<AffiliateTypes.ReferralFriends>(`/referral/friends?page=${page}&limit=${limit}`);\r\n }\r\n\r\n async getBannerImage(lang: string, key: string): Promise<AffiliateTypes.BannerImage> {\r\n return await this.http.get<AffiliateTypes.BannerImage>(`/website-settings?language=${lang}&key=${key}`);\r\n }\r\n\r\n async getRewards(): Promise<AffiliateTypes.Rewards> {\r\n return await this.http.get<AffiliateTypes.Rewards>(`/referral/rewards`);\r\n }\r\n\r\n async getAvailablePrizes(): Promise<AffiliateTypes.AvailablePrizes> {\r\n return await this.http.get<AffiliateTypes.AvailablePrizes>(`/referral/available-prizes`);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async getPrizes(params: AffiliateTypes.GetPrizesRequest): Promise<AffiliateTypes.GetPrizes> {\r\n const queryParams = new URLSearchParams();\r\n for (const key in params) {\r\n if (params[key as keyof GetPrizesRequest] !== undefined) {\r\n queryParams.append(key, String(params[key as keyof GetPrizesRequest]));\r\n }\r\n }\r\n const query = queryParams.toString();\r\n return await this.http.get<AffiliateTypes.GetPrizes>(`/referral/prizes?${query}`);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async convert(data: AffiliateTypes.ConvertRequest): Promise<{message: string}> {\r\n return await this.http.post<{message: string}>(`/referral/convert`, data);\r\n }\r\n\r\n async getSummary(): Promise<AffiliateTypes.Summery> {\r\n return await this.http.get(`/referral/summary`);\r\n }\r\n}\r\n","// src/apis/content.ts (public: no auth)\r\nimport { HttpClient } from '../http/client';\r\nimport * as contentTypes from '../types/content';\r\n\r\nexport class ContentAPI {\r\n constructor(private http: HttpClient) {}\r\n list() { return this.http.get<contentTypes.ContentPage[]>('/content-pages', 'none'); }\r\n get(slug: string) { return this.http.get<contentTypes.ContentPage>(`/content-pages/${slug}`, 'none'); }\r\n getAnnouncements() { return this.http.get<contentTypes.AnnouncementsResponse>('/announcements', 'none'); }\r\n}\r\n","// src/apis/deposit.ts\r\nimport {HttpClient} from '../http/client';\r\nimport { ChargeData, PaymentMethodSchema, GetDeposits } from '../types/deposit';\r\nexport class DepositAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n charge(data: ChargeData) {\r\n return this.http.post< string >('/deposit/charge', data, 'required');\r\n }\r\n\r\n getPaymentMethods():Promise<PaymentMethodSchema[]>{\r\n return this.http.get<PaymentMethodSchema[]>('/payment-methods', 'required');\r\n }\r\n\r\n getDeposits(status = 'pending', page = 1, limit = 20): Promise<GetDeposits> {\r\n return this.http.get<GetDeposits>(`/payment/${status}?page=${page}&limit=${limit}`, 'required');\r\n }\r\n}\r\n","import { HttpClient } from '../http/client';\r\nimport {\r\n GameCategoriesResponse,\r\n SearchRequest,\r\n GameSearchResponse, GamesSearchResponse, SetFavoriteGamesResponse,\r\n FavoriteGamesResponse, recentBigWinsResponse, GlobalFavorites, Providers, CategoryProvider,\r\n TopRated, Lobby\r\n} from '../types/game';\r\nimport {GeolocationAPI} from \"./geo\";\r\n\r\nexport interface GameLinkResponse { message: string; gameLink: string; isFavorite?: boolean; }\r\n\r\nexport class GamesAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n /** Public: search games */\r\n search(request: SearchRequest): Promise<GamesSearchResponse> {\r\n return this.http.get<GamesSearchResponse>(`/games/search?${new URLSearchParams(request as any).toString()}`, 'none');\r\n }\r\n\r\n getCategories(): Promise<GameCategoriesResponse> {\r\n return this.http.get<GameCategoriesResponse>('/games/categories', 'none');\r\n }\r\n\r\n /** Requires auth: player link */\r\n getLink(gameId: string) {\r\n return this.http.post<GameLinkResponse>(`/games/getLink`, {gameId}, 'required');\r\n }\r\n\r\n /** Public: demo link */\r\n getDemoLink(gameExternalId: string) {\r\n return this.http.post<GameLinkResponse>('/games/getDemoLink', {gameExternalId}, 'none');\r\n }\r\n\r\n setFavorite(gameId: number, isFavorite: boolean): Promise<SetFavoriteGamesResponse> {\r\n return this.http.post<SetFavoriteGamesResponse>('/games/favorites', {gameId, isFavorite}, 'required');\r\n }\r\n getFavorite(): Promise<FavoriteGamesResponse[]> {\r\n return this.http.get<FavoriteGamesResponse[]>('/games/player-favorites', 'required');\r\n }\r\n getRecentBigWins(category: string): Promise<recentBigWinsResponse[]> {\r\n return this.http.get<recentBigWinsResponse[]>(`/games/recent-big-wins?category=${category}`, 'none');\r\n }\r\n getRecent(page=1, limit=10): Promise<GamesSearchResponse> {\r\n return this.http.get<GamesSearchResponse>(`/games/recent?page=${page}&limit=${limit}`);\r\n }\r\n\r\n getGlobalFavorites(): Promise<GlobalFavorites> {\r\n return this.http.get<GlobalFavorites>('/games/global-favorites', 'none');\r\n }\r\n getTopRated():Promise<{ topRated :TopRated[] }>{\r\n const geo = new GeolocationAPI(this.http);\r\n const countryCode = geo.getCountryCode();\r\n let url = '/games/top-rated';\r\n if (countryCode) {\r\n url += `?region=${countryCode}`;\r\n }\r\n return this.http.get<{ topRated :TopRated[] }>(url, 'none');\r\n }\r\n getProviders(): Promise<Providers> {\r\n return this.http.get<Providers>('/games/providers', 'none');\r\n }\r\n getCategoriesProviders(): Promise<{categoryProviders: CategoryProvider[] }> {\r\n return this.http.get<{categoryProviders: CategoryProvider[] }>('/games/providers/categories', 'none');\r\n }\r\n getLobby(): Promise<Lobby[]> {\r\n const geo = new GeolocationAPI(this.http);\r\n const countryCode = geo.getCountryCode();\r\n let url = '/games/lobby';\r\n if (countryCode) {\r\n url += `?region=${countryCode}`;\r\n }\r\n return this.http.get<Lobby[]>(url, 'none');\r\n }\r\n\r\n}\r\n","// src/apis/lucky.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as LuckyWheelTypes from '../types/luckyWheel';\r\nexport class LuckyWheelAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n getStatistics(): Promise<LuckyWheelTypes.LuckyWheelStatistics> {\r\n return this.http.get<LuckyWheelTypes.LuckyWheelStatistics>('/lucky-wheel/statistics', 'required');\r\n }\r\n getWinners():Promise<LuckyWheelTypes.LuckyWheelWinners[]> {\r\n return this.http.get<LuckyWheelTypes.LuckyWheelWinners[]>('/lucky-wheel/get-winners?offset=1&limit=100', 'none');\r\n }\r\n getPrizes():Promise<LuckyWheelTypes.LuckyWheelPrize[]>{\r\n return this.http.get<LuckyWheelTypes.LuckyWheelPrize[]>('/lucky-wheel/get-prizes');\r\n }\r\n getStatus():Promise<LuckyWheelTypes.LuckyWheelStatus>{\r\n return this.http.get<LuckyWheelTypes.LuckyWheelStatus>('/lucky-wheel/status');\r\n }\r\n play(data: { luckyWheelId: number }):Promise<LuckyWheelTypes.LuckyWheelSpinPlay | LuckyWheelTypes.LuckyWheelSpinPlayNA>{\r\n return this.http.post<LuckyWheelTypes.LuckyWheelSpinPlay | LuckyWheelTypes.LuckyWheelSpinPlayNA>('/lucky-wheel/play', data);\r\n }\r\n collect(data: { collectHash: string }):Promise<LuckyWheelTypes.LuckyWheelCollect>{\r\n return this.http.post<LuckyWheelTypes.LuckyWheelCollect>('/lucky-wheel/collect', data);\r\n }\r\n\r\n}\r\n","// src/apis/media.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as MediaTypes from '../types/media';\r\nexport class MediaAPI {\r\n constructor(private http: HttpClient) {}\r\n upload(file: File): Promise<MediaTypes.uploadResponse> {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n formData.append('upload_preset', 'demo');\r\n return this.http.post<MediaTypes.uploadResponse>('/media/upload', formData, 'none');\r\n }\r\n getFileUrl(filePath: string): Promise<string> {\r\n return this.http.get<string>(`/media/get-file-url?filePath=${filePath}`)\r\n }\r\n\r\n}\r\n","// src/apis/player.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as PlayerTypes from '../types/player';\r\nimport {BalanceHistory, GameHistory} from \"../types/player\";\r\n\r\nexport class PlayerAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n changePassword(data: PlayerTypes.ChangePasswordData): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/player/change-password', data);\r\n }\r\n getBalanceHistory(data: PlayerTypes.GetBalanceHistoryQuery): Promise<PlayerTypes.BalanceHistory[]> {\r\n const queryParams = new URLSearchParams();\r\n if (data.limit !== undefined) queryParams.append('limit', data.limit.toString());\r\n if (data.startDate !== undefined) queryParams.append('startDate', data.startDate);\r\n if (data.endDate !== undefined) queryParams.append('endDate', data.endDate);\r\n const queryString = queryParams.toString() ? `?${queryParams.toString()}` : '';\r\n return this.http.get<PlayerTypes.BalanceHistory[]>(`/player/balance-history${queryString}`);\r\n }\r\n getGameHistory(data: PlayerTypes.GetBalanceHistoryQuery): Promise<GameHistory[]> {\r\n const queryParams = new URLSearchParams();\r\n if (data.limit !== undefined) queryParams.append('limit', data.limit.toString());\r\n if (data.startDate !== undefined) queryParams.append('startDate', data.startDate);\r\n if (data.endDate !== undefined) queryParams.append('endDate', data.endDate);\r\n const queryString = queryParams.toString() ? `?${queryParams.toString()}` : '';\r\n return this.http.get<GameHistory[]>(`/player/game-transaction${queryString}`);\r\n }\r\n verifyEmail(data: PlayerTypes.EmailVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/email/send', data);\r\n }\r\n verifyEmailCode(data: { verificationCode: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/email/confirm', data);\r\n }\r\n verifyPhone(data: PlayerTypes.PhoneVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/send', data);\r\n }\r\n verifyPhoneCode(data: { verificationCode: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/confirm', data);\r\n }\r\n verifyPhoneSignup(data: PlayerTypes.PhoneVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/send', data);\r\n }\r\n verifyPhoneCodeSignup(data: { verificationCode: string, verificationToken: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/confirm', data);\r\n }\r\n getVerificationStatus(): Promise<PlayerTypes.VerificationStatus[]> {\r\n return this.http.get<PlayerTypes.VerificationStatus[]>('/player/verification-status');\r\n }\r\n getAvatars(): Promise<PlayerTypes.Avatar[]> {\r\n return this.http.get<PlayerTypes.Avatar[]>('/avatars/get');\r\n }\r\n changeAvatar(data: {avatarId: number }): Promise<{ message: string, avatar: PlayerTypes.Avatar }> {\r\n return this.http.post<{ message: string, avatar: PlayerTypes.Avatar }>('/avatars/set', data);\r\n }\r\n getPlayerKycDocuments(): Promise<PlayerTypes.KycDocument[]> {\r\n return this.http.get<PlayerTypes.KycDocument[]>('/player/kyc-documents');\r\n }\r\n createPlayerKycDocument(data: FormData): Promise<PlayerTypes.KycDocument> {\r\n return this.http.post<PlayerTypes.KycDocument>('/player/kyc-documents', data);\r\n }\r\n createPlayerTags(data: {key: string, value: string}[]): Promise<{ message: string }> {\r\n const requestData = {\r\n tags: data\r\n };\r\n return this.http.post<{ message: string}>('/player/tags', requestData);\r\n }\r\n updateProfile(data: PlayerTypes.UpdateProfileData): Promise<PlayerTypes.ProfileData> {\r\n return this.http.patch<PlayerTypes.ProfileData>('/player/profile', data);\r\n }\r\n\r\n}\r\n","// src/apis/promotions.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as PromotionsTypes from '../types/promotions';\r\nimport {Promotion} from \"../types/promotions\";\r\nexport class PromotionsAPI {\r\n constructor(private http: HttpClient) {}\r\n getActive(): Promise<PromotionsTypes.Promotion[]> {\r\n return this.http.get<PromotionsTypes.Promotion[]>('/promotions/active');\r\n }\r\n getPublic(): Promise<PromotionsTypes.Promotion[]> {\r\n return this.http.get<PromotionsTypes.Promotion[]>('/promotions/public', 'none');\r\n }\r\n getPromotion(id:string): Promise<PromotionsTypes.Promotion> {\r\n return this.http.get<PromotionsTypes.Promotion>(`/promotions/${id}`, 'none');\r\n }\r\n getProgress(): Promise<PromotionsTypes.Progress> {\r\n return this.http.get<PromotionsTypes.Progress>('/promotions/progress');\r\n }\r\n activateBonus(id:string): Promise<{message:string; error?:string}> {\r\n return this.http.post<{message:string; error?:string}>(`/bonus/activate/${id}`, { });\r\n }\r\n cancelBonus(id:string): Promise<{message:string; error?:string}> {\r\n return this.http.delete<{message:string; error?:string}>(`/bonus/cancel/${id}`);\r\n }\r\n}\r\n","// src/apis/raffle.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as RaffleTypes from '../types/raffle';\r\n\r\nexport class RaffleAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getTickets(): Promise<RaffleTypes.GetRaffleTicketsResponse[]> {\r\n return this.http.get<RaffleTypes.GetRaffleTicketsResponse[]>('/raffle/tickets');\r\n }\r\n\r\n getPrizes(): Promise<RaffleTypes.RafflePrize[]> {\r\n return this.http.get<RaffleTypes.RafflePrize[]>('/raffle/prizes');\r\n }\r\n\r\n getHistory(): Promise<RaffleTypes.RafflePrizesHistoryResponse> {\r\n return this.http.get<RaffleTypes.RafflePrizesHistoryResponse>('/raffle/history');\r\n }\r\n\r\n getActiveRaffle(): Promise<RaffleTypes.ActiveRaffle[] | null> {\r\n return this.http.get<RaffleTypes.ActiveRaffle[] | null>('/raffle/current');\r\n }\r\n\r\n purchaseTickets(data: { raffleId: number; ticketAmount: number }): Promise<RaffleTypes.PurchaseTicket> {\r\n return this.http.post<RaffleTypes.PurchaseTicket>('/raffle/purchase', data);\r\n }\r\n}\r\n","// src/apis/region.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as RegionTypes from '../types/region';\r\n\r\nexport class RegionAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getDepositRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions/deposit');\r\n }\r\n\r\n getWithdrawRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions/withdraw');\r\n }\r\n\r\n getRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions', 'none');\r\n }\r\n\r\n getBlockedCountries(): Promise<RegionTypes.BlockedCountry[]> {\r\n return this.http.get<RegionTypes.BlockedCountry[]>('/regions/blocked-countries', 'none');\r\n }\r\n}\r\n","// src/apis/settings.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as SettingsTypes from '../types/settings';\r\nimport {CurrencyRates} from \"../types/settings\";\r\n\r\nexport class SettingsAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getSettings(): Promise<SettingsTypes.Settings> {\r\n return this.http.get<SettingsTypes.Settings>('/api/v1/settings', 'none');\r\n }\r\n getBanner(lang: string): Promise<SettingsTypes.Banner> {\r\n return this.http.get<SettingsTypes.Banner>(`/banners/get/${lang}`, 'none');\r\n }\r\n getContent(): Promise<SettingsTypes.Content[]> {\r\n return this.http.get<SettingsTypes.Content[]>('/content-pages', 'none');\r\n }\r\n getContentItem(type:string, lang:string): Promise<SettingsTypes.Content> {\r\n return this.http.get<SettingsTypes.Content>(`/content-pages/${type}/${lang}`, 'none');\r\n }\r\n getAvatar(): Promise<SettingsTypes.Avatar[]> {\r\n return this.http.get<SettingsTypes.Avatar[]>('/avatars/get', 'none');\r\n }\r\n getPreferences(): Promise<SettingsTypes.Preferences> {\r\n return this.http.get<SettingsTypes.Preferences>('/player/preferences');\r\n }\r\n updatePreferences(data: Partial<SettingsTypes.Preferences>): Promise<SettingsTypes.Preferences> {\r\n return this.http.patch<SettingsTypes.Preferences>('/player/preferences', data);\r\n }\r\n getCurrencies(): Promise<SettingsTypes.Currency[]> {\r\n return this.http.get<SettingsTypes.Currency[]>('/currencies/get', 'none');\r\n }\r\n getCurrenciesRates(): Promise<SettingsTypes.CurrencyRates> {\r\n return this.http.get<SettingsTypes.CurrencyRates>('/currencies/rates', 'none');\r\n }\r\n getWebSetting(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=footerCasinoItems&key[]=footerSportsItems&key[]=footerSocialMedia&key[]=footerPromoItems&key[]=footerSupportLegalItems&key[]=footerAboutUsItems&key[]=footerAppLinks`, 'none');\r\n }\r\n getWebSettingProviders(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=sectionProviders`, 'none');\r\n }\r\n getWebSettingPin(): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?key[]=isCodeProtected`, 'none');\r\n }\r\n getWebSettingReferralRules(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_rules`, 'none');\r\n }\r\n getWebSettingReferralFaq(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_faq`, 'none');\r\n }\r\n getWebSettingReferralLearnMore(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_learn_more`, 'none');\r\n }\r\n getWebSettingReferralBanners(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_assets`, 'none');\r\n }\r\n getWebSettingSlotsCategories(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=slotsCategories`, 'none');\r\n }\r\n getWebSettingLiveCasinoCategories(lang: string): Promise<SettingsTypes.WebSetting[]>{\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=liveCasinoCategories`, 'none');\r\n }\r\n getWebsiteAllowedPlayerTags(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=allowedPlayerTags`, 'none');\r\n }\r\n getSupportEmail(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=supportEmail`, 'none');\r\n }\r\n}\r\n","// src/apis/sport.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as SportTypes from '../types/sport';\r\n\r\nexport class SportAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n getConfig(): Promise<SportTypes.SportConfig> {\r\n return this.http.get<SportTypes.SportConfig>('/sport/get-sport-config');\r\n }\r\n}\r\n","// src/apis/voucher.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as VoucherTypes from '../types/voucher';\r\n\r\nexport class VoucherAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n redeemVoucher(code: string): Promise<VoucherTypes.RedeemResponse> {\r\n return this.http.post<VoucherTypes.RedeemResponse>('/vouchers/redeem', { code });\r\n }\r\n checkVoucher(code: string): Promise<VoucherTypes.CheckResponse> {\r\n return this.http.get<VoucherTypes.CheckResponse>(`/vouchers/check/${code}`, 'none');\r\n }\r\n}\r\n","// src/apis/withdraw.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as WithdrawTypes from '../types/withdraw';\r\nimport {WithdrawData, WithdrawRequest} from \"../types/withdraw\";\r\n\r\nexport class WithdrawAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getWithdraws(status?: string): Promise<WithdrawTypes.Withdraw[]> {\r\n const statusQuery = status ? `/${status}` : '';\r\n return this.http.get<WithdrawTypes.Withdraw[]>(`/withdraw${statusQuery}`);\r\n }\r\n\r\n getWithdrawMethods(): Promise<WithdrawTypes.WithdrawMethod[]> {\r\n return this.http.get<WithdrawTypes.WithdrawMethod[]>('/withdraw/methods', 'none');\r\n }\r\n\r\n withdraw(data: WithdrawTypes.WithdrawData): Promise<WithdrawTypes.WithdrawRequest> {\r\n return this.http.post<WithdrawTypes.WithdrawRequest>('/withdraw', data);\r\n }\r\n\r\n rejectWithdraw(withdrawId: number): Promise<{ message?: string, error?: string }> {\r\n return this.http.post<{ message: string, error?: string }>(`/withdraw/cancel`, {withdrawId});\r\n }\r\n\r\n getTrinkparaWithdrawInfo(info: WithdrawTypes.infoType): Promise<any> {\r\n return this.http.get<any>(`/trinkpara/info?info=${info}`);\r\n }\r\n\r\n getAnindaBankList(methodId: number): Promise<WithdrawTypes.AnindaBank[]> {\r\n return this.http.get<WithdrawTypes.AnindaBank[]>(`/aninda/banks?paymentMethodId=${methodId}`);\r\n }\r\n}\r\n","// src/ws/socketClient.ts\r\nimport type { SocketClientOptions, SocketMessage, SocketStatus, SocketEventHandler } from '../types/ws';\r\n\r\ntype AnyHandler = SocketEventHandler<any>;\r\n\r\nexport class SocketClient {\r\n private ws: WebSocket | null = null;\r\n private status: SocketStatus = 'idle';\r\n\r\n private pingTimer: ReturnType<typeof setInterval> | null = null;\r\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n private reconnectAttempt = 0;\r\n private manualClose = false;\r\n private hasJoinedAfterLogin = false;\r\n\r\n private handlers = new Map<string, Set<AnyHandler>>();\r\n\r\n constructor(private opts: SocketClientOptions) {}\r\n\r\n /** Current status useful for UI */\r\n getStatus(): SocketStatus {\r\n return this.status;\r\n }\r\n\r\n /** Raw socket access (optional) */\r\n getSocket(): WebSocket | null {\r\n return this.ws;\r\n }\r\n\r\n /** Connect (idempotent) */\r\n connect(): void {\r\n if (this.ws && (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING)) {\r\n return;\r\n }\r\n\r\n this.manualClose = false;\r\n this.setStatus(this.reconnectAttempt > 0 ? 'reconnecting' : 'connecting');\r\n\r\n this.ws = new WebSocket(this.opts.url);\r\n\r\n this.ws.onopen = () => {\r\n this.reconnectAttempt = 0;\r\n this.setStatus('connected');\r\n\r\n // 1) join public room (same as your frontend)\r\n this.sendRaw({\r\n type: 'joinPublic',\r\n payload: { name: this.opts.publicName ?? 'player1' },\r\n });\r\n\r\n // 2) start ping\r\n this.startPing();\r\n\r\n // 3) if already logged-in, join as authenticated too\r\n this.tryJoinAfterLogin();\r\n };\r\n\r\n this.ws.onmessage = (event) => {\r\n let parsed: SocketMessage;\r\n try {\r\n parsed = JSON.parse(event.data) as SocketMessage;\r\n } catch {\r\n // non-JSON payload, ignore but still emit wildcard\r\n this.emit('*', event.data as any, { type: '*', message: event.data });\r\n return;\r\n }\r\n\r\n // emit by type + wildcard\r\n const data = parsed.message ?? parsed.payload ?? parsed;\r\n this.emit(parsed.type, data, parsed);\r\n this.emit('*', data, parsed);\r\n };\r\n\r\n this.ws.onerror = () => {\r\n // usually followed by close; keep minimal here\r\n this.emit('error', null, { type: 'error' });\r\n };\r\n\r\n this.ws.onclose = () => {\r\n this.stopPing();\r\n this.setStatus('disconnected');\r\n\r\n if (!this.manualClose && (this.opts.autoReconnect ?? true)) {\r\n this.scheduleReconnect();\r\n }\r\n };\r\n }\r\n\r\n /** Disconnect gracefully */\r\n disconnect(code = 1000, reason = 'client_disconnect'): void {\r\n this.manualClose = true;\r\n this.stopPing();\r\n this.clearReconnect();\r\n\r\n if (this.ws) {\r\n try {\r\n this.ws.close(code, reason);\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n this.ws = null;\r\n this.setStatus('disconnected');\r\n }\r\n\r\n /** Call after login (or whenever token/user changes) */\r\n onLogin(): void {\r\n this.hasJoinedAfterLogin = false;\r\n this.tryJoinAfterLogin();\r\n }\r\n\r\n /** Reset join flag (call on logout) */\r\n onLogout(): void {\r\n this.hasJoinedAfterLogin = false;\r\n }\r\n\r\n /** Subscribe to message type (e.g. 'happyHourStarted', 'latest-bet'). Use '*' to receive everything. */\r\n on<T = any>(type: string, handler: SocketEventHandler<T>): () => void {\r\n const set = this.handlers.get(type) ?? new Set();\r\n set.add(handler as AnyHandler);\r\n this.handlers.set(type, set);\r\n\r\n // return unsubscribe\r\n return () => this.off(type, handler);\r\n }\r\n\r\n off<T = any>(type: string, handler: SocketEventHandler<T>): void {\r\n const set = this.handlers.get(type);\r\n if (!set) return;\r\n set.delete(handler as AnyHandler);\r\n if (set.size === 0) this.handlers.delete(type);\r\n }\r\n\r\n /** Send a typed message (SDK-side helper) */\r\n send(type: string, payload?: any): void {\r\n this.sendRaw({ type, payload });\r\n }\r\n\r\n // ----------------- internals -----------------\r\n\r\n private emit(type: string, data: any, raw: SocketMessage): void {\r\n const set = this.handlers.get(type);\r\n if (!set) return;\r\n for (const fn of set) {\r\n try {\r\n fn(data, raw);\r\n } catch {\r\n // never let user handlers crash the socket loop\r\n }\r\n }\r\n }\r\n\r\n private sendRaw(msg: SocketMessage): void {\r\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\r\n this.ws.send(JSON.stringify(msg));\r\n }\r\n\r\n private tryJoinAfterLogin(): void {\r\n if (this.hasJoinedAfterLogin) return;\r\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\r\n\r\n const user = this.opts.getUser?.() ?? null;\r\n if (!user?.id) return;\r\n\r\n const socketToken = this.opts.getSocketToken?.() ?? '';\r\n if (!socketToken) return;\r\n\r\n // mirrors your frontend join message\r\n this.sendRaw({\r\n type: 'join',\r\n payload: {\r\n name: user.name || 'player1',\r\n playerId: user.id,\r\n socketToken,\r\n },\r\n });\r\n\r\n this.hasJoinedAfterLogin = true;\r\n }\r\n\r\n private startPing(): void {\r\n this.stopPing();\r\n const every = this.opts.pingIntervalMs ?? 5000;\r\n\r\n this.pingTimer = setInterval(() => {\r\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\r\n this.sendRaw({ type: 'ping', payload: { ping: 1 } });\r\n }, every);\r\n }\r\n\r\n private stopPing(): void {\r\n if (this.pingTimer) clearInterval(this.pingTimer);\r\n this.pingTimer = null;\r\n }\r\n\r\n private scheduleReconnect(): void {\r\n this.clearReconnect();\r\n\r\n this.reconnectAttempt += 1;\r\n const base = Math.min(1000 * 2 ** (this.reconnectAttempt - 1), this.opts.maxReconnectDelayMs ?? 30000);\r\n const jitter = Math.floor(Math.random() * 250);\r\n\r\n this.reconnectTimer = setTimeout(() => {\r\n this.connect();\r\n }, base + jitter);\r\n }\r\n\r\n private clearReconnect(): void {\r\n if (this.reconnectTimer) clearTimeout(this.reconnectTimer);\r\n this.reconnectTimer = null;\r\n }\r\n\r\n private setStatus(s: SocketStatus): void {\r\n this.status = s;\r\n this.emit('status', s, { type: 'status', payload: s });\r\n }\r\n}\r\n","// src/sdk.ts\r\nimport { HttpClient } from './http/client';\r\nimport { JwtAuth } from './auth/jwtAuth';\r\nimport { ApiError, isApiError } from './errors';\r\nimport { AffiliateAPI } from \"./apis/affiliate\";\r\nimport { ContentAPI } from './apis/content';\r\nimport { DepositAPI } from \"./apis/deposit\";\r\nimport { GamesAPI } from './apis/games';\r\nimport { GeolocationAPI } from \"./apis/geo\";\r\nimport { LuckyWheelAPI } from './apis/luckyWheel';\r\nimport { MediaAPI } from \"./apis/media\";\r\nimport { PlayerAPI } from \"./apis/player\";\r\nimport { PromotionsAPI } from './apis/promotions';\r\nimport { RaffleAPI } from \"./apis/raffle\";\r\nimport { RegionAPI } from \"./apis/region\";\r\nimport { SettingsAPI } from \"./apis/settings\";\r\nimport { SportAPI } from \"./apis/sport\";\r\nimport { VoucherAPI } from \"./apis/voucher\";\r\nimport { WithdrawAPI} from \"./apis/withdraw\";\r\nimport { SocketClient } from './ws/socketClient';\r\nimport type { SocketClientOptions } from './types/ws';\r\nimport { storage } from './localStorage';\r\nexport interface SDKConfig {\r\n baseUrl: string;\r\n timeoutMs?: number;\r\n socketUrl?: string;\r\n getSocketToken?: () => string | null;\r\n}\r\n\r\nexport class GameSDK {\r\n readonly http: HttpClient;\r\n readonly auth: JwtAuth;\r\n readonly ws: SocketClient;\r\n readonly affiliate: AffiliateAPI;\r\n readonly content: ContentAPI;\r\n readonly deposit: DepositAPI\r\n readonly games: GamesAPI;\r\n readonly geolocation: GeolocationAPI;\r\n readonly luckyWheel: LuckyWheelAPI;\r\n readonly media: MediaAPI;\r\n readonly player: PlayerAPI\r\n readonly promotions: PromotionsAPI;\r\n readonly raffle: RaffleAPI;\r\n readonly region: RegionAPI;\r\n readonly settings: SettingsAPI;\r\n readonly sport: SportAPI;\r\n readonly voucher: VoucherAPI;\r\n readonly withdraw: WithdrawAPI;\r\n\r\n constructor(cfg: SDKConfig) {\r\n this.http = new HttpClient({\r\n baseUrl: cfg.baseUrl.replace(/\\/+$/, ''),\r\n auth: { getToken: () => this.auth.getToken() }, // <-- uses this.auth (defined below)\r\n timeoutMs: cfg.timeoutMs ?? 15000,\r\n });\r\n this.ws = new SocketClient({\r\n url: cfg.socketUrl || '',\r\n publicName: 'player1',\r\n getSocketToken: cfg.getSocketToken ?? (() => storage.getSocketToken()),\r\n getUser: () => this.auth.getUser() ? { id: this.auth.getUser()!.id, name: this.auth.getUser()!.name } : null,\r\n });\r\n // pass http to JwtAuth so login can call /auth/login\r\n this.auth = new JwtAuth(this.http);\r\n this.affiliate = new AffiliateAPI(this.http);\r\n this.content = new ContentAPI(this.http);\r\n this.deposit = new DepositAPI(this.http);\r\n this.games = new GamesAPI(this.http);\r\n this.geolocation = new GeolocationAPI(this.http);\r\n this.luckyWheel = new LuckyWheelAPI(this.http);\r\n this.media = new MediaAPI(this.http);\r\n this.player = new PlayerAPI(this.http);\r\n this.promotions = new PromotionsAPI(this.http);\r\n this.raffle = new RaffleAPI(this.http);\r\n this.region = new RegionAPI(this.http);\r\n this.settings = new SettingsAPI(this.http);\r\n this.sport = new SportAPI(this.http);\r\n this.voucher = new VoucherAPI(this.http);\r\n this.withdraw = new WithdrawAPI(this.http);\r\n }\r\n}\r\n\r\nexport const createGameSDK = (cfg: SDKConfig) => new GameSDK(cfg);\r\nexport { JwtAuth, ApiError, isApiError };\r\n","// src/types/auth.ts\r\nimport type {GeoLocation } from './geo';\r\n/** Geo info as returned in `user.geo` (values may be \"undefined\" strings from the IP service) */\r\nexport interface GeoInfo {\r\n ip: string | null | 'undefined';\r\n countryCode: string | null | 'undefined';\r\n status: string; // e.g., \"fail\" | \"success\"\r\n message?: string | null; // e.g., \"invalid query\"\r\n query?: string | null; // e.g., \"undefined\"\r\n}\r\n\r\nexport interface Wallet {\r\n createdAt: string; // ISO date\r\n updatedAt: string; // ISO date\r\n id: number;\r\n name: string; // e.g., \"Main Wallet\"\r\n type: number; // 0 = main, etc.\r\n balance: number;\r\n playerId: number;\r\n}\r\n\r\nexport interface User {\r\n createdAt: string; // ISO date\r\n updatedAt: string; // ISO date\r\n id: number;\r\n username: string;\r\n name: string;\r\n lastname: string;\r\n phone: string | null; // example shows string, keep nullable for safety\r\n email: string;\r\n currencyId: string; // e.g., \"USD\"\r\n status: string; // e.g., \"active\"\r\n referralMax: number;\r\n geo?: GeoLocation; // present in example\r\n googleId: string | null; // can be null\r\n country?: string | null;\r\n city?: string | null;\r\n zipCode?: string | null;\r\n address?: string | null;\r\n dob?: string | null; // ISO date or null\r\n isOnline: boolean;\r\n avatar: number | null; // example shows number; allow null for safety\r\n parentId: number | null; // example shows 1\r\n class: number | null; // class id\r\n wallets: Wallet[]; // at least one wallet in example\r\n}\r\n\r\n/**\r\n * Response of POST /auth/login\r\n * Matches your sample: includes `token`, `socketToken`, and `user`.\r\n */\r\nexport interface AuthResponse {\r\n token: string;\r\n socketToken: string;\r\n user: User;\r\n}\r\n\r\nexport interface pinCodeResponse {\r\n message: string;\r\n token: string;\r\n}\r\nexport interface pinCodeCheckResponse {\r\n message: string;\r\n}\r\n\r\n/** ISO date string, e.g., \"2025-08-26T10:52:58.000Z\" or \"2000-09-11\" */\r\nexport type ISODateString = string;\r\n\r\n/** Same regex as backend: letters, numbers, underscore, hyphen */\r\nexport const USERNAME_REGEX = /^[a-zA-Z0-9_-]+$/;\r\n\r\n/**\r\n * createPlayerValidator\r\n * Backend: geo is a string, class defaults to 1 on server.\r\n */\r\nexport interface CreatePlayerInput {\r\n username: string; // min 4, USERNAME_REGEX\r\n name: string; // max 255\r\n lastname: string; // max 255\r\n email: string; // email, max 255\r\n password: string; // min 4\r\n currencyId: string; // min 2, max 6\r\n geo?: GeoLocation; // optional (string in V1)\r\n class?: number; // optional; server defaults to 1\r\n country?: string; // optional\r\n phone?: string; // optional\r\n zipCode?: string; // optional\r\n address?: string; // optional\r\n dob?: ISODateString; // optional\r\n recaptchaToken: string;\r\n}\r\n\r\n/**\r\n * createPlayerV2Validator\r\n * Note: promo fields can be null; geo is object; country/address/city required.\r\n * \"refferer\" is intentionally spelled to match backend.\r\n */\r\nexport interface CreatePlayerV2Input {\r\n promotionId?: number | null;\r\n promoCode?: string | null;\r\n email: string; // email, max 255\r\n username: string; // min 4, USERNAME_REGEX\r\n password: string; // min 4\r\n name: string; // max 255\r\n lastname: string; // max 255\r\n gender: string; // required (string)\r\n currencyId: string; // min 2, max 6\r\n dob: ISODateString; // required\r\n phone?: string; // optional\r\n country: string; // required\r\n refferer?: number | null; // optional, allow null (spelling matches backend)\r\n address: string; // required\r\n city: string; // required, max 100\r\n zipCode?: string; // optional\r\n geo?: GeoLocation; // optional object\r\n class?: number; // optional; server defaults to 1\r\n recaptchaToken: string;\r\n}\r\n\r\n/**\r\n * createPlayerV2Step2Validator\r\n * Minimal step: email + username + password\r\n */\r\nexport interface CreatePlayerV2Step2Input {\r\n email: string; // email, max 255\r\n username: string; // min 4, USERNAME_REGEX\r\n password: string; // min 4\r\n}\r\n\r\n/**\r\n * Signup response\r\n */\r\nexport interface SignupResponse {\r\n message: string; // e.g., \"Player created successfully\"\r\n player: User;\r\n}\r\n\r\nexport interface RegisterResponse extends SignupResponse, AuthResponse {}\r\nexport interface SignupV2ValidateResponse {\r\n message: string; // e.g., \"Player created successfully\"\r\n}\r\n\r\nexport interface GoogleProfile {\r\n id: string;\r\n email: string;\r\n verified_email: boolean;\r\n name: string;\r\n given_name: string;\r\n family_name: string;\r\n picture: string;\r\n}\r\n\r\nexport interface GoogleLoginRequest {\r\n token: string;\r\n profile: GoogleProfile;\r\n geo?: object;\r\n}\r\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -370,11 +370,29 @@ interface ContentPage {
|
|
|
370
370
|
createdAt: string;
|
|
371
371
|
updatedAt: string;
|
|
372
372
|
}
|
|
373
|
+
interface AnnouncementsResponse {
|
|
374
|
+
message: string;
|
|
375
|
+
announcements: Announcement[] | string;
|
|
376
|
+
gameAnnouncements: Announcement[] | string;
|
|
377
|
+
}
|
|
378
|
+
interface Announcement {
|
|
379
|
+
createdAt: string;
|
|
380
|
+
updatedAt: string;
|
|
381
|
+
id: number;
|
|
382
|
+
state: string;
|
|
383
|
+
title: string;
|
|
384
|
+
text: string;
|
|
385
|
+
category: string;
|
|
386
|
+
startDate: string;
|
|
387
|
+
endDate: string;
|
|
388
|
+
}
|
|
389
|
+
|
|
373
390
|
declare class ContentAPI {
|
|
374
391
|
private http;
|
|
375
392
|
constructor(http: HttpClient);
|
|
376
393
|
list(): Promise<ContentPage[]>;
|
|
377
394
|
get(slug: string): Promise<ContentPage>;
|
|
395
|
+
getAnnouncements(): Promise<AnnouncementsResponse>;
|
|
378
396
|
}
|
|
379
397
|
|
|
380
398
|
interface ChargeData {
|
|
@@ -636,6 +654,12 @@ interface GlobalFavorite {
|
|
|
636
654
|
interface Providers {
|
|
637
655
|
providers: string[];
|
|
638
656
|
}
|
|
657
|
+
interface CategoryProvider {
|
|
658
|
+
id: number;
|
|
659
|
+
name: string;
|
|
660
|
+
parentId?: number;
|
|
661
|
+
providers: string;
|
|
662
|
+
}
|
|
639
663
|
interface Lobby {
|
|
640
664
|
[key: string]: LobbyGame[];
|
|
641
665
|
}
|
|
@@ -685,7 +709,7 @@ declare class GamesAPI {
|
|
|
685
709
|
/** Requires auth: player link */
|
|
686
710
|
getLink(gameId: string): Promise<GameLinkResponse>;
|
|
687
711
|
/** Public: demo link */
|
|
688
|
-
getDemoLink(
|
|
712
|
+
getDemoLink(gameExternalId: string): Promise<GameLinkResponse>;
|
|
689
713
|
setFavorite(gameId: number, isFavorite: boolean): Promise<SetFavoriteGamesResponse>;
|
|
690
714
|
getFavorite(): Promise<FavoriteGamesResponse[]>;
|
|
691
715
|
getRecentBigWins(category: string): Promise<recentBigWinsResponse[]>;
|
|
@@ -695,6 +719,9 @@ declare class GamesAPI {
|
|
|
695
719
|
topRated: TopRated[];
|
|
696
720
|
}>;
|
|
697
721
|
getProviders(): Promise<Providers>;
|
|
722
|
+
getCategoriesProviders(): Promise<{
|
|
723
|
+
categoryProviders: CategoryProvider[];
|
|
724
|
+
}>;
|
|
698
725
|
getLobby(): Promise<Lobby[]>;
|
|
699
726
|
}
|
|
700
727
|
|
|
@@ -973,9 +1000,20 @@ declare class PlayerAPI {
|
|
|
973
1000
|
}): Promise<{
|
|
974
1001
|
message: string;
|
|
975
1002
|
}>;
|
|
1003
|
+
verifyPhoneSignup(data: PhoneVerifyProps): Promise<{
|
|
1004
|
+
message: string;
|
|
1005
|
+
}>;
|
|
1006
|
+
verifyPhoneCodeSignup(data: {
|
|
1007
|
+
verificationCode: string;
|
|
1008
|
+
verificationToken: string;
|
|
1009
|
+
}): Promise<{
|
|
1010
|
+
message: string;
|
|
1011
|
+
}>;
|
|
976
1012
|
getVerificationStatus(): Promise<VerificationStatus[]>;
|
|
977
1013
|
getAvatars(): Promise<Avatar$1[]>;
|
|
978
|
-
changeAvatar(data:
|
|
1014
|
+
changeAvatar(data: {
|
|
1015
|
+
avatarId: number;
|
|
1016
|
+
}): Promise<{
|
|
979
1017
|
message: string;
|
|
980
1018
|
avatar: Avatar$1;
|
|
981
1019
|
}>;
|
|
@@ -1193,6 +1231,16 @@ interface Currency {
|
|
|
1193
1231
|
currencyName: string;
|
|
1194
1232
|
id: number;
|
|
1195
1233
|
}
|
|
1234
|
+
interface CurrencyRates {
|
|
1235
|
+
provider: string;
|
|
1236
|
+
base: string;
|
|
1237
|
+
date: string;
|
|
1238
|
+
updatedAt: string;
|
|
1239
|
+
rates: Rates;
|
|
1240
|
+
}
|
|
1241
|
+
interface Rates {
|
|
1242
|
+
[key: string]: number;
|
|
1243
|
+
}
|
|
1196
1244
|
interface Preferences {
|
|
1197
1245
|
createdAt?: string;
|
|
1198
1246
|
updatedAt?: string;
|
|
@@ -1231,6 +1279,7 @@ declare class SettingsAPI {
|
|
|
1231
1279
|
getPreferences(): Promise<Preferences>;
|
|
1232
1280
|
updatePreferences(data: Partial<Preferences>): Promise<Preferences>;
|
|
1233
1281
|
getCurrencies(): Promise<Currency[]>;
|
|
1282
|
+
getCurrenciesRates(): Promise<CurrencyRates>;
|
|
1234
1283
|
getWebSetting(lang: string): Promise<WebSetting[]>;
|
|
1235
1284
|
getWebSettingProviders(lang: string): Promise<WebSetting[]>;
|
|
1236
1285
|
getWebSettingPin(): Promise<WebSetting[]>;
|
|
@@ -1350,13 +1399,81 @@ declare class WithdrawAPI {
|
|
|
1350
1399
|
getAnindaBankList(methodId: number): Promise<AnindaBank[]>;
|
|
1351
1400
|
}
|
|
1352
1401
|
|
|
1402
|
+
type SocketMessage<TPayload = any> = {
|
|
1403
|
+
type: string;
|
|
1404
|
+
payload?: TPayload;
|
|
1405
|
+
message?: any;
|
|
1406
|
+
};
|
|
1407
|
+
type SocketStatus = 'idle' | 'connecting' | 'connected' | 'disconnected' | 'reconnecting';
|
|
1408
|
+
type SocketEventHandler<T = any> = (data: T, raw: SocketMessage) => void;
|
|
1409
|
+
type SocketClientOptions = {
|
|
1410
|
+
/** Example: wss://socketservice.moneycloud.vip/socket/public-room/join */
|
|
1411
|
+
url: string;
|
|
1412
|
+
/** joinPublic payload name (default: "player1") */
|
|
1413
|
+
publicName?: string;
|
|
1414
|
+
/** Ping interval (ms). Default: 5000 */
|
|
1415
|
+
pingIntervalMs?: number;
|
|
1416
|
+
/** Auto reconnect on close (default: true) */
|
|
1417
|
+
autoReconnect?: boolean;
|
|
1418
|
+
/** Max reconnect delay (ms). Default: 30000 */
|
|
1419
|
+
maxReconnectDelayMs?: number;
|
|
1420
|
+
/** Provide socket token from your storage (localStorage helper, etc.) */
|
|
1421
|
+
getSocketToken?: () => string | null;
|
|
1422
|
+
/** Provide user identity when logged in */
|
|
1423
|
+
getUser?: () => {
|
|
1424
|
+
id: number;
|
|
1425
|
+
name?: string | null;
|
|
1426
|
+
} | null;
|
|
1427
|
+
};
|
|
1428
|
+
|
|
1429
|
+
declare class SocketClient {
|
|
1430
|
+
private opts;
|
|
1431
|
+
private ws;
|
|
1432
|
+
private status;
|
|
1433
|
+
private pingTimer;
|
|
1434
|
+
private reconnectTimer;
|
|
1435
|
+
private reconnectAttempt;
|
|
1436
|
+
private manualClose;
|
|
1437
|
+
private hasJoinedAfterLogin;
|
|
1438
|
+
private handlers;
|
|
1439
|
+
constructor(opts: SocketClientOptions);
|
|
1440
|
+
/** Current status useful for UI */
|
|
1441
|
+
getStatus(): SocketStatus;
|
|
1442
|
+
/** Raw socket access (optional) */
|
|
1443
|
+
getSocket(): WebSocket | null;
|
|
1444
|
+
/** Connect (idempotent) */
|
|
1445
|
+
connect(): void;
|
|
1446
|
+
/** Disconnect gracefully */
|
|
1447
|
+
disconnect(code?: number, reason?: string): void;
|
|
1448
|
+
/** Call after login (or whenever token/user changes) */
|
|
1449
|
+
onLogin(): void;
|
|
1450
|
+
/** Reset join flag (call on logout) */
|
|
1451
|
+
onLogout(): void;
|
|
1452
|
+
/** Subscribe to message type (e.g. 'happyHourStarted', 'latest-bet'). Use '*' to receive everything. */
|
|
1453
|
+
on<T = any>(type: string, handler: SocketEventHandler<T>): () => void;
|
|
1454
|
+
off<T = any>(type: string, handler: SocketEventHandler<T>): void;
|
|
1455
|
+
/** Send a typed message (SDK-side helper) */
|
|
1456
|
+
send(type: string, payload?: any): void;
|
|
1457
|
+
private emit;
|
|
1458
|
+
private sendRaw;
|
|
1459
|
+
private tryJoinAfterLogin;
|
|
1460
|
+
private startPing;
|
|
1461
|
+
private stopPing;
|
|
1462
|
+
private scheduleReconnect;
|
|
1463
|
+
private clearReconnect;
|
|
1464
|
+
private setStatus;
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1353
1467
|
interface SDKConfig {
|
|
1354
1468
|
baseUrl: string;
|
|
1355
1469
|
timeoutMs?: number;
|
|
1470
|
+
socketUrl?: string;
|
|
1471
|
+
getSocketToken?: () => string | null;
|
|
1356
1472
|
}
|
|
1357
1473
|
declare class GameSDK {
|
|
1358
1474
|
readonly http: HttpClient;
|
|
1359
1475
|
readonly auth: JwtAuth;
|
|
1476
|
+
readonly ws: SocketClient;
|
|
1360
1477
|
readonly affiliate: AffiliateAPI;
|
|
1361
1478
|
readonly content: ContentAPI;
|
|
1362
1479
|
readonly deposit: DepositAPI;
|
|
@@ -1376,4 +1493,4 @@ declare class GameSDK {
|
|
|
1376
1493
|
}
|
|
1377
1494
|
declare const createGameSDK: (cfg: SDKConfig) => GameSDK;
|
|
1378
1495
|
|
|
1379
|
-
export { ApiError, type AuthResponse, ContentAPI, type
|
|
1496
|
+
export { ApiError, type AuthResponse, ContentAPI, type CreatePlayerInput, type CreatePlayerV2Input, type CreatePlayerV2Step2Input, type GameLinkResponse, GameSDK, GamesAPI, type GeoInfo, type GoogleLoginRequest, type GoogleProfile, type ISODateString, JwtAuth, PromotionsAPI, type RegisterResponse, type SDKConfig, type SignupResponse, type SignupV2ValidateResponse, USERNAME_REGEX, type User, type Wallet, createGameSDK, isApiError, type pinCodeCheckResponse, type pinCodeResponse };
|